{"release_id":"01a1998d-9802-0000-b0f7-33a23307f4ed","chunk_id":"01a1998d-9822-79b0-9247-ae8000dad0ed","file":"BWCgCuQ6.mjs","mappings":"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AAAA;AAAA,+CAExBC,GAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2DAE7BC,GAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAE3BC,GAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEhCC,GAAwB;A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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAE7BC,GAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAEnBC,GAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAEjBC,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAEZC,GAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAEtB,MAAMC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEXC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAEbC,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAA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,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KACxP,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MAAQ,KAAQ,MA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqNV,eACU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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AAW,OACX,cAAe,EACrB,EACI,YAAa,CACX,cAAe,EACrB,EACI,iBAAkB,CAChB,cAAe,EACrB,EACI,YAAa,CACX,cAAe,EACrB,EACI,eAAgB,CACd,cAAe,EACrB,EACI,oBAAqB,CACnB,cAAe,EACrB,EACI,eAAgB,CACd,cAAe,EACrB,EACI,SAAU,CACR,cAAe,EACrB,EACI,WAAY,CACV,cAAe,EACrB,EACI,gBAAiB,CACf,cAAe,EACrB,EACI,WAAY,CACV,cAAe,EACrB,EACI,gBAAiB,CACf,cAAe,EACrB,EACI,kBAAmB,CACjB,cAAe,EACrB,EACI,uBAAwB,CACtB,cAAe,EACrB,EACI,kBAAmB,CACjB,cAAe,EACrB,EACI,UAAW,CACT,QAAW,OACX,cAAe,EACrB,EACI,YAAa,CACX,cAAe,EACrB,EACI,iBAAkB,CAChB,cAAe,EACrB,EACI,YAAa,CACX,cAAe,EACrB,EACI,cAAe,CACb,QAAW,OACX,cAAe,EACrB,EACI,gBAAiB,CACf,cAAe,EACrB,EACI,qBAAsB,CACpB,cAAe,EACrB,EACI,gBAAiB,CACf,cAAe,EACrB,EACI,WAAY,CACV,cAAe,EACrB,EACI,aAAc,CACZ,cAAe,EACrB,EACI,kBAAmB,CACjB,cAAe,EACrB,EACI,aAAc,CACZ,cAAe,EACrB,EACI,YAAa,CACX,QAAW,OACX,cAAe,EACrB,EACI,cAAe,CACb,cAAe,EACrB,EACI,mBAAoB,CAClB,cAAe,EACrB,EACI,cAAe,CACb,cAAe,EACrB,EACI,iBAAkB,CAChB,QAAW,OACX,cAAe,EACrB,EACI,mBAAoB,CAClB,cAAe,EACrB,EACI,wBAAyB,CACvB,cAAe,EACrB,EACI,mBAAoB,CAClB,cAAe,EACrB,EACI,oBAAqB,CACnB,QAAW,UAAoB,CAC7B,MAAO,EACT,EACA,cAAe,EACrB,EACI,mBAAoB,CAClB,QAAW,GACX,cAAe,GACf,SAAU,SAAkBpwQ,EAAKxmB,EAAO,CACtCA,EAAM,WAAW,mBAAmBwmB,CAAG,EACvCxmB,EAAM,WAAW,qBAAqBwmB,CAAG,CAC3C,CACN,EACI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","names":["browser","dev","is_array","index_of","includes","array_from","define_property","get_descriptor","get_descriptors","object_prototype","array_prototype","get_prototype_of","is_extensible","is_function","thing","noop","is_promise","value","run_all","arr","i","deferred","resolve","reject","promise","res","rej","fallback","lazy","to_array","n","array","element","DERIVED","EFFECT","RENDER_EFFECT","MANAGED_EFFECT","BLOCK_EFFECT","BRANCH_EFFECT","ROOT_EFFECT","BOUNDARY_EFFECT","CONNECTED","CLEAN","DIRTY","MAYBE_DIRTY","INERT","DESTROYED","REACTION_RAN","DESTROYING","EFFECT_TRANSPARENT","EAGER_EFFECT","HEAD_EFFECT","EFFECT_PRESERVED","USER_EFFECT","EFFECT_OFFSCREEN","WAS_MARKED","REACTION_IS_UPDATING","ASYNC","ERROR_VALUE","STATE_SYMBOL","LEGACY_PROPS","LOADING_ATTR_SYMBOL","STALE_REACTION","IS_XHTML","ELEMENT_NODE","TEXT_NODE","COMMENT_NODE","lifecycle_outside_component","name","async_derived_orphan","each_key_duplicate","a","b","effect_in_teardown","rune","effect_in_unowned_derived","effect_orphan","effect_update_depth_exceeded","hydration_failed","props_invalid_value","key","state_descriptors_fixed","state_prototype_fixed","state_unsafe_mutation","svelte_boundary_reset_onerror","EACH_ITEM_REACTIVE","EACH_INDEX_REACTIVE","EACH_IS_CONTROLLED","EACH_IS_ANIMATED","EACH_ITEM_IMMUTABLE","PROPS_IS_IMMUTABLE","PROPS_IS_UPDATED","PROPS_IS_BINDABLE","PROPS_IS_LAZY_INITIAL","TRANSITION_IN","TRANSITION_OUT","TRANSITION_GLOBAL","TEMPLATE_FRAGMENT","TEMPLATE_USE_IMPORT_NODE","HYDRATION_START","HYDRATION_START_ELSE","HYDRATION_START_FAILED","HYDRATION_END","HYDRATION_ERROR","UNINITIALIZED","NAMESPACE_HTML","NAMESPACE_SVG","NAMESPACE_MATHML","ATTACHMENT_KEY","hydration_mismatch","location","select_multiple_invalid_value","svelte_boundary_reset_noop","hydrating","set_hydrating","hydrate_node","set_hydrate_node","node","w.hydration_mismatch","hydrate_next","get_next_sibling","reset","next","count","skip_nodes","remove","depth","data","read_hydration_instruction","equals","safe_not_equal","safe_equals","tracing_mode_flag","empty","snapshot","skip_warning","no_tojson","clone","cloned","path","paths","original","unwrapped","copy","component_context","set_component_context","context","push","props","runes","fn","active_effect","pop","component","effects","create_user_effect","is_runes","micro_tasks","run_micro_tasks","tasks","queue_micro_task","is_flushing_sync","flush_tasks","handle_error","error","effect","active_reaction","invoke_error_boundary","e","STATUS_MASK","set_signal_status","signal","status","update_derived_status","derived","clear_marked","deps","dep","defer_effect","dirty_effects","maybe_dirty_effects","subscribe_to_store","store","run","invalidate","unsub","untrack","subscriber_queue","writable","start","stop","subscribers","set","new_value","run_queue","subscriber","update","subscribe","get","_","is_store_binding","IS_UNMOUNTED","store_get","store_name","stores","entry","mutable_source","is_synchronous_callback","v","get_store","setup_stores","cleanup","teardown","capture_store_binding","previous_is_store_binding","batches","current_batch","batch_values","last_scheduled_effect","is_processing","collected_effects","legacy_updates","flush_count","uid","Batch","#commit_callbacks","#discard_callbacks","#pending","#blocking_pending","#deferred","#roots","#dirty_effects","#maybe_dirty_effects","#skipped_branches","#decrement_queued","#blockers","#is_deferred","#is_blocked","batch","skipped","tracked","#process","infinite_loop_guard","roots","render_effects","updates","root","#traverse","reset_all","#defer_effects","t","reset_branch","flush_queued_effects","next_batch","r","#commit","flags","is_branch","is_skippable_branch","skip","is_dirty","update_effect","child","source","old_value","is_derived","old_values","is_earlier","sources","batch_value","others","s","marked","checked","mark_effects","blocking","pending_count","blocking_pending_count","flushSync","was_flushing_sync","result","e.effect_update_depth_exceeded","eager_block_effects","length","unlink_effect","ordered_effects","ancestor","j","reaction","depends_on","schedule_effect","depends","createSubscriber","version","effect_tracking","render_effect","increment","boundary","children","transform_error","Boundary","#anchor","#hydrate_open","#props","#children","#effect","#main_effect","#pending_effect","#failed_effect","#offscreen_fragment","#local_pending_count","#pending_count","#pending_count_update_queued","#effect_pending","#effect_pending_subscriber","anchor","block","comment","server_rendered_pending","serialized_error","#hydrate_failed_content","#hydrate_pending_content","#hydrate_resolved_content","#render","branch","failed","pending","fragment","create_text","#run","pause_effect","#resolve","move_effect","previous_effect","previous_reaction","previous_ctx","set_active_effect","set_active_reaction","#update_pending_count","d","internal_set","onerror","destroy_effect","did_reset","calling_on_error","w.svelte_boundary_reset_noop","e.svelte_boundary_reset_onerror","handle_error_result","transformed_error","flatten","blockers","sync","async","parent","restore","capture","blocker_promise","finish","values","unset_context","decrement_pending","increment_pending","expression","async_derived","previous_component_context","previous_batch","activate_batch","deactivate_batch","parent_derived","label","e.async_derived_orphan","should_suspend","deferreds","async_effect","handler","fulfil","p","go","user_derived","push_reaction_value","derived_safe_equal","destroy_derived_effects","get_derived_parent_effect","execute_derived","prev_active_effect","update_reaction","update_derived","increment_write_version","is_destroying_effect","freeze_derived_effects","remove_reactions","destroy_effect_children","unfreeze_derived_effects","eager_effects","eager_effects_deferred","stack","state","initial_value","immutable","trackable","should_proxy","untracking","current_sources","e.state_unsafe_mutation","proxy","updated_during_traversal","mark_reactions","untracked_writes","set_untracked_writes","flush_eager_effects","reactions","not_dirty","prototype","is_proxied_array","parent_version","update_version","with_parent","set_update_version","prop","descriptor","e.state_descriptors_fixed","target","receiver","exists","has","other_s","ls","own_keys","e.state_prototype_fixed","get_proxied_value","is","$window","$document","is_firefox","first_child_getter","next_sibling_getter","init_operations","element_prototype","node_prototype","text_prototype","get_first_child","is_text","text","merge_text_nodes","first_child","first","sibling","next_sibling","last_sibling","clear_text_content","should_defer_append","create_element","tag","namespace","autofocus","dom","body","remove_textarea_child","listening_to_form_reset","add_form_reset_listener","evt","without_reactive_context","listen_to_event_and_reset_event","event","on_reset","prev","validate_effect","e.effect_orphan","e.effect_in_unowned_derived","e.effect_in_teardown","push_effect","parent_effect","parent_last","create_effect","type","user_effect","defer","user_pre_effect","component_root","options","template_effect","deferred_template_effect","managed","execute_effect_teardown","previously_destroying_effect","set_is_destroying_effect","remove_dom","controller","destroy_block_effect_children","removed","remove_effect_dom","transitions","transition","end","callback","destroy","pause_children","remaining","check","local","transparent","resume_effect","resume_children","is_updating_effect","new_deps","skipped_deps","write_version","read_version","dependencies","dependency","schedule_possible_effect_self_invalidation","previous_deps","previous_skipped_deps","previous_untracked_writes","previous_sources","previous_untracking","previous_update_version","is_fork","remove_reaction","index","new_length","start_index","was_updating_effect","DEV","tick","settled","destroyed","depends_on_old_values","should_connect","is_new","reconnect","deep_read_state","deep_read","visited","proto","descriptors","is_capture_event","DELEGATED_EVENTS","can_delegate_event","event_name","ATTRIBUTE_ALIASES","normalize_attribute","PASSIVE_EVENTS","is_passive_event","RAW_TEXT_ELEMENTS","is_raw_text_element","event_symbol","all_registered_events","root_event_handles","replay_events","create_event","target_handler","handle_event_propagation","passive","delegated","delegate","events","last_propagated_event","handler_element","owner_document","current_target","path_idx","handled_at","at_idx","handler_idx","throw_error","other_errors","parent_element","policy","html","create_trusted_html","create_fragment_from_html","elem","assign_nodes","from_html","content","is_fragment","use_import_node","has_start","from_namespace","ns","wrapped","from_svg","frag","append","props_id","id","should_intro","set_should_intro","set_text","str","mount","_mount","hydrate","was_hydrating","previous_hydrate_node","instance","line","e.hydration_failed","listeners","Component","intro","transformError","unmount","anchor_node","ctx","registered_events","event_handle","counts","mounted_components","BranchManager","#batches","#onscreen","#offscreen","#outroing","#transition","onscreen","offscreen","k","on_destroy","#discard","keys","PENDING","THEN","CATCH","await_block","get_input","pending_fn","then_fn","catch_fn","branches","input","mismatch","resolved","if_block","elseif","marker","update_branch","has_branch","NAN","get_key","render_fn","pause_effects","to_destroy","controlled_anchor","group","groups","destroy_effects","fast_path","parent_node","preserved_effects","offscreen_anchor","each","get_collection","fallback_fn","items","is_controlled","each_array","collection","first_run","commit","reconcile","move","discard","is_else","item","create_item","e.each_key_duplicate","skip_to_branch","is_animated","current","seen","to_animate","matched","stashed","link","destroy_length","dest","next_node","get_value","svg","mathml","last","wrapper","snippet","get_snippet","args","get_component","hydration_start_node","server_had_component","client_has_component","now","raf","run_tasks","task","loop","fulfill","dispatch_event","css_property_to_camelcase","style","parts","word","css_to_keyframe","css","keyframe","part","property","formatted_property","linear","animation_effect_override","set_animation_effect_override","animation","get_fn","get_params","nodes","from","to","original_styles","animate","position","width","height","transform","is_intro","is_outro","is_both","is_global","direction","current_options","inert","overflow","outro","get_options","counterpart","t2","on_finish","aborted","o","delay","easing","keyframes","styles","get_t","t1","delta","duration","needs_overflow_hidden","time","get_tag","is_svg","get_namespace","next_tag","child_anchor","head","hash","head_anchor","action","payload","inited","attach","f","clsx","_clsx","whitespace","to_class","directives","classname","len","append_styles","important","separator","to_css_name","to_style","new_style","normal_styles","important_styles","in_str","in_apo","in_comment","reserved_names","name_index","c","set_class","is_html","prev_classes","next_classes","next_class_name","is_present","update_styles","priority","set_style","prev_styles","next_styles","next_style_attr","select_option","select","mounting","w.select_multiple_invalid_value","option","get_option_value","option_value","init_select","observer","bind_select_value","is_reset","query","selected_option","CLASS","STYLE","IS_CUSTOM_ELEMENT","IS_HTML","LINK_TAG","INPUT_TAG","OPTION_TAG","SELECT_TAG","PROGRESS_TAG","remove_input_defaults","already_removed","remove_defaults","set_attribute","set_value","attributes","get_attributes","set_checked","set_selected","selected","attribute","get_setters","set_attributes","css_hash","should_remove_defaults","is_custom_element","preserve_attribute_case","is_hydrating_custom_element","is_option_element","setters","prev_value","prefix","opts","event_handle_key","is_delegated","handle","is_default","use_default","previous","attribute_effect","is_select","symbol","setters_cache","cache_key","element_proto","bind_value","is_numberlike_input","to_number","bind_group","inputs","group_index","is_checkbox","binding_group","get_binding_group_value","hydration_input","bind_checked","__value","ResizeObserverSingleton","#listeners","#observer","#options","listener","#getObserver","entries","resize_observer_border_box","bind_element_size","is_bound_this","bound_value","element_or_component","bind_this","get_parts","component_effect","old_parts","original_teardown","bind_property","bindable","fallback_value","fallback_dirty","get_fallback","setter","is_entry_props","is_store_sub","e.props_invalid_value","getter","legacy_parent","mutation","overridden","asClassComponent","Svelte4Component","#events","#instance","add_source","cb","onMount","e.lifecycle_outside_component","onDestroy","HttpError$1","Redirect","SvelteKitError","message","normalize_path","trailing_slash","decode_pathname","pathname","decode_params","params","strip_hash","href","make_trackable","url","search_params_callback","allow_hash","obj","param","rest","tracked_url_properties","buffer","text_decoder","base64_decode","encoded","binary","bytes","native_fetch","init","cache","build_selector","initial_fetch","resource","selector","script","ttl","subsequent_fetch","cached","param_pattern","parse_route_id","get_route_segments","segment","rest_match","optional_match","escape","code","match","is_optional","is_rest","matcher","affects_path","route","exec","matchers","values_needing_match","buffered","next_param","next_value","basic_param_pattern","resolve_route","segments","has_id_trailing_slash","optional","param_value","parse","server_loads","dictionary","layouts_with_server_load","leaf","layouts","errors","pattern","create_layout_loader","create_leaf_loader","uses_server_data","stringify","base","assets","pathname_prefix","SNAPSHOT_KEY","SCROLL_KEY","STATES_KEY","PAGE_URL_KEY","HISTORY_INDEX","NAVIGATION_INDEX","PRELOAD_PRIORITIES","origin","resolve_url","baseURI","baseTags","scroll_state","link_option","levels","find_anchor","get_link_info","uses_hash_router","external","is_external_url","download","get_router_options","keepfocus","noscroll","preload_code","preload_data","reload","replace_state","el","get_option_state","notifiable_store","ready","notify","val","updated_listener","create_updated_store","interval","timeout","updated","hash_routing","load_css","decode64","string","binaryString","asciiToBinary","arraybuffer","dv","KEY_STRING","output","accumulatedBits","UNDEFINED","HOLE","POSITIVE_INFINITY","NEGATIVE_INFINITY","NEGATIVE_ZERO","SPARSE","serialized","revivers","unflatten","parsed","hydrated","standalone","reviver","map","object","TypedArrayConstructor","typedArray","base64","temporalName","idx","valid_layout_exports","valid_layout_server_exports","compact","INVALIDATED_PARAM","TRAILING_SLASH_PARAM","get_status","HttpError","get_message","page","navigating","is_legacy","placeholder_url","$.state","#form","#error","#status","#current","new_page","DATA_SUFFIX","HTML_DATA_SUFFIX","add_data_suffix","noop_span","noop_span_context","svelte","svelte.untrack","ICON_REL_ATTRIBUTES","rendering_error","scroll_positions","storage.get","snapshots","update_scroll_positions","clear_onward_history","current_history_index","current_navigation_index","native_navigation","replace","update_service_worker","registration","routes","default_layout_loader","default_error_loader","container","app","invalidated","components","load_cache","discard_load_cache","reroute_cache","before_navigate_callbacks","on_navigate_callbacks","after_navigate_callbacks","started","autoscroll","is_navigating","hash_navigating","has_navigated","force_invalidation","token","preload_tokens","pending_invalidate","query_map","_app","_target","scroll","restore_scroll","_hydrate","navigate","decode_hash","_start_router","_invalidate","include_load_functions","reset_page_state","nav_token","intent","get_navigation_intent","prev_state","navigation_result","load_route","_goto","reset_invalidation","capture_snapshot","restore_snapshot","persist_state","storage.set","redirect_count","query_keys","push_invalidated","svelte.tick","_preload_data","preload","_preload_code","load","initialize","nav","navigation","get_navigation_result_from_branch","form","slash","branch_node","clone_page","data_changed","load_node","loader","server_data_node","is_tracking","uses","load_input","resolve_fetch_url","requested","has_changed","parent_changed","route_changed","url_changed","search_params_changed","tracked_params","create_data_node","diff_search_params","old_url","new_url","changed","new_values","preload_error","invalidating","loaders","server_data","get_page_key","parent_invalid","invalid_server_nodes","invalid","load_data","handled_error","load_root_error_page","server_data_nodes","branch_promises","err","error_load","load_nearest_error_page","server_fallback","root_layout","root_error","get_rerouted_url","rerouted","tmp","get_url_path","_before_navigate","should_block","create_navigation","cancellable","popped","accept","prev_token","previous_history_index","previous_navigation_index","change","load_cache_fork","commit_promise","after_navigate","fork","svelte.settled","activeElement","deep_linked","get_id","changed_focus","reset_focus","setup_preload","mousemove_timeout","current_a","current_priority","tap","interacted","same_url","add_navigation_callback","callbacks","afterNavigate","beforeNavigate","goto","invalidateAll","preloadData","pushState","replaceState","applyAction","set_nearest_error_page","nonhash","same_pathname","current_hash","update_url","submitter","event_form","resetting_focus","history_index","navigation_index","is_hash_change","node_ids","server_route","parsed_route","deserialize_uses","data_url","fetcher","reader","deserialize","devalue.unflatten","done","split","x","y","history_state","tabindex","selection","ranges","target_scroll","complete","second","PUBLIC_VERSION","_page","_navigating","client_page","client_navigating","__rest","__awaiter","thisArg","_arguments","P","generator","adopt","fulfilled","step","rejected","IcebergError","buildUrl","baseUrl","buildAuthHeaders","auth","createFetchClient","fetchFn","method","headers","authHeaders","isJson","errBody","errorDetail","namespaceToPath","NamespaceOperations","client","metadata","request","namespaceToPath2","TableOperations","accessDelegation","response","IcebergRestCatalog","dist","parseCookie","stringifyCookie","stringifySetCookie","parseSetCookie","cookieNameRegExp","cookieValueRegExp","domainValueRegExp","pathValueRegExp","maxAgeRegExp","__toString","NullObject","C","dec","decode","eqIdx","eqIndex","endIdx","endIndex","valueSlice","cookie","enc","cookieStrings","_name","_val","_opts","isDate","setCookie","attr","date","sameSite","min","max","cubic_out","split_css_unit","fade","fly","opacity","target_opacity","od","x_value","x_unit","y_value","y_unit","u","slide","axis","primary_property","primary_property_value","secondary_properties","capitalized_secondary_properties","padding_start_value","padding_end_value","margin_start_value","margin_end_value","border_width_start_value","border_width_end_value","scale","sd","_t","cubicOut","expoOut","quintOut","devalue.parse","client_app","enhance","form_element","submit","fallback_callback","shouldInvalidateAll","handle_submit","enctype","form_data","cancelled","read_methods","set_like_methods","SvelteSet","#sources","#version","#size","#update_version","#init","#source","set_proto","deleted","SvelteMap","callbackfn","this_arg","#read_all","prev_res","v_reactions","needs_version_increase","getStores","browser_stores","flip","ox","oy","zoom","get_zoom","sx","sy","fx","fy","tx","ty","dx","dy","dsx","dsy","w","m","g","h","D","F","G","W","O","l","S","V","T","U","N","z","I","B","E","M","A","R","H","L","q","X","Y","Q","K","J","module","global","factory","this","workerString","blob","supportedMIMETypes","utils","dataURI","byteString","mimeString","ab","ia","ref","imageData","toType","quality","canvas","images","gifHeight","gifWidth","header","decodeBuffer","heic2any","gifInterval","multiple","otherImageType","imageDataArr","blobs","dataURIs","resultingGif","REVISION","MOUSE","TOUCH","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","VSMShadowMap","FrontSide","BackSide","DoubleSide","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","MaterialBlending","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","ConstantColorFactor","OneMinusConstantColorFactor","ConstantAlphaFactor","OneMinusConstantAlphaFactor","NeverDepth","AlwaysDepth","LessDepth","LessEqualDepth","EqualDepth","GreaterEqualDepth","GreaterDepth","NotEqualDepth","MultiplyOperation","MixOperation","AddOperation","NoToneMapping","LinearToneMapping","ReinhardToneMapping","CineonToneMapping","ACESFilmicToneMapping","CustomToneMapping","AgXToneMapping","NeutralToneMapping","AttachedBindMode","DetachedBindMode","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","CubeUVReflectionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipmapNearestFilter","NearestMipMapNearestFilter","NearestMipmapLinearFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipmapNearestFilter","LinearMipMapNearestFilter","LinearMipmapLinearFilter","LinearMipMapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedInt248Type","UnsignedInt5999Type","UnsignedInt101111Type","AlphaFormat","RGBFormat","RGBAFormat","DepthFormat","DepthStencilFormat","RedFormat","RedIntegerFormat","RGFormat","RGIntegerFormat","RGBIntegerFormat","RGBAIntegerFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC1_Format","RGB_ETC2_Format","RGBA_ETC2_EAC_Format","R11_EAC_Format","SIGNED_R11_EAC_Format","RG11_EAC_Format","SIGNED_RG11_EAC_Format","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","RGBA_BPTC_Format","RGB_BPTC_SIGNED_Format","RGB_BPTC_UNSIGNED_Format","RED_RGTC1_Format","SIGNED_RED_RGTC1_Format","RED_GREEN_RGTC2_Format","SIGNED_RED_GREEN_RGTC2_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","InterpolateBezier","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","NormalAnimationBlendMode","AdditiveAnimationBlendMode","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","BasicDepthPacking","RGBADepthPacking","RGBDepthPacking","RGDepthPacking","TangentSpaceNormalMap","ObjectSpaceNormalMap","NoColorSpace","SRGBColorSpace","LinearSRGBColorSpace","LinearTransfer","SRGBTransfer","NoNormalPacking","NormalRGPacking","NormalGAPacking","ZeroStencilOp","KeepStencilOp","ReplaceStencilOp","IncrementStencilOp","DecrementStencilOp","IncrementWrapStencilOp","DecrementWrapStencilOp","InvertStencilOp","NeverStencilFunc","LessStencilFunc","EqualStencilFunc","LessEqualStencilFunc","GreaterStencilFunc","NotEqualStencilFunc","GreaterEqualStencilFunc","AlwaysStencilFunc","NeverCompare","LessCompare","EqualCompare","LessEqualCompare","GreaterCompare","NotEqualCompare","GreaterEqualCompare","AlwaysCompare","StaticDrawUsage","DynamicDrawUsage","StreamDrawUsage","StaticReadUsage","DynamicReadUsage","StreamReadUsage","StaticCopyUsage","DynamicCopyUsage","StreamCopyUsage","GLSL1","GLSL3","WebGLCoordinateSystem","WebGPUCoordinateSystem","TimestampQuery","InterpolationSamplingType","InterpolationSamplingMode","Compatibility","arrayNeedsUint32","TYPED_ARRAYS","getTypedArray","isTypedArray","createElementNS","createCanvasElement","_cache","_setConsoleFunction","setConsoleFunction","getConsoleFunction","log","enhanceLogMessage","stackTrace","warn","warnOnce","yieldToMain","probeAsync","gl","probe","ReversedDepthFuncs","EventDispatcher","listenerArray","_lut","_seed","DEG2RAD","RAD2DEG","generateUUID","d0","d1","d2","d3","clamp","euclideanModulo","mapLinear","a1","a2","b1","b2","inverseLerp","lerp","damp","lambda","dt","pingpong","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","seededRandom","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","floorPowerOfTwo","setQuaternionFromProperEuler","order","cos","sin","c2","s2","c13","s13","c1_3","s1_3","c3_1","s3_1","denormalize","normalize","MathUtils","_Vector2","scalar","minVal","maxVal","denominator","theta","alpha","v1","v2","offset","center","angle","Vector2","Quaternion","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dot","quaternion","euler","c1","c3","s1","s3","halfAngle","te","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","vFrom","vTo","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","qa","theta1","theta2","r1","r2","_Vector3","_quaternion$5","vx","vy","vz","qx","qy","qz","qw","tz","camera","ax","ay","az","bx","by","bz","planeNormal","_vector$c","normal","dz","radius","phi","sinPhiRadius","sz","Vector3","_Matrix3","n11","n12","n13","n21","n22","n23","n31","n32","n33","me","xAxis","yAxis","zAxis","ae","be","a11","a12","a13","a21","a22","a23","a31","a32","a33","b11","b12","b13","b21","b22","b23","b31","b32","b33","t11","t12","t13","det","detInv","matrix4","rotation","cx","cy","_m3","matrix","Matrix3","LINEAR_REC709_TO_XYZ","XYZ_TO_LINEAR_REC709","createColorManagement","ColorManagement","color","sourceColorSpace","targetColorSpace","SRGBToLinear","LinearToSRGB","colorSpace","colorSpaces","targetMatrix","REC709_PRIMARIES","REC709_LUMINANCE_COEFFICIENTS","D65","_canvas","ImageUtils","image","_sourceId","Source","meta","isRootObject","serializeImage","_textureId","_tempVec3","Texture","mapping","wrapS","wrapT","magFilter","minFilter","format","anisotropy","newValue","currentValue","uv","_Vector4","xx","yy","zz","xy","xz","yz","Vector4","RenderTarget","texture","il","WebGLRenderTarget","DataArrayTexture","layerIndex","WebGLArrayRenderTarget","Data3DTexture","WebGL3DRenderTarget","_Matrix4","n14","n24","n34","n41","n42","n43","n44","scaleX","_v1$7","scaleY","scaleZ","af","bf","ce","cf","de","df","ac","ad","bc","bd","_zero","_one","eye","up","_z","_x","_y","a14","a24","a34","a41","a42","a43","a44","b14","b24","b34","b41","b42","b43","b44","t21","t22","t23","t3","t4","t5","t6","t7","t8","t9","t10","scaleXSq","scaleYSq","scaleZSq","yx","zx","zy","x2","y2","z2","wx","wy","wz","_m1$2","invSX","invSY","invSZ","left","right","top","bottom","near","far","coordinateSystem","reversedDepth","Matrix4","_matrix$2","_quaternion$4","Euler","newOrder","Layers","layer","layers","_object3DId","_v1$6","_q1","_m1$1","_position$4","_scale$3","_quaternion$3","_xAxis","_yAxis","_zAxis","_addedEvent","_removedEvent","_childaddedEvent","_childremovedEvent","Object3D","onRotationChange","onQuaternionChange","distance","vector","pivot","px","py","pz","force","updateParents","updateChildren","info","serialize","library","parameters","shapes","shape","uuids","geometries","extractFromCache","materials","textures","skeletons","animations","recursive","_moveEvent","WebXRController","Group","inputSource","hand","inputjoint","frame","referenceSpace","inputPose","gripPose","handPose","targetRay","grip","jointPose","joint","indexTip","thumbTip","distanceToPinch","threshold","_colorKeywords","_hslA","_hslB","hue2rgb","Color$1","hex","handleAlpha","size","_color","hue","saturation","lightness","color1","color2","Color","FogExp2","density","Fog","Scene","_v0$2","_v1$5","_v2$4","_v3$2","_vab","_vac","_vbc","_vap","_vbp","_vcp","_v40","_v41","_v42","Triangle","targetLengthSq","point","dot00","dot01","dot02","dot11","dot12","denom","invDenom","p1","p2","p3","v3","i1","i2","i3","barycoord","points","i0","triangle","box","d4","vc","d5","d6","vb","va","Box3","_vector$b","halfSize","precise","geometry","positionAttribute","_box$4","sphere","plane","_center","_extents","_v0$1","_v1$4","_v2$3","_f0","_f1","_f2","axes","satForAxes","_triangleNormal","_points","json","_testAxis","v0","extents","p0","_tables","_generateTables","floatView","uint32View","baseTable","shiftTable","mantissaTable","exponentTable","offsetTable","toHalfFloat","fromHalfFloat","DataUtils","_vector$a","_vector2$1","_id$2","BufferAttribute","itemSize","normalized","index1","index2","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float16BufferAttribute","Float32BufferAttribute","_box$3","_v1$3","_v2$2","Sphere","optionalCenter","maxRadiusSq","radiusSum","deltaLengthSq","lengthSq","_id$1","_m1","_obj","_offset","_box$2","_boxMorphTargets","_vector$9","BufferGeometry","indirect","indirectOffset","materialIndex","normalMatrix","tangent","morphAttributesPosition","morphAttribute","morphTargetsRelative","jl","normalAttribute","uvAttribute","tangentAttribute","tan1","tan2","vA","vB","vC","uvA","uvB","uvC","sdir","tdir","handleTriangle","tmp2","n2","handleVertex","pA","pB","pC","nA","nB","nC","normals","convertBufferAttribute","indices","array2","geometry2","newAttribute","morphAttributes","morphArray","hasMorphAttributes","attributeArray","boundingSphere","boundingBox","InterleavedBuffer","stride","interleavedBuffer","ib","_vector$8","InterleavedBufferAttribute","_materialId","Material","srcPlanes","dstPlanes","SpriteMaterial","_geometry","_intersectPoint","_worldScale","_mvPosition","_alignedPosition","_rotatedPosition","_viewWorldMatrix","_vA$1","_vB$1","_vC$1","_uvA","_uvB","_uvC","Sprite","material","float32Array","raycaster","intersects","transformVertex","intersect","vertexPosition","mvPosition","_v1$2","_v2$1","LOD","level","hysteresis","removedElements","levelDistance","_vector$7","_segCenter","_segDir","_diff","_edge1","_edge2","_normal$1","Ray","ray","directionDistance","optionalPointOnRay","optionalPointOnSegment","segExtent","a01","b0","s0","sqrDist","extDet","invDet","tca","radius2","thc","t0","distToPoint","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","backfaceCulling","DdN","sign","DdQxE2","DdE1xQ","QdN","MeshBasicMaterial","_inverseMatrix$3","_ray$3","_sphere$6","_sphereHitAt","_vA","_vB","_vC","_tempA","_morphA","_intersectionPoint","_intersectionPointWorld","Mesh","ml","morphPosition","morphInfluences","influence","matrixWorld","rayLocalSpace","intersection","uv1","drawRange","groupMaterial","checkGeometryIntersection","checkIntersection$1","face","_baseVector","_skinIndex","_skinWeight","_vector4","_matrix4","_vertex","_sphere$5","_inverseMatrix$2","_ray$2","SkinnedMesh","skeleton","bindMatrix","skinWeight","weight","boneIndex","Bone","DataTexture","_offsetMatrix","_identityMatrix","Skeleton","bones","boneInverses","inverse","bone","boneMatrices","boneTexture","uuid","boneInverse","InstancedBufferAttribute","meshPerAttribute","_instanceLocalMatrix","_instanceWorldMatrix","_instanceIntersects","_box3","_identity","_mesh$1","_sphere$4","InstancedMesh","objectInfluences","dataIndex","raycastTimes","instanceId","morphInfluencesSum","morphBaseInfluence","_vector1","_vector2","_normalMatrix","Plane","constant","inverseNormalLength","clampToLine","startSign","endSign","optionalNormalMatrix","referencePoint","_sphere$3","_defaultSpriteCenter","_vector$6","Frustum","p4","p5","planes","frustum","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","sprite","negRadius","_projScreenMatrix$1","_frustum$1","FrustumArray","cameraArray","ascIdSort","sortOpaque","sortTransparent","MultiDrawRenderList","pool","list","_matrix$1","_whiteColor","_frustum","_frustumArray","_box$1","_sphere$2","_vector$5","_forward$1","_temp","_renderList","_mesh","_batchIntersects","copyAttributeData","src","targetOffset","vertexCount","copyArrayContents","BatchedMesh","maxInstanceCount","maxVertexCount","maxIndexCount","matricesArray","matricesTexture","indirectArray","indirectTexture","colorsArray","colorsTexture","reference","attributeName","srcAttribute","dstArray","dstAttribute","indexArray","batchGeometry","instanceInfo","geometryId","geometryInfoList","func","drawId","reservedVertexCount","reservedIndexCount","geometryInfo","hasIndex","dstIndex","srcIndex","vertexStart","indexStart","nextVertexStart","nextIndexStart","elementDelta","iv","visible","availableInstanceIds","multiDrawCounts","multiDrawStarts","validRanges","oldGeometry","renderer","scene","bytesPerElement","multiDrawMultiplier","perObjectFrustumCulled","multiDrawCount","culled","customSort","shadowCamera","depthMaterial","LineBasicMaterial","_vStart","_vEnd","_inverseMatrix$1","_ray$1","_sphere$1","_intersectPointOnRay","_intersectPointOnSegment","Line","lineDistances","localThreshold","localThresholdSq","checkIntersection","thresholdSq","_start","_end","LineSegments","LineLoop","PointsMaterial","_inverseMatrix","_ray","_sphere","_position$3","Points","testPoint","rayPointDistanceSq","intersectPoint","VideoTexture","video","scope","updateVideo","VideoFrameTexture","FramebufferTexture","CompressedTexture","mipmaps","CompressedArrayTexture","CompressedCubeTexture","CubeTexture","CanvasTexture","HTMLTexture","DepthTexture","CubeDepthTexture","ExternalTexture","sourceTexture","BoxGeometry","widthSegments","heightSegments","depthSegments","vertices","uvs","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","iy","ix","CapsuleGeometry","capSegments","radialSegments","halfHeight","capArcLength","cylinderPartLength","totalArcLength","numVerticalSegments","verticesPerRow","vertex","currentArcLength","profileY","profileRadius","normalYComponent","segmentProgress","uOffset","sinTheta","cosTheta","prevIndexRow","i4","CircleGeometry","thetaStart","thetaLength","CylinderGeometry","radiusTop","radiusBottom","openEnded","generateTorso","generateCap","slope","indexRow","centerIndexStart","centerIndexEnd","ConeGeometry","PolyhedronGeometry","detail","vertexBuffer","uvBuffer","subdivide","applyRadius","generateUVs","getVertexByIndex","subdivideFace","cols","aj","bj","rows","pushVertex","azimuth","inclination","correctUVs","correctSeam","centroid","azi","correctUV","DodecahedronGeometry","_v0","_v1$1","_normal","_triangle","EdgesGeometry","thresholdAngle","precision","thresholdDot","indexAttr","positionAttr","indexCount","indexArr","vertKeys","hashes","edgeData","jNext","vecHash0","vecHash1","reverseHash","index0","Curve","optionalTarget","divisions","lengths","sum","arcLengths","targetArcLength","comparison","lengthBefore","segmentLength","segmentFraction","pt1","pt2","closed","tangents","binormals","vec","mat","EllipseCurve","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","twoPi","deltaAngle","samePoints","ArcCurve","aRadius","CubicPoly","c0","x3","tension","dt0","dt1","dt2","CatmullRomCurve3","curveType","intPoint","pow","CatmullRom","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","QuadraticBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","CubicBezier","CubicBezierCurve","CubicBezierCurve3","LineCurve","LineCurve3","QuadraticBezierCurve","QuadraticBezierCurve3","SplineCurve","Curves","CurvePath","curve","startPoint","endPoint","lineType","curveLengths","diff","lens","sums","curves","resolution","pts","aCPx","aCPy","aCP1x","aCP1y","aCP2x","aCP2y","npts","firstPoint","lastPoint","Shape","Path","holesPts","hole","earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","invSize","eliminateHoles","maxX","maxY","earcutLinked","clockwise","signedArea","insertNode","removeNode","filterPoints","again","area","ear","pass","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangleExceptFirst","minZ","zOrder","maxZ","locallyInside","isValidDiagonal","splitPolygon","queue","getLeftmost","compareXYSlope","eliminateHole","aSlope","bSlope","bridge","findHoleBridge","bridgeReverse","hx","hy","mx","my","tanMin","pointInTriangle","tan","sectorContainsSector","sortLinked","numMerges","inSize","tail","pSize","qSize","leftmost","intersectsPolygon","middleInside","q1","q2","o1","o2","o3","o4","onSegment","num","inside","createNode","an","bp","Earcut","ShapeUtils","contour","holes","faces","removeDupEndPts","addContour","holeIndex","ExtrudeGeometry","verticesArray","uvArray","addShape","placeholder","curveSegments","steps","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","extrudePath","uvgen","WorldUVGenerator","extrudePts","extrudeByPath","splineTube","binormal","position2","isClosed","shapePoints","hl","ahole","mergeOverlappingPoints","THRESHOLD_SQ","prevPos","currentIndex","currentPos","distSq","scalingFactorSqrt","thresholdSqScaled","numHoles","scalePt2","pt","vlen","getBevelVec","inPt","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","ptNextShift_x","ptNextShift_y","sf","v_trans_lensq","direction_eq","contourMovements","holesMovements","oneHoleMovements","verticesMovements","contractedContourVertices","expandedHoleVertices","bs","vert","oneHoleVertices","flen","buildLidFaces","buildSideFaces","f3","layeroffset","sidewalls","sl","slen1","slen2","f4","addVertex","nextIndex","addUV","vector2","toJSON$1","geometryShapes","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","IcosahedronGeometry","LatheGeometry","phiStart","phiLength","initNormals","inverseSegments","curNormal","prevNormal","OctahedronGeometry","PlaneGeometry","width_half","height_half","segment_width","segment_height","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","radiusStep","thetaSegmentLevel","ShapeGeometry","indexOffset","shapeVertices","shapeHoles","shapeHole","toJSON","SphereGeometry","thetaEnd","grid","verticesRow","TetrahedronGeometry","TorusGeometry","tube","tubularSegments","arc","TorusKnotGeometry","P1","P2","calculatePositionOnCurve","cu","su","quOverP","cs","TubeGeometry","frames","generateBufferData","generateSegment","generateIndices","WireframeGeometry","edges","ol","isUniqueEdge","hash1","hash2","Geometries","ShadowMaterial","cloneUniforms","isThreeObject","clonedProperty","mergeUniforms","uniforms","merged","cloneUniformsGroups","getUnlitUniformColorSpace","currentRenderTarget","UniformsUtils","default_vertex","default_fragment","ShaderMaterial","extensions","RawShaderMaterial","MeshStandardMaterial","MeshPhysicalMaterial","reflectivity","MeshPhongMaterial","MeshToonMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshDepthMaterial","MeshDistanceMaterial","MeshMatcapMaterial","LineDashedMaterial","convertArray","getKeyframeOrder","times","compareTime","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","subclip","sourceClip","startFrame","endFrame","fps","clip","tracks","track","valueSize","minStartTime","makeClipAdditive","targetClip","referenceFrame","referenceClip","numTracks","referenceTime","referenceTrack","referenceTrackType","targetTrack","referenceOffset","referenceValueSize","targetValueSize","lastIndex","referenceValue","startIndex","interpolant","numTimes","valueStart","valueEnd","AnimationUtils","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","t1global","mid","CubicInterpolant","iPrev","iNext","tPrev","tNext","halfDt","o0","oP","oN","wP","wN","ppp","sP","sN","LinearInterpolant","offset1","offset0","weight1","weight0","DiscreteInterpolant","BezierInterpolant","settings","inTangents","outTangents","tangentStride","outTangentOffset","c0x","c0y","inTangentOffset","c1x","c1y","oneMinusS","oneMinusS2","oneMinusS3","iter","dbx","KeyframeTrack","interpolation","trackType","factoryMethod","timeOffset","timeScale","startTime","endTime","nKeys","valid","prevTime","currTime","smoothInterpolation","writeIndex","keep","timeNext","offsetP","offsetN","readOffset","writeOffset","TypedKeyframeTrack","BooleanKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","QuaternionLinearInterpolant","QuaternionKeyframeTrack","StringKeyframeTrack","VectorKeyframeTrack","AnimationClip","blendMode","jsonTracks","frameTime","parseKeyframeTrack","clipTracks","morphTargetSequence","noLoop","numMorphTargets","objectOrClipArray","clipArray","morphTargets","animationToMorphTargets","morphTarget","animationMorphTargets","clips","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","morphTargetNames","morphTargetName","animationKey","boneName","getTrackTypeForValueTypeName","typeName","Cache","file","isBlobURL","urlString","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","handlers","regex","DefaultLoadingManager","Loader","manager","crossOrigin","resourcePath","requestHeader","loading","FileLoader","req","mimeType","responseType","contentLength","total","lengthComputable","loaded","stream","readData","decoder","AnimationLoader","CompressedTextureLoader","loadTexture","texDatas","_loading","ImageLoader","onImageLoad","removeEventListeners","onImageError","CubeTextureLoader","urls","DataTextureLoader","texData","TextureLoader","Light","intensity","HemisphereLight","skyColor","groundColor","_projScreenMatrix","_lightPositionWorld","_lookTarget","LightShadow","light","shadowMatrix","viewportIndex","_position$2","_quaternion$2","_scale$2","Camera","_v3$1","_minTarget","_maxTarget","PerspectiveCamera","fov","aspect","focalLength","vExtentSlope","minTarget","maxTarget","fullWidth","fullHeight","view","skew","SpotLightShadow","SpotLight","penumbra","decay","power","PointLightShadow","PointLight","OrthographicCamera","scaleW","scaleH","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","SphericalHarmonics3","coefficients","coeff","sh","shBasis","LightProbe","MaterialLoader","getTexture","uniform","normalScale","materialLib","LoaderUtils","InstancedBufferGeometry","BufferGeometryLoader","interleavedBufferMap","arrayBufferMap","getInterleavedBuffer","getArrayBuffer","arrayBuffer","bufferAttribute","bufferAttributeConstr","_customGeometries","ObjectLoader","hasImages","geometryClass","bufferGeometryLoader","loadImage","deserializeImage","imageArray","currentUrl","deserializedImage","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","instanceMatrix","instanceColor","objectAnimations","_errorMap","ImageBitmapLoader","imageBitmap","fetchOptions","_context","AudioContext","AudioLoader","bufferCopy","decodeUrl","audioBuffer","handleError","_eyeRight","_eyeLeft","_projectionMatrix","StereoCamera","eyeSepHalf","eyeSepOnProjection","ymax","xmin","xmax","CubeCamera","renderTarget","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","cameras","activeMipmapLevel","currentActiveCubeFace","currentActiveMipmapLevel","currentXrEnabled","generateMipmaps","reversedDepthBuffer","ArrayCamera","Timer","document","handleVisibilityChange","timescale","timestamp","_position$1","_quaternion$1","_scale$1","_forward","_up","AudioListener","Audio","audioNode","mediaElement","mediaStream","filter","_position","_quaternion","_scale","_orientation","PositionalAudio","coneInnerAngle","coneOuterAngle","coneOuterGain","panner","AudioAnalyser","audio","fftSize","PropertyMixer","binding","mixFunction","mixFunctionAdditive","setIdentity","accuIndex","currentWeight","mix","weightAdditive","originalValueOffset","targetIndex","workOffset","_RESERVED_CHARS_RE","_reservedRe","_wordChar","_wordCharOrDot","_directoryRe","_nodeRe","_objectRe","_propertyRe","_trackRe","_supportedObjectNames","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","firstValidIndex","bindings","rootNode","matches","results","lastDot","objectName","nodeName","searchNodeSubtree","childNode","subTreeNode","targetArray","sourceArray","targetObject","propertyIndex","objectIndex","nodeProperty","versioning","bindingType","AnimationObjectGroup","objects","indicesByUUID","parsedPaths","nBindings","knownObject","nObjects","nCachedObjects","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","lastObject","indicesByPath","lastBindingsIndex","lastBindings","lastBindingsPath","AnimationAction","mixer","localRoot","nTracks","interpolants","interpolantSettings","mode","repetitions","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","fadeInAction","weightInterpolant","startTimeScale","endTimeScale","timeScaleInterpolant","deltaTime","timeDirection","timeRunning","clipTime","propertyMixers","interpolantValue","loopCount","pingPong","handle_stop","loopDelta","atStart","atEnd","weightNow","weightThen","_controlInterpolantsResultBuffer","AnimationMixer","prototypeAction","rootUuid","bindingsByRoot","bindingsByName","clipUuid","actionsForClip","actions","actionsByClip","knownActions","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","actionByRoot","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","firstInactiveBinding","lastActiveBinding","lastActiveInterpolant","optionalRoot","clipObject","existingAction","newAction","nActions","actionsToRemove","RenderTarget3D","Uniform$1","Uniform","_id","uniformsSource","InstancedInterleavedBuffer","GLBufferAttribute","elementSize","_matrix","Raycaster","coords","ascSort","propagate","Clock","autoStart","newTime","Spherical","other","Cylindrical","_Matrix2","Matrix2","_vector$4","Box2","_startP","_startEnd","_d1","_d2","_r","_c1","_c2","Line3","startEnd2","EPSILON","_vector$3","SpotLightHelper","positions","coneLength","coneWidth","_vector$2","_boneMatrix","_matrixWorldInv","SkeletonHelper","getBoneList","colors","colorAttribute","boneList","PointLightHelper","sphereSize","_vector$1","_color1","_color2","HemisphereLightHelper","mesh","GridHelper","PolarGridHelper","sectors","rings","_v1","_v2","_v3","DirectionalLightHelper","_vector","_camera","CameraHelper","pointMap","addLine","addPoint","colorFrustum","colorCone","colorUp","colorTarget","colorCross","cone","cross","nearZ","farZ","setPoint","_box","BoxHelper","Box3Helper","PlaneHelper","positions2","_axis","_lineGeometry","_coneGeometry","ArrowHelper","dir","headLength","headWidth","AxesHelper","xAxisColor","yAxisColor","zAxisColor","ShapePath","isCCW","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","isClockWise","subPaths","solid","holesFirst","betterShapeHoles","newShapes","newShapeHoles","mainIdx","tmpPoints","ambiguous","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","tmpHoles","Controls","domElement","contain","imageAspect","cover","fill","getByteLength","typeByteLength","getTextureTypeByteLength","TextureUtils","WebGLAnimation","isAnimating","animationLoop","requestId","onAnimationFrame","WebGLAttributes","buffers","createBuffer","bufferType","usage","updateBuffer","updateRanges","mergeIndex","previousRange","alphahash_fragment","alphahash_pars_fragment","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","alphatest_pars_fragment","aomap_fragment","aomap_pars_fragment","batching_pars_vertex","batching_vertex","begin_vertex","beginnormal_vertex","bsdfs","iridescence_fragment","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","common","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","colorspace_fragment","colorspace_pars_fragment","envmap_fragment","envmap_common_pars_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_pars_fragment","lights_lambert_fragment","lights_lambert_pars_fragment","lights_pars_begin","envmap_physical_pars_fragment","lights_toon_fragment","lights_toon_pars_fragment","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","lightprobes_pars_fragment","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphinstance_vertex","morphcolor_vertex","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normal_pars_fragment","normal_pars_vertex","normal_vertex","normalmap_pars_fragment","clearcoat_normal_fragment_begin","clearcoat_normal_fragment_maps","clearcoat_pars_fragment","iridescence_pars_fragment","opaque_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","transmission_fragment","transmission_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","worldpos_vertex","vertex$h","fragment$h","vertex$g","fragment$g","vertex$f","fragment$f","vertex$e","fragment$e","vertex$d","fragment$d","vertex$c","fragment$c","vertex$b","fragment$b","vertex$a","fragment$a","vertex$9","fragment$9","vertex$8","fragment$8","vertex$7","fragment$7","vertex$6","fragment$6","vertex$5","fragment$5","vertex$4","fragment$4","vertex$3","fragment$3","vertex$2","fragment$2","vertex$1","fragment$1","ShaderChunk","UniformsLib","ShaderLib","_rgb","_m$1","WebGLBackground","environments","premultipliedAlpha","clearColor","clearAlpha","planeMesh","boxMesh","currentBackground","currentBackgroundVersion","currentTonemapping","getBackground","background","usePMREM","render","forceClear","setClear","environmentBlendMode","addToRenderList","renderList","dispose","WebGLBindingStates","maxVertexAttributes","bindingStates","defaultState","createBindingState","currentState","forceUpdate","setup","program","updateBuffers","getBindingState","bindVertexArrayObject","needsUpdate","saveCache","setupVertexAttributes","createVertexArrayObject","vao","deleteVertexArrayObject","wireframe","objectMap","objectId","programMap","stateMap","newAttributes","enabledAttributes","attributeDivisors","cachedAttributes","geometryAttributes","attributesNum","programAttributes","cachedAttribute","geometryAttribute","initAttributes","enableAttribute","enableAttributeAndDivisor","disableUnusedAttributes","vertexAttribPointer","integer","materialDefaultAttributeValues","programAttribute","programId","releaseStatesOfGeometry","releaseStatesOfProgram","releaseStatesOfObject","resetDefaultState","WebGLBufferRenderer","setMode","renderInstances","primcount","renderMultiDraw","starts","drawCount","elementCount","WebGLCapabilities","maxAnisotropy","getMaxAnisotropy","extension","textureFormatReadable","textureFormat","textureTypeReadable","textureType","halfFloatSupportedByExt","getMaxPrecision","maxPrecision","logarithmicDepthBuffer","maxTextures","maxVertexTextures","maxTextureSize","maxCubemapSize","maxAttributes","maxVertexUniforms","maxVaryings","maxFragmentUniforms","maxSamples","samples","WebGLClipping","properties","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","enableLocalClipping","enabled","projectPlanes","useCache","clipIntersection","clipShadows","materialProperties","resetGlobalState","nGlobal","lGlobal","skipTransform","nPlanes","flatSize","viewMatrix","LOD_MIN","EXTRA_LOD_SIGMA","MAX_SAMPLES","GGX_SAMPLES","_flatCamera","_clearColor","_oldTarget","_oldActiveCubeFace","_oldActiveMipmapLevel","_oldXrEnabled","_origin","PMREMGenerator$1","sigma","cubeUVRenderTarget","equirectangular","cubemap","_getCubemapMaterial","_getEquirectMaterial","cubeSize","outputTarget","_setViewport","_createRenderTarget","_lodMax","_createPlanes","_getBlurShader","_getGGXShader","cubeCamera","upSign","forwardSign","originalAutoClear","toneMapping","backgroundBox","backgroundMaterial","useSolidColor","col","isCubeTexture","autoClear","lodIn","lodOut","pingPongRenderTarget","ggxMaterial","ggxMesh","ggxUniforms","targetRoughness","sourceRoughness","incrementalRoughness","blurStrength","adjustedRoughness","outputSize","poleAxis","targetIn","targetOut","sigmaRadians","blurMaterial","STANDARD_DEVIATIONS","blurMesh","blurUniforms","pixels","radiansPerPixel","sigmaPixels","weights","lodMax","sizeLods","sigmas","lodMeshes","lod","totalLods","sizeLod","texelSize","cubeFaces","positionSize","uvSize","faceIndexSize","faceIndex","coordinates","_getCommonVertexShader","WebGLCubeRenderTarget","shader","currentMinFilter","stencil","WebGLEnvironments","cubeMaps","pmremMaps","pmremGenerator","getPMREM","getCube","mapTextureMapping","onCubemapDispose","isEquirectMap","isCubeMap","currentPMREMVersion","PMREMGenerator","isCubeTextureComplete","onPMREMDispose","pmrem","WebGLExtensions","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","updateWireframeAttribute","geometryIndex","geometryPosition","previousAttribute","getWireframeAttribute","currentAttribute","WebGLIndexedBufferRenderer","setIndex","WebGLInfo","memory","instanceCount","WebGLMorphtargets","capabilities","morphTextures","morph","morphTargetsCount","disposeTexture","hasMorphPosition","hasMorphNormals","hasMorphColors","morphNormals","morphColors","vertexDataCount","vertexDataStride","morphNormal","morphColor","WebGLObjects","updateMap","buffergeometry","onInstancedMeshDispose","instancedMesh","toneMappingMap","WebGLOutput","targetA","targetB","_outputColorSpace","_outputToneMapping","_isCompositing","_savedToneMapping","_savedRenderTarget","_effects","_hasRenderPass","readBuffer","writeBuffer","temp","emptyTexture","emptyShadowTexture","emptyArrayTexture","empty3dTexture","emptyCubeTexture","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","nBlocks","blockSize","firstElem","arraysEqual","copyArray","allocTexUnits","setValueV1f","setValueV2f","setValueV3f","setValueV4f","setValueM2","elements","setValueM3","setValueM4","setValueV1i","setValueV2i","setValueV3i","setValueV4i","setValueV1ui","setValueV2ui","setValueV3ui","setValueV4ui","setValueT1","unit","emptyTexture2D","setValueT3D1","setValueT6","setValueT2DArray1","getSingularSetter","setValueV1fArray","setValueV2fArray","setValueV3fArray","setValueV4fArray","setValueM2Array","setValueM3Array","setValueM4Array","setValueV1iArray","setValueV2iArray","setValueV3iArray","setValueV4iArray","setValueV1uiArray","setValueV2uiArray","setValueV3uiArray","setValueV4uiArray","setValueT1Array","units","setValueT3DArray","setValueT6Array","setValueT2DArrayArray","getPureArraySetter","SingleUniform","activeInfo","addr","PureArrayUniform","StructuredUniform","seq","RePathPart","addUniform","uniformObject","parseUniform","pathLength","matchEnd","idIsIndex","subscript","WebGLUniforms","shadowSamplers","otherUniforms","WebGLShader","COMPLETION_STATUS_KHR","programIdCount","handleSource","errorLine","lines","lines2","_m0","getEncodingComponents","encodingMatrix","getShaderErrors","errorMatches","getTexelEncodingFunction","functionName","toneMappingFunctions","getToneMappingFunction","toneMappingName","getLuminanceFunction","generateVertexExtensions","filterEmptyLine","generateDefines","defines","chunks","fetchAttributeLocations","locationSize","replaceLightNums","numSpotLightCoords","replaceClippingPlaneNums","includePattern","resolveIncludes","includeReplacer","shaderChunkMap","include","newInclude","unrollLoopPattern","unrollLoops","loopReplacer","generatePrecision","precisionstring","shadowMapTypeDefines","generateShadowMapTypeDefine","envMapTypeDefines","generateEnvMapTypeDefine","envMapModeDefines","generateEnvMapModeDefine","envMapBlendingDefines","generateEnvMapBlendingDefine","generateCubeUVSize","imageHeight","maxMip","texelHeight","WebGLProgram","cacheKey","vertexShader","fragmentShader","shadowMapTypeDefine","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","envMapCubeUVSize","customVertexExtensions","customDefines","prefixVertex","prefixFragment","versionString","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","onFirstUse","self","programInfoLog","vertexShaderInfoLog","fragmentShaderInfoLog","programLog","vertexLog","fragmentLog","runnable","haveDiagnostics","vertexErrors","fragmentErrors","cachedUniforms","programReady","WebGLShaderCache","vertexShaderStage","fragmentShaderStage","materialShaders","shaderStage","stage","WebGLShaderStage","isPackedRGFormat","WebGLPrograms","clipping","_programLayers","_customShaders","_activeChannels","programs","programsMap","shaderIDs","getChannel","getParameters","lights","shadows","lightProbeGrids","fog","environment","envMap","envMapCubeUVHeight","shaderID","morphTextureStride","customVertexShaderID","customFragmentShaderID","IS_INSTANCEDMESH","IS_BATCHEDMESH","HAS_MAP","HAS_MATCAP","HAS_ENVMAP","HAS_AOMAP","HAS_LIGHTMAP","HAS_BUMPMAP","HAS_NORMALMAP","HAS_DISPLACEMENTMAP","HAS_EMISSIVEMAP","HAS_METALNESSMAP","HAS_ROUGHNESSMAP","HAS_ANISOTROPY","HAS_CLEARCOAT","HAS_DISPERSION","HAS_IRIDESCENCE","HAS_SHEEN","HAS_TRANSMISSION","HAS_ANISOTROPYMAP","HAS_CLEARCOATMAP","HAS_CLEARCOAT_NORMALMAP","HAS_CLEARCOAT_ROUGHNESSMAP","HAS_IRIDESCENCEMAP","HAS_IRIDESCENCE_THICKNESSMAP","HAS_SHEEN_COLORMAP","HAS_SHEEN_ROUGHNESSMAP","HAS_SPECULARMAP","HAS_SPECULAR_COLORMAP","HAS_SPECULAR_INTENSITYMAP","HAS_TRANSMISSIONMAP","HAS_THICKNESSMAP","HAS_GRADIENTMAP","HAS_ALPHAMAP","HAS_ALPHATEST","HAS_ALPHAHASH","HAS_EXTENSIONS","getProgramCacheKey","getProgramCacheKeyParameters","getProgramCacheKeyBooleans","getUniforms","acquireProgram","releaseProgram","releaseShaderCache","WebGLProperties","painterSortStable","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","opaque","transmissive","materialVariant","variant","getNextRenderItem","groupOrder","renderItem","unshift","sort","customOpaqueSort","customTransparentSort","WebGLRenderLists","lists","renderCallDepth","listArray","UniformsCache","ShadowUniformsCache","nextVersion","shadowCastingAndTexturingLightsFirst","lightA","lightB","WebGLLights","shadowCache","vector3","matrix42","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","numDirectionalShadows","numPointShadows","numSpotShadows","numSpotMaps","numSpotShadowsWithMaps","numLightProbes","shadowMap","shadow","shadowUniforms","setupView","WebGLRenderState","lightsArray","shadowsArray","lightProbeGridArray","pushLight","pushShadow","shadowLight","pushLightProbeGrid","volume","setupLights","setupLightsView","WebGLRenderStates","renderStates","renderStateArray","renderState","_cubeDirections","_cubeUps","WebGLShadowMap","_shadowMapSize","_viewportSize","_viewport","_depthMaterial","_distanceMaterial","_materialCache","_maxTextureSize","shadowSide","shadowMaterialVertical","shadowMaterialHorizontal","fullScreenTri","fullScreenMesh","_previousType","activeCubeFace","_state","typeChanged","shadowFrameExtents","faceCount","viewport","renderObject","VSMPass","getDepthMaterial","customMaterial","keyA","keyB","materialsForVariant","cachedMaterial","onMaterialDispose","kl","WebGLState","ColorBuffer","locked","currentColorMask","currentColorClear","colorMask","lock","DepthBuffer","currentReversed","currentDepthMask","currentDepthFunc","currentDepthClear","reversed","ext","oldDepth","depthTest","enable","disable","depthMask","depthFunc","StencilBuffer","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","stencilMask","stencilFunc","stencilRef","stencilFail","stencilZFail","stencilZPass","colorBuffer","depthBuffer","stencilBuffer","uboBindings","uboProgramMap","enabledCapabilities","currentBoundFramebuffers","currentDrawbuffers","defaultDrawbuffers","currentProgram","currentBlendingEnabled","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentBlendColor","currentBlendAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","lineWidthAvailable","glVersion","currentTextureSlot","currentBoundTextures","scissorParam","viewportParam","currentScissor","currentViewport","createTexture","dimensions","emptyTextures","setFlipSided","setCullFace","setBlending","bindFramebuffer","framebuffer","drawBuffers","useProgram","equationToGL","factorToGL","blending","blendEquation","blendSrc","blendDst","blendEquationAlpha","blendSrcAlpha","blendDstAlpha","blendColor","blendAlpha","setMaterial","frontFaceCW","flipSided","stencilWrite","setPolygonOffset","cullFace","setLineWidth","polygonOffset","factor","setScissorTest","scissorTest","activeTexture","webglSlot","bindTexture","webglType","webglTexture","boundTexture","unbindTexture","compressedTexImage2D","compressedTexImage3D","texSubImage2D","texSubImage3D","compressedTexSubImage2D","compressedTexSubImage3D","texStorage2D","texStorage3D","texImage2D","texImage3D","getParameter","pixelStorei","scissor","updateUBOMapping","uniformsGroup","blockIndex","uniformBlockBinding","WebGLTextures","_gl","multisampledRTTExt","supportsInvalidateFramebuffer","_imageDimensions","_videoTextures","_htmlTextures","_sources","useOffscreenCanvas","createCanvas","resizeImage","needsNewCanvas","maxSize","getDimensions","textureNeedsGenerateMipmaps","generateMipmap","getTargetType","getInternalFormat","internalFormatName","glFormat","glType","forceLinearTransfer","ext_texture_norm16","internalFormat","transfer","getInternalDepthFormat","useStencil","depthType","glInternalFormat","getMipLevels","onTextureDispose","deallocateTexture","onRenderTargetDispose","deallocateRenderTarget","textureProperties","webglTextures","deleteTexture","renderTargetProperties","attachmentProperties","textureUnits","resetTextureUnits","getTextureUnits","setTextureUnits","allocateTextureUnit","textureUnit","getTextureCacheKey","setTexture2D","slot","updateVideoTexture","uploadTexture","setTexture2DArray","setTexture3D","setTextureCube","uploadCubeTexture","wrappingToGL","filterToGL","compareToGL","setTextureParameters","initTexture","forceUpload","textureCacheKey","getRow","rowLength","componentStride","updateTexture","previousEnd","currentRow","previousRow","currentUnpackRowLen","currentUnpackSkipPixels","currentUnpackSkipRows","pixelStart","pixelCount","sourceProperties","workingPrimaries","texturePrimaries","unpackConversion","verifyColorSpace","mipmap","useTexStorage","allocateMemory","dataReady","layerByteLength","layerData","srcFormat","srcType","isCompressed","isDataTexture","cubeImage","mipmapImage","setupFrameBufferTexture","attachment","textureTarget","useMultisampledRTT","getRenderTargetSamples","setupRenderBufferStorage","renderbuffer","useMultisample","depthTexture","glAttachmentType","setupDepthTexture","cubeFace","isCube","webglDepthTexture","glTextureType","setupDepthRenderbuffer","disposeEvent","rebindTextures","colorTexture","setupRenderTarget","isMultipleRenderTargets","updateRenderTargetMipmap","targetType","invalidationArrayRead","invalidationArrayDraw","updateMultisampleRenderTarget","mask","depthStyle","WebGLUtils","convert","_occlusion_vertex","_occlusion_fragment","WebXRDepthSensing","depthData","cameraXR","WebXRManager","session","framebufferScaleFactor","referenceSpaceType","foveation","customReferenceSpace","pose","glBinding","glProjLayer","glBaseLayer","xrFrame","supportsGlBinding","depthSensing","cameraAccessTextures","initialRenderTarget","newRenderTarget","controllers","controllerInputSources","currentSize","currentPixelRatio","cameraL","cameraR","_currentDepthNear","_currentDepthFar","onSessionEvent","controllerIndex","onSessionEnd","onInputSourcesChange","space","depthFormat","glDepthFormat","projectionlayerInit","layerInit","cameraLPos","cameraRPos","setProjectionFromUnion","ipd","projL","projR","topFov","bottomFov","leftFov","rightFov","zOffset","xOffset","near2","far2","left2","right2","top2","bottom2","updateCamera","depthNear","depthFar","updateUserCamera","xrCamera","onAnimationFrameCallback","views","cameraXRNeedsUpdate","glSubImage","enabledFeatures","cameraTex","glTexture","_m","WebGLMaterials","refreshTransformUniform","refreshFogUniforms","refreshMaterialUniforms","pixelRatio","transmissionRenderTarget","refreshUniformsCommon","refreshUniformsToon","refreshUniformsPhong","refreshUniformsStandard","refreshUniformsPhysical","refreshUniformsMatcap","refreshUniformsDistance","refreshUniformsLine","refreshUniformsDash","refreshUniformsPoints","refreshUniformsSprites","envMapRotation","WebGLUniformsGroups","updateList","allocatedBindingPoints","maxBindingPoints","bind","webglProgram","prepareUniformsGroup","onUniformsGroupsDispose","updateBufferData","bindingPointIndex","allocateBindingPointIndex","uniformArray","hasUniformChanged","arrayOffset","getUniformSize","indexString","cachedObject","chunkSize","chunkOffset","chunkPadding","chunkStart","DATA","lut","getDFGLUT","WebGLRenderer","antialias","preserveDrawingBuffer","powerPreference","failIfMajorPerformanceCaveat","outputBufferType","_alpha","_outputBufferType","INTEGER_FORMATS","UNSIGNED_TYPES","uintClearColor","intClearColor","objectPosition","currentRenderList","currentRenderState","renderListStack","renderStateStack","_this","_isContextLost","_nodesHandler","_currentActiveCubeFace","_currentActiveMipmapLevel","_currentRenderTarget","_currentMaterialId","_currentCamera","_currentViewport","_currentScissor","_currentScissorTest","_currentClearColor","_currentClearAlpha","_width","_height","_pixelRatio","_opaqueSort","_transparentSort","_scissor","_scissorTest","_clippingEnabled","_localClippingEnabled","_vector3","_emptyScene","_renderBackground","getTargetPixelRatio","getContext","contextName","contextAttributes","onContextLost","onContextRestore","onContextCreationError","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","uniformsGroups","initGLContext","xr","updateStyle","boolean","bits","isIntegerFormat","targetFormat","isUnsignedType","nodesHandler","onXRSessionStart","onXRSessionEnd","infoAutoReset","shadowMapEnabled","shadowMapAutoUpdate","shadowMapNeedsUpdate","shadowMapType","deallocateMaterial","releaseMaterialProgramReferences","setProgram","rangeFactor","drawStart","drawEnd","lineWidth","prepareMaterial","getProgram","targetScene","material2","checkMaterialsReady","isXRPresenting","useOutput","depthSensingMesh","projectObject","opaqueObjects","transmissiveObjects","camera2","renderTransmissionPass","renderScene","sortObjects","transparentObjects","renderObjects","hasHalfFloatSupport","activeViewport","currentToneMapping","currentCameraViewport","renderTargetNeedsUpdate","currentSide","overrideMaterial","lightsStateVersion","programCacheKey","updateCommonMaterialProperties","materialNeedsLights","getUniformList","progUniforms","findLightProbeGrid","volumes","vertexAlphas","vertexTangents","needsProgramChange","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","objectVolume","uCamPos","markUniformsLightsNeedsUpdate","defaultFramebuffer","_scratchFrameBuffer","isRenderTarget3D","__webglFramebuffer","activeCubeFaceIndex","textureIndex","glBuffer","currFramebuffer","levelScale","_srcFramebuffer","_dstFramebuffer","srcTexture","dstTexture","srcRegion","dstPosition","srcLevel","dstLevel","dstX","dstY","dstZ","glTarget","currentUnpackImageHeight","currentUnpackSkipImages","isSrc3D","isDst3D","srcTextureProperties","dstTextureProperties","srcRenderTargetProperties","dstRenderTargetProperties","CSS2DObject","_viewMatrix","_viewProjectionMatrix","_a","_b","CSS2DRenderer","_widthHalf","_heightHalf","hideObject","objectData","getDistanceToSquared","object1","object2","filterAndFlatten","sorted","distanceA","distanceB","zMax","isObject","freeGlobal","freeSelf","reWhitespace","trimmedEndIndex","reTrimStart","baseTrim","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isBinary","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","_arrayLikeToArray","_arrayWithHoles","_classCallCheck","_createClass","_iterableToArrayLimit","_nonIterableRest","_slicedToArray","_unsupportedIterableToArray","Prop","_ref","_ref$default","defaultVal","_ref$triggerUpdate","triggerUpdate","_ref$onChange","onChange","newVal","_ref2","_ref2$stateInit","stateInit","_ref2$props","rawProps","_ref2$methods","methods","_ref2$aliases","aliases","_ref2$init","initFn","_ref2$update","updateFn","propName","KapsuleComp","_len","_key","classMode","nodeElement","_args$","changedProps","comp","initStatic","digest","getSetProp","_ref3","_ref3$triggerUpdate","redigest","_ref3$onChange","_ref3$defaultVal","curVal","methodName","_methods$methodName","_len2","_key2","_ref4","_ref5","alias","Easing","amount","tweens","_i","tweenId","tweens_1","tween","tweens_2","preserve","tweenIds","Interpolation","Sequence","mainGroup","Tween","dynamic","overrideStartingValues","_object","_valuesStart","_valuesEnd","_valuesStartRepeat","startValue","startValueIsArray","propType","isInterpolationList","endValues","nestedObject","numChainedTweens","yoyo","easingFunction","interpolationFunction","elapsedTime","durationAndDelay","totalTime","calculateElapsedPortion","timesRepeated","timeIntoCurrentRepeat","portion","elapsed","completeCount","startIsArray","endIsArray","endValue","TWEEN","tree_add","add","tree","xm","ym","zm","xp","yp","zp","deep","addAll","tree_cover","tree_data","tree_extent","Octant","tree_find","y3","z3","octs","findAllWithinRadius","xMin","yMin","zMin","xMax","yMax","tree_remove","retainer","removeAll","tree_root","tree_size","tree_visit","tree_visitAfter","defaultX","tree_x","defaultY","tree_y","defaultZ","tree_z","octree","Octree","leaf_copy","treeProto","tree_addAll","tree_findAllWithinRadius","tree_removeAll","ascending","descending","bisector","compare1","compare2","zero","lo","hi","number","ascendingBisect","bisectRight","extent","valueof","Adder","e10","e5","e2","tickSpec","inc","ticks","reverse","tickIncrement","tickStep","mean","arrays","merge","initRange","domain","define","constructor","extend","definition","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","rgbn","Rgb","rgba","hsla","rgbConvert","rgb","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","Hsl","hsl","m2","m1","hsl2rgb","clamph","clampt","constant$1","exponential","gamma","nogamma","rgb$1","rgbGamma","colorRgb","numberArray","isNumberArray","interpolateArray","genericArray","nb","na","interpolateNumber","object$1","reA","reB","one","string$1","bi","am","bm","interpolate","interpolateRound","constants","identity","clamper","bimap","r0","polymap","bisect","transformer","interpolateValue","untransform","unknown","piecewise","rescale","continuous","formatDecimal","formatDecimalParts","coefficient","exponent","formatGroup","grouping","thousands","formatNumerals","numerals","re","formatSpecifier","specifier","FormatSpecifier","formatTrim","out","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","identity$1","prefixes","formatLocale","locale","currencyPrefix","currencySuffix","decimal","percent","minus","nan","newFormat","align","comma","trim","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","defaultLocale","precisionFixed","precisionPrefix","precisionRound","tickFormat","linearish","prestep","maxIter","quantize","epsilon","epsilon2","pi","halfPi","quarterPi","tau","abs","atan","atan2","ceil","exp","hypot","sqrt","acos","asin","haversin","streamGeometry","streamGeometryType","streamObjectType","features","streamLine","streamPolygon","coordinate","geoStream","areaRingSum","areaSum","lambda00","phi00","lambda0","cosPhi0","sinPhi0","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","dLambda","sdLambda","adLambda","cosPhi","sinPhi","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","cartesianNormalizeInPlace","phi0","lambda1","phi1","lambda2","deltaSum","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","equatorial","inflection","lambdai","phii","antimeridian","rangeCompare","rangeContains","geoBounds","feature","deltaMax","W0","W1","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","geoCentroid","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","geoRotation","rotate","forward","circleStream","cosRadius","sinRadius","circleRadius","clipBuffer","pointEqual","Intersection","clipRejoin","compareIntersection","startInside","subject","isSubject","longitude","polygonContains","polygon","winding","ring","point0","sinPhi1","cosPhi1","point1","absDelta","phiArc","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","lineStart","lineEnd","pointRing","ringStart","ringEnd","pointLine","clean","ringSegments","validSegment","clipAntimeridian","clipAntimeridianLine","clipAntimeridianInterpolate","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","clipCircle","cr","smallRadius","notHemisphere","v00","point2","two","pa","pb","n1","n2n2","n1n2","determinant","n1xn2","uu","polar","meridian","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","activeStream","bufferStream","x__","y__","v__","x_","y_","v_","clipStream","polygonStart","polygonEnd","polygonInside","a0","cleanInside","lengthSum","lengthStream","lengthLineStart","lengthPointFirst","lengthLineEnd","lengthPoint","cosDelta","sinDelta","length$1","geoDistance$1","containsObjectType","containsGeometry","containsGeometryType","containsPoint","containsLine","containsPolygon","ao","bo","ringRadians","pointRadians","geoContains","graticuleX","graticuleY","graticule","DX","DY","graticule10","geoInterpolate","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","bounds","TransformStream","fit","projection","fitBounds","fitExtent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","resample","project","delta2","resampleNone","resampleLineTo","phi2","dx2","dy2","x00","y00","a00","b00","c00","resampleStream","ringPoint","transformRadians","transformRotate","scaleTranslate","scaleTranslateRotate","cosAlpha","sinAlpha","ai","ci","fi","projectionMutator","projectAt","preclip","postclip","projectResample","projectTransform","projectRotateTransform","cacheStream","invert","recenter","azimuthalInvert","sc","cc","mercatorRaw","stereographicRaw","geoStereographic","_arrayWithoutHoles","_assertClassBrand","_assertThisInitialized","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","_checkPrivateRedeclaration","_classPrivateFieldGet2","_classPrivateFieldInitSpec","_classPrivateFieldSet2","_classPrivateMethodInitSpec","_defineProperties","_toPropertyKey","_defineProperty","_inherits","_setPrototypeOf","_iterableToArray","_nonIterableSpread","_toConsumableArray","_toPrimitive","_materialDispose","_deallocate","polar2Cartesian","lat","lng","cartesian2Polar","deg2Rad","deg","yMercatorScale","geoMercatorRaw","yMercatorScaleClamped","yMercatorScaleInvert","convertMercatorUV","offsetScale","scaleLinear","revOffsetScale","findTileXY","isMercator","gridSize","relY","genTilesCoords","_x1","_y1","tiles","tileLngLen","regTileLatLen","reproY","tileLatLen","reproYEnd","latLen","MAX_LEVEL_TO_RENDER_ALL_TILES","MAX_LEVEL_TO_BUILD_LOOKUP_OCTREE","TILE_SEARCH_RADIUS_CAMERA_DISTANCE","TILE_SEARCH_RADIUS_SURFACE_DISTANCE","_radius","_isMercator","_tileUrl","_level","_tilesMeta","_isInView","_innerBackLayer","_ThreeSlippyMapGlobe_brand","ThreeSlippyMapGlobe","_Group","tileUrl","_ref$minLevel","minLevel","_ref$maxLevel","maxLevel","_ref$mercatorProjecti","mercatorProjection","_classPrivateFieldGet2$1","_this2","_buildMetaLevel","prevLevel","_fetchNeededTiles","_this3","lngLen","lng0","lng1","lat0","lat1","pos","pov","distToGlobeCenter","cameraDistance","_this4","levelMeta","_this5","povPos","_tiles$octree","_povPos","searchRadius","povCoords","searchRadiusLat","searchRadiusLng","lngRange","latRange","_findTileXY","_findTileXY2","_findTileXY3","_findTileXY4","selTiles","rotLng","rotLat","tile","_map","_map2","_y2","prevLen","_createForOfIteratorHelper","interpolateLine","lineCoords","maxDegDistance","prevPnt","pnt","geoDistance","geoInterpol","altInterpol","interpol","tStep","THREE","setAttributeFn","GeoJsonGeometry","_THREE$BufferGeometry","geoJson","genPoint","genMultiPoint","genLineString","genMultiLineString","genPolygon","genMultiPolygon","groupCnt","newG","prevIndCnt","concatGroup","newPnt","coords3d","_ref4$","alt","_earcutFlatten","numPoints","vIdx","_ref6","newLine","coordsSegment","_ref7","_ref8","_ref8$","_earcutFlatten2","firstHoleIdx","outerVertices","holeVertices","holesIdx","outerIndices","outer","_ref9","_ref10","newOuter","newHoles","main","extra","prevVertCnt","concatArr","ind","_iterator","_step","computeMikkTSpaceTangents","MikkTSpace","negateSign","getAttributeArray","mergeGeometries","useGroups","isIndexed","attributesUsed","morphAttributesUsed","mergedGeometry","attributesCount","mergedIndex","mergedAttribute","mergeAttributes","morphAttributesToMerge","mergedMorphAttribute","TypedArray","gpuType","arrayLength","tupleOffset","deepCloneAttribute","deinterleaveAttribute","interleaveAttributes","getters","iba","cons","deinterleaveGeometry","attrMap","estimateBytesUsed","mem","mergeVertices","tolerance","hashToIndex","attributeNames","tmpAttributes","tmpMorphAttributes","newIndices","morphAttr","halfTolerance","hashMultiplier","hashAdditive","newArray","newMorphArrays","getterFunc","setterFunc","tmpAttribute","tmpMorphAttribute","toTrianglesDrawMode","drawMode","numberOfTriangles","newGeometry","computeMorphedAttributes","_tempB","_tempC","_morphB","_morphC","_calculateMorphedAttributeData","modifiedAttributeArray","modifiedPosition","modifiedNormal","morphedPositionAttribute","morphedNormalAttribute","mergeGroups","groupLength","currentGroup","toCreasedNormals","creaseAngle","creaseDot","verts","tempVec1","tempVec2","tempNorm","tempNorm2","hashVertex","resultGeometry","posAttr","vertexMap","normalArray","normAttr","otherNormals","lk","otherNorm","_typeof","trimLeft","trimRight","tinycolor","inputToRGB","RsRGB","GsRGB","BsRGB","boundAlpha","hsv","rgbToHsv","rgbToHsl","allow3Char","rgbToHex","allow4Char","rgbaToHex","bound01","hexNames","secondColor","hex8String","rgbaToArgbHex","secondHex8String","gradientType","formatSet","formattedString","hasAlpha","needsAlphaFormat","_lighten","_brighten","_darken","_desaturate","_saturate","_greyscale","_spin","_analogous","_complement","_monochromatic","_splitcomplement","polyad","newColor","convertToPercentage","ok","stringInputToObject","isValidCSSUnit","rgbToRgb","hsvToRgb","hslToRgb","mod","pad2","convertDecimalToHex","clamp01","slices","ret","modification","rgb1","rgb2","wcag2","readability","wcag2Parms","validateWCAG2Parms","baseColor","colorList","bestColor","bestScore","includeFallbackColors","names","flipped","isOnePointZero","processPercent","isPercentage","parseIntFromHex","convertHexToDecimal","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","parms","_dataMap","_objMap","_createObj","_updateObj","_removeObj","DataBindMapper","accessorFn","dataIdsMap","dId","splitter","resulterrbound","elen","Qnew","hh","bvirt","enow","fnow","eindex","findex","hindex","estimate","ccwerrboundA","ccwerrboundB","ccwerrboundC","C1","C2","orient2dadapt","detsum","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_j","_0","u3","acx","bcx","acy","bcy","errbound","C1len","C2len","Dlen","orient2d","detleft","detright","EDGE_STACK","Delaunator","getX","defaultGetX","getY","defaultGetY","maxTriangles","hullPrev","hullNext","hullTri","hullHash","minDist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","circumcenter","hullSize","pseudoAngle","halfedges","ar","al","bl","pr","pl","inCircle","hbl","br","ex","ey","ap","cp","cl","ids","dists","tempDist","median","swap","pointInPolygon","ii","u1","u2","currentP","nextP","numContours","contourLen","getCoord","coord","getGeom","geojson","booleanPointInPolygon","geom","bbox","polys","inBBox","polyResult","pip","index_default","Polygon","Voronoi","delaunay","ymin","vectors","circumcenters","inedges","ti","tj","xi","yi","xj","yj","h0","h1","cell","cj","li","lj","e0","e1","sx0","sx1","vx0","vy0","vxn","vyn","pointX","pointY","collinear","jitter","Delaunay","that","flatArray","flatIterable","hullIndex","_hullIndex","dc","cartesianAdd","cartesianNormalize","cosphi","excess","geoDelaunay","geo_delaunay_from","geo_triangles","geo_edges","neighbors","geo_neighbors","find","geo_find","geo_circumcenters","polygons","centers","geo_polygons","geo_mesh","geo_hull","urquhart","geo_urquhart","distance2","found","xyz","ndist","zeros","max2","FAR","_index","tri","npoints","poly","supplement","reordered","R0","o_midpoint","R1","distances","_lengths","_urquhart","edge","_hull","geoVoronoi","coll","_distances","_urquart","geoPolygonTriangulate","_ref$resolution","interpolateContourPoints","edgePoints","innerPoints","getInnerGeoPoints","boundariesGeojson","_geoBounds","_geoBounds2","_geoBounds2$","minLng","minLat","_geoBounds2$2","maxLng","maxLat","crossesPoleOrAntimeridian","vt","pntMap","_indices","inds","triangleCentroid","pointInside","_loop","_indices2","indice","coordIdx","_earcutFlatten$holes","lngUvScale","latUvScale","maxDistance","pnts","_geoBounds3","_geoBounds4","_geoBounds4$","_geoBounds4$2","getGeoSpiralGrid","distanceBetweenPoints","getPntLng","getPntLat","getPntIdx","pntIdxRange","isLngInRange","turfPointInPolygon","ConicPolygonGeometry","polygonGeoJson","bottomHeight","topHeight","closedBottom","closedTop","includeSides","curvatureResolution","_geoPolygonTriangulat","flatUvs","addGroup","groupData","generateVertices","altitude","altFn","_generateVertices","bottomVerts","_generateVertices2","topVerts","lastHoleIdx","v0Idx","v1Idx","holeIdx","isTop","_objectWithoutProperties","_objectWithoutPropertiesLoose","keyAccessors","multiItem","flattenKeys","indexedResult","iterObj","itemVal","keyAccessor","isProp","_itemVal","propVal","reduce","accKeys","libh3","Module","moduleOverrides","scriptDirectory","locateFile","readAsync","onload","xhr","tryParseAsDataURI","tempRet0","setTempRet0","getTempRet0","GLOBAL_BASE","setValue","ptr","noSafe","HEAP8","HEAP16","HEAP32","tempI64","tempDouble","Math_abs","Math_min","Math_floor","Math_ceil","HEAPF32","HEAPF64","abort","getValue","ABORT","assert","condition","getCFunc","ident","ccall","returnType","argTypes","toC","stackAlloc","stringToUTF8","writeArrayToMemory","convertReturnValue","UTF8ToString","cArgs","converter","stackSave","stackRestore","cwrap","numericArgs","numericRet","UTF8Decoder","UTF8ArrayToString","u8Array","maxBytesToRead","endPtr","u0","ch","HEAPU8","stringToUTF8Array","outU8Array","outIdx","maxBytesToWrite","startIdx","outPtr","alignUp","updateGlobalBufferAndViews","buf","DYNAMIC_BASE","DYNAMICTOP_PTR","INITIAL_TOTAL_MEMORY","callRuntimeCallbacks","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","preRun","addOnPreRun","initRuntime","preMain","postRun","addOnPostRun","runDependencies","dependenciesFulfilled","addRunDependency","removeRunDependency","memoryInitializer","dataURIPrefix","isDataURI","filename","tempDoublePtr","___assert_fail","_emscripten_get_heap_size","_emscripten_memcpy_big","___setErrNo","abortOnCannotGrowMemory","requestedSize","emscripten_realloc_buffer","newBuffer","_emscripten_replace_memory","_emscripten_resize_heap","oldSize","PAGE_MULTIPLE","LIMIT","MIN_TOTAL_MEMORY","newSize","replacement","decodeBase64","keyStr","chr1","chr2","chr3","enc1","enc2","enc3","enc4","intArrayFromBase64","decoded","asmGlobalArg","asmLibraryArg","asm","env","Z","$","xc","Pd","Jd","aa","ba","_d","da","Id","Hd","Kb","ea","Rd","Qd","$a","Td","Sb","Yb","Ud","Ub","oa","ua","Wb","Tb","fa","ga","ha","ja","_c","Zc","Ha","ka","Ia","Kd","Zb","la","Gd","$c","ma","xd","Cd","Ad","Bd","yd","zd","Fc","Gc","Dd","Ic","Hc","ra","sa","ta","wa","xa","ya","za","Aa","Ba","Ca","Da","nc","Ea","Fa","Ga","Zd","fc","pc","Wd","Xd","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Fd","Ta","Ua","Va","Wa","Xa","Ya","Za","bb","db","eb","fb","gb","hb","Ib","jb","kb","lb","mb","Fb","ob","rd","$b","zb","rb","sb","lc","rc","qd","pd","tb","md","ub","wb","xb","nd","yb","Ab","Bb","Cb","Db","Eb","Vd","Gb","wd","Hb","Jb","Rc","Nd","Lb","ic","kc","Mb","Nb","Ob","Pb","Qb","Rb","Vb","Xb","ec","gc","hc","jc","mc","oc","qc","tc","uc","wc","yc","zc","Ac","Bc","Cc","Dc","Ec","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Yd","Sd","Sc","Tc","Uc","Vc","dd","Wc","Xc","Yc","cd","ed","fd","gd","hd","jd","kd","ld","td","ud","vd","Ed","$d","Ld","Md","Od","applyMemoryInitializer","doBrowserLoad","memoryInitializerBytes","useRequest","calledRun","runCaller","doRun","what","NUMBER","H3_ERROR","BOOLEAN","H3_LOWER","H3_UPPER","RESOLUTION","POINTER","BINDINGS","E_SUCCESS","E_FAILED","E_DOMAIN","E_LATLNG_DOMAIN","E_RES_DOMAIN","E_CELL_INVALID","E_DIR_EDGE_INVALID","E_UNDIR_EDGE_INVALID","E_VERTEX_INVALID","E_PENTAGON","E_DUPLICATE_INPUT","E_NOT_NEIGHBORS","E_RES_MISMATCH","E_MEMORY_ALLOC","E_MEMORY_BOUNDS","E_OPTION_INVALID","E_INDEX_INVALID","E_BASE_CELL_DOMAIN","E_DIGIT_DOMAIN","E_DELETED_DIGIT","H3_ERROR_MSGS","E_UNKNOWN_UNIT","E_ARRAY_LENGTH","E_NULL_INDEX","JS_ERROR_MESSAGES","UNKNOWN_ERROR_MSG","createError","messages","errCode","hasValue","H3LibraryError","JSBindingError","throwIfError","H3","def","BASE_16","SZ_INT","SZ_DBL","SZ_INT64","SZ_H3INDEX","SZ_LATLNG","SZ_CELLBOUNDARY","SZ_GEOPOLYGON","SZ_GEOLOOP","validateRes","validateH3Index","h3Index","MAX_JS_ARRAY_LENGTH","validateArrayLength","INVALID_HEXIDECIMAL_CHAR","h3IndexToSplitLong","upper","lower","hexFrom32Bit","tempStr","zeroPad","topNum","splitLongToH3Index","fullLen","numStr","numZeroes","outStr","polygonArrayToGeoLoop","polygonArray","geoLoop","isGeoJson","numVerts","geoCoordArray","latIndex","lngIndex","degsToRads","coordinatesToGeoPolygon","geoPolygon","geoLoopOffset","numHolesOffset","holesOffset","destroyGeoPolygon","geoLoopArrayOffset","readH3IndexFromPointer","cAddress","readInt64AsDoubleFromPointer","readArrayOfH3Indexes","maxCount","readSingleCoord","radsToDegs","readLatLng","readLatLngGeoJson","readCellBoundary","cellBoundary","geoJsonCoords","closedLoop","vertsPos","readCoord","latLngToCell","latLng","cellToLatLng","cellToBoundary","formatAsGeoJson","polygonToCells","countPtr","hexagons","rad","interpolateTurbo","refreshUniforms","_lightsCache","_geometryCache","NodeMaterialObserver","builder","mrt","attributesData","lightsData","renderId","renderObjectData","materialData","mtlValue","geometryData","storedAttributes","currentAttributeCount","storedAttributeCount","storedAttributeData","storedIndexId","storedIndexVersion","currentIndexId","currentIndexVersion","morphChanged","materialLights","lightsNode","nodeFrame","isStatic","isBundle","IGNORED_FILES","getFilteredStack","lineNum","column","fileName","StackTrace","stackMessage","mainStack","stackString","cyrb53","seed","h2","hashString","hashArray","hash$1","typeFromLength","dataFromObject","getTypeFromLength","getTypedArrayFromType","getLengthFromType","getMemoryLengthFromType","getAlignmentFromType","getValueType","typeOf","getValueFromType","last4","base64ToArrayBuffer","getDataFromObject","arrayBufferToBase64","chars","NodeShaderStage","NodeUpdateType","NodeType","NodeAccess","defaultShaderStages","defaultBuildStages","shaderStages","vectorComponents","_parentBuildStage","_nodeId","Node","nodeType","updateType","ignores","subProperty","nodeData","nodeProperties","usageCount","outputNode","refNode","currentBeforeNodes","beforeNode","parentBuildStage","previousBuildStage","buildStage","childProperties","nodeChildren","inputNodes","inputArray","inputObject","isRoot","ArrayElementNode","indexNode","indexType","nodeSnippet","indexSnippet","ConvertNode","convertTo","requestType","overloadingType","TempNode","nodeVar","JoinNode","cur","maxLength","primitiveType","snippetValues","inputType","inputTypeLength","inputSnippet","_stringVectorComponents","SplitNode","vectorLength","nodeTypeLength","SetNode","sourceNode","targetNode","sourceType","componentType","targetSnippet","sourceSnippet","FlipNode","sourceCache","sourceProperty","componentIndex","InputNode","_regNum","ConstNode","MemberNode","structNode","currentStack","NodeElements","addMethodChaining","parseSwizzle","parseSwizzleAndSort","setProtoSwizzle","altA","altB","nodeObject","propUpper","altAUpper","altBUpper","swizzle","swizzleA","swizzleB","swizzleC","nodeBuilderFunctionsCacheMap","ShaderNodeObject","altType","getConstNode","Fn","ShaderNodeObjects","ShaderNodeArray","ShaderNodeProxy","NodeClass","assignNode","minParams","maxParams","verifyParamsLimit","tslName","nodeArray","ShaderNodeImmutable","ShaderCallNodeInternal","shaderNode","rawInputs","subBuild","subBuildProperty","previousSubBuildFn","previousFnCall","functionNodesCacheMap","functionNode","getLayoutParameters","secureNodeBuilder","getProxyParameters","hasParameters","jsFunc","subBuildOutput","subBuildInitialized","nodeObjects","inputNode","objectTarget","ShaderNodeInternal","layout","bools","uints","ints","floats","boolsCacheMap","bool","uintsCacheMap","uint","intsCacheMap","int","floatsCacheMap","float","cacheMaps","constNodesCacheMap","ConvertType","cacheMap","paramType","nodeObjectIntent","defined","getConstNodeType","ShaderNode","nodeProxy","nodeImmutable","nodeProxyIntent","fnId","FnNode","fullLayout","fnCall","subBuilds","setCurrentStack","getCurrentStack","If","Switch","Stack","vec2","ivec2","uvec2","bvec2","vec3","ivec3","uvec3","bvec3","vec4","ivec4","uvec4","bvec4","mat2","mat3","mat4","types","PropertyNode","varying","varyingProperty","diffuseColor","diffuseContribution","emissive","roughness","metalness","clearcoat","clearcoatRoughness","sheen","sheenRoughness","iridescence","iridescenceIOR","iridescenceThickness","alphaT","anisotropyT","anisotropyB","specularColor","specularColorBlended","specularF90","shininess","dashSize","gapSize","pointWidth","ior","transmission","thickness","attenuationDistance","attenuationColor","dispersion","UniformGroupNode","shared","uniformGroup","sharedUniformGroup","frameGroup","renderGroup","objectGroup","UniformNode","sharedNode","sharedNodeType","nodeUniform","uniformName","ArrayNode","AssignNode","targetLength","scopeData","needsSplitAssign","sourceVar","splitNode","targetRoot","assign","FunctionCallNode","generateInput","pointer","call","_vectorOperators","OperatorNode","op","aNode","bNode","finalOp","typeA","typeB","typeLength","fnOpSnippet","isGLSL","sub","mul","div","equal","notEqual","lessThan","greaterThan","lessThanEqual","greaterThanEqual","and","or","not","xor","bitAnd","bitNot","bitOr","bitXor","shiftLeft","shiftRight","incrementBefore","decrementBefore","decrement","modInt","MathNode","cNode","aType","bType","cType","aLen","bLen","cLen","tA","tB","mulNode","INFINITY","PI","PI2","TWO_PI","HALF_PI","all","any","exp2","log2","inverseSqrt","floor","fract","sinh","cosh","tanh","asinh","acosh","atanh","negate","oneMinus","dFdx","dFdy","round","reciprocal","trunc","fwidth","transpose","min$1","max$1","reflect","difference","pow2","pow3","pow4","transformDirection","cbrt","saturate","refract","faceForward","rand","sn","mixElement","smoothstepElement","stepElement","faceforward","inversesqrt","ConditionalNode","condNode","ifNode","elseNode","ifType","elseType","currentNodeBlock","isUniformFlow","needsOutput","ifSnippet","elseSnippet","mathSnippet","ContextNode","previousContext","nodeOrValue","uniformFlow","setName","builtinShadowContext","shadowNode","shadowColorNode","builtinAOContext","aoNode","aoValue","VarNode","readOnly","addBefore","baseStack","isWebGPUBackend","isDeterministic","shouldTreatAsReadOnly","vectorType","declarationPrefix","createVar","Var","Const","VarIntent","SubBuildNode","VaryingNode","sampling","interpolationType","interpolationSampling","propertyKey","vertexStage","sRGBTransferEOTF","sRGBTransferOETF","WORKING_COLOR_SPACE","OUTPUT_COLOR_SPACE","ColorSpaceNode","colorNode","workingToColorSpace","colorSpaceToWorking","convertColorSpace","ReferenceElementNode$1","referenceNode","arrayType","elementType","ReferenceBaseNode","uniformType","reference$1","RendererReferenceNode","rendererReference","ToneMappingNode","exposureNode","toneMappingExposure","toneMappingFn","exposure","_bufferLib","_getBufferAttribute","BufferAttributeNode","bufferStride","bufferOffset","bufferData","nodeAttribute","createBufferAttribute","instanced","dynamicBufferAttribute","instancedBufferAttribute","instancedDynamicBufferAttribute","bufferNode","IndexNode","vertexIndex","instanceIndex","subgroupIndex","invocationSubgroupIndex","invocationLocalIndex","drawIndex","ComputeNode","computeNode","workgroupSize","countSnippet","outputComputeNode","computeKernel","compute","IsolateNode","previousCache","isolate","BypassNode","callNode","bypass","remap","inLowNode","inHighNode","outLowNode","outHighNode","doClamp","remapClamp","ExpressionNode","Discard","conditional","Return","RenderOutputNode","outputColorSpace","renderOutput","DebugNode","title","border","log$1","debug","InspectorBase","InspectorNode","inspector","addNodeElement","AttributeNode","attributeType","uv$1","TextureSizeNode","textureNode","levelNode","textureProperty","textureSize","MaxMipLevelNode","maxMipLevel","NodeError","EmptyTexture$1","TextureNode","uvNode","biasNode","compareNode","compareStepNode","compareFunction","offsetNode","uvSnippet","levelSnippet","biasSnippet","depthSnippet","compareSnippet","gradSnippet","offsetSnippet","depthNode","gradNode","compareStepSnippet","finalDepthSnippet","amountNode","gradNodeX","gradNodeY","matrixUniform","flipYUniform","newNode","textureBase","uniformTexture","textureLoad","textureLevel","sampler","samplerComparison","BufferNode","bufferCount","UniformArrayElementNode","uniformArrayNode","paddedType","UniformArrayNode","paddedElementLength","BuiltinNode","builtin","_screenSizeVec","_viewportVec","ScreenNode","screenCoordinate","screenSize","screenDPR","screenUV","viewportSize","viewportCoordinate","viewportUV","viewportResolution","_cameraProjectionMatrixBase","_cameraProjectionMatrixArray","_cameraProjectionMatrixInverseBase","_cameraProjectionMatrixInverseArray","_cameraViewMatrixBase","_cameraViewMatrixArray","_cameraWorldMatrixBase","_cameraWorldMatrixArray","_cameraNormalMatrixBase","_cameraNormalMatrixArray","_cameraPositionBase","_cameraPositionArray","_cameraViewportBase","_cameraViewportArray","cameraIndex","cameraNear","cameraFar","cameraProjectionMatrix","matrices","subCamera","cameraProjectionMatrixInverse","cameraViewMatrix","cameraWorldMatrix","cameraNormalMatrix","cameraPosition","subCameras","cameraViewport","viewports","Object3DNode","object3d","uniformNode","objectDirection","objectWorldMatrix","objectScale","objectViewPosition","objectRadius","ModelNode","modelDirection","modelWorldMatrix","modelPosition","modelScale","modelViewPosition","modelRadius","modelNormalMatrix","modelWorldMatrixInverse","modelViewMatrix","mediumpModelViewMatrix","highpModelViewMatrix","highpModelNormalViewMatrix","isHighPrecisionModelViewMatrix","clipSpace","positionGeometry","positionLocal","positionPrevious","positionWorld","positionWorldDirection","positionView","viewPos","positionViewDirection","FrontFacingNode","frontFacing","faceDirection","directionToFaceDirection","side","normalGeometry","normalLocal","normalFlat","normalViewGeometry","transformNormalToView","normalWorldGeometry","normalView","normalWorld","clearcoatNormalView","subBuildFn","transformNormal","transformedNormal","modelNormalViewMatrix","transformedNormalView","transformedNormalWorld","transformedClearcoatNormalView","materialRefractionRatio","materialEnvIntensity","materialEnvRotation","reflectView","refractView","reflectVector","refractVector","EmptyTexture","CubeTextureNode","cubeUV","cubeTextureBase","cubeTexture","uniformCubeTexture","ReferenceElementNode","ReferenceNode","referenceBuffer","MaterialReferenceNode","materialReference","q0","st0","st1","q1perp","q0perp","scale$1","tangentViewFrame","bitangentViewFrame","tangentGeometry","tangentLocal","tangentView","tangentWorld","getBitangent","crossNormalTangent","varyingName","bitangent","bitangentGeometry","bitangentLocal","bitangentView","bitangentWorld","TBNViewMatrix","parallaxDirection","parallaxUV","bentNormalView","bentNormal","directionToColor","colorToDirection","unpackNormal","NormalMapNode","scaleNode","normalMapType","unpackNormalMode","normalMap","dHdxy_fwd","bumpScale","sampleTexture","texNode","Hll","perturbNormalArb","surf_pos","surf_norm","dHdxy","vSigmaX","vSigmaY","vN","R2","fDet","vGrad","BumpMapNode","bumpMap","_propertyCache","MaterialNode","opacityNode","specularIntensityNode","specularColorNode","roughnessNode","metalnessNode","emissiveIntensityNode","emissiveNode","clearcoatNode","clearcoatRoughnessNode","sheenNode","sheenRoughnessNode","anisotropyPolar","materialAnisotropyVector","iridescenceThicknessMaximum","iridescenceThicknessMinimum","transmissionNode","thicknessNode","outputType","materialAlphaTest","materialColor","materialShininess","materialEmissive","materialOpacity","materialSpecular","materialSpecularIntensity","materialSpecularColor","materialSpecularStrength","materialReflectivity","materialRoughness","materialMetalness","materialNormal","materialClearcoat","materialClearcoatRoughness","materialClearcoatNormal","materialRotation","materialSheen","materialSheenRoughness","materialAnisotropy","materialIridescence","materialIridescenceIOR","materialIridescenceThickness","materialTransmission","materialThickness","materialIOR","materialAttenuationDistance","materialAttenuationColor","materialLineScale","materialLineDashSize","materialLineGapSize","materialLineWidth","materialLineDashOffset","materialPointSize","materialDispersion","materialLightMap","materialAO","modelViewProjection","StorageArrayElementNode","storageBufferNode","structTypeNode","isAssignContext","storageElement","StorageBufferNode","storage","InstanceNode","instanceMatrixNode","instanceColorNode","isStorageColor","bufferFn","instancePosition","instanceNormal","assignBuffer","interleaved","instanceBuffers","InstancedMeshNode","BatchNode","batchMesh","indirectId","batchingMatrix","batchingNormal","_frameId","SkinningNode","skinnedMesh","skinIndexNode","skinWeightNode","bindMatrixNode","bindMatrixInverseNode","boneMatX","boneMatY","boneMatZ","boneMatW","skinVertex","skinned","skinMatrix","skinNormal","skinTangent","skinPosition","skinning","computeSkinning","toPosition","LoopNode","baseParam","fnUpdateCall","shaderNodeData","stackNode","isWhile","loopSnippet","internalParam","startSnippet","endSnippet","updateSnippet","deltaOperator","declarationSnippet","conditionalSnippet","stackSnippet","Loop","Continue","Break","_morphTextures","_morphVec4","getMorph","bufferMap","texelIndex","getEntry","bufferTexture","MorphNode","morphReference","LightingNode","AONode","LightingContextNode","lightingModel","backdropNode","backdropAlphaNode","directDiffuse","directSpecular","indirectDiffuse","indirectSpecular","reflectedLight","lightingContext","IrradianceNode","_size$5","ViewportTextureNode","framebufferTexture","cacheTextures","canvasTarget","currentGenerateMipmaps","viewportTextureNode","viewportTexture","viewportMipTexture","_singletonOpaqueViewportTextureNode","viewportOpaqueMipTexture","_sharedDepthbuffer","ViewportDepthTextureNode","viewportDepthTexture","ViewportDepthNode","valueNode","depthBase","viewZToPerspectiveDepth","viewZToOrthographicDepth","viewZ","perspectiveDepthToViewZ","viewZToReversedOrthographicDepth","orthographicDepthToViewZ","viewZToReversedPerspectiveDepth","viewZToLogarithmicDepth","numerator","logarithmicDepthToViewZ","linearDepth","viewportLinearDepth","ClippingNode","clippingContext","intersectionPlanes","unionPlanes","distanceToPlane","distanceGradient","clipOpacity","numUnionPlanes","clippingPlanes","numIntersectionPlanes","intersectionClipOpacity","clipped","hw_clip_distances","clippingAlpha","hardwareClipping","ALPHA_HASH_SCALE","hash2D","hash3D","getAlphaHashThreshold","maxDeriv","pixScale","pixScales","lerpFactor","cases","VertexColorNode","vertexColor","blendBurn","blend","blendDodge","blendScreen","blendOverlay","outAlpha","premultiplyAlpha","unpremultiplyAlpha","NodeMaterial","_value","mvp","vertexNode","resultNode","clippingNode","outgoingLightNode","basicOutput","isCustomOutput","materialMRT","fragmentNode","candidateCount","displacementMap","displacementScale","displacementBias","alphaTestNode","materialLightsNode","envNode","lightMapNode","lightsN","fogNode","_defaultValues$d","LineBasicNodeMaterial","_defaultValues$c","LineDashedNodeMaterial","dashScaleNode","dashSizeNode","gapSizeNode","vLineDistance","_defaultValues$a","MeshNormalNodeMaterial","equirectUV","CubeRenderTarget","texture$1","currentMRT","_cache$1","CubeMapNode","defaultTexture","cubeMap","isEquirectangularMapReady$1","cubeMapNode","BasicEnvironmentNode","BasicLightMapNode","RECIPROCAL_PI","LightingModel","BasicLightingModel","ambientOcclusion","irradianceLightMap","outgoingLight","_defaultValues$9","MeshBasicNodeMaterial","F_Schlick","f0","f90","dotVH","fresnel","BRDF_Lambert","G_BlinnPhong_Implicit","D_BlinnPhong","dotNH","BRDF_BlinnPhong","lightDirection","halfDir","PhongLightingModel","specular","lightColor","irradiance","_defaultValues$8","MeshLambertNodeMaterial","_defaultValues$7","MeshPhongNodeMaterial","shininessNode","specularNode","getGeometryRoughness","dxy","getRoughness","geometryRoughness","roughnessFactor","V_GGX_SmithCorrelated","dotNL","dotNV","gv","V_GGX_SmithCorrelated_Anisotropic","alphaB","dotTV","dotBV","dotTL","dotBL","D_GGX","D_GGX_Anisotropic","dotTH","dotBH","w2","BRDF_GGX","normalView$1","USE_IRIDESCENCE","USE_ANISOTROPY","DFGLUT","BRDF_GGX_Multiscatter","_roughness","singleScatter","dfgV","dfgL","FssEss_V","FssEss_L","Ess_V","Ess_L","Ems_V","Ems_L","Favg","Fms","compensationFactor","multiScatter","EnvironmentBRDF","fab","Schlick_to_F0","x5","D_Charlie","invAlpha","sin2h","V_Neubelt","BRDF_Sheen","LTC_Uv","LUT_BIAS","LTC_ClippedSphereFormFactor","LTC_EdgeVectorFormFactor","theta_sintheta","LTC_Evaluate","mInv","lightNormal","T1","T2","coords0","coords1","coords2","coords3","vectorFormFactor","bC","w3","g0","g1","bicubic","uvScaled","iuv","fuv","g0x","g1x","h0x","h1x","h0y","h1y","textureBicubicLevel","lodNode","fLodSize","cLodSize","fLodSizeInv","cLodSizeInv","fSample","cSample","textureBicubic","strength","getVolumeTransmissionRay","modelMatrix","refractionVector","applyIorToRoughness","viewportBackSideTexture","viewportFrontSideTexture","getTransmissionSample","fragCoord","transmissionSample","volumeAttenuation","transmissionDistance","attenuationCoefficient","getIBLVolumeRefraction","projMatrix","transmittedLight","transmittance","halfSpread","iors","transmissionRay","refractedRayExit","ndcPos","refractionCoords","attenuatedColor","transmittanceFactor","XYZ_TO_REC709","Fresnel0ToIor","fresnel0","sqrtF0","IorToFresnel0","transmittedIor","incidentIor","evalSensitivity","OPD","shift","phase","VAR","evalIridescence","outsideIOR","eta2","cosTheta1","thinFilmThickness","baseF0","cosTheta2Sq","cosTheta2","R12","T121","phi12","phi21","baseIOR","R23","phi23","R123","r123","Rs","Cm","Sm","IBLSheenBRDF","viewDir","rInv","clearcoatF0","clearcoatF90","PhysicalLightingModel","dotNVi","iridescenceFresnelDielectric","iridescenceFresnelMetallic","iridescenceF0","Fr","FssEss","Ems","sheenAlbedoV","sheenAlbedoL","sheenEnergyComp","ccIrradiance","lightPosition","halfWidth","ltc_1","ltc_2","Ncc","uvClearcoat","t1Clearcoat","t2Clearcoat","mInvClearcoat","fresnelClearcoat","diffuse","sheenAlbedo","radiance","iblIrradiance","dotNVcc","clearcoatEnv","singleScatteringDielectric","multiScatteringDielectric","singleScatteringMetallic","multiScatteringMetallic","singleScattering","multiScattering","totalScatteringDielectric","cosineWeightedIrradiance","aoNV","aoExp","Fcc","clearcoatLight","sheenLight","cubeUV_r0","cubeUV_m0","cubeUV_r1","cubeUV_m1","cubeUV_r4","cubeUV_m4","cubeUV_r5","cubeUV_m5","cubeUV_r6","cubeUV_m6","cubeUV_minMipLevel","cubeUV_minTileSize","getFace","absDirection","getUV","roughnessToMip","mip","getDirection","uv_immutable","textureCubeUV","sampleDir_immutable","roughness_immutable","CUBEUV_TEXEL_WIDTH","CUBEUV_TEXEL_HEIGHT","CUBEUV_MAX_MIP","sampleDir","mipF","mipInt","color0","bilinearCubeUV","direction_immutable","mipInt_immutable","filterInt","faceSize","getSample","outputDirection","sampleDirection","blur","latitudinal","dTheta","gl_FragColor","radicalInverse_VdC","bits_immutable","hammersley","importanceSampleGGX_VNDF","Xi","Nh","ggxConvolution","N_immutable","prefilteredColor","totalWeight","H_tangent","NdotL","sampleColor","_cubeCamera","_clearColor$2","_uniformsMap","_faceLib","_direction","_outputDirection","faceIdx","_getMaterial","materialUniforms","envTexture","_generateCubeUVSize","_getPMREMFromTexture","_getCache","cacheTexture","isCubeMapReady","isEquirectangularMapReady","rendererCache","PMREMNode","cubeUVSize","pmremVersion","pmremTexture","_rendererCache","EnvironmentNode","cacheEnvNode","radianceNormalView","createRadianceContext","createIrradianceContext","isolateRadiance","isolateIrradiance","clearcoatRadiance","clearcoatRadianceContext","isolateClearcoatRadiance","pmremCache","normalViewNode","reflectVec","normalWorldNode","_defaultValues$6","MeshStandardNodeMaterial","_defaultValues$5","MeshPhysicalNodeMaterial","iorNode","iridescenceNode","iridescenceIORNode","iridescenceThicknessNode","anisotropyV","attenuationDistanceNode","attenuationColorNode","dispersionNode","getGradientIrradiance","gradientMap","fw","ToonLightingModel","_defaultValues$4","MeshToonNodeMaterial","matcapUV","_defaultValues$3","MeshMatcapNodeMaterial","matcapColor","RotateNode","positionNode","rotationNode","cosAngle","sinAngle","rotationXMatrix","rotationYMatrix","rotationZMatrix","_defaultValues$2","SpriteNodeMaterial","sizeAttenuation","alignedPosition","rotatedPosition","_defaultValues$1","_size$4","PointsNodeMaterial","sizeNode","pointSize","ShadowMaskModel","lightNode","_defaultValues","ShadowNodeMaterial","Animation","ChainMap","weakMap","_id$a","getKeys","RenderObject","renderContext","bindingGroup","nodeAttributes","vertexBuffers","attributesId","drawParams","firstVertex","lastVertex","itemCount","targets","valueKey","_chainKeys$3","RenderObjects","pipelines","passId","chainMap","DataMap","AttributeType","GPU_CHUNK_BYTES","BlendColorFactor","OneMinusBlendColorFactor","Attributes","backend","attributeData","getWireframeVersion","getWireframeId","getWireframeIndex","onDispose","wireframeAttribute","callId","wireframes","Info","readbackBuffer","maxByteLength","bytesPerChannel","bytesPerPixel","mipmapSize","mipWidth","mipHeight","Pipeline","RenderObjectPipeline","vertexProgram","fragmentProgram","ComputePipeline","computeProgram","_id$9","ProgrammableStage","transforms","Pipelines","previousPipeline","nodeBuilderState","stageCompute","pipeline","promises","stageVertex","stageFragment","pipelineData","Bindings","bindGroup","needsBindingsUpdate","cacheBindings","bindingData","texturesTextureData","textureData","samplerKey","needsDoublePass","RenderList","lighting","_chainKeys$2","RenderLists","_id$8","RenderContext","getCacheKey","RenderContexts","callDepth","attachmentState","mrtState","renderStateKey","_size$3","Textures","renderTargetData","sampleCount","depthTextureMips","useDepthTexture","textureNeedsUpdate","isRenderTarget","htmlTextures","skipAutoGeneration","mipLevelCount","isDefaultTexture","bindingsData","Color4","ParameterNode","struct","memberType","parameter","StackNode","boolNode","methodNode","caseNodes","caseNode","previousStack","buildNode","stages","parents","newNodes","getMembersLayout","members","StructTypeNode","membersLayout","BYTES_PER_ELEMENT","maxAlignment","member","alignment","overhang","StructNode","structTypeProperty","structType","structLayout","OutputStructNode","structPrefix","outputStruct","BlendMode","_noBlending","_materialBlending","getTextureIndex","MRTNode","outputNodes","mrtNode","outputs","blendings","mrtTarget","BitcastNode","conversionType","valueType","valueLength","bitcast","floatBitsToInt","floatBitsToUint","intBitsToFloat","uintBitsToFloat","registeredBitcountFunctions","BitcountNode","outputConvertNode","numTrailingZeros","numBits","baseFn","baseMethod","newMethod","countTrailingZeros","countLeadingZeros","countOneBits","parabola","gain","pcurve","sinc","PackFloatNode","encoding","vectorNode","packSnorm2x16","packUnorm2x16","packHalf2x16","UnpackFloatNode","uintNode","unpackSnorm2x16","unpackUnorm2x16","unpackHalf2x16","tri3","triNoise3D","speed","rz","dg","FunctionOverloadingNode","functionNodes","parametersNodes","candidateFn","bestCandidateFn","currentScore","overloadingBaseFn","overloadingFn","frameId","oscSine","oscSquare","oscTriangle","oscSawtooth","replaceDefaultUV","rotateUV","spherizeUV","deltaOffset","billboarding","horizontal","vertical","worldMatrix","viewportSafeUV","spritesheetUV","countNode","frameNode","frameNum","row","uvFrameOffset","triplanarTextures","textureXNode","textureYNode","textureZNode","normalNode","textureX","textureY","textureZ","triplanarTexture","_reflectorPlane","_reflectorWorldPosition","_cameraWorldPosition","_rotationMatrix","_lookAtPosition","clipPlane","_view","_q","_size$2","_defaultRT","_defaultUV","_inReflector","ReflectorNode","ReflectorBaseNode","resolutionScale","bounces","virtualCamera","isFacingAway","needsClear","projectionMatrix","clipBias","currentAutoClear","previousName","reflector","QuadGeometry","flipY","QuadMesh","_size$1","RTTNode","effectiveWidth","effectiveHeight","rtt","convertToTexture","getViewPosition","screenPosition","projectionMatrixInverse","clipSpacePosition","viewSpacePosition","getScreenPosition","viewPosition","sampleClipPos","sampleUv","getNormalFromDepth","l2","l1","dl","dr","dpdx","dpdy","interleavedGradientNoise","vogelDiskSample","sampleIndex","samplesCount","goldenAngle","SampleNode","sample","EventNode","eventType","createEvent","OnObjectUpdate","OnMaterialUpdate","OnFrameUpdate","OnBeforeObjectUpdate","OnBeforeMaterialUpdate","OnBeforeFrameUpdate","StorageInstancedBufferAttribute","typeClass","StorageBufferAttribute","instancedArray","PointUVNode","pointUV","backgroundBlurriness","backgroundIntensity","backgroundRotation","StorageTextureNode","storeNode","storeSnippet","storageTexture","textureStore","Texture3DNode","texture3D","texture3DLoad","texture3DLevel","UserDataNode","userData","_objectData","VelocityNode","previousModelMatrix","getPreviousMatrix","cameraData","getData","previousModelViewMatrix","clipPositionCurrent","clipPositionPrevious","ndcPositionCurrent","ndcPositionPrevious","velocity","grayscale","luminance","adjustment","vibrance","average","amt","luminanceCoefficients","cdl","luma","pv","posterize","_sharedFramebuffer","ViewportSharedTextureNode","viewportSharedTexture","_size","PassTextureNode","passNode","PassMultipleTextureNode","textureName","previousTexture","PassNode","prevTexture","viewZNode","linearDepthNode","outputRenderTarget","currentTransparent","currentOpaque","currentMask","currentContextNode","currentOverrideMaterial","currentSceneName","passTexture","depthPass","ToonOutlinePassNode","alphaNode","currentRenderObjectFunction","outlineMaterial","outlineNormal","ratio","pos2","norm","originalMaterial","toonOutlinePass","linearToneMapping","reinhardToneMapping","cineonToneMapping","RRTAndODTFit","acesFilmicToneMapping","ACESInputMat","ACESOutputMat","LINEAR_REC2020_TO_LINEAR_SRGB","LINEAR_SRGB_TO_LINEAR_REC2020","agxDefaultContrastApprox","x_immutable","x4","agxToneMapping","colortone","AgXInsetMatrix","AgXOutsetMatrix","AgxMinEv","AgxMaxEv","neutralToneMapping","StartCompression","Desaturation","peak","newPeak","CodeNode","language","nodeCode","js","wgsl","glsl","FunctionNode","nodeFunction","nativeFn","glslFn","wgslFn","getViewZNode","getViewZ","rangeFogFactor","densityFogFactor","exponentialHeightFogFactor","RangeNode","minNode","maxNode","minLength","minValue","maxValue","minElementValue","maxElementValue","ComputeBuiltinNode","builtinName","computeBuiltin","numWorkgroups","workgroupId","globalId","localId","subgroupSize","BarrierNode","barrier","workgroupBarrier","storageBarrier","textureBarrier","WorkgroupInfoElementNode","workgroupInfoNode","WorkgroupInfoNode","workgroupArray","AtomicFunctionNode","pointerNode","methodSnippet","atomicNode","atomicFunc","atomicLoad","atomicStore","atomicAdd","atomicSub","atomicMax","atomicMin","atomicAnd","atomicOr","atomicXor","SubgroupFunctionNode","paramsString","subgroupElect","subgroupBallot","subgroupAdd","subgroupInclusiveAdd","subgroupExclusiveAdd","subgroupMul","subgroupInclusiveMul","subgroupExclusiveMul","subgroupAnd","subgroupOr","subgroupXor","subgroupMin","subgroupMax","subgroupAll","subgroupAny","subgroupBroadcastFirst","quadSwapX","quadSwapY","quadSwapDiagonal","subgroupBroadcast","subgroupShuffle","subgroupShuffleXor","subgroupShuffleUp","subgroupShuffleDown","quadBroadcast","uniformsLib","getLightData","lightShadowMatrix","lightProjectionUV","spotLightCoord","lightTargetPosition","lightViewPosition","lightTargetDirection","sortLights","getLightNodeById","lightNodes","_lightsNodeRef","_hashData","LightsNode","hashMap","hashColorNode","previousLightNodes","nodeLibrary","lightNodeClass","lightData","currentLightsNode","totalDiffuseNode","totalSpecularNode","backdrop","backdropAlpha","totalDiffuse","ShadowBaseNode","shadowPositionWorld","saveRendererState","resetRendererState","restoreRendererState","saveSceneState","resetSceneState","restoreSceneState","resetRendererAndSceneState","restoreRendererAndSceneState","shadowMaterialLib","BasicShadowFilter","shadowCoord","depthLayer","basic","PCFShadowFilter","depthCompare","compare","mapSize","radiusScaled","PCFSoftShadowFilter","VSMShadowFilter","distribution","variance","hardShadow","p_max","getShadowMaterial","disposeShadowMaterial","_shadowRenderObjectLibrary","_shadowRenderObjectKeys","getShadowRenderObjectFunction","shadowType","useVelocity","renderObjectFunction","VSMPassVertical","shadowPass","squaredMean","uvStride","uvStart","uvOffset","std_dev","VSMPassHorizontal","_shadowFilterLib","_rendererState","_quadMesh","ShadowNode","filterFn","frustumTest","shadowPosition","bias","coordZ","cameraNearLocal","cameraFarLocal","hasTextureCompare","shadowPassVertical","shadowPassHorizontal","shadowIntensity","normalBias","shadowNormalBias","shadowDepthTexture","shadowColor","shadowOutput","inspectName","currentShadowType","depthVersion","_shadowCameraLayer","_clearColor$1","_cubeDirectionsWebGPU","_cubeUpsWebGPU","_cubeDirectionsWebGL","_cubeUpsWebGL","BasicPointShadowFilter","bd3D","dp","PointShadowFilter","absDir","sample0","sample1","sample2","sample3","sample4","pointShadowFilter","shadowPositionAbs","shadowCameraNear","shadowCameraFar","PointShadowNode","isWebGPU","cubeDirections","cubeUps","previousAutoClear","previousClearColor","previousClearAlpha","pointShadow","AnalyticLightNode","customShadowNode","directLightData","directRectAreaLightData","getDistanceAttenuation","lightDistance","cutoffDistance","decayExponent","distanceFalloff","directPointLight","lightVector","attenuation","PointLightNode","checker","shapeCircle","len2","dlen","mx_select","b_immutable","t_immutable","f_immutable","mx_negate_if","val_immutable","mx_floor","mx_floorfrac","mx_bilerp_0","v0_immutable","v1_immutable","v2_immutable","v3_immutable","s_immutable","mx_bilerp_1","mx_bilerp","mx_trilerp_0","v4_immutable","v5_immutable","v6_immutable","v7_immutable","r_immutable","v7","v6","v5","v4","mx_trilerp_1","mx_trilerp","mx_gradient_float_0","hash_immutable","y_immutable","mx_gradient_float_1","z_immutable","mx_gradient_float","mx_gradient_vec3_0","mx_gradient_vec3_1","mx_gradient_vec3","mx_gradient_scale2d_0","v_immutable","mx_gradient_scale3d_0","mx_gradient_scale2d_1","mx_gradient_scale2d","mx_gradient_scale3d_1","mx_gradient_scale3d","mx_rotl32","k_immutable","mx_bjmix","mx_bjfinal","a_immutable","c_immutable","mx_bits_to_01","mx_fade","mx_hash_int_0","mx_hash_int_1","mx_hash_int_2","mx_hash_int_3","xx_immutable","mx_hash_int_4","yy_immutable","mx_hash_int","mx_hash_vec3_0","mx_hash_vec3_1","mx_hash_vec3","mx_perlin_noise_float_0","p_immutable","mx_perlin_noise_float_1","fz","mx_perlin_noise_float","mx_perlin_noise_vec3_0","mx_perlin_noise_vec3_1","mx_perlin_noise_vec3","mx_cell_noise_float_0","mx_cell_noise_float_1","mx_cell_noise_float_2","iz","mx_cell_noise_float_3","iw","mx_cell_noise_float$1","mx_cell_noise_vec3_0","mx_cell_noise_vec3_1","mx_cell_noise_vec3_2","mx_cell_noise_vec3_3","mx_cell_noise_vec3","mx_fractal_noise_float$1","octaves_immutable","lacunarity_immutable","diminish_immutable","diminish","lacunarity","octaves","amplitude","mx_fractal_noise_vec3$1","mx_fractal_noise_vec2$1","mx_fractal_noise_vec4$1","mx_worley_distance_0","xoff_immutable","yoff_immutable","jitter_immutable","metric_immutable","metric","yoff","xoff","off","cellpos","mx_worley_distance_1","zoff_immutable","zoff","mx_worley_distance","mx_worley_noise_float_0","localpos","sqdist","mx_worley_noise_vec2_0","mx_worley_noise_vec3_0","mx_worley_noise_float_1","mx_worley_noise_float$1","mx_worley_noise_vec2_1","mx_worley_noise_vec2$1","mx_worley_noise_vec3_1","mx_worley_noise_vec3$1","mx_unifiednoise2d$1","noiseType_immutable","texcoord_immutable","freq_immutable","offset_immutable","outmin_immutable","outmax_immutable","clampoutput_immutable","noiseType","texcoord","freq","outmin","outmax","clampoutput","mx_unifiednoise3d$1","position_immutable","mx_hsvtorgb","mx_rgbtohsv","mincomp","maxcomp","mx_srgb_texture_to_lin_rec709","color_immutable","isAbove","linSeg","powSeg","mx_aastep","afwidth","_ramp","mx_ramplr","valuel","valuer","mx_ramptb","valuet","valueb","mx_ramp4","valuetl","valuetr","valuebl","valuebr","_split","mx_splitlr","mx_splittb","mx_transform_uv","uv_scale","uv_offset","uv_geo","mx_safepower","in1","in2","mx_contrast","mx_noise_float","mx_noise_vec3","mx_noise_vec4","mx_unifiednoise2d","mx_unifiednoise3d","mx_worley_noise_float","mx_worley_noise_vec2","mx_worley_noise_vec3","mx_cell_noise_float","mx_fractal_noise_float","mx_fractal_noise_vec2","mx_fractal_noise_vec3","mx_fractal_noise_vec4","mx_add","mx_subtract","mx_multiply","mx_divide","mx_modulo","mx_power","mx_atan2","mx_timer","mx_frame","mx_invert","mx_ifgreater","value1","value2","mx_ifgreatereq","mx_ifequal","mx_separate","channelOrOut","mx_place2d","cosR","sinR","mx_rotate2d","mx_rotate3d","nAxis","cosA","sinA","oneMinusCosA","mx_heighttonormal","getParallaxCorrectNormal","cubePos","nDir","rbmax","rbmin","rbminmax","correction","getShIrradianceAt","shCoefficients","TSL","Background","sceneData","backgroundNode","backgroundMesh","onBackgroundDispose","backgroundMeshNode","isOrtho","orthoScale","viewProj","nodeMaterial","backgroundCacheKey","clearColorValue","_id$7","BindGroup","NodeBuilderState","computeShader","updateNodes","updateBeforeNodes","updateAfterNodes","instanceGroup","bindingsGroup","instanceBinding","NodeAttribute","NodeUniform","NodeVar","NodeVarying","NodeCode","_id$6","NodeCache","StructType","NumberUniform","Vector2Uniform","Vector3Uniform","Vector4Uniform","ColorUniform","Matrix2Uniform","Matrix3Uniform","Matrix4Uniform","NumberNodeUniform","Vector2NodeUniform","Vector3NodeUniform","Vector4NodeUniform","ColorNodeUniform","Matrix2NodeUniform","Matrix3NodeUniform","Matrix4NodeUniform","_id$5","_bindingGroupsCache","sharedNodeData","typeFromArray","toFloat","NodeBuilder","parser","groupName","groupNode","sharedGroup","cacheKeyString","currentContext","bindingGroupsCache","bindingsGroups","groupUniforms","updateBeforeType","updateAfterType","snippets","generateConst","baseType","dataAttribute","vecType","vecNum","newComponentType","lastStack","subBuildVariable","idNS","vars","subBuildVarying","nodeVarying","varyings","declarations","codes","nodeBlock","flowCodes","flowCodeBlock","needsFlowCode","nodeBlockHierarchy","flowCode","codeBlock","flowData","previousFlow","previousVars","previousDeclarations","flow","previousTab","previousShaderStage","variable","subBuildLayers","flowNodes","fromType","fromTypeLength","toTypeLength","NodeFrame","referenceMap","nodeRef","maps","nodeUpdateBeforeMap","previousFrameId","previousRenderId","nodeUpdateAfterMap","nodeUpdateMap","NodeFunctionInput","qualifier","isConst","AmbientLightNode","DirectionalLightNode","HemisphereLightNode","groundColorNode","lightDirectionNode","hemiDiffuseWeight","SpotLightNode","angleCosine","coneCosNode","penumbraCosNode","projectionUV","cutoffDistanceNode","decayExponentNode","angleCos","spotAttenuation","lightAttenuation","projected","lightCoord","IESSpotLightNode","iesMap","LightProbeNode","sdBox","ProjectorLightNode","penumbraCos","boxDist","angleFactor","_matrix41","_matrix42","_ltcLib","RectAreaLightNode","ltc","NodeParser","NodeFunction","declarationRegexp$1","propertiesRegexp$1","pragmaMain","parse$1","pragmaMainIndex","mainCode","declaration","inputsCode","propsMatches","nameMatch","blockCode","headerCode","GLSLNodeFunction","declarationCode","GLSLNodeParser","_chainKeys$1","_cacheKeyValues","NodeManager","nodeUniformsGroup","nodeBuilder","useAsync","nodeBuilderCache","buildNodeBuilder","computeData","environmentNode","cacheKeyData","nodeCache","sceneFog","_plane","ClippingContext","parentContext","destination","clippingGroup","srcClippingPlanes","dstClippingPlanes","RenderBundle","bundleGroup","_chainKeys","RenderBundles","bundles","bundle","NodeLibrary","nodeMaterialClass","toneMappingNode","materialType","materialNodeClass","materialClassType","lightClass","nodeClass","baseClass","_defaultLights","_weakMap","Lighting","XRRenderTarget","_cameraLPos","_cameraRPos","_contextNodeLib","XRManager","multiview","createXRLayer","translation","pixelwidth","pixelheight","rendercall","xrlayers","centralAngle","aspectratio","translationObject","quaternionObject","wasPresenting","rendererSize","contextNode","layersArray","CanvasTarget","minDepth","_scene","_drawingBufferSize","_screen","_shadowSide","Renderer","getFallback","alphaClear","previousRenderContext","previousRenderObjectFunction","previousHandleObjectFunction","previousCompilationPromises","sceneRef","compilationPromises","transparentDoublePassObjects","pipelinePromises","contextNodeData","errorMessage","renderBundle","renderBundleData","currentColorSpace","useToneMapping","useColorSpace","frameBufferTarget","useFrameBufferTarget","projectionMatrixNeedsUpdate","quadData","quad","currentXR","disposeInfo","queryPool","computeNodes","dispatchSize","computeList","onInitFn","computeBindings","computePipeline","rectangle","baseRenderList","doublePassList","hasMap","hasColorNode","hasCastShadowNode","hasMaskNode","shadowRGB","shadowAlpha","maskNode","materialOverride","materialColorNode","materialDepthNode","materialPositionNode","materialSide","needsRefresh","Binding","visibility","getFloatLength","floatLength","Buffer","UniformBuffer","_id$4","NodeUniformBuffer","UniformsGroup","byteLength","setArray","_id$3","NodeUniformsGroup","Sampler","clonedSampler","SampledTexture","NodeSampledTexture","access","NodeSampledCubeTexture","NodeSampledTexture3D","glslPolyfills","glslMethods","precisionLib","supports$1","interpolationTypeMap","interpolationModeMap","defaultPrecisions","GLSLNodeBuilder","codeNode","condSnippet","originalArray","numElements","isInteger","typeMap","pboTexture","pbo","storageArrayElementNode","elementNodeData","bufferNodeData","propertySizeName","channel","uvIndexSnippet","bindingSnippets","uniformGroups","typePrefix","bufferCountSnippet","sharedUniform","uniformSnippet","groupSnippets","structs","outputSnippet","flat","acc","curr","behavior","extensionName","planeCount","attributeNode","shaderData","shadersData","mainNode","flowSlotData","slotName","stageData","uniformGPU","sharedData","_color4","Backend","abstractRenderContext","contextData","DualAttributeData","dualBuffer","WebGLAttributeUtils","bufferGPU","bufferGPUDual","attributeInfo","dstBuffer","releaseCallback","drawBuffersIndexedExt","blendingType","hardwareClippingPlanes","indexBuffer","test","initialized","WebGLTextureUtils","extTextureNorm16","hasMipmaps","defaultTextures","textureGPU","getImage","renderContextData","dstTextureGPU","srcTextureData","dstTextureData","srcRenderContextData","dstRenderContextData","srcFramebuffer","dstFramebuffer","requireDrawFrameBuffer","srcHeight","partial","renderTargetContextData","msaaFrameBuffer","flippedY","typedArrayType","bytesPerTexel","bytesPerComponent","GLFeatureName","TimestampQueryPool","maxQueries","WebGLTimestampQueryPool","baseOffset","resolvePromises","framesDuration","totalDuration","timeoutId","isResolved","finalizeResolution","checkQuery","WebGLBackend","glContext","contextLossInfo","xrFramebuffer","timestampQueryPool","occlusionQueryCount","currentOcclusionQueries","currentOcclusionQueryObjects","occluded","completed","setFrameBuffer","resolveRenderTarget","clear","clearDepth","clearStencil","computeGroup","programGPU","transformBuffers","vaoKey","vaoGPU","transformFeedbackGPU","dualAttributeData","drawIdLocation","indexGPU","indexData","indexesGPU","cameraIndexBufferIndex","bindingsSearch","isRenderCameraDepthArray","prevActiveCubeFace","vp","parallel","checkStatus","transformVaryingNames","transformAttributeNodes","attributeNodes","uniformBuffers","isTyped","byteOffsetFactor","dataOffset","keysMatching","currentFrameBuffer","isRenderTargetArray","isXRRenderTarget","_hasExternalTextures","msaaFb","depthRenderbuffer","multiviewExt","depthInvalidationArray","mipLevel","invalidationArray","msaaRenderbuffers","isMRT","viewY","GPUPrimitiveTopology","GPUShaderStage","GPUCompareFunction","GPUStoreOp","GPULoadOp","GPUFrontFace","GPUCullMode","GPUIndexFormat","GPUTextureFormat","GPUAddressMode","GPUFilterMode","GPUBlendFactor","GPUBlendOperation","GPUColorWriteFlags","GPUStencilOperation","GPUBufferBindingType","GPUStorageTextureAccess","GPUSamplerBindingType","GPUTextureSampleType","GPUTextureDimension","GPUTextureViewDimension","GPUTextureAspect","GPUInputStepMode","GPUFeatureName","GPUFeatureMap","NodeSampler","StorageBuffer","NodeStorageBuffer","WebGPUTexturePassUtils","device","mipmapSource","textureBindingViewDimension","textureGPUDescriptor","baseArrayLayer","tempTexture","copyTransferPipeline","flipTransferPipeline","commandEncoder","sourceArrayLayer","destinationTexture","destinationArrayLayer","bindGroupLayout","passEncoder","encoder","passes","baseMipLevel","passDescriptor","_compareToWebGPU","_flipMap","WebGPUTextureUtils","samplerData","samplerDescriptorGPU","oldSamplerData","getFormat","dimension","primarySamples","isMSAA","textureDescriptorGPU","msaaTextureDescriptorGPU","colorTextureData","depthTextureGPU","bytesPerRow","defaultCubeTexture","flipIndex","originDepth","passUtils","blockData","isArrayTexture","bytesPerImage","addressMode","filterMode","formatGPU","textureFormatsTier1","declarationRegexp","propertiesRegexp","wgslTypeLib$1","resolvedType","WGSLNodeFunction","WGSLNodeParser","accessNames","wrapNames","gpuShaderStageLib","supports","wgslFnOpLib","wgslTypeLib","wgslCodeCache","wgslPolyfill","wgslMethods","diagnostics","WGSLNodeBuilder","coordType","addWrapSnippet","wrap","textureDimensionNode","textureDimensionsParams","dimensionType","isMultisampled","wrapFunction","textureDimension","levelType","textureDimensionMargin","clampMin","clampMax","valueSnippet","fnOp","bufferClass","directive","builtins","varyingIndex","attributesSnippet","samplingSnippet","isAttributeStructType","isStructArray","bufferSnippets","structSnippets","uniformIndexes","multisampled","is3D","componentPrefix","bufferAccessMode","bufferSnippet","groupBinding","allowGlobal","isOutputStruct","structSnippet","wgslMethod","workgroupSizeX","workgroupSizeY","workgroupSizeZ","structName","WebGPUUtils","typedArraysToVertexFormatPrefix","typedAttributeToVertexFormatPrefix","typeArraysToVertexFormatPrefixForItemSize1","WebGPUAttributeUtils","vertexBufferLayout","arrayStride","stepMode","readBufferGPU","readbackInfo","disposeCallback","cmdEncoder","gpuCommands","ArrayType","bytesPerUnit","paddedItemSize","BindGroupLayout","layoutGPU","WebGPUBindingUtils","bindGroupLayoutKey","bindLayoutGPU","bindGroupGPU","bindingPoint","entriesGPU","visibilities","bufferVisibility","resourceGPU","aspectGPU","dimensionViewGPU","bindingGPU","WebGPUCapabilities","WebGPUPipelineUtils","bindGroupLayouts","materialBlending","stencilFront","colorWriteMask","colorFormat","vertexModule","fragmentModule","primitiveState","depthStencilFormat","pipelineDescriptor","depthStencil","renderDepth","renderStencil","errorScope","colorFormats","pipelineGPU","setBlend","srcRGB","dstRGB","srcAlpha","dstAlpha","blendFactor","stencilCompare","stencilOperation","blendOperation","WebGPUTimestampQueryPool","bufferSize","currentOffsets","queryCount","bytesUsed","commandBuffer","_clearValue","WebGPUBackend","compatibilityTextureCompare","adapterOptions","adapter","supportedFeatures","deviceDescriptor","deviceLossInfo","canvasData","alphaMode","toneMappingMode","colorAttachment","colorAttachmentsConfig","descriptorBase","textureViews","sliceIndex","viewDescriptor","layerViewDescriptor","textureView","resolveTarget","depthTextureData","viewInfo","clearValue","occlusionQuerySet","depthStencilAttachment","colorAttachments","bundleEncoder","bundleSets","currentPass","layerDescriptor","depthAttachment","renderPass","queryResolveBuffer","currentOcclusionQueryBuffer","renderTargetContext","supportsDepth","supportsStencil","clearConfig","groupGPU","computeNodeData","passEncoderGPU","dispatchBuffer","dispatchCount","maxComputeWorkgroupsPerDimension","currentSets","currentBindingGroups","indexFormat","firstIndex","indirectOffsets","bindGroupIndex","sets","indexPos","primitiveTopology","bundleGPU","srcX","srcY","srcZ","srcWidth","srcDepth","sourceGPU","destinationGPU","IESSpotLight","ProjectorLight","StandardNodeLibrary","WebGPURenderer","BackendClass","LineSegmentsGeometry","lineSegments","instanceBuffer","instanceColorBuffer","LineMaterial","_start4","_end4","_ssOrigin","_ssOrigin3","_mvMatrix","_line","_closestPoint","_clipToWorldVector","_lineWidth","getWorldSpaceHalfWidth","raycastWorldUnits","instanceStart","instanceEnd","segmentCount","pointOnLine","raycastScreenSpace","deltaDist","zPos","isInClipSpace","isInside","LineSegments2","instanceDistanceBuffer","worldUnits","sphereMargin","distanceToSphere","boxMargin","distanceToBox","LineGeometry","Line2","Font","createPaths","line_height","offsetX","offsetY","char","createPath","glyph","cpx","cpy","cpx1","cpy1","cpx2","cpy2","outline","TextGeometry","font","asyncGeneratorStep","_asyncToGenerator","_next","_throw","_construct","_get","_superPropBase","ownKeys","_objectSpread2","_regenerator","Generator","_regeneratorDefine","GeneratorFunction","GeneratorFunctionPrototype","_superPropGet","emptyObject","childObj","linkKapsule","kapsulePropName","kapsuleType","dummyK","kapsuleInstance","returnVal","GLOBE_RADIUS","getGlobeRadius","relAltitude","phiSin","deg2Rad$1","THREE$i","createGlowMaterial","hollowRadius","createGlowGeometry","glowGeometry","curPos","GlowMesh","_THREE$Mesh","_ref$color","_ref$size","_ref$coefficient","_ref$power","_ref$hollowRadius","_ref$backside","backside","glowMaterial","THREE$h","GlobeLayerKapsule","Kapsule","showGlobe","showGraticules","showAtmosphere","_globeMaterial","defaultGlobeMaterial","globeObj","tileEngine","SlippyMap","globeGroup","graticulesObj","geoGraticule10","threeObj","globeMaterial","_state$globeObj$geome","_globeMaterial$map","_globeMaterial$bumpMa","colorStr2Hex","tinyColor","colorAlpha","color2ShaderArr","includeAlpha","sRGBColorSpace","rgbaMatch","_rgbaMatch$slice","_rgbaMatch$slice2","rgbArr","setMaterialOpacity","depthWrite","THREE$g","array2BufferAttr","ArrayClass","bufferAttr2Array","_dataBindAttr","_objBindAttr","_removeDelay","ThreeDigest","_DataBindMapper","_ref$dataBindAttr","dataBindAttr","_ref$objBindAttr","objBindAttr","_ref$removeDelay","removeDelay","removeFn","THREE$f","bfg$2","_bfg","BufferGeometryUtils$2","PointsLayerKapsule","tweenGroup","latAccessor","lngAccessor","altitudeAccessor","radiusAccessor","colorAccessor","pointGeometry","pxPerDeg","pointMaterials","createObj","updateObj","pointsGeometry","applyUpdate","_obj$__currentTargetD","globeCenter","targetD","currentTargetD","showCyl","dashedLineShaders","invisibleUndergroundShaderExtend","setRadiusShaderExtend","applyShaderExtensionToMaterial","extensionFn","setExtendedMaterialUniforms","uniformsFn","curFn","_excluded","THREE$e","FrameTicker$2","_FrameTicker","ArcsLayerKapsule","_state$ticker","_state$ticker2","_state$ticker3","timeDelta","curTranslate","startLatAccessor","startLngAccessor","startAltAccessor","endLatAccessor","endLngAccessor","endAltAccessor","altitudeAutoScaleAccessor","strokeAccessor","dashLengthAccessor","dashGapAccessor","dashInitialGapAccessor","dashAnimateTimeAccessor","stroke","useTube","dashAnimateTime","vertexColorArray","calcColorVertexArray","vertexRelDistanceArray","calcVertexRelDistances","_group$__currentTarge","curveD","calcCurve","altAutoScale","startLat","startLng","startAlt","endLat","endLng","endAlt","getVec","_polar2Cartesian","startPnt","endPnt","calcAltCp","m1Pnt","m2Pnt","_alt","calcSphereArc","startVec","endVec","getGreatCirclePoint","sphereArc","numSegments","numVerticesPerSegment","numVerticesGroup","getVertexColor","colorInterpolator","vertexColors","_vertexColor","vertexDistances","relDistance","THREE$d","bfg$1","BufferGeometryUtils$1","HexBinLayerKapsule","sumWeight","weightAccessor","topColorAccessor","sideColorAccessor","marginAccessor","byH3Idx","indexBy","hexBins","h3Idx","agg","hexMaterials","hexPointsGeometry","topColor","sideColor","nVertices","topFaceIdx","hexMaterial","hexPoints","centerLng","edgeLng","relNum","st","rat","margin","_obj$__hexCenter","clat","clng","elng","elat","topCurvatureResolution","vertexSurfaceRadius","sq","toRad","hav","latA","latB","lngA","lngB","sqrt2PI","gaussianKernel","bw","getGeoKDE","_ref3$lngAccessor","_ref3$latAccessor","_ref3$weightAccessor","bandwidth","bwRad","computeGeoKde","_callee","vertexGeoCoords","_navigator","_ref5$lngAccessor","_ref5$latAccessor","_ref5$weightAccessor","BW_RADIUS_INFLUENCE","_float","sCoords","sData","sRes","maxRRad","computeShaderFn","_args","_t2","_t3","tsl.Fn","tsl.If","tsl.uniform","tsl.storage","tsl[\"float\"]","tsl.instanceIndex","tsl.Loop","tsl.sqrt","tsl.sin","tsl.cos","tsl.asin","tsl.exp","tsl.negate","THREE$c","RES_BW_FACTOR","MIN_RESOLUTION","NUM_COLORS","defaultColorInterpolator","HeatmapsLayerKapsule","pointsAccessor","latPntAccessor","lngPntAccessor","weightPntAccessor","bandwidthAccessor","colorFnAccessor","saturationAccessor","baseAltitudeAccessor","topAltitudeAccessor","colorFn","baseAlt","topAlt","equatorNumSegments","vertexCoords","_cartesian2Polar","kdeVals","colorScale","scaleQuantize","rScale","THREE$b","PolygonsLayerKapsule","geoJsonAccessor","capCurvatureResolutionAccessor","capColorAccessor","capMaterialAccessor","sideMaterialAccessor","strokeColorAccessor","singlePolygons","objAttrs","geoId","capColor","capMaterial","sideMaterial","strokeColor","capCurvatureResolution","_obj$children","conicObj","strokeObj","addStroke","hasCap","hasSide","objMatch","sideIdx","capIdx","materialIdx","attrs","compFn","THREE$a","bfg","BufferGeometryUtils","HexedPolygonsLayerKapsule","resolutionAccessor","useDotsAccessor","curvatureResolutionAccessor","dotResolutionAccessor","h3Res","useDots","dotResolution","memD","currentMemD","h3Idxs","hexCenter","hexGeoJson","_h$hexCenter","centerPos","edgePos","_geoJson","THREE$9","interpolateVectors","fromPnts","toPnts","extendArr","repeatItem","arrLength","interpolator","THREE$8","FrameTicker$1","PathsLayerKapsule","dashLength","pointLatAccessor","pointLngAccessor","pointAltAccessor","useFatLine","calcPath","dashGap","dashInitialGap","calcLineDistance","_vertexColorArray","pointsInterpolator","interpolK","kPoints","totalDist","altAccessor","angularResolution","getInterpolatedVals","numPnts","numAdditionalPnts","lats","lngs","alts","THREE$7","TilesLayerKapsule","widthAccessor","heightAccessor","useGlobeProjectionAccessor","materialAccessor","useGlobeProjection","applyPosition","THREE$6","ParticlesLayerKapsule","particlesListAccessor","sizeAccessor","sizeAttenuationAccessor","textureAccessor","THREE$5","CircleLineGeometry","THREE$4","FrameTicker","RingsLayerKapsule","maxRadiusAccessor","propagationSpeedAccessor","repeatPeriodAccessor","periodSecs","circleObj","isMultiColor","curveR","maxRadius","maxAngle","propagationSpeed","isReverse","ang","transitionTime","glyphs","cssFontWeight","ascender","underlinePosition","cssFontStyle","original_font_information","descender","familyName","lineHeight","underlineThickness","defaultTypeFace","THREE$3","LabelsLayerKapsule","tf","circleGeometry","textObj","bbObj","textAccessor","rotationAccessor","includeDotAccessor","dotRadiusAccessor","dotOrientationAccessor","orientations","dotObj","_textObj$children","includeDot","dotOrient","dotR","textHeight","rot","THREE$2","HtmlElementsLayerKapsule","objs","isVisible","THREE$1","ObjectsLayerKapsule","parallelAccessor","objG","CustomLayerKapsule","customObjectUpdateAccessor","bindGlobeLayer","linkedGlobeLayerProps","linkedGlobeLayerMethods","bindPointsLayer","linkedPointsLayerProps","bindArcsLayer","linkedArcsLayerProps","bindHexBinLayer","linkedHexBinLayerProps","bindHeatmapsLayer","linkedHeatmapsLayerProps","bindHexedPolygonsLayer","linkedHexedPolygonsLayerProps","bindPolygonsLayer","linkedPolygonsLayerProps","bindPathsLayer","linkedPathsLayerProps","bindTilesLayer","linkedTilesLayerProps","bindParticlesLayer","linkedParticlesLayerProps","bindRingsLayer","linkedRingsLayerProps","bindLabelsLayer","linkedLabelsLayerProps","bindHtmlElementsLayer","linkedHtmlElementsLayerProps","bindObjectsLayer","linkedObjectsLayerProps","bindCustomLayer","linkedCustomLayerProps","Globe","globalPov","globeRadius","isBehindGlobe","povDist","povEdgeDist","povEdgeAngle","povPosDist","posDist","povPosAngle","_l$pauseAnimation","_l$resumeAnimation","Group$1","initProps","_ref15","_ref15$animateIn","animateIn","_ref15$waitForGlobeRe","waitForGlobeReady","initGlobe","_ref16","rotAxis","_ref17","fromKapsule","kapsule","initKapsuleWithSelf","_baseClass","_this$__kapsuleInstan","three","threeGlobe","_changeEvent","_startEvent","_endEvent","_EPS","_STATE","_mouseChange","_objectUp","_pan","_eyeDirection","_objectUpDirection","_objectSidewaysDirection","_moveDirection","TrackballControls","onPointerMove","onPointerDown","onPointerUp","onPointerCancel","onContextMenu","onMouseWheel","onKeyDown","onKeyUp","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","scale_x","scale_y","pageX","pageY","mouseAction","_TILT_LIMIT","_v","_twoPI","OrbitControls","interceptControlDown","interceptControlUp","deltaX","deltaY","dollyScale","zoomChanged","prevRadius","newRadius","radiusDelta","mouseBefore","prevZoom","mouseAfter","normalizedDelta","objectMatrix","targetDistance","rect","centerX","centerY","pointerId","newEvent","_tmpQuaternion","FlyControls","moveMult","rotMult","CopyShader","Pass","FullscreenTriangleGeometry","FullScreenQuad","ShaderPass","textureID","MaskPass","writeValue","ClearMaskPass","EffectComposer","passIndex","maskActive","RenderPass","oldAutoClear","oldClearAlpha","oldOverrideMaterial","_extends","_inheritsLoose","setPrototypeOf","_isNativeFunction","isNativeReflectConstruct","_wrapNativeSuper","isNativeFunction","Wrapper","construct","getPrototypeOf","PolishedError","_Error","colorToInt","convertToInt","red","green","blue","huePrime","chroma","secondComponent","lightnessModification","finalRed","finalGreen","finalBlue","namedColorMap","nameToHex","normalizedColorName","hexRegex","hexRgbaRegex","reducedHexRegex","reducedRgbaHexRegex","rgbRegex","rgbaRegex","hslRegex","hslaRegex","parseToRgb","normalizedColor","rgbMatched","rgbaMatched","hslMatched","rgbColorString","hslRgbMatched","hslaMatched","_hue","_saturation","_lightness","_rgbColorString","_hslRgbMatched","parseToHsl","reduceHexValue","reduceHexValue$1","numberToHex","colorToHex","convertToHex","hslToHex","firstValue","secondValue","thirdValue","fourthValue","isRgb","isRgba","isHsl","isHsla","toColorString","curried","combined","curry","adjustHue","degree","hslColor","guard","lowerBoundary","upperBoundary","darken","desaturate","lighten","otherColor","parsedColor1","parsedColor2","alphaDelta","weight2","mixedColor","curriedMix","mix$1","opacify","parsedColor","colorWithAlpha","curriedOpacify","curriedOpacify$1","setHue","setLightness","setSaturation","shade","percentage","tint","transparentize","xhtml","namespaces","creatorInherit","uri","creatorFixed","fullname","creator","none","selection_select","subgroups","subgroup","subnode","Selection","selectorAll","arrayAll","selection_selectAll","childMatcher","childFind","childFirst","selection_selectChild","childrenFilter","selection_selectChildren","selection_filter","sparse","selection_enter","EnterNode","datum","bindIndex","enter","exit","dataLength","bindKey","nodeByKeyValue","keyValues","keyValue","selection_data","arraylike","enterGroup","updateGroup","exitGroup","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","groups0","groups1","m0","merges","group0","group1","selection_order","selection_sort","sortgroups","sortgroup","selection_call","selection_nodes","selection_node","selection_size","selection_empty","selection_each","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","selection_attr","defaultView","styleRemove","styleConstant","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","classList","ClassList","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","selection_lower","selection_append","create","constantNull","selection_insert","before","selection_remove","selection_cloneShallow","selection_cloneDeep","selection_clone","selection_datum","contextListener","parseTypenames","typenames","onRemove","typename","on","onAdd","selection_on","dispatchEvent","window","dispatchConstant","dispatchFunction","selection_dispatch","selection_iterator","selection_selection","sourceEvent","_reactElement2VNode","cloneElement","_res$props","isReactRenderable","isValidElement","jsx","domEl","render$1","styleInject","insertAt","css_248z","domNode","_ref$style","isD3Selection","evSuffix","ev","mousePos","canvasWidth","canvasHeight","translate","threeRenderObjects","prevWidth","prevHeight","topObject","topIntersect","_state$pointerPos","lookAt","transitionDuration","_state$povPosTween","_state$povTgtTween","finalPos","finalLookAt","setCameraPos","setLookAt","camPos","camLookAt","getLookAt","lookAtVect","bboxArgs","maxBoxSide","paddedFov","fitHeightDistance","fitWidthDistance","newCameraPosition","objFilter","screenX","screenY","relCoords","_state$controls","_state$renderer","_state$postProcessing","_ref4$controlType","controlType","_ref4$useWebGPU","useWebGPU","_ref4$rendererConfig","rendererConfig","_ref4$extraRenderers","extraRenderers","_ref4$waitForLoadComp","waitForLoadComplete","Tooltip","evType","getOffset","scrollLeft","scrollTop","_state$camera","_state$camera2","_w","_h","_o","finishLoad","bindGlobe","ThreeGlobe","linkedGlobeProps","linkedGlobeMethods","bindRenderObjs","ThreeRenderObjects","linkedRenderObjsProps","linkedRenderObjsMethods","globe","_state$globe","_state$globe2","geoCoords","curGeoCoords","getGeoCoords","_state$povTween","finalGeoCoords","_state$globe3","cartesianCoords","globeIntersects","_state$globe$toGeoCoo","_ref6$waitForGlobeRea","globeInitConfig","roDomNode","globeR","controls","getGlobeObj","dataAccessors","objAccessors","objType","hoverObjFns","clickObjFns","hoverObj","_hoverObj","prevObjType","prevObjData","objData","objFns","_this$toGeoCoords","_this$toGeoCoords2"],"sources":["../../../../../../node_modules/esm-env/true.js","../../../../../../node_modules/esm-env/false.js","../../../../../../node_modules/svelte/src/internal/shared/utils.js","../../../../../../node_modules/svelte/src/internal/client/constants.js","../../../../../../node_modules/svelte/src/internal/shared/errors.js","../../../../../../node_modules/svelte/src/internal/client/errors.js","../../../../../../node_modules/svelte/src/constants.js","../../../../../../node_modules/svelte/src/internal/client/warnings.js","../../../../../../node_modules/svelte/src/internal/client/dom/hydration.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/equality.js","../../../../../../node_modules/svelte/src/internal/flags/index.js","../../../../../../node_modules/svelte/src/internal/shared/clone.js","../../../../../../node_modules/svelte/src/internal/client/context.js","../../../../../../node_modules/svelte/src/internal/client/dom/task.js","../../../../../../node_modules/svelte/src/internal/client/error-handling.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/status.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/utils.js","../../../../../../node_modules/svelte/src/store/utils.js","../../../../../../node_modules/svelte/src/store/shared/index.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/store.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/batch.js","../../../../../../node_modules/svelte/src/reactivity/create-subscriber.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/boundary.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/async.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/deriveds.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/sources.js","../../../../../../node_modules/svelte/src/internal/client/proxy.js","../../../../../../node_modules/svelte/src/internal/client/dom/operations.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/misc.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/effects.js","../../../../../../node_modules/svelte/src/internal/client/runtime.js","../../../../../../node_modules/svelte/src/utils.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/events.js","../../../../../../node_modules/svelte/src/internal/client/dom/reconciler.js","../../../../../../node_modules/svelte/src/internal/client/dom/template.js","../../../../../../node_modules/svelte/src/internal/client/render.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/branches.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/await.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/if.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/key.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/each.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/html.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/snippet.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/svelte-component.js","../../../../../../node_modules/svelte/src/internal/client/timing.js","../../../../../../node_modules/svelte/src/internal/client/loop.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/transitions.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/svelte-element.js","../../../../../../node_modules/svelte/src/internal/client/dom/blocks/svelte-head.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/actions.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/attachments.js","../../../../../../node_modules/clsx/dist/clsx.mjs","../../../../../../node_modules/svelte/src/internal/shared/attributes.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/class.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/style.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/bindings/select.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/attributes.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/bindings/input.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/bindings/size.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","../../../../../../node_modules/svelte/src/internal/client/dom/elements/bindings/universal.js","../../../../../../node_modules/svelte/src/internal/client/reactivity/props.js","../../../../../../node_modules/svelte/src/legacy/legacy-client.js","../../../../../../node_modules/svelte/src/index-client.js","../../../../../../node_modules/@sveltejs/kit/src/exports/internal/index.js","../../../../../../node_modules/@sveltejs/kit/src/utils/url.js","../../../../../../node_modules/@sveltejs/kit/src/utils/hash.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/utils.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/fetcher.js","../../../../../../node_modules/@sveltejs/kit/src/utils/routing.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/parse.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/session-storage.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/app/paths/internal/client.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/app/paths/client.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/constants.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/utils.js","../../../../../../node_modules/devalue/src/base64.js","../../../../../../node_modules/devalue/src/constants.js","../../../../../../node_modules/devalue/src/parse.js","../../../../../../node_modules/@sveltejs/kit/src/utils/exports.js","../../../../../../node_modules/@sveltejs/kit/src/utils/array.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/shared.js","../../../../../../node_modules/@sveltejs/kit/src/utils/error.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/state.svelte.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/pathname.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/telemetry/noop.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/client/client.js","../../../../../../node_modules/svelte/src/version.js","../../../../../../node_modules/svelte/src/internal/disclose-version.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/app/state/client.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/app/state/index.js","../../../../../../node_modules/tslib/tslib.es6.mjs","../../../../../../node_modules/iceberg-js/dist/index.mjs","../../../../../../node_modules/cookie/dist/index.js","../../../../../../node_modules/svelte/src/transition/index.js","../../../../../../node_modules/svelte/src/easing/index.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/app/forms.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/components/svelte-5/layout.svelte","../../../../../../node_modules/svelte/src/reactivity/set.js","../../../../../../node_modules/svelte/src/reactivity/map.js","../../../../../../node_modules/@sveltejs/kit/src/runtime/app/stores.js","../../../../../../node_modules/svelte/src/animate/index.js","../../../../../../node_modules/heic2any/dist/heic2any.js","../../../../../../node_modules/three/build/three.core.js","../../../../../../node_modules/three/build/three.module.js","../../../../../../node_modules/three/examples/jsm/renderers/CSS2DRenderer.js","../../../../../../node_modules/lodash-es/isObject.js","../../../../../../node_modules/lodash-es/_freeGlobal.js","../../../../../../node_modules/lodash-es/_root.js","../../../../../../node_modules/lodash-es/now.js","../../../../../../node_modules/lodash-es/_trimmedEndIndex.js","../../../../../../node_modules/lodash-es/_baseTrim.js","../../../../../../node_modules/lodash-es/_Symbol.js","../../../../../../node_modules/lodash-es/_getRawTag.js","../../../../../../node_modules/lodash-es/_objectToString.js","../../../../../../node_modules/lodash-es/_baseGetTag.js","../../../../../../node_modules/lodash-es/isObjectLike.js","../../../../../../node_modules/lodash-es/isSymbol.js","../../../../../../node_modules/lodash-es/toNumber.js","../../../../../../node_modules/lodash-es/debounce.js","../../../../../../node_modules/kapsule/dist/kapsule.mjs","../../../../../../node_modules/@tweenjs/tween.js/dist/tween.esm.js","../../../../../../node_modules/d3-octree/src/add.js","../../../../../../node_modules/d3-octree/src/cover.js","../../../../../../node_modules/d3-octree/src/data.js","../../../../../../node_modules/d3-octree/src/extent.js","../../../../../../node_modules/d3-octree/src/octant.js","../../../../../../node_modules/d3-octree/src/find.js","../../../../../../node_modules/d3-octree/src/findAll.js","../../../../../../node_modules/d3-octree/src/remove.js","../../../../../../node_modules/d3-octree/src/root.js","../../../../../../node_modules/d3-octree/src/size.js","../../../../../../node_modules/d3-octree/src/visit.js","../../../../../../node_modules/d3-octree/src/visitAfter.js","../../../../../../node_modules/d3-octree/src/x.js","../../../../../../node_modules/d3-octree/src/y.js","../../../../../../node_modules/d3-octree/src/z.js","../../../../../../node_modules/d3-octree/src/octree.js","../../../../../../node_modules/d3-array/src/ascending.js","../../../../../../node_modules/d3-array/src/descending.js","../../../../../../node_modules/d3-array/src/bisector.js","../../../../../../node_modules/d3-array/src/number.js","../../../../../../node_modules/d3-array/src/bisect.js","../../../../../../node_modules/d3-array/src/extent.js","../../../../../../node_modules/d3-array/src/fsum.js","../../../../../../node_modules/d3-array/src/ticks.js","../../../../../../node_modules/d3-array/src/max.js","../../../../../../node_modules/d3-array/src/mean.js","../../../../../../node_modules/d3-array/src/merge.js","../../../../../../node_modules/d3-array/src/range.js","../../../../../../node_modules/d3-array/src/sum.js","../../../../../../node_modules/d3-scale/src/init.js","../../../../../../node_modules/d3-color/src/define.js","../../../../../../node_modules/d3-color/src/color.js","../../../../../../node_modules/d3-interpolate/src/constant.js","../../../../../../node_modules/d3-interpolate/src/color.js","../../../../../../node_modules/d3-interpolate/src/rgb.js","../../../../../../node_modules/d3-interpolate/src/numberArray.js","../../../../../../node_modules/d3-interpolate/src/array.js","../../../../../../node_modules/d3-interpolate/src/date.js","../../../../../../node_modules/d3-interpolate/src/number.js","../../../../../../node_modules/d3-interpolate/src/object.js","../../../../../../node_modules/d3-interpolate/src/string.js","../../../../../../node_modules/d3-interpolate/src/value.js","../../../../../../node_modules/d3-interpolate/src/round.js","../../../../../../node_modules/d3-scale/src/constant.js","../../../../../../node_modules/d3-scale/src/number.js","../../../../../../node_modules/d3-scale/src/continuous.js","../../../../../../node_modules/d3-format/src/formatDecimal.js","../../../../../../node_modules/d3-format/src/exponent.js","../../../../../../node_modules/d3-format/src/formatGroup.js","../../../../../../node_modules/d3-format/src/formatNumerals.js","../../../../../../node_modules/d3-format/src/formatSpecifier.js","../../../../../../node_modules/d3-format/src/formatTrim.js","../../../../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../../../../node_modules/d3-format/src/formatRounded.js","../../../../../../node_modules/d3-format/src/formatTypes.js","../../../../../../node_modules/d3-format/src/identity.js","../../../../../../node_modules/d3-format/src/locale.js","../../../../../../node_modules/d3-format/src/defaultLocale.js","../../../../../../node_modules/d3-format/src/precisionFixed.js","../../../../../../node_modules/d3-format/src/precisionPrefix.js","../../../../../../node_modules/d3-format/src/precisionRound.js","../../../../../../node_modules/d3-scale/src/tickFormat.js","../../../../../../node_modules/d3-scale/src/linear.js","../../../../../../node_modules/d3-scale/src/quantize.js","../../../../../../node_modules/d3-geo/src/math.js","../../../../../../node_modules/d3-geo/src/noop.js","../../../../../../node_modules/d3-geo/src/stream.js","../../../../../../node_modules/d3-geo/src/area.js","../../../../../../node_modules/d3-geo/src/cartesian.js","../../../../../../node_modules/d3-geo/src/bounds.js","../../../../../../node_modules/d3-geo/src/centroid.js","../../../../../../node_modules/d3-geo/src/compose.js","../../../../../../node_modules/d3-geo/src/rotation.js","../../../../../../node_modules/d3-geo/src/circle.js","../../../../../../node_modules/d3-geo/src/clip/buffer.js","../../../../../../node_modules/d3-geo/src/pointEqual.js","../../../../../../node_modules/d3-geo/src/clip/rejoin.js","../../../../../../node_modules/d3-geo/src/polygonContains.js","../../../../../../node_modules/d3-geo/src/clip/index.js","../../../../../../node_modules/d3-geo/src/clip/antimeridian.js","../../../../../../node_modules/d3-geo/src/clip/circle.js","../../../../../../node_modules/d3-geo/src/clip/line.js","../../../../../../node_modules/d3-geo/src/clip/rectangle.js","../../../../../../node_modules/d3-geo/src/length.js","../../../../../../node_modules/d3-geo/src/distance.js","../../../../../../node_modules/d3-geo/src/contains.js","../../../../../../node_modules/d3-geo/src/graticule.js","../../../../../../node_modules/d3-geo/src/interpolate.js","../../../../../../node_modules/d3-geo/src/identity.js","../../../../../../node_modules/d3-geo/src/path/bounds.js","../../../../../../node_modules/d3-geo/src/transform.js","../../../../../../node_modules/d3-geo/src/projection/fit.js","../../../../../../node_modules/d3-geo/src/projection/resample.js","../../../../../../node_modules/d3-geo/src/projection/index.js","../../../../../../node_modules/d3-geo/src/projection/azimuthal.js","../../../../../../node_modules/d3-geo/src/projection/mercator.js","../../../../../../node_modules/d3-geo/src/projection/stereographic.js","../../../../../../node_modules/three-slippy-map-globe/dist/three-slippy-map-globe.mjs","../../../../../../node_modules/earcut/src/earcut.js","../../../../../../node_modules/three-geojson-geometry/dist/three-geojson-geometry.mjs","../../../../../../node_modules/three/examples/jsm/utils/BufferGeometryUtils.js","../../../../../../node_modules/accessor-fn/dist/accessor-fn.mjs","../../../../../../node_modules/tinycolor2/esm/tinycolor.js","../../../../../../node_modules/data-bind-mapper/dist/data-bind-mapper.mjs","../../../../../../node_modules/frame-ticker/dist/FrameTicker.js","../../../../../../node_modules/robust-predicates/esm/util.js","../../../../../../node_modules/robust-predicates/esm/orient2d.js","../../../../../../node_modules/delaunator/index.js","../../../../../../node_modules/point-in-polygon-hao/dist/esm/index.js","../../../../../../node_modules/@turf/invariant/dist/esm/index.js","../../../../../../node_modules/@turf/boolean-point-in-polygon/dist/esm/index.js","../../../../../../node_modules/d3-delaunay/src/path.js","../../../../../../node_modules/d3-delaunay/src/polygon.js","../../../../../../node_modules/d3-delaunay/src/voronoi.js","../../../../../../node_modules/d3-delaunay/src/delaunay.js","../../../../../../node_modules/d3-geo-voronoi/src/math.js","../../../../../../node_modules/d3-geo-voronoi/src/cartesian.js","../../../../../../node_modules/d3-geo-voronoi/src/delaunay.js","../../../../../../node_modules/d3-geo-voronoi/src/voronoi.js","../../../../../../node_modules/three-conic-polygon-geometry/dist/three-conic-polygon-geometry.mjs","../../../../../../node_modules/index-array-by/dist/index-array-by.mjs","../../../../../../node_modules/h3-js/dist/browser/h3-js.es.js","../../../../../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","../../../../../../node_modules/three/build/three.webgpu.js","../../../../../../node_modules/three/build/three.tsl.js","../../../../../../node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js","../../../../../../node_modules/three/examples/jsm/lines/LineMaterial.js","../../../../../../node_modules/three/examples/jsm/lines/LineSegments2.js","../../../../../../node_modules/three/examples/jsm/lines/LineGeometry.js","../../../../../../node_modules/three/examples/jsm/lines/Line2.js","../../../../../../node_modules/three/examples/jsm/loaders/FontLoader.js","../../../../../../node_modules/three/examples/jsm/geometries/TextGeometry.js","../../../../../../node_modules/three-globe/dist/three-globe.mjs","../../../../../../node_modules/three/examples/jsm/controls/TrackballControls.js","../../../../../../node_modules/three/examples/jsm/controls/OrbitControls.js","../../../../../../node_modules/three/examples/jsm/controls/FlyControls.js","../../../../../../node_modules/three/examples/jsm/shaders/CopyShader.js","../../../../../../node_modules/three/examples/jsm/postprocessing/Pass.js","../../../../../../node_modules/three/examples/jsm/postprocessing/ShaderPass.js","../../../../../../node_modules/three/examples/jsm/postprocessing/MaskPass.js","../../../../../../node_modules/three/examples/jsm/postprocessing/EffectComposer.js","../../../../../../node_modules/three/examples/jsm/postprocessing/RenderPass.js","../../../../../../node_modules/@babel/runtime/helpers/esm/extends.js","../../../../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../../../../../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../../../../../../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../../../../../node_modules/@babel/runtime/helpers/esm/construct.js","../../../../../../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../../../../../../node_modules/polished/dist/polished.esm.js","../../../../../../node_modules/d3-selection/src/namespaces.js","../../../../../../node_modules/d3-selection/src/namespace.js","../../../../../../node_modules/d3-selection/src/creator.js","../../../../../../node_modules/d3-selection/src/selector.js","../../../../../../node_modules/d3-selection/src/selection/select.js","../../../../../../node_modules/d3-selection/src/array.js","../../../../../../node_modules/d3-selection/src/selectorAll.js","../../../../../../node_modules/d3-selection/src/selection/selectAll.js","../../../../../../node_modules/d3-selection/src/matcher.js","../../../../../../node_modules/d3-selection/src/selection/selectChild.js","../../../../../../node_modules/d3-selection/src/selection/selectChildren.js","../../../../../../node_modules/d3-selection/src/selection/filter.js","../../../../../../node_modules/d3-selection/src/selection/sparse.js","../../../../../../node_modules/d3-selection/src/selection/enter.js","../../../../../../node_modules/d3-selection/src/constant.js","../../../../../../node_modules/d3-selection/src/selection/data.js","../../../../../../node_modules/d3-selection/src/selection/exit.js","../../../../../../node_modules/d3-selection/src/selection/join.js","../../../../../../node_modules/d3-selection/src/selection/merge.js","../../../../../../node_modules/d3-selection/src/selection/order.js","../../../../../../node_modules/d3-selection/src/selection/sort.js","../../../../../../node_modules/d3-selection/src/selection/call.js","../../../../../../node_modules/d3-selection/src/selection/nodes.js","../../../../../../node_modules/d3-selection/src/selection/node.js","../../../../../../node_modules/d3-selection/src/selection/size.js","../../../../../../node_modules/d3-selection/src/selection/empty.js","../../../../../../node_modules/d3-selection/src/selection/each.js","../../../../../../node_modules/d3-selection/src/selection/attr.js","../../../../../../node_modules/d3-selection/src/window.js","../../../../../../node_modules/d3-selection/src/selection/style.js","../../../../../../node_modules/d3-selection/src/selection/property.js","../../../../../../node_modules/d3-selection/src/selection/classed.js","../../../../../../node_modules/d3-selection/src/selection/text.js","../../../../../../node_modules/d3-selection/src/selection/html.js","../../../../../../node_modules/d3-selection/src/selection/raise.js","../../../../../../node_modules/d3-selection/src/selection/lower.js","../../../../../../node_modules/d3-selection/src/selection/append.js","../../../../../../node_modules/d3-selection/src/selection/insert.js","../../../../../../node_modules/d3-selection/src/selection/remove.js","../../../../../../node_modules/d3-selection/src/selection/clone.js","../../../../../../node_modules/d3-selection/src/selection/datum.js","../../../../../../node_modules/d3-selection/src/selection/on.js","../../../../../../node_modules/d3-selection/src/selection/dispatch.js","../../../../../../node_modules/d3-selection/src/selection/iterator.js","../../../../../../node_modules/d3-selection/src/selection/index.js","../../../../../../node_modules/d3-selection/src/select.js","../../../../../../node_modules/d3-selection/src/sourceEvent.js","../../../../../../node_modules/d3-selection/src/pointer.js","../../../../../../node_modules/preact/dist/preact.module.js","../../../../../../node_modules/float-tooltip/dist/float-tooltip.mjs","../../../../../../node_modules/three-render-objects/dist/three-render-objects.mjs","../../../../../../node_modules/globe.gl/dist/globe.gl.mjs"],"sourcesContent":["export default true;\n","export default false;\n","// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var index_of = Array.prototype.indexOf;\nexport var includes = Array.prototype.includes;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\nexport var is_extensible = Object.isExtensible;\nexport var has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n\n/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * TODO replace with Promise.withResolvers once supported widely enough\n * @template [T=void]\n */\nexport function deferred() {\n\t/** @type {(value: T) => void} */\n\tvar resolve;\n\n\t/** @type {(reason: any) => void} */\n\tvar reject;\n\n\t/** @type {Promise<T>} */\n\tvar promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\t// @ts-expect-error\n\treturn { promise, resolve, reject };\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n\n/**\n * When encountering a situation like `let [a, b, c] = $derived(blah())`,\n * we need to stash an intermediate value that `a`, `b`, and `c` derive\n * from, in case it's an iterable\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} value\n * @param {number} [n]\n * @returns {Array<T>}\n */\nexport function to_array(value, n) {\n\t// return arrays unchanged\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\n\t// if value is not iterable, or `n` is unspecified (indicates a rest\n\t// element, which means we're not concerned about unbounded iterables)\n\t// convert to an array with `Array.from`\n\tif (n === undefined || !(Symbol.iterator in value)) {\n\t\treturn Array.from(value);\n\t}\n\n\t// otherwise, populate an array with `n` values\n\n\t/** @type {T[]} */\n\tconst array = [];\n\n\tfor (const element of value) {\n\t\tarray.push(element);\n\t\tif (array.length === n) break;\n\t}\n\n\treturn array;\n}\n\n/**\n * @param {Record<string | symbol, unknown>} obj\n * @param {Array<string | symbol>} keys\n * @returns {Record<string | symbol, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string | symbol, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\tfor (var symbol of Object.getOwnPropertySymbols(obj)) {\n\t\tif (Object.propertyIsEnumerable.call(obj, symbol) && !keys.includes(symbol)) {\n\t\t\tresult[symbol] = obj[symbol];\n\t\t}\n\t}\n\n\treturn result;\n}\n","// General flags\nexport const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\n/**\n * An effect that does not destroy its child effects when it reruns.\n * Runs as part of render effects, i.e. not eagerly as part of tree traversal or effect flushing.\n */\nexport const MANAGED_EFFECT = 1 << 24;\n/**\n * An effect that does not destroy its child effects when it reruns (like MANAGED_EFFECT).\n * Runs eagerly as part of tree traversal or effect flushing.\n */\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\n/**\n * Indicates that a reaction is connected to an effect root — either it is an effect,\n * or it is a derived that is depended on by at least one effect. If a derived has\n * no dependents, we can disconnect it from the graph, allowing it to either be\n * GC'd or reconnected later if an effect comes to depend on it again\n */\nexport const CONNECTED = 1 << 9;\nexport const CLEAN = 1 << 10;\nexport const DIRTY = 1 << 11;\nexport const MAYBE_DIRTY = 1 << 12;\nexport const INERT = 1 << 13;\nexport const DESTROYED = 1 << 14;\n/** Set once a reaction has run for the first time */\nexport const REACTION_RAN = 1 << 15;\n/** Effect is in the process of getting destroyed. Can be observed in child teardown functions */\nexport const DESTROYING = 1 << 25;\n\n// Flags exclusive to effects\n/**\n * 'Transparent' effects do not create a transition boundary.\n * This is on a block effect 99% of the time but may also be on a branch effect if its parent block effect was pruned\n */\nexport const EFFECT_TRANSPARENT = 1 << 16;\nexport const EAGER_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_PRESERVED = 1 << 19;\nexport const USER_EFFECT = 1 << 20;\nexport const EFFECT_OFFSCREEN = 1 << 25;\n\n// Flags exclusive to deriveds\n/**\n * Tells that we marked this derived and its reactions as visited during the \"mark as (maybe) dirty\"-phase.\n * Will be lifted during execution of the derived and during checking its dirty state (both are necessary\n * because a derived might be checked but not executed).\n */\nexport const WAS_MARKED = 1 << 16;\n\n// Flags used for async\nexport const REACTION_IS_UPDATING = 1 << 21;\nexport const ASYNC = 1 << 22;\n\nexport const ERROR_VALUE = 1 << 23;\n\nexport const STATE_SYMBOL = Symbol('$state');\nexport const LEGACY_PROPS = Symbol('legacy props');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\nexport const PROXY_PATH_SYMBOL = Symbol('proxy path');\n\n/** allow users to ignore aborted signal errors if `reason.name === 'StaleReactionError` */\nexport const STALE_REACTION = new (class StaleReactionError extends Error {\n\tname = 'StaleReactionError';\n\tmessage = 'The reaction that called `getAbortSignal()` was re-run or destroyed';\n})();\n\nexport const IS_XHTML =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\t!!globalThis.document?.contentType &&\n\t/* @__PURE__ */ globalThis.document.contentType.includes('xml');\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Cannot use `%name%(...)` unless the `experimental.async` compiler option is `true`\n * @param {string} name\n * @returns {never}\n */\nexport function experimental_async_required(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`experimental_async_required\\nCannot use \\`${name}(...)\\` unless the \\`experimental.async\\` compiler option is \\`true\\`\\nhttps://svelte.dev/e/experimental_async_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/experimental_async_required`);\n\t}\n}\n\n/**\n * Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n * @returns {never}\n */\nexport function invalid_default_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_default_snippet\\nCannot use \\`{@render children(...)}\\` if the parent component uses \\`let:\\` directives. Consider using a named snippet instead\\nhttps://svelte.dev/e/invalid_default_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_default_snippet`);\n\t}\n}\n\n/**\n * A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n * @returns {never}\n */\nexport function invalid_snippet_arguments() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet_arguments\\nA snippet function was passed invalid arguments. Snippets should only be instantiated via \\`{@render ...}\\`\\nhttps://svelte.dev/e/invalid_snippet_arguments`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet_arguments`);\n\t}\n}\n\n/**\n * An invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"%message%\"\n * @param {string} message\n * @returns {never}\n */\nexport function invariant_violation(message) {\n\tif (DEV) {\n\t\tconst error = new Error(`invariant_violation\\nAn invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"${message}\"\\nhttps://svelte.dev/e/invariant_violation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invariant_violation`);\n\t}\n}\n\n/**\n * `%name%(...)` can only be used during component initialisation\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_outside_component(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_outside_component\\n\\`${name}(...)\\` can only be used during component initialisation\\nhttps://svelte.dev/e/lifecycle_outside_component`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n\t}\n}\n\n/**\n * Context was not set in a parent component\n * @returns {never}\n */\nexport function missing_context() {\n\tif (DEV) {\n\t\tconst error = new Error(`missing_context\\nContext was not set in a parent component\\nhttps://svelte.dev/e/missing_context`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/missing_context`);\n\t}\n}\n\n/**\n * Attempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n * @returns {never}\n */\nexport function snippet_without_render_tag() {\n\tif (DEV) {\n\t\tconst error = new Error(`snippet_without_render_tag\\nAttempted to render a snippet without a \\`{@render}\\` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change \\`{snippet}\\` to \\`{@render snippet()}\\`.\\nhttps://svelte.dev/e/snippet_without_render_tag`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/snippet_without_render_tag`);\n\t}\n}\n\n/**\n * `%name%` is not a store with a `subscribe` method\n * @param {string} name\n * @returns {never}\n */\nexport function store_invalid_shape(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`store_invalid_shape\\n\\`${name}\\` is not a store with a \\`subscribe\\` method\\nhttps://svelte.dev/e/store_invalid_shape`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/store_invalid_shape`);\n\t}\n}\n\n/**\n * The `this` prop on `<svelte:element>` must be a string, if defined\n * @returns {never}\n */\nexport function svelte_element_invalid_this_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_element_invalid_this_value\\nThe \\`this\\` prop on \\`<svelte:element>\\` must be a string, if defined\\nhttps://svelte.dev/e/svelte_element_invalid_this_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_element_invalid_this_value`);\n\t}\n}","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nexport *  from '../shared/errors.js';\n\n/**\n * Cannot create a `$derived(...)` with an `await` expression outside of an effect tree\n * @returns {never}\n */\nexport function async_derived_orphan() {\n\tif (DEV) {\n\t\tconst error = new Error(`async_derived_orphan\\nCannot create a \\`$derived(...)\\` with an \\`await\\` expression outside of an effect tree\\nhttps://svelte.dev/e/async_derived_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/async_derived_orphan`);\n\t}\n}\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)\\nhttps://svelte.dev/e/bind_invalid_export`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_export`);\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\`\\nhttps://svelte.dev/e/bind_not_bindable`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_not_bindable`);\n\t}\n}\n\n/**\n * Calling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\nCalling \\`${method}\\` on a component instance (of ${component}) is no longer valid in Svelte 5\\nhttps://svelte.dev/e/component_api_changed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_changed`);\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working.\\nhttps://svelte.dev/e/component_api_invalid_new`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_invalid_new`);\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively\\nhttps://svelte.dev/e/derived_references_self`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/derived_references_self`);\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value\n\t\t\t? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}`\n\t\t\t: `Keyed each block has duplicate key at indexes ${a} and ${b}`}\\nhttps://svelte.dev/e/each_key_duplicate`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_duplicate`);\n\t}\n}\n\n/**\n * Keyed each block has key that is not idempotent — the key for item at index %index% was `%a%` but is now `%b%`. Keys must be the same each time for a given item\n * @param {string} index\n * @param {string} a\n * @param {string} b\n * @returns {never}\n */\nexport function each_key_volatile(index, a, b) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_volatile\\nKeyed each block has key that is not idempotent — the key for item at index ${index} was \\`${a}\\` but is now \\`${b}\\`. Keys must be the same each time for a given item\\nhttps://svelte.dev/e/each_key_volatile`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_volatile`);\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function\\nhttps://svelte.dev/e/effect_in_teardown`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_teardown`);\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_unowned_derived`);\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)\\nhttps://svelte.dev/e/effect_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_orphan`);\n\t}\n}\n\n/**\n * `$effect.pending()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function effect_pending_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_pending_outside_reaction\\n\\`$effect.pending()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/effect_pending_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_pending_outside_reaction`);\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\\nhttps://svelte.dev/e/effect_update_depth_exceeded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);\n\t}\n}\n\n/**\n * Cannot use `flushSync` inside an effect\n * @returns {never}\n */\nexport function flush_sync_in_effect() {\n\tif (DEV) {\n\t\tconst error = new Error(`flush_sync_in_effect\\nCannot use \\`flushSync\\` inside an effect\\nhttps://svelte.dev/e/flush_sync_in_effect`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/flush_sync_in_effect`);\n\t}\n}\n\n/**\n * Cannot commit a fork that was already discarded\n * @returns {never}\n */\nexport function fork_discarded() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_discarded\\nCannot commit a fork that was already discarded\\nhttps://svelte.dev/e/fork_discarded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_discarded`);\n\t}\n}\n\n/**\n * Cannot create a fork inside an effect or when state changes are pending\n * @returns {never}\n */\nexport function fork_timing() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_timing\\nCannot create a fork inside an effect or when state changes are pending\\nhttps://svelte.dev/e/fork_timing`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_timing`);\n\t}\n}\n\n/**\n * `getAbortSignal()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function get_abort_signal_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`get_abort_signal_outside_reaction\\n\\`getAbortSignal()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/get_abort_signal_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n * @returns {never}\n */\nexport function hydratable_missing_but_required(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`hydratable_missing_but_required\\nExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydratable_missing_but_required`);\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application\\nhttps://svelte.dev/e/hydration_failed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value\\nhttps://svelte.dev/e/props_invalid_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_invalid_value`);\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly\\nhttps://svelte.dev/e/props_rest_readonly`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_rest_readonly`);\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\\nhttps://svelte.dev/e/rune_outside_svelte`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/rune_outside_svelte`);\n\t}\n}\n\n/**\n * `setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n * @returns {never}\n */\nexport function set_context_after_init() {\n\tif (DEV) {\n\t\tconst error = new Error(`set_context_after_init\\n\\`setContext\\` must be called when a component first initializes, not in a subsequent effect or after an \\`await\\` expression\\nhttps://svelte.dev/e/set_context_after_init`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/set_context_after_init`);\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.\\nhttps://svelte.dev/e/state_descriptors_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_descriptors_fixed`);\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object\\nhttps://svelte.dev/e/state_prototype_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_prototype_fixed`);\n\t}\n}\n\n/**\n * Updating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside \\`$derived(...)\\`, \\`$inspect(...)\\` or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\`\\nhttps://svelte.dev/e/state_unsafe_mutation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_mutation`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n * @returns {never}\n */\nexport function svelte_boundary_reset_onerror() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_boundary_reset_onerror\\nA \\`<svelte:boundary>\\` \\`reset\\` function cannot be called while an error is still being handled\\nhttps://svelte.dev/e/svelte_boundary_reset_onerror`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);\n\t}\n}","export const EACH_ITEM_REACTIVE = 1;\nexport const EACH_INDEX_REACTIVE = 1 << 1;\n/** See EachBlock interface metadata.is_controlled for an explanation what this is */\nexport const EACH_IS_CONTROLLED = 1 << 2;\nexport const EACH_IS_ANIMATED = 1 << 3;\nexport const EACH_ITEM_IMMUTABLE = 1 << 4;\n\nexport const PROPS_IS_IMMUTABLE = 1;\nexport const PROPS_IS_RUNES = 1 << 1;\nexport const PROPS_IS_UPDATED = 1 << 2;\nexport const PROPS_IS_BINDABLE = 1 << 3;\nexport const PROPS_IS_LAZY_INITIAL = 1 << 4;\n\nexport const TRANSITION_IN = 1;\nexport const TRANSITION_OUT = 1 << 1;\nexport const TRANSITION_GLOBAL = 1 << 2;\n\nexport const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\nexport const TEMPLATE_USE_SVG = 1 << 2;\nexport const TEMPLATE_USE_MATHML = 1 << 3;\n\nexport const HYDRATION_START = '[';\n/** used to indicate that an `{:else}...` block was rendered */\nexport const HYDRATION_START_ELSE = '[!';\n/** used to indicate that a boundary's `failed` snippet was rendered on the server */\nexport const HYDRATION_START_FAILED = '[?';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\nexport const ELEMENT_IS_INPUT = 1 << 2;\n\nexport const UNINITIALIZED = Symbol();\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'await_waterfall',\n\t'await_reactivity_loss',\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n\nexport const ATTACHMENT_KEY = '@attach';\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n */\nexport function hydratable_missing_but_expected(key) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydratable_missing_but_expected\\n%cExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_expected`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydratable_missing_but_expected`);\n\t}\n}\n\n/**\n * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n * @param {string} attribute\n * @param {string} html\n * @param {string} value\n */\nexport function hydration_attribute_changed(attribute, html, value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydration_attribute_changed\\n%cThe \\`${attribute}\\` attribute on \\`${html}\\` changed its value between server and client renders. The client value, \\`${value}\\`, will be ignored in favour of the server value\\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_attribute_changed`);\n\t}\n}\n\n/**\n * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n * @param {string | undefined | null} [location]\n */\nexport function hydration_html_changed(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_html_changed\\n%c${location\n\t\t\t\t? `The value of an \\`{@html ...}\\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value`\n\t\t\t\t: 'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'}\\nhttps://svelte.dev/e/hydration_html_changed`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_html_changed`);\n\t}\n}\n\n/**\n * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n * @param {string | undefined | null} [location]\n */\nexport function hydration_mismatch(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_mismatch\\n%c${location\n\t\t\t\t? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`\n\t\t\t\t: 'Hydration failed because the initial UI does not match what was rendered on the server'}\\nhttps://svelte.dev/e/hydration_mismatch`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_mismatch`);\n\t}\n}\n\n/**\n * The `render` function passed to `createRawSnippet` should return HTML for a single element\n */\nexport function invalid_raw_snippet_render() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] invalid_raw_snippet_render\\n%cThe \\`render\\` function passed to \\`createRawSnippet\\` should return HTML for a single element\\nhttps://svelte.dev/e/invalid_raw_snippet_render`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/invalid_raw_snippet_render`);\n\t}\n}\n\n/**\n * Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n * @param {string} filename\n */\nexport function legacy_recursive_reactive_block(filename) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] legacy_recursive_reactive_block\\n%cDetected a migrated \\`$:\\` reactive block in \\`${filename}\\` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an \\`$effect\\`.\\nhttps://svelte.dev/e/legacy_recursive_reactive_block`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/legacy_recursive_reactive_block`);\n\t}\n}\n\n/**\n * Tried to unmount a component that was not mounted\n */\nexport function lifecycle_double_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] lifecycle_double_unmount\\n%cTried to unmount a component that was not mounted\\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/lifecycle_double_unmount`);\n\t}\n}\n\n/**\n * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n * @param {string} parent\n * @param {string} prop\n * @param {string} child\n * @param {string} owner\n */\nexport function ownership_invalid_binding(parent, prop, child, owner) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_binding\\n%c${parent} passed property \\`${prop}\\` to ${child} with \\`bind:\\`, but its parent component ${owner} did not declare \\`${prop}\\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \\`bind:${prop}={...}\\` instead of \\`${prop}={...}\\`)\\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_binding`);\n\t}\n}\n\n/**\n * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n * @param {string} name\n * @param {string} location\n * @param {string} prop\n * @param {string} parent\n */\nexport function ownership_invalid_mutation(name, location, prop, parent) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_mutation\\n%cMutating unbound props (\\`${name}\\`, at ${location}) is strongly discouraged. Consider using \\`bind:${prop}={...}\\` in ${parent} (or using a callback) instead\\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_mutation`);\n\t}\n}\n\n/**\n * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n */\nexport function select_multiple_invalid_value() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] select_multiple_invalid_value\\n%cThe \\`value\\` property of a \\`<select multiple>\\` element should be an array, but it received a non-array value. The selection will be kept as is.\\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/select_multiple_invalid_value`);\n\t}\n}\n\n/**\n * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n * @param {string} operator\n */\nexport function state_proxy_equality_mismatch(operator) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_equality_mismatch\\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${operator}\\` will produce unexpected results\\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);\n\t}\n}\n\n/**\n * Tried to unmount a state proxy, rather than a component\n */\nexport function state_proxy_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_unmount\\n%cTried to unmount a state proxy, rather than a component\\nhttps://svelte.dev/e/state_proxy_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_unmount`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n */\nexport function svelte_boundary_reset_noop() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] svelte_boundary_reset_noop\\n%cA \\`<svelte:boundary>\\` \\`reset\\` function only resets the boundary the first time it is called\\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);\n\t}\n}\n\n/**\n * The `slide` transition does not work correctly for elements with `display: %value%`\n * @param {string} value\n */\nexport function transition_slide_display(value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] transition_slide_display\\n%cThe \\`slide\\` transition does not work correctly for elements with \\`display: ${value}\\`\\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/transition_slide_display`);\n\t}\n}","/** @import { TemplateNode } from '#client' */\n\nimport { COMMENT_NODE } from '#client/constants';\nimport {\n\tHYDRATION_END,\n\tHYDRATION_ERROR,\n\tHYDRATION_START,\n\tHYDRATION_START_ELSE\n} from '../../../constants.js';\nimport * as w from '../warnings.js';\nimport { get_next_sibling } from './operations.js';\n\n/**\n * Use this variable to guard everything related to hydration code so it can be treeshaken out\n * if the user doesn't use the `hydrate` method and these code paths are therefore not needed.\n */\nexport let hydrating = false;\n\n/** @param {boolean} value */\nexport function set_hydrating(value) {\n\thydrating = value;\n}\n\n/**\n * The node that is currently being hydrated. This starts out as the first node inside the opening\n * <!--[--> comment, and updates each time a component calls `$.child(...)` or `$.sibling(...)`.\n * When entering a block (e.g. `{#if ...}`), `hydrate_node` is the block opening comment; by the\n * time we leave the block it is the closing comment, which serves as the block's anchor.\n * @type {TemplateNode}\n */\nexport let hydrate_node;\n\n/** @param {TemplateNode | null} node */\nexport function set_hydrate_node(node) {\n\tif (node === null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn (hydrate_node = node);\n}\n\nexport function hydrate_next() {\n\treturn set_hydrate_node(get_next_sibling(hydrate_node));\n}\n\n/** @param {TemplateNode} node */\nexport function reset(node) {\n\tif (!hydrating) return;\n\n\t// If the node has remaining siblings, something has gone wrong\n\tif (get_next_sibling(hydrate_node) !== null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\thydrate_node = node;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n */\nexport function hydrate_template(template) {\n\tif (hydrating) {\n\t\t// @ts-expect-error TemplateNode doesn't include DocumentFragment, but it's actually fine\n\t\thydrate_node = template.content;\n\t}\n}\n\nexport function next(count = 1) {\n\tif (hydrating) {\n\t\tvar i = count;\n\t\tvar node = hydrate_node;\n\n\t\twhile (i--) {\n\t\t\tnode = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\t}\n\n\t\thydrate_node = node;\n\t}\n}\n\n/**\n * Skips or removes (depending on {@link remove}) all nodes starting at `hydrate_node` up until the next hydration end comment\n * @param {boolean} remove\n */\nexport function skip_nodes(remove = true) {\n\tvar depth = 0;\n\tvar node = hydrate_node;\n\n\twhile (true) {\n\t\tif (node.nodeType === COMMENT_NODE) {\n\t\t\tvar data = /** @type {Comment} */ (node).data;\n\n\t\t\tif (data === HYDRATION_END) {\n\t\t\t\tif (depth === 0) return node;\n\t\t\t\tdepth -= 1;\n\t\t\t} else if (\n\t\t\t\tdata === HYDRATION_START ||\n\t\t\t\tdata === HYDRATION_START_ELSE ||\n\t\t\t\t// \"[1\", \"[2\", etc. for if blocks\n\t\t\t\t(data[0] === '[' && !isNaN(Number(data.slice(1))))\n\t\t\t) {\n\t\t\t\tdepth += 1;\n\t\t\t}\n\t\t}\n\n\t\tvar next = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tif (remove) node.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n *\n * @param {TemplateNode} node\n */\nexport function read_hydration_instruction(node) {\n\tif (!node || node.nodeType !== COMMENT_NODE) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn /** @type {Comment} */ (node).data;\n}\n","/** @import { Equals } from '#client' */\n\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function not_equal(a, b) {\n\treturn a !== b;\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n","/** True if experimental.async=true */\nexport let async_mode_flag = false;\n/** True if we're not certain that we only have Svelte 5 code in the compilation */\nexport let legacy_mode_flag = false;\n/** True if $inspect.trace is used */\nexport let tracing_mode_flag = false;\n\nexport function enable_async_mode_flag() {\n\tasync_mode_flag = true;\n}\n\n/** ONLY USE THIS DURING TESTING */\nexport function disable_async_mode_flag() {\n\tasync_mode_flag = false;\n}\n\nexport function enable_legacy_mode_flag() {\n\tlegacy_mode_flag = true;\n}\n\nexport function enable_tracing_mode_flag() {\n\ttracing_mode_flag = true;\n}\n","/** @import { Snapshot } from './types' */\nimport { DEV } from 'esm-env';\nimport * as w from './warnings.js';\nimport { get_prototype_of, is_array, object_prototype } from './utils.js';\n\n/**\n * In dev, we keep track of which properties could not be cloned. In prod\n * we don't bother, but we keep a dummy array around so that the\n * signature stays the same\n * @type {string[]}\n */\nconst empty = [];\n\n/**\n * @template T\n * @param {T} value\n * @param {boolean} [skip_warning]\n * @param {boolean} [no_tojson]\n * @returns {Snapshot<T>}\n */\nexport function snapshot(value, skip_warning = false, no_tojson = false) {\n\tif (DEV && !skip_warning) {\n\t\t/** @type {string[]} */\n\t\tconst paths = [];\n\n\t\tconst copy = clone(value, new Map(), '', paths, null, no_tojson);\n\t\tif (paths.length === 1 && paths[0] === '') {\n\t\t\t// value could not be cloned\n\t\t\tw.state_snapshot_uncloneable();\n\t\t} else if (paths.length > 0) {\n\t\t\t// some properties could not be cloned\n\t\t\tconst slice = paths.length > 10 ? paths.slice(0, 7) : paths.slice(0, 10);\n\t\t\tconst excess = paths.length - slice.length;\n\n\t\t\tlet uncloned = slice.map((path) => `- <value>${path}`).join('\\n');\n\t\t\tif (excess > 0) uncloned += `\\n- ...and ${excess} more`;\n\n\t\t\tw.state_snapshot_uncloneable(uncloned);\n\t\t}\n\n\t\treturn copy;\n\t}\n\n\treturn clone(value, new Map(), '', empty, null, no_tojson);\n}\n\n/**\n * @template T\n * @param {T} value\n * @param {Map<T, Snapshot<T>>} cloned\n * @param {string} path\n * @param {string[]} paths\n * @param {null | T} [original] The original value, if `value` was produced from a `toJSON` call\n * @param {boolean} [no_tojson]\n * @returns {Snapshot<T>}\n */\nfunction clone(value, cloned, path, paths, original = null, no_tojson = false) {\n\tif (typeof value === 'object' && value !== null) {\n\t\tvar unwrapped = cloned.get(value);\n\t\tif (unwrapped !== undefined) return unwrapped;\n\n\t\tif (value instanceof Map) return /** @type {Snapshot<T>} */ (new Map(value));\n\t\tif (value instanceof Set) return /** @type {Snapshot<T>} */ (new Set(value));\n\n\t\tif (is_array(value)) {\n\t\t\tvar copy = /** @type {Snapshot<any>} */ (Array(value.length));\n\t\t\tcloned.set(value, copy);\n\n\t\t\tif (original !== null) {\n\t\t\t\tcloned.set(original, copy);\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < value.length; i += 1) {\n\t\t\t\tvar element = value[i];\n\t\t\t\tif (i in value) {\n\t\t\t\t\tcopy[i] = clone(element, cloned, DEV ? `${path}[${i}]` : path, paths, null, no_tojson);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn copy;\n\t\t}\n\n\t\tif (get_prototype_of(value) === object_prototype) {\n\t\t\t/** @type {Snapshot<any>} */\n\t\t\tcopy = {};\n\t\t\tcloned.set(value, copy);\n\n\t\t\tif (original !== null) {\n\t\t\t\tcloned.set(original, copy);\n\t\t\t}\n\n\t\t\tfor (var key of Object.keys(value)) {\n\t\t\t\tcopy[key] = clone(\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tvalue[key],\n\t\t\t\t\tcloned,\n\t\t\t\t\tDEV ? `${path}.${key}` : path,\n\t\t\t\t\tpaths,\n\t\t\t\t\tnull,\n\t\t\t\t\tno_tojson\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn copy;\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn /** @type {Snapshot<T>} */ (structuredClone(value));\n\t\t}\n\n\t\tif (typeof (/** @type {T & { toJSON?: any } } */ (value).toJSON) === 'function' && !no_tojson) {\n\t\t\treturn clone(\n\t\t\t\t/** @type {T & { toJSON(): any } } */ (value).toJSON(),\n\t\t\t\tcloned,\n\t\t\t\tDEV ? `${path}.toJSON()` : path,\n\t\t\t\tpaths,\n\t\t\t\t// Associate the instance with the toJSON clone\n\t\t\t\tvalue\n\t\t\t);\n\t\t}\n\t}\n\n\tif (value instanceof EventTarget) {\n\t\t// can't be cloned\n\t\treturn /** @type {Snapshot<T>} */ (value);\n\t}\n\n\ttry {\n\t\treturn /** @type {Snapshot<T>} */ (structuredClone(value));\n\t} catch (e) {\n\t\tif (DEV) {\n\t\t\tpaths.push(path);\n\t\t}\n\n\t\treturn /** @type {Snapshot<T>} */ (value);\n\t}\n}\n","/** @import { ComponentContext, DevStackEntry, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport * as e from './errors.js';\nimport { active_effect, active_reaction } from './runtime.js';\nimport { create_user_effect } from './reactivity/effects.js';\nimport { async_mode_flag, legacy_mode_flag } from '../flags/index.js';\nimport { FILENAME } from '../../constants.js';\nimport { BRANCH_EFFECT } from './constants.js';\n\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/** @type {DevStackEntry | null} */\nexport let dev_stack = null;\n\n/** @param {DevStackEntry | null} stack */\nexport function set_dev_stack(stack) {\n\tdev_stack = stack;\n}\n\n/**\n * Execute a callback with a new dev stack entry\n * @param {() => any} callback - Function to execute\n * @param {DevStackEntry['type']} type - Type of block/component\n * @param {any} component - Component function\n * @param {number} line - Line number\n * @param {number} column - Column number\n * @param {Record<string, any>} [additional] - Any additional properties to add to the dev stack entry\n * @returns {any}\n */\nexport function add_svelte_meta(callback, type, component, line, column, additional) {\n\tconst parent = dev_stack;\n\n\tdev_stack = {\n\t\ttype,\n\t\tfile: component[FILENAME],\n\t\tline,\n\t\tcolumn,\n\t\tparent,\n\t\t...additional\n\t};\n\n\ttry {\n\t\treturn callback();\n\t} finally {\n\t\tdev_stack = parent;\n\t}\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n *   <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\n/**\n * Returns a `[get, set]` pair of functions for working with context in a type-safe way.\n *\n * `get` will throw an error if no parent component called `set`.\n *\n * @template T\n * @returns {[() => T, (context: T) => T]}\n * @since 5.40.0\n */\nexport function createContext() {\n\tconst key = {};\n\n\treturn [\n\t\t() => {\n\t\t\tif (!hasContext(key)) {\n\t\t\t\te.missing_context();\n\t\t\t}\n\n\t\t\treturn getContext(key);\n\t\t},\n\t\t(context) => setContext(key, context)\n\t];\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map('setContext');\n\n\tif (async_mode_flag) {\n\t\tvar flags = /** @type {Effect} */ (active_effect).f;\n\t\tvar valid =\n\t\t\t!active_reaction &&\n\t\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\t\t// pop() runs synchronously, so this indicates we're setting context after an await\n\t\t\t!(/** @type {ComponentContext} */ (component_context).i);\n\n\t\tif (!valid) {\n\t\t\te.set_context_after_init();\n\t\t}\n\t}\n\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map('hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map('getAllContexts');\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\ti: false,\n\t\tc: null,\n\t\te: null,\n\t\ts: props,\n\t\tx: null,\n\t\tr: /** @type {Effect} */ (active_effect),\n\t\tl: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null\n\t};\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tvar context = /** @type {ComponentContext} */ (component_context);\n\tvar effects = context.e;\n\n\tif (effects !== null) {\n\t\tcontext.e = null;\n\n\t\tfor (var fn of effects) {\n\t\t\tcreate_user_effect(fn);\n\t\t}\n\t}\n\n\tif (component !== undefined) {\n\t\tcontext.x = component;\n\t}\n\n\tcontext.i = true;\n\n\tcomponent_context = context.p;\n\n\tif (DEV) {\n\t\tdev_current_component_function = component_context?.function ?? null;\n\t}\n\n\treturn component ?? /** @type {T} */ ({});\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn !legacy_mode_flag || (component_context !== null && component_context.l === null);\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component(name);\n\t}\n\n\treturn (component_context.c ??= new Map(get_parent_context(component_context) || undefined));\n}\n\n/**\n * @param {ComponentContext} component_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(component_context) {\n\tlet parent = component_context.p;\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\treturn null;\n}\n","import { run_all } from '../../shared/utils.js';\nimport { is_flushing_sync } from '../reactivity/batch.js';\n\n/** @type {Array<() => void>} */\nlet micro_tasks = [];\n\nfunction run_micro_tasks() {\n\tvar tasks = micro_tasks;\n\tmicro_tasks = [];\n\trun_all(tasks);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_micro_task(fn) {\n\tif (micro_tasks.length === 0 && !is_flushing_sync) {\n\t\tvar tasks = micro_tasks;\n\t\tqueueMicrotask(() => {\n\t\t\t// If this is false, a flushSync happened in the meantime. Do _not_ run new scheduled microtasks in that case\n\t\t\t// as the ordering of microtasks would be broken at that point - consider this case:\n\t\t\t// - queue_micro_task schedules microtask A to flush task X\n\t\t\t// - synchronously after, flushSync runs, processing task X\n\t\t\t// - synchronously after, some other microtask B is scheduled, but not through queue_micro_task but for example a Promise.resolve() in user code\n\t\t\t// - synchronously after, queue_micro_task schedules microtask C to flush task Y\n\t\t\t// - one tick later, microtask A now resolves, flushing task Y before microtask B, which is incorrect\n\t\t\t// This if check prevents that race condition (that realistically will only happen in tests)\n\t\t\tif (tasks === micro_tasks) run_micro_tasks();\n\t\t});\n\t}\n\n\tmicro_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\twhile (micro_tasks.length > 0) {\n\t\trun_micro_tasks();\n\t}\n}\n","/** @import { Derived, Effect } from '#client' */\n/** @import { Boundary } from './dom/blocks/boundary.js' */\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../../constants.js';\nimport { is_firefox } from './dom/operations.js';\nimport { ERROR_VALUE, BOUNDARY_EFFECT, REACTION_RAN, EFFECT } from './constants.js';\nimport { define_property, get_descriptor } from '../shared/utils.js';\nimport { active_effect, active_reaction } from './runtime.js';\n\nconst adjustments = new WeakMap();\n\n/**\n * @param {unknown} error\n */\nexport function handle_error(error) {\n\tvar effect = active_effect;\n\n\t// for unowned deriveds, don't throw until we read the value\n\tif (effect === null) {\n\t\t/** @type {Derived} */ (active_reaction).f |= ERROR_VALUE;\n\t\treturn error;\n\t}\n\n\tif (DEV && error instanceof Error && !adjustments.has(error)) {\n\t\tadjustments.set(error, get_adjustments(error, effect));\n\t}\n\n\t// if the error occurred while creating this subtree, we let it\n\t// bubble up until it hits a boundary that can handle it, unless\n\t// it's an $effect in which case it doesn't run immediately\n\tif ((effect.f & REACTION_RAN) === 0 && (effect.f & EFFECT) === 0) {\n\t\tif (DEV && !effect.parent && error instanceof Error) {\n\t\t\tapply_adjustments(error);\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\t// otherwise we bubble up the effect tree ourselves\n\tinvoke_error_boundary(error, effect);\n}\n\n/**\n * @param {unknown} error\n * @param {Effect | null} effect\n */\nexport function invoke_error_boundary(error, effect) {\n\twhile (effect !== null) {\n\t\tif ((effect.f & BOUNDARY_EFFECT) !== 0) {\n\t\t\tif ((effect.f & REACTION_RAN) === 0) {\n\t\t\t\t// we are still creating the boundary effect\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\n\t\teffect = effect.parent;\n\t}\n\n\tif (DEV && error instanceof Error) {\n\t\tapply_adjustments(error);\n\t}\n\n\tthrow error;\n}\n\n/**\n * Add useful information to the error message/stack in development\n * @param {Error} error\n * @param {Effect} effect\n */\nfunction get_adjustments(error, effect) {\n\tconst message_descriptor = get_descriptor(error, 'message');\n\n\t// if the message was already changed and it's not configurable we can't change it\n\t// or it will throw a different error swallowing the original error\n\tif (message_descriptor && !message_descriptor.configurable) return;\n\n\tvar indent = is_firefox ? '  ' : '\\t';\n\tvar component_stack = `\\n${indent}in ${effect.fn?.name || '<unknown>'}`;\n\tvar context = effect.ctx;\n\n\twhile (context !== null) {\n\t\tcomponent_stack += `\\n${indent}in ${context.function?.[FILENAME].split('/').pop()}`;\n\t\tcontext = context.p;\n\t}\n\n\treturn {\n\t\tmessage: error.message + `\\n${component_stack}\\n`,\n\t\tstack: error.stack\n\t\t\t?.split('\\n')\n\t\t\t.filter((line) => !line.includes('svelte/src/internal'))\n\t\t\t.join('\\n')\n\t};\n}\n\n/**\n * @param {Error} error\n */\nfunction apply_adjustments(error) {\n\tconst adjusted = adjustments.get(error);\n\n\tif (adjusted) {\n\t\tdefine_property(error, 'message', {\n\t\t\tvalue: adjusted.message\n\t\t});\n\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: adjusted.stack\n\t\t});\n\t}\n}\n","/** @import { Derived, Signal } from '#client' */\nimport { CLEAN, CONNECTED, DIRTY, MAYBE_DIRTY } from '#client/constants';\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state.\n * @param {Derived} derived\n */\nexport function update_derived_status(derived) {\n\t// Only mark as MAYBE_DIRTY if disconnected and has dependencies.\n\tif ((derived.f & CONNECTED) !== 0 || derived.deps === null) {\n\t\tset_signal_status(derived, CLEAN);\n\t} else {\n\t\tset_signal_status(derived, MAYBE_DIRTY);\n\t}\n}\n","/** @import { Derived, Effect, Value } from '#client' */\nimport { CLEAN, DERIVED, DIRTY, MAYBE_DIRTY, WAS_MARKED } from '#client/constants';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {Value[] | null} deps\n */\nfunction clear_marked(deps) {\n\tif (deps === null) return;\n\n\tfor (const dep of deps) {\n\t\tif ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdep.f ^= WAS_MARKED;\n\n\t\tclear_marked(/** @type {Derived} */ (dep).deps);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Set<Effect>} dirty_effects\n * @param {Set<Effect>} maybe_dirty_effects\n */\nexport function defer_effect(effect, dirty_effects, maybe_dirty_effects) {\n\tif ((effect.f & DIRTY) !== 0) {\n\t\tdirty_effects.add(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\tmaybe_dirty_effects.add(effect);\n\t}\n\n\t// Since we're not executing these effects now, we need to clear any WAS_MARKED flags\n\t// so that other batches can correctly reach these effects during their own traversal\n\tclear_marked(effect.deps);\n\n\t// mark as clean so they get scheduled if they depend on pending async state\n\tset_signal_status(effect, CLEAN);\n}\n","/** @import { Readable } from './public' */\nimport { untrack } from '../internal/client/runtime.js';\nimport { noop } from '../internal/shared/utils.js';\n\n/**\n * @template T\n * @param {Readable<T> | null | undefined} store\n * @param {(value: T) => void} run\n * @param {(value: T) => void} [invalidate]\n * @returns {() => void}\n */\nexport function subscribe_to_store(store, run, invalidate) {\n\tif (store == null) {\n\t\t// @ts-expect-error\n\t\trun(undefined);\n\n\t\t// @ts-expect-error\n\t\tif (invalidate) invalidate(undefined);\n\n\t\treturn noop;\n\t}\n\n\t// Svelte store takes a private second argument\n\t// StartStopNotifier could mutate state, and we want to silence the corresponding validation error\n\tconst unsub = untrack(() =>\n\t\tstore.subscribe(\n\t\t\trun,\n\t\t\t// @ts-expect-error\n\t\t\tinvalidate\n\t\t)\n\t);\n\n\t// Also support RxJS\n\t// @ts-expect-error TODO fix this in the types?\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n","/** @import { Readable, StartStopNotifier, Subscriber, Unsubscriber, Updater, Writable } from '../public.js' */\n/** @import { Stores, StoresValues, SubscribeInvalidateTuple } from '../private.js' */\nimport { noop, run_all } from '../../internal/shared/utils.js';\nimport { safe_not_equal } from '../../internal/client/reactivity/equality.js';\nimport { subscribe_to_store } from '../utils.js';\n\n/**\n * @type {Array<SubscribeInvalidateTuple<any> | any>}\n */\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * @template T\n * @param {T} [value] initial value\n * @param {StartStopNotifier<T>} [start]\n * @returns {Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * @template T\n * @param {T} [value] initial value\n * @param {StartStopNotifier<T>} [start]\n * @returns {Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {Unsubscriber | null} */\n\tlet stop = null;\n\n\t/** @type {Set<SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\n\t/**\n\t * @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(/** @type {T} */ (value)));\n\t}\n\n\t/**\n\t * @param {Subscriber<T>} run\n\t * @param {() => void} [invalidate]\n\t * @returns {Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(/** @type {T} */ (value));\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * @template {Stores} S\n * @template T\n * @overload\n * @param {S} stores\n * @param {(values: StoresValues<S>, set: (value: T) => void, update: (fn: Updater<T>) => void) => Unsubscriber | void} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * @template {Stores} S\n * @template T\n * @overload\n * @param {S} stores\n * @param {(values: StoresValues<S>) => T} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\n/**\n * @template {Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\t/** @type {T[]} */\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = typeof result === 'function' ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe_to_store(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * @template T\n * @param {Readable<T>} store  - store to make readonly\n * @returns {Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\t// @ts-expect-error TODO i suspect the bind is unnecessary\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * @template T\n * @param {Readable<T>} store\n * @returns {T}\n */\nexport function get(store) {\n\tlet value;\n\tsubscribe_to_store(store, (_) => (value = _))();\n\t// @ts-expect-error\n\treturn value;\n}\n","/** @import { StoreReferencesContainer } from '#client' */\n/** @import { Store } from '#shared' */\nimport { subscribe_to_store } from '../../../store/utils.js';\nimport { get as get_store } from '../../../store/shared/index.js';\nimport { define_property, noop } from '../../shared/utils.js';\nimport { get } from '../runtime.js';\nimport { teardown } from './effects.js';\nimport { mutable_source, set } from './sources.js';\nimport { DEV } from 'esm-env';\n\n/**\n * We set this to `true` when updating a store so that we correctly\n * schedule effects if the update takes place inside a `$:` effect\n */\nexport let legacy_is_updating_store = false;\n\n/**\n * Whether or not the prop currently being read is a store binding, as in\n * `<Child bind:x={$y} />`. If it is, we treat the prop as mutable even in\n * runes mode, and skip `binding_property_non_reactive` validation\n */\nlet is_store_binding = false;\n\nlet IS_UNMOUNTED = Symbol();\n\n/**\n * Gets the current value of a store. If the store isn't subscribed to yet, it will create a proxy\n * signal that will be updated when the store is. The store references container is needed to\n * track reassignments to stores and to track the correct component context.\n * @template V\n * @param {Store<V> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n * @returns {V}\n */\nexport function store_get(store, store_name, stores) {\n\tconst entry = (stores[store_name] ??= {\n\t\tstore: null,\n\t\tsource: mutable_source(undefined),\n\t\tunsubscribe: noop\n\t});\n\n\tif (DEV) {\n\t\tentry.source.label = store_name;\n\t}\n\n\t// if the component that setup this is already unmounted we don't want to register a subscription\n\tif (entry.store !== store && !(IS_UNMOUNTED in stores)) {\n\t\tentry.unsubscribe();\n\t\tentry.store = store ?? null;\n\n\t\tif (store == null) {\n\t\t\tentry.source.v = undefined; // see synchronous callback comment below\n\t\t\tentry.unsubscribe = noop;\n\t\t} else {\n\t\t\tvar is_synchronous_callback = true;\n\n\t\t\tentry.unsubscribe = subscribe_to_store(store, (v) => {\n\t\t\t\tif (is_synchronous_callback) {\n\t\t\t\t\t// If the first updates to the store value (possibly multiple of them) are synchronously\n\t\t\t\t\t// inside a derived, we will hit the `state_unsafe_mutation` error if we `set` the value\n\t\t\t\t\tentry.source.v = v;\n\t\t\t\t} else {\n\t\t\t\t\tset(entry.source, v);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tis_synchronous_callback = false;\n\t\t}\n\t}\n\n\t// if the component that setup this stores is already unmounted the source will be out of sync\n\t// so we just use the `get` for the stores, less performant but it avoids to create a memory leak\n\t// and it will keep the value consistent\n\tif (store && IS_UNMOUNTED in stores) {\n\t\treturn get_store(store);\n\t}\n\n\treturn get(entry.source);\n}\n\n/**\n * Unsubscribe from a store if it's not the same as the one in the store references container.\n * We need this in addition to `store_get` because someone could unsubscribe from a store but\n * then never subscribe to the new one (if any), causing the subscription to stay open wrongfully.\n * @param {Store<any> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n */\nexport function store_unsub(store, store_name, stores) {\n\t/** @type {StoreReferencesContainer[''] | undefined} */\n\tlet entry = stores[store_name];\n\n\tif (entry && entry.store !== store) {\n\t\t// Don't reset store yet, so that store_get above can resubscribe to new store if necessary\n\t\tentry.unsubscribe();\n\t\tentry.unsubscribe = noop;\n\t}\n\n\treturn store;\n}\n\n/**\n * Sets the new value of a store and returns that value.\n * @template V\n * @param {Store<V>} store\n * @param {V} value\n * @returns {V}\n */\nexport function store_set(store, value) {\n\tupdate_with_flag(store, value);\n\treturn value;\n}\n\n/**\n * @param {StoreReferencesContainer} stores\n * @param {string} store_name\n */\nexport function invalidate_store(stores, store_name) {\n\tvar entry = stores[store_name];\n\tif (entry.store !== null) {\n\t\tstore_set(entry.store, entry.source.v);\n\t}\n}\n\n/**\n * Unsubscribes from all auto-subscribed stores on destroy\n * @returns {[StoreReferencesContainer, ()=>void]}\n */\nexport function setup_stores() {\n\t/** @type {StoreReferencesContainer} */\n\tconst stores = {};\n\n\tfunction cleanup() {\n\t\tteardown(() => {\n\t\t\tfor (var store_name in stores) {\n\t\t\t\tconst ref = stores[store_name];\n\t\t\t\tref.unsubscribe();\n\t\t\t}\n\t\t\tdefine_property(stores, IS_UNMOUNTED, {\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t});\n\t}\n\n\treturn [stores, cleanup];\n}\n\n/**\n * @param {Store<V>} store\n * @param {V} value\n * @template V\n */\nfunction update_with_flag(store, value) {\n\tlegacy_is_updating_store = true;\n\n\ttry {\n\t\tstore.set(value);\n\t} finally {\n\t\tlegacy_is_updating_store = false;\n\t}\n}\n\n/**\n * Updates a store with a new value.\n * @param {Store<V>} store  the store to update\n * @param {any} expression  the expression that mutates the store\n * @param {V} new_value  the new store value\n * @template V\n */\nexport function store_mutate(store, expression, new_value) {\n\tupdate_with_flag(store, new_value);\n\treturn expression;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_store(store, store_value, d = 1) {\n\tupdate_with_flag(store, store_value + d);\n\treturn store_value;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_store(store, store_value, d = 1) {\n\tconst value = store_value + d;\n\tupdate_with_flag(store, value);\n\treturn value;\n}\n\n/**\n * Called inside prop getters to communicate that the prop is a store binding\n */\nexport function mark_store_binding() {\n\tis_store_binding = true;\n}\n\n/**\n * Returns a tuple that indicates whether `fn()` reads a prop that is a store binding.\n * Used to prevent `binding_property_non_reactive` validation false positives and\n * ensure that these props are treated as mutable even in runes mode\n * @template T\n * @param {() => T} fn\n * @returns {[T, boolean]}\n */\nexport function capture_store_binding(fn) {\n\tvar previous_is_store_binding = is_store_binding;\n\n\ttry {\n\t\tis_store_binding = false;\n\t\treturn [fn(), is_store_binding];\n\t} finally {\n\t\tis_store_binding = previous_is_store_binding;\n\t}\n}\n","/** @import { Fork } from 'svelte' */\n/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport {\n\tBLOCK_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tINERT,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tMAYBE_DIRTY,\n\tDERIVED,\n\tEAGER_EFFECT,\n\tERROR_VALUE,\n\tMANAGED_EFFECT,\n\tREACTION_RAN\n} from '#client/constants';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { deferred, define_property, includes } from '../../shared/utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tincrement_write_version,\n\tis_dirty,\n\tupdate_effect\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { flush_tasks, queue_micro_task } from '../dom/task.js';\nimport { DEV } from 'esm-env';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport { flush_eager_effects, old_values, set_eager_effects, source, update } from './sources.js';\nimport { eager_effect, unlink_effect } from './effects.js';\nimport { defer_effect } from './utils.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { set_signal_status } from './status.js';\nimport { legacy_is_updating_store } from './store.js';\nimport { invariant } from '../../shared/dev.js';\nimport { log_effect_tree } from '../dev/debug.js';\n\n/** @type {Set<Batch>} */\nconst batches = new Set();\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs\n * @type {Batch | null}\n */\nexport let previous_batch = null;\n\n/**\n * When time travelling (i.e. working in one batch, while other batches\n * still have ongoing work), we ignore the real values of affected\n * signals in favour of their values within the batch\n * @type {Map<Value, any> | null}\n */\nexport let batch_values = null;\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nexport let is_flushing_sync = false;\nlet is_processing = false;\n\n/**\n * During traversal, this is an array. Newly created effects are (if not immediately\n * executed) pushed to this array, rather than going through the scheduling\n * rigamarole that would cause another turn of the flush loop.\n * @type {Effect[] | null}\n */\nexport let collected_effects = null;\n\n/**\n * An array of effects that are marked during traversal as a result of a `set`\n * (not `internal_set`) call. These will be added to the next batch and\n * trigger another `batch.process()`\n * @type {Effect[] | null}\n * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n */\nexport let legacy_updates = null;\n\nvar flush_count = 0;\nvar source_stacks = DEV ? new Set() : null;\n\nlet uid = 1;\n\nexport class Batch {\n\tid = uid++;\n\n\t/**\n\t * The current values of any signals that are updated in this batch.\n\t * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Value, [any, boolean]>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any signals (sources and deriveds) that are updated in this batch _before_ those updates took place.\n\t * They keys of this map are identical to `this.#current`\n\t * @type {Map<Value, any>}\n\t */\n\tprevious = new Map();\n\n\t/**\n\t * When the batch is committed (and the DOM is updated), we need to remove old branches\n\t * and append new ones by calling the functions added inside (if/each/key/etc) blocks\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#commit_callbacks = new Set();\n\n\t/**\n\t * If a fork is discarded, we need to destroy any effects that are no longer needed\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#discard_callbacks = new Set();\n\n\t/**\n\t * Async effects that are currently in flight\n\t * @type {Map<Effect, number>}\n\t */\n\t#pending = new Map();\n\n\t/**\n\t * Async effects that are currently in flight, _not_ inside a pending boundary\n\t * @type {Map<Effect, number>}\n\t */\n\t#blocking_pending = new Map();\n\n\t/**\n\t * A deferred that resolves when the batch is committed, used with `settled()`\n\t * TODO replace with Promise.withResolvers once supported widely enough\n\t * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}\n\t */\n\t#deferred = null;\n\n\t/**\n\t * The root effects that need to be flushed\n\t * @type {Effect[]}\n\t */\n\t#roots = [];\n\n\t/**\n\t * Deferred effects (which run after async work has completed) that are DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#dirty_effects = new Set();\n\n\t/**\n\t * Deferred effects that are MAYBE_DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A map of branches that still exist, but will be destroyed when this batch\n\t * is committed — we skip over these during `process`.\n\t * The value contains child effects that were dirty/maybe_dirty before being reset,\n\t * so they can be rescheduled if the branch survives.\n\t * @type {Map<Effect, { d: Effect[], m: Effect[] }>}\n\t */\n\t#skipped_branches = new Map();\n\n\tis_fork = false;\n\n\t#decrement_queued = false;\n\n\t/** @type {Set<Batch>} */\n\t#blockers = new Set();\n\n\t#is_deferred() {\n\t\treturn this.is_fork || this.#blocking_pending.size > 0;\n\t}\n\n\t#is_blocked() {\n\t\tfor (const batch of this.#blockers) {\n\t\t\tfor (const effect of batch.#blocking_pending.keys()) {\n\t\t\t\tvar skipped = false;\n\t\t\t\tvar e = effect;\n\n\t\t\t\twhile (e.parent !== null) {\n\t\t\t\t\tif (this.#skipped_branches.has(e)) {\n\t\t\t\t\t\tskipped = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\te = e.parent;\n\t\t\t\t}\n\n\t\t\t\tif (!skipped) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add an effect to the #skipped_branches map and reset its children\n\t * @param {Effect} effect\n\t */\n\tskip_effect(effect) {\n\t\tif (!this.#skipped_branches.has(effect)) {\n\t\t\tthis.#skipped_branches.set(effect, { d: [], m: [] });\n\t\t}\n\t}\n\n\t/**\n\t * Remove an effect from the #skipped_branches map and reschedule\n\t * any tracked dirty/maybe_dirty child effects\n\t * @param {Effect} effect\n\t */\n\tunskip_effect(effect) {\n\t\tvar tracked = this.#skipped_branches.get(effect);\n\t\tif (tracked) {\n\t\t\tthis.#skipped_branches.delete(effect);\n\n\t\t\tfor (var e of tracked.d) {\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\n\n\t\t\tfor (e of tracked.m) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\n\t\t}\n\t}\n\n\t#process() {\n\t\tif (flush_count++ > 1000) {\n\t\t\tbatches.delete(this);\n\t\t\tinfinite_loop_guard();\n\t\t}\n\n\t\t// we only reschedule previously-deferred effects if we expect\n\t\t// to be able to run them after processing the batch\n\t\tif (!this.#is_deferred()) {\n\t\t\tfor (const e of this.#dirty_effects) {\n\t\t\t\tthis.#maybe_dirty_effects.delete(e);\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\n\n\t\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\n\t\t}\n\n\t\tconst roots = this.#roots;\n\t\tthis.#roots = [];\n\n\t\tthis.apply();\n\n\t\t/** @type {Effect[]} */\n\t\tvar effects = (collected_effects = []);\n\n\t\t/** @type {Effect[]} */\n\t\tvar render_effects = [];\n\n\t\t/**\n\t\t * @type {Effect[]}\n\t\t * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n\t\t */\n\t\tvar updates = (legacy_updates = []);\n\n\t\tfor (const root of roots) {\n\t\t\ttry {\n\t\t\t\tthis.#traverse(root, effects, render_effects);\n\t\t\t} catch (e) {\n\t\t\t\treset_all(root);\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\t// any writes should take effect in a subsequent batch\n\t\tcurrent_batch = null;\n\n\t\tif (updates.length > 0) {\n\t\t\tvar batch = Batch.ensure();\n\t\t\tfor (const e of updates) {\n\t\t\t\tbatch.schedule(e);\n\t\t\t}\n\t\t}\n\n\t\tcollected_effects = null;\n\t\tlegacy_updates = null;\n\n\t\tif (this.#is_deferred() || this.#is_blocked()) {\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\n\t\t\tfor (const [e, t] of this.#skipped_branches) {\n\t\t\t\treset_branch(e, t);\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.#pending.size === 0) {\n\t\t\t\tbatches.delete(this);\n\t\t\t}\n\n\t\t\t// clear effects. Those that are still needed will be rescheduled through unskipping the skipped branches.\n\t\t\tthis.#dirty_effects.clear();\n\t\t\tthis.#maybe_dirty_effects.clear();\n\n\t\t\t// append/remove branches\n\t\t\tfor (const fn of this.#commit_callbacks) fn(this);\n\t\t\tthis.#commit_callbacks.clear();\n\n\t\t\tprevious_batch = this;\n\t\t\tflush_queued_effects(render_effects);\n\t\t\tflush_queued_effects(effects);\n\t\t\tprevious_batch = null;\n\n\t\t\tthis.#deferred?.resolve();\n\t\t}\n\n\t\tvar next_batch = /** @type {Batch | null} */ (/** @type {unknown} */ (current_batch));\n\n\t\t// Edge case: During traversal new branches might create effects that run immediately and set state,\n\t\t// causing an effect and therefore a root to be scheduled again. We need to traverse the current batch\n\t\t// once more in that case - most of the time this will just clean up dirty branches.\n\t\tif (this.#roots.length > 0) {\n\t\t\tconst batch = (next_batch ??= this);\n\t\t\tbatch.#roots.push(...this.#roots.filter((r) => !batch.#roots.includes(r)));\n\t\t}\n\n\t\tif (next_batch !== null) {\n\t\t\tbatches.add(next_batch);\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of this.current.keys()) {\n\t\t\t\t\t/** @type {Set<Source>} */ (source_stacks).add(source);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnext_batch.#process();\n\t\t}\n\n\t\tif (!batches.has(this)) {\n\t\t\tthis.#commit();\n\t\t}\n\t}\n\n\t/**\n\t * Traverse the effect tree, executing effects or stashing\n\t * them for later execution as appropriate\n\t * @param {Effect} root\n\t * @param {Effect[]} effects\n\t * @param {Effect[]} render_effects\n\t */\n\t#traverse(root, effects, render_effects) {\n\t\troot.f ^= CLEAN;\n\n\t\tvar effect = root.first;\n\n\t\twhile (effect !== null) {\n\t\t\tvar flags = effect.f;\n\t\t\tvar is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;\n\t\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\n\t\t\tvar skip = is_skippable_branch || (flags & INERT) !== 0 || this.#skipped_branches.has(effect);\n\n\t\t\tif (!skip && effect.fn !== null) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\teffect.f ^= CLEAN;\n\t\t\t\t} else if ((flags & EFFECT) !== 0) {\n\t\t\t\t\teffects.push(effect);\n\t\t\t\t} else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\t\t\trender_effects.push(effect);\n\t\t\t\t} else if (is_dirty(effect)) {\n\t\t\t\t\tif ((flags & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect);\n\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tvar child = effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\teffect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (effect !== null) {\n\t\t\t\tvar next = effect.next;\n\n\t\t\t\tif (next !== null) {\n\t\t\t\t\teffect = next;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\teffect = effect.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Effect[]} effects\n\t */\n\t#defer_effects(effects) {\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdefer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);\n\t\t}\n\t}\n\n\t/**\n\t * Associate a change to a given source with the current\n\t * batch, noting its previous and current values\n\t * @param {Value} source\n\t * @param {any} old_value\n\t * @param {boolean} [is_derived]\n\t */\n\tcapture(source, old_value, is_derived = false) {\n\t\tif (old_value !== UNINITIALIZED && !this.previous.has(source)) {\n\t\t\tthis.previous.set(source, old_value);\n\t\t}\n\n\t\t// Don't save errors in `batch_values`, or they won't be thrown in `runtime.js#get`\n\t\tif ((source.f & ERROR_VALUE) === 0) {\n\t\t\tthis.current.set(source, [source.v, is_derived]);\n\t\t\tbatch_values?.set(source, source.v);\n\t\t}\n\t}\n\n\tactivate() {\n\t\tcurrent_batch = this;\n\t}\n\n\tdeactivate() {\n\t\tcurrent_batch = null;\n\t\tbatch_values = null;\n\t}\n\n\tflush() {\n\t\tvar source_stacks = DEV ? new Set() : null;\n\n\t\ttry {\n\t\t\tis_processing = true;\n\t\t\tcurrent_batch = this;\n\n\t\t\tthis.#process();\n\t\t} finally {\n\t\t\tflush_count = 0;\n\t\t\tlast_scheduled_effect = null;\n\t\t\tcollected_effects = null;\n\t\t\tlegacy_updates = null;\n\t\t\tis_processing = false;\n\n\t\t\tcurrent_batch = null;\n\t\t\tbatch_values = null;\n\n\t\t\told_values.clear();\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of /** @type {Set<Source>} */ (source_stacks)) {\n\t\t\t\t\tsource.updated = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdiscard() {\n\t\tfor (const fn of this.#discard_callbacks) fn(this);\n\t\tthis.#discard_callbacks.clear();\n\n\t\tbatches.delete(this);\n\t}\n\n\t#commit() {\n\t\t// If there are other pending batches, they now need to be 'rebased' —\n\t\t// in other words, we re-run block/async effects with the newly\n\t\t// committed state, unless the batch in question has a more\n\t\t// recent value for a given source\n\t\tfor (const batch of batches) {\n\t\t\tvar is_earlier = batch.id < this.id;\n\n\t\t\t/** @type {Source[]} */\n\t\t\tvar sources = [];\n\n\t\t\tfor (const [source, [value, is_derived]] of this.current) {\n\t\t\t\tif (batch.current.has(source)) {\n\t\t\t\t\tvar batch_value = /** @type {[any, boolean]} */ (batch.current.get(source))[0]; // faster than destructuring\n\n\t\t\t\t\tif (is_earlier && value !== batch_value) {\n\t\t\t\t\t\t// bring the value up to date\n\t\t\t\t\t\tbatch.current.set(source, [value, is_derived]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// same value or later batch has more recent value,\n\t\t\t\t\t\t// no need to re-run these effects\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsources.push(source);\n\t\t\t}\n\n\t\t\t// Re-run async/block effects that depend on distinct values changed in both batches\n\t\t\tvar others = [...batch.current.keys()].filter((s) => !this.current.has(s));\n\n\t\t\tif (others.length === 0) {\n\t\t\t\tif (is_earlier) {\n\t\t\t\t\t// this batch is now obsolete and can be discarded\n\t\t\t\t\tbatch.discard();\n\t\t\t\t}\n\t\t\t} else if (sources.length > 0) {\n\t\t\t\tif (DEV) {\n\t\t\t\t\tinvariant(batch.#roots.length === 0, 'Batch has scheduled roots');\n\t\t\t\t}\n\n\t\t\t\tbatch.activate();\n\n\t\t\t\t/** @type {Set<Value>} */\n\t\t\t\tvar marked = new Set();\n\n\t\t\t\t/** @type {Map<Reaction, boolean>} */\n\t\t\t\tvar checked = new Map();\n\n\t\t\t\tfor (var source of sources) {\n\t\t\t\t\tmark_effects(source, others, marked, checked);\n\t\t\t\t}\n\n\t\t\t\t// Only apply and traverse when we know we triggered async work with marking the effects\n\t\t\t\tif (batch.#roots.length > 0) {\n\t\t\t\t\tbatch.apply();\n\n\t\t\t\t\tfor (var root of batch.#roots) {\n\t\t\t\t\t\tbatch.#traverse(root, [], []);\n\t\t\t\t\t}\n\n\t\t\t\t\tbatch.#roots = [];\n\t\t\t\t}\n\n\t\t\t\tbatch.deactivate();\n\t\t\t}\n\t\t}\n\n\t\tfor (const batch of batches) {\n\t\t\tif (batch.#blockers.has(this)) {\n\t\t\t\tbatch.#blockers.delete(this);\n\n\t\t\t\tif (batch.#blockers.size === 0 && !batch.#is_deferred()) {\n\t\t\t\t\tbatch.activate();\n\t\t\t\t\tbatch.#process();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t */\n\tincrement(blocking, effect) {\n\t\tlet pending_count = this.#pending.get(effect) ?? 0;\n\t\tthis.#pending.set(effect, pending_count + 1);\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count + 1);\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t * @param {boolean} skip - whether to skip updates (because this is triggered by a stale reaction)\n\t */\n\tdecrement(blocking, effect, skip) {\n\t\tlet pending_count = this.#pending.get(effect) ?? 0;\n\n\t\tif (pending_count === 1) {\n\t\t\tthis.#pending.delete(effect);\n\t\t} else {\n\t\t\tthis.#pending.set(effect, pending_count - 1);\n\t\t}\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\n\t\t\tif (blocking_pending_count === 1) {\n\t\t\t\tthis.#blocking_pending.delete(effect);\n\t\t\t} else {\n\t\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count - 1);\n\t\t\t}\n\t\t}\n\n\t\tif (this.#decrement_queued || skip) return;\n\t\tthis.#decrement_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#decrement_queued = false;\n\t\t\tthis.flush();\n\t\t});\n\t}\n\n\t/**\n\t * @param {Set<Effect>} dirty_effects\n\t * @param {Set<Effect>} maybe_dirty_effects\n\t */\n\ttransfer_effects(dirty_effects, maybe_dirty_effects) {\n\t\tfor (const e of dirty_effects) {\n\t\t\tthis.#dirty_effects.add(e);\n\t\t}\n\n\t\tfor (const e of maybe_dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.add(e);\n\t\t}\n\n\t\tdirty_effects.clear();\n\t\tmaybe_dirty_effects.clear();\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\toncommit(fn) {\n\t\tthis.#commit_callbacks.add(fn);\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\tondiscard(fn) {\n\t\tthis.#discard_callbacks.add(fn);\n\t}\n\n\tsettled() {\n\t\treturn (this.#deferred ??= deferred()).promise;\n\t}\n\n\tstatic ensure() {\n\t\tif (current_batch === null) {\n\t\t\tconst batch = (current_batch = new Batch());\n\n\t\t\tif (!is_processing) {\n\t\t\t\tbatches.add(current_batch);\n\n\t\t\t\tif (!is_flushing_sync) {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\tif (current_batch !== batch) {\n\t\t\t\t\t\t\t// a flushSync happened in the meantime\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbatch.flush();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn current_batch;\n\t}\n\n\tapply() {\n\t\tif (!async_mode_flag || (!this.is_fork && batches.size === 1)) {\n\t\t\tbatch_values = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// if there are multiple batches, we are 'time travelling' —\n\t\t// we need to override values with the ones in this batch...\n\t\tbatch_values = new Map();\n\t\tfor (const [source, [value]] of this.current) {\n\t\t\tbatch_values.set(source, value);\n\t\t}\n\n\t\t// ...and undo changes belonging to other batches unless they block this one\n\t\tfor (const batch of batches) {\n\t\t\tif (batch === this || batch.is_fork) continue;\n\n\t\t\t// A batch is blocked on an earlier batch if it overlaps with the earlier batch's changes but is not a superset\n\t\t\tvar intersects = false;\n\t\t\tvar differs = false;\n\n\t\t\tif (batch.id < this.id) {\n\t\t\t\tfor (const [source, [, is_derived]] of batch.current) {\n\t\t\t\t\t// Derived values don't partake in the blocking mechanism, because a derived could\n\t\t\t\t\t// be triggered in one batch already but not the other one yet, causing a false-positive\n\t\t\t\t\tif (is_derived) continue;\n\n\t\t\t\t\tintersects ||= this.current.has(source);\n\t\t\t\t\tdiffers ||= !this.current.has(source);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (intersects && differs) {\n\t\t\t\tthis.#blockers.add(batch);\n\t\t\t} else {\n\t\t\t\tfor (const [source, previous] of batch.previous) {\n\t\t\t\t\tif (!batch_values.has(source)) {\n\t\t\t\t\t\tbatch_values.set(source, previous);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {Effect} effect\n\t */\n\tschedule(effect) {\n\t\tlast_scheduled_effect = effect;\n\n\t\t// defer render effects inside a pending boundary\n\t\t// TODO the `REACTION_RAN` check is only necessary because of legacy `$:` effects AFAICT — we can remove later\n\t\tif (\n\t\t\teffect.b?.is_pending &&\n\t\t\t(effect.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 &&\n\t\t\t(effect.f & REACTION_RAN) === 0\n\t\t) {\n\t\t\teffect.b.defer_effect(effect);\n\t\t\treturn;\n\t\t}\n\n\t\tvar e = effect;\n\n\t\twhile (e.parent !== null) {\n\t\t\te = e.parent;\n\t\t\tvar flags = e.f;\n\n\t\t\t// if the effect is being scheduled because a parent (each/await/etc) block\n\t\t\t// updated an internal source, or because a branch is being unskipped,\n\t\t\t// bail out or we'll cause a second flush\n\t\t\tif (collected_effects !== null && e === active_effect) {\n\t\t\t\tif (async_mode_flag) return;\n\n\t\t\t\t// in sync mode, render effects run during traversal. in an extreme edge case\n\t\t\t\t// — namely that we're setting a value inside a derived read during traversal —\n\t\t\t\t// they can be made dirty after they have already been visited, in which\n\t\t\t\t// case we shouldn't bail out. we also shouldn't bail out if we're\n\t\t\t\t// updating a store inside a `$:`, since this might invalidate\n\t\t\t\t// effects that were already visited\n\t\t\t\tif (\n\t\t\t\t\t(active_reaction === null || (active_reaction.f & DERIVED) === 0) &&\n\t\t\t\t\t!legacy_is_updating_store\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\t\tif ((flags & CLEAN) === 0) {\n\t\t\t\t\t// branch is already dirty, bail\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\te.f ^= CLEAN;\n\t\t\t}\n\t\t}\n\n\t\tthis.#roots.push(e);\n\t}\n}\n\n/**\n * Synchronously flush any pending updates.\n * Returns void if no callback is provided, otherwise returns the result of calling the callback.\n * @template [T=void]\n * @param {(() => T) | undefined} [fn]\n * @returns {T}\n */\nexport function flushSync(fn) {\n\tvar was_flushing_sync = is_flushing_sync;\n\tis_flushing_sync = true;\n\n\ttry {\n\t\tvar result;\n\n\t\tif (fn) {\n\t\t\tif (current_batch !== null && !current_batch.is_fork) {\n\t\t\t\tcurrent_batch.flush();\n\t\t\t}\n\n\t\t\tresult = fn();\n\t\t}\n\n\t\twhile (true) {\n\t\t\tflush_tasks();\n\n\t\t\tif (current_batch === null) {\n\t\t\t\treturn /** @type {T} */ (result);\n\t\t\t}\n\n\t\t\tcurrent_batch.flush();\n\t\t}\n\t} finally {\n\t\tis_flushing_sync = was_flushing_sync;\n\t}\n}\n\nfunction infinite_loop_guard() {\n\tif (DEV) {\n\t\tvar updates = new Map();\n\n\t\tfor (const source of /** @type {Batch} */ (current_batch).current.keys()) {\n\t\t\tfor (const [stack, update] of source.updated ?? []) {\n\t\t\t\tvar entry = updates.get(stack);\n\n\t\t\t\tif (!entry) {\n\t\t\t\t\tentry = { error: update.error, count: 0 };\n\t\t\t\t\tupdates.set(stack, entry);\n\t\t\t\t}\n\n\t\t\t\tentry.count += update.count;\n\t\t\t}\n\t\t}\n\n\t\tfor (const update of updates.values()) {\n\t\t\tif (update.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(update.error);\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\te.effect_update_depth_exceeded();\n\t} catch (error) {\n\t\tif (DEV) {\n\t\t\t// stack contains no useful information, replace it\n\t\t\tdefine_property(error, 'stack', { value: '' });\n\t\t}\n\n\t\t// Best effort: invoke the boundary nearest the most recent\n\t\t// effect and hope that it's relevant to the infinite loop\n\t\tinvoke_error_boundary(error, last_scheduled_effect);\n\t}\n}\n\n/** @type {Set<Effect> | null} */\nexport let eager_block_effects = null;\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tvar i = 0;\n\n\twhile (i < length) {\n\t\tvar effect = effects[i++];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {\n\t\t\teager_block_effects = new Set();\n\n\t\t\tupdate_effect(effect);\n\n\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t// immediate effects.\n\t\t\tif (\n\t\t\t\teffect.deps === null &&\n\t\t\t\teffect.first === null &&\n\t\t\t\teffect.nodes === null &&\n\t\t\t\teffect.teardown === null &&\n\t\t\t\teffect.ac === null\n\t\t\t) {\n\t\t\t\t// remove this effect from the graph\n\t\t\t\tunlink_effect(effect);\n\t\t\t}\n\n\t\t\t// If update_effect() has a flushSync() in it, we may have flushed another flush_queued_effects(),\n\t\t\t// which already handled this logic and did set eager_block_effects to null.\n\t\t\tif (eager_block_effects?.size > 0) {\n\t\t\t\told_values.clear();\n\n\t\t\t\tfor (const e of eager_block_effects) {\n\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\n\t\t\t\t\t// Run effects in order from ancestor to descendant, else we could run into nullpointers\n\t\t\t\t\t/** @type {Effect[]} */\n\t\t\t\t\tconst ordered_effects = [e];\n\t\t\t\t\tlet ancestor = e.parent;\n\t\t\t\t\twhile (ancestor !== null) {\n\t\t\t\t\t\tif (eager_block_effects.has(ancestor)) {\n\t\t\t\t\t\t\teager_block_effects.delete(ancestor);\n\t\t\t\t\t\t\tordered_effects.push(ancestor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let j = ordered_effects.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tconst e = ordered_effects[j];\n\t\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\t\t\t\t\t\tupdate_effect(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\teager_block_effects.clear();\n\t\t\t}\n\t\t}\n\t}\n\n\teager_block_effects = null;\n}\n\n/**\n * This is similar to `mark_reactions`, but it only marks async/block effects\n * depending on `value` and at least one of the other `sources`, so that\n * these effects can re-run after another batch has been committed\n * @param {Value} value\n * @param {Source[]} sources\n * @param {Set<Value>} marked\n * @param {Map<Reaction, boolean>} checked\n */\nfunction mark_effects(value, sources, marked, checked) {\n\tif (marked.has(value)) return;\n\tmarked.add(value);\n\n\tif (value.reactions !== null) {\n\t\tfor (const reaction of value.reactions) {\n\t\t\tconst flags = reaction.f;\n\n\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\tmark_effects(/** @type {Derived} */ (reaction), sources, marked, checked);\n\t\t\t} else if (\n\t\t\t\t(flags & (ASYNC | BLOCK_EFFECT)) !== 0 &&\n\t\t\t\t(flags & DIRTY) === 0 &&\n\t\t\t\tdepends_on(reaction, sources, checked)\n\t\t\t) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * When committing a fork, we need to trigger eager effects so that\n * any `$state.eager(...)` expressions update immediately. This\n * function allows us to discover them\n * @param {Value} value\n * @param {Set<Effect>} effects\n */\nfunction mark_eager_effects(value, effects) {\n\tif (value.reactions === null) return;\n\n\tfor (const reaction of value.reactions) {\n\t\tconst flags = reaction.f;\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tmark_eager_effects(/** @type {Derived} */ (reaction), effects);\n\t\t} else if ((flags & EAGER_EFFECT) !== 0) {\n\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\teffects.add(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/**\n * @param {Reaction} reaction\n * @param {Source[]} sources\n * @param {Map<Reaction, boolean>} checked\n */\nfunction depends_on(reaction, sources, checked) {\n\tconst depends = checked.get(reaction);\n\tif (depends !== undefined) return depends;\n\n\tif (reaction.deps !== null) {\n\t\tfor (const dep of reaction.deps) {\n\t\t\tif (includes.call(sources, dep)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ((dep.f & DERIVED) !== 0 && depends_on(/** @type {Derived} */ (dep), sources, checked)) {\n\t\t\t\tchecked.set(/** @type {Derived} */ (dep), true);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\tchecked.set(reaction, false);\n\n\treturn false;\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function schedule_effect(effect) {\n\t/** @type {Batch} */ (current_batch).schedule(effect);\n}\n\n/** @type {Source<number>[]} */\nlet eager_versions = [];\n\nfunction eager_flush() {\n\ttry {\n\t\tflushSync(() => {\n\t\t\tfor (const version of eager_versions) {\n\t\t\t\tupdate(version);\n\t\t\t}\n\t\t});\n\t} finally {\n\t\teager_versions = [];\n\t}\n}\n\n/**\n * Implementation of `$state.eager(fn())`\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function eager(fn) {\n\tvar version = source(0);\n\tvar initial = true;\n\tvar value = /** @type {T} */ (undefined);\n\n\tget(version);\n\n\teager_effect(() => {\n\t\tif (initial) {\n\t\t\t// the first time this runs, we create an eager effect\n\t\t\t// that will run eagerly whenever the expression changes\n\t\t\tvar previous_batch_values = batch_values;\n\n\t\t\ttry {\n\t\t\t\tbatch_values = null;\n\t\t\t\tvalue = fn();\n\t\t\t} finally {\n\t\t\t\tbatch_values = previous_batch_values;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// the second time this effect runs, it's to schedule a\n\t\t// `version` update. since this will recreate the effect,\n\t\t// we don't need to evaluate the expression here\n\t\tif (eager_versions.length === 0) {\n\t\t\tqueue_micro_task(eager_flush);\n\t\t}\n\n\t\teager_versions.push(version);\n\t});\n\n\tinitial = false;\n\n\treturn value;\n}\n\n/**\n * Mark all the effects inside a skipped branch CLEAN, so that\n * they can be correctly rescheduled later. Tracks dirty and maybe_dirty\n * effects so they can be rescheduled if the branch survives.\n * @param {Effect} effect\n * @param {{ d: Effect[], m: Effect[] }} tracked\n */\nfunction reset_branch(effect, tracked) {\n\t// clean branch = nothing dirty inside, no need to traverse further\n\tif ((effect.f & BRANCH_EFFECT) !== 0 && (effect.f & CLEAN) !== 0) {\n\t\treturn;\n\t}\n\n\tif ((effect.f & DIRTY) !== 0) {\n\t\ttracked.d.push(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\ttracked.m.push(effect);\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_branch(e, tracked);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Mark an entire effect tree clean following an error\n * @param {Effect} effect\n */\nfunction reset_all(effect) {\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_all(e);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Creates a 'fork', in which state changes are evaluated but not applied to the DOM.\n * This is useful for speculatively loading data (for example) when you suspect that\n * the user is about to take some action.\n *\n * Frameworks like SvelteKit can use this to preload data when the user touches or\n * hovers over a link, making any subsequent navigation feel instantaneous.\n *\n * The `fn` parameter is a synchronous function that modifies some state. The\n * state changes will be reverted after the fork is initialised, then reapplied\n * if and when the fork is eventually committed.\n *\n * When it becomes clear that a fork will _not_ be committed (e.g. because the\n * user navigated elsewhere), it must be discarded to avoid leaking memory.\n *\n * @param {() => void} fn\n * @returns {Fork}\n * @since 5.42\n */\nexport function fork(fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('fork');\n\t}\n\n\tif (current_batch !== null) {\n\t\te.fork_timing();\n\t}\n\n\tvar batch = Batch.ensure();\n\tbatch.is_fork = true;\n\tbatch_values = new Map();\n\n\tvar committed = false;\n\tvar settled = batch.settled();\n\n\tflushSync(fn);\n\n\t// revert state changes\n\tfor (var [source, value] of batch.previous) {\n\t\tsource.v = value;\n\t}\n\n\treturn {\n\t\tcommit: async () => {\n\t\t\tif (committed) {\n\t\t\t\tawait settled;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!batches.has(batch)) {\n\t\t\t\te.fork_discarded();\n\t\t\t}\n\n\t\t\tcommitted = true;\n\n\t\t\tbatch.is_fork = false;\n\n\t\t\t// apply changes and update write versions so deriveds see the change\n\t\t\tfor (var [source, [value]] of batch.current) {\n\t\t\t\tsource.v = value;\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\t// trigger any `$state.eager(...)` expressions with the new state.\n\t\t\t// eager effects don't get scheduled like other effects, so we\n\t\t\t// can't just encounter them during traversal, we need to\n\t\t\t// proactively flush them\n\t\t\t// TODO maybe there's a better implementation?\n\t\t\tflushSync(() => {\n\t\t\t\t/** @type {Set<Effect>} */\n\t\t\t\tvar eager_effects = new Set();\n\n\t\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\t\tmark_eager_effects(source, eager_effects);\n\t\t\t\t}\n\n\t\t\t\tset_eager_effects(eager_effects);\n\t\t\t\tflush_eager_effects();\n\t\t\t});\n\n\t\t\tbatch.flush();\n\t\t\tawait settled;\n\t\t},\n\t\tdiscard: () => {\n\t\t\t// cause any MAYBE_DIRTY deriveds to update\n\t\t\t// if they depend on things thath changed\n\t\t\t// inside the discarded fork\n\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\tif (!committed && batches.has(batch)) {\n\t\t\t\tbatch.discard();\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * Forcibly remove all current batches, to prevent cross-talk between tests\n */\nexport function clear() {\n\tbatches.clear();\n}\n","import { get, tick, untrack } from '../internal/client/runtime.js';\nimport { effect_tracking, render_effect } from '../internal/client/reactivity/effects.js';\nimport { source, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { DEV } from 'esm-env';\nimport { queue_micro_task } from '../internal/client/dom/task.js';\n\n/**\n * Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.\n * It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.\n *\n * If `subscribe` is called inside an effect (including indirectly, for example inside a getter),\n * the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.\n *\n * If `start` returns a cleanup function, it will be called when the effect is destroyed.\n *\n * If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects\n * are active, and the returned teardown function will only be called when all effects are destroyed.\n *\n * It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):\n *\n * ```js\n * import { createSubscriber } from 'svelte/reactivity';\n * import { on } from 'svelte/events';\n *\n * export class MediaQuery {\n * \t#query;\n * \t#subscribe;\n *\n * \tconstructor(query) {\n * \t\tthis.#query = window.matchMedia(`(${query})`);\n *\n * \t\tthis.#subscribe = createSubscriber((update) => {\n * \t\t\t// when the `change` event occurs, re-run any effects that read `this.current`\n * \t\t\tconst off = on(this.#query, 'change', update);\n *\n * \t\t\t// stop listening when all the effects are destroyed\n * \t\t\treturn () => off();\n * \t\t});\n * \t}\n *\n * \tget current() {\n * \t\t// This makes the getter reactive, if read in an effect\n * \t\tthis.#subscribe();\n *\n * \t\t// Return the current state of the query, whether or not we're in an effect\n * \t\treturn this.#query.matches;\n * \t}\n * }\n * ```\n * @param {(update: () => void) => (() => void) | void} start\n * @since 5.7.0\n */\nexport function createSubscriber(start) {\n\tlet subscribers = 0;\n\tlet version = source(0);\n\t/** @type {(() => void) | void} */\n\tlet stop;\n\n\tif (DEV) {\n\t\ttag(version, 'createSubscriber version');\n\t}\n\n\treturn () => {\n\t\tif (effect_tracking()) {\n\t\t\tget(version);\n\n\t\t\trender_effect(() => {\n\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\tstop = untrack(() => start(() => increment(version)));\n\t\t\t\t}\n\n\t\t\t\tsubscribers += 1;\n\n\t\t\t\treturn () => {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\t// Only count down after a microtask, else we would reach 0 before our own render effect reruns,\n\t\t\t\t\t\t// but reach 1 again when the tick callback of the prior teardown runs. That would mean we\n\t\t\t\t\t\t// re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.\n\t\t\t\t\t\tsubscribers -= 1;\n\n\t\t\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\t\t\tstop?.();\n\t\t\t\t\t\t\tstop = undefined;\n\t\t\t\t\t\t\t// Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.\n\t\t\t\t\t\t\t// If we didn't do this then the comparison of write versions would determine that the derived has a later version than\n\t\t\t\t\t\t\t// the subscriber, and it would not be re-run.\n\t\t\t\t\t\t\tincrement(version);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t};\n}\n","/** @import { Effect, Source, TemplateNode, } from '#client' */\nimport {\n\tBOUNDARY_EFFECT,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tEFFECT_TRANSPARENT,\n\tMAYBE_DIRTY\n} from '#client/constants';\nimport { HYDRATION_START_ELSE, HYDRATION_START_FAILED } from '../../../../constants.js';\nimport { component_context, set_component_context } from '../../context.js';\nimport { handle_error, invoke_error_boundary } from '../../error-handling.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect\n} from '../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tnext,\n\tskip_nodes,\n\tset_hydrate_node\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport * as e from '../../errors.js';\nimport * as w from '../../warnings.js';\nimport { DEV } from 'esm-env';\nimport { Batch, current_batch, schedule_effect } from '../../reactivity/batch.js';\nimport { internal_set, source } from '../../reactivity/sources.js';\nimport { tag } from '../../dev/tracing.js';\nimport { createSubscriber } from '../../../../reactivity/create-subscriber.js';\nimport { create_text } from '../operations.js';\nimport { defer_effect } from '../../reactivity/utils.js';\nimport { set_signal_status } from '../../reactivity/status.js';\n\n/**\n * @typedef {{\n * \t onerror?: (error: unknown, reset: () => void) => void;\n *   failed?: (anchor: Node, error: () => unknown, reset: () => () => void) => void;\n *   pending?: (anchor: Node) => void;\n * }} BoundaryProps\n */\n\nvar flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;\n\n/**\n * @param {TemplateNode} node\n * @param {BoundaryProps} props\n * @param {((anchor: Node) => void)} children\n * @param {((error: unknown) => unknown) | undefined} [transform_error]\n * @returns {void}\n */\nexport function boundary(node, props, children, transform_error) {\n\tnew Boundary(node, props, children, transform_error);\n}\n\nexport class Boundary {\n\t/** @type {Boundary | null} */\n\tparent;\n\n\tis_pending = false;\n\n\t/**\n\t * API-level transformError transform function. Transforms errors before they reach the `failed` snippet.\n\t * Inherited from parent boundary, or defaults to identity.\n\t * @type {(error: unknown) => unknown}\n\t */\n\ttransform_error;\n\n\t/** @type {TemplateNode} */\n\t#anchor;\n\n\t/** @type {TemplateNode | null} */\n\t#hydrate_open = hydrating ? hydrate_node : null;\n\n\t/** @type {BoundaryProps} */\n\t#props;\n\n\t/** @type {((anchor: Node) => void)} */\n\t#children;\n\n\t/** @type {Effect} */\n\t#effect;\n\n\t/** @type {Effect | null} */\n\t#main_effect = null;\n\n\t/** @type {Effect | null} */\n\t#pending_effect = null;\n\n\t/** @type {Effect | null} */\n\t#failed_effect = null;\n\n\t/** @type {DocumentFragment | null} */\n\t#offscreen_fragment = null;\n\n\t#local_pending_count = 0;\n\t#pending_count = 0;\n\t#pending_count_update_queued = false;\n\n\t/** @type {Set<Effect>} */\n\t#dirty_effects = new Set();\n\n\t/** @type {Set<Effect>} */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A source containing the number of pending async deriveds/expressions.\n\t * Only created if `$effect.pending()` is used inside the boundary,\n\t * otherwise updating the source results in needless `Batch.ensure()`\n\t * calls followed by no-op flushes\n\t * @type {Source<number> | null}\n\t */\n\t#effect_pending = null;\n\n\t#effect_pending_subscriber = createSubscriber(() => {\n\t\tthis.#effect_pending = source(this.#local_pending_count);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#effect_pending, '$effect.pending()');\n\t\t}\n\n\t\treturn () => {\n\t\t\tthis.#effect_pending = null;\n\t\t};\n\t});\n\n\t/**\n\t * @param {TemplateNode} node\n\t * @param {BoundaryProps} props\n\t * @param {((anchor: Node) => void)} children\n\t * @param {((error: unknown) => unknown) | undefined} [transform_error]\n\t */\n\tconstructor(node, props, children, transform_error) {\n\t\tthis.#anchor = node;\n\t\tthis.#props = props;\n\n\t\tthis.#children = (anchor) => {\n\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\teffect.b = this;\n\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\tchildren(anchor);\n\t\t};\n\n\t\tthis.parent = /** @type {Effect} */ (active_effect).b;\n\n\t\t// Inherit transform_error from parent boundary, or use the provided one, or default to identity\n\t\tthis.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);\n\n\t\tthis.#effect = block(() => {\n\t\t\tif (hydrating) {\n\t\t\t\tconst comment = /** @type {Comment} */ (this.#hydrate_open);\n\t\t\t\thydrate_next();\n\n\t\t\t\tconst server_rendered_pending = comment.data === HYDRATION_START_ELSE;\n\t\t\t\tconst server_rendered_failed = comment.data.startsWith(HYDRATION_START_FAILED);\n\n\t\t\t\tif (server_rendered_failed) {\n\t\t\t\t\t// Server rendered the failed snippet - hydrate it.\n\t\t\t\t\t// The serialized error is embedded in the comment: <!--[?<json>-->\n\t\t\t\t\tconst serialized_error = JSON.parse(comment.data.slice(HYDRATION_START_FAILED.length));\n\t\t\t\t\tthis.#hydrate_failed_content(serialized_error);\n\t\t\t\t} else if (server_rendered_pending) {\n\t\t\t\t\tthis.#hydrate_pending_content();\n\t\t\t\t} else {\n\t\t\t\t\tthis.#hydrate_resolved_content();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.#render();\n\t\t\t}\n\t\t}, flags);\n\n\t\tif (hydrating) {\n\t\t\tthis.#anchor = hydrate_node;\n\t\t}\n\t}\n\n\t#hydrate_resolved_content() {\n\t\ttry {\n\t\t\tthis.#main_effect = branch(() => this.#children(this.#anchor));\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {unknown} error The deserialized error from the server's hydration comment\n\t */\n\t#hydrate_failed_content(error) {\n\t\tconst failed = this.#props.failed;\n\t\tif (!failed) return;\n\n\t\tthis.#failed_effect = branch(() => {\n\t\t\tfailed(\n\t\t\t\tthis.#anchor,\n\t\t\t\t() => error,\n\t\t\t\t() => () => {}\n\t\t\t);\n\t\t});\n\t}\n\n\t#hydrate_pending_content() {\n\t\tconst pending = this.#props.pending;\n\t\tif (!pending) return;\n\n\t\tthis.is_pending = true;\n\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\n\t\tqueue_micro_task(() => {\n\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\tvar anchor = create_text();\n\n\t\t\tfragment.append(anchor);\n\n\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\treturn branch(() => this.#children(anchor));\n\t\t\t});\n\n\t\t\tif (this.#pending_count === 0) {\n\t\t\t\tthis.#anchor.before(fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\n\t\t\t\tpause_effect(/** @type {Effect} */ (this.#pending_effect), () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t});\n\t}\n\n\t#render() {\n\t\ttry {\n\t\t\tthis.is_pending = this.has_pending_snippet();\n\t\t\tthis.#pending_count = 0;\n\t\t\tthis.#local_pending_count = 0;\n\n\t\t\tthis.#main_effect = branch(() => {\n\t\t\t\tthis.#children(this.#anchor);\n\t\t\t});\n\n\t\t\tif (this.#pending_count > 0) {\n\t\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\t\tmove_effect(this.#main_effect, fragment);\n\n\t\t\t\tconst pending = /** @type {(anchor: Node) => void} */ (this.#props.pending);\n\t\t\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\t\t\t} else {\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#resolve(batch) {\n\t\tthis.is_pending = false;\n\n\t\t// any effects that were previously deferred should be transferred\n\t\t// to the batch, which will flush in the next microtask\n\t\tbatch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Defer an effect inside a pending boundary until the boundary resolves\n\t * @param {Effect} effect\n\t */\n\tdefer_effect(effect) {\n\t\tdefer_effect(effect, this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Returns `false` if the effect exists inside a boundary whose pending snippet is shown\n\t * @returns {boolean}\n\t */\n\tis_rendered() {\n\t\treturn !this.is_pending && (!this.parent || this.parent.is_rendered());\n\t}\n\n\thas_pending_snippet() {\n\t\treturn !!this.#props.pending;\n\t}\n\n\t/**\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\t#run(fn) {\n\t\tvar previous_effect = active_effect;\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_ctx = component_context;\n\n\t\tset_active_effect(this.#effect);\n\t\tset_active_reaction(this.#effect);\n\t\tset_component_context(this.#effect.ctx);\n\n\t\ttry {\n\t\t\tBatch.ensure();\n\t\t\treturn fn();\n\t\t} catch (e) {\n\t\t\thandle_error(e);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tset_active_effect(previous_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_component_context(previous_ctx);\n\t\t}\n\t}\n\n\t/**\n\t * Updates the pending count associated with the currently visible pending snippet,\n\t * if any, such that we can replace the snippet with content once work is done\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\t#update_pending_count(d, batch) {\n\t\tif (!this.has_pending_snippet()) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.#update_pending_count(d, batch);\n\t\t\t}\n\n\t\t\t// if there's no parent, we're in a scope with no pending snippet\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#pending_count += d;\n\n\t\tif (this.#pending_count === 0) {\n\t\t\tthis.#resolve(batch);\n\n\t\t\tif (this.#pending_effect) {\n\t\t\t\tpause_effect(this.#pending_effect, () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.#offscreen_fragment) {\n\t\t\t\tthis.#anchor.before(this.#offscreen_fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update the source that powers `$effect.pending()` inside this boundary,\n\t * and controls when the current `pending` snippet (if any) is removed.\n\t * Do not call from inside the class\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\tupdate_pending_count(d, batch) {\n\t\tthis.#update_pending_count(d, batch);\n\n\t\tthis.#local_pending_count += d;\n\n\t\tif (!this.#effect_pending || this.#pending_count_update_queued) return;\n\t\tthis.#pending_count_update_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#pending_count_update_queued = false;\n\t\t\tif (this.#effect_pending) {\n\t\t\t\tinternal_set(this.#effect_pending, this.#local_pending_count);\n\t\t\t}\n\t\t});\n\t}\n\n\tget_effect_pending() {\n\t\tthis.#effect_pending_subscriber();\n\t\treturn get(/** @type {Source<number>} */ (this.#effect_pending));\n\t}\n\n\t/** @param {unknown} error */\n\terror(error) {\n\t\tvar onerror = this.#props.onerror;\n\t\tlet failed = this.#props.failed;\n\n\t\t// If we have nothing to capture the error, or if we hit an error while\n\t\t// rendering the fallback, re-throw for another boundary to handle\n\t\tif (!onerror && !failed) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (this.#main_effect) {\n\t\t\tdestroy_effect(this.#main_effect);\n\t\t\tthis.#main_effect = null;\n\t\t}\n\n\t\tif (this.#pending_effect) {\n\t\t\tdestroy_effect(this.#pending_effect);\n\t\t\tthis.#pending_effect = null;\n\t\t}\n\n\t\tif (this.#failed_effect) {\n\t\t\tdestroy_effect(this.#failed_effect);\n\t\t\tthis.#failed_effect = null;\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (this.#hydrate_open));\n\t\t\tnext();\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tvar did_reset = false;\n\t\tvar calling_on_error = false;\n\n\t\tconst reset = () => {\n\t\t\tif (did_reset) {\n\t\t\t\tw.svelte_boundary_reset_noop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdid_reset = true;\n\n\t\t\tif (calling_on_error) {\n\t\t\t\te.svelte_boundary_reset_onerror();\n\t\t\t}\n\n\t\t\tif (this.#failed_effect !== null) {\n\t\t\t\tpause_effect(this.#failed_effect, () => {\n\t\t\t\t\tthis.#failed_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.#run(() => {\n\t\t\t\tthis.#render();\n\t\t\t});\n\t\t};\n\n\t\t/** @param {unknown} transformed_error */\n\t\tconst handle_error_result = (transformed_error) => {\n\t\t\ttry {\n\t\t\t\tcalling_on_error = true;\n\t\t\t\tonerror?.(transformed_error, reset);\n\t\t\t\tcalling_on_error = false;\n\t\t\t} catch (error) {\n\t\t\t\tinvoke_error_boundary(error, this.#effect && this.#effect.parent);\n\t\t\t}\n\n\t\t\tif (failed) {\n\t\t\t\tthis.#failed_effect = this.#run(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn branch(() => {\n\t\t\t\t\t\t\t// errors in `failed` snippets cause the boundary to error again\n\t\t\t\t\t\t\t// TODO Svelte 6: revisit this decision, most likely better to go to parent boundary instead\n\t\t\t\t\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\t\t\t\t\teffect.b = this;\n\t\t\t\t\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\t\t\t\t\tfailed(\n\t\t\t\t\t\t\t\tthis.#anchor,\n\t\t\t\t\t\t\t\t() => transformed_error,\n\t\t\t\t\t\t\t\t() => reset\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tinvoke_error_boundary(error, /** @type {Effect} */ (this.#effect.parent));\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tqueue_micro_task(() => {\n\t\t\t// Run the error through the API-level transformError transform (e.g. SvelteKit's handleError)\n\t\t\t/** @type {unknown} */\n\t\t\tvar result;\n\t\t\ttry {\n\t\t\t\tresult = this.transform_error(error);\n\t\t\t} catch (e) {\n\t\t\t\tinvoke_error_boundary(e, this.#effect && this.#effect.parent);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tresult !== null &&\n\t\t\t\ttypeof result === 'object' &&\n\t\t\t\ttypeof (/** @type {any} */ (result).then) === 'function'\n\t\t\t) {\n\t\t\t\t// transformError returned a Promise — wait for it\n\t\t\t\t/** @type {any} */ (result).then(\n\t\t\t\t\thandle_error_result,\n\t\t\t\t\t/** @param {unknown} e */\n\t\t\t\t\t(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Synchronous result — handle immediately\n\t\t\t\thandle_error_result(result);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport function pending() {\n\tif (active_effect === null) {\n\t\te.effect_pending_outside_reaction();\n\t}\n\n\tvar boundary = active_effect.b;\n\n\tif (boundary === null) {\n\t\treturn 0; // TODO eventually we will need this to be global\n\t}\n\n\treturn boundary.get_effect_pending();\n}\n","/** @import { Blocker, Effect, Value } from '#client' */\nimport { DESTROYED, STALE_REACTION } from '#client/constants';\nimport { DEV } from 'esm-env';\nimport {\n\tcomponent_context,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_stack\n} from '../context.js';\nimport { Boundary } from '../dom/blocks/boundary.js';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../runtime.js';\nimport { Batch, current_batch } from './batch.js';\nimport {\n\tasync_derived,\n\treactivity_loss_tracker,\n\tderived,\n\tderived_safe_equal,\n\tset_reactivity_loss_tracker\n} from './deriveds.js';\nimport { aborted } from './effects.js';\n\n/**\n * @param {Blocker[]} blockers\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {(values: Value[]) => any} fn\n */\nexport function flatten(blockers, sync, async, fn) {\n\tconst d = is_runes() ? derived : derived_safe_equal;\n\n\t// Filter out already-settled blockers - no need to wait for them\n\tvar pending = blockers.filter((b) => !b.settled);\n\n\tif (async.length === 0 && pending.length === 0) {\n\t\tfn(sync.map(d));\n\t\treturn;\n\t}\n\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\tvar restore = capture();\n\tvar blocker_promise =\n\t\tpending.length === 1\n\t\t\t? pending[0].promise\n\t\t\t: pending.length > 1\n\t\t\t\t? Promise.all(pending.map((b) => b.promise))\n\t\t\t\t: null;\n\n\t/** @param {Value[]} values */\n\tfunction finish(values) {\n\t\trestore();\n\n\t\ttry {\n\t\t\tfn(values);\n\t\t} catch (error) {\n\t\t\tif ((parent.f & DESTROYED) === 0) {\n\t\t\t\tinvoke_error_boundary(error, parent);\n\t\t\t}\n\t\t}\n\n\t\tunset_context();\n\t}\n\n\t// Fast path: blockers but no async expressions\n\tif (async.length === 0) {\n\t\t/** @type {Promise<any>} */ (blocker_promise).then(() => finish(sync.map(d)));\n\t\treturn;\n\t}\n\n\tvar decrement_pending = increment_pending();\n\n\t// Full path: has async expressions\n\tfunction run() {\n\t\tPromise.all(async.map((expression) => async_derived(expression)))\n\t\t\t.then((result) => finish([...sync.map(d), ...result]))\n\t\t\t.catch((error) => invoke_error_boundary(error, parent))\n\t\t\t.finally(() => decrement_pending());\n\t}\n\n\tif (blocker_promise) {\n\t\tblocker_promise.then(() => {\n\t\t\trestore();\n\t\t\trun();\n\t\t\tunset_context();\n\t\t});\n\t} else {\n\t\trun();\n\t}\n}\n\n/**\n * @param {Blocker[]} blockers\n * @param {(values: Value[]) => any} fn\n */\nexport function run_after_blockers(blockers, fn) {\n\tflatten(blockers, [], [], fn);\n}\n\n/**\n * Captures the current effect context so that we can restore it after\n * some asynchronous work has happened (so that e.g. `await a + b`\n * causes `b` to be registered as a dependency).\n */\nexport function capture() {\n\tvar previous_effect = /** @type {Effect} */ (active_effect);\n\tvar previous_reaction = active_reaction;\n\tvar previous_component_context = component_context;\n\tvar previous_batch = /** @type {Batch} */ (current_batch);\n\n\tif (DEV) {\n\t\tvar previous_dev_stack = dev_stack;\n\t}\n\n\treturn function restore(activate_batch = true) {\n\t\tset_active_effect(previous_effect);\n\t\tset_active_reaction(previous_reaction);\n\t\tset_component_context(previous_component_context);\n\n\t\tif (activate_batch && (previous_effect.f & DESTROYED) === 0) {\n\t\t\t// TODO we only need optional chaining here because `{#await ...}` blocks\n\t\t\t// are anomalous. Once we retire them we can get rid of it\n\t\t\tprevious_batch?.activate();\n\t\t\tprevious_batch?.apply();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\tset_reactivity_loss_tracker(null);\n\t\t\tset_dev_stack(previous_dev_stack);\n\t\t}\n\t};\n}\n\n/**\n * Wraps an `await` expression in such a way that the effect context that was\n * active before the expression evaluated can be reapplied afterwards —\n * `await a + b` becomes `(await $.save(a))() + b`\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function save(promise) {\n\tvar restore = capture();\n\tvar value = await promise;\n\n\treturn () => {\n\t\trestore();\n\t\treturn value;\n\t};\n}\n\n/**\n * Reset `current_async_effect` after the `promise` resolves, so\n * that we can emit `await_reactivity_loss` warnings\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function track_reactivity_loss(promise) {\n\tvar previous_async_effect = reactivity_loss_tracker;\n\tvar value = await promise;\n\n\treturn () => {\n\t\tset_reactivity_loss_tracker(previous_async_effect);\n\t\treturn value;\n\t};\n}\n\n/**\n * Used in `for await` loops in DEV, so\n * that we can emit `await_reactivity_loss` warnings\n * after each `async_iterator` result resolves and\n * after the `async_iterator` return resolves (if it runs)\n * @template T\n * @template TReturn\n * @param {Iterable<T> | AsyncIterable<T>} iterable\n * @returns {AsyncGenerator<T, TReturn | undefined>}\n */\nexport async function* for_await_track_reactivity_loss(iterable) {\n\t// This is based on the algorithms described in ECMA-262:\n\t// ForIn/OfBodyEvaluation\n\t// https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset\n\t// AsyncIteratorClose\n\t// https://tc39.es/ecma262/multipage/abstract-operations.html#sec-asynciteratorclose\n\n\t/** @type {AsyncIterator<T, TReturn>} */\n\t// @ts-ignore\n\tconst iterator = iterable[Symbol.asyncIterator]?.() ?? iterable[Symbol.iterator]?.();\n\n\tif (iterator === undefined) {\n\t\tthrow new TypeError('value is not async iterable');\n\t}\n\n\t/** Whether the completion of the iterator was \"normal\", meaning it wasn't ended via `break` or a similar method */\n\tlet normal_completion = false;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = (await track_reactivity_loss(iterator.next()))();\n\t\t\tif (done) {\n\t\t\t\tnormal_completion = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tyield value;\n\t\t}\n\t} finally {\n\t\t// If the iterator had an abrupt completion and `return` is defined on the iterator, call it and return the value\n\t\tif (!normal_completion && iterator.return !== undefined) {\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn /** @type {TReturn} */ ((await track_reactivity_loss(iterator.return()))().value);\n\t\t}\n\t}\n}\n\nexport function unset_context(deactivate_batch = true) {\n\tset_active_effect(null);\n\tset_active_reaction(null);\n\tset_component_context(null);\n\tif (deactivate_batch) current_batch?.deactivate();\n\n\tif (DEV) {\n\t\tset_reactivity_loss_tracker(null);\n\t\tset_dev_stack(null);\n\t}\n}\n\n/**\n * @param {Array<() => void | Promise<void>>} thunks\n */\nexport function run(thunks) {\n\tconst restore = capture();\n\n\tconst decrement_pending = increment_pending();\n\n\tvar active = /** @type {Effect} */ (active_effect);\n\n\t/** @type {null | { error: any }} */\n\tvar errored = null;\n\n\t/** @param {any} error */\n\tconst handle_error = (error) => {\n\t\terrored = { error }; // wrap in object in case a promise rejects with a falsy value\n\n\t\tif (!aborted(active)) {\n\t\t\tinvoke_error_boundary(error, active);\n\t\t}\n\t};\n\n\tvar promise = Promise.resolve(thunks[0]()).catch(handle_error);\n\n\t/** @type {Blocker} */\n\tvar blocker = { promise, settled: false };\n\tvar blockers = [blocker];\n\n\tpromise.finally(() => {\n\t\tblocker.settled = true;\n\t\tunset_context();\n\t});\n\n\tfor (const fn of thunks.slice(1)) {\n\t\tpromise = promise\n\t\t\t.then(() => {\n\t\t\t\tif (errored) {\n\t\t\t\t\tthrow errored.error;\n\t\t\t\t}\n\n\t\t\t\tif (aborted(active)) {\n\t\t\t\t\tthrow STALE_REACTION;\n\t\t\t\t}\n\n\t\t\t\trestore();\n\t\t\t\treturn fn();\n\t\t\t})\n\t\t\t.catch(handle_error);\n\n\t\tconst blocker = { promise, settled: false };\n\t\tblockers.push(blocker);\n\n\t\tpromise.finally(() => {\n\t\t\tblocker.settled = true;\n\t\t\tunset_context();\n\t\t});\n\t}\n\n\tpromise\n\t\t// wait one more tick, so that template effects are\n\t\t// guaranteed to run before `$effect(...)`\n\t\t.then(() => Promise.resolve())\n\t\t.finally(() => decrement_pending());\n\n\treturn blockers;\n}\n\n/**\n * @param {Blocker[]} blockers\n */\nexport function wait(blockers) {\n\treturn Promise.all(blockers.map((b) => b.promise));\n}\n\n/**\n * @returns {(skip?: boolean) => void}\n */\nexport function increment_pending() {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tvar boundary = /** @type {Boundary} */ (effect.b);\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar blocking = boundary.is_rendered();\n\n\tboundary.update_pending_count(1, batch);\n\tbatch.increment(blocking, effect);\n\n\treturn (skip = false) => {\n\t\tboundary.update_pending_count(-1, batch);\n\t\tbatch.decrement(blocking, effect, skip);\n\t};\n}\n","/** @import { Derived, Effect, Source } from '#client' */\n/** @import { Batch } from './batch.js'; */\n/** @import { Boundary } from '../dom/blocks/boundary.js'; */\nimport { DEV } from 'esm-env';\nimport {\n\tERROR_VALUE,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tASYNC,\n\tWAS_MARKED,\n\tDESTROYED,\n\tCLEAN,\n\tREACTION_RAN\n} from '#client/constants';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tupdate_reaction,\n\tincrement_write_version,\n\tset_active_effect,\n\tpush_reaction_value,\n\tis_destroying_effect,\n\tupdate_effect,\n\tremove_reactions\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport * as w from '../warnings.js';\nimport {\n\tasync_effect,\n\tdestroy_effect,\n\tdestroy_effect_children,\n\teffect_tracking,\n\tteardown\n} from './effects.js';\nimport { eager_effects, internal_set, set_eager_effects, source } from './sources.js';\nimport { get_error } from '../../shared/dev.js';\nimport { async_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { component_context } from '../context.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { batch_values, current_batch } from './batch.js';\nimport { increment_pending, unset_context } from './async.js';\nimport { deferred, includes, noop } from '../../shared/utils.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/**\n * This allows us to track 'reactivity loss' that occurs when signals\n * are read after a non-context-restoring `await`. Dev-only\n * @type {{ effect: Effect, warned: boolean } | null}\n */\nexport let reactivity_loss_tracker = null;\n\n/** @param {{ effect: Effect, warned: boolean } | null} v */\nexport function set_reactivity_loss_tracker(v) {\n\treactivity_loss_tracker = v;\n}\n\nexport const recent_async_deriveds = new Set();\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\tvar parent_derived =\n\t\tactive_reaction !== null && (active_reaction.f & DERIVED) !== 0\n\t\t\t? /** @type {Derived} */ (active_reaction)\n\t\t\t: null;\n\n\tif (active_effect !== null) {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_PRESERVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\teffects: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\trv: 0,\n\t\tv: /** @type {V} */ (UNINITIALIZED),\n\t\twv: 0,\n\t\tparent: parent_derived ?? active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_error('created at');\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {() => V | Promise<V>} fn\n * @param {string} [label]\n * @param {string} [location] If provided, print a warning if the value is not read immediately after update\n * @returns {Promise<Source<V>>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function async_derived(fn, label, location) {\n\tlet parent = /** @type {Effect | null} */ (active_effect);\n\n\tif (parent === null) {\n\t\te.async_derived_orphan();\n\t}\n\n\tvar promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));\n\tvar signal = source(/** @type {V} */ (UNINITIALIZED));\n\n\tif (DEV) signal.label = label;\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\t/** @type {Map<Batch, ReturnType<typeof deferred<V>>>} */\n\tvar deferreds = new Map();\n\n\tasync_effect(() => {\n\t\tif (DEV) {\n\t\t\treactivity_loss_tracker = {\n\t\t\t\teffect: /** @type {Effect} */ (active_effect),\n\t\t\t\twarned: false\n\t\t\t};\n\t\t}\n\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t/** @type {ReturnType<typeof deferred<V>>} */\n\t\tvar d = deferred();\n\t\tpromise = d.promise;\n\n\t\ttry {\n\t\t\t// If this code is changed at some point, make sure to still access the then property\n\t\t\t// of fn() to read any signals it might access, so that we track them as dependencies.\n\t\t\t// We call `unset_context` to undo any `save` calls that happen inside `fn()`\n\t\t\tPromise.resolve(fn()).then(d.resolve, d.reject).finally(unset_context);\n\t\t} catch (error) {\n\t\t\td.reject(error);\n\t\t\tunset_context();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\treactivity_loss_tracker = null;\n\t\t}\n\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\tif (should_suspend) {\n\t\t\t// we only increment the batch's pending state for updates, not creation, otherwise\n\t\t\t// we will decrement to zero before the work that depends on this promise (e.g. a\n\t\t\t// template effect) has initialized, causing the batch to resolve prematurely\n\t\t\tif ((effect.f & REACTION_RAN) !== 0) {\n\t\t\t\tvar decrement_pending = increment_pending();\n\t\t\t}\n\n\t\t\tif (/** @type {Boundary} */ (parent.b).is_rendered()) {\n\t\t\t\tdeferreds.get(batch)?.reject(STALE_REACTION);\n\t\t\t\tdeferreds.delete(batch); // delete to ensure correct order in Map iteration below\n\t\t\t} else {\n\t\t\t\t// While the boundary is still showing pending, a new run supersedes all older in-flight runs\n\t\t\t\t// for this async expression. Cancel eagerly so resolution cannot commit stale values.\n\t\t\t\tfor (const d of deferreds.values()) {\n\t\t\t\t\td.reject(STALE_REACTION);\n\t\t\t\t}\n\t\t\t\tdeferreds.clear();\n\t\t\t}\n\n\t\t\tdeferreds.set(batch, d);\n\t\t}\n\n\t\t/**\n\t\t * @param {any} value\n\t\t * @param {unknown} error\n\t\t */\n\t\tconst handler = (value, error = undefined) => {\n\t\t\tif (DEV) {\n\t\t\t\treactivity_loss_tracker = null;\n\t\t\t}\n\n\t\t\tif (decrement_pending) {\n\t\t\t\t// don't trigger an update if we're only here because\n\t\t\t\t// the promise was superseded before it could resolve\n\t\t\t\tvar skip = error === STALE_REACTION;\n\t\t\t\tdecrement_pending(skip);\n\t\t\t}\n\n\t\t\tif (error === STALE_REACTION || (effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbatch.activate();\n\n\t\t\tif (error) {\n\t\t\t\tsignal.f |= ERROR_VALUE;\n\n\t\t\t\t// @ts-expect-error the error is the wrong type, but we don't care\n\t\t\t\tinternal_set(signal, error);\n\t\t\t} else {\n\t\t\t\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\t\t\t\tsignal.f ^= ERROR_VALUE;\n\t\t\t\t}\n\n\t\t\t\tinternal_set(signal, value);\n\n\t\t\t\t// All prior async derived runs are now stale\n\t\t\t\tfor (const [b, d] of deferreds) {\n\t\t\t\t\tdeferreds.delete(b);\n\t\t\t\t\tif (b === batch) break;\n\t\t\t\t\td.reject(STALE_REACTION);\n\t\t\t\t}\n\n\t\t\t\tif (DEV && location !== undefined) {\n\t\t\t\t\trecent_async_deriveds.add(signal);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (recent_async_deriveds.has(signal)) {\n\t\t\t\t\t\t\tw.await_waterfall(/** @type {string} */ (signal.label), location);\n\t\t\t\t\t\t\trecent_async_deriveds.delete(signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch.deactivate();\n\t\t};\n\n\t\td.promise.then(handler, (e) => handler(null, e || 'unknown'));\n\t});\n\n\tteardown(() => {\n\t\tfor (const d of deferreds.values()) {\n\t\t\td.reject(STALE_REACTION);\n\t\t}\n\t});\n\n\tif (DEV) {\n\t\t// add a flag that lets this be printed as a derived\n\t\t// when using `$inspect.trace()`\n\t\tsignal.f |= ASYNC;\n\t}\n\n\treturn new Promise((fulfil) => {\n\t\t/** @param {Promise<V>} p */\n\t\tfunction next(p) {\n\t\t\tfunction go() {\n\t\t\t\tif (p === promise) {\n\t\t\t\t\tfulfil(signal);\n\t\t\t\t} else {\n\t\t\t\t\t// if the effect re-runs before the initial promise\n\t\t\t\t\t// resolves, delay resolution until we have a value\n\t\t\t\t\tnext(promise);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.then(go, go);\n\t\t}\n\n\t\tnext(promise);\n\t});\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function user_derived(fn) {\n\tconst d = derived(fn);\n\n\tif (!async_mode_flag) push_reaction_value(d);\n\n\treturn d;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function destroy_derived_effects(derived) {\n\tvar effects = derived.effects;\n\n\tif (effects !== null) {\n\t\tderived.effects = null;\n\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdestroy_effect(/** @type {Effect} */ (effects[i]));\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @param {Derived} derived\n * @returns {Effect | null}\n */\nfunction get_derived_parent_effect(derived) {\n\tvar parent = derived.parent;\n\twhile (parent !== null) {\n\t\tif ((parent.f & DERIVED) === 0) {\n\t\t\t// The original parent effect might've been destroyed but the derived\n\t\t\t// is used elsewhere now - do not return the destroyed effect in that case\n\t\t\treturn (parent.f & DESTROYED) === 0 ? /** @type {Effect} */ (parent) : null;\n\t\t}\n\t\tparent = parent.parent;\n\t}\n\treturn null;\n}\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\n\tset_active_effect(get_derived_parent_effect(derived));\n\n\tif (DEV) {\n\t\tlet prev_eager_effects = eager_effects;\n\t\tset_eager_effects(new Set());\n\t\ttry {\n\t\t\tif (includes.call(stack, derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_eager_effects(prev_eager_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar old_value = derived.v;\n\tvar value = execute_derived(derived);\n\n\tif (!derived.equals(value)) {\n\t\tderived.wv = increment_write_version();\n\n\t\t// in a fork, we don't update the underlying value, just `batch_values`.\n\t\t// the underlying value will be updated when the fork is committed.\n\t\t// otherwise, the next time we get here after a 'real world' state\n\t\t// change, `derived.equals` may incorrectly return `true`\n\t\tif (!current_batch?.is_fork || derived.deps === null) {\n\t\t\tderived.v = value;\n\t\t\tcurrent_batch?.capture(derived, old_value, true);\n\n\t\t\t// deriveds without dependencies should never be recomputed\n\t\t\tif (derived.deps === null) {\n\t\t\t\tset_signal_status(derived, CLEAN);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// don't mark derived clean if we're reading it inside a\n\t// cleanup function, or it will cache a stale value\n\tif (is_destroying_effect) {\n\t\treturn;\n\t}\n\n\t// During time traveling we don't want to reset the status so that\n\t// traversal of the graph in the other batches still happens\n\tif (batch_values !== null) {\n\t\t// only cache the value if we're in a tracking context, otherwise we won't\n\t\t// clear the cache in `mark_reactions` when dependencies are updated\n\t\tif (effect_tracking() || current_batch?.is_fork) {\n\t\t\tbatch_values.set(derived, value);\n\t\t}\n\t} else {\n\t\tupdate_derived_status(derived);\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function freeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect has a teardown function or abort signal, call it\n\t\tif (e.teardown || e.ac) {\n\t\t\te.teardown?.();\n\t\t\te.ac?.abort(STALE_REACTION);\n\n\t\t\t// make it a noop so it doesn't get called again if the derived\n\t\t\t// is unfrozen. we don't set it to `null`, because the existence\n\t\t\t// of a teardown function is what determines whether the\n\t\t\t// effect runs again during unfreezing\n\t\t\te.teardown = noop;\n\t\t\te.ac = null;\n\n\t\t\tremove_reactions(e, 0);\n\t\t\tdestroy_effect_children(e);\n\t\t}\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function unfreeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect was previously frozen — indicated by the presence\n\t\t// of a teardown function — unfreeze it\n\t\tif (e.teardown) {\n\t\t\tupdate_effect(e);\n\t\t}\n\t}\n}\n","/** @import { Derived, Effect, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tset_untracked_writes,\n\tuntrack,\n\tincrement_write_version,\n\tupdate_effect,\n\tcurrent_sources,\n\tis_dirty,\n\tuntracking,\n\tis_destroying_effect,\n\tpush_reaction_value\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tEAGER_EFFECT,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tASYNC,\n\tWAS_MARKED,\n\tCONNECTED\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { includes } from '../../shared/utils.js';\nimport { tag_proxy } from '../dev/tracing.js';\nimport { get_error } from '../../shared/dev.js';\nimport { component_context, is_runes } from '../context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\teager_block_effects,\n\tschedule_effect,\n\tlegacy_updates\n} from './batch.js';\nimport { proxy } from '../proxy.js';\nimport { execute_derived } from './deriveds.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/** @type {Set<any>} */\nexport let eager_effects = new Set();\n\n/** @type {Map<Source, any>} */\nexport const old_values = new Map();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_eager_effects(v) {\n\teager_effects = v;\n}\n\nlet eager_effects_deferred = false;\n\nexport function set_eager_effects_deferred() {\n\teager_effects_deferred = true;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n * @returns {Source<V>}\n */\n// TODO rename this to `state` throughout the codebase\nexport function source(v, stack) {\n\t/** @type {Value} */\n\tvar signal = {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\trv: 0,\n\t\twv: 0\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = stack ?? get_error('created at');\n\t\tsignal.updated = null;\n\t\tsignal.set_during_effect = false;\n\t\tsignal.trace = null;\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function state(v, stack) {\n\tconst s = source(v, stack);\n\n\tpush_reaction_value(s);\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false, trackable = true) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {boolean} [should_proxy]\n * @returns {V}\n */\nexport function set(source, value, should_proxy = false) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\t// since we are untracking the function inside `$inspect.with` we need to add this check\n\t\t// to ensure we error if state is set inside an inspect effect\n\t\t(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 &&\n\t\t(current_sources === null || !includes.call(current_sources, source))\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\tlet new_value = should_proxy ? proxy(value) : value;\n\n\tif (DEV) {\n\t\ttag_proxy(new_value, /** @type {string} */ (source.label));\n\t}\n\n\treturn internal_set(source, new_value, legacy_updates);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {Effect[] | null} [updated_during_traversal]\n * @returns {V}\n */\nexport function internal_set(source, value, updated_during_traversal = null) {\n\tif (!source.equals(value)) {\n\t\tvar old_value = source.v;\n\n\t\tif (is_destroying_effect) {\n\t\t\told_values.set(source, value);\n\t\t} else {\n\t\t\told_values.set(source, old_value);\n\t\t}\n\n\t\tsource.v = value;\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, old_value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\tsource.updated ??= new Map();\n\n\t\t\t\t// For performance reasons, when not using $inspect.trace, we only start collecting stack traces\n\t\t\t\t// after the same source has been updated more than 5 times in the same flush cycle.\n\t\t\t\tconst count = (source.updated.get('')?.count ?? 0) + 1;\n\t\t\t\tsource.updated.set('', { error: /** @type {any} */ (null), count });\n\n\t\t\t\tif (tracing_mode_flag || count > 5) {\n\t\t\t\t\tconst error = get_error('updated at');\n\n\t\t\t\t\tif (error !== null) {\n\t\t\t\t\t\tlet entry = source.updated.get(error.stack);\n\n\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\tentry = { error, count: 0 };\n\t\t\t\t\t\t\tsource.updated.set(error.stack, entry);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tentry.count++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (active_effect !== null) {\n\t\t\t\tsource.set_during_effect = true;\n\t\t\t}\n\t\t}\n\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\tconst derived = /** @type {Derived} */ (source);\n\n\t\t\t// if we are assigning to a dirty derived we set it to clean/maybe dirty but we also eagerly execute it to track the dependencies\n\t\t\tif ((source.f & DIRTY) !== 0) {\n\t\t\t\texecute_derived(derived);\n\t\t\t}\n\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tif (batch_values === null) {\n\t\t\t\tupdate_derived_status(derived);\n\t\t\t}\n\t\t}\n\n\t\tsource.wv = increment_write_version();\n\n\t\t// For debugging, in case you want to know which reactions are being scheduled:\n\t\t// log_reactions(source);\n\t\tmark_reactions(source, DIRTY, updated_during_traversal);\n\n\t\t// It's possible that the current reaction might not have up-to-date dependencies\n\t\t// whilst it's actively running. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0\n\t\t) {\n\t\t\tif (untracked_writes === null) {\n\t\t\t\tset_untracked_writes([source]);\n\t\t\t} else {\n\t\t\t\tuntracked_writes.push(source);\n\t\t\t}\n\t\t}\n\n\t\tif (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {\n\t\t\tflush_eager_effects();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function flush_eager_effects() {\n\teager_effects_deferred = false;\n\n\tfor (const effect of eager_effects) {\n\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\n\t\tif (is_dirty(effect)) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\t}\n\n\teager_effects.clear();\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update(source, d = 1) {\n\tvar value = get(source);\n\tvar result = d === 1 ? value++ : value--;\n\n\tset(source, value);\n\n\t// @ts-expect-error\n\treturn result;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_pre(source, d = 1) {\n\tvar value = get(source);\n\n\t// @ts-expect-error\n\t// eslint-disable-next-line no-useless-assignment -- `++`/`--` used for return value, not side effect on `value`\n\treturn set(source, d === 1 ? ++value : --value);\n}\n\n/**\n * Silently (without using `get`) increment a source\n * @param {Source<number>} source\n */\nexport function increment(source) {\n\tset(source, source.v + 1);\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @param {Effect[] | null} updated_during_traversal\n * @returns {void}\n */\nfunction mark_reactions(signal, status, updated_during_traversal) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\t// Inspect effects need to run immediately, so that the stack trace makes sense\n\t\tif (DEV && (flags & EAGER_EFFECT) !== 0) {\n\t\t\teager_effects.add(reaction);\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar not_dirty = (flags & DIRTY) === 0;\n\n\t\t// don't set a DIRTY reaction to MAYBE_DIRTY\n\t\tif (not_dirty) {\n\t\t\tset_signal_status(reaction, status);\n\t\t}\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tvar derived = /** @type {Derived} */ (reaction);\n\n\t\t\tbatch_values?.delete(derived);\n\n\t\t\tif ((flags & WAS_MARKED) === 0) {\n\t\t\t\t// Only connected deriveds can be reliably unmarked right away\n\t\t\t\tif (flags & CONNECTED) {\n\t\t\t\t\treaction.f |= WAS_MARKED;\n\t\t\t\t}\n\n\t\t\t\tmark_reactions(derived, MAYBE_DIRTY, updated_during_traversal);\n\t\t\t}\n\t\t} else if (not_dirty) {\n\t\t\tvar effect = /** @type {Effect} */ (reaction);\n\n\t\t\tif ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {\n\t\t\t\teager_block_effects.add(effect);\n\t\t\t}\n\n\t\t\tif (updated_during_traversal !== null) {\n\t\t\t\tupdated_during_traversal.push(effect);\n\t\t\t} else {\n\t\t\t\tschedule_effect(effect);\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tget,\n\tactive_effect,\n\tupdate_version,\n\tactive_reaction,\n\tset_update_version,\n\tset_active_reaction\n} from './runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype\n} from '../shared/utils.js';\nimport {\n\tstate as source,\n\tset,\n\tincrement,\n\tflush_eager_effects,\n\tset_eager_effects_deferred\n} from './reactivity/sources.js';\nimport { PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { UNINITIALIZED } from '../../constants.js';\nimport * as e from './errors.js';\nimport { tag } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport { tracing_mode_flag } from '../flags/index.js';\n\n// TODO move all regexes into shared module?\nconst regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * @template T\n * @param {T} value\n * @returns {T}\n */\nexport function proxy(value) {\n\t// if non-proxyable, or is already a proxy, return `value`\n\tif (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {\n\t\treturn value;\n\t}\n\n\tconst prototype = get_prototype_of(value);\n\n\tif (prototype !== object_prototype && prototype !== array_prototype) {\n\t\treturn value;\n\t}\n\n\t/** @type {Map<any, Source<any>>} */\n\tvar sources = new Map();\n\tvar is_proxied_array = is_array(value);\n\tvar version = source(0);\n\n\tvar stack = DEV && tracing_mode_flag ? get_error('created at') : null;\n\tvar parent_version = update_version;\n\n\t/**\n\t * Executes the proxy in the context of the reaction it was originally created in, if any\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\tvar with_parent = (fn) => {\n\t\tif (update_version === parent_version) {\n\t\t\treturn fn();\n\t\t}\n\n\t\t// child source is being created after the initial proxy —\n\t\t// prevent it from being associated with the current reaction\n\t\tvar reaction = active_reaction;\n\t\tvar version = update_version;\n\n\t\tset_active_reaction(null);\n\t\tset_update_version(parent_version);\n\n\t\tvar result = fn();\n\n\t\tset_active_reaction(reaction);\n\t\tset_update_version(version);\n\n\t\treturn result;\n\t};\n\n\tif (is_proxied_array) {\n\t\t// We need to create the length source eagerly to ensure that\n\t\t// mutations to the array are properly synced with our proxy\n\t\tsources.set('length', source(/** @type {any[]} */ (value).length, stack));\n\t\tif (DEV) {\n\t\t\tvalue = /** @type {any} */ (inspectable_array(/** @type {any[]} */ (value)));\n\t\t}\n\t}\n\n\t/** Used in dev for $inspect.trace() */\n\tvar path = '';\n\tlet updating = false;\n\t/** @param {string} new_path */\n\tfunction update_path(new_path) {\n\t\tif (updating) return;\n\t\tupdating = true;\n\t\tpath = new_path;\n\n\t\ttag(version, `${path} version`);\n\n\t\t// rename all child sources and child proxies\n\t\tfor (const [prop, source] of sources) {\n\t\t\ttag(source, get_label(path, prop));\n\t\t}\n\t\tupdating = false;\n\t}\n\n\treturn new Proxy(/** @type {any} */ (value), {\n\t\tdefineProperty(_, prop, descriptor) {\n\t\t\tif (\n\t\t\t\t!('value' in descriptor) ||\n\t\t\t\tdescriptor.configurable === false ||\n\t\t\t\tdescriptor.enumerable === false ||\n\t\t\t\tdescriptor.writable === false\n\t\t\t) {\n\t\t\t\t// we disallow non-basic descriptors, because unless they are applied to the\n\t\t\t\t// target object — which we avoid, so that state can be forked — we will run\n\t\t\t\t// afoul of the various invariants\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n\t\t\t\te.state_descriptors_fixed();\n\t\t\t}\n\t\t\tvar s = sources.get(prop);\n\t\t\tif (s === undefined) {\n\t\t\t\twith_parent(() => {\n\t\t\t\t\tvar s = source(descriptor.value, stack);\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tif (DEV && typeof prop === 'string') {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tset(s, descriptor.value, true);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tconst s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tincrement(version);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tset(s, UNINITIALIZED);\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (DEV && prop === PROXY_PATH_SYMBOL) {\n\t\t\t\treturn update_path;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\t// create a source, but only if it's an own property and not a prototype property\n\t\t\tif (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar p = proxy(exists ? target[prop] : UNINITIALIZED);\n\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\n\t\t\t\tsources.set(prop, s);\n\t\t\t}\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar v = get(s);\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, prop) {\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\tif (descriptor && 'value' in descriptor) {\n\t\t\t\tvar s = sources.get(prop);\n\t\t\t\tif (s) descriptor.value = get(s);\n\t\t\t} else if (descriptor === undefined) {\n\t\t\t\tvar source = sources.get(prop);\n\t\t\t\tvar value = source?.v;\n\n\t\t\t\tif (source !== undefined && value !== UNINITIALIZED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn descriptor;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = (s !== undefined && s.v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (\n\t\t\t\ts !== undefined ||\n\t\t\t\t(active_effect !== null && (!has || get_descriptor(target, prop)?.writable))\n\t\t\t) {\n\t\t\t\tif (s === undefined) {\n\t\t\t\t\ts = with_parent(() => {\n\t\t\t\t\t\tvar p = has ? proxy(target[prop]) : UNINITIALIZED;\n\t\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t});\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(s);\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn has;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = prop in target;\n\n\t\t\t// variable.length = value -> clear all signals with index >= value\n\t\t\tif (is_proxied_array && prop === 'length') {\n\t\t\t\tfor (var i = value; i < /** @type {Source<number>} */ (s).v; i += 1) {\n\t\t\t\t\tvar other_s = sources.get(i + '');\n\t\t\t\t\tif (other_s !== undefined) {\n\t\t\t\t\t\tset(other_s, UNINITIALIZED);\n\t\t\t\t\t} else if (i in target) {\n\t\t\t\t\t\t// If the item exists in the original, we need to create an uninitialized source,\n\t\t\t\t\t\t// else a later read of the property would result in a source being created with\n\t\t\t\t\t\t// the value of the original item at that index.\n\t\t\t\t\t\tother_s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\t\tsources.set(i + '', other_s);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(other_s, get_label(path, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we haven't yet created a source for this property, we need to ensure\n\t\t\t// we do so otherwise if we read it later, then the write won't be tracked and\n\t\t\t// the heuristics of effects will be different vs if we had read the proxied\n\t\t\t// object property before writing to that property.\n\t\t\tif (s === undefined) {\n\t\t\t\tif (!has || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\ts = with_parent(() => source(undefined, stack));\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\tset(s, proxy(value));\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thas = s.v !== UNINITIALIZED;\n\n\t\t\t\tvar p = with_parent(() => proxy(value));\n\t\t\t\tset(s, p);\n\t\t\t}\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\t// Set the new value before updating any signals so that any listeners get the new value\n\t\t\tif (descriptor?.set) {\n\t\t\t\tdescriptor.set.call(receiver, value);\n\t\t\t}\n\n\t\t\tif (!has) {\n\t\t\t\t// If we have mutated an array directly, we might need to\n\t\t\t\t// signal that length has also changed. Do it before updating metadata\n\t\t\t\t// to ensure that iterating over the array as a result of a metadata update\n\t\t\t\t// will not cause the length to be out of sync.\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n >= ls.v) {\n\t\t\t\t\t\tset(ls, n + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tget(version);\n\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar source = sources.get(key);\n\t\t\t\treturn source === undefined || source.v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, source] of sources) {\n\t\t\t\tif (source.v !== UNINITIALIZED && !(key in target)) {\n\t\t\t\t\town_keys.push(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn own_keys;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\te.state_prototype_fixed();\n\t\t}\n\t});\n}\n\n/**\n * @param {string} path\n * @param {string | symbol} prop\n */\nfunction get_label(path, prop) {\n\tif (typeof prop === 'symbol') return `${path}[Symbol(${prop.description ?? ''})]`;\n\tif (regex_is_valid_identifier.test(prop)) return `${path}.${prop}`;\n\treturn /^\\d+$/.test(prop) ? `${path}[${prop}]` : `${path}['${prop}']`;\n}\n\n/**\n * @param {any} value\n */\nexport function get_proxied_value(value) {\n\ttry {\n\t\tif (value !== null && typeof value === 'object' && STATE_SYMBOL in value) {\n\t\t\treturn value[STATE_SYMBOL];\n\t\t}\n\t} catch {\n\t\t// the above if check can throw an error if the value in question\n\t\t// is the contentWindow of an iframe on another domain, in which\n\t\t// case we want to just return the value (because it's definitely\n\t\t// not a proxied value) so we don't break any JavaScript interacting\n\t\t// with that iframe (such as various payment companies client side\n\t\t// JavaScript libraries interacting with their iframes on the same\n\t\t// domain)\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nexport function is(a, b) {\n\treturn Object.is(get_proxied_value(a), get_proxied_value(b));\n}\n\nconst ARRAY_MUTATING_METHODS = new Set([\n\t'copyWithin',\n\t'fill',\n\t'pop',\n\t'push',\n\t'reverse',\n\t'shift',\n\t'sort',\n\t'splice',\n\t'unshift'\n]);\n\n/**\n * Wrap array mutating methods so $inspect is triggered only once and\n * to prevent logging an array in intermediate state (e.g. with an empty slot)\n * @param {any[]} array\n */\nfunction inspectable_array(array) {\n\treturn new Proxy(array, {\n\t\tget(target, prop, receiver) {\n\t\t\tvar value = Reflect.get(target, prop, receiver);\n\t\t\tif (!ARRAY_MUTATING_METHODS.has(/** @type {string} */ (prop))) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @this {any[]}\n\t\t\t * @param {any[]} args\n\t\t\t */\n\t\t\treturn function (...args) {\n\t\t\t\tset_eager_effects_deferred();\n\t\t\t\tvar result = value.apply(this, args);\n\t\t\t\tflush_eager_effects();\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t});\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor, is_extensible } from '../../shared/utils.js';\nimport { active_effect } from '../runtime.js';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { TEXT_NODE, REACTION_RAN } from '#client/constants';\nimport { eager_block_effects } from '../reactivity/batch.js';\nimport { NAMESPACE_HTML } from '../../../constants.js';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {boolean} */\nexport var is_firefox;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\tis_firefox = /Firefox/.test(navigator.userAgent);\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\tvar text_prototype = Text.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\tif (is_extensible(element_prototype)) {\n\t\t// the following assignments improve perf of lookups on DOM nodes\n\t\t// @ts-expect-error\n\t\telement_prototype.__click = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__className = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__attributes = null;\n\t\t// @ts-expect-error\n\t\telement_prototype.__style = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__e = undefined;\n\t}\n\n\tif (is_extensible(text_prototype)) {\n\t\t// @ts-expect-error\n\t\ttext_prototype.__t = undefined;\n\t}\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn /** @type {TemplateNode | null} */ (first_child_getter.call(node));\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn /** @type {TemplateNode | null} */ (next_sibling_getter.call(node));\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = get_first_child(hydrate_node);\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tif (is_text) {\n\t\tmerge_text_nodes(/** @type {Text} */ (child));\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {boolean} [is_text]\n * @returns {TemplateNode | null}\n */\nexport function first_child(node, is_text = false) {\n\tif (!hydrating) {\n\t\tvar first = get_first_child(node);\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\tif (is_text) {\n\t\t// if an {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (hydrate_node?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\n\t\t\thydrate_node?.before(text);\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (hydrate_node));\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {TemplateNode | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\twhile (count--) {\n\t\tlast_sibling = next_sibling;\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\tif (is_text) {\n\t\t// if a sibling {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (next_sibling?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\t\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t\t// node and insert it after the last sibling\n\t\t\tif (next_sibling === null) {\n\t\t\t\tlast_sibling?.after(text);\n\t\t\t} else {\n\t\t\t\tnext_sibling.before(text);\n\t\t\t}\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (next_sibling));\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn next_sibling;\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n\n/**\n * Returns `true` if we're updating the current block, for example `condition` in\n * an `{#if condition}` block just changed. In this case, the branch should be\n * appended (or removed) at the same time as other updates within the\n * current `<svelte:boundary>`\n */\nexport function should_defer_append() {\n\tif (!async_mode_flag) return false;\n\tif (eager_block_effects !== null) return false;\n\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\treturn (flags & REACTION_RAN) !== 0;\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap | string} T\n * @param {T} tag\n * @param {string} [namespace]\n * @param {string} [is]\n * @returns {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element}\n */\nexport function create_element(tag, namespace, is) {\n\tlet options = is ? { is } : undefined;\n\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\tdocument.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)\n\t);\n}\n\nexport function create_fragment() {\n\treturn document.createDocumentFragment();\n}\n\n/**\n * @param {string} data\n * @returns\n */\nexport function create_comment(data = '') {\n\treturn document.createComment(data);\n}\n\n/**\n * @param {Element} element\n * @param {string} key\n * @param {string} value\n * @returns\n */\nexport function set_attribute(element, key, value = '') {\n\tif (key.startsWith('xlink:')) {\n\t\telement.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n\t\treturn;\n\t}\n\treturn element.setAttribute(key, value);\n}\n\n/**\n * Browsers split text nodes larger than 65536 bytes when parsing.\n * For hydration to succeed, we need to stitch them back together\n * @param {Text} text\n */\nexport function merge_text_nodes(text) {\n\tif (/** @type {string} */ (text.nodeValue).length < 65536) {\n\t\treturn;\n\t}\n\n\tlet next = text.nextSibling;\n\n\twhile (next !== null && next.nodeType === TEXT_NODE) {\n\t\tnext.remove();\n\n\t\t/** @type {string} */ (text.nodeValue) += /** @type {string} */ (next.nodeValue);\n\n\t\tnext = text.nextSibling;\n\t}\n}\n","import { hydrating } from '../hydration.js';\nimport { clear_text_content, get_first_child } from '../operations.js';\nimport { queue_micro_task } from '../task.js';\n\n/**\n * @param {HTMLElement} dom\n * @param {boolean} value\n * @returns {void}\n */\nexport function autofocus(dom, value) {\n\tif (value) {\n\t\tconst body = document.body;\n\t\tdom.autofocus = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (document.activeElement === body) {\n\t\t\t\tdom.focus();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * The child of a textarea actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLTextAreaElement} dom\n * @returns {void}\n */\nexport function remove_textarea_child(dom) {\n\tif (hydrating && get_first_child(dom) !== null) {\n\t\tclear_text_content(dom);\n\t}\n}\n\nlet listening_to_form_reset = false;\n\nexport function add_form_reset_listener() {\n\tif (!listening_to_form_reset) {\n\t\tlistening_to_form_reset = true;\n\t\tdocument.addEventListener(\n\t\t\t'reset',\n\t\t\t(evt) => {\n\t\t\t\t// Needs to happen one tick later or else the dom properties of the form\n\t\t\t\t// elements have not updated to their reset values yet\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!evt.defaultPrevented) {\n\t\t\t\t\t\tfor (const e of /**@type {HTMLFormElement} */ (evt.target).elements) {\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\te.__on_r?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)\n\t\t\t{ capture: true }\n\t\t);\n\t}\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../../runtime.js';\nimport { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\t// @ts-expect-error\n\tconst prev = element.__on_r;\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { Blocker, ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tis_dirty,\n\tactive_effect,\n\tactive_reaction,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tremove_reactions,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tuntrack,\n\tuntracking,\n\tset_active_effect\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tREACTION_RAN,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tCLEAN,\n\tEAGER_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tUSER_EFFECT,\n\tASYNC,\n\tCONNECTED,\n\tMANAGED_EFFECT,\n\tDESTROYING\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { component_context, dev_current_component_function, dev_stack } from '../context.js';\nimport { Batch, collected_effects } from './batch.js';\nimport { flatten, increment_pending } from './async.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null) {\n\t\tif (active_reaction === null) {\n\t\t\te.effect_orphan(rune);\n\t\t}\n\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @returns {Effect}\n */\nfunction create_effect(type, fn) {\n\tvar parent = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent !== null && (parent.f & EAGER_EFFECT) !== 0) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\tif (parent !== null && (parent.f & INERT) !== 0) {\n\t\ttype |= INERT;\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tnodes: null,\n\t\tf: type | DIRTY | CONNECTED,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent,\n\t\tb: parent && parent.b,\n\t\tprev: null,\n\t\tteardown: null,\n\t\twv: 0,\n\t\tac: null\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\t/** @type {Effect | null} */\n\tvar e = effect;\n\n\tif ((type & EFFECT) !== 0) {\n\t\tif (collected_effects !== null) {\n\t\t\t// created during traversal — collect and run afterwards\n\t\t\tcollected_effects.push(effect);\n\t\t} else {\n\t\t\t// schedule for later\n\t\t\tBatch.ensure().schedule(effect);\n\t\t}\n\t} else if (fn !== null) {\n\t\ttry {\n\t\t\tupdate_effect(effect);\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t}\n\n\t\t// if an effect doesn't need to be kept in the tree (because it\n\t\t// won't re-run, has no DOM, and has no teardown etc)\n\t\t// then we skip it and go to its child (if any)\n\t\tif (\n\t\t\te.deps === null &&\n\t\t\te.teardown === null &&\n\t\t\te.nodes === null &&\n\t\t\te.first === e.last && // either `null`, or a singular child\n\t\t\t(e.f & EFFECT_PRESERVED) === 0\n\t\t) {\n\t\t\te = e.first;\n\t\t\tif ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {\n\t\t\t\te.f |= EFFECT_TRANSPARENT;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (e !== null) {\n\t\te.parent = parent;\n\n\t\tif (parent !== null) {\n\t\t\tpush_effect(e, parent);\n\t\t}\n\n\t\t// if we're in a derived, add the effect there too\n\t\tif (\n\t\t\tactive_reaction !== null &&\n\t\t\t(active_reaction.f & DERIVED) !== 0 &&\n\t\t\t(type & ROOT_EFFECT) === 0\n\t\t) {\n\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t(derived.effects ??= []).push(e);\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\treturn active_reaction !== null && !untracking;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\tvar defer = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & REACTION_RAN) === 0;\n\n\tif (defer) {\n\t\t// Top-level `$effect(...)` in an unmounted component — defer until mount\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push(fn);\n\t} else {\n\t\t// Everything else — create immediately\n\t\treturn create_user_effect(fn);\n\t}\n}\n\n/**\n * @param {() => void | (() => void)} fn\n */\nexport function create_user_effect(fn) {\n\treturn create_effect(EFFECT | USER_EFFECT, fn);\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn create_effect(RENDER_EFFECT | USER_EFFECT, fn);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function eager_effect(fn) {\n\treturn create_effect(EAGER_EFFECT, fn);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);\n\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * An effect root whose children can transition out\n * @param {() => void} fn\n * @returns {(options?: { outro?: boolean }) => Promise<void>}\n */\nexport function component_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn);\n\n\treturn (options = {}) => {\n\t\treturn new Promise((fulfil) => {\n\t\t\tif (options.outro) {\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t\tfulfil(undefined);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tfulfil(undefined);\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean, deps: () => any }} */\n\tvar token = { effect: null, ran: false, deps };\n\n\tcontext.l.$.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t// here, we lie: by setting `active_effect` to be the parent branch, any writes\n\t\t// that happen inside `fn` will _not_ cause an unnecessary reschedule, because\n\t\t// the affected effects will be children of `active_effect`. this is safe\n\t\t// because these effects are known to run in the correct order\n\t\ttry {\n\t\t\tset_active_effect(effect.parent);\n\t\t\tuntrack(fn);\n\t\t} finally {\n\t\t\tset_active_effect(effect);\n\t\t}\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.$) {\n\t\t\ttoken.deps();\n\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0 && effect.deps !== null) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (is_dirty(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function async_effect(fn) {\n\treturn create_effect(ASYNC | EFFECT_PRESERVED, fn);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | flags, fn);\n}\n\n/**\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(RENDER_EFFECT, () => fn(...values.map(get)));\n\t});\n}\n\n/**\n * Like `template_effect`, but with an effect which is deferred until the batch commits\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function deferred_template_effect(fn, sync = [], async = [], blockers = []) {\n\tif (async.length > 0 || blockers.length > 0) {\n\t\tvar decrement_pending = increment_pending();\n\t}\n\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(EFFECT, () => fn(...values.map(get)));\n\n\t\tif (decrement_pending) {\n\t\t\tdecrement_pending();\n\t\t}\n\t});\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\tvar effect = create_effect(BLOCK_EFFECT | flags, fn);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function managed(fn, flags = 0) {\n\tvar effect = create_effect(MANAGED_EFFECT | flags, fn);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n */\nexport function branch(fn) {\n\treturn create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tconst controller = effect.ac;\n\n\t\tif (controller !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\tcontroller.abort(STALE_REACTION);\n\t\t\t});\n\t\t}\n\n\t\tvar next = effect.next;\n\n\t\tif ((effect.f & ROOT_EFFECT) !== 0) {\n\t\t\t// this is now an independent root\n\t\t\teffect.parent = null;\n\t\t} else {\n\t\t\tdestroy_effect(effect, remove_dom);\n\t\t}\n\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif (\n\t\t(remove_dom || (effect.f & HEAD_EFFECT) !== 0) &&\n\t\teffect.nodes !== null &&\n\t\teffect.nodes.end !== null\n\t) {\n\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\tremoved = true;\n\t}\n\n\tset_signal_status(effect, DESTROYING);\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\n\tvar transitions = effect.nodes && effect.nodes.t;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\teffect.f ^= DESTROYING;\n\teffect.f |= DESTROYED;\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\t// we don't null out `parent` so that error propagation can work correctly\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.fn =\n\t\teffect.nodes =\n\t\teffect.ac =\n\t\teffect.b =\n\t\t\tnull;\n}\n\n/**\n *\n * @param {TemplateNode | null} node\n * @param {TemplateNode} end\n */\nexport function remove_effect_dom(node, end) {\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n * @param {boolean} [destroy]\n */\nexport function pause_effect(effect, callback, destroy = true) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\tvar fn = () => {\n\t\tif (destroy) destroy_effect(effect);\n\t\tif (callback) callback();\n\t};\n\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nfunction pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent =\n\t\t\t(child.f & EFFECT_TRANSPARENT) !== 0 ||\n\t\t\t// If this is a branch effect without a block effect parent,\n\t\t\t// it means the parent block effect was pruned. In that case,\n\t\t\t// transparency information was transferred to the branch effect.\n\t\t\t((child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0);\n\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tpause_children(child, transitions, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// schedule the effect to update. we don't use `is_dirty`\n\t// here because we don't want to eagerly recompute a derived like\n\t// `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined\n\tif ((effect.f & CLEAN) === 0) {\n\t\tset_signal_status(effect, DIRTY);\n\t\tBatch.ensure().schedule(effect); // Assumption: This happens during the commit phase of the batch, causing another flush, but it's safe\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function aborted(effect = /** @type {Effect} */ (active_effect)) {\n\treturn (effect.f & DESTROYED) !== 0;\n}\n\n/**\n * @param {Effect} effect\n * @param {DocumentFragment} fragment\n */\nexport function move_effect(effect, fragment) {\n\tif (!effect.nodes) return;\n\n\t/** @type {TemplateNode | null} */\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : get_next_sibling(node);\n\n\t\tfragment.append(node);\n\t\tnode = next;\n\t}\n}\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get_descriptors, get_prototype_of, includes, index_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\teffect_tracking,\n\texecute_effect_teardown\n} from './reactivity/effects.js';\nimport {\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tDESTROYED,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tCONNECTED,\n\tREACTION_IS_UPDATING,\n\tSTALE_REACTION,\n\tERROR_VALUE,\n\tWAS_MARKED,\n\tMANAGED_EFFECT,\n\tREACTION_RAN\n} from './constants.js';\nimport { old_values } from './reactivity/sources.js';\nimport {\n\treactivity_loss_tracker,\n\texecute_derived,\n\tfreeze_derived_effects,\n\trecent_async_deriveds,\n\tunfreeze_derived_effects,\n\tupdate_derived\n} from './reactivity/deriveds.js';\nimport { async_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.js';\nimport {\n\tcomponent_context,\n\tdev_current_component_function,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_current_component_function,\n\tset_dev_stack\n} from './context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\tcurrent_batch,\n\tflushSync,\n\tschedule_effect\n} from './reactivity/batch.js';\nimport { handle_error } from './error-handling.js';\nimport { UNINITIALIZED } from '../../constants.js';\nimport { captured_signals } from './legacy.js';\nimport { without_reactive_context } from './dom/elements/bindings/shared.js';\nimport { set_signal_status, update_derived_status } from './reactivity/status.js';\nimport * as w from './warnings.js';\n\nlet is_updating_effect = false;\n\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\nexport let untracking = false;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a reaction, reading and writing\n * them within that reaction should not cause a re-run\n * @type {null | Source[]}\n */\nexport let current_sources = null;\n\n/** @param {Value} value */\nexport function push_reaction_value(value) {\n\tif (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {\n\t\tif (current_sources === null) {\n\t\t\tcurrent_sources = [value];\n\t\t} else {\n\t\t\tcurrent_sources.push(value);\n\t\t}\n\t}\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nlet new_deps = null;\n\nlet skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/**\n * @type {number} Used by sources and deriveds for handling updates.\n * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing\n **/\nexport let write_version = 1;\n\n/** @type {number} Used to version each read of a source of derived to avoid duplicating depedencies inside a reaction */\nlet read_version = 0;\n\nexport let update_version = read_version;\n\n/** @param {number} value */\nexport function set_update_version(value) {\n\tupdate_version = value;\n}\n\nexport function increment_write_version() {\n\treturn ++write_version;\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function is_dirty(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif (flags & DERIVED) {\n\t\treaction.f &= ~WAS_MARKED;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = /** @type {Value[]} */ (reaction.deps);\n\t\tvar length = dependencies.length;\n\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar dependency = dependencies[i];\n\n\t\t\tif (is_dirty(/** @type {Derived} */ (dependency))) {\n\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t}\n\n\t\t\tif (dependency.wv > reaction.wv) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t(flags & CONNECTED) !== 0 &&\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tbatch_values === null\n\t\t) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Value} signal\n * @param {Effect} effect\n * @param {boolean} [root]\n */\nfunction schedule_possible_effect_self_invalidation(signal, effect, root = true) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tif (!async_mode_flag && current_sources !== null && includes.call(current_sources, signal)) {\n\t\treturn;\n\t}\n\n\tfor (var i = 0; i < reactions.length; i++) {\n\t\tvar reaction = reactions[i];\n\n\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\tschedule_possible_effect_self_invalidation(/** @type {Derived} */ (reaction), effect, false);\n\t\t} else if (effect === reaction) {\n\t\t\tif (root) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t} else if ((reaction.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(reaction, MAYBE_DIRTY);\n\t\t\t}\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/** @param {Reaction} reaction */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_sources = current_sources;\n\tvar previous_component_context = component_context;\n\tvar previous_untracking = untracking;\n\tvar previous_update_version = update_version;\n\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\n\tcurrent_sources = null;\n\tset_component_context(reaction.ctx);\n\tuntracking = false;\n\tupdate_version = ++read_version;\n\n\tif (reaction.ac !== null) {\n\t\twithout_reactive_context(() => {\n\t\t\t/** @type {AbortController} */ (reaction.ac).abort(STALE_REACTION);\n\t\t});\n\n\t\treaction.ac = null;\n\t}\n\n\ttry {\n\t\treaction.f |= REACTION_IS_UPDATING;\n\t\tvar fn = /** @type {Function} */ (reaction.fn);\n\t\tvar result = fn();\n\t\treaction.f |= REACTION_RAN;\n\t\tvar deps = reaction.deps;\n\n\t\t// Don't remove reactions during fork;\n\t\t// they must remain for when fork is discarded\n\t\tvar is_fork = current_batch?.is_fork;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tif (!is_fork) {\n\t\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\t}\n\n\t\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treaction.deps = deps = new_deps;\n\t\t\t}\n\n\t\t\tif (effect_tracking() && (reaction.f & CONNECTED) !== 0) {\n\t\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!is_fork && deps !== null && skipped_deps < deps.length) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\tdeps.length = skipped_deps;\n\t\t}\n\n\t\t// If we're inside an effect and we have untracked writes, then we need to\n\t\t// ensure that if any of those untracked writes result in re-invalidation\n\t\t// of the current effect, then that happens accordingly\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tuntracked_writes !== null &&\n\t\t\t!untracking &&\n\t\t\tdeps !== null &&\n\t\t\t(reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0\n\t\t) {\n\t\t\tfor (i = 0; i < /** @type {Source[]} */ (untracked_writes).length; i++) {\n\t\t\t\tschedule_possible_effect_self_invalidation(\n\t\t\t\t\tuntracked_writes[i],\n\t\t\t\t\t/** @type {Effect} */ (reaction)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// If we are returning to an previous reaction then\n\t\t// we need to increment the read version to ensure that\n\t\t// any dependencies in this reaction aren't marked with\n\t\t// the same version\n\t\tif (previous_reaction !== null && previous_reaction !== reaction) {\n\t\t\tread_version++;\n\n\t\t\t// update the `rv` of the previous reaction's deps — both existing and new —\n\t\t\t// so that they are not added again\n\t\t\tif (previous_reaction.deps !== null) {\n\t\t\t\tfor (let i = 0; i < previous_skipped_deps; i += 1) {\n\t\t\t\t\tprevious_reaction.deps[i].rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (previous_deps !== null) {\n\t\t\t\tfor (const dep of previous_deps) {\n\t\t\t\t\tdep.rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (untracked_writes !== null) {\n\t\t\t\tif (previous_untracked_writes === null) {\n\t\t\t\t\tprevious_untracked_writes = untracked_writes;\n\t\t\t\t} else {\n\t\t\t\t\tprevious_untracked_writes.push(.../** @type {Source[]} */ (untracked_writes));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ((reaction.f & ERROR_VALUE) !== 0) {\n\t\t\treaction.f ^= ERROR_VALUE;\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\treturn handle_error(error);\n\t} finally {\n\t\treaction.f ^= REACTION_IS_UPDATING;\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tcurrent_sources = previous_sources;\n\t\tset_component_context(previous_component_context);\n\t\tuntracking = previous_untracking;\n\t\tupdate_version = previous_update_version;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = index_of.call(reactions, signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !includes.call(new_deps, dependency))\n\t) {\n\t\tvar derived = /** @type {Derived} */ (dependency);\n\n\t\t// If we are working with a derived that is owned by an effect, then mark it as being\n\t\t// disconnected and remove the mark flag, as it cannot be reliably removed otherwise\n\t\tif ((derived.f & CONNECTED) !== 0) {\n\t\t\tderived.f ^= CONNECTED;\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t}\n\n\t\tupdate_derived_status(derived);\n\n\t\t// freeze any effects inside this derived\n\t\tfreeze_derived_effects(derived);\n\n\t\t// Disconnect any reactions owned by this reaction\n\t\tremove_reactions(derived, 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\tvar was_updating_effect = is_updating_effect;\n\n\tactive_effect = effect;\n\tis_updating_effect = true;\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tset_dev_current_component_function(effect.component_function);\n\t\tvar previous_stack = /** @type {any} */ (dev_stack);\n\t\t// only block effects have a dev stack, keep the current one otherwise\n\t\tset_dev_stack(effect.dev_stack ?? dev_stack);\n\t}\n\n\ttry {\n\t\tif ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.wv = write_version;\n\n\t\t// In DEV, increment versions of any sources that were written to during the effect,\n\t\t// so that they are correctly marked as dirty when the effect re-runs\n\t\tif (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) {\n\t\t\tfor (var dep of effect.deps) {\n\t\t\t\tif (dep.set_during_effect) {\n\t\t\t\t\tdep.wv = increment_write_version();\n\t\t\t\t\tdep.set_during_effect = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tis_updating_effect = was_updating_effect;\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tset_dev_current_component_function(previous_component_fn);\n\t\t\tset_dev_stack(previous_stack);\n\t\t}\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tif (async_mode_flag) {\n\t\treturn new Promise((f) => {\n\t\t\t// Race them against each other - in almost all cases requestAnimationFrame will fire first,\n\t\t\t// but e.g. in case the window is not focused or a view transition happens, requestAnimationFrame\n\t\t\t// will be delayed and setTimeout helps us resolve fast enough in that case\n\t\t\trequestAnimationFrame(() => f());\n\t\t\tsetTimeout(() => f());\n\t\t});\n\t}\n\n\tawait Promise.resolve();\n\n\t// By calling flushSync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflushSync();\n}\n\n/**\n * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,\n * have resolved and the DOM has been updated\n * @returns {Promise<void>}\n * @since 5.36\n */\nexport function settled() {\n\treturn Batch.ensure().settled();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\tcaptured_signals?.add(signal);\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null && !untracking) {\n\t\t// if we're in a derived that is being read inside an _async_ derived,\n\t\t// it's possible that the effect was already destroyed. In this case,\n\t\t// we don't add the dependency, because that would create a memory leak\n\t\tvar destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;\n\n\t\tif (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {\n\t\t\tvar deps = active_reaction.deps;\n\n\t\t\tif ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {\n\t\t\t\t// we're in the effect init/update cycle\n\t\t\t\tif (signal.rv < read_version) {\n\t\t\t\t\tsignal.rv = read_version;\n\n\t\t\t\t\t// If the signal is accessing the same dependencies in the same\n\t\t\t\t\t// order as it did last time, increment `skipped_deps`\n\t\t\t\t\t// rather than updating `new_deps`, which creates GC cost\n\t\t\t\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\t\t\t\tskipped_deps++;\n\t\t\t\t\t} else if (new_deps === null) {\n\t\t\t\t\t\tnew_deps = [signal];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnew_deps.push(signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// we're adding a dependency outside the init/update cycle\n\t\t\t\t// (i.e. after an `await`)\n\t\t\t\t(active_reaction.deps ??= []).push(signal);\n\n\t\t\t\tvar reactions = signal.reactions;\n\n\t\t\t\tif (reactions === null) {\n\t\t\t\t\tsignal.reactions = [active_reaction];\n\t\t\t\t} else if (!includes.call(reactions, active_reaction)) {\n\t\t\t\t\treactions.push(active_reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (DEV) {\n\t\tif (\n\t\t\t!untracking &&\n\t\t\treactivity_loss_tracker &&\n\t\t\t!reactivity_loss_tracker.warned &&\n\t\t\t(reactivity_loss_tracker.effect.f & REACTION_IS_UPDATING) === 0\n\t\t) {\n\t\t\treactivity_loss_tracker.warned = true;\n\n\t\t\tw.await_reactivity_loss(/** @type {string} */ (signal.label));\n\n\t\t\tvar trace = get_error('traced at');\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tif (trace) console.warn(trace);\n\t\t}\n\n\t\trecent_async_deriveds.delete(signal);\n\n\t\tif (\n\t\t\ttracing_mode_flag &&\n\t\t\t!untracking &&\n\t\t\ttracing_expressions !== null &&\n\t\t\tactive_reaction !== null &&\n\t\t\ttracing_expressions.reaction === active_reaction\n\t\t) {\n\t\t\t// Used when mapping state between special blocks like `each`\n\t\t\tif (signal.trace) {\n\t\t\t\tsignal.trace();\n\t\t\t} else {\n\t\t\t\ttrace = get_error('traced at');\n\n\t\t\t\tif (trace) {\n\t\t\t\t\tvar entry = tracing_expressions.entries.get(signal);\n\n\t\t\t\t\tif (entry === undefined) {\n\t\t\t\t\t\tentry = { traces: [] };\n\t\t\t\t\t\ttracing_expressions.entries.set(signal, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar last = entry.traces[entry.traces.length - 1];\n\n\t\t\t\t\t// traces can be duplicated, e.g. by `snapshot` invoking both\n\t\t\t\t\t// both `getOwnPropertyDescriptor` and `get` traps at once\n\t\t\t\t\tif (trace.stack !== last?.stack) {\n\t\t\t\t\t\tentry.traces.push(trace);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_destroying_effect && old_values.has(signal)) {\n\t\treturn old_values.get(signal);\n\t}\n\n\tif (is_derived) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\n\t\tif (is_destroying_effect) {\n\t\t\tvar value = derived.v;\n\n\t\t\t// if the derived is dirty and has reactions, or depends on the values that just changed, re-execute\n\t\t\t// (a derived can be maybe_dirty due to the effect destroy removing its last reaction)\n\t\t\tif (\n\t\t\t\t((derived.f & CLEAN) === 0 && derived.reactions !== null) ||\n\t\t\t\tdepends_on_old_values(derived)\n\t\t\t) {\n\t\t\t\tvalue = execute_derived(derived);\n\t\t\t}\n\n\t\t\told_values.set(derived, value);\n\n\t\t\treturn value;\n\t\t}\n\n\t\t// connect disconnected deriveds if we are reading them inside an effect,\n\t\t// or inside another derived that is already connected\n\t\tvar should_connect =\n\t\t\t(derived.f & CONNECTED) === 0 &&\n\t\t\t!untracking &&\n\t\t\tactive_reaction !== null &&\n\t\t\t(is_updating_effect || (active_reaction.f & CONNECTED) !== 0);\n\n\t\tvar is_new = (derived.f & REACTION_RAN) === 0;\n\n\t\tif (is_dirty(derived)) {\n\t\t\tif (should_connect) {\n\t\t\t\t// set the flag before `update_derived`, so that the derived\n\t\t\t\t// is added as a reaction to its dependencies\n\t\t\t\tderived.f |= CONNECTED;\n\t\t\t}\n\n\t\t\tupdate_derived(derived);\n\t\t}\n\n\t\tif (should_connect && !is_new) {\n\t\t\tunfreeze_derived_effects(derived);\n\t\t\treconnect(derived);\n\t\t}\n\t}\n\n\tif (batch_values?.has(signal)) {\n\t\treturn batch_values.get(signal);\n\t}\n\n\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\tthrow signal.v;\n\t}\n\n\treturn signal.v;\n}\n\n/**\n * (Re)connect a disconnected derived, so that it is notified\n * of changes in `mark_reactions`\n * @param {Derived} derived\n */\nfunction reconnect(derived) {\n\tderived.f |= CONNECTED;\n\n\tif (derived.deps === null) return;\n\n\tfor (const dep of derived.deps) {\n\t\t(dep.reactions ??= []).push(derived);\n\n\t\tif ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {\n\t\t\tunfreeze_derived_effects(/** @type {Derived} */ (dep));\n\t\t\treconnect(/** @type {Derived} */ (dep));\n\t\t}\n\t}\n}\n\n/** @param {Derived} derived */\nfunction depends_on_old_values(derived) {\n\tif (derived.v === UNINITIALIZED) return true; // we don't know, so assume the worst\n\tif (derived.deps === null) return false;\n\n\tfor (const dep of derived.deps) {\n\t\tif (old_values.has(dep)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((dep.f & DERIVED) !== 0 && depends_on_old_values(/** @type {Derived} */ (dep))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n * any state read inside `fn` will not be treated as a dependency.\n *\n * ```ts\n * $effect(() => {\n *   // this will run when `data` changes, but not when `time` changes\n *   save(data, {\n *     timestamp: untrack(() => time)\n *   });\n * });\n * ```\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_untracking = untracking;\n\ttry {\n\t\tuntracking = true;\n\t\treturn fn();\n\t} finally {\n\t\tuntracking = previous_untracking;\n\t}\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function can_delegate_event(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'indeterminate',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory',\n\t'defer',\n\t'disablepictureinpicture',\n\t'disableremoteplayback'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly',\n\tdefaultvalue: 'defaultValue',\n\tdefaultchecked: 'defaultChecked',\n\tsrcobject: 'srcObject',\n\tnovalidate: 'noValidate',\n\tallowfullscreen: 'allowFullscreen',\n\tdisablepictureinpicture: 'disablePictureInPicture',\n\tdisableremoteplayback: 'disableRemotePlayback'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'volume',\n\t'defaultValue',\n\t'defaultChecked',\n\t'srcObject',\n\t'noValidate',\n\t'allowFullscreen',\n\t'disablePictureInPicture',\n\t'disableRemotePlayback'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\nconst NON_STATIC_PROPERTIES = ['autofocus', 'muted', 'defaultValue', 'defaultChecked'];\n\n/**\n * Returns `true` if the given attribute cannot be set through the template\n * string, i.e. needs some kind of JavaScript handling to work.\n * @param {string} name\n */\nexport function cannot_be_set_statically(name) {\n\treturn NON_STATIC_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst STATE_CREATION_RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$derived',\n\t'$derived.by'\n]);\n\nconst RUNES = /** @type {const} */ ([\n\t...STATE_CREATION_RUNES,\n\t'$state.eager',\n\t'$state.snapshot',\n\t'$props',\n\t'$props.id',\n\t'$bindable',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$effect.pending',\n\t'$inspect',\n\t'$inspect().with',\n\t'$inspect.trace',\n\t'$host'\n]);\n\n/** @typedef {typeof RUNES[number]} RuneName */\n\n/**\n * @param {string} name\n * @returns {name is RuneName}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RuneName} */ (name));\n}\n\n/** @typedef {typeof STATE_CREATION_RUNES[number]} StateCreationRuneName */\n\n/**\n * @param {string} name\n * @returns {name is StateCreationRuneName}\n */\nexport function is_state_creation_rune(name) {\n\treturn STATE_CREATION_RUNES.includes(/** @type {StateCreationRuneName} */ (name));\n}\n\n/** List of elements that require raw contents and should not have SSR comments put in them */\nconst RAW_TEXT_ELEMENTS = /** @type {const} */ (['textarea', 'script', 'style', 'title']);\n\n/** @param {string} name */\nexport function is_raw_text_element(name) {\n\treturn RAW_TEXT_ELEMENTS.includes(/** @type {typeof RAW_TEXT_ELEMENTS[number]} */ (name));\n}\n\n// Matches valid HTML/SVG/MathML element names and custom element names.\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n//\n// Standard elements: ASCII alpha start, followed by ASCII alphanumerics.\n// Custom elements: ASCII alpha start, followed by any mix of PCENChar (which\n// includes ASCII alphanumerics, `-`, `.`, `_`, and specified Unicode ranges),\n// with at least one hyphen required somewhere after the first character.\n//\n// Rejects strings containing whitespace, quotes, angle brackets, slashes, equals,\n// or other characters that could break out of a tag-name token and enable markup injection.\nexport const REGEX_VALID_TAG_NAME =\n\t/^[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9.\\-_\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u{10000}-\\u{EFFFF}]+)*$/u;\n\n/**\n * Prevent devtools trying to make `location` a clickable link by inserting a zero-width space\n * @template {string | undefined} T\n * @param {T} location\n * @returns {T};\n */\nexport function sanitize_location(location) {\n\treturn /** @type {T} */ (location?.replace(/\\//g, '/\\u200b'));\n}\n","import { teardown } from '../../reactivity/effects.js';\nimport { define_property } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/**\n * Used on elements, as a map of event type -> event handler,\n * and on events themselves to track which element handled an event\n */\nexport const event_symbol = Symbol('events');\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tdom.removeAttribute('onload');\n\tdom.removeAttribute('onerror');\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} [handler]\n * @param {AddEventListenerOptions} [options]\n */\nexport function create_event(event_name, dom, handler, options = {}) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\treturn without_reactive_context(() => {\n\t\t\t\treturn handler?.call(this, event);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\tqueue_micro_task(() => {\n\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} [handler]\n * @param {boolean} [capture]\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\tif (\n\t\tdom === document.body ||\n\t\t// @ts-ignore\n\t\tdom === window ||\n\t\t// @ts-ignore\n\t\tdom === document ||\n\t\t// Firefox has quirky behavior, it can happen that we still get \"canplay\" events when the element is already removed\n\t\tdom instanceof HTMLMediaElement\n\t) {\n\t\tteardown(() => {\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {Element} element\n * @param {EventListener} [handler]\n * @returns {void}\n */\nexport function delegated(event_name, element, handler) {\n\t// @ts-expect-error\n\t(element[event_symbol] ??= {})[event_name] = handler;\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n// used to store the reference to the currently propagated event\n// to prevent garbage collection between microtasks in Firefox\n// If the event object is GCed too early, the expando __root property\n// set on the event object is lost, causing the event delegation\n// to process the event twice\nlet last_propagated_event = null;\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\tlast_propagated_event = event;\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check `event_symbol` to skip all nodes below it in case this is a\n\t// parent of the `event_symbol` node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// the `last_propagated_event === event` check is redundant, but\n\t// without it the variable will be DCE'd and things will\n\t// fail mysteriously in Firefox\n\t// @ts-expect-error is added below\n\tvar handled_at = last_propagated_event === event && event[event_symbol];\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent[event_symbol] = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all event handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\t/** @type {null | Element} */\n\t\t\tvar parent_element =\n\t\t\t\tcurrent_target.assignedSlot ||\n\t\t\t\tcurrent_target.parentNode ||\n\t\t\t\t/** @type {any} */ (current_target).host ||\n\t\t\t\tnull;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target[event_symbol]?.[event_name];\n\n\t\t\t\tif (\n\t\t\t\t\tdelegated != null &&\n\t\t\t\t\t(!(/** @type {any} */ (current_target).disabled) ||\n\t\t\t\t\t\t// DOM could've been updated already by the time this is reached, so we check this as well\n\t\t\t\t\t\t// -> the target could not have been disabled because it emits the event in the first place\n\t\t\t\t\t\tevent.target === current_target)\n\t\t\t\t) {\n\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble || parent_element === handler_element || parent_element === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent_target = parent_element;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent[event_symbol] = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler !== 'function' && (has_side_effects || handler != null || error)) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\t\tconst phase = args[0]?.eventPhase < Event.BUBBLING_PHASE ? 'capture' : '';\n\t\tconst event_name = args[0]?.type + phase;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\thandler?.apply(element, args);\n}\n","import { create_element } from './operations.js';\n\nconst policy =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\tglobalThis?.window?.trustedTypes &&\n\t/* @__PURE__ */ globalThis.window.trustedTypes.createPolicy('svelte-trusted-html', {\n\t\t/** @param {string} html */\n\t\tcreateHTML: (html) => {\n\t\t\treturn html;\n\t\t}\n\t});\n\n/** @param {string} html */\nexport function create_trusted_html(html) {\n\treturn /** @type {string} */ (policy?.createHTML(html) ?? html);\n}\n\n/**\n * @param {string} html\n */\nexport function create_fragment_from_html(html) {\n\tvar elem = create_element('template');\n\telem.innerHTML = create_trusted_html(html.replaceAll('<!>', '<!---->')); // XHTML compliance\n\treturn elem.content;\n}\n","/** @import { Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { TemplateStructure } from './types' */\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport {\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tis_firefox,\n\tcreate_element,\n\tcreate_fragment,\n\tcreate_comment,\n\tset_attribute,\n\tmerge_text_nodes\n} from './operations.js';\nimport { create_fragment_from_html } from './reconciler.js';\nimport { active_effect } from '../runtime.js';\nimport {\n\tNAMESPACE_MATHML,\n\tNAMESPACE_SVG,\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_USE_IMPORT_NODE,\n\tTEMPLATE_USE_MATHML,\n\tTEMPLATE_USE_SVG\n} from '../../../constants.js';\nimport {\n\tCOMMENT_NODE,\n\tDOCUMENT_FRAGMENT_NODE,\n\tIS_XHTML,\n\tREACTION_RAN,\n\tTEXT_NODE\n} from '#client/constants';\n\nconst TEMPLATE_TAG = IS_XHTML ? 'template' : 'TEMPLATE';\nconst SCRIPT_TAG = IS_XHTML ? 'script' : 'SCRIPT';\n\n/**\n * @param {TemplateNode} start\n * @param {TemplateNode | null} end\n */\nexport function assign_nodes(start, end) {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tif (effect.nodes === null) {\n\t\teffect.nodes = { start, end, a: null, t: null };\n\t}\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_html(content, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @param {'svg' | 'math'} ns\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction from_namespace(content, flags, ns = 'svg') {\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar wrapped = `<${ns}>${has_start ? content : '<!>' + content}</${ns}>`;\n\n\t/** @type {Element | DocumentFragment} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (!node) {\n\t\t\tvar fragment = /** @type {DocumentFragment} */ (create_fragment_from_html(wrapped));\n\t\t\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (is_fragment) {\n\t\t\t\tnode = document.createDocumentFragment();\n\t\t\t\twhile (get_first_child(root)) {\n\t\t\t\t\tnode.appendChild(/** @type {TemplateNode} */ (get_first_child(root)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode = /** @type {Element} */ (get_first_child(root));\n\t\t\t}\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (node.cloneNode(true));\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_svg(content, flags) {\n\treturn from_namespace(content, flags, 'svg');\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_mathml(content, flags) {\n\treturn from_namespace(content, flags, 'math');\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {typeof NAMESPACE_SVG | typeof NAMESPACE_MATHML | undefined} [ns]\n */\nfunction fragment_from_tree(structure, ns) {\n\tvar fragment = create_fragment();\n\n\tfor (var item of structure) {\n\t\tif (typeof item === 'string') {\n\t\t\tfragment.append(create_text(item));\n\t\t\tcontinue;\n\t\t}\n\n\t\t// if `preserveComments === true`, comments are represented as `['// <data>']`\n\t\tif (item === undefined || item[0][0] === '/') {\n\t\t\tfragment.append(create_comment(item ? item[0].slice(3) : ''));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [name, attributes, ...children] = item;\n\n\t\tconst namespace = name === 'svg' ? NAMESPACE_SVG : name === 'math' ? NAMESPACE_MATHML : ns;\n\n\t\tvar element = create_element(name, namespace, attributes?.is);\n\n\t\tfor (var key in attributes) {\n\t\t\tset_attribute(element, key, attributes[key]);\n\t\t}\n\n\t\tif (children.length > 0) {\n\t\t\tvar target =\n\t\t\t\telement.nodeName === TEMPLATE_TAG\n\t\t\t\t\t? /** @type {HTMLTemplateElement} */ (element).content\n\t\t\t\t\t: element;\n\n\t\t\ttarget.append(\n\t\t\t\tfragment_from_tree(children, element.nodeName === 'foreignObject' ? undefined : namespace)\n\t\t\t);\n\t\t}\n\n\t\tfragment.append(element);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_tree(structure, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tconst ns =\n\t\t\t\t(flags & TEMPLATE_USE_SVG) !== 0\n\t\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t\t: (flags & TEMPLATE_USE_MATHML) !== 0\n\t\t\t\t\t\t? NAMESPACE_MATHML\n\t\t\t\t\t\t: undefined;\n\n\t\t\tnode = fragment_from_tree(structure, ns);\n\t\t\tif (!is_fragment) node = /** @type {TemplateNode} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {() => Element | DocumentFragment} fn\n */\nexport function with_script(fn) {\n\treturn () => run_scripts(fn());\n}\n\n/**\n * Creating a document fragment from HTML that contains script tags will not execute\n * the scripts. We need to replace the script tags with new ones so that they are executed.\n * @param {Element | DocumentFragment} node\n * @returns {Node | Node[]}\n */\nfunction run_scripts(node) {\n\t// scripts were SSR'd, in which case they will run\n\tif (hydrating) return node;\n\n\tconst is_fragment = node.nodeType === DOCUMENT_FRAGMENT_NODE;\n\tconst scripts =\n\t\t/** @type {HTMLElement} */ (node).nodeName === SCRIPT_TAG\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\n\tconst effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = create_element('script');\n\t\tfor (var attribute of script.attributes) {\n\t\t\tclone.setAttribute(attribute.name, attribute.value);\n\t\t}\n\n\t\tclone.textContent = script.textContent;\n\n\t\t// The script has changed - if it's at the edges, the effect now points at dead nodes\n\t\tif (is_fragment ? node.firstChild === script : node === script) {\n\t\t\teffect.nodes.start = clone;\n\t\t}\n\t\tif (is_fragment ? node.lastChild === script : node === script) {\n\t\t\teffect.nodes.end = clone;\n\t\t}\n\n\t\tscript.replaceWith(clone);\n\t}\n\treturn node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {any} value\n */\nexport function text(value = '') {\n\tif (!hydrating) {\n\t\tvar t = create_text(value + '');\n\t\tassign_nodes(t, t);\n\t\treturn t;\n\t}\n\n\tvar node = hydrate_node;\n\n\tif (node.nodeType !== TEXT_NODE) {\n\t\t// if an {expression} is empty during SSR, we need to insert an empty text node\n\t\tnode.before((node = create_text()));\n\t\tset_hydrate_node(node);\n\t} else {\n\t\tmerge_text_nodes(/** @type {Text} */ (node));\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\n/**\n * @returns {TemplateNode | DocumentFragment}\n */\nexport function comment() {\n\t// we're not delegating to `template` here for performance reasons\n\tif (hydrating) {\n\t\tassign_nodes(hydrate_node, null);\n\t\treturn hydrate_node;\n\t}\n\n\tvar frag = document.createDocumentFragment();\n\tvar start = document.createComment('');\n\tvar anchor = create_text();\n\tfrag.append(start, anchor);\n\n\tassign_nodes(start, anchor);\n\n\treturn frag;\n}\n\n/**\n * Assign the created (or in hydration mode, traversed) dom elements to the current block\n * and insert the elements into the dom (in client mode).\n * @param {Text | Comment | Element} anchor\n * @param {DocumentFragment | Element} dom\n */\nexport function append(anchor, dom) {\n\tif (hydrating) {\n\t\tvar effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t\t// When hydrating and outer component and an inner component is async, i.e. blocked on a promise,\n\t\t// then by the time the inner resolves we have already advanced to the end of the hydrated nodes\n\t\t// of the parent component. Check for defined for that reason to avoid rewinding the parent's end marker.\n\t\tif ((effect.f & REACTION_RAN) === 0 || effect.nodes.end === null) {\n\t\t\teffect.nodes.end = hydrate_node;\n\t\t}\n\n\t\thydrate_next();\n\t\treturn;\n\t}\n\n\tif (anchor === null) {\n\t\t// edge case — void `<svelte:element>` with content\n\t\treturn;\n\t}\n\n\tanchor.before(/** @type {Node} */ (dom));\n}\n\n/**\n * Create (or hydrate) an unique UID for the component instance.\n */\nexport function props_id() {\n\tif (\n\t\thydrating &&\n\t\thydrate_node &&\n\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\thydrate_node.textContent?.startsWith(`$`)\n\t) {\n\t\tconst id = hydrate_node.textContent.substring(1);\n\t\thydrate_next();\n\t\treturn id;\n\t}\n\n\t// @ts-expect-error This way we ensure the id is unique even across Svelte runtimes\n\t(window.__svelte ??= {}).uid ??= 1;\n\n\t// @ts-expect-error\n\treturn `c${window.__svelte.uid++}`;\n}\n","/** @import { ComponentContext, Effect, EffectNodes, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { active_effect } from './runtime.js';\nimport { push, pop, component_context } from './context.js';\nimport { component_root } from './reactivity/effects.js';\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\nimport { COMMENT_NODE, STATE_SYMBOL } from './constants.js';\nimport { boundary } from './dom/blocks/boundary.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? `${value}` : value;\n\t// @ts-expect-error\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\t// @ts-expect-error\n\t\ttext.__t = str;\n\t\ttext.nodeValue = `${str}`;\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n *\t\ttransformError?: (error: unknown) => unknown;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n *\t\ttransformError?: (error: unknown) => unknown;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = get_first_child(target);\n\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = get_next_sibling(anchor);\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tset_hydrating(false);\n\n\t\treturn /**  @type {Exports} */ (instance);\n\t} catch (error) {\n\t\t// re-throw Svelte errors - they are certainly not related to hydration\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message.split('\\n').some((line) => line.startsWith('https://svelte.dev/e/'))\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tif (error !== HYDRATION_ERROR) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Failed to hydrate: ', error);\n\t\t}\n\n\t\tif (options.recover === false) {\n\t\t\te.hydration_failed();\n\t\t}\n\n\t\t// If an error occurred above, the operations might not yet have been initialised.\n\t\tinit_operations();\n\t\tclear_text_content(target);\n\n\t\tset_hydrating(false);\n\t\treturn mount(component, options);\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t}\n}\n\n/** @type {Map<EventTarget, Map<string, number>>} */\nconst listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(\n\tComponent,\n\t{ target, anchor, props = {}, events, context, intro = true, transformError }\n) {\n\tinit_operations();\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = component_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tboundary(\n\t\t\t/** @type {TemplateNode} */ (anchor_node),\n\t\t\t{\n\t\t\t\tpending: () => {}\n\t\t\t},\n\t\t\t(anchor_node) => {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tif (context) ctx.c = context;\n\n\t\t\t\tif (events) {\n\t\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t\t}\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t\t}\n\n\t\t\t\tshould_intro = intro;\n\t\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\t\tshould_intro = true;\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\t/** @type {Effect & { nodes: EffectNodes }} */ (active_effect).nodes.end = hydrate_node;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thydrate_node === null ||\n\t\t\t\t\t\thydrate_node.nodeType !== COMMENT_NODE ||\n\t\t\t\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.hydration_mismatch();\n\t\t\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpop();\n\t\t\t},\n\t\t\ttransformError\n\t\t);\n\n\t\t// Setup event delegation _after_ component is mounted - if an error would happen during mount, it would otherwise not be cleaned up\n\t\t/** @type {Set<string>} */\n\t\tvar registered_events = new Set();\n\n\t\t/** @param {Array<string>} events */\n\t\tvar event_handle = (events) => {\n\t\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\t\tvar event_name = events[i];\n\n\t\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\t\tregistered_events.add(event_name);\n\n\t\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t\t// Add the event listener to both the container and the document.\n\t\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t\t// the outer content stops propagation of the event.\n\t\t\t\t//\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = listeners.get(node);\n\n\t\t\t\t\tif (counts === undefined) {\n\t\t\t\t\t\tcounts = new Map();\n\t\t\t\t\t\tlisteners.set(node, counts);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar count = counts.get(event_name);\n\n\t\t\t\t\tif (count === undefined) {\n\t\t\t\t\t\tnode.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\t\t\tcounts.set(event_name, 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tevent_handle(array_from(all_registered_events));\n\t\troot_event_handles.add(event_handle);\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = /** @type {Map<string, number>} */ (listeners.get(node));\n\t\t\t\t\tvar count = /** @type {number} */ (counts.get(event_name));\n\n\t\t\t\t\tif (--count == 0) {\n\t\t\t\t\t\tnode.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\t\tcounts.delete(event_name);\n\n\t\t\t\t\t\tif (counts.size === 0) {\n\t\t\t\t\t\t\tlisteners.delete(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n *\n * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n *\n * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n *\n * ```js\n * import { mount, unmount } from 'svelte';\n * import App from './App.svelte';\n *\n * const app = mount(App, { target: document.body });\n *\n * // later...\n * unmount(app, { outro: true });\n * ```\n * @param {Record<string, any>} component\n * @param {{ outro?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function unmount(component, options) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tmounted_components.delete(component);\n\t\treturn fn(options);\n\t}\n\n\tif (DEV) {\n\t\tif (STATE_SYMBOL in component) {\n\t\t\tw.state_proxy_unmount();\n\t\t} else {\n\t\t\tw.lifecycle_double_unmount();\n\t\t}\n\t}\n\n\treturn Promise.resolve();\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { Batch, current_batch } from '../../reactivity/batch.js';\nimport {\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\n\n/**\n * @typedef {{ effect: Effect, fragment: DocumentFragment }} Branch\n */\n\n/**\n * @template Key\n */\nexport class BranchManager {\n\t/** @type {TemplateNode} */\n\tanchor;\n\n\t/** @type {Map<Batch, Key>} */\n\t#batches = new Map();\n\n\t/**\n\t * Map of keys to effects that are currently rendered in the DOM.\n\t * These effects are visible and actively part of the document tree.\n\t * Example:\n\t * ```\n\t * {#if condition}\n\t * \tfoo\n\t * {:else}\n\t * \tbar\n\t * {/if}\n\t * ```\n\t * Can result in the entries `true->Effect` and `false->Effect`\n\t * @type {Map<Key, Effect>}\n\t */\n\t#onscreen = new Map();\n\n\t/**\n\t * Similar to #onscreen with respect to the keys, but contains branches that are not yet\n\t * in the DOM, because their insertion is deferred.\n\t * @type {Map<Key, Branch>}\n\t */\n\t#offscreen = new Map();\n\n\t/**\n\t * Keys of effects that are currently outroing\n\t * @type {Set<Key>}\n\t */\n\t#outroing = new Set();\n\n\t/**\n\t * Whether to pause (i.e. outro) on change, or destroy immediately.\n\t * This is necessary for `<svelte:element>`\n\t */\n\t#transition = true;\n\n\t/**\n\t * @param {TemplateNode} anchor\n\t * @param {boolean} transition\n\t */\n\tconstructor(anchor, transition = true) {\n\t\tthis.anchor = anchor;\n\t\tthis.#transition = transition;\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#commit = (batch) => {\n\t\t// if this batch was made obsolete, bail\n\t\tif (!this.#batches.has(batch)) return;\n\n\t\tvar key = /** @type {Key} */ (this.#batches.get(batch));\n\n\t\tvar onscreen = this.#onscreen.get(key);\n\n\t\tif (onscreen) {\n\t\t\t// effect is already in the DOM — abort any current outro\n\t\t\tresume_effect(onscreen);\n\t\t\tthis.#outroing.delete(key);\n\t\t} else {\n\t\t\t// effect is currently offscreen. put it in the DOM\n\t\t\tvar offscreen = this.#offscreen.get(key);\n\n\t\t\tif (offscreen) {\n\t\t\t\tthis.#onscreen.set(key, offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(key);\n\n\t\t\t\t// remove the anchor...\n\t\t\t\t/** @type {TemplateNode} */ (offscreen.fragment.lastChild).remove();\n\n\t\t\t\t// ...and append the fragment\n\t\t\t\tthis.anchor.before(offscreen.fragment);\n\t\t\t\tonscreen = offscreen.effect;\n\t\t\t}\n\t\t}\n\n\t\tfor (const [b, k] of this.#batches) {\n\t\t\tthis.#batches.delete(b);\n\n\t\t\tif (b === batch) {\n\t\t\t\t// keep values for newer batches\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst offscreen = this.#offscreen.get(k);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// for older batches, destroy offscreen effects\n\t\t\t\t// as they will never be committed\n\t\t\t\tdestroy_effect(offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\n\t\t// outro/destroy all onscreen effects...\n\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t// ...except the one that was just committed\n\t\t\t//    or those that are already outroing (else the transition is aborted and the effect destroyed right away)\n\t\t\tif (k === key || this.#outroing.has(k)) continue;\n\n\t\t\tconst on_destroy = () => {\n\t\t\t\tconst keys = Array.from(this.#batches.values());\n\n\t\t\t\tif (keys.includes(k)) {\n\t\t\t\t\t// keep the effect offscreen, as another batch will need it\n\t\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\t\tmove_effect(effect, fragment);\n\n\t\t\t\t\tfragment.append(create_text()); // TODO can we avoid this?\n\n\t\t\t\t\tthis.#offscreen.set(k, { effect, fragment });\n\t\t\t\t} else {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tthis.#outroing.delete(k);\n\t\t\t\tthis.#onscreen.delete(k);\n\t\t\t};\n\n\t\t\tif (this.#transition || !onscreen) {\n\t\t\t\tthis.#outroing.add(k);\n\t\t\t\tpause_effect(effect, on_destroy, false);\n\t\t\t} else {\n\t\t\t\ton_destroy();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#discard = (batch) => {\n\t\tthis.#batches.delete(batch);\n\n\t\tconst keys = Array.from(this.#batches.values());\n\n\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\tif (!keys.includes(k)) {\n\t\t\t\tdestroy_effect(branch.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t *\n\t * @param {any} key\n\t * @param {null | ((target: TemplateNode) => void)} fn\n\t */\n\tensure(key, fn) {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tif (fn && !this.#onscreen.has(key) && !this.#offscreen.has(key)) {\n\t\t\tif (defer) {\n\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\tvar target = create_text();\n\n\t\t\t\tfragment.append(target);\n\n\t\t\t\tthis.#offscreen.set(key, {\n\t\t\t\t\teffect: branch(() => fn(target)),\n\t\t\t\t\tfragment\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.#onscreen.set(\n\t\t\t\t\tkey,\n\t\t\t\t\tbranch(() => fn(this.anchor))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.#batches.set(batch, key);\n\n\t\tif (defer) {\n\t\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(branch.effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(branch.effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch.oncommit(this.#commit);\n\t\t\tbatch.ondiscard(this.#discard);\n\t\t} else {\n\t\t\tif (hydrating) {\n\t\t\t\tthis.anchor = hydrate_node;\n\t\t\t}\n\n\t\t\tthis.#commit(batch);\n\t\t}\n\t}\n}\n","/** @import { Source, TemplateNode } from '#client' */\nimport { is_promise } from '../../../shared/utils.js';\nimport { block } from '../../reactivity/effects.js';\nimport { internal_set, mutable_source, source } from '../../reactivity/sources.js';\nimport {\n\thydrate_next,\n\thydrating,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { HYDRATION_START_ELSE, UNINITIALIZED } from '../../../../constants.js';\nimport { is_runes } from '../../context.js';\nimport { Batch, current_batch, flushSync, is_flushing_sync } from '../../reactivity/batch.js';\nimport { BranchManager } from './branches.js';\nimport { capture, unset_context } from '../../reactivity/async.js';\n\nconst PENDING = 0;\nconst THEN = 1;\nconst CATCH = 2;\n\n/** @typedef {typeof PENDING | typeof THEN | typeof CATCH} AwaitState */\n\n/**\n * @template V\n * @param {TemplateNode} node\n * @param {(() => any)} get_input\n * @param {null | ((anchor: Node) => void)} pending_fn\n * @param {null | ((anchor: Node, value: Source<V>) => void)} then_fn\n * @param {null | ((anchor: Node, error: unknown) => void)} catch_fn\n * @returns {void}\n */\nexport function await_block(node, get_input, pending_fn, then_fn, catch_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar runes = is_runes();\n\n\tvar v = /** @type {V} */ (UNINITIALIZED);\n\tvar value = runes ? source(v) : mutable_source(v, false, false);\n\tvar error = runes ? source(v) : mutable_source(v, false, false);\n\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\t// we null out `current_batch` because otherwise `save(...)` will incorrectly restore it —\n\t\t// the batch will already have been committed by the time it resolves\n\t\tbatch.deactivate();\n\t\tvar input = get_input();\n\t\tbatch.activate();\n\n\t\tvar destroyed = false;\n\n\t\t/** Whether or not there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\t// @ts-ignore coercing `node` to a `Comment` causes TypeScript and Prettier to fight\n\t\tlet mismatch = hydrating && is_promise(input) === (node.data === HYDRATION_START_ELSE);\n\n\t\tif (mismatch) {\n\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t\tset_hydrating(false);\n\t\t}\n\n\t\tif (is_promise(input)) {\n\t\t\tvar restore = capture();\n\t\t\tvar resolved = false;\n\n\t\t\t/**\n\t\t\t * @param {() => void} fn\n\t\t\t */\n\t\t\tconst resolve = (fn) => {\n\t\t\t\tif (destroyed) return;\n\n\t\t\t\tresolved = true;\n\t\t\t\t// We don't want to restore the previous batch here; {#await} blocks don't follow the async logic\n\t\t\t\t// we have elsewhere, instead pending/resolve/fail states are each their own batch so to speak.\n\t\t\t\trestore(false);\n\t\t\t\t// Make sure we have a batch, since the branch manager expects one to exist\n\t\t\t\tBatch.ensure();\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\t// `restore()` could set `hydrating` to `true`, which we very much\n\t\t\t\t\t// don't want — we want to restore everything _except_ this\n\t\t\t\t\tset_hydrating(false);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tfn();\n\t\t\t\t} finally {\n\t\t\t\t\tunset_context(false);\n\n\t\t\t\t\t// without this, the DOM does not update until two ticks after the promise\n\t\t\t\t\t// resolves, which is unexpected behaviour (and somewhat irksome to test)\n\t\t\t\t\tif (!is_flushing_sync) flushSync();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tinput.then(\n\t\t\t\t(v) => {\n\t\t\t\t\tresolve(() => {\n\t\t\t\t\t\tinternal_set(value, v);\n\t\t\t\t\t\tbranches.ensure(THEN, then_fn && ((target) => then_fn(target, value)));\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t(e) => {\n\t\t\t\t\tresolve(() => {\n\t\t\t\t\t\tinternal_set(error, e);\n\t\t\t\t\t\tbranches.ensure(CATCH, catch_fn && ((target) => catch_fn(target, error)));\n\n\t\t\t\t\t\tif (!catch_fn) {\n\t\t\t\t\t\t\t// Rethrow the error if no catch block exists\n\t\t\t\t\t\t\tthrow error.v;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (hydrating) {\n\t\t\t\tbranches.ensure(PENDING, pending_fn);\n\t\t\t} else {\n\t\t\t\t// Wait a microtask before checking if we should show the pending state as\n\t\t\t\t// the promise might have resolved by then\n\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\tresolve(() => {\n\t\t\t\t\t\t\tbranches.ensure(PENDING, pending_fn);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tinternal_set(value, input);\n\t\t\tbranches.ensure(THEN, then_fn && ((target) => then_fn(target, value)));\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\treturn () => {\n\t\t\tdestroyed = true;\n\t\t};\n\t});\n}\n","/** @import { TemplateNode } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport {\n\thydrate_next,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating,\n\thydrate_node\n} from '../hydration.js';\nimport { block } from '../../reactivity/effects.js';\nimport { BranchManager } from './branches.js';\n\n/**\n * @param {TemplateNode} node\n * @param {(branch: (fn: (anchor: Node) => void, key?: number | false) => void) => void} fn\n * @param {boolean} [elseif] True if this is an `{:else if ...}` block rather than an `{#if ...}`, as that affects which transitions are considered 'local'\n * @returns {void}\n */\nexport function if_block(node, fn, elseif = false) {\n\t/** @type {TemplateNode | undefined} */\n\tvar marker;\n\tif (hydrating) {\n\t\tmarker = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\tvar flags = elseif ? EFFECT_TRANSPARENT : 0;\n\n\t/**\n\t * @param {number | false} key\n\t * @param {null | ((anchor: Node) => void)} fn\n\t */\n\tfunction update_branch(key, fn) {\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (marker));\n\n\t\t\t// \"[n\" = branch n, \"[-1\" = else\n\t\t\tif (key !== parseInt(data.substring(1))) {\n\t\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh.\n\t\t\t\t// This could happen with `{#if browser}...{/if}`, for example\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(key, fn);\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(key, fn);\n\t}\n\n\tblock(() => {\n\t\tvar has_branch = false;\n\n\t\tfn((fn, key = 0) => {\n\t\t\thas_branch = true;\n\t\t\tupdate_branch(key, fn);\n\t\t});\n\n\t\tif (!has_branch) {\n\t\t\tupdate_branch(-1, null);\n\t\t}\n\t}, flags);\n}\n","/** @import { TemplateNode } from '#client' */\nimport { is_runes } from '../../context.js';\nimport { block } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrating } from '../hydration.js';\nimport { BranchManager } from './branches.js';\n\nconst NAN = Symbol('NaN');\n\n/**\n * @template V\n * @param {TemplateNode} node\n * @param {() => V} get_key\n * @param {(anchor: Node) => TemplateNode | void} render_fn\n * @returns {void}\n */\nexport function key(node, get_key, render_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tvar legacy = !is_runes();\n\n\tblock(() => {\n\t\tvar key = get_key();\n\n\t\t// NaN !== NaN, hence we do this workaround to not trigger remounts unnecessarily\n\t\tif (key !== key) {\n\t\t\tkey = /** @type {any} */ (NAN);\n\t\t}\n\n\t\t// key blocks in Svelte <5 had stupid semantics\n\t\tif (legacy && key !== null && typeof key === 'object') {\n\t\t\tkey = /** @type {V} */ ({});\n\t\t}\n\n\t\tbranches.ensure(key, render_fn);\n\t});\n}\n","/** @import { EachItem, EachOutroGroup, EachState, Effect, EffectNodes, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */\n/** @import { Batch } from '../../reactivity/batch.js'; */\nimport {\n\tEACH_INDEX_REACTIVE,\n\tEACH_IS_ANIMATED,\n\tEACH_IS_CONTROLLED,\n\tEACH_ITEM_IMMUTABLE,\n\tEACH_ITEM_REACTIVE,\n\tHYDRATION_END,\n\tHYDRATION_START_ELSE\n} from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tshould_defer_append\n} from '../operations.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { source, mutable_source, internal_set } from '../../reactivity/sources.js';\nimport { array_from, is_array } from '../../../shared/utils.js';\nimport { BRANCH_EFFECT, COMMENT_NODE, DESTROYED, EFFECT_OFFSCREEN, INERT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { get } from '../../runtime.js';\nimport { DEV } from 'esm-env';\nimport { derived_safe_equal } from '../../reactivity/deriveds.js';\nimport { current_batch } from '../../reactivity/batch.js';\nimport * as e from '../../errors.js';\n\n// When making substantive changes to this file, validate them with the each block stress test:\n// https://svelte.dev/playground/1972b2cf46564476ad8c8c6405b23b7b\n// This test also exists in this repo, as `packages/svelte/tests/manual/each-stress-test`\n\n/**\n * @param {any} _\n * @param {number} i\n */\nexport function index(_, i) {\n\treturn i;\n}\n\n/**\n * Pause multiple effects simultaneously, and coordinate their\n * subsequent destruction. Used in each blocks\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {null | Node} controlled_anchor\n */\nfunction pause_effects(state, to_destroy, controlled_anchor) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\tvar length = to_destroy.length;\n\n\t/** @type {EachOutroGroup} */\n\tvar group;\n\tvar remaining = to_destroy.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tlet effect = to_destroy[i];\n\n\t\tpause_effect(\n\t\t\teffect,\n\t\t\t() => {\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\t\tgroup.done.add(effect);\n\n\t\t\t\t\tif (group.pending.size === 0) {\n\t\t\t\t\t\tvar groups = /** @type {Set<EachOutroGroup>} */ (state.outrogroups);\n\n\t\t\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\t\t\tgroups.delete(group);\n\n\t\t\t\t\t\tif (groups.size === 0) {\n\t\t\t\t\t\t\tstate.outrogroups = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremaining -= 1;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfalse\n\t\t);\n\t}\n\n\tif (remaining === 0) {\n\t\t// If we're in a controlled each block (i.e. the block is the only child of an\n\t\t// element), and we are removing all items, _and_ there are no out transitions,\n\t\t// we can use the fast path — emptying the element and replacing the anchor\n\t\tvar fast_path = transitions.length === 0 && controlled_anchor !== null;\n\n\t\tif (fast_path) {\n\t\t\tvar anchor = /** @type {Element} */ (controlled_anchor);\n\t\t\tvar parent_node = /** @type {Element} */ (anchor.parentNode);\n\n\t\t\tclear_text_content(parent_node);\n\t\t\tparent_node.append(anchor);\n\n\t\t\tstate.items.clear();\n\t\t}\n\n\t\tdestroy_effects(state, to_destroy, !fast_path);\n\t} else {\n\t\tgroup = {\n\t\t\tpending: new Set(to_destroy),\n\t\t\tdone: new Set()\n\t\t};\n\n\t\t(state.outrogroups ??= new Set()).add(group);\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {boolean} remove_dom\n */\nfunction destroy_effects(state, to_destroy, remove_dom = true) {\n\t/** @type {Set<Effect> | undefined} */\n\tvar preserved_effects;\n\n\t// The loop-in-a-loop isn't ideal, but we should only hit this in relatively rare cases\n\tif (state.pending.size > 0) {\n\t\tpreserved_effects = new Set();\n\n\t\tfor (const keys of state.pending.values()) {\n\t\t\tfor (const key of keys) {\n\t\t\t\tpreserved_effects.add(/** @type {EachItem} */ (state.items.get(key)).e);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < to_destroy.length; i++) {\n\t\tvar e = to_destroy[i];\n\n\t\tif (preserved_effects?.has(e)) {\n\t\t\te.f |= EFFECT_OFFSCREEN;\n\n\t\t\tconst fragment = document.createDocumentFragment();\n\t\t\tmove_effect(e, fragment);\n\t\t} else {\n\t\t\tdestroy_effect(to_destroy[i], remove_dom);\n\t\t}\n\t}\n}\n\n/** @type {TemplateNode} */\nvar offscreen_anchor;\n\n/**\n * @template V\n * @param {Element | Comment} node The next sibling node, or the parent node if this is a 'controlled' block\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @param {(value: V, index: number) => any} get_key\n * @param {(anchor: Node, item: MaybeSource<V>, index: MaybeSource<number>) => void} render_fn\n * @param {null | ((anchor: Node) => void)} fallback_fn\n * @returns {void}\n */\nexport function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {\n\tvar anchor = node;\n\n\t/** @type {Map<any, EachItem>} */\n\tvar items = new Map();\n\n\tvar is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tanchor = hydrating\n\t\t\t? set_hydrate_node(get_first_child(parent_node))\n\t\t\t: parent_node.appendChild(create_text());\n\t}\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\t/** @type {Effect | null} */\n\tvar fallback = null;\n\n\t// TODO: ideally we could use derived for runes mode but because of the ability\n\t// to use a store which can be mutated, we can't do that here as mutating a store\n\t// will still result in the collection array being the same from the store\n\tvar each_array = derived_safe_equal(() => {\n\t\tvar collection = get_collection();\n\n\t\treturn is_array(collection) ? collection : collection == null ? [] : array_from(collection);\n\t});\n\n\t/** @type {V[]} */\n\tvar array;\n\n\t/** @type {Map<Batch, Set<any>>} */\n\tvar pending = new Map();\n\n\tvar first_run = true;\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction commit(batch) {\n\t\tif ((state.effect.f & DESTROYED) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tstate.pending.delete(batch);\n\n\t\tstate.fallback = fallback;\n\t\treconcile(state, array, anchor, flags, get_key);\n\n\t\tif (fallback !== null) {\n\t\t\tif (array.length === 0) {\n\t\t\t\tif ((fallback.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\t\tresume_effect(fallback);\n\t\t\t\t} else {\n\t\t\t\t\tfallback.f ^= EFFECT_OFFSCREEN;\n\t\t\t\t\tmove(fallback, null, anchor);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpause_effect(fallback, () => {\n\t\t\t\t\t// TODO only null out if no pending batch needs it,\n\t\t\t\t\t// otherwise re-add `fallback.fragment` and move the\n\t\t\t\t\t// effect into it\n\t\t\t\t\tfallback = null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction discard(batch) {\n\t\tstate.pending.delete(batch);\n\t}\n\n\tvar effect = block(() => {\n\t\tarray = /** @type {V[]} */ (get(each_array));\n\t\tvar length = array.length;\n\n\t\t/** `true` if there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\tlet mismatch = false;\n\n\t\tif (hydrating) {\n\t\t\tvar is_else = read_hydration_instruction(anchor) === HYDRATION_START_ELSE;\n\n\t\t\tif (is_else !== (length === 0)) {\n\t\t\t\t// hydration mismatch — remove the server-rendered DOM and start over\n\t\t\t\tanchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tset_hydrating(false);\n\t\t\t\tmismatch = true;\n\t\t\t}\n\t\t}\n\n\t\tvar keys = new Set();\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tfor (var index = 0; index < length; index += 1) {\n\t\t\tif (\n\t\t\t\thydrating &&\n\t\t\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\t\t\t/** @type {Comment} */ (hydrate_node).data === HYDRATION_END\n\t\t\t) {\n\t\t\t\t// The server rendered fewer items than expected,\n\t\t\t\t// so break out and continue appending non-hydrated items\n\t\t\t\tanchor = /** @type {Comment} */ (hydrate_node);\n\t\t\t\tmismatch = true;\n\t\t\t\tset_hydrating(false);\n\t\t\t}\n\n\t\t\tvar value = array[index];\n\t\t\tvar key = get_key(value, index);\n\n\t\t\tif (DEV) {\n\t\t\t\t// Check that the key function is idempotent (returns the same value when called twice)\n\t\t\t\tvar key_again = get_key(value, index);\n\t\t\t\tif (key !== key_again) {\n\t\t\t\t\te.each_key_volatile(String(index), String(key), String(key_again));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar item = first_run ? null : items.get(key);\n\n\t\t\tif (item) {\n\t\t\t\t// update before reconciliation, to trigger any async updates\n\t\t\t\tif (item.v) internal_set(item.v, value);\n\t\t\t\tif (item.i) internal_set(item.i, index);\n\n\t\t\t\tif (defer) {\n\t\t\t\t\tbatch.unskip_effect(item.e);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem = create_item(\n\t\t\t\t\titems,\n\t\t\t\t\tfirst_run ? anchor : (offscreen_anchor ??= create_text()),\n\t\t\t\t\tvalue,\n\t\t\t\t\tkey,\n\t\t\t\t\tindex,\n\t\t\t\t\trender_fn,\n\t\t\t\t\tflags,\n\t\t\t\t\tget_collection\n\t\t\t\t);\n\n\t\t\t\tif (!first_run) {\n\t\t\t\t\titem.e.f |= EFFECT_OFFSCREEN;\n\t\t\t\t}\n\n\t\t\t\titems.set(key, item);\n\t\t\t}\n\n\t\t\tkeys.add(key);\n\t\t}\n\n\t\tif (length === 0 && fallback_fn && !fallback) {\n\t\t\tif (first_run) {\n\t\t\t\tfallback = branch(() => fallback_fn(anchor));\n\t\t\t} else {\n\t\t\t\tfallback = branch(() => fallback_fn((offscreen_anchor ??= create_text())));\n\t\t\t\tfallback.f |= EFFECT_OFFSCREEN;\n\t\t\t}\n\t\t}\n\n\t\tif (length > keys.size) {\n\t\t\tif (DEV) {\n\t\t\t\tvalidate_each_keys(array, get_key);\n\t\t\t} else {\n\t\t\t\t// in prod, the additional information isn't printed, so don't bother computing it\n\t\t\t\te.each_key_duplicate('', '', '');\n\t\t\t}\n\t\t}\n\n\t\t// remove excess nodes\n\t\tif (hydrating && length > 0) {\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tif (!first_run) {\n\t\t\tpending.set(batch, keys);\n\n\t\t\tif (defer) {\n\t\t\t\tfor (const [key, item] of items) {\n\t\t\t\t\tif (!keys.has(key)) {\n\t\t\t\t\t\tbatch.skip_effect(item.e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.oncommit(commit);\n\t\t\t\tbatch.ondiscard(discard);\n\t\t\t} else {\n\t\t\t\tcommit(batch);\n\t\t\t}\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\t// When we mount the each block for the first time, the collection won't be\n\t\t// connected to this effect as the effect hasn't finished running yet and its deps\n\t\t// won't be assigned. However, it's possible that when reconciling the each block\n\t\t// that a mutation occurred and it's made the collection MAYBE_DIRTY, so reading the\n\t\t// collection again can provide consistency to the reactive graph again as the deriveds\n\t\t// will now be `CLEAN`.\n\t\tget(each_array);\n\t});\n\n\t/** @type {EachState} */\n\tvar state = { effect, flags, items, pending, outrogroups: null, fallback };\n\n\tfirst_run = false;\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * Skip past any non-branch effects (which could be created with `createSubscriber`, for example) to find the next branch effect\n * @param {Effect | null} effect\n * @returns {Effect | null}\n */\nfunction skip_to_branch(effect) {\n\twhile (effect !== null && (effect.f & BRANCH_EFFECT) === 0) {\n\t\teffect = effect.next;\n\t}\n\treturn effect;\n}\n\n/**\n * Add, remove, or reorder items output by an each block as its input changes\n * @template V\n * @param {EachState} state\n * @param {Array<V>} array\n * @param {Element | Comment | Text} anchor\n * @param {number} flags\n * @param {(value: V, index: number) => any} get_key\n * @returns {void}\n */\nfunction reconcile(state, array, anchor, flags, get_key) {\n\tvar is_animated = (flags & EACH_IS_ANIMATED) !== 0;\n\n\tvar length = array.length;\n\tvar items = state.items;\n\tvar current = skip_to_branch(state.effect.first);\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar seen;\n\n\t/** @type {Effect | null} */\n\tvar prev = null;\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar to_animate;\n\n\t/** @type {Effect[]} */\n\tvar matched = [];\n\n\t/** @type {Effect[]} */\n\tvar stashed = [];\n\n\t/** @type {V} */\n\tvar value;\n\n\t/** @type {any} */\n\tvar key;\n\n\t/** @type {Effect | undefined} */\n\tvar effect;\n\n\t/** @type {number} */\n\tvar i;\n\n\tif (is_animated) {\n\t\tfor (i = 0; i < length; i += 1) {\n\t\t\tvalue = array[i];\n\t\t\tkey = get_key(value, i);\n\t\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\t\t// offscreen == coming in now, no animation in that case,\n\t\t\t// else this would happen https://github.com/sveltejs/svelte/issues/17181\n\t\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\teffect.nodes?.a?.measure();\n\t\t\t\t(to_animate ??= new Set()).add(effect);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i = 0; i < length; i += 1) {\n\t\tvalue = array[i];\n\t\tkey = get_key(value, i);\n\n\t\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\tif (state.outrogroups !== null) {\n\t\t\tfor (const group of state.outrogroups) {\n\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\tgroup.done.delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & INERT) !== 0) {\n\t\t\tresume_effect(effect);\n\t\t\tif (is_animated) {\n\t\t\t\teffect.nodes?.a?.unfix();\n\t\t\t\t(to_animate ??= new Set()).delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) !== 0) {\n\t\t\teffect.f ^= EFFECT_OFFSCREEN;\n\n\t\t\tif (effect === current) {\n\t\t\t\tmove(effect, null, anchor);\n\t\t\t} else {\n\t\t\t\tvar next = prev ? prev.next : current;\n\n\t\t\t\tif (effect === state.effect.last) {\n\t\t\t\t\tstate.effect.last = effect.prev;\n\t\t\t\t}\n\n\t\t\t\tif (effect.prev) effect.prev.next = effect.next;\n\t\t\t\tif (effect.next) effect.next.prev = effect.prev;\n\t\t\t\tlink(state, prev, effect);\n\t\t\t\tlink(state, effect, next);\n\n\t\t\t\tmove(effect, next, anchor);\n\t\t\t\tprev = effect;\n\n\t\t\t\tmatched = [];\n\t\t\t\tstashed = [];\n\n\t\t\t\tcurrent = skip_to_branch(prev.next);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (effect !== current) {\n\t\t\tif (seen !== undefined && seen.has(effect)) {\n\t\t\t\tif (matched.length < stashed.length) {\n\t\t\t\t\t// more efficient to move later items to the front\n\t\t\t\t\tvar start = stashed[0];\n\t\t\t\t\tvar j;\n\n\t\t\t\t\tprev = start.prev;\n\n\t\t\t\t\tvar a = matched[0];\n\t\t\t\t\tvar b = matched[matched.length - 1];\n\n\t\t\t\t\tfor (j = 0; j < matched.length; j += 1) {\n\t\t\t\t\t\tmove(matched[j], start, anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (j = 0; j < stashed.length; j += 1) {\n\t\t\t\t\t\tseen.delete(stashed[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\tlink(state, a.prev, b.next);\n\t\t\t\t\tlink(state, prev, a);\n\t\t\t\t\tlink(state, b, start);\n\n\t\t\t\t\tcurrent = start;\n\t\t\t\t\tprev = b;\n\t\t\t\t\ti -= 1;\n\n\t\t\t\t\tmatched = [];\n\t\t\t\t\tstashed = [];\n\t\t\t\t} else {\n\t\t\t\t\t// more efficient to move earlier items to the back\n\t\t\t\t\tseen.delete(effect);\n\t\t\t\t\tmove(effect, current, anchor);\n\n\t\t\t\t\tlink(state, effect.prev, effect.next);\n\t\t\t\t\tlink(state, effect, prev === null ? state.effect.first : prev.next);\n\t\t\t\t\tlink(state, prev, effect);\n\n\t\t\t\t\tprev = effect;\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmatched = [];\n\t\t\tstashed = [];\n\n\t\t\twhile (current !== null && current !== effect) {\n\t\t\t\t(seen ??= new Set()).add(current);\n\t\t\t\tstashed.push(current);\n\t\t\t\tcurrent = skip_to_branch(current.next);\n\t\t\t}\n\n\t\t\tif (current === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\tmatched.push(effect);\n\t\t}\n\n\t\tprev = effect;\n\t\tcurrent = skip_to_branch(effect.next);\n\t}\n\n\tif (state.outrogroups !== null) {\n\t\tfor (const group of state.outrogroups) {\n\t\t\tif (group.pending.size === 0) {\n\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\tstate.outrogroups?.delete(group);\n\t\t\t}\n\t\t}\n\n\t\tif (state.outrogroups.size === 0) {\n\t\t\tstate.outrogroups = null;\n\t\t}\n\t}\n\n\tif (current !== null || seen !== undefined) {\n\t\t/** @type {Effect[]} */\n\t\tvar to_destroy = [];\n\n\t\tif (seen !== undefined) {\n\t\t\tfor (effect of seen) {\n\t\t\t\tif ((effect.f & INERT) === 0) {\n\t\t\t\t\tto_destroy.push(effect);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twhile (current !== null) {\n\t\t\t// If the each block isn't inert, then inert effects are currently outroing and will be removed once the transition is finished\n\t\t\tif ((current.f & INERT) === 0 && current !== state.fallback) {\n\t\t\t\tto_destroy.push(current);\n\t\t\t}\n\n\t\t\tcurrent = skip_to_branch(current.next);\n\t\t}\n\n\t\tvar destroy_length = to_destroy.length;\n\n\t\tif (destroy_length > 0) {\n\t\t\tvar controlled_anchor = (flags & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;\n\n\t\t\tif (is_animated) {\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.measure();\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].nodes?.a?.fix();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpause_effects(state, to_destroy, controlled_anchor);\n\t\t}\n\t}\n\n\tif (is_animated) {\n\t\tqueue_micro_task(() => {\n\t\t\tif (to_animate === undefined) return;\n\t\t\tfor (effect of to_animate) {\n\t\t\t\teffect.nodes?.a?.apply();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @template V\n * @param {Map<any, EachItem>} items\n * @param {Node} anchor\n * @param {V} value\n * @param {unknown} key\n * @param {number} index\n * @param {(anchor: Node, item: V | Source<V>, index: number | Value<number>, collection: () => V[]) => void} render_fn\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @returns {EachItem}\n */\nfunction create_item(items, anchor, value, key, index, render_fn, flags, get_collection) {\n\tvar v =\n\t\t(flags & EACH_ITEM_REACTIVE) !== 0\n\t\t\t? (flags & EACH_ITEM_IMMUTABLE) === 0\n\t\t\t\t? mutable_source(value, false, false)\n\t\t\t\t: source(value)\n\t\t\t: null;\n\n\tvar i = (flags & EACH_INDEX_REACTIVE) !== 0 ? source(index) : null;\n\n\tif (DEV && v) {\n\t\t// For tracing purposes, we need to link the source signal we create with the\n\t\t// collection + index so that tracing works as intended\n\t\tv.trace = () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tget_collection()[i?.v ?? index];\n\t\t};\n\t}\n\n\treturn {\n\t\tv,\n\t\ti,\n\t\te: branch(() => {\n\t\t\trender_fn(anchor, v ?? value, i ?? index, get_collection);\n\n\t\t\treturn () => {\n\t\t\t\titems.delete(key);\n\t\t\t};\n\t\t})\n\t};\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect | null} next\n * @param {Text | Element | Comment} anchor\n */\nfunction move(effect, next, anchor) {\n\tif (!effect.nodes) return;\n\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\tvar dest =\n\t\tnext && (next.f & EFFECT_OFFSCREEN) === 0\n\t\t\t? /** @type {EffectNodes} */ (next.nodes).start\n\t\t\t: anchor;\n\n\twhile (node !== null) {\n\t\tvar next_node = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tdest.before(node);\n\n\t\tif (node === end) {\n\t\t\treturn;\n\t\t}\n\n\t\tnode = next_node;\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect | null} prev\n * @param {Effect | null} next\n */\nfunction link(state, prev, next) {\n\tif (prev === null) {\n\t\tstate.effect.first = next;\n\t} else {\n\t\tprev.next = next;\n\t}\n\n\tif (next === null) {\n\t\tstate.effect.last = prev;\n\t} else {\n\t\tnext.prev = prev;\n\t}\n}\n\n/**\n * @param {Array<any>} array\n * @param {(item: any, index: number) => string} key_fn\n * @returns {void}\n */\nfunction validate_each_keys(array, key_fn) {\n\tconst keys = new Map();\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst key = key_fn(array[i], i);\n\n\t\tif (keys.has(key)) {\n\t\t\tconst a = String(keys.get(key));\n\t\t\tconst b = String(i);\n\n\t\t\t/** @type {string | null} */\n\t\t\tlet k = String(key);\n\t\t\tif (k.startsWith('[object ')) k = null;\n\n\t\t\te.each_key_duplicate(a, b, k);\n\t\t}\n\n\t\tkeys.set(key, i);\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\n/** @import {} from 'trusted-types' */\nimport {\n\tFILENAME,\n\tHYDRATION_ERROR,\n\tNAMESPACE_SVG,\n\tNAMESPACE_MATHML\n} from '../../../../constants.js';\nimport { remove_effect_dom, template_effect } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from '../hydration.js';\n\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport { hash, sanitize_location } from '../../../../utils.js';\nimport { DEV } from 'esm-env';\nimport { dev_current_component_function } from '../../context.js';\nimport { create_element, get_first_child, get_next_sibling } from '../operations.js';\nimport { active_effect } from '../../runtime.js';\nimport { COMMENT_NODE } from '#client/constants';\n\n/**\n * @param {Element} element\n * @param {string | null} server_hash\n * @param {string | TrustedHTML} value\n */\nfunction check_hash(element, server_hash, value) {\n\tif (!server_hash || server_hash === hash(String(value ?? ''))) return;\n\n\tlet location;\n\n\t// @ts-expect-error\n\tconst loc = element.__svelte_meta?.loc;\n\tif (loc) {\n\t\tlocation = `near ${loc.file}:${loc.line}:${loc.column}`;\n\t} else if (dev_current_component_function?.[FILENAME]) {\n\t\tlocation = `in ${dev_current_component_function[FILENAME]}`;\n\t}\n\n\tw.hydration_html_changed(sanitize_location(location));\n}\n\n/**\n * @param {Element | Text | Comment} node\n * @param {() => string | TrustedHTML} get_value\n * @param {boolean} [is_controlled]\n * @param {boolean} [svg]\n * @param {boolean} [mathml]\n * @param {boolean} [skip_warning]\n * @returns {void}\n */\nexport function html(\n\tnode,\n\tget_value,\n\tis_controlled = false,\n\tsvg = false,\n\tmathml = false,\n\tskip_warning = false\n) {\n\tvar anchor = node;\n\n\t/** @type {string | TrustedHTML} */\n\tvar value = '';\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tif (hydrating) {\n\t\t\tanchor = set_hydrate_node(get_first_child(parent_node));\n\t\t}\n\t}\n\n\ttemplate_effect(() => {\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\tif (value === (value = get_value() ?? '')) {\n\t\t\tif (hydrating) hydrate_next();\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_controlled && !hydrating) {\n\t\t\t// When @html is the only child, use innerHTML directly.\n\t\t\t// This also handles contenteditable, where the user may delete the anchor comment.\n\t\t\teffect.nodes = null;\n\t\t\tparent_node.innerHTML = /** @type {string} */ (value);\n\n\t\t\tif (value !== '') {\n\t\t\t\tassign_nodes(\n\t\t\t\t\t/** @type {TemplateNode} */ (get_first_child(parent_node)),\n\t\t\t\t\t/** @type {TemplateNode} */ (parent_node.lastChild)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (effect.nodes !== null) {\n\t\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\t\teffect.nodes = null;\n\t\t}\n\n\t\tif (value === '') return;\n\n\t\tif (hydrating) {\n\t\t\t// We're deliberately not trying to repair mismatches between server and client,\n\t\t\t// as it's costly and error-prone (and it's an edge case to have a mismatch anyway)\n\t\t\tvar hash = /** @type {Comment} */ (hydrate_node).data;\n\n\t\t\t/** @type {TemplateNode | null} */\n\t\t\tvar next = hydrate_next();\n\t\t\tvar last = next;\n\n\t\t\twhile (\n\t\t\t\tnext !== null &&\n\t\t\t\t(next.nodeType !== COMMENT_NODE || /** @type {Comment} */ (next).data !== '')\n\t\t\t) {\n\t\t\t\tlast = next;\n\t\t\t\tnext = get_next_sibling(next);\n\t\t\t}\n\n\t\t\tif (next === null) {\n\t\t\t\tw.hydration_mismatch();\n\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t}\n\n\t\t\tif (DEV && !skip_warning) {\n\t\t\t\tcheck_hash(/** @type {Element} */ (next.parentNode), hash, value);\n\t\t\t}\n\n\t\t\tassign_nodes(hydrate_node, last);\n\t\t\tanchor = set_hydrate_node(next);\n\t\t\treturn;\n\t\t}\n\n\t\t// Don't use create_fragment_with_script_from_html here because that would mean script tags are executed.\n\t\t// @html is basically `.innerHTML = ...` and that doesn't execute scripts either due to security reasons.\n\t\t// Use a <template>, <svg>, or <math> wrapper depending on context. If value is a TrustedHTML object,\n\t\t// it will be assigned directly to innerHTML without coercion — this allows {@html policy.createHTML(...)} to work.\n\t\tvar ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : undefined;\n\t\tvar wrapper = /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ (\n\t\t\tcreate_element(svg ? 'svg' : mathml ? 'math' : 'template', ns)\n\t\t);\n\t\twrapper.innerHTML = /** @type {any} */ (value);\n\n\t\t/** @type {DocumentFragment | Element} */\n\t\tvar node = svg || mathml ? wrapper : /** @type {HTMLTemplateElement} */ (wrapper).content;\n\n\t\tassign_nodes(\n\t\t\t/** @type {TemplateNode} */ (get_first_child(node)),\n\t\t\t/** @type {TemplateNode} */ (node.lastChild)\n\t\t);\n\n\t\tif (svg || mathml) {\n\t\t\twhile (get_first_child(node)) {\n\t\t\t\tanchor.before(/** @type {TemplateNode} */ (get_first_child(node)));\n\t\t\t}\n\t\t} else {\n\t\t\tanchor.before(node);\n\t\t}\n\t});\n}\n","/** @import { Snippet } from 'svelte' */\n/** @import { TemplateNode } from '#client' */\n/** @import { Getters } from '#shared' */\nimport { EFFECT_TRANSPARENT, ELEMENT_NODE } from '#client/constants';\nimport { block, teardown } from '../../reactivity/effects.js';\nimport {\n\tdev_current_component_function,\n\tset_dev_current_component_function\n} from '../../context.js';\nimport { hydrate_next, hydrate_node, hydrating } from '../hydration.js';\nimport { create_fragment_from_html } from '../reconciler.js';\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport * as e from '../../errors.js';\nimport { DEV } from 'esm-env';\nimport { get_first_child, get_next_sibling } from '../operations.js';\nimport { prevent_snippet_stringification } from '../../../shared/validate.js';\nimport { BranchManager } from './branches.js';\n\n/**\n * @template {(node: TemplateNode, ...args: any[]) => void} SnippetFn\n * @param {TemplateNode} node\n * @param {() => SnippetFn | null | undefined} get_snippet\n * @param {(() => any)[]} args\n * @returns {void}\n */\nexport function snippet(node, get_snippet, ...args) {\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tconst snippet = get_snippet() ?? null;\n\n\t\tif (DEV && snippet == null) {\n\t\t\te.invalid_snippet();\n\t\t}\n\n\t\tbranches.ensure(snippet, snippet && ((anchor) => snippet(anchor, ...args)));\n\t}, EFFECT_TRANSPARENT);\n}\n\n/**\n * In development, wrap the snippet function so that it passes validation, and so that the\n * correct component context is set for ownership checks\n * @param {any} component\n * @param {(node: TemplateNode, ...args: any[]) => void} fn\n */\nexport function wrap_snippet(component, fn) {\n\tconst snippet = (/** @type {TemplateNode} */ node, /** @type {any[]} */ ...args) => {\n\t\tvar previous_component_function = dev_current_component_function;\n\t\tset_dev_current_component_function(component);\n\n\t\ttry {\n\t\t\treturn fn(node, ...args);\n\t\t} finally {\n\t\t\tset_dev_current_component_function(previous_component_function);\n\t\t}\n\t};\n\n\tprevent_snippet_stringification(snippet);\n\n\treturn snippet;\n}\n\n/**\n * Create a snippet programmatically\n * @template {unknown[]} Params\n * @param {(...params: Getters<Params>) => {\n *   render: () => string\n *   setup?: (element: Element) => void | (() => void)\n * }} fn\n * @returns {Snippet<Params>}\n */\nexport function createRawSnippet(fn) {\n\t// @ts-expect-error the types are a lie\n\treturn (/** @type {TemplateNode} */ anchor, /** @type {Getters<Params>} */ ...params) => {\n\t\tvar snippet = fn(...params);\n\n\t\t/** @type {Element} */\n\t\tvar element;\n\n\t\tif (hydrating) {\n\t\t\telement = /** @type {Element} */ (hydrate_node);\n\t\t\thydrate_next();\n\t\t} else {\n\t\t\tvar html = snippet.render().trim();\n\t\t\tvar fragment = create_fragment_from_html(html);\n\t\t\telement = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (DEV && (get_next_sibling(element) !== null || element.nodeType !== ELEMENT_NODE)) {\n\t\t\t\tw.invalid_raw_snippet_render();\n\t\t\t}\n\n\t\t\tanchor.before(element);\n\t\t}\n\n\t\tconst result = snippet.setup?.(element);\n\t\tassign_nodes(element, element);\n\n\t\tif (typeof result === 'function') {\n\t\t\tteardown(result);\n\t\t}\n\t};\n}\n","/** @import { TemplateNode, Dom } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport { block } from '../../reactivity/effects.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tset_hydrate_node,\n\tset_hydrating,\n\tskip_nodes\n} from '../hydration.js';\nimport { BranchManager } from './branches.js';\nimport { HYDRATION_START, HYDRATION_START_ELSE } from '../../../../constants.js';\n\n/**\n * @template P\n * @template {(props: P) => void} C\n * @param {TemplateNode} node\n * @param {() => C} get_component\n * @param {(anchor: TemplateNode, component: C) => Dom | void} render_fn\n * @returns {void}\n */\nexport function component(node, get_component, render_fn) {\n\t/** @type {TemplateNode | undefined} */\n\tvar hydration_start_node;\n\n\tif (hydrating) {\n\t\thydration_start_node = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tvar component = get_component() ?? null;\n\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (hydration_start_node));\n\n\t\t\tvar server_had_component = data === HYDRATION_START;\n\t\t\tvar client_has_component = component !== null;\n\n\t\t\tif (server_had_component !== client_has_component) {\n\t\t\t\t// Hydration mismatch: skip the server-rendered nodes and render fresh\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t}, EFFECT_TRANSPARENT);\n}\n","/** @import { Raf } from '#client' */\nimport { noop } from '../shared/utils.js';\n\nimport { BROWSER } from 'esm-env';\n\nconst now = BROWSER ? () => performance.now() : () => Date.now();\n\n/** @type {Raf} */\nexport const raf = {\n\t// don't access requestAnimationFrame eagerly outside method\n\t// this allows basic testing of user code without JSDOM\n\t// bunder will eval and remove ternary when the user's app is built\n\ttick: /** @param {any} _ */ (_) => (BROWSER ? requestAnimationFrame : noop)(_),\n\tnow: () => now(),\n\ttasks: new Set()\n};\n","/** @import { TaskCallback, Task, TaskEntry } from '#client' */\nimport { raf } from './timing.js';\n\n// TODO move this into timing.js where it probably belongs\n\n/**\n * @returns {void}\n */\nfunction run_tasks() {\n\t// use `raf.now()` instead of the `requestAnimationFrame` callback argument, because\n\t// otherwise things can get wonky https://github.com/sveltejs/svelte/pull/14541\n\tconst now = raf.now();\n\n\traf.tasks.forEach((task) => {\n\t\tif (!task.c(now)) {\n\t\t\traf.tasks.delete(task);\n\t\t\ttask.f();\n\t\t}\n\t});\n\n\tif (raf.tasks.size !== 0) {\n\t\traf.tick(run_tasks);\n\t}\n}\n\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n * @param {TaskCallback} callback\n * @returns {Task}\n */\nexport function loop(callback) {\n\t/** @type {TaskEntry} */\n\tlet task;\n\n\tif (raf.tasks.size === 0) {\n\t\traf.tick(run_tasks);\n\t}\n\n\treturn {\n\t\tpromise: new Promise((fulfill) => {\n\t\t\traf.tasks.add((task = { c: callback, f: fulfill }));\n\t\t}),\n\t\tabort() {\n\t\t\traf.tasks.delete(task);\n\t\t}\n\t};\n}\n","/** @import { AnimateFn, Animation, AnimationConfig, EachItem, Effect, EffectNodes, TransitionFn, TransitionManager } from '#client' */\nimport { noop, is_function } from '../../../shared/utils.js';\nimport { effect } from '../../reactivity/effects.js';\nimport { active_effect, untrack } from '../../runtime.js';\nimport { loop } from '../../loop.js';\nimport { should_intro } from '../../render.js';\nimport { TRANSITION_GLOBAL, TRANSITION_IN, TRANSITION_OUT } from '../../../../constants.js';\nimport { BLOCK_EFFECT, REACTION_RAN, EFFECT_TRANSPARENT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/**\n * @param {Element} element\n * @param {'introstart' | 'introend' | 'outrostart' | 'outroend'} type\n * @returns {void}\n */\nfunction dispatch_event(element, type) {\n\twithout_reactive_context(() => {\n\t\telement.dispatchEvent(new CustomEvent(type));\n\t});\n}\n\n/**\n * Converts a property to the camel-case format expected by Element.animate(), KeyframeEffect(), and KeyframeEffect.setKeyframes().\n * @param {string} style\n * @returns {string}\n */\nfunction css_property_to_camelcase(style) {\n\t// in compliance with spec\n\tif (style === 'float') return 'cssFloat';\n\tif (style === 'offset') return 'cssOffset';\n\n\t// do not rename custom @properties\n\tif (style.startsWith('--')) return style;\n\n\tconst parts = style.split('-');\n\tif (parts.length === 1) return parts[0];\n\treturn (\n\t\tparts[0] +\n\t\tparts\n\t\t\t.slice(1)\n\t\t\t.map(/** @param {any} word */ (word) => word[0].toUpperCase() + word.slice(1))\n\t\t\t.join('')\n\t);\n}\n\n/**\n * @param {string} css\n * @returns {Keyframe}\n */\nfunction css_to_keyframe(css) {\n\t/** @type {Keyframe} */\n\tconst keyframe = {};\n\tconst parts = css.split(';');\n\tfor (const part of parts) {\n\t\tconst [property, value] = part.split(':');\n\t\tif (!property || value === undefined) break;\n\n\t\tconst formatted_property = css_property_to_camelcase(property.trim());\n\t\tkeyframe[formatted_property] = value.trim();\n\t}\n\treturn keyframe;\n}\n\n/** @param {number} t */\nconst linear = (t) => t;\n\n/** @type {Effect | null} */\nlet animation_effect_override = null;\n\n/** @param {Effect | null} v */\nexport function set_animation_effect_override(v) {\n\tanimation_effect_override = v;\n}\n\n/**\n * Called inside keyed `{#each ...}` blocks (as `$.animation(...)`). This creates an animation manager\n * and attaches it to the block, so that moves can be animated following reconciliation.\n * @template P\n * @param {Element} element\n * @param {() => AnimateFn<P | undefined>} get_fn\n * @param {(() => P) | null} get_params\n */\nexport function animation(element, get_fn, get_params) {\n\tvar effect = animation_effect_override ?? /** @type {Effect} */ (active_effect);\n\tvar nodes = /** @type {EffectNodes} */ (effect.nodes);\n\n\t/** @type {DOMRect} */\n\tvar from;\n\n\t/** @type {DOMRect} */\n\tvar to;\n\n\t/** @type {Animation | undefined} */\n\tvar animation;\n\n\t/** @type {null | { position: string, width: string, height: string, transform: string }} */\n\tvar original_styles = null;\n\n\tnodes.a ??= {\n\t\telement,\n\t\tmeasure() {\n\t\t\tfrom = this.element.getBoundingClientRect();\n\t\t},\n\t\tapply() {\n\t\t\tanimation?.abort();\n\n\t\t\tto = this.element.getBoundingClientRect();\n\n\t\t\tif (\n\t\t\t\tfrom.left !== to.left ||\n\t\t\t\tfrom.right !== to.right ||\n\t\t\t\tfrom.top !== to.top ||\n\t\t\t\tfrom.bottom !== to.bottom\n\t\t\t) {\n\t\t\t\tconst options = get_fn()(this.element, { from, to }, get_params?.());\n\n\t\t\t\tanimation = animate(this.element, options, undefined, 1, () => {\n\t\t\t\t\tanimation?.abort();\n\t\t\t\t\tanimation = undefined;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tfix() {\n\t\t\t// If an animation is already running, transforming the element is likely to fail,\n\t\t\t// because the styles applied by the animation take precedence. In the case of crossfade,\n\t\t\t// that means the `translate(...)` of the crossfade transition overrules the `translate(...)`\n\t\t\t// we would apply below, leading to the element jumping somewhere to the top left.\n\t\t\tif (element.getAnimations().length) return;\n\n\t\t\t// It's important to destructure these to get fixed values - the object itself has getters,\n\t\t\t// and changing the style to 'absolute' can for example influence the width.\n\t\t\tvar { position, width, height } = getComputedStyle(element);\n\n\t\t\tif (position !== 'absolute' && position !== 'fixed') {\n\t\t\t\tvar style = /** @type {HTMLElement | SVGElement} */ (element).style;\n\n\t\t\t\toriginal_styles = {\n\t\t\t\t\tposition: style.position,\n\t\t\t\t\twidth: style.width,\n\t\t\t\t\theight: style.height,\n\t\t\t\t\ttransform: style.transform\n\t\t\t\t};\n\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.height = height;\n\t\t\t\tvar to = element.getBoundingClientRect();\n\n\t\t\t\tif (from.left !== to.left || from.top !== to.top) {\n\t\t\t\t\tvar transform = `translate(${from.left - to.left}px, ${from.top - to.top}px)`;\n\t\t\t\t\tstyle.transform = style.transform ? `${style.transform} ${transform}` : transform;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tunfix() {\n\t\t\tif (original_styles) {\n\t\t\t\tvar style = /** @type {HTMLElement | SVGElement} */ (element).style;\n\n\t\t\t\tstyle.position = original_styles.position;\n\t\t\t\tstyle.width = original_styles.width;\n\t\t\t\tstyle.height = original_styles.height;\n\t\t\t\tstyle.transform = original_styles.transform;\n\t\t\t}\n\t\t}\n\t};\n\n\t// in the case of a `<svelte:element>`, it's possible for `$.animation(...)` to be called\n\t// when an animation manager already exists, if the tag changes. in that case, we need to\n\t// swap out the element rather than creating a new manager, in case it happened at the same\n\t// moment as a reconciliation\n\tnodes.a.element = element;\n}\n\n/**\n * Called inside block effects as `$.transition(...)`. This creates a transition manager and\n * attaches it to the current effect — later, inside `pause_effect` and `resume_effect`, we\n * use this to create `intro` and `outro` transitions.\n * @template P\n * @param {number} flags\n * @param {HTMLElement} element\n * @param {() => TransitionFn<P | undefined>} get_fn\n * @param {(() => P) | null} get_params\n * @returns {void}\n */\nexport function transition(flags, element, get_fn, get_params) {\n\tvar is_intro = (flags & TRANSITION_IN) !== 0;\n\tvar is_outro = (flags & TRANSITION_OUT) !== 0;\n\tvar is_both = is_intro && is_outro;\n\tvar is_global = (flags & TRANSITION_GLOBAL) !== 0;\n\n\t/** @type {'in' | 'out' | 'both'} */\n\tvar direction = is_both ? 'both' : is_intro ? 'in' : 'out';\n\n\t/** @type {AnimationConfig | ((opts: { direction: 'in' | 'out' }) => AnimationConfig) | undefined} */\n\tvar current_options;\n\n\tvar inert = element.inert;\n\n\t/**\n\t * The default overflow style, stashed so we can revert changes during the transition\n\t * that are necessary to work around a Safari <18 bug\n\t * TODO 6.0 remove this, if older versions of Safari have died out enough\n\t */\n\tvar overflow = element.style.overflow;\n\n\t/** @type {Animation | undefined} */\n\tvar intro;\n\n\t/** @type {Animation | undefined} */\n\tvar outro;\n\n\tfunction get_options() {\n\t\treturn without_reactive_context(() => {\n\t\t\t// If a transition is still ongoing, we use the existing options rather than generating\n\t\t\t// new ones. This ensures that reversible transitions reverse smoothly, rather than\n\t\t\t// jumping to a new spot because (for example) a different `duration` was used\n\t\t\treturn (current_options ??= get_fn()(element, get_params?.() ?? /** @type {P} */ ({}), {\n\t\t\t\tdirection\n\t\t\t}));\n\t\t});\n\t}\n\n\t/** @type {TransitionManager} */\n\tvar transition = {\n\t\tis_global,\n\t\tin() {\n\t\t\telement.inert = inert;\n\n\t\t\tif (!is_intro) {\n\t\t\t\toutro?.abort();\n\t\t\t\toutro?.reset?.();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!is_outro) {\n\t\t\t\t// if we intro then outro then intro again, we want to abort the first intro,\n\t\t\t\t// if it's not a bidirectional transition\n\t\t\t\tintro?.abort();\n\t\t\t}\n\n\t\t\tintro = animate(element, get_options(), outro, 1, () => {\n\t\t\t\tdispatch_event(element, 'introend');\n\n\t\t\t\t// Ensure we cancel the animation to prevent leaking\n\t\t\t\tintro?.abort();\n\t\t\t\tintro = current_options = undefined;\n\n\t\t\t\telement.style.overflow = overflow;\n\t\t\t});\n\t\t},\n\t\tout(fn) {\n\t\t\tif (!is_outro) {\n\t\t\t\tfn?.();\n\t\t\t\tcurrent_options = undefined;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telement.inert = true;\n\n\t\t\toutro = animate(element, get_options(), intro, 0, () => {\n\t\t\t\tdispatch_event(element, 'outroend');\n\t\t\t\tfn?.();\n\t\t\t});\n\t\t},\n\t\tstop: () => {\n\t\t\tintro?.abort();\n\t\t\toutro?.abort();\n\t\t}\n\t};\n\n\tvar e = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t(e.nodes.t ??= []).push(transition);\n\n\t// if this is a local transition, we only want to run it if the parent (branch) effect's\n\t// parent (block) effect is where the state change happened. we can determine that by\n\t// looking at whether the block effect is currently initializing\n\tif (is_intro && should_intro) {\n\t\tvar run = is_global;\n\n\t\tif (!run) {\n\t\t\tvar block = /** @type {Effect | null} */ (e.parent);\n\n\t\t\t// skip over transparent blocks (e.g. snippets, else-if blocks)\n\t\t\twhile (block && (block.f & EFFECT_TRANSPARENT) !== 0) {\n\t\t\t\twhile ((block = block.parent)) {\n\t\t\t\t\tif ((block.f & BLOCK_EFFECT) !== 0) break;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trun = !block || (block.f & REACTION_RAN) !== 0;\n\t\t}\n\n\t\tif (run) {\n\t\t\teffect(() => {\n\t\t\t\tuntrack(() => transition.in());\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Animates an element, according to the provided configuration\n * @param {Element} element\n * @param {AnimationConfig | ((opts: { direction: 'in' | 'out' }) => AnimationConfig)} options\n * @param {Animation | undefined} counterpart The corresponding intro/outro to this outro/intro\n * @param {number} t2 The target `t` value — `1` for intro, `0` for outro\n * @param {(() => void)} on_finish Called after successfully completing the animation\n * @returns {Animation}\n */\nfunction animate(element, options, counterpart, t2, on_finish) {\n\tvar is_intro = t2 === 1;\n\n\tif (is_function(options)) {\n\t\t// In the case of a deferred transition (such as `crossfade`), `option` will be\n\t\t// a function rather than an `AnimationConfig`. We need to call this function\n\t\t// once the DOM has been updated...\n\t\t/** @type {Animation} */\n\t\tvar a;\n\t\tvar aborted = false;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (aborted) return;\n\t\t\tvar o = options({ direction: is_intro ? 'in' : 'out' });\n\t\t\ta = animate(element, o, counterpart, t2, on_finish);\n\t\t});\n\n\t\t// ...but we want to do so without using `async`/`await` everywhere, so\n\t\t// we return a facade that allows everything to remain synchronous\n\t\treturn {\n\t\t\tabort: () => {\n\t\t\t\taborted = true;\n\t\t\t\ta?.abort();\n\t\t\t},\n\t\t\tdeactivate: () => a.deactivate(),\n\t\t\treset: () => a.reset(),\n\t\t\tt: () => a.t()\n\t\t};\n\t}\n\n\tcounterpart?.deactivate();\n\n\tif (!options?.duration && !options?.delay) {\n\t\tdispatch_event(element, is_intro ? 'introstart' : 'outrostart');\n\t\ton_finish();\n\n\t\treturn {\n\t\t\tabort: noop,\n\t\t\tdeactivate: noop,\n\t\t\treset: noop,\n\t\t\tt: () => t2\n\t\t};\n\t}\n\n\tconst { delay = 0, css, tick, easing = linear } = options;\n\n\tvar keyframes = [];\n\n\tif (is_intro && counterpart === undefined) {\n\t\tif (tick) {\n\t\t\ttick(0, 1); // TODO put in nested effect, to avoid interleaved reads/writes?\n\t\t}\n\n\t\tif (css) {\n\t\t\tvar styles = css_to_keyframe(css(0, 1));\n\t\t\tkeyframes.push(styles, styles);\n\t\t}\n\t}\n\n\tvar get_t = () => 1 - t2;\n\n\t// create a dummy animation that lasts as long as the delay (but with whatever devtools\n\t// multiplier is in effect). in the common case that it is `0`, we keep it anyway so that\n\t// the CSS keyframes aren't created until the DOM is updated\n\t//\n\t// fill forwards to prevent the element from rendering without styles applied\n\t// see https://github.com/sveltejs/svelte/issues/14732\n\tvar animation = element.animate(keyframes, { duration: delay, fill: 'forwards' });\n\n\tanimation.onfinish = () => {\n\t\t// remove dummy animation from the stack to prevent conflict with main animation\n\t\tanimation.cancel();\n\n\t\tdispatch_event(element, is_intro ? 'introstart' : 'outrostart');\n\n\t\t// for bidirectional transitions, we start from the current position,\n\t\t// rather than doing a full intro/outro\n\t\tvar t1 = counterpart?.t() ?? 1 - t2;\n\t\tcounterpart?.abort();\n\n\t\tvar delta = t2 - t1;\n\t\tvar duration = /** @type {number} */ (options.duration) * Math.abs(delta);\n\t\tvar keyframes = [];\n\n\t\tif (duration > 0) {\n\t\t\t/**\n\t\t\t * Whether or not the CSS includes `overflow: hidden`, in which case we need to\n\t\t\t * add it as an inline style to work around a Safari <18 bug\n\t\t\t * TODO 6.0 remove this, if possible\n\t\t\t */\n\t\t\tvar needs_overflow_hidden = false;\n\n\t\t\tif (css) {\n\t\t\t\tvar n = Math.ceil(duration / (1000 / 60)); // `n` must be an integer, or we risk missing the `t2` value\n\n\t\t\t\tfor (var i = 0; i <= n; i += 1) {\n\t\t\t\t\tvar t = t1 + delta * easing(i / n);\n\t\t\t\t\tvar styles = css_to_keyframe(css(t, 1 - t));\n\t\t\t\t\tkeyframes.push(styles);\n\n\t\t\t\t\tneeds_overflow_hidden ||= styles.overflow === 'hidden';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (needs_overflow_hidden) {\n\t\t\t\t/** @type {HTMLElement} */ (element).style.overflow = 'hidden';\n\t\t\t}\n\n\t\t\tget_t = () => {\n\t\t\t\tvar time = /** @type {number} */ (\n\t\t\t\t\t/** @type {globalThis.Animation} */ (animation).currentTime\n\t\t\t\t);\n\n\t\t\t\treturn t1 + delta * easing(time / duration);\n\t\t\t};\n\n\t\t\tif (tick) {\n\t\t\t\tloop(() => {\n\t\t\t\t\tif (animation.playState !== 'running') return false;\n\n\t\t\t\t\tvar t = get_t();\n\t\t\t\t\ttick(t, 1 - t);\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tanimation = element.animate(keyframes, { duration, fill: 'forwards' });\n\n\t\tanimation.onfinish = () => {\n\t\t\tget_t = () => t2;\n\t\t\ttick?.(t2, 1 - t2);\n\t\t\ton_finish();\n\t\t};\n\t};\n\n\treturn {\n\t\tabort: () => {\n\t\t\tif (animation) {\n\t\t\t\tanimation.cancel();\n\t\t\t\t// This prevents memory leaks in Chromium\n\t\t\t\tanimation.effect = null;\n\t\t\t\t// This prevents onfinish to be launched after cancel(),\n\t\t\t\t// which can happen in some rare cases\n\t\t\t\t// see https://github.com/sveltejs/svelte/issues/13681\n\t\t\t\tanimation.onfinish = noop;\n\t\t\t}\n\t\t},\n\t\tdeactivate: () => {\n\t\t\ton_finish = noop;\n\t\t},\n\t\treset: () => {\n\t\t\tif (t2 === 0) {\n\t\t\t\ttick?.(1, 0);\n\t\t\t}\n\t\t},\n\t\tt: () => get_t()\n\t};\n}\n","/** @import { Effect, EffectNodes, TemplateNode } from '#client' */\nimport { FILENAME, NAMESPACE_SVG } from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { create_element, create_text, get_first_child } from '../operations.js';\nimport { block, teardown } from '../../reactivity/effects.js';\nimport { set_should_intro } from '../../render.js';\nimport { active_effect } from '../../runtime.js';\nimport { component_context, dev_stack } from '../../context.js';\nimport { DEV } from 'esm-env';\nimport { EFFECT_TRANSPARENT, ELEMENT_NODE } from '#client/constants';\nimport { assign_nodes } from '../template.js';\nimport { is_raw_text_element } from '../../../../utils.js';\nimport { BranchManager } from './branches.js';\nimport { set_animation_effect_override } from '../elements/transitions.js';\n\n/**\n * @param {Comment | Element} node\n * @param {() => string} get_tag\n * @param {boolean} is_svg\n * @param {undefined | ((element: Element, anchor: Node | null) => void)} render_fn,\n * @param {undefined | (() => string)} get_namespace\n * @param {undefined | [number, number]} location\n * @returns {void}\n */\nexport function element(node, get_tag, is_svg, render_fn, get_namespace, location) {\n\tlet was_hydrating = hydrating;\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar filename = DEV && location && component_context?.function[FILENAME];\n\n\t/** @type {null | Element} */\n\tvar element = null;\n\n\tif (hydrating && hydrate_node.nodeType === ELEMENT_NODE) {\n\t\telement = /** @type {Element} */ (hydrate_node);\n\t\thydrate_next();\n\t}\n\n\tvar anchor = /** @type {TemplateNode} */ (hydrating ? hydrate_node : node);\n\n\t/**\n\t * We track this so we can set it when changing the element, allowing any\n\t * `animate:` directive to bind itself to the correct block\n\t */\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\tvar branches = new BranchManager(anchor, false);\n\n\tblock(() => {\n\t\tconst next_tag = get_tag() || null;\n\t\tvar ns = get_namespace\n\t\t\t? get_namespace()\n\t\t\t: is_svg || next_tag === 'svg'\n\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t: undefined;\n\n\t\tif (next_tag === null) {\n\t\t\tbranches.ensure(null, null);\n\t\t\tset_should_intro(true);\n\t\t\treturn;\n\t\t}\n\n\t\tbranches.ensure(next_tag, (anchor) => {\n\t\t\tif (next_tag) {\n\t\t\t\telement = hydrating ? /** @type {Element} */ (element) : create_element(next_tag, ns);\n\n\t\t\t\tif (DEV && location) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\telement.__svelte_meta = {\n\t\t\t\t\t\tparent: dev_stack,\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tfile: filename,\n\t\t\t\t\t\t\tline: location[0],\n\t\t\t\t\t\t\tcolumn: location[1]\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tassign_nodes(element, element);\n\n\t\t\t\tif (render_fn) {\n\t\t\t\t\tif (hydrating && is_raw_text_element(next_tag)) {\n\t\t\t\t\t\t// prevent hydration glitches\n\t\t\t\t\t\telement.append(document.createComment(''));\n\t\t\t\t\t}\n\n\t\t\t\t\t// If hydrating, use the existing ssr comment as the anchor so that the\n\t\t\t\t\t// inner open and close methods can pick up the existing nodes correctly\n\t\t\t\t\tvar child_anchor = hydrating\n\t\t\t\t\t\t? get_first_child(element)\n\t\t\t\t\t\t: element.appendChild(create_text());\n\n\t\t\t\t\tif (hydrating) {\n\t\t\t\t\t\tif (child_anchor === null) {\n\t\t\t\t\t\t\tset_hydrating(false);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tset_hydrate_node(child_anchor);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tset_animation_effect_override(parent_effect);\n\n\t\t\t\t\t// `child_anchor` is undefined if this is a void element, but we still\n\t\t\t\t\t// need to call `render_fn` in order to run actions etc. If the element\n\t\t\t\t\t// contains children, it's a user error (which is warned on elsewhere)\n\t\t\t\t\t// and the DOM will be silently discarded\n\t\t\t\t\trender_fn(element, child_anchor);\n\n\t\t\t\t\tset_animation_effect_override(null);\n\t\t\t\t}\n\n\t\t\t\t// we do this after calling `render_fn` so that child effects don't override `nodes.end`\n\t\t\t\t/** @type {Effect & { nodes: EffectNodes }} */ (active_effect).nodes.end = element;\n\n\t\t\t\tanchor.before(element);\n\t\t\t}\n\n\t\t\tif (hydrating) {\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t}\n\t\t});\n\n\t\t// revert to the default state after the effect has been created\n\t\tset_should_intro(true);\n\n\t\treturn () => {\n\t\t\tif (next_tag) {\n\t\t\t\t// if we're in this callback because we're re-running the effect,\n\t\t\t\t// disable intros (unless no element is currently displayed)\n\t\t\t\tset_should_intro(false);\n\t\t\t}\n\t\t};\n\t}, EFFECT_TRANSPARENT);\n\n\tteardown(() => {\n\t\tset_should_intro(true);\n\t});\n\n\tif (was_hydrating) {\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(anchor);\n\t}\n}\n","/** @import { TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from '../hydration.js';\nimport { create_text, get_first_child, get_next_sibling } from '../operations.js';\nimport { block } from '../../reactivity/effects.js';\nimport { COMMENT_NODE, EFFECT_PRESERVED, HEAD_EFFECT } from '#client/constants';\n\n/**\n * @param {string} hash\n * @param {(anchor: Node) => void} render_fn\n * @returns {void}\n */\nexport function head(hash, render_fn) {\n\t// The head function may be called after the first hydration pass and ssr comment nodes may still be present,\n\t// therefore we need to skip that when we detect that we're not in hydration mode.\n\tlet previous_hydrate_node = null;\n\tlet was_hydrating = hydrating;\n\n\t/** @type {Comment | Text} */\n\tvar anchor;\n\n\tif (hydrating) {\n\t\tprevious_hydrate_node = hydrate_node;\n\n\t\tvar head_anchor = get_first_child(document.head);\n\n\t\t// There might be multiple head blocks in our app, and they could have been\n\t\t// rendered in an arbitrary order — find one corresponding to this component\n\t\twhile (\n\t\t\thead_anchor !== null &&\n\t\t\t(head_anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (head_anchor).data !== hash)\n\t\t) {\n\t\t\thead_anchor = get_next_sibling(head_anchor);\n\t\t}\n\n\t\t// If we can't find an opening hydration marker, skip hydration (this can happen\n\t\t// if a framework rendered body but not head content)\n\t\tif (head_anchor === null) {\n\t\t\tset_hydrating(false);\n\t\t} else {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_next_sibling(head_anchor));\n\t\t\thead_anchor.remove(); // in case this component is repeated\n\n\t\t\tset_hydrate_node(start);\n\t\t}\n\t}\n\n\tif (!hydrating) {\n\t\tanchor = document.head.appendChild(create_text());\n\t}\n\n\ttry {\n\t\t// normally a branch is the child of a block and would have the EFFECT_PRESERVED flag,\n\t\t// but since head blocks don't necessarily only have direct branch children we add it on the block itself\n\t\tblock(() => render_fn(anchor), HEAD_EFFECT | EFFECT_PRESERVED);\n\t} finally {\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (previous_hydrate_node));\n\t\t}\n\t}\n}\n","/** @import { ActionPayload } from '#client' */\nimport { effect, render_effect } from '../../reactivity/effects.js';\nimport { safe_not_equal } from '../../reactivity/equality.js';\nimport { deep_read_state, untrack } from '../../runtime.js';\n\n/**\n * @template P\n * @param {Element} dom\n * @param {(dom: Element, value?: P) => ActionPayload<P>} action\n * @param {() => P} [get_value]\n * @returns {void}\n */\nexport function action(dom, action, get_value) {\n\teffect(() => {\n\t\tvar payload = untrack(() => action(dom, get_value?.()) || {});\n\n\t\tif (get_value && payload?.update) {\n\t\t\tvar inited = false;\n\t\t\t/** @type {P} */\n\t\t\tvar prev = /** @type {any} */ ({}); // initialize with something so it's never equal on first run\n\n\t\t\trender_effect(() => {\n\t\t\t\tvar value = get_value();\n\n\t\t\t\t// Action's update method is coarse-grained, i.e. when anything in the passed value changes, update.\n\t\t\t\t// This works in legacy mode because of mutable_source being updated as a whole, but when using $state\n\t\t\t\t// together with actions and mutation, it wouldn't notice the change without a deep read.\n\t\t\t\tdeep_read_state(value);\n\n\t\t\t\tif (inited && safe_not_equal(prev, value)) {\n\t\t\t\t\tprev = value;\n\t\t\t\t\t/** @type {Function} */ (payload.update)(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinited = true;\n\t\t}\n\n\t\tif (payload?.destroy) {\n\t\t\treturn () => /** @type {Function} */ (payload.destroy)();\n\t\t}\n\t});\n}\n","/** @import { Effect } from '#client' */\nimport { branch, effect, destroy_effect, managed } from '../../reactivity/effects.js';\n\n// TODO in 6.0 or 7.0, when we remove legacy mode, we can simplify this by\n// getting rid of the block/branch stuff and just letting the effect rip.\n// see https://github.com/sveltejs/svelte/pull/15962\n\n/**\n * @param {Element} node\n * @param {() => (node: Element) => void} get_fn\n */\nexport function attach(node, get_fn) {\n\t/** @type {false | undefined | ((node: Element) => void)} */\n\tvar fn = undefined;\n\n\t/** @type {Effect | null} */\n\tvar e;\n\n\tmanaged(() => {\n\t\tif (fn !== (fn = get_fn())) {\n\t\t\tif (e) {\n\t\t\t\tdestroy_effect(e);\n\t\t\t\te = null;\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\te = branch(() => {\n\t\t\t\t\teffect(() => /** @type {(node: Element) => void} */ (fn)(node));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { escape_html } from '../../escaping.js';\nimport { clsx as _clsx } from 'clsx';\nimport { has_own_property } from './utils.js';\n\n/**\n * `<div translate={false}>` should be rendered as `<div translate=\"no\">` and _not_\n * `<div translate=\"false\">`, which is equivalent to `<div translate=\"yes\">`. There\n * may be other odd cases that need to be added to this list in future\n * @type {Record<string, Map<any, string>>}\n */\nconst replacements = {\n\ttranslate: new Map([\n\t\t[true, 'yes'],\n\t\t[false, 'no']\n\t])\n};\n\n/**\n * @template V\n * @param {string} name\n * @param {V} value\n * @param {boolean} [is_boolean]\n * @returns {string}\n */\nexport function attr(name, value, is_boolean = false) {\n\t// attribute hidden for values other than \"until-found\" behaves like a boolean attribute\n\tif (name === 'hidden' && value !== 'until-found') {\n\t\tis_boolean = true;\n\t}\n\tif (value == null || (!value && is_boolean)) return '';\n\tconst normalized =\n\t\t(has_own_property.call(replacements, name) && replacements[name].get(value)) || value;\n\tconst assignment = is_boolean ? `=\"\"` : `=\"${escape_html(normalized, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * Small wrapper around clsx to preserve Svelte's (weird) handling of falsy values.\n * TODO Svelte 6 revisit this, and likely turn all falsy values into the empty string (what clsx also does)\n * @param  {any} value\n */\nexport function clsx(value) {\n\tif (typeof value === 'object') {\n\t\treturn _clsx(value);\n\t} else {\n\t\treturn value ?? '';\n\t}\n}\n\nconst whitespace = [...' \\t\\n\\r\\f\\u00a0\\u000b\\ufeff'];\n\n/**\n * @param {any} value\n * @param {string | null} [hash]\n * @param {Record<string, boolean>} [directives]\n * @returns {string | null}\n */\nexport function to_class(value, hash, directives) {\n\tvar classname = value == null ? '' : '' + value;\n\n\tif (hash) {\n\t\tclassname = classname ? classname + ' ' + hash : hash;\n\t}\n\n\tif (directives) {\n\t\tfor (var key of Object.keys(directives)) {\n\t\t\tif (directives[key]) {\n\t\t\t\tclassname = classname ? classname + ' ' + key : key;\n\t\t\t} else if (classname.length) {\n\t\t\t\tvar len = key.length;\n\t\t\t\tvar a = 0;\n\n\t\t\t\twhile ((a = classname.indexOf(key, a)) >= 0) {\n\t\t\t\t\tvar b = a + len;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(a === 0 || whitespace.includes(classname[a - 1])) &&\n\t\t\t\t\t\t(b === classname.length || whitespace.includes(classname[b]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tclassname = (a === 0 ? '' : classname.substring(0, a)) + classname.substring(b + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = b;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn classname === '' ? null : classname;\n}\n\n/**\n *\n * @param {Record<string,any>} styles\n * @param {boolean} important\n */\nfunction append_styles(styles, important = false) {\n\tvar separator = important ? ' !important;' : ';';\n\tvar css = '';\n\n\tfor (var key of Object.keys(styles)) {\n\t\tvar value = styles[key];\n\t\tif (value != null && value !== '') {\n\t\t\tcss += ' ' + key + ': ' + value + separator;\n\t\t}\n\t}\n\n\treturn css;\n}\n\n/**\n * @param {string} name\n * @returns {string}\n */\nfunction to_css_name(name) {\n\tif (name[0] !== '-' || name[1] !== '-') {\n\t\treturn name.toLowerCase();\n\t}\n\treturn name;\n}\n\n/**\n * @param {any} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [styles]\n * @returns {string | null}\n */\nexport function to_style(value, styles) {\n\tif (styles) {\n\t\tvar new_style = '';\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar normal_styles;\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar important_styles;\n\n\t\tif (Array.isArray(styles)) {\n\t\t\tnormal_styles = styles[0];\n\t\t\timportant_styles = styles[1];\n\t\t} else {\n\t\t\tnormal_styles = styles;\n\t\t}\n\n\t\tif (value) {\n\t\t\tvalue = String(value)\n\t\t\t\t.replaceAll(/\\s*\\/\\*.*?\\*\\/\\s*/g, '')\n\t\t\t\t.trim();\n\n\t\t\t/** @type {boolean | '\"' | \"'\"} */\n\t\t\tvar in_str = false;\n\t\t\tvar in_apo = 0;\n\t\t\tvar in_comment = false;\n\n\t\t\tvar reserved_names = [];\n\n\t\t\tif (normal_styles) {\n\t\t\t\treserved_names.push(...Object.keys(normal_styles).map(to_css_name));\n\t\t\t}\n\t\t\tif (important_styles) {\n\t\t\t\treserved_names.push(...Object.keys(important_styles).map(to_css_name));\n\t\t\t}\n\n\t\t\tvar start_index = 0;\n\t\t\tvar name_index = -1;\n\n\t\t\tconst len = value.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar c = value[i];\n\n\t\t\t\tif (in_comment) {\n\t\t\t\t\tif (c === '/' && value[i - 1] === '*') {\n\t\t\t\t\t\tin_comment = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (in_str) {\n\t\t\t\t\tif (in_str === c) {\n\t\t\t\t\t\tin_str = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (c === '/' && value[i + 1] === '*') {\n\t\t\t\t\tin_comment = true;\n\t\t\t\t} else if (c === '\"' || c === \"'\") {\n\t\t\t\t\tin_str = c;\n\t\t\t\t} else if (c === '(') {\n\t\t\t\t\tin_apo++;\n\t\t\t\t} else if (c === ')') {\n\t\t\t\t\tin_apo--;\n\t\t\t\t}\n\n\t\t\t\tif (!in_comment && in_str === false && in_apo === 0) {\n\t\t\t\t\tif (c === ':' && name_index === -1) {\n\t\t\t\t\t\tname_index = i;\n\t\t\t\t\t} else if (c === ';' || i === len - 1) {\n\t\t\t\t\t\tif (name_index !== -1) {\n\t\t\t\t\t\t\tvar name = to_css_name(value.substring(start_index, name_index).trim());\n\n\t\t\t\t\t\t\tif (!reserved_names.includes(name)) {\n\t\t\t\t\t\t\t\tif (c !== ';') {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar property = value.substring(start_index, i).trim();\n\t\t\t\t\t\t\t\tnew_style += ' ' + property + ';';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart_index = i + 1;\n\t\t\t\t\t\tname_index = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (normal_styles) {\n\t\t\tnew_style += append_styles(normal_styles);\n\t\t}\n\n\t\tif (important_styles) {\n\t\t\tnew_style += append_styles(important_styles, true);\n\t\t}\n\n\t\tnew_style = new_style.trim();\n\t\treturn new_style === '' ? null : new_style;\n\t}\n\n\treturn value == null ? null : String(value);\n}\n","import { to_class } from '../../../shared/attributes.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element} dom\n * @param {boolean | number} is_html\n * @param {string | null} value\n * @param {string} [hash]\n * @param {Record<string, any>} [prev_classes]\n * @param {Record<string, any>} [next_classes]\n * @returns {Record<string, boolean> | undefined}\n */\nexport function set_class(dom, is_html, value, hash, prev_classes, next_classes) {\n\t// @ts-expect-error need to add __className to patched prototype\n\tvar prev = dom.__className;\n\n\tif (\n\t\thydrating ||\n\t\tprev !== value ||\n\t\tprev === undefined // for edge case of `class={undefined}`\n\t) {\n\t\tvar next_class_name = to_class(value, hash, next_classes);\n\n\t\tif (!hydrating || next_class_name !== dom.getAttribute('class')) {\n\t\t\t// Removing the attribute when the value is only an empty string causes\n\t\t\t// performance issues vs simply making the className an empty string. So\n\t\t\t// we should only remove the class if the value is nullish\n\t\t\t// and there no hash/directives :\n\t\t\tif (next_class_name == null) {\n\t\t\t\tdom.removeAttribute('class');\n\t\t\t} else if (is_html) {\n\t\t\t\tdom.className = next_class_name;\n\t\t\t} else {\n\t\t\t\tdom.setAttribute('class', next_class_name);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = value;\n\t} else if (next_classes && prev_classes !== next_classes) {\n\t\tfor (var key in next_classes) {\n\t\t\tvar is_present = !!next_classes[key];\n\n\t\t\tif (prev_classes == null || is_present !== !!prev_classes[key]) {\n\t\t\t\tdom.classList.toggle(key, is_present);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn next_classes;\n}\n","import { to_style } from '../../../shared/attributes.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {Record<string, any>} prev\n * @param {Record<string, any>} next\n * @param {string} [priority]\n */\nfunction update_styles(dom, prev = {}, next, priority) {\n\tfor (var key in next) {\n\t\tvar value = next[key];\n\n\t\tif (prev[key] !== value) {\n\t\t\tif (next[key] == null) {\n\t\t\t\tdom.style.removeProperty(key);\n\t\t\t} else {\n\t\t\t\tdom.style.setProperty(key, value, priority);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {string | null} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [prev_styles]\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [next_styles]\n */\nexport function set_style(dom, value, prev_styles, next_styles) {\n\t// @ts-expect-error\n\tvar prev = dom.__style;\n\n\tif (hydrating || prev !== value) {\n\t\tvar next_style_attr = to_style(value, next_styles);\n\n\t\tif (!hydrating || next_style_attr !== dom.getAttribute('style')) {\n\t\t\tif (next_style_attr == null) {\n\t\t\t\tdom.removeAttribute('style');\n\t\t\t} else {\n\t\t\t\tdom.style.cssText = next_style_attr;\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\tdom.__style = value;\n\t} else if (next_styles) {\n\t\tif (Array.isArray(next_styles)) {\n\t\t\tupdate_styles(dom, prev_styles?.[0], next_styles[0]);\n\t\t\tupdate_styles(dom, prev_styles?.[1], next_styles[1], 'important');\n\t\t} else {\n\t\t\tupdate_styles(dom, prev_styles, next_styles);\n\t\t}\n\t}\n\n\treturn next_styles;\n}\n","import { effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport { is } from '../../../proxy.js';\nimport { is_array } from '../../../../shared/utils.js';\nimport * as w from '../../../warnings.js';\nimport { Batch, current_batch, previous_batch } from '../../../reactivity/batch.js';\nimport { async_mode_flag } from '../../../../flags/index.js';\n\n/**\n * Selects the correct option(s) (depending on whether this is a multiple select)\n * @template V\n * @param {HTMLSelectElement} select\n * @param {V} value\n * @param {boolean} mounting\n */\nexport function select_option(select, value, mounting = false) {\n\tif (select.multiple) {\n\t\t// If value is null or undefined, keep the selection as is\n\t\tif (value == undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If not an array, warn and keep the selection as is\n\t\tif (!is_array(value)) {\n\t\t\treturn w.select_multiple_invalid_value();\n\t\t}\n\n\t\t// Otherwise, update the selection\n\t\tfor (var option of select.options) {\n\t\t\toption.selected = value.includes(get_option_value(option));\n\t\t}\n\n\t\treturn;\n\t}\n\n\tfor (option of select.options) {\n\t\tvar option_value = get_option_value(option);\n\t\tif (is(option_value, value)) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * Selects the correct option(s) if `value` is given,\n * and then sets up a mutation observer to sync the\n * current selection to the dom when it changes. Such\n * changes could for example occur when options are\n * inside an `#each` block.\n * @param {HTMLSelectElement} select\n */\nexport function init_select(select) {\n\tvar observer = new MutationObserver(() => {\n\t\t// @ts-ignore\n\t\tselect_option(select, select.__value);\n\t\t// Deliberately don't update the potential binding value,\n\t\t// the model should be preserved unless explicitly changed\n\t});\n\n\tobserver.observe(select, {\n\t\t// Listen to option element changes\n\t\tchildList: true,\n\t\tsubtree: true, // because of <optgroup>\n\t\t// Listen to option element value attribute changes\n\t\t// (doesn't get notified of select value changes,\n\t\t// because that property is not reflected as an attribute)\n\t\tattributes: true,\n\t\tattributeFilter: ['value']\n\t});\n\n\tteardown(() => {\n\t\tobserver.disconnect();\n\t});\n}\n\n/**\n * @param {HTMLSelectElement} select\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_select_value(select, get, set = get) {\n\tvar batches = new WeakSet();\n\tvar mounting = true;\n\n\tlisten_to_event_and_reset_event(select, 'change', (is_reset) => {\n\t\tvar query = is_reset ? '[selected]' : ':checked';\n\t\t/** @type {unknown} */\n\t\tvar value;\n\n\t\tif (select.multiple) {\n\t\t\tvalue = [].map.call(select.querySelectorAll(query), get_option_value);\n\t\t} else {\n\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\tvar selected_option =\n\t\t\t\tselect.querySelector(query) ??\n\t\t\t\t// will fall back to first non-disabled option if no option is selected\n\t\t\t\tselect.querySelector('option:not([disabled])');\n\t\t\tvalue = selected_option && get_option_value(selected_option);\n\t\t}\n\n\t\tset(value);\n\n\t\t// @ts-ignore\n\t\tselect.__value = value;\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\t});\n\n\t// Needs to be an effect, not a render_effect, so that in case of each loops the logic runs after the each block has updated\n\teffect(() => {\n\t\tvar value = get();\n\n\t\tif (select === document.activeElement) {\n\t\t\t// In sync mode render effects are executed during tree traversal -> needs current_batch\n\t\t\t// In async mode render effects are flushed once batch resolved, at which point current_batch is null -> needs previous_batch\n\t\t\tvar batch = /** @type {Batch} */ (async_mode_flag ? previous_batch : current_batch);\n\n\t\t\t// Don't update the <select> if it is focused. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the select:\n\t\t\t//\n\t\t\t// <select bind:value={selected}>...</select>\n\t\t\t// <p>{await find(selected)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tselect_option(select, value, mounting);\n\n\t\t// Mounting and value undefined -> take selection from dom\n\t\tif (mounting && value === undefined) {\n\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\tvar selected_option = select.querySelector(':checked');\n\t\t\tif (selected_option !== null) {\n\t\t\t\tvalue = get_option_value(selected_option);\n\t\t\t\tset(value);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-ignore\n\t\tselect.__value = value;\n\t\tmounting = false;\n\t});\n\n\tinit_select(select);\n}\n\n/** @param {HTMLOptionElement} option */\nfunction get_option_value(option) {\n\t// __value only exists if the <option> has a value attribute\n\tif ('__value' in option) {\n\t\treturn option.__value;\n\t} else {\n\t\treturn option.value;\n\t}\n}\n","/** @import { Blocker, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport { hydrating, set_hydrating } from '../hydration.js';\nimport { get_descriptors, get_prototype_of } from '../../../shared/utils.js';\nimport { create_event, delegate, delegated, event, event_symbol } from './events.js';\nimport { add_form_reset_listener, autofocus } from './misc.js';\nimport * as w from '../../warnings.js';\nimport { IS_XHTML, LOADING_ATTR_SYMBOL } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { is_capture_event, can_delegate_event, normalize_attribute } from '../../../../utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { attach } from './attachments.js';\nimport { clsx } from '../../../shared/attributes.js';\nimport { set_class } from './class.js';\nimport { set_style } from './style.js';\nimport { ATTACHMENT_KEY, NAMESPACE_HTML, UNINITIALIZED } from '../../../../constants.js';\nimport { branch, destroy_effect, effect, managed } from '../../reactivity/effects.js';\nimport { init_select, select_option } from './bindings/select.js';\nimport { flatten } from '../../reactivity/async.js';\n\nexport const CLASS = Symbol('class');\nexport const STYLE = Symbol('style');\n\nconst IS_CUSTOM_ELEMENT = Symbol('is custom element');\nconst IS_HTML = Symbol('is html');\n\nconst LINK_TAG = IS_XHTML ? 'link' : 'LINK';\nconst INPUT_TAG = IS_XHTML ? 'input' : 'INPUT';\nconst OPTION_TAG = IS_XHTML ? 'option' : 'OPTION';\nconst SELECT_TAG = IS_XHTML ? 'select' : 'SELECT';\nconst PROGRESS_TAG = IS_XHTML ? 'progress' : 'PROGRESS';\n\n/**\n * The value/checked attribute in the template actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLInputElement} input\n * @returns {void}\n */\nexport function remove_input_defaults(input) {\n\tif (!hydrating) return;\n\n\tvar already_removed = false;\n\n\t// We try and remove the default attributes later, rather than sync during hydration.\n\t// Doing it sync during hydration has a negative impact on performance, but deferring the\n\t// work in an idle task alleviates this greatly. If a form reset event comes in before\n\t// the idle callback, then we ensure the input defaults are cleared just before.\n\tvar remove_defaults = () => {\n\t\tif (already_removed) return;\n\t\talready_removed = true;\n\n\t\t// Remove the attributes but preserve the values\n\t\tif (input.hasAttribute('value')) {\n\t\t\tvar value = input.value;\n\t\t\tset_attribute(input, 'value', null);\n\t\t\tinput.value = value;\n\t\t}\n\n\t\tif (input.hasAttribute('checked')) {\n\t\t\tvar checked = input.checked;\n\t\t\tset_attribute(input, 'checked', null);\n\t\t\tinput.checked = checked;\n\t\t}\n\t};\n\n\t// @ts-expect-error\n\tinput.__on_r = remove_defaults;\n\tqueue_micro_task(remove_defaults);\n\tadd_form_reset_listener();\n}\n\n/**\n * @param {Element} element\n * @param {any} value\n */\nexport function set_value(element, value) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.value ===\n\t\t\t(attributes.value =\n\t\t\t\t// treat null and undefined the same for the initial value\n\t\t\t\tvalue ?? undefined) ||\n\t\t// @ts-expect-error\n\t\t// `progress` elements always need their value set when it's `0`\n\t\t(element.value === value && (value !== 0 || element.nodeName !== PROGRESS_TAG))\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.value = value ?? '';\n}\n\n/**\n * @param {Element} element\n * @param {boolean} checked\n */\nexport function set_checked(element, checked) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.checked ===\n\t\t(attributes.checked =\n\t\t\t// treat null and undefined the same for the initial value\n\t\t\tchecked ?? undefined)\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.checked = checked;\n}\n\n/**\n * Sets the `selected` attribute on an `option` element.\n * Not set through the property because that doesn't reflect to the DOM,\n * which means it wouldn't be taken into account when a form is reset.\n * @param {HTMLOptionElement} element\n * @param {boolean} selected\n */\nexport function set_selected(element, selected) {\n\tif (selected) {\n\t\t// The selected option could've changed via user selection, and\n\t\t// setting the value without this check would set it back.\n\t\tif (!element.hasAttribute('selected')) {\n\t\t\telement.setAttribute('selected', '');\n\t\t}\n\t} else {\n\t\telement.removeAttribute('selected');\n\t}\n}\n\n/**\n * Applies the default checked property without influencing the current checked property.\n * @param {HTMLInputElement} element\n * @param {boolean} checked\n */\nexport function set_default_checked(element, checked) {\n\tconst existing_value = element.checked;\n\telement.defaultChecked = checked;\n\telement.checked = existing_value;\n}\n\n/**\n * Applies the default value property without influencing the current value property.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * @param {string} value\n */\nexport function set_default_value(element, value) {\n\tconst existing_value = element.value;\n\telement.defaultValue = value;\n\telement.value = existing_value;\n}\n\n/**\n * @param {Element} element\n * @param {string} attribute\n * @param {string | null} value\n * @param {boolean} [skip_warning]\n */\nexport function set_attribute(element, attribute, value, skip_warning) {\n\tvar attributes = get_attributes(element);\n\n\tif (hydrating) {\n\t\tattributes[attribute] = element.getAttribute(attribute);\n\n\t\tif (\n\t\t\tattribute === 'src' ||\n\t\t\tattribute === 'srcset' ||\n\t\t\t(attribute === 'href' && element.nodeName === LINK_TAG)\n\t\t) {\n\t\t\tif (!skip_warning) {\n\t\t\t\tcheck_src_in_dev_hydration(element, attribute, value ?? '');\n\t\t\t}\n\n\t\t\t// If we reset these attributes, they would result in another network request, which we want to avoid.\n\t\t\t// We assume they are the same between client and server as checking if they are equal is expensive\n\t\t\t// (we can't just compare the strings as they can be different between client and server but result in the\n\t\t\t// same url, so we would need to create hidden anchor elements to compare them)\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (attributes[attribute] === (attributes[attribute] = value)) return;\n\n\tif (attribute === 'loading') {\n\t\t// @ts-expect-error\n\t\telement[LOADING_ATTR_SYMBOL] = value;\n\t}\n\n\tif (value == null) {\n\t\telement.removeAttribute(attribute);\n\t} else if (typeof value !== 'string' && get_setters(element).includes(attribute)) {\n\t\t// @ts-ignore\n\t\telement[attribute] = value;\n\t} else {\n\t\telement.setAttribute(attribute, value);\n\t}\n}\n\n/**\n * @param {Element} dom\n * @param {string} attribute\n * @param {string} value\n */\nexport function set_xlink_attribute(dom, attribute, value) {\n\tdom.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @param {string} prop\n * @param {any} value\n */\nexport function set_custom_element_data(node, prop, value) {\n\t// We need to ensure that setting custom element props, which can\n\t// invoke lifecycle methods on other custom elements, does not also\n\t// associate those lifecycle methods with the current active reaction\n\t// or effect\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet was_hydrating = hydrating;\n\tif (hydrating) {\n\t\tset_hydrating(false);\n\t}\n\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\tif (\n\t\t\t// `style` should use `set_attribute` rather than the setter\n\t\t\tprop !== 'style' &&\n\t\t\t// Don't compute setters for custom elements while they aren't registered yet,\n\t\t\t// because during their upgrade/instantiation they might add more setters.\n\t\t\t// Instead, fall back to a simple \"an object, then set as property\" heuristic.\n\t\t\t(setters_cache.has(node.getAttribute('is') || node.nodeName) ||\n\t\t\t// customElements may not be available in browser extension contexts\n\t\t\t!customElements ||\n\t\t\tcustomElements.get(node.getAttribute('is') || node.nodeName.toLowerCase())\n\t\t\t\t? get_setters(node).includes(prop)\n\t\t\t\t: value && typeof value === 'object')\n\t\t) {\n\t\t\t// @ts-expect-error\n\t\t\tnode[prop] = value;\n\t\t} else {\n\t\t\t// We did getters etc checks already, stringify before passing to set_attribute\n\t\t\t// to ensure it doesn't invoke the same logic again, and potentially populating\n\t\t\t// the setters cache too early.\n\t\t\tset_attribute(node, prop, value == null ? value : String(value));\n\t\t}\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t}\n\t}\n}\n\n/**\n * Spreads attributes onto a DOM element, taking into account the currently set attributes\n * @param {Element & ElementCSSInlineStyle} element\n * @param {Record<string | symbol, any> | undefined} prev\n * @param {Record<string | symbol, any>} next New attributes - this function mutates this object\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n * @returns {Record<string, any>}\n */\nfunction set_attributes(\n\telement,\n\tprev,\n\tnext,\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tif (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) {\n\t\tvar input = /** @type {HTMLInputElement} */ (element);\n\t\tvar attribute = input.type === 'checkbox' ? 'defaultChecked' : 'defaultValue';\n\n\t\tif (!(attribute in next)) {\n\t\t\tremove_input_defaults(input);\n\t\t}\n\t}\n\n\tvar attributes = get_attributes(element);\n\n\tvar is_custom_element = attributes[IS_CUSTOM_ELEMENT];\n\tvar preserve_attribute_case = !attributes[IS_HTML];\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet is_hydrating_custom_element = hydrating && is_custom_element;\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(false);\n\t}\n\n\tvar current = prev || {};\n\tvar is_option_element = element.nodeName === OPTION_TAG;\n\n\tfor (var key in prev) {\n\t\tif (!(key in next)) {\n\t\t\tnext[key] = null;\n\t\t}\n\t}\n\n\tif (next.class) {\n\t\tnext.class = clsx(next.class);\n\t} else if (css_hash || next[CLASS]) {\n\t\tnext.class = null; /* force call to set_class() */\n\t}\n\n\tif (next[STYLE]) {\n\t\tnext.style ??= null; /* force call to set_style() */\n\t}\n\n\tvar setters = get_setters(element);\n\n\t// since key is captured we use const\n\tfor (const key in next) {\n\t\t// let instead of var because referenced in a closure\n\t\tlet value = next[key];\n\n\t\t// Up here because we want to do this for the initial value, too, even if it's undefined,\n\t\t// and this wouldn't be reached in case of undefined because of the equality check below\n\t\tif (is_option_element && key === 'value' && value == null) {\n\t\t\t// The <option> element is a special case because removing the value attribute means\n\t\t\t// the value is set to the text content of the option element, and setting the value\n\t\t\t// to null or undefined means the value is set to the string \"null\" or \"undefined\".\n\t\t\t// To align with how we handle this case in non-spread-scenarios, this logic is needed.\n\t\t\t// There's a super-edge-case bug here that is left in in favor of smaller code size:\n\t\t\t// Because of the \"set missing props to null\" logic above, we can't differentiate\n\t\t\t// between a missing value and an explicitly set value of null or undefined. That means\n\t\t\t// that once set, the value attribute of an <option> element can't be removed. This is\n\t\t\t// a very rare edge case, and removing the attribute altogether isn't possible either\n\t\t\t// for the <option value={undefined}> case, so we're not losing any functionality here.\n\t\t\t// @ts-ignore\n\t\t\telement.value = element.__value = '';\n\t\t\tcurrent[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'class') {\n\t\t\tvar is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';\n\t\t\tset_class(element, is_html, value, css_hash, prev?.[CLASS], next[CLASS]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[CLASS] = next[CLASS];\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'style') {\n\t\t\tset_style(element, value, prev?.[STYLE], next[STYLE]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[STYLE] = next[STYLE];\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar prev_value = current[key];\n\n\t\t// Skip if value is unchanged, unless it's `undefined` and the element still has the attribute\n\t\tif (value === prev_value && !(value === undefined && element.hasAttribute(key))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent[key] = value;\n\n\t\tvar prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)\n\t\tif (prefix === '$$') continue;\n\n\t\tif (prefix === 'on') {\n\t\t\t/** @type {{ capture?: true }} */\n\t\t\tconst opts = {};\n\t\t\tconst event_handle_key = '$$' + key;\n\t\t\tlet event_name = key.slice(2);\n\t\t\tvar is_delegated = can_delegate_event(event_name);\n\n\t\t\tif (is_capture_event(event_name)) {\n\t\t\t\tevent_name = event_name.slice(0, -7);\n\t\t\t\topts.capture = true;\n\t\t\t}\n\n\t\t\tif (!is_delegated && prev_value) {\n\t\t\t\t// Listening to same event but different handler -> our handle function below takes care of this\n\t\t\t\t// If we were to remove and add listeners in this case, it could happen that the event is \"swallowed\"\n\t\t\t\t// (the browser seems to not know yet that a new one exists now) and doesn't reach the handler\n\t\t\t\t// https://github.com/sveltejs/svelte/issues/11903\n\t\t\t\tif (value != null) continue;\n\n\t\t\t\telement.removeEventListener(event_name, current[event_handle_key], opts);\n\t\t\t\tcurrent[event_handle_key] = null;\n\t\t\t}\n\n\t\t\tif (is_delegated) {\n\t\t\t\tdelegated(event_name, element, value);\n\t\t\t\tdelegate([event_name]);\n\t\t\t} else if (value != null) {\n\t\t\t\t/**\n\t\t\t\t * @this {any}\n\t\t\t\t * @param {Event} evt\n\t\t\t\t */\n\t\t\t\tfunction handle(evt) {\n\t\t\t\t\tcurrent[key].call(this, evt);\n\t\t\t\t}\n\n\t\t\t\tcurrent[event_handle_key] = create_event(event_name, element, handle, opts);\n\t\t\t}\n\t\t} else if (key === 'style') {\n\t\t\t// avoid using the setter\n\t\t\tset_attribute(element, key, value);\n\t\t} else if (key === 'autofocus') {\n\t\t\tautofocus(/** @type {HTMLElement} */ (element), Boolean(value));\n\t\t} else if (!is_custom_element && (key === '__value' || (key === 'value' && value != null))) {\n\t\t\t// @ts-ignore We're not running this for custom elements because __value is actually\n\t\t\t// how Lit stores the current value on the element, and messing with that would break things.\n\t\t\telement.value = element.__value = value;\n\t\t} else if (key === 'selected' && is_option_element) {\n\t\t\tset_selected(/** @type {HTMLOptionElement} */ (element), value);\n\t\t} else {\n\t\t\tvar name = key;\n\t\t\tif (!preserve_attribute_case) {\n\t\t\t\tname = normalize_attribute(name);\n\t\t\t}\n\n\t\t\tvar is_default = name === 'defaultValue' || name === 'defaultChecked';\n\n\t\t\tif (value == null && !is_custom_element && !is_default) {\n\t\t\t\tattributes[key] = null;\n\n\t\t\t\tif (name === 'value' || name === 'checked') {\n\t\t\t\t\t// removing value/checked also removes defaultValue/defaultChecked — preserve\n\t\t\t\t\tlet input = /** @type {HTMLInputElement} */ (element);\n\t\t\t\t\tconst use_default = prev === undefined;\n\t\t\t\t\tif (name === 'value') {\n\t\t\t\t\t\tlet previous = input.defaultValue;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultValue = previous;\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tinput.value = input.__value = use_default ? previous : null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet previous = input.defaultChecked;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultChecked = previous;\n\t\t\t\t\t\tinput.checked = use_default ? previous : false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\telement.removeAttribute(key);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tis_default ||\n\t\t\t\t(setters.includes(name) && (is_custom_element || typeof value !== 'string'))\n\t\t\t) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[name] = value;\n\t\t\t\t// remove it from attributes's cache\n\t\t\t\tif (name in attributes) attributes[name] = UNINITIALIZED;\n\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\tset_attribute(element, name, value, skip_warning);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(true);\n\t}\n\n\treturn current;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} element\n * @param {(...expressions: any) => Record<string | symbol, any>} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n */\nexport function attribute_effect(\n\telement,\n\tfn,\n\tsync = [],\n\tasync = [],\n\tblockers = [],\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tflatten(blockers, sync, async, (values) => {\n\t\t/** @type {Record<string | symbol, any> | undefined} */\n\t\tvar prev = undefined;\n\n\t\t/** @type {Record<symbol, Effect>} */\n\t\tvar effects = {};\n\n\t\tvar is_select = element.nodeName === SELECT_TAG;\n\t\tvar inited = false;\n\n\t\tmanaged(() => {\n\t\t\tvar next = fn(...values.map(get));\n\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\tvar current = set_attributes(\n\t\t\t\telement,\n\t\t\t\tprev,\n\t\t\t\tnext,\n\t\t\t\tcss_hash,\n\t\t\t\tshould_remove_defaults,\n\t\t\t\tskip_warning\n\t\t\t);\n\n\t\t\tif (inited && is_select && 'value' in next) {\n\t\t\t\tselect_option(/** @type {HTMLSelectElement} */ (element), next.value);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(effects)) {\n\t\t\t\tif (!next[symbol]) destroy_effect(effects[symbol]);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(next)) {\n\t\t\t\tvar n = next[symbol];\n\n\t\t\t\tif (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) {\n\t\t\t\t\tif (effects[symbol]) destroy_effect(effects[symbol]);\n\t\t\t\t\teffects[symbol] = branch(() => attach(element, () => n));\n\t\t\t\t}\n\n\t\t\t\tcurrent[symbol] = n;\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t});\n\n\t\tif (is_select) {\n\t\t\tvar select = /** @type {HTMLSelectElement} */ (element);\n\n\t\t\teffect(() => {\n\t\t\t\tselect_option(select, /** @type {Record<string | symbol, any>} */ (prev).value, true);\n\t\t\t\tinit_select(select);\n\t\t\t});\n\t\t}\n\n\t\tinited = true;\n\t});\n}\n\n/**\n *\n * @param {Element} element\n */\nfunction get_attributes(element) {\n\treturn /** @type {Record<string | symbol, unknown>} **/ (\n\t\t// @ts-expect-error\n\t\telement.__attributes ??= {\n\t\t\t[IS_CUSTOM_ELEMENT]: element.nodeName.includes('-'),\n\t\t\t[IS_HTML]: element.namespaceURI === NAMESPACE_HTML\n\t\t}\n\t);\n}\n\n/** @type {Map<string, string[]>} */\nvar setters_cache = new Map();\n\n/** @param {Element} element */\nfunction get_setters(element) {\n\tvar cache_key = element.getAttribute('is') || element.nodeName;\n\tvar setters = setters_cache.get(cache_key);\n\tif (setters) return setters;\n\tsetters_cache.set(cache_key, (setters = []));\n\n\tvar descriptors;\n\tvar proto = element; // In the case of custom elements there might be setters on the instance\n\tvar element_proto = Element.prototype;\n\n\t// Stop at Element, from there on there's only unnecessary setters we're not interested in\n\t// Do not use contructor.name here as that's unreliable in some browser environments\n\twhile (element_proto !== proto) {\n\t\tdescriptors = get_descriptors(proto);\n\n\t\tfor (var key in descriptors) {\n\t\t\tif (descriptors[key].set) {\n\t\t\t\tsetters.push(key);\n\t\t\t}\n\t\t}\n\n\t\tproto = get_prototype_of(proto);\n\t}\n\n\treturn setters;\n}\n\n/**\n * @param {any} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction check_src_in_dev_hydration(element, attribute, value) {\n\tif (!DEV) return;\n\tif (attribute === 'srcset' && srcset_url_equal(element, value)) return;\n\tif (src_url_equal(element.getAttribute(attribute) ?? '', value)) return;\n\n\tw.hydration_attribute_changed(\n\t\tattribute,\n\t\telement.outerHTML.replace(element.innerHTML, element.innerHTML && '...'),\n\t\tString(value)\n\t);\n}\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nfunction src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\treturn new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element\n * @param {string} srcset\n * @returns {boolean}\n */\nfunction srcset_url_equal(element, srcset) {\n\tvar element_urls = split_srcset(element.srcset);\n\tvar urls = split_srcset(srcset);\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n","/** @import { Batch } from '../../../reactivity/batch.js' */\nimport { DEV } from 'esm-env';\nimport { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport * as e from '../../../errors.js';\nimport { is } from '../../../proxy.js';\nimport { queue_micro_task } from '../../task.js';\nimport { hydrating } from '../../hydration.js';\nimport { tick, untrack } from '../../../runtime.js';\nimport { is_runes } from '../../../context.js';\nimport { current_batch, previous_batch } from '../../../reactivity/batch.js';\nimport { async_mode_flag } from '../../../../flags/index.js';\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_value(input, get, set = get) {\n\tvar batches = new WeakSet();\n\n\tlisten_to_event_and_reset_event(input, 'input', async (is_reset) => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\t/** @type {any} */\n\t\tvar value = is_reset ? input.defaultValue : input.value;\n\t\tvalue = is_numberlike_input(input) ? to_number(value) : value;\n\t\tset(value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\n\t\t// Because `{#each ...}` blocks work by updating sources inside the flush,\n\t\t// we need to wait a tick before checking to see if we should forcibly\n\t\t// update the input and reset the selection state\n\t\tawait tick();\n\n\t\t// Respect any validation in accessors\n\t\tif (value !== (value = get())) {\n\t\t\tvar start = input.selectionStart;\n\t\t\tvar end = input.selectionEnd;\n\t\t\tvar length = input.value.length;\n\n\t\t\t// the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\n\t\t\t// Restore selection\n\t\t\tif (end !== null) {\n\t\t\t\tvar new_length = input.value.length;\n\t\t\t\t// If cursor was at end and new input is longer, move cursor to new end\n\t\t\t\tif (start === end && end === length && new_length > length) {\n\t\t\t\t\tinput.selectionStart = new_length;\n\t\t\t\t\tinput.selectionEnd = new_length;\n\t\t\t\t} else {\n\t\t\t\t\tinput.selectionStart = start;\n\t\t\t\t\tinput.selectionEnd = Math.min(end, new_length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\t(hydrating && input.defaultValue !== input.value) ||\n\t\t// If defaultValue is set, then value == defaultValue\n\t\t// TODO Svelte 6: remove input.value check and set to empty string?\n\t\t(untrack(get) == null && input.value)\n\t) {\n\t\tset(is_numberlike_input(input) ? to_number(input.value) : input.value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\t}\n\n\trender_effect(() => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\tvar value = get();\n\n\t\tif (input === document.activeElement) {\n\t\t\t// In sync mode render effects are executed during tree traversal -> needs current_batch\n\t\t\t// In async mode render effects are flushed once batch resolved, at which point current_batch is null -> needs previous_batch\n\t\t\tvar batch = /** @type {Batch} */ (async_mode_flag ? previous_batch : current_batch);\n\n\t\t\t// Never rewrite the contents of a focused input. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the input:\n\t\t\t//\n\t\t\t// <input bind:value={query}>\n\t\t\t// <p>{await find(query)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (is_numberlike_input(input) && value === to_number(input.value)) {\n\t\t\t// handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959)\n\t\t\treturn;\n\t\t}\n\n\t\tif (input.type === 'date' && !value && !input.value) {\n\t\t\t// Handles the case where a temporarily invalid date is set (while typing, for example with a leading 0 for the day)\n\t\t\t// and prevents this state from clearing the other parts of the date input (see https://github.com/sveltejs/svelte/issues/7897)\n\t\t\treturn;\n\t\t}\n\n\t\t// don't set the value of the input if it's the same to allow\n\t\t// minlength to work properly\n\t\tif (value !== input.value) {\n\t\t\t// @ts-expect-error the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\t\t}\n\t});\n}\n\n/** @type {Set<HTMLInputElement[]>} */\nconst pending = new Set();\n\n/**\n * @param {HTMLInputElement[]} inputs\n * @param {null | [number]} group_index\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_group(inputs, group_index, input, get, set = get) {\n\tvar is_checkbox = input.getAttribute('type') === 'checkbox';\n\tvar binding_group = inputs;\n\n\t// needs to be let or related code isn't treeshaken out if it's always false\n\tlet hydration_mismatch = false;\n\n\tif (group_index !== null) {\n\t\tfor (var index of group_index) {\n\t\t\t// @ts-expect-error\n\t\t\tbinding_group = binding_group[index] ??= [];\n\t\t}\n\t}\n\n\tbinding_group.push(input);\n\n\tlisten_to_event_and_reset_event(\n\t\tinput,\n\t\t'change',\n\t\t() => {\n\t\t\t// @ts-ignore\n\t\t\tvar value = input.__value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t}\n\n\t\t\tset(value);\n\t\t},\n\t\t// TODO better default value handling\n\t\t() => set(is_checkbox ? [] : null)\n\t);\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\t// If we are hydrating and the value has since changed, then use the update value\n\t\t// from the input instead.\n\t\tif (hydrating && input.defaultChecked !== input.checked) {\n\t\t\thydration_mismatch = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_checkbox) {\n\t\t\tvalue = value || [];\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = value.includes(input.__value);\n\t\t} else {\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = is(input.__value, value);\n\t\t}\n\t});\n\n\tteardown(() => {\n\t\tvar index = binding_group.indexOf(input);\n\n\t\tif (index !== -1) {\n\t\t\tbinding_group.splice(index, 1);\n\t\t}\n\t});\n\n\tif (!pending.has(binding_group)) {\n\t\tpending.add(binding_group);\n\n\t\tqueue_micro_task(() => {\n\t\t\t// necessary to maintain binding group order in all insertion scenarios\n\t\t\tbinding_group.sort((a, b) => (a.compareDocumentPosition(b) === 4 ? -1 : 1));\n\t\t\tpending.delete(binding_group);\n\t\t});\n\t}\n\n\tqueue_micro_task(() => {\n\t\tif (hydration_mismatch) {\n\t\t\tvar value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t} else {\n\t\t\t\tvar hydration_input = binding_group.find((input) => input.checked);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvalue = hydration_input?.__value;\n\t\t\t}\n\n\t\t\tset(value);\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_checked(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', (is_reset) => {\n\t\tvar value = is_reset ? input.defaultChecked : input.checked;\n\t\tset(value);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the update value from the input instead.\n\t\t(hydrating && input.defaultChecked !== input.checked) ||\n\t\t// If defaultChecked is set, then checked == defaultChecked\n\t\tuntrack(get) == null\n\t) {\n\t\tset(input.checked);\n\t}\n\n\trender_effect(() => {\n\t\tvar value = get();\n\t\tinput.checked = Boolean(value);\n\t});\n}\n\n/**\n * @template V\n * @param {Array<HTMLInputElement>} group\n * @param {V} __value\n * @param {boolean} checked\n * @returns {V[]}\n */\nfunction get_binding_group_value(group, __value, checked) {\n\t/** @type {Set<V>} */\n\tvar value = new Set();\n\n\tfor (var i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) {\n\t\t\t// @ts-ignore\n\t\t\tvalue.add(group[i].__value);\n\t\t}\n\t}\n\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement} input\n */\nfunction is_numberlike_input(input) {\n\tvar type = input.type;\n\treturn type === 'number' || type === 'range';\n}\n\n/**\n * @param {string} value\n */\nfunction to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => FileList | null} get\n * @param {(value: FileList | null) => void} set\n */\nexport function bind_files(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', () => {\n\t\tset(input.files);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\thydrating &&\n\t\tinput.files\n\t) {\n\t\tset(input.files);\n\t}\n\n\trender_effect(() => {\n\t\tinput.files = get();\n\t});\n}\n","import { effect, teardown } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\n\n/**\n * We create one listener for all elements\n * @see {@link https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ Explanation}\n */\nclass ResizeObserverSingleton {\n\t/** */\n\t#listeners = new WeakMap();\n\n\t/** @type {ResizeObserver | undefined} */\n\t#observer;\n\n\t/** @type {ResizeObserverOptions} */\n\t#options;\n\n\t/** @static */\n\tstatic entries = new WeakMap();\n\n\t/** @param {ResizeObserverOptions} options */\n\tconstructor(options) {\n\t\tthis.#options = options;\n\t}\n\n\t/**\n\t * @param {Element} element\n\t * @param {(entry: ResizeObserverEntry) => any} listener\n\t */\n\tobserve(element, listener) {\n\t\tvar listeners = this.#listeners.get(element) || new Set();\n\t\tlisteners.add(listener);\n\n\t\tthis.#listeners.set(element, listeners);\n\t\tthis.#getObserver().observe(element, this.#options);\n\n\t\treturn () => {\n\t\t\tvar listeners = this.#listeners.get(element);\n\t\t\tlisteners.delete(listener);\n\n\t\t\tif (listeners.size === 0) {\n\t\t\t\tthis.#listeners.delete(element);\n\t\t\t\t/** @type {ResizeObserver} */ (this.#observer).unobserve(element);\n\t\t\t}\n\t\t};\n\t}\n\n\t#getObserver() {\n\t\treturn (\n\t\t\tthis.#observer ??\n\t\t\t(this.#observer = new ResizeObserver(\n\t\t\t\t/** @param {any} entries */ (entries) => {\n\t\t\t\t\tfor (var entry of entries) {\n\t\t\t\t\t\tResizeObserverSingleton.entries.set(entry.target, entry);\n\t\t\t\t\t\tfor (var listener of this.#listeners.get(entry.target) || []) {\n\t\t\t\t\t\t\tlistener(entry);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t))\n\t\t);\n\t}\n}\n\nvar resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\n\nvar resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\n\nvar resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'device-pixel-content-box'\n});\n\n/**\n * @param {Element} element\n * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type\n * @param {(entry: keyof ResizeObserverEntry) => void} set\n */\nexport function bind_resize_observer(element, type, set) {\n\tvar observer =\n\t\ttype === 'contentRect' || type === 'contentBoxSize'\n\t\t\t? resize_observer_content_box\n\t\t\t: type === 'borderBoxSize'\n\t\t\t\t? resize_observer_border_box\n\t\t\t\t: resize_observer_device_pixel_content_box;\n\n\tvar unsub = observer.observe(element, /** @param {any} entry */ (entry) => set(entry[type]));\n\tteardown(unsub);\n}\n\n/**\n * @param {HTMLElement} element\n * @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type\n * @param {(size: number) => void} set\n */\nexport function bind_element_size(element, type, set) {\n\tvar unsub = resize_observer_border_box.observe(element, () => set(element[type]));\n\n\teffect(() => {\n\t\t// The update could contain reads which should be ignored\n\t\tuntrack(() => set(element[type]));\n\t\treturn unsub;\n\t});\n}\n","/** @import { ComponentContext, Effect } from '#client' */\nimport { DESTROYING, STATE_SYMBOL } from '#client/constants';\nimport { component_context } from '../../../context.js';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { active_effect, untrack } from '../../../runtime.js';\n\n/**\n * @param {any} bound_value\n * @param {Element} element_or_component\n * @returns {boolean}\n */\nfunction is_bound_this(bound_value, element_or_component) {\n\treturn (\n\t\tbound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component\n\t);\n}\n\n/**\n * @param {any} element_or_component\n * @param {(value: unknown, ...parts: unknown[]) => void} update\n * @param {(...parts: unknown[]) => unknown} get_value\n * @param {() => unknown[]} [get_parts] Set if the this binding is used inside an each block,\n * \t\t\t\t\t\t\t\t\t\treturns all the parts of the each block context that are used in the expression\n * @returns {void}\n */\nexport function bind_this(element_or_component = {}, update, get_value, get_parts) {\n\tvar component_effect = /** @type {ComponentContext} */ (component_context).r;\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\teffect(() => {\n\t\t/** @type {unknown[]} */\n\t\tvar old_parts;\n\n\t\t/** @type {unknown[]} */\n\t\tvar parts;\n\n\t\trender_effect(() => {\n\t\t\told_parts = parts;\n\t\t\t// We only track changes to the parts, not the value itself to avoid unnecessary reruns.\n\t\t\tparts = get_parts?.() || [];\n\n\t\t\tuntrack(() => {\n\t\t\t\tif (element_or_component !== get_value(...parts)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then nullify the binding at\n\t\t\t\t\t// the previous position if it isn't already taken over by a different effect.\n\t\t\t\t\tif (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {\n\t\t\t\t\t\tupdate(null, ...old_parts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\t// When the bind:this effect is destroyed, we go up the effect parent chain until we find the last parent effect that is destroyed,\n\t\t\t// or the effect containing the component bind:this is in (whichever comes first). That way we can time the nulling of the binding\n\t\t\t// as close to user/developer expectation as possible.\n\t\t\t// TODO Svelte 6: Decide if we want to keep this logic or just always null the binding in the component effect's teardown\n\t\t\t// (which would be simpler, but less intuitive in some cases, and breaks the `ondestroy-before-cleanup` test)\n\t\t\tlet p = parent;\n\t\t\twhile (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) {\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t\tconst teardown = () => {\n\t\t\t\tif (parts && is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(null, ...parts);\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst original_teardown = p.teardown;\n\t\t\tp.teardown = () => {\n\t\t\t\tteardown();\n\t\t\t\toriginal_teardown?.();\n\t\t\t};\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n","import { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen } from './shared.js';\n\n/**\n * @param {'innerHTML' | 'textContent' | 'innerText'} property\n * @param {HTMLElement} element\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_content_editable(property, element, get, set = get) {\n\telement.addEventListener('input', () => {\n\t\t// @ts-ignore\n\t\tset(element[property]);\n\t});\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\tif (element[property] !== value) {\n\t\t\tif (value == null) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar non_null_value = element[property];\n\t\t\t\tset(non_null_value);\n\t\t\t} else {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[property] = value + '';\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * @param {string} property\n * @param {string} event_name\n * @param {Element} element\n * @param {(value: unknown) => void} set\n * @param {() => unknown} [get]\n * @returns {void}\n */\nexport function bind_property(property, event_name, element, set, get) {\n\tvar handler = () => {\n\t\t// @ts-ignore\n\t\tset(element[property]);\n\t};\n\n\telement.addEventListener(event_name, handler);\n\n\tif (get) {\n\t\trender_effect(() => {\n\t\t\t// @ts-ignore\n\t\t\telement[property] = get();\n\t\t});\n\t} else {\n\t\thandler();\n\t}\n\n\t// @ts-ignore\n\tif (element === document.body || element === window || element === document) {\n\t\tteardown(() => {\n\t\t\telement.removeEventListener(event_name, handler);\n\t\t});\n\t}\n}\n\n/**\n * @param {HTMLElement} element\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_focused(element, set) {\n\tlisten(element, ['focus', 'blur'], () => {\n\t\tset(element === document.activeElement);\n\t});\n}\n","/** @import { Effect, Source } from './types.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tPROPS_IS_BINDABLE,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED\n} from '../../../constants.js';\nimport { get_descriptor, is_function } from '../../shared/utils.js';\nimport { set, source, update } from './sources.js';\nimport { derived, derived_safe_equal } from './deriveds.js';\nimport {\n\tactive_effect,\n\tget,\n\tis_destroying_effect,\n\tset_active_effect,\n\tuntrack\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { DESTROYED, LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { proxy } from '../proxy.js';\nimport { capture_store_binding } from './store.js';\nimport { legacy_mode_flag } from '../../flags/index.js';\nimport { effect, render_effect } from './effects.js';\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_prop(fn, d = 1) {\n\tconst value = fn();\n\tfn(value + d);\n\treturn value;\n}\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_prop(fn, d = 1) {\n\tconst value = fn() + d;\n\tfn(value);\n\treturn value;\n}\n\n/**\n * The proxy handler for rest props (i.e. `const { x, ...rest } = $props()`).\n * Is passed the full `$$props` object and excludes the named props.\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(\n\t\tDEV ? { props, exclude, name, other: {}, to_proxy: [] } : { props, exclude },\n\t\trest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number>, parent_effect: Effect }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\ttry {\n\t\t\t\tset_active_effect(target.parent_effect);\n\n\t\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\t\ttarget.special[key] = prop(\n\t\t\t\t\t{\n\t\t\t\t\t\tget [key]() {\n\t\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/** @type {string} */ (key),\n\t\t\t\t\tPROPS_IS_UPDATED\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy(\n\t\t{\n\t\t\tprops,\n\t\t\texclude,\n\t\t\tspecial: {},\n\t\t\tversion: source(0),\n\t\t\t// TODO this is only necessary because we need to track component\n\t\t\t// destruction inside `prop`, because of `bind:this`, but it\n\t\t\t// seems likely that we can simplify `bind:this` instead\n\t\t\tparent_effect: /** @type {Effect} */ (active_effect)\n\t\t},\n\t\tlegacy_rest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @type {ProxyHandler<{ props: Array<Record<string | symbol, unknown> | (() => Record<string | symbol, unknown>)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (!p) continue;\n\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\n\t\t\tfor (const key of Object.getOwnPropertySymbols(p)) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\n\tvar get_fallback = () => {\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\n\t\t\tfallback_value = lazy\n\t\t\t\t? untrack(/** @type {() => V} */ (fallback))\n\t\t\t\t: /** @type {V} */ (fallback);\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\t/** @type {((v: V) => void) | undefined} */\n\tlet setter;\n\n\tif (bindable) {\n\t\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t\t// or `createClassComponent(Component, props)`\n\t\tvar is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\n\t\tsetter =\n\t\t\tget_descriptor(props, key)?.set ??\n\t\t\t(is_entry_props && key in props ? (v) => (props[key] = v) : undefined);\n\t}\n\n\t/** @type {V} */\n\tvar initial_value;\n\tvar is_store_sub = false;\n\n\tif (bindable) {\n\t\t[initial_value, is_store_sub] = capture_store_binding(() => /** @type {V} */ (props[key]));\n\t} else {\n\t\tinitial_value = /** @type {V} */ (props[key]);\n\t}\n\n\tif (initial_value === undefined && fallback !== undefined) {\n\t\tinitial_value = get_fallback();\n\n\t\tif (setter) {\n\t\t\tif (runes) e.props_invalid_value(key);\n\t\t\tsetter(initial_value);\n\t\t}\n\t}\n\n\t/** @type {() => V} */\n\tvar getter;\n\n\tif (runes) {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\t\t\tif (value === undefined) return get_fallback();\n\t\t\tfallback_dirty = true;\n\t\t\treturn value;\n\t\t};\n\t} else {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\n\t\t\tif (value !== undefined) {\n\t\t\t\t// in legacy mode, we don't revert to the fallback value\n\t\t\t\t// if the prop goes from defined to undefined. The easiest\n\t\t\t\t// way to model this is to make the fallback undefined\n\t\t\t\t// as soon as the prop has a value\n\t\t\t\tfallback_value = /** @type {V} */ (undefined);\n\t\t\t}\n\n\t\t\treturn value === undefined ? fallback_value : value;\n\t\t};\n\t}\n\n\t// prop is never written to — we only need a getter\n\tif (runes && (flags & PROPS_IS_UPDATED) === 0) {\n\t\treturn getter;\n\t}\n\n\t// prop is written to, but the parent component had `bind:foo` which\n\t// means we can just call `$$props.foo = value` directly\n\tif (setter) {\n\t\tvar legacy_parent = props.$$legacy;\n\t\treturn /** @type {() => V} */ (\n\t\t\tfunction (/** @type {V} */ value, /** @type {boolean} */ mutation) {\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t// We don't want to notify if the value was mutated and the parent is in runes mode.\n\t\t\t\t\t// In that case the state proxy (if it exists) should take care of the notification.\n\t\t\t\t\t// If the parent is not in runes mode, we need to notify on mutation, too, that the prop\n\t\t\t\t\t// has changed because the parent will not be able to detect the change otherwise.\n\t\t\t\t\tif (!runes || !mutation || legacy_parent || is_store_sub) {\n\t\t\t\t\t\t/** @type {Function} */ (setter)(mutation ? getter() : value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\treturn getter();\n\t\t\t}\n\t\t);\n\t}\n\n\t// Either prop is written to, but there's no binding, which means we\n\t// create a derived that we can write to locally.\n\t// Or we are in legacy mode where we always create a derived to replicate that\n\t// Svelte 4 did not trigger updates when a primitive value was updated to the same value.\n\tvar overridden = false;\n\n\tvar d = ((flags & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {\n\t\toverridden = false;\n\t\treturn getter();\n\t});\n\n\tif (DEV) {\n\t\td.label = key;\n\t}\n\n\t// Capture the initial value if it's bindable\n\tif (bindable) get(d);\n\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\treturn /** @type {() => V} */ (\n\t\tfunction (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconst new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;\n\n\t\t\t\tset(d, new_value);\n\t\t\t\toverridden = true;\n\n\t\t\t\tif (fallback_value !== undefined) {\n\t\t\t\t\tfallback_value = new_value;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// special case — avoid recalculating the derived if we're in a\n\t\t\t// teardown function and the prop was overridden locally, or the\n\t\t\t// component was already destroyed (people could access props in a timeout)\n\t\t\tif ((is_destroying_effect && overridden) || (parent_effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn d.v;\n\t\t\t}\n\n\t\t\treturn get(d);\n\t\t}\n\t);\n}\n","/** @import { ComponentConstructorOptions, ComponentType, SvelteComponent, Component } from 'svelte' */\nimport { DIRTY, LEGACY_PROPS, MAYBE_DIRTY } from '../internal/client/constants.js';\nimport { user_pre_effect } from '../internal/client/reactivity/effects.js';\nimport { mutable_source, set } from '../internal/client/reactivity/sources.js';\nimport { hydrate, mount, unmount } from '../internal/client/render.js';\nimport { active_effect, get } from '../internal/client/runtime.js';\nimport { flushSync } from '../internal/client/reactivity/batch.js';\nimport { define_property, is_array } from '../internal/shared/utils.js';\nimport * as e from '../internal/client/errors.js';\nimport * as w from '../internal/client/warnings.js';\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../constants.js';\nimport { component_context, dev_current_component_function } from '../internal/client/context.js';\nimport { async_mode_flag } from '../internal/flags/index.js';\nimport { set_signal_status } from '../internal/client/reactivity/status.js';\n\n/**\n * Takes the same options as a Svelte 4 component and the component function and returns a Svelte 4 compatible component.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {ComponentConstructorOptions<Props> & {\n * \tcomponent: ComponentType<SvelteComponent<Props, Events, Slots>> | Component<Props>;\n * }} options\n * @returns {SvelteComponent<Props, Events, Slots> & Exports}\n */\nexport function createClassComponent(options) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn new Svelte4Component(options);\n}\n\n/**\n * Takes the component function and returns a Svelte 4 compatible component constructor.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {SvelteComponent<Props, Events, Slots> | Component<Props>} component\n * @returns {ComponentType<SvelteComponent<Props, Events, Slots> & Exports>}\n */\nexport function asClassComponent(component) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn class extends Svelte4Component {\n\t\t/** @param {any} options */\n\t\tconstructor(options) {\n\t\t\tsuper({\n\t\t\t\tcomponent,\n\t\t\t\t...options\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Support using the component as both a class and function during the transition period\n * @typedef  {{new (o: ComponentConstructorOptions): SvelteComponent;(...args: Parameters<Component<Record<string, any>>>): ReturnType<Component<Record<string, any>, Record<string, any>>>;}} LegacyComponentType\n */\n\nclass Svelte4Component {\n\t/** @type {any} */\n\t#events;\n\n\t/** @type {Record<string, any>} */\n\t#instance;\n\n\t/**\n\t * @param {ComponentConstructorOptions & {\n\t *  component: any;\n\t * }} options\n\t */\n\tconstructor(options) {\n\t\tvar sources = new Map();\n\n\t\t/**\n\t\t * @param {string | symbol} key\n\t\t * @param {unknown} value\n\t\t */\n\t\tvar add_source = (key, value) => {\n\t\t\tvar s = mutable_source(value, false, false);\n\t\t\tsources.set(key, s);\n\t\t\treturn s;\n\t\t};\n\n\t\t// Replicate coarse-grained props through a proxy that has a version source for\n\t\t// each property, which is incremented on updates to the property itself. Do not\n\t\t// use our $state proxy because that one has fine-grained reactivity.\n\t\tconst props = new Proxy(\n\t\t\t{ ...(options.props || {}), $$events: {} },\n\t\t\t{\n\t\t\t\tget(target, prop) {\n\t\t\t\t\treturn get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t},\n\t\t\t\thas(target, prop) {\n\t\t\t\t\t// Necessary to not throw \"invalid binding\" validation errors on the component side\n\t\t\t\t\tif (prop === LEGACY_PROPS) return true;\n\n\t\t\t\t\tget(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t\treturn Reflect.has(target, prop);\n\t\t\t\t},\n\t\t\t\tset(target, prop, value) {\n\t\t\t\t\tset(sources.get(prop) ?? add_source(prop, value), value);\n\t\t\t\t\treturn Reflect.set(target, prop, value);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tthis.#instance = (options.hydrate ? hydrate : mount)(options.component, {\n\t\t\ttarget: options.target,\n\t\t\tanchor: options.anchor,\n\t\t\tprops,\n\t\t\tcontext: options.context,\n\t\t\tintro: options.intro ?? false,\n\t\t\trecover: options.recover,\n\t\t\ttransformError: options.transformError\n\t\t});\n\n\t\t// We don't flushSync for custom element wrappers or if the user doesn't want it,\n\t\t// or if we're in async mode since `flushSync()` will fail\n\t\tif (!async_mode_flag && (!options?.props?.$$host || options.sync === false)) {\n\t\t\tflushSync();\n\t\t}\n\n\t\tthis.#events = props.$$events;\n\n\t\tfor (const key of Object.keys(this.#instance)) {\n\t\t\tif (key === '$set' || key === '$destroy' || key === '$on') continue;\n\t\t\tdefine_property(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#instance[key];\n\t\t\t\t},\n\t\t\t\t/** @param {any} value */\n\t\t\t\tset(value) {\n\t\t\t\t\tthis.#instance[key] = value;\n\t\t\t\t},\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t}\n\n\t\tthis.#instance.$set = /** @param {Record<string, any>} next */ (next) => {\n\t\t\tObject.assign(props, next);\n\t\t};\n\n\t\tthis.#instance.$destroy = () => {\n\t\t\tunmount(this.#instance);\n\t\t};\n\t}\n\n\t/** @param {Record<string, any>} props */\n\t$set(props) {\n\t\tthis.#instance.$set(props);\n\t}\n\n\t/**\n\t * @param {string} event\n\t * @param {(...args: any[]) => any} callback\n\t * @returns {any}\n\t */\n\t$on(event, callback) {\n\t\tthis.#events[event] = this.#events[event] || [];\n\n\t\t/** @param {any[]} args */\n\t\tconst cb = (...args) => callback.call(this, ...args);\n\t\tthis.#events[event].push(cb);\n\t\treturn () => {\n\t\t\tthis.#events[event] = this.#events[event].filter(/** @param {any} fn */ (fn) => fn !== cb);\n\t\t};\n\t}\n\n\t$destroy() {\n\t\tthis.#instance.$destroy();\n\t}\n}\n\n/**\n * Runs the given function once immediately on the server, and works like `$effect.pre` on the client.\n *\n * @deprecated Use this only as a temporary solution to migrate your component code to Svelte 5.\n * @param {() => void | (() => void)} fn\n * @returns {void}\n */\nexport function run(fn) {\n\tuser_pre_effect(() => {\n\t\tfn();\n\t\tvar effect = /** @type {import('#client').Effect} */ (active_effect);\n\t\t// If the effect is immediately made dirty again, mark it as maybe dirty to emulate legacy behaviour\n\t\tif ((effect.f & DIRTY) !== 0) {\n\t\t\tlet filename = \"a file (we can't know which one)\";\n\t\t\tif (DEV) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tfilename = dev_current_component_function?.[FILENAME] ?? filename;\n\t\t\t}\n\t\t\tw.legacy_recursive_reactive_block(filename);\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\t});\n}\n\n/**\n * Function to mimic the multiple listeners available in svelte 4\n * @deprecated\n * @param {EventListener[]} handlers\n * @returns {EventListener}\n */\nexport function handlers(...handlers) {\n\treturn function (event) {\n\t\tconst { stopImmediatePropagation } = event;\n\t\tlet stopped = false;\n\n\t\tevent.stopImmediatePropagation = () => {\n\t\t\tstopped = true;\n\t\t\tstopImmediatePropagation.call(event);\n\t\t};\n\n\t\tconst errors = [];\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error `this` is not typed\n\t\t\t\thandler?.call(this, event);\n\t\t\t} catch (e) {\n\t\t\t\terrors.push(e);\n\t\t\t}\n\n\t\t\tif (stopped) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let error of errors) {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Function to create a `bubble` function that mimic the behavior of `on:click` without handler available in svelte 4.\n * @deprecated Use this only as a temporary solution to migrate your automatically delegated events in Svelte 5.\n */\nexport function createBubbler() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createBubbler');\n\t}\n\n\treturn (/**@type {string}*/ type) => (/**@type {Event}*/ event) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {any} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\nexport {\n\tonce,\n\tpreventDefault,\n\tself,\n\tstopImmediatePropagation,\n\tstopPropagation,\n\ttrusted,\n\tpassive,\n\tnonpassive\n} from '../internal/client/dom/legacy/event-modifiers.js';\n","/** @import { ComponentContext, ComponentContextLegacy } from '#client' */\n/** @import { EventDispatcher } from './index.js' */\n/** @import { NotFunction } from './internal/types.js' */\nimport { active_reaction, untrack } from './internal/client/runtime.js';\nimport { is_array } from './internal/shared/utils.js';\nimport { user_effect } from './internal/client/index.js';\nimport * as e from './internal/client/errors.js';\nimport { legacy_mode_flag } from './internal/flags/index.js';\nimport { component_context } from './internal/client/context.js';\nimport { DEV } from 'esm-env';\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope noone modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n\n/**\n * Returns an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that aborts when the current [derived](https://svelte.dev/docs/svelte/$derived) or [effect](https://svelte.dev/docs/svelte/$effect) re-runs or is destroyed.\n *\n * Must be called while a derived or effect is running.\n *\n * ```svelte\n * <script>\n * \timport { getAbortSignal } from 'svelte';\n *\n * \tlet { id } = $props();\n *\n * \tasync function getData(id) {\n * \t\tconst response = await fetch(`/items/${id}`, {\n * \t\t\tsignal: getAbortSignal()\n * \t\t});\n *\n * \t\treturn await response.json();\n * \t}\n *\n * \tconst data = $derived(await getData(id));\n * </script>\n * ```\n */\nexport function getAbortSignal() {\n\tif (active_reaction === null) {\n\t\te.get_abort_signal_outside_reaction();\n\t}\n\n\treturn (active_reaction.ac ??= new AbortController()).signal;\n}\n\n/**\n * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n * Unlike `$effect`, the provided function only runs once.\n *\n * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n * it will be called when the component is unmounted.\n *\n * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction<T> | Promise<NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent<T>}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n *  loaded: null; // does not take a detail argument\n *  change: string; // takes a detail argument of type string, which is required\n *  optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record<string, any>} [EventMap = any]\n * @returns {EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createEventDispatcher');\n\t}\n\n\t/**\n\t * @param [detail]\n\t * @param [options]\n\t */\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {string} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\nexport { flushSync, fork } from './internal/client/reactivity/batch.js';\nexport {\n\tcreateContext,\n\tgetContext,\n\tgetAllContexts,\n\thasContext,\n\tsetContext\n} from './internal/client/context.js';\nexport { hydratable } from './internal/client/hydratable.js';\nexport { hydrate, mount, unmount } from './internal/client/render.js';\nexport { tick, untrack, settled } from './internal/client/runtime.js';\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n","/** @import { StandardSchemaV1 } from '@standard-schema/spec' */\n\nexport class HttpError {\n\t/**\n\t * @param {number} status\n\t * @param {{message: string} extends App.Error ? (App.Error | string | undefined) : App.Error} body\n\t */\n\tconstructor(status, body) {\n\t\tthis.status = status;\n\t\tif (typeof body === 'string') {\n\t\t\tthis.body = { message: body };\n\t\t} else if (body) {\n\t\t\tthis.body = body;\n\t\t} else {\n\t\t\tthis.body = { message: `Error: ${status}` };\n\t\t}\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this.body);\n\t}\n}\n\nexport class Redirect {\n\t/**\n\t * @param {300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308} status\n\t * @param {string} location\n\t */\n\tconstructor(status, location) {\n\t\tthis.status = status;\n\t\tthis.location = location;\n\t}\n}\n\n/**\n * An error that was thrown from within the SvelteKit runtime that is not fatal and doesn't result in a 500, such as a 404.\n * `SvelteKitError` goes through `handleError`.\n * @extends Error\n */\nexport class SvelteKitError extends Error {\n\t/**\n\t * @param {number} status\n\t * @param {string} text\n\t * @param {string} message\n\t */\n\tconstructor(status, text, message) {\n\t\tsuper(message);\n\t\tthis.status = status;\n\t\tthis.text = text;\n\t}\n}\n\n/**\n * @template [T=undefined]\n */\nexport class ActionFailure {\n\t/**\n\t * @param {number} status\n\t * @param {T} data\n\t */\n\tconstructor(status, data) {\n\t\tthis.status = status;\n\t\tthis.data = data;\n\t}\n}\n\n/**\n * Error thrown when form validation fails imperatively\n */\nexport class ValidationError extends Error {\n\t/**\n\t * @param {StandardSchemaV1.Issue[]} issues\n\t */\n\tconstructor(issues) {\n\t\tsuper('Validation failed');\n\t\tthis.name = 'ValidationError';\n\t\tthis.issues = issues;\n\t}\n}\n\nexport { init_remote_functions } from './remote-functions.js';\n","import { BROWSER, DEV } from 'esm-env';\n\n/**\n * Matches a URI scheme. See https://www.rfc-editor.org/rfc/rfc3986#section-3.1\n * @type {RegExp}\n */\nexport const SCHEME = /^[a-z][a-z\\d+\\-.]+:/i;\n\nconst internal = new URL('sveltekit-internal://');\n\n/**\n * @param {string} base\n * @param {string} path\n */\nexport function resolve(base, path) {\n\t// special case\n\tif (path[0] === '/' && path[1] === '/') return path;\n\n\tlet url = new URL(base, internal);\n\turl = new URL(path, url);\n\n\treturn url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href;\n}\n\n/** @param {string} path */\nexport function is_root_relative(path) {\n\treturn path[0] === '/' && path[1] !== '/';\n}\n\n/**\n * @param {string} path\n * @param {import('types').TrailingSlash} trailing_slash\n */\nexport function normalize_path(path, trailing_slash) {\n\tif (path === '/' || trailing_slash === 'ignore') return path;\n\n\tif (trailing_slash === 'never') {\n\t\treturn path.endsWith('/') ? path.slice(0, -1) : path;\n\t} else if (trailing_slash === 'always' && !path.endsWith('/')) {\n\t\treturn path + '/';\n\t}\n\n\treturn path;\n}\n\n/**\n * Decode pathname excluding %25 to prevent further double decoding of params\n * @param {string} pathname\n */\nexport function decode_pathname(pathname) {\n\treturn pathname.split('%25').map(decodeURI).join('%25');\n}\n\n/** @param {Record<string, string>} params */\nexport function decode_params(params) {\n\tfor (const key in params) {\n\t\t// input has already been decoded by decodeURI\n\t\t// now handle the rest\n\t\tparams[key] = decodeURIComponent(params[key]);\n\t}\n\n\treturn params;\n}\n\n/**\n * The error when a URL is malformed is not very helpful, so we augment it with the URI\n * @param {string} uri\n */\nexport function decode_uri(uri) {\n\ttry {\n\t\treturn decodeURI(uri);\n\t} catch (e) {\n\t\tif (e instanceof Error) {\n\t\t\te.message = `Failed to decode URI: ${uri}\\n` + e.message;\n\t\t}\n\t\tthrow e;\n\t}\n}\n\n/**\n * Returns everything up to the first `#` in a URL\n * @param {{href: string}} url_like\n */\nexport function strip_hash({ href }) {\n\treturn href.split('#')[0];\n}\n\n/**\n * @param {URL} url\n * @param {() => void} callback\n * @param {(search_param: string) => void} search_params_callback\n * @param {boolean} [allow_hash]\n */\nexport function make_trackable(url, callback, search_params_callback, allow_hash = false) {\n\tconst tracked = new URL(url);\n\n\tObject.defineProperty(tracked, 'searchParams', {\n\t\tvalue: new Proxy(tracked.searchParams, {\n\t\t\tget(obj, key) {\n\t\t\t\tif (key === 'get' || key === 'getAll' || key === 'has') {\n\t\t\t\t\treturn (/** @type {string} */ param, /** @type {string[]} */ ...rest) => {\n\t\t\t\t\t\tsearch_params_callback(param);\n\t\t\t\t\t\treturn obj[key](param, ...rest);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// if they try to access something different from what is in `tracked_search_params_properties`\n\t\t\t\t// we track the whole url (entries, values, keys etc)\n\t\t\t\tcallback();\n\n\t\t\t\tconst value = Reflect.get(obj, key);\n\t\t\t\treturn typeof value === 'function' ? value.bind(obj) : value;\n\t\t\t}\n\t\t}),\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n\n\t/**\n\t * URL properties that could change during the lifetime of the page,\n\t * which excludes things like `origin`\n\t */\n\tconst tracked_url_properties = ['href', 'pathname', 'search', 'toString', 'toJSON'];\n\tif (allow_hash) tracked_url_properties.push('hash');\n\n\tfor (const property of tracked_url_properties) {\n\t\tObject.defineProperty(tracked, property, {\n\t\t\tget() {\n\t\t\t\tcallback();\n\t\t\t\t// @ts-expect-error\n\t\t\t\treturn url[property];\n\t\t\t},\n\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t}\n\n\tif (!BROWSER) {\n\t\t// @ts-ignore\n\t\ttracked[Symbol.for('nodejs.util.inspect.custom')] = (depth, opts, inspect) => {\n\t\t\treturn inspect(url, opts);\n\t\t};\n\n\t\t// @ts-ignore\n\t\ttracked.searchParams[Symbol.for('nodejs.util.inspect.custom')] = (depth, opts, inspect) => {\n\t\t\treturn inspect(url.searchParams, opts);\n\t\t};\n\t}\n\n\tif ((DEV || !BROWSER) && !allow_hash) {\n\t\tdisable_hash(tracked);\n\t}\n\n\treturn tracked;\n}\n\n/**\n * Disallow access to `url.hash` on the server and in `load`\n * @param {URL} url\n */\nfunction disable_hash(url) {\n\tallow_nodejs_console_log(url);\n\n\tObject.defineProperty(url, 'hash', {\n\t\tget() {\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead'\n\t\t\t);\n\t\t}\n\t});\n}\n\n/**\n * Disallow access to `url.search` and `url.searchParams` during prerendering\n * @param {URL} url\n */\nexport function disable_search(url) {\n\tallow_nodejs_console_log(url);\n\n\tfor (const property of ['search', 'searchParams']) {\n\t\tObject.defineProperty(url, property, {\n\t\t\tget() {\n\t\t\t\tthrow new Error(`Cannot access url.${property} on a page with prerendering enabled`);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Allow URL to be console logged, bypassing disabled properties.\n * @param {URL} url\n */\nfunction allow_nodejs_console_log(url) {\n\tif (!BROWSER) {\n\t\t// @ts-ignore\n\t\turl[Symbol.for('nodejs.util.inspect.custom')] = (depth, opts, inspect) => {\n\t\t\treturn inspect(new URL(url), opts);\n\t\t};\n\t}\n}\n","/**\n * Hash using djb2\n * @param {import('types').StrictBody[]} values\n */\nexport function hash(...values) {\n\tlet hash = 5381;\n\n\tfor (const value of values) {\n\t\tif (typeof value === 'string') {\n\t\t\tlet i = value.length;\n\t\t\twhile (i) hash = (hash * 33) ^ value.charCodeAt(--i);\n\t\t} else if (ArrayBuffer.isView(value)) {\n\t\t\tconst buffer = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t\t\tlet i = buffer.length;\n\t\t\twhile (i) hash = (hash * 33) ^ buffer[--i];\n\t\t} else {\n\t\t\tthrow new TypeError('value must be a string or TypedArray');\n\t\t}\n\t}\n\n\treturn (hash >>> 0).toString(36);\n}\n","import { BROWSER } from 'esm-env';\n\nexport const text_encoder = new TextEncoder();\nexport const text_decoder = new TextDecoder();\n\n/**\n * Like node's path.relative, but without using node\n * @param {string} from\n * @param {string} to\n */\nexport function get_relative_path(from, to) {\n\tconst from_parts = from.split(/[/\\\\]/);\n\tconst to_parts = to.split(/[/\\\\]/);\n\tfrom_parts.pop(); // get dirname\n\n\twhile (from_parts[0] === to_parts[0]) {\n\t\tfrom_parts.shift();\n\t\tto_parts.shift();\n\t}\n\n\tlet i = from_parts.length;\n\twhile (i--) from_parts[i] = '..';\n\n\treturn from_parts.concat(to_parts).join('/');\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {string}\n */\nexport function base64_encode(bytes) {\n\t// Using `Buffer` is faster than iterating\n\tif (!BROWSER && globalThis.Buffer) {\n\t\treturn globalThis.Buffer.from(bytes).toString('base64');\n\t}\n\n\tlet binary = '';\n\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tbinary += String.fromCharCode(bytes[i]);\n\t}\n\n\treturn btoa(binary);\n}\n\n/**\n * @param {string} encoded\n * @returns {Uint8Array}\n */\nexport function base64_decode(encoded) {\n\t// Using `Buffer` is faster than iterating\n\tif (!BROWSER && globalThis.Buffer) {\n\t\tconst buffer = globalThis.Buffer.from(encoded, 'base64');\n\t\treturn new Uint8Array(buffer);\n\t}\n\n\tconst binary = atob(encoded);\n\tconst bytes = new Uint8Array(binary.length);\n\n\tfor (let i = 0; i < binary.length; i++) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\n\treturn bytes;\n}\n","import { BROWSER, DEV } from 'esm-env';\nimport { hash } from '../../utils/hash.js';\nimport { base64_decode } from '../utils.js';\n\nlet loading = 0;\n\n/** @type {typeof fetch} */\nconst native_fetch = BROWSER ? window.fetch : /** @type {any} */ (() => {});\n\nexport function lock_fetch() {\n\tloading += 1;\n}\n\nexport function unlock_fetch() {\n\tloading -= 1;\n}\n\nif (DEV && BROWSER) {\n\tlet can_inspect_stack_trace = false;\n\n\t// detect whether async stack traces work\n\t// eslint-disable-next-line @typescript-eslint/require-await\n\tconst check_stack_trace = async () => {\n\t\tconst stack = /** @type {string} */ (new Error().stack);\n\t\tcan_inspect_stack_trace = stack.includes('check_stack_trace');\n\t};\n\n\tvoid check_stack_trace();\n\n\t/**\n\t * @param {RequestInfo | URL} input\n\t * @param {RequestInit & Record<string, any> | undefined} init\n\t */\n\twindow.fetch = (input, init) => {\n\t\t// Check if fetch was called via load_node. the lock method only checks if it was called at the\n\t\t// same time, but not necessarily if it was called from `load`.\n\t\t// We use just the filename as the method name sometimes does not appear on the CI.\n\t\tconst url = input instanceof Request ? input.url : input.toString();\n\t\tconst stack_array = /** @type {string} */ (new Error().stack).split('\\n');\n\t\t// We need to do a cutoff because Safari and Firefox maintain the stack\n\t\t// across events and for example traces a `fetch` call triggered from a button\n\t\t// back to the creation of the event listener and the element creation itself,\n\t\t// where at some point client.js will show up, leading to false positives.\n\t\tconst cutoff = stack_array.findIndex((a) => a.includes('load@') || a.includes('at load'));\n\t\tconst stack = stack_array.slice(0, cutoff + 2).join('\\n');\n\n\t\tconst in_load_heuristic = can_inspect_stack_trace\n\t\t\t? stack.includes('src/runtime/client/client.js')\n\t\t\t: loading;\n\n\t\t// This flag is set in initial_fetch and subsequent_fetch\n\t\tconst used_kit_fetch = init?.__sveltekit_fetch__;\n\n\t\tif (in_load_heuristic && !used_kit_fetch) {\n\t\t\tconsole.warn(\n\t\t\t\t`Loading ${url} using \\`window.fetch\\`. For best results, use the \\`fetch\\` that is passed to your \\`load\\` function: https://svelte.dev/docs/kit/load#making-fetch-requests`\n\t\t\t);\n\t\t}\n\n\t\tconst method = input instanceof Request ? input.method : init?.method || 'GET';\n\n\t\tif (method !== 'GET') {\n\t\t\tcache.delete(build_selector(input));\n\t\t}\n\n\t\treturn native_fetch(input, init);\n\t};\n} else if (BROWSER) {\n\twindow.fetch = (input, init) => {\n\t\tconst method = input instanceof Request ? input.method : init?.method || 'GET';\n\n\t\tif (method !== 'GET') {\n\t\t\tcache.delete(build_selector(input));\n\t\t}\n\n\t\treturn native_fetch(input, init);\n\t};\n}\n\nconst cache = new Map();\n\n/**\n * Should be called on the initial run of load functions that hydrate the page.\n * Saves any requests with cache-control max-age to the cache.\n * @param {URL | string} resource\n * @param {RequestInit} [opts]\n */\nexport function initial_fetch(resource, opts) {\n\tconst selector = build_selector(resource, opts);\n\n\tconst script = document.querySelector(selector);\n\tif (script?.textContent) {\n\t\tscript.remove(); // In case multiple script tags match the same selector\n\t\tlet { body, ...init } = JSON.parse(script.textContent);\n\n\t\tconst ttl = script.getAttribute('data-ttl');\n\t\tif (ttl) cache.set(selector, { body, init, ttl: 1000 * Number(ttl) });\n\t\tconst b64 = script.getAttribute('data-b64');\n\t\tif (b64 !== null) {\n\t\t\t// Can't use native_fetch('data:...;base64,${body}')\n\t\t\t// csp can block the request\n\t\t\tbody = base64_decode(body);\n\t\t}\n\n\t\treturn Promise.resolve(new Response(body, init));\n\t}\n\n\treturn DEV ? dev_fetch(resource, opts) : window.fetch(resource, opts);\n}\n\n/**\n * Tries to get the response from the cache, if max-age allows it, else does a fetch.\n * @param {URL | string} resource\n * @param {string} resolved\n * @param {RequestInit} [opts]\n */\nexport function subsequent_fetch(resource, resolved, opts) {\n\tif (cache.size > 0) {\n\t\tconst selector = build_selector(resource, opts);\n\t\tconst cached = cache.get(selector);\n\t\tif (cached) {\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Request/cache#value\n\t\t\tif (\n\t\t\t\tperformance.now() < cached.ttl &&\n\t\t\t\t['default', 'force-cache', 'only-if-cached', undefined].includes(opts?.cache)\n\t\t\t) {\n\t\t\t\treturn new Response(cached.body, cached.init);\n\t\t\t}\n\n\t\t\tcache.delete(selector);\n\t\t}\n\t}\n\n\treturn DEV ? dev_fetch(resolved, opts) : window.fetch(resolved, opts);\n}\n\n/**\n * @param {RequestInfo | URL} resource\n * @param {RequestInit & Record<string, any> | undefined} opts\n */\nexport function dev_fetch(resource, opts) {\n\tconst patched_opts = { ...opts };\n\t// This assigns the __sveltekit_fetch__ flag and makes it non-enumerable\n\tObject.defineProperty(patched_opts, '__sveltekit_fetch__', {\n\t\tvalue: true,\n\t\twritable: true,\n\t\tconfigurable: true\n\t});\n\treturn window.fetch(resource, patched_opts);\n}\n\n/**\n * Build the cache key for a given request\n * @param {URL | RequestInfo} resource\n * @param {RequestInit} [opts]\n */\nfunction build_selector(resource, opts) {\n\tconst url = JSON.stringify(resource instanceof Request ? resource.url : resource);\n\n\tlet selector = `script[data-sveltekit-fetched][data-url=${url}]`;\n\n\tif (opts?.headers || opts?.body) {\n\t\t/** @type {import('types').StrictBody[]} */\n\t\tconst values = [];\n\n\t\tif (opts.headers) {\n\t\t\tvalues.push([...new Headers(opts.headers)].join(','));\n\t\t}\n\n\t\tif (opts.body && (typeof opts.body === 'string' || ArrayBuffer.isView(opts.body))) {\n\t\t\tvalues.push(opts.body);\n\t\t}\n\n\t\tselector += `[data-hash=\"${hash(...values)}\"]`;\n\t}\n\n\treturn selector;\n}\n","import { BROWSER } from 'esm-env';\nimport { decode_params } from './url.js';\n\nconst param_pattern = /^(\\[)?(\\.\\.\\.)?(\\w+)(?:=(\\w+))?(\\])?$/;\n\n/**\n * Creates the regex pattern, extracts parameter names, and generates types for a route\n * @param {string} id\n */\nexport function parse_route_id(id) {\n\t/** @type {import('types').RouteParam[]} */\n\tconst params = [];\n\n\tconst pattern =\n\t\tid === '/'\n\t\t\t? /^\\/$/\n\t\t\t: new RegExp(\n\t\t\t\t\t`^${get_route_segments(id)\n\t\t\t\t\t\t.map((segment) => {\n\t\t\t\t\t\t\t// special case — /[...rest]/ could contain zero segments\n\t\t\t\t\t\t\tconst rest_match = /^\\[\\.\\.\\.(\\w+)(?:=(\\w+))?\\]$/.exec(segment);\n\t\t\t\t\t\t\tif (rest_match) {\n\t\t\t\t\t\t\t\tparams.push({\n\t\t\t\t\t\t\t\t\tname: rest_match[1],\n\t\t\t\t\t\t\t\t\tmatcher: rest_match[2],\n\t\t\t\t\t\t\t\t\toptional: false,\n\t\t\t\t\t\t\t\t\trest: true,\n\t\t\t\t\t\t\t\t\tchained: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn '(?:/([^]*))?';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// special case — /[[optional]]/ could contain zero segments\n\t\t\t\t\t\t\tconst optional_match = /^\\[\\[(\\w+)(?:=(\\w+))?\\]\\]$/.exec(segment);\n\t\t\t\t\t\t\tif (optional_match) {\n\t\t\t\t\t\t\t\tparams.push({\n\t\t\t\t\t\t\t\t\tname: optional_match[1],\n\t\t\t\t\t\t\t\t\tmatcher: optional_match[2],\n\t\t\t\t\t\t\t\t\toptional: true,\n\t\t\t\t\t\t\t\t\trest: false,\n\t\t\t\t\t\t\t\t\tchained: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn '(?:/([^/]+))?';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!segment) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst parts = segment.split(/\\[(.+?)\\](?!\\])/);\n\t\t\t\t\t\t\tconst result = parts\n\t\t\t\t\t\t\t\t.map((content, i) => {\n\t\t\t\t\t\t\t\t\tif (i % 2) {\n\t\t\t\t\t\t\t\t\t\tif (content.startsWith('x+')) {\n\t\t\t\t\t\t\t\t\t\t\treturn escape(String.fromCharCode(parseInt(content.slice(2), 16)));\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (content.startsWith('u+')) {\n\t\t\t\t\t\t\t\t\t\t\treturn escape(\n\t\t\t\t\t\t\t\t\t\t\t\tString.fromCharCode(\n\t\t\t\t\t\t\t\t\t\t\t\t\t...content\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.slice(2)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.split('-')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map((code) => parseInt(code, 16))\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// We know the match cannot be null in the browser because manifest generation\n\t\t\t\t\t\t\t\t\t\t// would have invoked this during build and failed if we hit an invalid\n\t\t\t\t\t\t\t\t\t\t// param/matcher name with non-alphanumeric character.\n\t\t\t\t\t\t\t\t\t\tconst match = /** @type {RegExpExecArray} */ (param_pattern.exec(content));\n\t\t\t\t\t\t\t\t\t\tif (!BROWSER && !match) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\t\t`Invalid param: ${content}. Params and matcher names can only have underscores and alphanumeric characters.`\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst [, is_optional, is_rest, name, matcher] = match;\n\t\t\t\t\t\t\t\t\t\t// It's assumed that the following invalid route id cases are already checked\n\t\t\t\t\t\t\t\t\t\t// - unbalanced brackets\n\t\t\t\t\t\t\t\t\t\t// - optional param following rest param\n\n\t\t\t\t\t\t\t\t\t\tparams.push({\n\t\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\t\t\t\t\toptional: !!is_optional,\n\t\t\t\t\t\t\t\t\t\t\trest: !!is_rest,\n\t\t\t\t\t\t\t\t\t\t\tchained: is_rest ? i === 1 && parts[0] === '' : false\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\treturn is_rest ? '([^]*?)' : is_optional ? '([^/]*)?' : '([^/]+?)';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn escape(content);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.join('');\n\n\t\t\t\t\t\t\treturn '/' + result;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join('')}/?$`\n\t\t\t\t);\n\n\treturn { pattern, params };\n}\n\nconst optional_param_regex = /\\/\\[\\[\\w+?(?:=\\w+)?\\]\\]/;\n\n/**\n * Removes optional params from a route ID.\n * @param {string} id\n * @returns The route id with optional params removed\n */\nexport function remove_optional_params(id) {\n\treturn id.replace(optional_param_regex, '');\n}\n\n/**\n * Returns `false` for `(group)` segments\n * @param {string} segment\n */\nfunction affects_path(segment) {\n\treturn segment !== '' && !/^\\([^)]+\\)$/.test(segment);\n}\n\n/**\n * Splits a route id into its segments, removing segments that\n * don't affect the path (i.e. groups). The root route is represented by `/`\n * and will be returned as `['']`.\n * @param {string} route\n * @returns string[]\n */\nexport function get_route_segments(route) {\n\treturn route.slice(1).split('/').filter(affects_path);\n}\n\n/**\n * @param {RegExpMatchArray} match\n * @param {import('types').RouteParam[]} params\n * @param {Record<string, import('@sveltejs/kit').ParamMatcher>} matchers\n */\nexport function exec(match, params, matchers) {\n\t/** @type {Record<string, string>} */\n\tconst result = {};\n\n\tconst values = match.slice(1);\n\tconst values_needing_match = values.filter((value) => value !== undefined);\n\n\tlet buffered = 0;\n\n\tfor (let i = 0; i < params.length; i += 1) {\n\t\tconst param = params[i];\n\t\tlet value = values[i - buffered];\n\n\t\t// in the `[[a=b]]/.../[...rest]` case, if one or more optional parameters\n\t\t// weren't matched, roll the skipped values into the rest\n\t\tif (param.chained && param.rest && buffered) {\n\t\t\tvalue = values\n\t\t\t\t.slice(i - buffered, i + 1)\n\t\t\t\t.filter((s) => s)\n\t\t\t\t.join('/');\n\n\t\t\tbuffered = 0;\n\t\t}\n\n\t\t// if `value` is undefined, it means this is an optional or rest parameter\n\t\tif (value === undefined) {\n\t\t\tif (param.rest) {\n\t\t\t\t// We need to allow the matcher to run so that it can decide if this optional rest param should be allowed to match\n\t\t\t\tvalue = '';\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (!param.matcher || matchers[param.matcher](value)) {\n\t\t\tresult[param.name] = value;\n\n\t\t\t// Now that the params match, reset the buffer if the next param isn't the [...rest]\n\t\t\t// and the next value is defined, otherwise the buffer will cause us to skip values\n\t\t\tconst next_param = params[i + 1];\n\t\t\tconst next_value = values[i + 1];\n\t\t\tif (next_param && !next_param.rest && next_param.optional && next_value && param.chained) {\n\t\t\t\tbuffered = 0;\n\t\t\t}\n\n\t\t\t// There are no more params and no more values, but all non-empty values have been matched\n\t\t\tif (\n\t\t\t\t!next_param &&\n\t\t\t\t!next_value &&\n\t\t\t\tObject.keys(result).length === values_needing_match.length\n\t\t\t) {\n\t\t\t\tbuffered = 0;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\t// in the `/[[a=b]]/...` case, if the value didn't satisfy the matcher,\n\t\t// keep track of the number of skipped optional parameters and continue\n\t\tif (param.optional && param.chained) {\n\t\t\tbuffered++;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// otherwise, if the matcher returns `false`, the route did not match\n\t\treturn;\n\t}\n\n\tif (buffered) return;\n\treturn result;\n}\n\n/** @param {string} str */\nfunction escape(str) {\n\treturn (\n\t\tstr\n\t\t\t.normalize()\n\t\t\t// escape [ and ] before escaping other characters, since they are used in the replacements\n\t\t\t.replace(/[[\\]]/g, '\\\\$&')\n\t\t\t// replace %, /, ? and # with their encoded versions because decode_pathname leaves them untouched\n\t\t\t.replace(/%/g, '%25')\n\t\t\t.replace(/\\//g, '%2[Ff]')\n\t\t\t.replace(/\\?/g, '%3[Ff]')\n\t\t\t.replace(/#/g, '%23')\n\t\t\t// escape characters that have special meaning in regex\n\t\t\t.replace(/[.*+?^${}()|\\\\]/g, '\\\\$&')\n\t);\n}\n\nconst basic_param_pattern = /\\[(\\[)?(\\.\\.\\.)?(\\w+?)(?:=(\\w+))?\\]\\]?/g;\n\n/**\n * Populate a route ID with params to resolve a pathname.\n * @example\n * ```js\n * resolveRoute(\n *   `/blog/[slug]/[...somethingElse]`,\n *   {\n *     slug: 'hello-world',\n *     somethingElse: 'something/else'\n *   }\n * ); // `/blog/hello-world/something/else`\n * ```\n * @param {string} id\n * @param {Record<string, string | undefined>} params\n * @returns {string}\n */\nexport function resolve_route(id, params) {\n\tconst segments = get_route_segments(id);\n\tconst has_id_trailing_slash = id != '/' && id.endsWith('/');\n\n\treturn (\n\t\t'/' +\n\t\tsegments\n\t\t\t.map((segment) =>\n\t\t\t\tsegment.replace(basic_param_pattern, (_, optional, rest, name) => {\n\t\t\t\t\tconst param_value = params[name];\n\n\t\t\t\t\t// This is nested so TS correctly narrows the type\n\t\t\t\t\tif (!param_value) {\n\t\t\t\t\t\tif (optional) return '';\n\t\t\t\t\t\tif (rest && param_value !== undefined) return '';\n\t\t\t\t\t\tthrow new Error(`Missing parameter '${name}' in route ${id}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (param_value.startsWith('/') || param_value.endsWith('/'))\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Parameter '${name}' in route ${id} cannot start or end with a slash -- this would cause an invalid route like foo//bar`\n\t\t\t\t\t\t);\n\t\t\t\t\treturn param_value;\n\t\t\t\t})\n\t\t\t)\n\t\t\t.filter(Boolean)\n\t\t\t.join('/') +\n\t\t(has_id_trailing_slash ? '/' : '')\n\t);\n}\n\n/**\n * @param {import('types').SSRNode} node\n * @returns {boolean}\n */\nexport function has_server_load(node) {\n\treturn node.server?.load !== undefined || node.server?.trailingSlash !== undefined;\n}\n\n/**\n * Find the first route that matches the given path\n * @template {{pattern: RegExp, params: import('types').RouteParam[]}} Route\n * @param {string} path - The decoded pathname to match\n * @param {Route[]} routes\n * @param {Record<string, import('@sveltejs/kit').ParamMatcher>} matchers\n * @returns {{ route: Route, params: Record<string, string> } | null}\n */\nexport function find_route(path, routes, matchers) {\n\tfor (const route of routes) {\n\t\tconst match = route.pattern.exec(path);\n\t\tif (!match) continue;\n\n\t\tconst matched = exec(match, route.params, matchers);\n\t\tif (matched) {\n\t\t\treturn {\n\t\t\t\troute,\n\t\t\t\tparams: decode_params(matched)\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n","import { exec, parse_route_id } from '../../utils/routing.js';\n\n/**\n * @param {import('./types.js').SvelteKitApp} app\n * @returns {import('types').CSRRoute[]}\n */\nexport function parse({ nodes, server_loads, dictionary, matchers }) {\n\tconst layouts_with_server_load = new Set(server_loads);\n\n\treturn Object.entries(dictionary).map(([id, [leaf, layouts, errors]]) => {\n\t\tconst { pattern, params } = parse_route_id(id);\n\n\t\t/** @type {import('types').CSRRoute} */\n\t\tconst route = {\n\t\t\tid,\n\t\t\t/** @param {string} path */\n\t\t\texec: (path) => {\n\t\t\t\tconst match = pattern.exec(path);\n\t\t\t\tif (match) return exec(match, params, matchers);\n\t\t\t},\n\t\t\terrors: [1, ...(errors || [])].map((n) => nodes[n]),\n\t\t\tlayouts: [0, ...(layouts || [])].map(create_layout_loader),\n\t\t\tleaf: create_leaf_loader(leaf)\n\t\t};\n\n\t\t// bit of a hack, but ensures that layout/error node lists are the same\n\t\t// length, without which the wrong data will be applied if the route\n\t\t// manifest looks like `[[a, b], [c,], d]`\n\t\troute.errors.length = route.layouts.length = Math.max(\n\t\t\troute.errors.length,\n\t\t\troute.layouts.length\n\t\t);\n\n\t\treturn route;\n\t});\n\n\t/**\n\t * @param {number} id\n\t * @returns {[boolean, import('types').CSRPageNodeLoader]}\n\t */\n\tfunction create_leaf_loader(id) {\n\t\t// whether or not the route uses the server data is\n\t\t// encoded using the ones' complement, to save space\n\t\tconst uses_server_data = id < 0;\n\t\tif (uses_server_data) id = ~id;\n\t\treturn [uses_server_data, nodes[id]];\n\t}\n\n\t/**\n\t * @param {number | undefined} id\n\t * @returns {[boolean, import('types').CSRPageNodeLoader] | undefined}\n\t */\n\tfunction create_layout_loader(id) {\n\t\t// whether or not the layout uses the server data is\n\t\t// encoded in the layouts array, to save space\n\t\treturn id === undefined ? id : [layouts_with_server_load.has(id), nodes[id]];\n\t}\n}\n\n/**\n * @param {import('types').CSRRouteServer} input\n * @param {import('types').CSRPageNodeLoader[]} app_nodes Will be modified if a new node is loaded that's not already in the array\n * @returns {import('types').CSRRoute}\n */\nexport function parse_server_route({ nodes, id, leaf, layouts, errors }, app_nodes) {\n\treturn {\n\t\tid,\n\t\texec: () => ({}), // dummy function; exec already happened on the server\n\t\t// By writing to app_nodes only when a loader at that index is not already defined,\n\t\t// we ensure that loaders have referential equality when they load the same node.\n\t\t// Code elsewhere in client.js relies on this referential equality to determine\n\t\t// if a loader is different and should therefore (re-)run.\n\t\terrors: errors.map((n) => (n ? (app_nodes[n] ||= nodes[n]) : undefined)),\n\t\tlayouts: layouts.map((n) => (n ? [n[0], (app_nodes[n[1]] ||= nodes[n[1]])] : undefined)),\n\t\tleaf: [leaf[0], (app_nodes[leaf[1]] ||= nodes[leaf[1]])]\n\t};\n}\n","/**\n * Read a value from `sessionStorage`\n * @param {string} key\n * @param {(value: string) => any} parse\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get(key, parse = JSON.parse) {\n\ttry {\n\t\treturn parse(sessionStorage[key]);\n\t} catch {\n\t\t// do nothing\n\t}\n}\n\n/**\n * Write a value to `sessionStorage`\n * @param {string} key\n * @param {any} value\n * @param {(value: any) => string} stringify\n */\nexport function set(key, value, stringify = JSON.stringify) {\n\tconst data = stringify(value);\n\ttry {\n\t\tsessionStorage[key] = data;\n\t} catch {\n\t\t// do nothing\n\t}\n}\n","export const base = __SVELTEKIT_PAYLOAD__?.base ?? __SVELTEKIT_PATHS_BASE__;\nexport const assets = __SVELTEKIT_PAYLOAD__?.assets ?? base ?? __SVELTEKIT_PATHS_ASSETS__;\nexport const app_dir = __SVELTEKIT_APP_DIR__;\nexport const hash_routing = __SVELTEKIT_HASH_ROUTING__;\n","/** @import { Asset, RouteId, RouteIdWithSearchOrHash, Pathname, PathnameWithSearchOrHash, ResolvedPathname } from '$app/types' */\n/** @import { ResolveArgs } from './types.js' */\nimport { base, assets, hash_routing } from './internal/client.js';\nimport { resolve_route } from '../../../utils/routing.js';\nimport { get_navigation_intent } from '../../client/client.js';\n\n/**\n * Resolve the URL of an asset in your `static` directory, by prefixing it with [`config.kit.paths.assets`](https://svelte.dev/docs/kit/configuration#paths) if configured, or otherwise by prefixing it with the base path.\n *\n * During server rendering, the base path is relative and depends on the page currently being rendered.\n *\n * @example\n * ```svelte\n * <script>\n * \timport { asset } from '$app/paths';\n * </script>\n *\n * <img alt=\"a potato\" src={asset('/potato.jpg')} />\n * ```\n * @since 2.26\n *\n * @param {Asset} file\n * @returns {string}\n */\nexport function asset(file) {\n\treturn (assets || base) + file;\n}\n\nconst pathname_prefix = hash_routing ? '#' : '';\n\n/**\n * Resolve a pathname by prefixing it with the base path, if any, or resolve a route ID by populating dynamic segments with parameters.\n *\n * During server rendering, the base path is relative and depends on the page currently being rendered.\n *\n * @example\n * ```js\n * import { resolve } from '$app/paths';\n *\n * // using a pathname\n * const resolved = resolve(`/blog/hello-world`);\n *\n * // using a route ID plus parameters\n * const resolved = resolve('/blog/[slug]', {\n * \tslug: 'hello-world'\n * });\n * ```\n * @since 2.26\n *\n * @template {RouteIdWithSearchOrHash | PathnameWithSearchOrHash} T\n * @param {ResolveArgs<T>} args\n * @returns {ResolvedPathname}\n */\nexport function resolve(...args) {\n\t// The type error is correct here, and if someone doesn't pass params when they should there's a runtime error,\n\t// but we don't want to adjust the internal resolve_route function to accept `undefined`, hence the type cast.\n\treturn (\n\t\tbase + pathname_prefix + resolve_route(args[0], /** @type {Record<string, string>} */ (args[1]))\n\t);\n}\n\n/**\n * Match a path or URL to a route ID and extracts any parameters.\n *\n * @example\n * ```js\n * import { match } from '$app/paths';\n *\n * const route = await match('/blog/hello-world');\n *\n * if (route?.id === '/blog/[slug]') {\n * \tconst slug = route.params.slug;\n * \tconst response = await fetch(`/api/posts/${slug}`);\n * \tconst post = await response.json();\n * }\n * ```\n * @since 2.52.0\n *\n * @param {Pathname | URL | (string & {})} url\n * @returns {Promise<{ id: RouteId, params: Record<string, string> } | null>}\n */\nexport async function match(url) {\n\tif (typeof url === 'string') {\n\t\turl = new URL(url, location.href);\n\t}\n\n\tconst intent = await get_navigation_intent(url, false);\n\n\tif (intent) {\n\t\treturn {\n\t\t\tid: /** @type {RouteId} */ (intent.route.id),\n\t\t\tparams: intent.params\n\t\t};\n\t}\n\n\treturn null;\n}\n\nexport { base, assets, resolve as resolveRoute };\n","export const SNAPSHOT_KEY = 'sveltekit:snapshot';\nexport const SCROLL_KEY = 'sveltekit:scroll';\nexport const STATES_KEY = 'sveltekit:states';\nexport const PAGE_URL_KEY = 'sveltekit:pageurl';\n\nexport const HISTORY_INDEX = 'sveltekit:history';\nexport const NAVIGATION_INDEX = 'sveltekit:navigation';\n\nexport const PRELOAD_PRIORITIES = /** @type {const} */ ({\n\ttap: 1,\n\thover: 2,\n\tviewport: 3,\n\teager: 4,\n\toff: -1,\n\tfalse: -1\n});\n","import { BROWSER, DEV } from 'esm-env';\nimport { writable } from 'svelte/store';\nimport { assets } from '$app/paths';\nimport { version } from '__sveltekit/environment';\nimport { PRELOAD_PRIORITIES } from './constants.js';\n\n/* global __SVELTEKIT_APP_VERSION_FILE__, __SVELTEKIT_APP_VERSION_POLL_INTERVAL__ */\n\nexport const origin = BROWSER ? location.origin : '';\n\n/** @param {string | URL} url */\nexport function resolve_url(url) {\n\tif (url instanceof URL) return url;\n\n\tlet baseURI = document.baseURI;\n\n\tif (!baseURI) {\n\t\tconst baseTags = document.getElementsByTagName('base');\n\t\tbaseURI = baseTags.length ? baseTags[0].href : document.URL;\n\t}\n\n\treturn new URL(url, baseURI);\n}\n\nexport function scroll_state() {\n\treturn {\n\t\tx: pageXOffset,\n\t\ty: pageYOffset\n\t};\n}\n\nconst warned = new WeakSet();\n\n/** @typedef {keyof typeof valid_link_options} LinkOptionName */\n\nconst valid_link_options = /** @type {const} */ ({\n\t'preload-code': ['', 'off', 'false', 'tap', 'hover', 'viewport', 'eager'],\n\t'preload-data': ['', 'off', 'false', 'tap', 'hover'],\n\tkeepfocus: ['', 'true', 'off', 'false'],\n\tnoscroll: ['', 'true', 'off', 'false'],\n\treload: ['', 'true', 'off', 'false'],\n\treplacestate: ['', 'true', 'off', 'false']\n});\n\n/**\n * @template {LinkOptionName} T\n * @typedef {typeof valid_link_options[T][number]} ValidLinkOptions\n */\n\n/**\n * @template {LinkOptionName} T\n * @param {Element} element\n * @param {T} name\n */\nfunction link_option(element, name) {\n\tconst value = /** @type {ValidLinkOptions<T> | null} */ (\n\t\telement.getAttribute(`data-sveltekit-${name}`)\n\t);\n\n\tif (DEV) {\n\t\tvalidate_link_option(element, name, value);\n\t}\n\n\treturn value;\n}\n\n/**\n * @template {LinkOptionName} T\n * @template {ValidLinkOptions<T> | null} U\n * @param {Element} element\n * @param {T} name\n * @param {U} value\n */\nfunction validate_link_option(element, name, value) {\n\tif (value === null) return;\n\n\t// @ts-expect-error - includes is dumb\n\tif (!warned.has(element) && !valid_link_options[name].includes(value)) {\n\t\tconsole.error(\n\t\t\t`Unexpected value for ${name} — should be one of ${valid_link_options[name]\n\t\t\t\t.map((option) => JSON.stringify(option))\n\t\t\t\t.join(', ')}`,\n\t\t\telement\n\t\t);\n\n\t\twarned.add(element);\n\t}\n}\n\nconst levels = {\n\t...PRELOAD_PRIORITIES,\n\t'': PRELOAD_PRIORITIES.hover\n};\n\n/**\n * @param {Element} element\n * @returns {Element | null}\n */\nfunction parent_element(element) {\n\tlet parent = element.assignedSlot ?? element.parentNode;\n\n\t// @ts-expect-error handle shadow roots\n\tif (parent?.nodeType === 11) parent = parent.host;\n\n\treturn /** @type {Element} */ (parent);\n}\n\n/**\n * @param {Element} element\n * @param {Element} target\n */\nexport function find_anchor(element, target) {\n\twhile (element && element !== target) {\n\t\tif (element.nodeName.toUpperCase() === 'A' && element.hasAttribute('href')) {\n\t\t\treturn /** @type {HTMLAnchorElement | SVGAElement} */ (element);\n\t\t}\n\n\t\telement = /** @type {Element} */ (parent_element(element));\n\t}\n}\n\n/**\n * @param {HTMLAnchorElement | SVGAElement} a\n * @param {string} base\n * @param {boolean} uses_hash_router\n */\nexport function get_link_info(a, base, uses_hash_router) {\n\t/** @type {URL | undefined} */\n\tlet url;\n\n\ttry {\n\t\turl = new URL(a instanceof SVGAElement ? a.href.baseVal : a.href, document.baseURI);\n\n\t\t// if the hash doesn't start with `#/` then it's probably linking to an id on the current page\n\t\tif (uses_hash_router && url.hash.match(/^#[^/]/)) {\n\t\t\tconst route = location.hash.split('#')[1] || '/';\n\t\t\turl.hash = `#${route}${url.hash}`;\n\t\t}\n\t} catch {}\n\n\tconst target = a instanceof SVGAElement ? a.target.baseVal : a.target;\n\n\tconst external =\n\t\t!url ||\n\t\t!!target ||\n\t\tis_external_url(url, base, uses_hash_router) ||\n\t\t(a.getAttribute('rel') || '').split(/\\s+/).includes('external');\n\n\tconst download = url?.origin === origin && a.hasAttribute('download');\n\n\treturn { url, external, target, download };\n}\n\n/**\n * @param {HTMLFormElement | HTMLAnchorElement | SVGAElement} element\n */\nexport function get_router_options(element) {\n\t/** @type {ValidLinkOptions<'keepfocus'> | null} */\n\tlet keepfocus = null;\n\n\t/** @type {ValidLinkOptions<'noscroll'> | null} */\n\tlet noscroll = null;\n\n\t/** @type {ValidLinkOptions<'preload-code'> | null} */\n\tlet preload_code = null;\n\n\t/** @type {ValidLinkOptions<'preload-data'> | null} */\n\tlet preload_data = null;\n\n\t/** @type {ValidLinkOptions<'reload'> | null} */\n\tlet reload = null;\n\n\t/** @type {ValidLinkOptions<'replacestate'> | null} */\n\tlet replace_state = null;\n\n\t/** @type {Element} */\n\tlet el = element;\n\n\twhile (el && el !== document.documentElement) {\n\t\tif (preload_code === null) preload_code = link_option(el, 'preload-code');\n\t\tif (preload_data === null) preload_data = link_option(el, 'preload-data');\n\t\tif (keepfocus === null) keepfocus = link_option(el, 'keepfocus');\n\t\tif (noscroll === null) noscroll = link_option(el, 'noscroll');\n\t\tif (reload === null) reload = link_option(el, 'reload');\n\t\tif (replace_state === null) replace_state = link_option(el, 'replacestate');\n\n\t\tel = /** @type {Element} */ (parent_element(el));\n\t}\n\n\t/** @param {string | null} value */\n\tfunction get_option_state(value) {\n\t\tswitch (value) {\n\t\t\tcase '':\n\t\t\tcase 'true':\n\t\t\t\treturn true;\n\t\t\tcase 'off':\n\t\t\tcase 'false':\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn undefined;\n\t\t}\n\t}\n\n\treturn {\n\t\tpreload_code: levels[preload_code ?? 'off'],\n\t\tpreload_data: levels[preload_data ?? 'off'],\n\t\tkeepfocus: get_option_state(keepfocus),\n\t\tnoscroll: get_option_state(noscroll),\n\t\treload: get_option_state(reload),\n\t\treplace_state: get_option_state(replace_state)\n\t};\n}\n\n/** @param {any} value */\nexport function notifiable_store(value) {\n\tconst store = writable(value);\n\tlet ready = true;\n\n\tfunction notify() {\n\t\tready = true;\n\t\tstore.update((val) => val);\n\t}\n\n\t/** @param {any} new_value */\n\tfunction set(new_value) {\n\t\tready = false;\n\t\tstore.set(new_value);\n\t}\n\n\t/** @param {(value: any) => void} run */\n\tfunction subscribe(run) {\n\t\t/** @type {any} */\n\t\tlet old_value;\n\t\treturn store.subscribe((new_value) => {\n\t\t\tif (old_value === undefined || (ready && new_value !== old_value)) {\n\t\t\t\trun((old_value = new_value));\n\t\t\t}\n\t\t});\n\t}\n\n\treturn { notify, set, subscribe };\n}\n\nexport const updated_listener = {\n\tv: () => {}\n};\n\nexport function create_updated_store() {\n\tconst { set, subscribe } = writable(false);\n\n\tif (DEV || !BROWSER) {\n\t\treturn {\n\t\t\tsubscribe,\n\t\t\t// eslint-disable-next-line @typescript-eslint/require-await\n\t\t\tcheck: async () => false\n\t\t};\n\t}\n\n\tconst interval = __SVELTEKIT_APP_VERSION_POLL_INTERVAL__;\n\n\t/** @type {NodeJS.Timeout} */\n\tlet timeout;\n\n\t/** @type {() => Promise<boolean>} */\n\tasync function check() {\n\t\tclearTimeout(timeout);\n\n\t\tif (interval) timeout = setTimeout(check, interval);\n\n\t\ttry {\n\t\t\tconst res = await fetch(`${assets}/${__SVELTEKIT_APP_VERSION_FILE__}`, {\n\t\t\t\theaders: {\n\t\t\t\t\tpragma: 'no-cache',\n\t\t\t\t\t'cache-control': 'no-cache'\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!res.ok) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst data = await res.json();\n\t\t\tconst updated = data.version !== version;\n\n\t\t\tif (updated) {\n\t\t\t\tset(true);\n\t\t\t\tupdated_listener.v();\n\t\t\t\tclearTimeout(timeout);\n\t\t\t}\n\n\t\t\treturn updated;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (interval) timeout = setTimeout(check, interval);\n\n\treturn {\n\t\tsubscribe,\n\t\tcheck\n\t};\n}\n\n/**\n * Is external if\n * - origin different\n * - path doesn't start with base\n * - uses hash router and pathname is more than base\n * @param {URL} url\n * @param {string} base\n * @param {boolean} hash_routing\n */\nexport function is_external_url(url, base, hash_routing) {\n\tif (url.origin !== origin || !url.pathname.startsWith(base)) {\n\t\treturn true;\n\t}\n\n\tif (hash_routing) {\n\t\treturn url.pathname !== location.pathname;\n\t}\n\n\treturn false;\n}\n\n/** @type {Set<string> | null} */\nlet seen = null;\n\n/**\n * Used for server-side resolution, to replicate Vite's CSS loading behaviour in production.\n *\n * Closely modelled after https://github.com/vitejs/vite/blob/3dd12f4724130fdf8ba44c6d3252ebdff407fd47/packages/vite/src/node/plugins/importAnalysisBuild.ts#L214\n * (which ideally we could just use directly, but it's not exported)\n * @param {string[]} deps\n */\nexport function load_css(deps) {\n\tif (__SVELTEKIT_CLIENT_ROUTING__) return;\n\n\tconst csp_nonce_meta = /** @type {HTMLMetaElement} */ (\n\t\tdocument.querySelector('meta[property=csp-nonce]')\n\t);\n\tconst csp_nonce = csp_nonce_meta?.nonce || csp_nonce_meta?.getAttribute('nonce');\n\n\tseen ??= new Set(\n\t\tArray.from(document.querySelectorAll('link[rel=\"stylesheet\"]')).map((link) => {\n\t\t\treturn /** @type {HTMLLinkElement} */ (link).href;\n\t\t})\n\t);\n\n\tfor (const dep of deps) {\n\t\tconst href = new URL(dep, document.baseURI).href;\n\n\t\tif (seen.has(href)) continue;\n\t\tseen.add(href);\n\n\t\tconst link = document.createElement('link');\n\t\tlink.rel = 'stylesheet';\n\t\tlink.crossOrigin = '';\n\t\tlink.href = dep;\n\t\tif (csp_nonce) {\n\t\t\tlink.setAttribute('nonce', csp_nonce);\n\t\t}\n\t\tdocument.head.appendChild(link);\n\t}\n}\n","/**\n * Base64 Encodes an arraybuffer\n * @param {ArrayBuffer} arraybuffer\n * @returns {string}\n */\nexport function encode64(arraybuffer) {\n  const dv = new DataView(arraybuffer);\n  let binaryString = \"\";\n\n  for (let i = 0; i < arraybuffer.byteLength; i++) {\n    binaryString += String.fromCharCode(dv.getUint8(i));\n  }\n\n  return binaryToAscii(binaryString);\n}\n\n/**\n * Decodes a base64 string into an arraybuffer\n * @param {string} string\n * @returns {ArrayBuffer}\n */\nexport function decode64(string) {\n  const binaryString = asciiToBinary(string);\n  const arraybuffer = new ArrayBuffer(binaryString.length);\n  const dv = new DataView(arraybuffer);\n\n  for (let i = 0; i < arraybuffer.byteLength; i++) {\n    dv.setUint8(i, binaryString.charCodeAt(i));\n  }\n\n  return arraybuffer;\n}\n\nconst KEY_STRING =\n  \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n/**\n * Substitute for atob since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/atob.js\n *\n * @param {string} data\n * @returns {string}\n */\nfunction asciiToBinary(data) {\n  if (data.length % 4 === 0) {\n    data = data.replace(/==?$/, \"\");\n  }\n\n  let output = \"\";\n  let buffer = 0;\n  let accumulatedBits = 0;\n\n  for (let i = 0; i < data.length; i++) {\n    buffer <<= 6;\n    buffer |= KEY_STRING.indexOf(data[i]);\n    accumulatedBits += 6;\n    if (accumulatedBits === 24) {\n      output += String.fromCharCode((buffer & 0xff0000) >> 16);\n      output += String.fromCharCode((buffer & 0xff00) >> 8);\n      output += String.fromCharCode(buffer & 0xff);\n      buffer = accumulatedBits = 0;\n    }\n  }\n  if (accumulatedBits === 12) {\n    buffer >>= 4;\n    output += String.fromCharCode(buffer);\n  } else if (accumulatedBits === 18) {\n    buffer >>= 2;\n    output += String.fromCharCode((buffer & 0xff00) >> 8);\n    output += String.fromCharCode(buffer & 0xff);\n  }\n  return output;\n}\n\n/**\n * Substitute for btoa since it's deprecated in node.\n * Does not do any input validation.\n *\n * @see https://github.com/jsdom/abab/blob/master/lib/btoa.js\n *\n * @param {string} str\n * @returns {string}\n */\nfunction binaryToAscii(str) {\n  let out = \"\";\n  for (let i = 0; i < str.length; i += 3) {\n    /** @type {[number, number, number, number]} */\n    const groupsOfSix = [undefined, undefined, undefined, undefined];\n    groupsOfSix[0] = str.charCodeAt(i) >> 2;\n    groupsOfSix[1] = (str.charCodeAt(i) & 0x03) << 4;\n    if (str.length > i + 1) {\n      groupsOfSix[1] |= str.charCodeAt(i + 1) >> 4;\n      groupsOfSix[2] = (str.charCodeAt(i + 1) & 0x0f) << 2;\n    }\n    if (str.length > i + 2) {\n      groupsOfSix[2] |= str.charCodeAt(i + 2) >> 6;\n      groupsOfSix[3] = str.charCodeAt(i + 2) & 0x3f;\n    }\n    for (let j = 0; j < groupsOfSix.length; j++) {\n      if (typeof groupsOfSix[j] === \"undefined\") {\n        out += \"=\";\n      } else {\n        out += KEY_STRING[groupsOfSix[j]];\n      }\n    }\n  }\n  return out;\n}\n","export const UNDEFINED = -1;\nexport const HOLE = -2;\nexport const NAN = -3;\nexport const POSITIVE_INFINITY = -4;\nexport const NEGATIVE_INFINITY = -5;\nexport const NEGATIVE_ZERO = -6;\nexport const SPARSE = -7;\n","import { decode64 } from './base64.js';\nimport {\n\tHOLE,\n\tNAN,\n\tNEGATIVE_INFINITY,\n\tNEGATIVE_ZERO,\n\tPOSITIVE_INFINITY,\n\tSPARSE,\n\tUNDEFINED\n} from './constants.js';\n\n/**\n * Revive a value serialized with `devalue.stringify`\n * @param {string} serialized\n * @param {Record<string, (value: any) => any>} [revivers]\n */\nexport function parse(serialized, revivers) {\n\treturn unflatten(JSON.parse(serialized), revivers);\n}\n\n/**\n * Revive a value flattened with `devalue.stringify`\n * @param {number | any[]} parsed\n * @param {Record<string, (value: any) => any>} [revivers]\n */\nexport function unflatten(parsed, revivers) {\n\tif (typeof parsed === 'number') return hydrate(parsed, true);\n\n\tif (!Array.isArray(parsed) || parsed.length === 0) {\n\t\tthrow new Error('Invalid input');\n\t}\n\n\tconst values = /** @type {any[]} */ (parsed);\n\n\tconst hydrated = Array(values.length);\n\n\t/**\n\t * A set of values currently being hydrated with custom revivers,\n\t * used to detect invalid cyclical dependencies\n\t * @type {Set<number> | null}\n\t */\n\tlet hydrating = null;\n\n\t/**\n\t * @param {number} index\n\t * @returns {any}\n\t */\n\tfunction hydrate(index, standalone = false) {\n\t\tif (index === UNDEFINED) return undefined;\n\t\tif (index === NAN) return NaN;\n\t\tif (index === POSITIVE_INFINITY) return Infinity;\n\t\tif (index === NEGATIVE_INFINITY) return -Infinity;\n\t\tif (index === NEGATIVE_ZERO) return -0;\n\n\t\tif (standalone || typeof index !== 'number') {\n\t\t\tthrow new Error(`Invalid input`);\n\t\t}\n\n\t\tif (index in hydrated) return hydrated[index];\n\n\t\tconst value = values[index];\n\n\t\tif (!value || typeof value !== 'object') {\n\t\t\thydrated[index] = value;\n\t\t} else if (Array.isArray(value)) {\n\t\t\tif (typeof value[0] === 'string') {\n\t\t\t\tconst type = value[0];\n\n\t\t\t\tconst reviver =\n\t\t\t\t\trevivers && Object.hasOwn(revivers, type)\n\t\t\t\t\t\t? revivers[type]\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tif (reviver) {\n\t\t\t\t\tlet i = value[1];\n\t\t\t\t\tif (typeof i !== 'number') {\n\t\t\t\t\t\t// if it's not a number, it was serialized by a builtin reviver\n\t\t\t\t\t\t// so we need to munge it into the format expected by a custom reviver\n\t\t\t\t\t\ti = values.push(value[1]) - 1;\n\t\t\t\t\t}\n\n\t\t\t\t\thydrating ??= new Set();\n\n\t\t\t\t\tif (hydrating.has(i)) {\n\t\t\t\t\t\tthrow new Error('Invalid circular reference');\n\t\t\t\t\t}\n\n\t\t\t\t\thydrating.add(i);\n\t\t\t\t\thydrated[index] = reviver(hydrate(i));\n\t\t\t\t\thydrating.delete(i);\n\n\t\t\t\t\treturn hydrated[index];\n\t\t\t\t}\n\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'Date':\n\t\t\t\t\t\thydrated[index] = new Date(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Set':\n\t\t\t\t\t\tconst set = new Set();\n\t\t\t\t\t\thydrated[index] = set;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 1) {\n\t\t\t\t\t\t\tset.add(hydrate(value[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Map':\n\t\t\t\t\t\tconst map = new Map();\n\t\t\t\t\t\thydrated[index] = map;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tmap.set(hydrate(value[i]), hydrate(value[i + 1]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RegExp':\n\t\t\t\t\t\thydrated[index] = new RegExp(value[1], value[2]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tconst object = Object(value[1]);\n\n\t\t\t\t\t\tif (Object.hasOwn(object, '__proto__')) {\n\t\t\t\t\t\t\tthrow new Error('Cannot parse an object with a `__proto__` property');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thydrated[index] = object;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BigInt':\n\t\t\t\t\t\thydrated[index] = BigInt(value[1]);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'null':\n\t\t\t\t\t\tconst obj = Object.create(null);\n\t\t\t\t\t\thydrated[index] = obj;\n\t\t\t\t\t\tfor (let i = 1; i < value.length; i += 2) {\n\t\t\t\t\t\t\tif (value[i] === '__proto__') {\n\t\t\t\t\t\t\t\tthrow new Error('Cannot parse an object with a `__proto__` property');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tobj[value[i]] = hydrate(value[i + 1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Int8Array':\n\t\t\t\t\tcase 'Uint8Array':\n\t\t\t\t\tcase 'Uint8ClampedArray':\n\t\t\t\t\tcase 'Int16Array':\n\t\t\t\t\tcase 'Uint16Array':\n\t\t\t\t\tcase 'Int32Array':\n\t\t\t\t\tcase 'Uint32Array':\n\t\t\t\t\tcase 'Float32Array':\n\t\t\t\t\tcase 'Float64Array':\n\t\t\t\t\tcase 'BigInt64Array':\n\t\t\t\t\tcase 'BigUint64Array': {\n\t\t\t\t\t\tif (values[value[1]][0] !== 'ArrayBuffer') {\n\t\t\t\t\t\t\t// without this, if we receive malformed input we could\n\t\t\t\t\t\t\t// end up trying to hydrate in a circle or allocate\n\t\t\t\t\t\t\t// huge amounts of memory when we call `new TypedArrayConstructor(buffer)`\n\t\t\t\t\t\t\tthrow new Error('Invalid data');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst TypedArrayConstructor = globalThis[type];\n\t\t\t\t\t\tconst buffer = hydrate(value[1]);\n\t\t\t\t\t\tconst typedArray = new TypedArrayConstructor(buffer);\n\n\t\t\t\t\t\thydrated[index] =\n\t\t\t\t\t\t\tvalue[2] !== undefined\n\t\t\t\t\t\t\t\t? typedArray.subarray(value[2], value[3])\n\t\t\t\t\t\t\t\t: typedArray;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'ArrayBuffer': {\n\t\t\t\t\t\tconst base64 = value[1];\n\t\t\t\t\t\tif (typeof base64 !== 'string') {\n\t\t\t\t\t\t\tthrow new Error('Invalid ArrayBuffer encoding');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst arraybuffer = decode64(base64);\n\t\t\t\t\t\thydrated[index] = arraybuffer;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'Temporal.Duration':\n\t\t\t\t\tcase 'Temporal.Instant':\n\t\t\t\t\tcase 'Temporal.PlainDate':\n\t\t\t\t\tcase 'Temporal.PlainTime':\n\t\t\t\t\tcase 'Temporal.PlainDateTime':\n\t\t\t\t\tcase 'Temporal.PlainMonthDay':\n\t\t\t\t\tcase 'Temporal.PlainYearMonth':\n\t\t\t\t\tcase 'Temporal.ZonedDateTime': {\n\t\t\t\t\t\tconst temporalName = type.slice(9);\n\t\t\t\t\t\t// @ts-expect-error TS doesn't know about Temporal yet\n\t\t\t\t\t\thydrated[index] = Temporal[temporalName].from(value[1]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'URL': {\n\t\t\t\t\t\tconst url = new URL(value[1]);\n\t\t\t\t\t\thydrated[index] = url;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'URLSearchParams': {\n\t\t\t\t\t\tconst url = new URLSearchParams(value[1]);\n\t\t\t\t\t\thydrated[index] = url;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(`Unknown type ${type}`);\n\t\t\t\t}\n\t\t\t} else if (value[0] === SPARSE) {\n\t\t\t\t// Sparse array encoding: [SPARSE, length, idx, val, idx, val, ...]\n\t\t\t\tconst len = value[1];\n\n\t\t\t\tif (!Number.isInteger(len) || len < 0) {\n\t\t\t\t\tthrow new Error('Invalid input');\n\t\t\t\t}\n\n\t\t\t\tconst array = new Array(len);\n\t\t\t\thydrated[index] = array;\n\n\t\t\t\tfor (let i = 2; i < value.length; i += 2) {\n\t\t\t\t\tconst idx = value[i];\n\n\t\t\t\t\tif (!Number.isInteger(idx) || idx < 0 || idx >= len) {\n\t\t\t\t\t\tthrow new Error('Invalid input');\n\t\t\t\t\t}\n\n\t\t\t\t\tarray[idx] = hydrate(value[i + 1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst array = new Array(value.length);\n\t\t\t\thydrated[index] = array;\n\n\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\tconst n = value[i];\n\t\t\t\t\tif (n === HOLE) continue;\n\n\t\t\t\t\tarray[i] = hydrate(n);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t/** @type {Record<string, any>} */\n\t\t\tconst object = {};\n\t\t\thydrated[index] = object;\n\n\t\t\tfor (const key of Object.keys(value)) {\n\t\t\t\tif (key === '__proto__') {\n\t\t\t\t\tthrow new Error('Cannot parse an object with a `__proto__` property');\n\t\t\t\t}\n\n\t\t\t\tconst n = value[key];\n\t\t\t\tobject[key] = hydrate(n);\n\t\t\t}\n\t\t}\n\n\t\treturn hydrated[index];\n\t}\n\n\treturn hydrate(0);\n}\n","/**\n * @param {Set<string>} expected\n */\nfunction validator(expected) {\n\t/**\n\t * @param {any} module\n\t * @param {string} [file]\n\t */\n\tfunction validate(module, file) {\n\t\tif (!module) return;\n\n\t\tfor (const key in module) {\n\t\t\tif (key[0] === '_' || expected.has(key)) continue; // key is valid in this module\n\n\t\t\tconst values = [...expected.values()];\n\n\t\t\tconst hint =\n\t\t\t\thint_for_supported_files(key, file?.slice(file.lastIndexOf('.'))) ??\n\t\t\t\t`valid exports are ${values.join(', ')}, or anything with a '_' prefix`;\n\n\t\t\tthrow new Error(`Invalid export '${key}'${file ? ` in ${file}` : ''} (${hint})`);\n\t\t}\n\t}\n\n\treturn validate;\n}\n\n/**\n * @param {string} key\n * @param {string} ext\n * @returns {string | void}\n */\nfunction hint_for_supported_files(key, ext = '.js') {\n\tconst supported_files = [];\n\n\tif (valid_layout_exports.has(key)) {\n\t\tsupported_files.push(`+layout${ext}`);\n\t}\n\n\tif (valid_page_exports.has(key)) {\n\t\tsupported_files.push(`+page${ext}`);\n\t}\n\n\tif (valid_layout_server_exports.has(key)) {\n\t\tsupported_files.push(`+layout.server${ext}`);\n\t}\n\n\tif (valid_page_server_exports.has(key)) {\n\t\tsupported_files.push(`+page.server${ext}`);\n\t}\n\n\tif (valid_server_exports.has(key)) {\n\t\tsupported_files.push(`+server${ext}`);\n\t}\n\n\tif (supported_files.length > 0) {\n\t\treturn `'${key}' is a valid export in ${supported_files.slice(0, -1).join(', ')}${\n\t\t\tsupported_files.length > 1 ? ' or ' : ''\n\t\t}${supported_files.at(-1)}`;\n\t}\n}\n\nconst valid_layout_exports = new Set([\n\t'load',\n\t'prerender',\n\t'csr',\n\t'ssr',\n\t'trailingSlash',\n\t'config'\n]);\nconst valid_page_exports = new Set([...valid_layout_exports, 'entries']);\nconst valid_layout_server_exports = new Set([...valid_layout_exports]);\nconst valid_page_server_exports = new Set([...valid_layout_server_exports, 'actions', 'entries']);\nconst valid_server_exports = new Set([\n\t'GET',\n\t'POST',\n\t'PATCH',\n\t'PUT',\n\t'DELETE',\n\t'OPTIONS',\n\t'HEAD',\n\t'fallback',\n\t'prerender',\n\t'trailingSlash',\n\t'config',\n\t'entries'\n]);\n\nexport const validate_layout_exports = validator(valid_layout_exports);\nexport const validate_page_exports = validator(valid_page_exports);\nexport const validate_layout_server_exports = validator(valid_layout_server_exports);\nexport const validate_page_server_exports = validator(valid_page_server_exports);\nexport const validate_server_exports = validator(valid_server_exports);\n","/**\n * Removes nullish values from an array.\n *\n * @template T\n * @param {Array<T>} arr\n */\nexport function compact(arr) {\n\treturn arr.filter(/** @returns {val is NonNullable<T>} */ (val) => val != null);\n}\n","/** @import { Transport } from '@sveltejs/kit' */\nimport * as devalue from 'devalue';\nimport { base64_decode, base64_encode, text_decoder } from './utils.js';\n\n/**\n * @param {string} route_id\n * @param {string} dep\n */\nexport function validate_depends(route_id, dep) {\n\tconst match = /^(moz-icon|view-source|jar):/.exec(dep);\n\tif (match) {\n\t\tconsole.warn(\n\t\t\t`${route_id}: Calling \\`depends('${dep}')\\` will throw an error in Firefox because \\`${match[1]}\\` is a special URI scheme`\n\t\t);\n\t}\n}\n\nexport const INVALIDATED_PARAM = 'x-sveltekit-invalidated';\n\nexport const TRAILING_SLASH_PARAM = 'x-sveltekit-trailing-slash';\n\n/**\n * @param {any} data\n * @param {string} [location_description]\n */\nexport function validate_load_response(data, location_description) {\n\tif (data != null && Object.getPrototypeOf(data) !== Object.prototype) {\n\t\tthrow new Error(\n\t\t\t`a load function ${location_description} returned ${\n\t\t\t\ttypeof data !== 'object'\n\t\t\t\t\t? `a ${typeof data}`\n\t\t\t\t\t: data instanceof Response\n\t\t\t\t\t\t? 'a Response object'\n\t\t\t\t\t\t: Array.isArray(data)\n\t\t\t\t\t\t\t? 'an array'\n\t\t\t\t\t\t\t: 'a non-plain object'\n\t\t\t}, but must return a plain object at the top level (i.e. \\`return {...}\\`)`\n\t\t);\n\t}\n}\n\n/**\n * Try to `devalue.stringify` the data object using the provided transport encoders.\n * @param {any} data\n * @param {Transport} transport\n */\nexport function stringify(data, transport) {\n\tconst encoders = Object.fromEntries(Object.entries(transport).map(([k, v]) => [k, v.encode]));\n\n\treturn devalue.stringify(data, encoders);\n}\n\n/**\n * Stringifies the argument (if any) for a remote function in such a way that\n * it is both a valid URL and a valid file name (necessary for prerendering).\n * @param {any} value\n * @param {Transport} transport\n */\nexport function stringify_remote_arg(value, transport) {\n\tif (value === undefined) return '';\n\n\t// If people hit file/url size limits, we can look into using something like compress_and_encode_text from svelte.dev beyond a certain size\n\tconst json_string = stringify(value, transport);\n\n\tconst bytes = new TextEncoder().encode(json_string);\n\treturn base64_encode(bytes).replaceAll('=', '').replaceAll('+', '-').replaceAll('/', '_');\n}\n\n/**\n * Parses the argument (if any) for a remote function\n * @param {string} string\n * @param {Transport} transport\n */\nexport function parse_remote_arg(string, transport) {\n\tif (!string) return undefined;\n\n\tconst json_string = text_decoder.decode(\n\t\t// no need to add back `=` characters, atob can handle it\n\t\tbase64_decode(string.replaceAll('-', '+').replaceAll('_', '/'))\n\t);\n\n\tconst decoders = Object.fromEntries(Object.entries(transport).map(([k, v]) => [k, v.decode]));\n\n\treturn devalue.parse(json_string, decoders);\n}\n\n/**\n * @param {string} id\n * @param {string} payload\n */\nexport function create_remote_key(id, payload) {\n\treturn id + '/' + payload;\n}\n","import { HttpError, SvelteKitError } from '@sveltejs/kit/internal';\n\n/**\n * @param {unknown} err\n * @return {Error}\n */\nexport function coalesce_to_error(err) {\n\treturn err instanceof Error ||\n\t\t(err && /** @type {any} */ (err).name && /** @type {any} */ (err).message)\n\t\t? /** @type {Error} */ (err)\n\t\t: new Error(JSON.stringify(err));\n}\n\n/**\n * This is an identity function that exists to make TypeScript less\n * paranoid about people throwing things that aren't errors, which\n * frankly is not something we should care about\n * @param {unknown} error\n */\nexport function normalize_error(error) {\n\treturn /** @type {import('../exports/internal/index.js').Redirect | HttpError | SvelteKitError | Error} */ (\n\t\terror\n\t);\n}\n\n/**\n * @param {unknown} error\n */\nexport function get_status(error) {\n\treturn error instanceof HttpError || error instanceof SvelteKitError ? error.status : 500;\n}\n\n/**\n * @param {unknown} error\n */\nexport function get_message(error) {\n\treturn error instanceof SvelteKitError ? error.text : 'Internal Error';\n}\n","import { onMount } from 'svelte';\nimport { updated_listener } from './utils.js';\n\n/** @type {import('@sveltejs/kit').Page} */\nexport let page;\n\n/** @type {{ current: import('@sveltejs/kit').Navigation | null }} */\nexport let navigating;\n\n/** @type {{ current: boolean }} */\nexport let updated;\n\n// this is a bootleg way to tell if we're in old svelte or new svelte\nconst is_legacy =\n\tonMount.toString().includes('$$') || /function \\w+\\(\\) \\{\\}/.test(onMount.toString());\n\nconst placeholder_url = 'a:';\n\nif (is_legacy) {\n\tpage = {\n\t\tdata: {},\n\t\tform: null,\n\t\terror: null,\n\t\tparams: {},\n\t\troute: { id: null },\n\t\tstate: {},\n\t\tstatus: -1,\n\t\turl: new URL(placeholder_url)\n\t};\n\tnavigating = { current: null };\n\tupdated = { current: false };\n} else {\n\tpage = new (class Page {\n\t\tdata = $state.raw({});\n\t\tform = $state.raw(null);\n\t\terror = $state.raw(null);\n\t\tparams = $state.raw({});\n\t\troute = $state.raw({ id: null });\n\t\tstate = $state.raw({});\n\t\tstatus = $state.raw(-1);\n\t\turl = $state.raw(new URL(placeholder_url));\n\t})();\n\n\tnavigating = new (class Navigating {\n\t\tcurrent = $state.raw(null);\n\t})();\n\n\tupdated = new (class Updated {\n\t\tcurrent = $state.raw(false);\n\t})();\n\tupdated_listener.v = () => (updated.current = true);\n}\n\n/**\n * @param {import('@sveltejs/kit').Page} new_page\n */\nexport function update(new_page) {\n\tObject.assign(page, new_page);\n}\n","const DATA_SUFFIX = '/__data.json';\nconst HTML_DATA_SUFFIX = '.html__data.json';\n\n/** @param {string} pathname */\nexport function has_data_suffix(pathname) {\n\treturn pathname.endsWith(DATA_SUFFIX) || pathname.endsWith(HTML_DATA_SUFFIX);\n}\n\n/** @param {string} pathname */\nexport function add_data_suffix(pathname) {\n\tif (pathname.endsWith('.html')) return pathname.replace(/\\.html$/, HTML_DATA_SUFFIX);\n\treturn pathname.replace(/\\/$/, '') + DATA_SUFFIX;\n}\n\n/** @param {string} pathname */\nexport function strip_data_suffix(pathname) {\n\tif (pathname.endsWith(HTML_DATA_SUFFIX)) {\n\t\treturn pathname.slice(0, -HTML_DATA_SUFFIX.length) + '.html';\n\t}\n\n\treturn pathname.slice(0, -DATA_SUFFIX.length);\n}\n\nconst ROUTE_SUFFIX = '/__route.js';\n\n/**\n * @param {string} pathname\n * @returns {boolean}\n */\nexport function has_resolution_suffix(pathname) {\n\treturn pathname.endsWith(ROUTE_SUFFIX);\n}\n\n/**\n * Convert a regular URL to a route to send to SvelteKit's server-side route resolution endpoint\n * @param {string} pathname\n * @returns {string}\n */\nexport function add_resolution_suffix(pathname) {\n\treturn pathname.replace(/\\/$/, '') + ROUTE_SUFFIX;\n}\n\n/**\n * @param {string} pathname\n * @returns {string}\n */\nexport function strip_resolution_suffix(pathname) {\n\treturn pathname.slice(0, -ROUTE_SUFFIX.length);\n}\n","/** @import { Tracer, Span, SpanContext } from '@opentelemetry/api' */\n\n/**\n * Tracer implementation that does nothing (null object).\n * @type {Tracer}\n */\nexport const noop_tracer = {\n\t/**\n\t * @returns {Span}\n\t */\n\tstartSpan() {\n\t\treturn noop_span;\n\t},\n\n\t/**\n\t * @param {unknown} _name\n\t * @param {unknown} arg_1\n\t * @param {unknown} [arg_2]\n\t * @param {Function} [arg_3]\n\t * @returns {unknown}\n\t */\n\tstartActiveSpan(_name, arg_1, arg_2, arg_3) {\n\t\tif (typeof arg_1 === 'function') {\n\t\t\treturn arg_1(noop_span);\n\t\t}\n\t\tif (typeof arg_2 === 'function') {\n\t\t\treturn arg_2(noop_span);\n\t\t}\n\t\tif (typeof arg_3 === 'function') {\n\t\t\treturn arg_3(noop_span);\n\t\t}\n\t}\n};\n\n/**\n * @type {Span}\n */\nexport const noop_span = {\n\tspanContext() {\n\t\treturn noop_span_context;\n\t},\n\tsetAttribute() {\n\t\treturn this;\n\t},\n\tsetAttributes() {\n\t\treturn this;\n\t},\n\taddEvent() {\n\t\treturn this;\n\t},\n\tsetStatus() {\n\t\treturn this;\n\t},\n\tupdateName() {\n\t\treturn this;\n\t},\n\tend() {\n\t\treturn this;\n\t},\n\tisRecording() {\n\t\treturn false;\n\t},\n\trecordException() {\n\t\treturn this;\n\t},\n\taddLink() {\n\t\treturn this;\n\t},\n\taddLinks() {\n\t\treturn this;\n\t}\n};\n\n/**\n * @type {SpanContext}\n */\nconst noop_span_context = {\n\ttraceId: '',\n\tspanId: '',\n\ttraceFlags: 0\n};\n","import { BROWSER, DEV } from 'esm-env';\nimport * as svelte from 'svelte';\nimport { HttpError, Redirect, SvelteKitError } from '@sveltejs/kit/internal';\nconst { onMount, tick } = svelte;\n// Svelte 4 and under don't have `untrack`, so we have to fallback if `untrack` is not exported\nconst untrack = svelte.untrack ?? ((value) => value());\nimport {\n\tdecode_params,\n\tdecode_pathname,\n\tstrip_hash,\n\tmake_trackable,\n\tnormalize_path\n} from '../../utils/url.js';\nimport { dev_fetch, initial_fetch, lock_fetch, subsequent_fetch, unlock_fetch } from './fetcher.js';\nimport { parse, parse_server_route } from './parse.js';\nimport * as storage from './session-storage.js';\nimport {\n\tfind_anchor,\n\tresolve_url,\n\tget_link_info,\n\tget_router_options,\n\tis_external_url,\n\torigin,\n\tscroll_state,\n\tnotifiable_store,\n\tcreate_updated_store,\n\tload_css\n} from './utils.js';\nimport { base } from '$app/paths';\nimport * as devalue from 'devalue';\nimport {\n\tHISTORY_INDEX,\n\tNAVIGATION_INDEX,\n\tPRELOAD_PRIORITIES,\n\tSCROLL_KEY,\n\tSTATES_KEY,\n\tSNAPSHOT_KEY,\n\tPAGE_URL_KEY\n} from './constants.js';\nimport { validate_page_exports } from '../../utils/exports.js';\nimport { compact } from '../../utils/array.js';\nimport {\n\tINVALIDATED_PARAM,\n\tTRAILING_SLASH_PARAM,\n\tvalidate_depends,\n\tvalidate_load_response\n} from '../shared.js';\nimport { get_message, get_status } from '../../utils/error.js';\nimport { writable } from 'svelte/store';\nimport { page, update, navigating } from './state.svelte.js';\nimport { add_data_suffix, add_resolution_suffix } from '../pathname.js';\nimport { noop_span } from '../telemetry/noop.js';\nimport { text_decoder } from '../utils.js';\n\nexport { load_css };\nconst ICON_REL_ATTRIBUTES = new Set(['icon', 'shortcut icon', 'apple-touch-icon']);\n\nlet errored = false;\n/**\n * Set via transformError, reset and read at the end of navigate.\n * Necessary because a navigation might succeed loading but during rendering\n * an error occurs, at which point the navigation result needs to be overridden with the error result.\n * TODO this is all very hacky, rethink for SvelteKit 3 where we can assume Svelte 5 and do an overhaul of client.js\n * @type {{ error: App.Error, status: number } | null}\n */\nlet rendering_error = null;\n\n// We track the scroll position associated with each history entry in sessionStorage,\n// rather than on history.state itself, because when navigation is driven by\n// popstate it's too late to update the scroll position associated with the\n// state we're navigating from\n/**\n * history index -> { x, y }\n * @type {Record<number, { x: number; y: number }>}\n */\nconst scroll_positions = storage.get(SCROLL_KEY) ?? {};\n\n/**\n * navigation index -> any\n * @type {Record<string, any[]>}\n */\nconst snapshots = storage.get(SNAPSHOT_KEY) ?? {};\n\nif (DEV && BROWSER) {\n\tlet warned = false;\n\n\tconst current_module_url = import.meta.url.split('?')[0]; // remove query params that vite adds to the URL when it is loaded from node_modules\n\n\tconst warn = () => {\n\t\tif (warned) return;\n\n\t\t// Rather than saving a pointer to the original history methods, which would prevent monkeypatching by other libs,\n\t\t// inspect the stack trace to see if we're being called from within SvelteKit.\n\t\tlet stack = new Error().stack?.split('\\n');\n\t\tif (!stack) return;\n\t\tif (!stack[0].includes('https:') && !stack[0].includes('http:')) stack = stack.slice(1); // Chrome includes the error message in the stack\n\t\tstack = stack.slice(2); // remove `warn` and the place where `warn` was called\n\t\t// Can be falsy if was called directly from an anonymous function\n\t\tif (stack[0]?.includes(current_module_url)) return;\n\n\t\twarned = true;\n\n\t\tconsole.warn(\n\t\t\t\"Avoid using `history.pushState(...)` and `history.replaceState(...)` as these will conflict with SvelteKit's router. Use the `pushState` and `replaceState` imports from `$app/navigation` instead.\"\n\t\t);\n\t};\n\n\tconst push_state = history.pushState;\n\thistory.pushState = (...args) => {\n\t\twarn();\n\t\treturn push_state.apply(history, args);\n\t};\n\n\tconst replace_state = history.replaceState;\n\thistory.replaceState = (...args) => {\n\t\twarn();\n\t\treturn replace_state.apply(history, args);\n\t};\n}\n\nexport const stores = {\n\turl: /* @__PURE__ */ notifiable_store({}),\n\tpage: /* @__PURE__ */ notifiable_store({}),\n\tnavigating: /* @__PURE__ */ writable(\n\t\t/** @type {import('@sveltejs/kit').Navigation | null} */ (null)\n\t),\n\tupdated: /* @__PURE__ */ create_updated_store()\n};\n\n/** @param {number} index */\nfunction update_scroll_positions(index) {\n\tscroll_positions[index] = scroll_state();\n}\n\n/**\n * @param {number} current_history_index\n * @param {number} current_navigation_index\n */\nfunction clear_onward_history(current_history_index, current_navigation_index) {\n\t// if we navigated back, then pushed a new state, we can\n\t// release memory by pruning the scroll/snapshot lookup\n\tlet i = current_history_index + 1;\n\twhile (scroll_positions[i]) {\n\t\tdelete scroll_positions[i];\n\t\ti += 1;\n\t}\n\n\ti = current_navigation_index + 1;\n\twhile (snapshots[i]) {\n\t\tdelete snapshots[i];\n\t\ti += 1;\n\t}\n}\n\n/**\n * Loads `href` the old-fashioned way, with a full page reload.\n * Returns a `Promise` that never resolves (to prevent any\n * subsequent work, e.g. history manipulation, from happening)\n * @param {URL} url\n * @param {boolean} [replace] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n */\nfunction native_navigation(url, replace = false) {\n\tif (replace) {\n\t\tlocation.replace(url.href);\n\t} else {\n\t\tlocation.href = url.href;\n\t}\n\treturn new Promise(() => {});\n}\n\n/**\n * Checks whether a service worker is registered, and if it is,\n * tries to update it.\n */\nasync function update_service_worker() {\n\tif ('serviceWorker' in navigator) {\n\t\tconst registration = await navigator.serviceWorker.getRegistration(base || '/');\n\t\tif (registration) {\n\t\t\tawait registration.update();\n\t\t}\n\t}\n}\n\nfunction noop() {}\n\n/** @type {import('types').CSRRoute[]} All routes of the app. Only available when kit.router.resolution=client */\nlet routes;\n/** @type {import('types').CSRPageNodeLoader} */\nlet default_layout_loader;\n/** @type {import('types').CSRPageNodeLoader} */\nlet default_error_loader;\n/** @type {HTMLElement} */\nlet container;\n/** @type {HTMLElement} */\nlet target;\n\n/** @type {import('./types.js').SvelteKitApp} */\nexport let app;\n\n/**\n * Data that was serialized during SSR. This is cleared when the user first navigates\n * @type {Record<string, any>}\n */\nexport let remote_responses = {};\n\n/** @type {Array<((url: URL) => boolean)>} */\nconst invalidated = [];\n\n/**\n * An array of the `+layout.svelte` and `+page.svelte` component instances\n * that currently live on the page — used for capturing and restoring snapshots.\n * It's updated/manipulated through `bind:this` in `Root.svelte`.\n * @type {import('svelte').SvelteComponent[]}\n */\nconst components = [];\n\n/** @type {{id: string, token: {}, promise: Promise<import('./types.js').NavigationResult>, fork: Promise<import('svelte').Fork | null> | null} | null} */\nlet load_cache = null;\n\nfunction discard_load_cache() {\n\tvoid load_cache?.fork?.then((f) => f?.discard());\n\tload_cache = null;\n}\n\n/**\n * @type {Map<string, Promise<URL>>}\n * Cache for client-side rerouting, since it could contain async calls which we want to\n * avoid running multiple times which would slow down navigations (e.g. else preloading\n * wouldn't help because on navigation it would be called again). Since `reroute` should be\n * a pure function (i.e. always return the same) value it's safe to cache across navigations.\n * The server reroute calls don't need to be cached because they are called using `import(...)`\n * which is cached per the JS spec.\n */\nconst reroute_cache = new Map();\n\n/**\n * Note on before_navigate_callbacks, on_navigate_callbacks and after_navigate_callbacks:\n * do not re-assign as some closures keep references to these Sets\n */\n/** @type {Set<(navigation: import('@sveltejs/kit').BeforeNavigate) => void>} */\nconst before_navigate_callbacks = new Set();\n\n/** @type {Set<(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<(() => void) | void>>} */\nconst on_navigate_callbacks = new Set();\n\n/** @type {Set<(navigation: import('@sveltejs/kit').AfterNavigate) => void>} */\nconst after_navigate_callbacks = new Set();\n\n/** @type {import('./types.js').NavigationState & { nav: import('@sveltejs/kit').NavigationEvent }} */\nlet current = {\n\tbranch: [],\n\terror: null,\n\t// @ts-ignore - we need the initial value to be null\n\turl: null,\n\t// @ts-ignore - we need the initial value to be null\n\tnav: null\n};\n\n/** this being true means we SSR'd */\nlet hydrated = false;\nlet started = false;\nlet autoscroll = true;\nlet updating = false;\nlet is_navigating = false;\nlet hash_navigating = false;\n/** True as soon as there happened one client-side navigation (excluding the SvelteKit-initialized initial one when in SPA mode) */\nlet has_navigated = false;\n\nlet force_invalidation = false;\n\n/** @type {import('svelte').SvelteComponent} */\nlet root;\n\n/** @type {number} keeping track of the history index in order to prevent popstate navigation events if needed */\nlet current_history_index;\n\n/** @type {number} */\nlet current_navigation_index;\n\n/** @type {{}} */\nlet token;\n\n/**\n * A set of tokens which are associated to current preloads.\n * If a preload becomes a real navigation, it's removed from the set.\n * If a preload token is in the set and the preload errors, the error\n * handling logic (for example reloading) is skipped.\n */\nconst preload_tokens = new Set();\n\n/** @type {Promise<void> | null} */\nexport let pending_invalidate;\n\n/**\n * @type {Map<string, {count: number, resource: any}>}\n * A map of id -> query info with all queries that currently exist in the app.\n */\nexport const query_map = new Map();\n\n/**\n * @param {import('./types.js').SvelteKitApp} _app\n * @param {HTMLElement} _target\n * @param {Parameters<typeof _hydrate>[1]} [hydrate]\n */\nexport async function start(_app, _target, hydrate) {\n\tif (DEV && _target === document.body) {\n\t\tconsole.warn(\n\t\t\t'Placing %sveltekit.body% directly inside <body> is not recommended, as your app may break for users who have certain browser extensions installed.\\n\\nConsider wrapping it in an element:\\n\\n<div style=\"display: contents\">\\n  %sveltekit.body%\\n</div>'\n\t\t);\n\t}\n\n\tif (__SVELTEKIT_PAYLOAD__?.data) {\n\t\tremote_responses = __SVELTEKIT_PAYLOAD__.data;\n\t}\n\n\t// detect basic auth credentials in the current URL\n\t// https://github.com/sveltejs/kit/pull/11179\n\t// if so, refresh the page without credentials\n\tif (document.URL !== location.href) {\n\t\t// eslint-disable-next-line no-self-assign\n\t\tlocation.href = location.href;\n\t}\n\n\tapp = _app;\n\n\tawait _app.hooks.init?.();\n\n\troutes = __SVELTEKIT_CLIENT_ROUTING__ ? parse(_app) : [];\n\tcontainer = __SVELTEKIT_EMBEDDED__ ? _target : document.documentElement;\n\ttarget = _target;\n\n\t// we import the root layout/error nodes eagerly, so that\n\t// connectivity errors after initialisation don't nuke the app\n\tdefault_layout_loader = _app.nodes[0];\n\tdefault_error_loader = _app.nodes[1];\n\tvoid default_layout_loader();\n\tvoid default_error_loader();\n\n\tcurrent_history_index = history.state?.[HISTORY_INDEX];\n\tcurrent_navigation_index = history.state?.[NAVIGATION_INDEX];\n\n\tif (!current_history_index) {\n\t\t// we use Date.now() as an offset so that cross-document navigations\n\t\t// within the app don't result in data loss\n\t\tcurrent_history_index = current_navigation_index = Date.now();\n\n\t\t// create initial history entry, so we can return here\n\t\thistory.replaceState(\n\t\t\t{\n\t\t\t\t...history.state,\n\t\t\t\t[HISTORY_INDEX]: current_history_index,\n\t\t\t\t[NAVIGATION_INDEX]: current_navigation_index\n\t\t\t},\n\t\t\t''\n\t\t);\n\t}\n\n\t// if we reload the page, or Cmd-Shift-T back to it,\n\t// recover scroll position\n\tconst scroll = scroll_positions[current_history_index];\n\tfunction restore_scroll() {\n\t\tif (scroll) {\n\t\t\thistory.scrollRestoration = 'manual';\n\t\t\tscrollTo(scroll.x, scroll.y);\n\t\t}\n\t}\n\n\tif (hydrate) {\n\t\trestore_scroll();\n\n\t\tawait _hydrate(target, hydrate);\n\t} else {\n\t\tawait navigate({\n\t\t\ttype: 'enter',\n\t\t\turl: resolve_url(app.hash ? decode_hash(new URL(location.href)) : location.href),\n\t\t\treplace_state: true\n\t\t});\n\n\t\trestore_scroll();\n\t}\n\n\t_start_router();\n}\n\nasync function _invalidate(include_load_functions = true, reset_page_state = true) {\n\t// Accept all invalidations as they come, don't swallow any while another invalidation\n\t// is running because subsequent invalidations may make earlier ones outdated,\n\t// but batch multiple synchronous invalidations.\n\tawait (pending_invalidate ||= Promise.resolve());\n\tif (!pending_invalidate) return;\n\tpending_invalidate = null;\n\n\tconst nav_token = (token = {});\n\tconst intent = await get_navigation_intent(current.url, true);\n\n\t// Clear preload, it might be affected by the invalidation.\n\t// Also solves an edge case where a preload is triggered, the navigation for it\n\t// was then triggered and is still running while the invalidation kicks in,\n\t// at which point the invalidation should take over and \"win\".\n\tdiscard_load_cache();\n\n\t// Rerun queries\n\tif (force_invalidation) {\n\t\tquery_map.forEach(({ resource }) => {\n\t\t\tresource.refresh?.();\n\t\t});\n\t}\n\n\tif (include_load_functions) {\n\t\tconst prev_state = page.state;\n\t\tconst navigation_result = intent && (await load_route(intent));\n\t\tif (!navigation_result || nav_token !== token) return;\n\n\t\tif (navigation_result.type === 'redirect') {\n\t\t\treturn _goto(\n\t\t\t\tnew URL(navigation_result.location, current.url).href,\n\t\t\t\t{ replaceState: true },\n\t\t\t\t1,\n\t\t\t\tnav_token\n\t\t\t);\n\t\t}\n\n\t\t// This is a bit hacky but allows us not having to pass that boolean around, making things harder to reason about\n\t\tif (!reset_page_state) {\n\t\t\tnavigation_result.props.page.state = prev_state;\n\t\t}\n\t\tupdate(navigation_result.props.page);\n\t\tcurrent = { ...navigation_result.state, nav: current.nav };\n\t\treset_invalidation();\n\t\troot.$set(navigation_result.props);\n\t} else {\n\t\treset_invalidation();\n\t}\n\n\t// Don't use allSettled yet because it's too new\n\tawait Promise.all([...query_map.values()].map(({ resource }) => resource)).catch(noop);\n}\n\nfunction reset_invalidation() {\n\tinvalidated.length = 0;\n\tforce_invalidation = false;\n}\n\n/** @param {number} index */\nfunction capture_snapshot(index) {\n\tif (components.some((c) => c?.snapshot)) {\n\t\tsnapshots[index] = components.map((c) => c?.snapshot?.capture());\n\t}\n}\n\n/** @param {number} index */\nfunction restore_snapshot(index) {\n\tsnapshots[index]?.forEach((value, i) => {\n\t\tcomponents[i]?.snapshot?.restore(value);\n\t});\n}\n\nfunction persist_state() {\n\tupdate_scroll_positions(current_history_index);\n\tstorage.set(SCROLL_KEY, scroll_positions);\n\n\tcapture_snapshot(current_navigation_index);\n\tstorage.set(SNAPSHOT_KEY, snapshots);\n}\n\n/**\n * @param {string | URL} url\n * @param {{ replaceState?: boolean; noScroll?: boolean; keepFocus?: boolean; invalidateAll?: boolean; invalidate?: Array<string | URL | ((url: URL) => boolean)>; state?: Record<string, any> }} options\n * @param {number} redirect_count\n * @param {{}} [nav_token]\n */\nexport async function _goto(url, options, redirect_count, nav_token) {\n\t/** @type {string[]} */\n\tlet query_keys;\n\n\t// Clear preload cache when invalidateAll is true to ensure fresh data\n\t// after form submissions or explicit invalidations\n\tif (options.invalidateAll) {\n\t\tdiscard_load_cache();\n\t}\n\n\tawait navigate({\n\t\ttype: 'goto',\n\t\turl: resolve_url(url),\n\t\tkeepfocus: options.keepFocus,\n\t\tnoscroll: options.noScroll,\n\t\treplace_state: options.replaceState,\n\t\tstate: options.state,\n\t\tredirect_count,\n\t\tnav_token,\n\t\taccept: () => {\n\t\t\tif (options.invalidateAll) {\n\t\t\t\tforce_invalidation = true;\n\t\t\t\tquery_keys = [...query_map.keys()];\n\t\t\t}\n\n\t\t\tif (options.invalidate) {\n\t\t\t\toptions.invalidate.forEach(push_invalidated);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (options.invalidateAll) {\n\t\t// TODO the ticks shouldn't be necessary, something inside Svelte itself is buggy\n\t\t// when a query in a layout that still exists after page change is refreshed earlier than this\n\t\tvoid svelte\n\t\t\t.tick()\n\t\t\t.then(svelte.tick)\n\t\t\t.then(() => {\n\t\t\t\tquery_map.forEach(({ resource }, key) => {\n\t\t\t\t\t// Only refresh those that already existed on the old page\n\t\t\t\t\tif (query_keys?.includes(key)) {\n\t\t\t\t\t\tresource.refresh?.();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t}\n}\n\n/** @param {import('./types.js').NavigationIntent} intent */\nasync function _preload_data(intent) {\n\t// Reuse the existing pending preload if it's for the same navigation.\n\t// Prevents an edge case where same preload is triggered multiple times,\n\t// then a later one is becoming the real navigation and the preload tokens\n\t// get out of sync.\n\tif (intent.id !== load_cache?.id) {\n\t\tdiscard_load_cache();\n\n\t\tconst preload = {};\n\t\tpreload_tokens.add(preload);\n\t\tload_cache = {\n\t\t\tid: intent.id,\n\t\t\ttoken: preload,\n\t\t\tpromise: load_route({ ...intent, preload }).then((result) => {\n\t\t\t\tpreload_tokens.delete(preload);\n\t\t\t\tif (result.type === 'loaded' && result.state.error) {\n\t\t\t\t\t// Don't cache errors, because they might be transient\n\t\t\t\t\tdiscard_load_cache();\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t\tfork: null\n\t\t};\n\n\t\tif (__SVELTEKIT_FORK_PRELOADS__ && svelte.fork) {\n\t\t\tconst lc = load_cache;\n\n\t\t\tlc.fork = lc.promise.then((result) => {\n\t\t\t\t// if load_cache was discarded before load_cache.promise could\n\t\t\t\t// resolve, bail rather than creating an orphan fork\n\t\t\t\tif (lc === load_cache && result.type === 'loaded') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn svelte.fork(() => {\n\t\t\t\t\t\t\troot.$set(result.props);\n\t\t\t\t\t\t\tupdate(result.props.page);\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// if it errors, it's because the experimental flag isn't enabled in Svelte\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t});\n\t\t}\n\t}\n\n\treturn load_cache.promise;\n}\n\n/**\n * @param {URL} url\n * @returns {Promise<void>}\n */\nasync function _preload_code(url) {\n\tconst route = (await get_navigation_intent(url, false))?.route;\n\n\tif (route) {\n\t\tawait Promise.all(\n\t\t\t/** @type {[has_server_load: boolean, node_loader: import('types').CSRPageNodeLoader][]} */ (\n\t\t\t\t[...route.layouts, route.leaf].filter(Boolean)\n\t\t\t).map((load) => load[1]())\n\t\t);\n\t}\n}\n\n/**\n * @param {import('./types.js').NavigationFinished} result\n * @param {HTMLElement} target\n * @param {boolean} hydrate\n */\nasync function initialize(result, target, hydrate) {\n\tif (DEV && result.state.error && document.querySelector('vite-error-overlay')) return;\n\n\t/** @type {import('@sveltejs/kit').NavigationEvent} */\n\tconst nav = {\n\t\tparams: current.params,\n\t\troute: { id: current.route?.id ?? null },\n\t\turl: new URL(location.href)\n\t};\n\n\tcurrent = {\n\t\t...result.state,\n\t\tnav\n\t};\n\n\tconst style = document.querySelector('style[data-sveltekit]');\n\tif (style) style.remove();\n\n\tObject.assign(page, /** @type {import('@sveltejs/kit').Page} */ (result.props.page));\n\n\troot = new app.root({\n\t\ttarget,\n\t\tprops: { ...result.props, stores, components },\n\t\thydrate,\n\t\t// @ts-ignore Svelte 5 specific: asynchronously instantiate the component, i.e. don't call flushSync\n\t\tsync: false,\n\t\t// @ts-ignore Svelte 5 specific: transformError allows to transform errors before they are passed to boundaries\n\t\ttransformError: __SVELTEKIT_EXPERIMENTAL_USE_TRANSFORM_ERROR__\n\t\t\t? /** @param {unknown} e */ async (e) => {\n\t\t\t\t\tconst error = await handle_error(e, current.nav);\n\t\t\t\t\trendering_error = { error, status: get_status(e) };\n\t\t\t\t\tpage.error = error;\n\t\t\t\t\tpage.status = rendering_error.status;\n\t\t\t\t\treturn error;\n\t\t\t\t}\n\t\t\t: undefined\n\t});\n\n\t// Wait for a microtask in case svelte experimental async is enabled,\n\t// which causes component script blocks to run asynchronously\n\tvoid (await Promise.resolve());\n\n\trestore_snapshot(current_navigation_index);\n\n\tif (hydrate) {\n\t\t/** @type {import('@sveltejs/kit').AfterNavigate} */\n\t\tconst navigation = {\n\t\t\tfrom: null,\n\t\t\tto: {\n\t\t\t\t...nav,\n\t\t\t\tscroll: scroll_positions[current_history_index] ?? scroll_state()\n\t\t\t},\n\t\t\twillUnload: false,\n\t\t\ttype: 'enter',\n\t\t\tcomplete: Promise.resolve()\n\t\t};\n\n\t\tafter_navigate_callbacks.forEach((fn) => fn(navigation));\n\t}\n\n\tstarted = true;\n}\n\n/**\n *\n * @param {{\n *   url: URL;\n *   params: Record<string, string>;\n *   branch: Array<import('./types.js').BranchNode | undefined>;\n *   errors?: Array<import('types').CSRPageNodeLoader | undefined>;\n *   status: number;\n *   error: App.Error | null;\n *   route: import('types').CSRRoute | null;\n *   form?: Record<string, any> | null;\n * }} opts\n */\nasync function get_navigation_result_from_branch({\n\turl,\n\tparams,\n\tbranch,\n\terrors,\n\tstatus,\n\terror,\n\troute,\n\tform\n}) {\n\t/** @type {import('types').TrailingSlash} */\n\tlet slash = 'never';\n\n\t// if `paths.base === '/a/b/c`, then the root route is always `/a/b/c/`, regardless of\n\t// the `trailingSlash` route option, so that relative paths to JS and CSS work\n\tif (base && (url.pathname === base || url.pathname === base + '/')) {\n\t\tslash = 'always';\n\t} else {\n\t\tfor (const node of branch) {\n\t\t\tif (node?.slash !== undefined) slash = node.slash;\n\t\t}\n\t}\n\n\turl.pathname = normalize_path(url.pathname, slash);\n\t// eslint-disable-next-line no-self-assign\n\turl.search = url.search; // turn `/?` into `/`\n\n\t/** @type {import('./types.js').NavigationFinished} */\n\tconst result = {\n\t\ttype: 'loaded',\n\t\tstate: {\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch,\n\t\t\terror,\n\t\t\troute\n\t\t},\n\t\tprops: {\n\t\t\t// @ts-ignore Somehow it's getting SvelteComponent and SvelteComponentDev mixed up\n\t\t\tconstructors: compact(branch).map((branch_node) => branch_node.node.component),\n\t\t\tpage: clone_page(page)\n\t\t}\n\t};\n\n\tif (errors && __SVELTEKIT_EXPERIMENTAL_USE_TRANSFORM_ERROR__) {\n\t\tlet last_idx = -1;\n\t\tresult.props.errors = await Promise.all(\n\t\t\t// eslint-disable-next-line @typescript-eslint/await-thenable\n\t\t\tbranch\n\t\t\t\t.map((b, i) => {\n\t\t\t\t\tif (i === 0) return undefined; // root layout wraps root error component, not the other way around\n\t\t\t\t\tif (!b) return null;\n\n\t\t\t\t\ti--;\n\t\t\t\t\t// Find the closest error component up to the previous branch\n\t\t\t\t\twhile (i > last_idx + 1 && !errors[i]) i -= 1;\n\t\t\t\t\tlast_idx = i;\n\t\t\t\t\treturn errors[i]?.()\n\t\t\t\t\t\t.then((e) => e.component)\n\t\t\t\t\t\t.catch(() => undefined);\n\t\t\t\t})\n\t\t\t\t// filter out indexes where there was no branch, but keep indexes where there was a branch but no error component\n\t\t\t\t.filter((e) => e !== null)\n\t\t);\n\t}\n\n\tif (error && __SVELTEKIT_EXPERIMENTAL_USE_TRANSFORM_ERROR__) {\n\t\tresult.props.error = error;\n\t}\n\n\tif (form !== undefined) {\n\t\tresult.props.form = form;\n\t}\n\n\tlet data = {};\n\tlet data_changed = !page;\n\n\tlet p = 0;\n\n\tfor (let i = 0; i < Math.max(branch.length, current.branch.length); i += 1) {\n\t\tconst node = branch[i];\n\t\tconst prev = current.branch[i];\n\n\t\tif (node?.data !== prev?.data) data_changed = true;\n\t\tif (!node) continue;\n\n\t\tdata = { ...data, ...node.data };\n\n\t\t// Only set props if the node actually updated. This prevents needless rerenders.\n\t\tif (data_changed) {\n\t\t\tresult.props[`data_${p}`] = data;\n\t\t}\n\n\t\tp += 1;\n\t}\n\n\tconst page_changed =\n\t\t!current.url ||\n\t\turl.href !== current.url.href ||\n\t\tcurrent.error !== error ||\n\t\t(form !== undefined && form !== page.form) ||\n\t\tdata_changed;\n\n\tif (page_changed) {\n\t\tresult.props.page = {\n\t\t\terror,\n\t\t\tparams,\n\t\t\troute: {\n\t\t\t\tid: route?.id ?? null\n\t\t\t},\n\t\t\tstate: {},\n\t\t\tstatus,\n\t\t\turl: new URL(url),\n\t\t\tform: form ?? null,\n\t\t\t// The whole page store is updated, but this way the object reference stays the same\n\t\t\tdata: data_changed ? data : page.data\n\t\t};\n\t}\n\n\treturn result;\n}\n\n/**\n * Call the universal load function of the given node, if it exists.\n *\n * @param {{\n *   loader: import('types').CSRPageNodeLoader;\n * \t parent: () => Promise<Record<string, any>>;\n *   url: URL;\n *   params: Record<string, string>;\n *   route: { id: string | null };\n * \t server_data_node: import('./types.js').DataNode | null;\n * }} options\n * @returns {Promise<import('./types.js').BranchNode>}\n */\nasync function load_node({ loader, parent, url, params, route, server_data_node }) {\n\t/** @type {Record<string, any> | null} */\n\tlet data = null;\n\n\tlet is_tracking = true;\n\n\t/** @type {import('types').Uses} */\n\tconst uses = {\n\t\tdependencies: new Set(),\n\t\tparams: new Set(),\n\t\tparent: false,\n\t\troute: false,\n\t\turl: false,\n\t\tsearch_params: new Set()\n\t};\n\n\tconst node = await loader();\n\n\tif (DEV) {\n\t\tvalidate_page_exports(node.universal);\n\n\t\tif (node.universal && app.hash) {\n\t\t\tconst options = Object.keys(node.universal).filter((o) => o !== 'load');\n\n\t\t\tif (options.length > 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Page options are ignored when \\`router.type === 'hash'\\` (${route.id} has ${options\n\t\t\t\t\t\t.filter((o) => o !== 'load')\n\t\t\t\t\t\t.map((o) => `'${o}'`)\n\t\t\t\t\t\t.join(', ')})`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (__SVELTEKIT_HAS_UNIVERSAL_LOAD__ && node.universal?.load) {\n\t\t/** @param {string[]} deps */\n\t\tfunction depends(...deps) {\n\t\t\tfor (const dep of deps) {\n\t\t\t\tif (DEV) validate_depends(/** @type {string} */ (route.id), dep);\n\n\t\t\t\tconst { href } = new URL(dep, url);\n\t\t\t\tuses.dependencies.add(href);\n\t\t\t}\n\t\t}\n\n\t\t/** @type {import('@sveltejs/kit').LoadEvent} */\n\t\tconst load_input = {\n\t\t\ttracing: { enabled: false, root: noop_span, current: noop_span },\n\t\t\troute: new Proxy(route, {\n\t\t\t\tget: (target, key) => {\n\t\t\t\t\tif (is_tracking) {\n\t\t\t\t\t\tuses.route = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn target[/** @type {'id'} */ (key)];\n\t\t\t\t}\n\t\t\t}),\n\t\t\tparams: new Proxy(params, {\n\t\t\t\tget: (target, key) => {\n\t\t\t\t\tif (is_tracking) {\n\t\t\t\t\t\tuses.params.add(/** @type {string} */ (key));\n\t\t\t\t\t}\n\t\t\t\t\treturn target[/** @type {string} */ (key)];\n\t\t\t\t}\n\t\t\t}),\n\t\t\tdata: server_data_node?.data ?? null,\n\t\t\turl: make_trackable(\n\t\t\t\turl,\n\t\t\t\t() => {\n\t\t\t\t\tif (is_tracking) {\n\t\t\t\t\t\tuses.url = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t(param) => {\n\t\t\t\t\tif (is_tracking) {\n\t\t\t\t\t\tuses.search_params.add(param);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tapp.hash\n\t\t\t),\n\t\t\tasync fetch(resource, init) {\n\t\t\t\tif (resource instanceof Request) {\n\t\t\t\t\t// we're not allowed to modify the received `Request` object, so in order\n\t\t\t\t\t// to fixup relative urls we create a new equivalent `init` object instead\n\t\t\t\t\tinit = {\n\t\t\t\t\t\t// the request body must be consumed in memory until browsers\n\t\t\t\t\t\t// implement streaming request bodies and/or the body getter\n\t\t\t\t\t\tbody:\n\t\t\t\t\t\t\tresource.method === 'GET' || resource.method === 'HEAD'\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: await resource.blob(),\n\t\t\t\t\t\tcache: resource.cache,\n\t\t\t\t\t\tcredentials: resource.credentials,\n\t\t\t\t\t\t// the server sets headers to `undefined` if there are no headers but\n\t\t\t\t\t\t// the client defaults to an empty Headers object in the Request object.\n\t\t\t\t\t\t// To keep the two values in sync, we explicitly set the headers to `undefined`.\n\t\t\t\t\t\t// Also, not sure why, but sometimes 0 is evaluated as truthy so we need to\n\t\t\t\t\t\t// explicitly compare the headers length to a number here\n\t\t\t\t\t\theaders: [...resource.headers].length > 0 ? resource?.headers : undefined,\n\t\t\t\t\t\tintegrity: resource.integrity,\n\t\t\t\t\t\tkeepalive: resource.keepalive,\n\t\t\t\t\t\tmethod: resource.method,\n\t\t\t\t\t\tmode: resource.mode,\n\t\t\t\t\t\tredirect: resource.redirect,\n\t\t\t\t\t\treferrer: resource.referrer,\n\t\t\t\t\t\treferrerPolicy: resource.referrerPolicy,\n\t\t\t\t\t\tsignal: resource.signal,\n\t\t\t\t\t\t...init\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst { resolved, promise } = resolve_fetch_url(resource, init, url);\n\n\t\t\t\tif (is_tracking) {\n\t\t\t\t\tdepends(resolved.href);\n\t\t\t\t}\n\n\t\t\t\treturn promise;\n\t\t\t},\n\t\t\tsetHeaders: () => {}, // noop\n\t\t\tdepends,\n\t\t\tparent() {\n\t\t\t\tif (is_tracking) {\n\t\t\t\t\tuses.parent = true;\n\t\t\t\t}\n\t\t\t\treturn parent();\n\t\t\t},\n\t\t\tuntrack(fn) {\n\t\t\t\tis_tracking = false;\n\t\t\t\ttry {\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\tis_tracking = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (DEV) {\n\t\t\ttry {\n\t\t\t\tlock_fetch();\n\t\t\t\tdata = (await node.universal.load.call(null, load_input)) ?? null;\n\t\t\t\tvalidate_load_response(data, `related to route '${route.id}'`);\n\t\t\t} finally {\n\t\t\t\tunlock_fetch();\n\t\t\t}\n\t\t} else {\n\t\t\tdata = (await node.universal.load.call(null, load_input)) ?? null;\n\t\t}\n\t}\n\n\treturn {\n\t\tnode,\n\t\tloader,\n\t\tserver: server_data_node,\n\t\tuniversal: node.universal?.load ? { type: 'data', data, uses } : null,\n\t\tdata: data ?? server_data_node?.data ?? null,\n\t\tslash: node.universal?.trailingSlash ?? server_data_node?.slash\n\t};\n}\n\n/**\n * @param {Request | string | URL} input\n * @param {RequestInit | undefined} init\n * @param {URL} url\n */\nfunction resolve_fetch_url(input, init, url) {\n\tlet requested = input instanceof Request ? input.url : input;\n\n\t// we must fixup relative urls so they are resolved from the target page\n\tconst resolved = new URL(requested, url);\n\n\t// match ssr serialized data url, which is important to find cached responses\n\tif (resolved.origin === url.origin) {\n\t\trequested = resolved.href.slice(url.origin.length);\n\t}\n\n\t// prerendered pages may be served from any origin, so `initial_fetch` urls shouldn't be resolved\n\tconst promise = started\n\t\t? subsequent_fetch(requested, resolved.href, init)\n\t\t: initial_fetch(requested, init);\n\n\treturn { resolved, promise };\n}\n\n/**\n * @param {boolean} parent_changed\n * @param {boolean} route_changed\n * @param {boolean} url_changed\n * @param {Set<string>} search_params_changed\n * @param {import('types').Uses | undefined} uses\n * @param {Record<string, string>} params\n */\nfunction has_changed(\n\tparent_changed,\n\troute_changed,\n\turl_changed,\n\tsearch_params_changed,\n\tuses,\n\tparams\n) {\n\tif (force_invalidation) return true;\n\n\tif (!uses) return false;\n\n\tif (uses.parent && parent_changed) return true;\n\tif (uses.route && route_changed) return true;\n\tif (uses.url && url_changed) return true;\n\n\tfor (const tracked_params of uses.search_params) {\n\t\tif (search_params_changed.has(tracked_params)) return true;\n\t}\n\n\tfor (const param of uses.params) {\n\t\tif (params[param] !== current.params[param]) return true;\n\t}\n\n\tfor (const href of uses.dependencies) {\n\t\tif (invalidated.some((fn) => fn(new URL(href)))) return true;\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {import('types').ServerDataNode | import('types').ServerDataSkippedNode | null} node\n * @param {import('./types.js').DataNode | null} [previous]\n * @returns {import('./types.js').DataNode | null}\n */\nfunction create_data_node(node, previous) {\n\tif (node?.type === 'data') return node;\n\tif (node?.type === 'skip') return previous ?? null;\n\treturn null;\n}\n\n/**\n * @param {URL | null} old_url\n * @param {URL} new_url\n */\nfunction diff_search_params(old_url, new_url) {\n\tif (!old_url) return new Set(new_url.searchParams.keys());\n\n\tconst changed = new Set([...old_url.searchParams.keys(), ...new_url.searchParams.keys()]);\n\n\tfor (const key of changed) {\n\t\tconst old_values = old_url.searchParams.getAll(key);\n\t\tconst new_values = new_url.searchParams.getAll(key);\n\n\t\tif (\n\t\t\told_values.every((value) => new_values.includes(value)) &&\n\t\t\tnew_values.every((value) => old_values.includes(value))\n\t\t) {\n\t\t\tchanged.delete(key);\n\t\t}\n\t}\n\n\treturn changed;\n}\n\n/**\n * @param {Omit<import('./types.js').NavigationFinished['state'], 'branch'> & { error: App.Error }} opts\n * @returns {import('./types.js').NavigationFinished}\n */\nfunction preload_error({ error, url, route, params }) {\n\treturn {\n\t\ttype: 'loaded',\n\t\tstate: {\n\t\t\terror,\n\t\t\turl,\n\t\t\troute,\n\t\t\tparams,\n\t\t\tbranch: []\n\t\t},\n\t\tprops: {\n\t\t\tpage: clone_page(page),\n\t\t\tconstructors: []\n\t\t}\n\t};\n}\n\n/**\n * @param {import('./types.js').NavigationIntent & { preload?: {} }} intent\n * @returns {Promise<import('./types.js').NavigationResult>}\n */\nasync function load_route({ id, invalidating, url, params, route, preload }) {\n\tif (load_cache?.id === id) {\n\t\t// the preload becomes the real navigation\n\t\tpreload_tokens.delete(load_cache.token);\n\t\treturn load_cache.promise;\n\t}\n\n\tconst { errors, layouts, leaf } = route;\n\n\tconst loaders = [...layouts, leaf];\n\n\t// preload modules to avoid waterfall, but handle rejections\n\t// so they don't get reported to Sentry et al (we don't need\n\t// to act on the failures at this point)\n\terrors.forEach((loader) => loader?.().catch(() => {}));\n\tloaders.forEach((loader) => loader?.[1]().catch(() => {}));\n\n\t/** @type {import('types').ServerNodesResponse | import('types').ServerRedirectNode | null} */\n\tlet server_data = null;\n\tconst url_changed = current.url ? id !== get_page_key(current.url) : false;\n\tconst route_changed = current.route ? route.id !== current.route.id : false;\n\tconst search_params_changed = diff_search_params(current.url, url);\n\n\tlet parent_invalid = false;\n\n\tif (__SVELTEKIT_HAS_SERVER_LOAD__) {\n\t\tconst invalid_server_nodes = loaders.map((loader, i) => {\n\t\t\tconst previous = current.branch[i];\n\n\t\t\tconst invalid =\n\t\t\t\t!!loader?.[0] &&\n\t\t\t\t(previous?.loader !== loader[1] ||\n\t\t\t\t\thas_changed(\n\t\t\t\t\t\tparent_invalid,\n\t\t\t\t\t\troute_changed,\n\t\t\t\t\t\turl_changed,\n\t\t\t\t\t\tsearch_params_changed,\n\t\t\t\t\t\tprevious.server?.uses,\n\t\t\t\t\t\tparams\n\t\t\t\t\t));\n\n\t\t\tif (invalid) {\n\t\t\t\t// For the next one\n\t\t\t\tparent_invalid = true;\n\t\t\t}\n\n\t\t\treturn invalid;\n\t\t});\n\n\t\tif (invalid_server_nodes.some(Boolean)) {\n\t\t\ttry {\n\t\t\t\tserver_data = await load_data(url, invalid_server_nodes);\n\t\t\t} catch (error) {\n\t\t\t\tconst handled_error = await handle_error(error, { url, params, route: { id } });\n\n\t\t\t\tif (preload_tokens.has(preload)) {\n\t\t\t\t\treturn preload_error({ error: handled_error, url, params, route });\n\t\t\t\t}\n\n\t\t\t\treturn load_root_error_page({\n\t\t\t\t\tstatus: get_status(error),\n\t\t\t\t\terror: handled_error,\n\t\t\t\t\turl,\n\t\t\t\t\troute\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (server_data.type === 'redirect') {\n\t\t\t\treturn server_data;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst server_data_nodes = server_data?.nodes;\n\n\tlet parent_changed = false;\n\n\tconst branch_promises = loaders.map(async (loader, i) => {\n\t\tif (!loader) return;\n\n\t\t/** @type {import('./types.js').BranchNode | undefined} */\n\t\tconst previous = current.branch[i];\n\n\t\tconst server_data_node = server_data_nodes?.[i];\n\n\t\t// re-use data from previous load if it's still valid\n\t\tconst valid =\n\t\t\t(!server_data_node || server_data_node.type === 'skip') &&\n\t\t\tloader[1] === previous?.loader &&\n\t\t\t!has_changed(\n\t\t\t\tparent_changed,\n\t\t\t\troute_changed,\n\t\t\t\turl_changed,\n\t\t\t\tsearch_params_changed,\n\t\t\t\tprevious.universal?.uses,\n\t\t\t\tparams\n\t\t\t);\n\t\tif (valid) return previous;\n\n\t\tparent_changed = true;\n\n\t\tif (server_data_node?.type === 'error') {\n\t\t\t// rethrow and catch below\n\t\t\tthrow server_data_node;\n\t\t}\n\n\t\treturn load_node({\n\t\t\tloader: loader[1],\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute,\n\t\t\tparent: async () => {\n\t\t\t\tconst data = {};\n\t\t\t\tfor (let j = 0; j < i; j += 1) {\n\t\t\t\t\tObject.assign(data, (await branch_promises[j])?.data);\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\t},\n\t\t\tserver_data_node: create_data_node(\n\t\t\t\t// server_data_node is undefined if it wasn't reloaded from the server;\n\t\t\t\t// and if current loader uses server data, we want to reuse previous data.\n\t\t\t\tserver_data_node === undefined && loader[0] ? { type: 'skip' } : (server_data_node ?? null),\n\t\t\t\tloader[0] ? previous?.server : undefined\n\t\t\t)\n\t\t});\n\t});\n\n\t// if we don't do this, rejections will be unhandled\n\tfor (const p of branch_promises) p.catch(() => {});\n\n\t/** @type {Array<import('./types.js').BranchNode | undefined>} */\n\tconst branch = [];\n\n\tfor (let i = 0; i < loaders.length; i += 1) {\n\t\tif (loaders[i]) {\n\t\t\ttry {\n\t\t\t\tbranch.push(await branch_promises[i]);\n\t\t\t} catch (err) {\n\t\t\t\tif (err instanceof Redirect) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'redirect',\n\t\t\t\t\t\tlocation: err.location\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (preload_tokens.has(preload)) {\n\t\t\t\t\treturn preload_error({\n\t\t\t\t\t\terror: await handle_error(err, { params, url, route: { id: route.id } }),\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\troute\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlet status = get_status(err);\n\t\t\t\t/** @type {App.Error} */\n\t\t\t\tlet error;\n\n\t\t\t\tif (server_data_nodes?.includes(/** @type {import('types').ServerErrorNode} */ (err))) {\n\t\t\t\t\t// this is the server error rethrown above, reconstruct but don't invoke\n\t\t\t\t\t// the client error handler; it should've already been handled on the server\n\t\t\t\t\tstatus = /** @type {import('types').ServerErrorNode} */ (err).status ?? status;\n\t\t\t\t\terror = /** @type {import('types').ServerErrorNode} */ (err).error;\n\t\t\t\t} else if (err instanceof HttpError) {\n\t\t\t\t\terror = err.body;\n\t\t\t\t} else {\n\t\t\t\t\t// Referenced node could have been removed due to redeploy, check\n\t\t\t\t\tconst updated = await stores.updated.check();\n\t\t\t\t\tif (updated) {\n\t\t\t\t\t\t// Before reloading, try to update the service worker if it exists\n\t\t\t\t\t\tawait update_service_worker();\n\t\t\t\t\t\treturn await native_navigation(url);\n\t\t\t\t\t}\n\n\t\t\t\t\terror = await handle_error(err, { params, url, route: { id: route.id } });\n\t\t\t\t}\n\n\t\t\t\tconst error_load = await load_nearest_error_page(i, branch, errors);\n\t\t\t\tif (error_load) {\n\t\t\t\t\treturn get_navigation_result_from_branch({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\tbranch: branch.slice(0, error_load.idx).concat(error_load.node),\n\t\t\t\t\t\terrors,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\troute\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn await server_fallback(url, { id: route.id }, error, status);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// push an empty slot so we can rewind past gaps to the\n\t\t\t// layout that corresponds with an +error.svelte page\n\t\t\tbranch.push(undefined);\n\t\t}\n\t}\n\n\treturn get_navigation_result_from_branch({\n\t\turl,\n\t\tparams,\n\t\tbranch,\n\t\terrors,\n\t\tstatus: 200,\n\t\terror: null,\n\t\troute,\n\t\t// Reset `form` on navigation, but not invalidation\n\t\tform: invalidating ? undefined : null\n\t});\n}\n\n/**\n * @param {number} i Start index to backtrack from\n * @param {Array<import('./types.js').BranchNode | undefined>} branch Branch to backtrack\n * @param {Array<import('types').CSRPageNodeLoader | undefined>} errors All error pages for this branch\n * @returns {Promise<{idx: number; node: import('./types.js').BranchNode} | undefined>}\n */\nasync function load_nearest_error_page(i, branch, errors) {\n\twhile (i--) {\n\t\tif (errors[i]) {\n\t\t\tlet j = i;\n\t\t\twhile (!branch[j]) j -= 1;\n\t\t\ttry {\n\t\t\t\treturn {\n\t\t\t\t\tidx: j + 1,\n\t\t\t\t\tnode: {\n\t\t\t\t\t\tnode: await /** @type {import('types').CSRPageNodeLoader } */ (errors[i])(),\n\t\t\t\t\t\tloader: /** @type {import('types').CSRPageNodeLoader } */ (errors[i]),\n\t\t\t\t\t\tdata: {},\n\t\t\t\t\t\tserver: null,\n\t\t\t\t\t\tuniversal: null\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {{\n *   status: number;\n *   error: App.Error;\n *   url: URL;\n *   route: { id: string | null }\n * }} opts\n * @returns {Promise<import('./types.js').NavigationFinished>}\n */\nasync function load_root_error_page({ status, error, url, route }) {\n\t/** @type {Record<string, string>} */\n\tconst params = {}; // error page does not have params\n\n\t/** @type {import('types').ServerDataNode | null} */\n\tlet server_data_node = null;\n\n\tif (__SVELTEKIT_HAS_SERVER_LOAD__) {\n\t\tconst default_layout_has_server_load = app.server_loads[0] === 0;\n\n\t\tif (default_layout_has_server_load) {\n\t\t\t// TODO post-https://github.com/sveltejs/kit/discussions/6124 we can use\n\t\t\t// existing root layout data\n\t\t\ttry {\n\t\t\t\tconst server_data = await load_data(url, [true]);\n\n\t\t\t\tif (\n\t\t\t\t\tserver_data.type !== 'data' ||\n\t\t\t\t\t(server_data.nodes[0] && server_data.nodes[0].type !== 'data')\n\t\t\t\t) {\n\t\t\t\t\tthrow 0;\n\t\t\t\t}\n\n\t\t\t\tserver_data_node = server_data.nodes[0] ?? null;\n\t\t\t} catch {\n\t\t\t\t// at this point we have no choice but to fall back to the server, if it wouldn't\n\t\t\t\t// bring us right back here, turning this into an endless loop\n\t\t\t\tif (url.origin !== origin || url.pathname !== location.pathname || hydrated) {\n\t\t\t\t\tawait native_navigation(url);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttry {\n\t\tconst root_layout = await load_node({\n\t\t\tloader: default_layout_loader,\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute,\n\t\t\tparent: () => Promise.resolve({}),\n\t\t\tserver_data_node: create_data_node(server_data_node)\n\t\t});\n\n\t\t/** @type {import('./types.js').BranchNode} */\n\t\tconst root_error = {\n\t\t\tnode: await default_error_loader(),\n\t\t\tloader: default_error_loader,\n\t\t\tuniversal: null,\n\t\t\tserver: null,\n\t\t\tdata: null\n\t\t};\n\n\t\treturn get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: [root_layout, root_error],\n\t\t\tstatus,\n\t\t\terror,\n\t\t\terrors: [],\n\t\t\troute: null\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof Redirect) {\n\t\t\t// @ts-expect-error TODO investigate this\n\t\t\treturn _goto(new URL(error.location, location.href), {}, 0);\n\t\t}\n\n\t\t// TODO: this falls back to the server when a server exists, but what about SPA mode?\n\t\tthrow error;\n\t}\n}\n\n/**\n * Resolve the relative rerouted URL for a client-side navigation\n * @param {URL} url\n * @returns {Promise<URL | undefined>}\n */\nasync function get_rerouted_url(url) {\n\tconst href = url.href;\n\n\tif (reroute_cache.has(href)) {\n\t\treturn reroute_cache.get(href);\n\t}\n\n\tlet rerouted;\n\n\ttry {\n\t\tconst promise = (async () => {\n\t\t\t// reroute could alter the given URL, so we pass a copy\n\t\t\tlet rerouted =\n\t\t\t\t(await app.hooks.reroute({\n\t\t\t\t\turl: new URL(url),\n\t\t\t\t\tfetch: async (input, init) => {\n\t\t\t\t\t\treturn resolve_fetch_url(input, init, url).promise;\n\t\t\t\t\t}\n\t\t\t\t})) ?? url;\n\n\t\t\tif (typeof rerouted === 'string') {\n\t\t\t\tconst tmp = new URL(url); // do not mutate the incoming URL\n\n\t\t\t\tif (app.hash) {\n\t\t\t\t\ttmp.hash = rerouted;\n\t\t\t\t} else {\n\t\t\t\t\ttmp.pathname = rerouted;\n\t\t\t\t}\n\n\t\t\t\trerouted = tmp;\n\t\t\t}\n\n\t\t\treturn rerouted;\n\t\t})();\n\n\t\treroute_cache.set(href, promise);\n\t\trerouted = await promise;\n\t} catch (e) {\n\t\treroute_cache.delete(href);\n\t\tif (DEV) {\n\t\t\t// in development, print the error...\n\t\t\tconsole.error(e);\n\n\t\t\t// ...and pause execution, since otherwise we will immediately reload the page\n\t\t\tdebugger; // eslint-disable-line\n\t\t}\n\n\t\t// fall back to native navigation\n\t\treturn;\n\t}\n\n\treturn rerouted;\n}\n\n/**\n * Resolve the full info (which route, params, etc.) for a client-side navigation from the URL,\n * taking the reroute hook into account. If this isn't a client-side-navigation (or the URL is undefined),\n * returns undefined.\n * @param {URL | undefined} url\n * @param {boolean} invalidating\n * @returns {Promise<import('./types.js').NavigationIntent | undefined>}\n */\nexport async function get_navigation_intent(url, invalidating) {\n\tif (!url) return;\n\tif (is_external_url(url, base, app.hash)) return;\n\n\tif (__SVELTEKIT_CLIENT_ROUTING__) {\n\t\tconst rerouted = await get_rerouted_url(url);\n\t\tif (!rerouted) return;\n\n\t\tconst path = get_url_path(rerouted);\n\n\t\tfor (const route of routes) {\n\t\t\tconst params = route.exec(path);\n\n\t\t\tif (params) {\n\t\t\t\treturn {\n\t\t\t\t\tid: get_page_key(url),\n\t\t\t\t\tinvalidating,\n\t\t\t\t\troute,\n\t\t\t\t\tparams: decode_params(params),\n\t\t\t\t\turl\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t} else {\n\t\t/** @type {{ route?: import('types').CSRRouteServer, params: Record<string, string>}} */\n\t\tconst { route, params } = await import(\n\t\t\t/* @vite-ignore */\n\t\t\tadd_resolution_suffix(url.pathname)\n\t\t);\n\n\t\tif (!route) return;\n\n\t\treturn {\n\t\t\tid: get_page_key(url),\n\t\t\tinvalidating,\n\t\t\troute: parse_server_route(route, app.nodes),\n\t\t\tparams,\n\t\t\turl\n\t\t};\n\t}\n}\n\n/** @param {URL} url */\nfunction get_url_path(url) {\n\treturn (\n\t\tdecode_pathname(\n\t\t\tapp.hash ? url.hash.replace(/^#/, '').replace(/[?#].+/, '') : url.pathname.slice(base.length)\n\t\t) || '/'\n\t);\n}\n\n/** @param {URL} url */\nfunction get_page_key(url) {\n\treturn (app.hash ? url.hash.replace(/^#/, '') : url.pathname) + url.search;\n}\n\n/**\n * @param {{\n *   url: URL;\n *   type: import('@sveltejs/kit').Navigation[\"type\"];\n *   intent?: import('./types.js').NavigationIntent;\n *   delta?: number;\n *   event?: PopStateEvent | MouseEvent;\n *   scroll?: { x: number, y: number };\n * }} opts\n */\nfunction _before_navigate({ url, type, intent, delta, event, scroll }) {\n\tlet should_block = false;\n\n\tconst nav = create_navigation(current, intent, url, type, scroll ?? null);\n\n\tif (delta !== undefined) {\n\t\tnav.navigation.delta = delta;\n\t}\n\n\tif (event !== undefined) {\n\t\t// @ts-ignore\n\t\tnav.navigation.event = event;\n\t}\n\n\tconst cancellable = {\n\t\t...nav.navigation,\n\t\tcancel: () => {\n\t\t\tshould_block = true;\n\t\t\tnav.reject(new Error('navigation cancelled'));\n\t\t}\n\t};\n\n\tif (!is_navigating) {\n\t\t// Don't run the event during redirects\n\t\tbefore_navigate_callbacks.forEach((fn) => fn(cancellable));\n\t}\n\n\treturn should_block ? null : nav;\n}\n\n/**\n * @param {{\n *   type: import('@sveltejs/kit').NavigationType;\n *   url: URL;\n *   popped?: {\n *     state: Record<string, any>;\n *     scroll: { x: number, y: number };\n *     delta: number;\n *   };\n *   keepfocus?: boolean;\n *   noscroll?: boolean;\n *   replace_state?: boolean;\n *   state?: Record<string, any>;\n *   redirect_count?: number;\n *   nav_token?: {};\n *   accept?: () => void;\n *   block?: () => void;\n *   event?: Event\n * }} opts\n */\nasync function navigate({\n\ttype,\n\turl,\n\tpopped,\n\tkeepfocus,\n\tnoscroll,\n\treplace_state,\n\tstate = {},\n\tredirect_count = 0,\n\tnav_token = {},\n\taccept = noop,\n\tblock = noop,\n\tevent\n}) {\n\tremote_responses = {};\n\n\tconst prev_token = token;\n\ttoken = nav_token;\n\n\tconst intent = await get_navigation_intent(url, false);\n\tconst nav =\n\t\ttype === 'enter'\n\t\t\t? create_navigation(current, intent, url, type)\n\t\t\t: _before_navigate({\n\t\t\t\t\turl,\n\t\t\t\t\ttype,\n\t\t\t\t\tdelta: popped?.delta,\n\t\t\t\t\tintent,\n\t\t\t\t\tscroll: popped?.scroll,\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tevent\n\t\t\t\t});\n\n\tif (!nav) {\n\t\tblock();\n\t\tif (token === nav_token) token = prev_token;\n\t\treturn;\n\t}\n\n\t// store this before calling `accept()`, which may change the index\n\tconst previous_history_index = current_history_index;\n\tconst previous_navigation_index = current_navigation_index;\n\n\taccept();\n\n\tis_navigating = true;\n\n\tif (started && nav.navigation.type !== 'enter') {\n\t\tstores.navigating.set((navigating.current = nav.navigation));\n\t}\n\n\tlet navigation_result = intent && (await load_route(intent));\n\n\tif (!navigation_result) {\n\t\tif (is_external_url(url, base, app.hash)) {\n\t\t\tif (DEV && app.hash) {\n\t\t\t\t// Special case for hash mode during DEV: If someone accidentally forgets to use a hash for the link,\n\t\t\t\t// they would end up here in an endless loop. Fall back to error page in that case\n\t\t\t\tnavigation_result = await server_fallback(\n\t\t\t\t\turl,\n\t\t\t\t\t{ id: null },\n\t\t\t\t\tawait handle_error(\n\t\t\t\t\t\tnew SvelteKitError(\n\t\t\t\t\t\t\t404,\n\t\t\t\t\t\t\t'Not Found',\n\t\t\t\t\t\t\t`Not found: ${url.pathname} (did you forget the hash?)`\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\t\troute: { id: null }\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t404,\n\t\t\t\t\treplace_state\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn await native_navigation(url, replace_state);\n\t\t\t}\n\t\t} else {\n\t\t\tnavigation_result = await server_fallback(\n\t\t\t\turl,\n\t\t\t\t{ id: null },\n\t\t\t\tawait handle_error(new SvelteKitError(404, 'Not Found', `Not found: ${url.pathname}`), {\n\t\t\t\t\turl,\n\t\t\t\t\tparams: {},\n\t\t\t\t\troute: { id: null }\n\t\t\t\t}),\n\t\t\t\t404,\n\t\t\t\treplace_state\n\t\t\t);\n\t\t}\n\t}\n\n\t// if this is an internal navigation intent, use the normalized\n\t// URL for the rest of the function\n\turl = intent?.url || url;\n\n\t// abort if user navigated during update\n\tif (token !== nav_token) {\n\t\tnav.reject(new Error('navigation aborted'));\n\t\treturn false;\n\t}\n\n\tif (navigation_result.type === 'redirect') {\n\t\t// whatwg fetch spec https://fetch.spec.whatwg.org/#http-redirect-fetch says to error after 20 redirects\n\t\tif (redirect_count < 20) {\n\t\t\tawait navigate({\n\t\t\t\ttype,\n\t\t\t\turl: new URL(navigation_result.location, url),\n\t\t\t\tpopped,\n\t\t\t\tkeepfocus,\n\t\t\t\tnoscroll,\n\t\t\t\treplace_state,\n\t\t\t\tstate,\n\t\t\t\tredirect_count: redirect_count + 1,\n\t\t\t\tnav_token\n\t\t\t});\n\n\t\t\tnav.fulfil(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tnavigation_result = await load_root_error_page({\n\t\t\tstatus: 500,\n\t\t\terror: await handle_error(new Error('Redirect loop'), {\n\t\t\t\turl,\n\t\t\t\tparams: {},\n\t\t\t\troute: { id: null }\n\t\t\t}),\n\t\t\turl,\n\t\t\troute: { id: null }\n\t\t});\n\t} else if (/** @type {number} */ (navigation_result.props.page.status) >= 400) {\n\t\tconst updated = await stores.updated.check();\n\t\tif (updated) {\n\t\t\t// Before reloading, try to update the service worker if it exists\n\t\t\tawait update_service_worker();\n\t\t\tawait native_navigation(url, replace_state);\n\t\t}\n\t}\n\n\t// reset invalidation only after a finished navigation. If there are redirects or\n\t// additional invalidations, they should get the same invalidation treatment\n\treset_invalidation();\n\n\tupdating = true;\n\n\tupdate_scroll_positions(previous_history_index);\n\tcapture_snapshot(previous_navigation_index);\n\n\t// ensure the url pathname matches the page's trailing slash option\n\tif (navigation_result.props.page.url.pathname !== url.pathname) {\n\t\turl.pathname = navigation_result.props.page.url.pathname;\n\t}\n\n\tstate = popped ? popped.state : state;\n\n\tif (!popped) {\n\t\t// this is a new navigation, rather than a popstate\n\t\tconst change = replace_state ? 0 : 1;\n\n\t\tconst entry = {\n\t\t\t[HISTORY_INDEX]: (current_history_index += change),\n\t\t\t[NAVIGATION_INDEX]: (current_navigation_index += change),\n\t\t\t[STATES_KEY]: state\n\t\t};\n\n\t\tconst fn = replace_state ? history.replaceState : history.pushState;\n\t\tfn.call(history, entry, '', url);\n\n\t\tif (!replace_state) {\n\t\t\tclear_onward_history(current_history_index, current_navigation_index);\n\t\t}\n\t}\n\n\t// also compare ids to avoid using wrong fork (e.g. a new one could've been added while navigating)\n\tconst load_cache_fork = intent && load_cache?.id === intent.id ? load_cache.fork : null;\n\t// reset preload synchronously after the history state has been set to avoid race conditions\n\tload_cache = null;\n\n\tnavigation_result.props.page.state = state;\n\n\t/**\n\t * @type {Promise<void> | undefined}\n\t */\n\tlet commit_promise;\n\tif (started) {\n\t\tconst after_navigate = (\n\t\t\tawait Promise.all(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/await-thenable -- we need to await because they can be asynchronous\n\t\t\t\tArray.from(on_navigate_callbacks, (fn) =>\n\t\t\t\t\tfn(/** @type {import('@sveltejs/kit').OnNavigate} */ (nav.navigation))\n\t\t\t\t)\n\t\t\t)\n\t\t).filter(/** @returns {value is () => void} */ (value) => typeof value === 'function');\n\n\t\tif (after_navigate.length > 0) {\n\t\t\tfunction cleanup() {\n\t\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\t\tafter_navigate_callbacks.delete(fn);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tafter_navigate.push(cleanup);\n\n\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\tafter_navigate_callbacks.add(fn);\n\t\t\t});\n\t\t}\n\n\t\t// Type-casts are save because we know this resolved a proper SvelteKit route\n\t\tconst target = /** @type {import('@sveltejs/kit').NavigationTarget} */ (nav.navigation.to);\n\t\tcurrent = {\n\t\t\t...navigation_result.state,\n\t\t\tnav: {\n\t\t\t\tparams: /** @type {Record<string, any>} */ (target.params),\n\t\t\t\troute: target.route,\n\t\t\t\turl: target.url\n\t\t\t}\n\t\t};\n\n\t\t// reset url before updating page store\n\t\tif (navigation_result.props.page) {\n\t\t\tnavigation_result.props.page.url = url;\n\t\t}\n\n\t\tconst fork = load_cache_fork && (await load_cache_fork);\n\n\t\tif (fork) {\n\t\t\tcommit_promise = fork.commit();\n\t\t} else {\n\t\t\trendering_error = null; // TODO this can break with forks, rethink for SvelteKit 3 where we can assume Svelte 5\n\t\t\troot.$set(navigation_result.props);\n\t\t\t// Check for sync rendering error\n\t\t\tif (rendering_error) {\n\t\t\t\tObject.assign(navigation_result.props.page, rendering_error);\n\t\t\t}\n\t\t\tupdate(navigation_result.props.page);\n\n\t\t\tcommit_promise = svelte.settled?.();\n\t\t}\n\n\t\thas_navigated = true;\n\t} else {\n\t\tawait initialize(navigation_result, target, false);\n\t}\n\n\tconst { activeElement } = document;\n\n\tawait commit_promise;\n\n\t// TODO 3.0 remote — the double tick is probably necessary because\n\t// of some store shenanigans. `settled()` and `f.commit()`\n\t// should resolve after DOM updates in newer versions\n\tawait svelte.tick();\n\tawait svelte.tick();\n\n\t// we reset scroll before dealing with focus, to avoid a flash of unscrolled content\n\t/** @type {Element | null | ''} */\n\tlet deep_linked = null;\n\n\tif (autoscroll) {\n\t\tconst scroll = popped ? popped.scroll : noscroll ? scroll_state() : null;\n\t\tif (scroll) {\n\t\t\tscrollTo(scroll.x, scroll.y);\n\t\t} else if ((deep_linked = url.hash && document.getElementById(get_id(url)))) {\n\t\t\t// Here we use `scrollIntoView` on the element instead of `scrollTo`\n\t\t\t// because it natively supports the `scroll-margin` and `scroll-behavior`\n\t\t\t// CSS properties.\n\t\t\tdeep_linked.scrollIntoView();\n\t\t} else {\n\t\t\tscrollTo(0, 0);\n\t\t}\n\t}\n\n\tconst changed_focus =\n\t\t// reset focus only if any manual focus management didn't override it\n\t\tdocument.activeElement !== activeElement &&\n\t\t// also refocus when activeElement is body already because the\n\t\t// focus event might not have been fired on it yet\n\t\tdocument.activeElement !== document.body;\n\n\tif (!keepfocus && !changed_focus) {\n\t\t// We don't need to manually restore the scroll position if we're navigating\n\t\t// to a fragment identifier. It is automatically done for us when we set the\n\t\t// sequential navigation starting point with `location.replace`\n\t\treset_focus(url, !deep_linked);\n\t}\n\n\tautoscroll = true;\n\n\tif (navigation_result.props.page) {\n\t\t// Check for async rendering error\n\t\tif (rendering_error) {\n\t\t\tObject.assign(navigation_result.props.page, rendering_error);\n\t\t}\n\t\tObject.assign(page, navigation_result.props.page);\n\t}\n\n\tis_navigating = false;\n\n\tif (type === 'popstate') {\n\t\trestore_snapshot(current_navigation_index);\n\t}\n\n\tnav.fulfil(undefined);\n\n\t// Update to.scroll to the actual scroll position after navigation completed\n\tif (nav.navigation.to) {\n\t\tnav.navigation.to.scroll = scroll_state();\n\t}\n\n\tafter_navigate_callbacks.forEach((fn) =>\n\t\tfn(/** @type {import('@sveltejs/kit').AfterNavigate} */ (nav.navigation))\n\t);\n\n\tstores.navigating.set((navigating.current = null));\n\n\tupdating = false;\n}\n\n/**\n * Does a full page reload if it wouldn't result in an endless loop in the SPA case\n * @param {URL} url\n * @param {{ id: string | null }} route\n * @param {App.Error} error\n * @param {number} status\n * @param {boolean} [replace_state]\n * @returns {Promise<import('./types.js').NavigationFinished>}\n */\nasync function server_fallback(url, route, error, status, replace_state) {\n\tif (url.origin === origin && url.pathname === location.pathname && !hydrated) {\n\t\t// We would reload the same page we're currently on, which isn't hydrated,\n\t\t// which means no SSR, which means we would end up in an endless loop\n\t\treturn await load_root_error_page({\n\t\t\tstatus,\n\t\t\terror,\n\t\t\turl,\n\t\t\troute\n\t\t});\n\t}\n\n\tif (DEV && status !== 404) {\n\t\tconsole.error(\n\t\t\t'An error occurred while loading the page. This will cause a full page reload. (This message will only appear during development.)'\n\t\t);\n\n\t\tdebugger; // eslint-disable-line\n\t}\n\n\treturn await native_navigation(url, replace_state);\n}\n\nif (import.meta.hot) {\n\timport.meta.hot.on('vite:beforeUpdate', () => {\n\t\tif (current.error) location.reload();\n\t});\n}\n\n/** @typedef {(typeof PRELOAD_PRIORITIES)['hover'] | (typeof PRELOAD_PRIORITIES)['tap']} PreloadDataPriority */\n\nfunction setup_preload() {\n\t/** @type {NodeJS.Timeout} */\n\tlet mousemove_timeout;\n\t/** @type {{ element: Element | SVGAElement | undefined; href: string | SVGAnimatedString | undefined }} */\n\tlet current_a = { element: undefined, href: undefined };\n\t/** @type {PreloadDataPriority} */\n\tlet current_priority;\n\n\tcontainer.addEventListener('mousemove', (event) => {\n\t\tconst target = /** @type {Element} */ (event.target);\n\n\t\tclearTimeout(mousemove_timeout);\n\t\tmousemove_timeout = setTimeout(() => {\n\t\t\tvoid preload(target, PRELOAD_PRIORITIES.hover);\n\t\t}, 20);\n\t});\n\n\t/** @param {Event} event */\n\tfunction tap(event) {\n\t\tif (event.defaultPrevented) return;\n\t\tvoid preload(/** @type {Element} */ (event.composedPath()[0]), PRELOAD_PRIORITIES.tap);\n\t}\n\n\tcontainer.addEventListener('mousedown', tap);\n\tcontainer.addEventListener('touchstart', tap, { passive: true });\n\n\tconst observer = new IntersectionObserver(\n\t\t(entries) => {\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tvoid _preload_code(new URL(/** @type {HTMLAnchorElement} */ (entry.target).href));\n\t\t\t\t\tobserver.unobserve(entry.target);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ threshold: 0 }\n\t);\n\n\t/**\n\t * @param {Element} element\n\t * @param {PreloadDataPriority} priority\n\t */\n\tasync function preload(element, priority) {\n\t\tconst a = find_anchor(element, container);\n\n\t\t// we don't want to preload data again if the user has already hovered/tapped\n\t\tconst interacted =\n\t\t\ta === current_a.element && a?.href === current_a.href && priority >= current_priority;\n\t\tif (!a || interacted) return;\n\n\t\tconst { url, external, download } = get_link_info(a, base, app.hash);\n\t\tif (external || download) return;\n\n\t\tconst options = get_router_options(a);\n\n\t\t// we don't want to preload data for a page we're already on\n\t\tconst same_url = url && get_page_key(current.url) === get_page_key(url);\n\t\tif (options.reload || same_url) return;\n\n\t\tif (priority <= options.preload_data) {\n\t\t\tcurrent_a = { element: a, href: a.href };\n\t\t\t// we don't want to preload data again on tap if we've already preloaded it on hover\n\t\t\tcurrent_priority = PRELOAD_PRIORITIES.tap;\n\n\t\t\tconst intent = await get_navigation_intent(url, false);\n\t\t\tif (!intent) return;\n\n\t\t\tif (DEV) {\n\t\t\t\tvoid _preload_data(intent).then((result) => {\n\t\t\t\t\tif (result.type === 'loaded' && result.state.error) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`Preloading data for ${intent.url.pathname} failed with the following error: ${result.state.error.message}\\n` +\n\t\t\t\t\t\t\t\t'If this error is transient, you can ignore it. Otherwise, consider disabling preloading for this route. ' +\n\t\t\t\t\t\t\t\t'This route was preloaded due to a data-sveltekit-preload-data attribute. ' +\n\t\t\t\t\t\t\t\t'See https://svelte.dev/docs/kit/link-options for more info'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvoid _preload_data(intent);\n\t\t\t}\n\t\t} else if (priority <= options.preload_code) {\n\t\t\tcurrent_a = { element: a, href: a.href };\n\t\t\tcurrent_priority = priority;\n\t\t\tvoid _preload_code(/** @type {URL} */ (url));\n\t\t}\n\t}\n\n\tfunction after_navigate() {\n\t\tobserver.disconnect();\n\n\t\tfor (const a of container.querySelectorAll('a')) {\n\t\t\tconst { url, external, download } = get_link_info(a, base, app.hash);\n\t\t\tif (external || download) continue;\n\n\t\t\tconst options = get_router_options(a);\n\t\t\tif (options.reload) continue;\n\n\t\t\tif (options.preload_code === PRELOAD_PRIORITIES.viewport) {\n\t\t\t\tobserver.observe(a);\n\t\t\t}\n\n\t\t\tif (options.preload_code === PRELOAD_PRIORITIES.eager) {\n\t\t\t\tvoid _preload_code(/** @type {URL} */ (url));\n\t\t\t}\n\t\t}\n\t}\n\n\tafter_navigate_callbacks.add(after_navigate);\n\tafter_navigate();\n}\n\n/**\n * @param {unknown} error\n * @param {import('@sveltejs/kit').NavigationEvent} event\n * @returns {import('types').MaybePromise<App.Error>}\n */\nfunction handle_error(error, event) {\n\tif (error instanceof HttpError) {\n\t\treturn error.body;\n\t}\n\n\tif (DEV) {\n\t\terrored = true;\n\t\tconsole.warn('The next HMR update will cause the page to reload');\n\t}\n\n\tconst status = get_status(error);\n\tconst message = get_message(error);\n\n\treturn (\n\t\tapp.hooks.handleError({ error, event, status, message }) ?? /** @type {any} */ ({ message })\n\t);\n}\n\n/**\n * @template {Function} T\n * @param {Set<T>} callbacks\n * @param {T} callback\n */\nfunction add_navigation_callback(callbacks, callback) {\n\tonMount(() => {\n\t\tcallbacks.add(callback);\n\n\t\treturn () => {\n\t\t\tcallbacks.delete(callback);\n\t\t};\n\t});\n}\n\n/**\n * A lifecycle function that runs the supplied `callback` when the current component mounts, and also whenever we navigate to a URL.\n *\n * `afterNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n * @param {(navigation: import('@sveltejs/kit').AfterNavigate) => void} callback\n * @returns {void}\n */\nexport function afterNavigate(callback) {\n\tadd_navigation_callback(after_navigate_callbacks, callback);\n}\n\n/**\n * A navigation interceptor that triggers before we navigate to a URL, whether by clicking a link, calling `goto(...)`, or using the browser back/forward controls.\n *\n * Calling `cancel()` will prevent the navigation from completing. If `navigation.type === 'leave'` — meaning the user is navigating away from the app (or closing the tab) — calling `cancel` will trigger the native browser unload confirmation dialog. In this case, the navigation may or may not be cancelled depending on the user's response.\n *\n * When a navigation isn't to a SvelteKit-owned route (and therefore controlled by SvelteKit's client-side router), `navigation.to.route.id` will be `null`.\n *\n * If the navigation will (if not cancelled) cause the document to unload — in other words `'leave'` navigations and `'link'` navigations where `navigation.to.route === null` — `navigation.willUnload` is `true`.\n *\n * `beforeNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n * @param {(navigation: import('@sveltejs/kit').BeforeNavigate) => void} callback\n * @returns {void}\n */\nexport function beforeNavigate(callback) {\n\tadd_navigation_callback(before_navigate_callbacks, callback);\n}\n\n/**\n * A lifecycle function that runs the supplied `callback` immediately before we navigate to a new URL except during full-page navigations.\n *\n * If you return a `Promise`, SvelteKit will wait for it to resolve before completing the navigation. This allows you to — for example — use `document.startViewTransition`. Avoid promises that are slow to resolve, since navigation will appear stalled to the user.\n *\n * If a function (or a `Promise` that resolves to a function) is returned from the callback, it will be called once the DOM has updated.\n *\n * `onNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n * @param {(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<(() => void) | void>} callback\n * @returns {void}\n */\nexport function onNavigate(callback) {\n\tadd_navigation_callback(on_navigate_callbacks, callback);\n}\n\n/**\n * If called when the page is being updated following a navigation (in `onMount` or `afterNavigate` or an action, for example), this disables SvelteKit's built-in scroll handling.\n * This is generally discouraged, since it breaks user expectations.\n * @returns {void}\n */\nexport function disableScrollHandling() {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call disableScrollHandling() on the server');\n\t}\n\n\tif (DEV && started && !updating) {\n\t\tthrow new Error('Can only disable scroll handling during navigation');\n\t}\n\n\tif (updating || !started) {\n\t\tautoscroll = false;\n\t}\n}\n\n/**\n * Allows you to navigate programmatically to a given route, with options such as keeping the current element focused.\n * Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `url`.\n *\n * For external URLs, use `window.location = url` instead of calling `goto(url)`.\n *\n * @param {string | URL} url Where to navigate to. Note that if you've set [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths) and the URL is root-relative, you need to prepend the base path if you want to navigate within the app.\n * @param {Object} [opts] Options related to the navigation\n * @param {boolean} [opts.replaceState] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n * @param {boolean} [opts.noScroll] If `true`, the browser will maintain its scroll position rather than scrolling to the top of the page after navigation\n * @param {boolean} [opts.keepFocus] If `true`, the currently focused element will retain focus after navigation. Otherwise, focus will be reset to the body\n * @param {boolean} [opts.invalidateAll] If `true`, all `load` functions of the page will be rerun. See https://svelte.dev/docs/kit/load#rerunning-load-functions for more info on invalidation.\n * @param {Array<string | URL | ((url: URL) => boolean)>} [opts.invalidate] Causes any load functions to re-run if they depend on one of the urls\n * @param {App.PageState} [opts.state] An optional object that will be available as `page.state`\n * @returns {Promise<void>}\n */\nexport function goto(url, opts = {}) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call goto(...) on the server');\n\t}\n\n\turl = new URL(resolve_url(url));\n\n\tif (url.origin !== origin) {\n\t\treturn Promise.reject(\n\t\t\tnew Error(\n\t\t\t\tDEV\n\t\t\t\t\t? `Cannot use \\`goto\\` with an external URL. Use \\`window.location = \"${url}\"\\` instead`\n\t\t\t\t\t: 'goto: invalid URL'\n\t\t\t)\n\t\t);\n\t}\n\n\treturn _goto(url, opts, 0);\n}\n\n/**\n * Causes any `load` functions belonging to the currently active page to re-run if they depend on the `url` in question, via `fetch` or `depends`. Returns a `Promise` that resolves when the page is subsequently updated.\n *\n * If the argument is given as a `string` or `URL`, it must resolve to the same URL that was passed to `fetch` or `depends` (including query parameters).\n * To create a custom identifier, use a string beginning with `[a-z]+:` (e.g. `custom:state`) — this is a valid URL.\n *\n * The `function` argument can be used define a custom predicate. It receives the full `URL` and causes `load` to rerun if `true` is returned.\n * This can be useful if you want to invalidate based on a pattern instead of a exact match.\n *\n * ```ts\n * // Example: Match '/path' regardless of the query parameters\n * import { invalidate } from '$app/navigation';\n *\n * invalidate((url) => url.pathname === '/path');\n * ```\n * @param {string | URL | ((url: URL) => boolean)} resource The invalidated URL\n * @returns {Promise<void>}\n */\nexport function invalidate(resource) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call invalidate(...) on the server');\n\t}\n\n\tpush_invalidated(resource);\n\n\treturn _invalidate();\n}\n\n/**\n * @param {string | URL | ((url: URL) => boolean)} resource The invalidated URL\n */\nfunction push_invalidated(resource) {\n\tif (typeof resource === 'function') {\n\t\tinvalidated.push(resource);\n\t} else {\n\t\tconst { href } = new URL(resource, location.href);\n\t\tinvalidated.push((url) => url.href === href);\n\t}\n}\n\n/**\n * Causes all `load` and `query` functions belonging to the currently active page to re-run. Returns a `Promise` that resolves when the page is subsequently updated.\n * @returns {Promise<void>}\n */\nexport function invalidateAll() {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call invalidateAll() on the server');\n\t}\n\n\tforce_invalidation = true;\n\treturn _invalidate();\n}\n\n/**\n * Causes all currently active remote functions to refresh, and all `load` functions belonging to the currently active page to re-run (unless disabled via the option argument).\n * Returns a `Promise` that resolves when the page is subsequently updated.\n * @param {{ includeLoadFunctions?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function refreshAll({ includeLoadFunctions = true } = {}) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call refreshAll() on the server');\n\t}\n\n\tremote_responses = {};\n\n\tforce_invalidation = true;\n\treturn _invalidate(includeLoadFunctions, false);\n}\n\n/**\n * Programmatically preloads the given page, which means\n *  1. ensuring that the code for the page is loaded, and\n *  2. calling the page's load function with the appropriate options.\n *\n * This is the same behaviour that SvelteKit triggers when the user taps or mouses over an `<a>` element with `data-sveltekit-preload-data`.\n * If the next navigation is to `href`, the values returned from load will be used, making navigation instantaneous.\n * Returns a Promise that resolves with the result of running the new route's `load` functions once the preload is complete.\n *\n * @param {string} href Page to preload\n * @returns {Promise<{ type: 'loaded'; status: number; data: Record<string, any> } | { type: 'redirect'; location: string }>}\n */\nexport async function preloadData(href) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call preloadData(...) on the server');\n\t}\n\n\tconst url = resolve_url(href);\n\tconst intent = await get_navigation_intent(url, false);\n\n\tif (!intent) {\n\t\tthrow new Error(`Attempted to preload a URL that does not belong to this app: ${url}`);\n\t}\n\n\tconst result = await _preload_data(intent);\n\tif (result.type === 'redirect') {\n\t\treturn {\n\t\t\ttype: result.type,\n\t\t\tlocation: result.location\n\t\t};\n\t}\n\n\tconst { status, data } = result.props.page ?? page;\n\treturn { type: result.type, status, data };\n}\n\n/**\n * Programmatically imports the code for routes that haven't yet been fetched.\n * Typically, you might call this to speed up subsequent navigation.\n *\n * You can specify routes by any matching pathname such as `/about` (to match `src/routes/about/+page.svelte`) or `/blog/*` (to match `src/routes/blog/[slug]/+page.svelte`).\n *\n * Unlike `preloadData`, this won't call `load` functions.\n * Returns a Promise that resolves when the modules have been imported.\n *\n * @param {string} pathname\n * @returns {Promise<void>}\n */\nexport async function preloadCode(pathname) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call preloadCode(...) on the server');\n\t}\n\n\tconst url = new URL(pathname, current.url);\n\n\tif (DEV) {\n\t\tif (!pathname.startsWith('/')) {\n\t\t\tthrow new Error(\n\t\t\t\t'argument passed to preloadCode must be a pathname (i.e. \"/about\" rather than \"http://example.com/about\"'\n\t\t\t);\n\t\t}\n\n\t\tif (!pathname.startsWith(base)) {\n\t\t\tthrow new Error(\n\t\t\t\t`pathname passed to preloadCode must start with \\`paths.base\\` (i.e. \"${base}${pathname}\" rather than \"${pathname}\")`\n\t\t\t);\n\t\t}\n\n\t\tif (__SVELTEKIT_CLIENT_ROUTING__) {\n\t\t\tconst rerouted = await get_rerouted_url(url);\n\t\t\tif (!rerouted || !routes.find((route) => route.exec(get_url_path(rerouted)))) {\n\t\t\t\tthrow new Error(`'${pathname}' did not match any routes`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _preload_code(url);\n}\n\n/**\n * Programmatically create a new history entry with the given `page.state`. To use the current URL, you can pass `''` as the first argument. Used for [shallow routing](https://svelte.dev/docs/kit/shallow-routing).\n *\n * @param {string | URL} url\n * @param {App.PageState} state\n * @returns {void}\n */\nexport function pushState(url, state) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call pushState(...) on the server');\n\t}\n\n\tif (DEV) {\n\t\tif (!started) {\n\t\t\tthrow new Error('Cannot call pushState(...) before router is initialized');\n\t\t}\n\n\t\ttry {\n\t\t\t// use `devalue.stringify` as a convenient way to ensure we exclude values that can't be properly rehydrated, such as custom class instances\n\t\t\tdevalue.stringify(state);\n\t\t} catch (error) {\n\t\t\t// @ts-expect-error\n\t\t\tthrow new Error(`Could not serialize state${error.path}`, { cause: error });\n\t\t}\n\t}\n\n\tupdate_scroll_positions(current_history_index);\n\n\tconst opts = {\n\t\t[HISTORY_INDEX]: (current_history_index += 1),\n\t\t[NAVIGATION_INDEX]: current_navigation_index,\n\t\t[PAGE_URL_KEY]: page.url.href,\n\t\t[STATES_KEY]: state\n\t};\n\n\thistory.pushState(opts, '', resolve_url(url));\n\thas_navigated = true;\n\n\tpage.state = state;\n\troot.$set({\n\t\t// we need to assign a new page object so that subscribers are correctly notified\n\t\tpage: untrack(() => clone_page(page))\n\t});\n\n\tclear_onward_history(current_history_index, current_navigation_index);\n}\n\n/**\n * Programmatically replace the current history entry with the given `page.state`. To use the current URL, you can pass `''` as the first argument. Used for [shallow routing](https://svelte.dev/docs/kit/shallow-routing).\n *\n * @param {string | URL} url\n * @param {App.PageState} state\n * @returns {void}\n */\nexport function replaceState(url, state) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call replaceState(...) on the server');\n\t}\n\n\tif (DEV) {\n\t\tif (!started) {\n\t\t\tthrow new Error('Cannot call replaceState(...) before router is initialized');\n\t\t}\n\n\t\ttry {\n\t\t\t// use `devalue.stringify` as a convenient way to ensure we exclude values that can't be properly rehydrated, such as custom class instances\n\t\t\tdevalue.stringify(state);\n\t\t} catch (error) {\n\t\t\t// @ts-expect-error\n\t\t\tthrow new Error(`Could not serialize state${error.path}`, { cause: error });\n\t\t}\n\t}\n\n\tconst opts = {\n\t\t[HISTORY_INDEX]: current_history_index,\n\t\t[NAVIGATION_INDEX]: current_navigation_index,\n\t\t[PAGE_URL_KEY]: page.url.href,\n\t\t[STATES_KEY]: state\n\t};\n\n\thistory.replaceState(opts, '', resolve_url(url));\n\n\tpage.state = state;\n\troot.$set({\n\t\tpage: untrack(() => clone_page(page))\n\t});\n}\n\n/**\n * This action updates the `form` property of the current page with the given data and updates `page.status`.\n * In case of an error, it redirects to the nearest error page.\n * @template {Record<string, unknown> | undefined} Success\n * @template {Record<string, unknown> | undefined} Failure\n * @param {import('@sveltejs/kit').ActionResult<Success, Failure>} result\n * @returns {Promise<void>}\n */\nexport async function applyAction(result) {\n\tif (!BROWSER) {\n\t\tthrow new Error('Cannot call applyAction(...) on the server');\n\t}\n\n\tif (result.type === 'error') {\n\t\tawait set_nearest_error_page(result.error, result.status);\n\t} else if (result.type === 'redirect') {\n\t\tawait _goto(result.location, { invalidateAll: true }, 0);\n\t} else {\n\t\tpage.form = result.data;\n\t\tpage.status = result.status;\n\n\t\t/** @type {Record<string, any>} */\n\t\troot.$set({\n\t\t\t// this brings Svelte's view of the world in line with SvelteKit's\n\t\t\t// after use:enhance reset the form....\n\t\t\tform: null,\n\t\t\tpage: clone_page(page)\n\t\t});\n\n\t\t// ...so that setting the `form` prop takes effect and isn't ignored\n\t\tawait tick();\n\t\troot.$set({ form: result.data });\n\n\t\tif (result.type === 'success') {\n\t\t\treset_focus(page.url);\n\t\t}\n\t}\n}\n\n/**\n * @param {App.Error} error\n * @param {number} status\n */\nexport async function set_nearest_error_page(error, status = 500) {\n\tconst url = new URL(location.href);\n\n\tconst { branch, route } = current;\n\tif (!route) return;\n\n\tconst error_load = await load_nearest_error_page(current.branch.length, branch, route.errors);\n\tif (error_load) {\n\t\tconst navigation_result = await get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams: current.params,\n\t\t\tbranch: branch.slice(0, error_load.idx).concat(error_load.node),\n\t\t\tstatus,\n\t\t\terror,\n\t\t\t// do not set errors, we haven't changed the page so the previous ones are still current\n\t\t\troute\n\t\t});\n\n\t\tcurrent = { ...navigation_result.state, nav: current.nav };\n\n\t\troot.$set(navigation_result.props);\n\t\tupdate(navigation_result.props.page);\n\n\t\tvoid tick().then(() => reset_focus(current.url));\n\t}\n}\n\nfunction _start_router() {\n\thistory.scrollRestoration = 'manual';\n\n\t// Adopted from Nuxt.js\n\t// Reset scrollRestoration to auto when leaving page, allowing page reload\n\t// and back-navigation from other pages to use the browser to restore the\n\t// scrolling position.\n\taddEventListener('beforeunload', (e) => {\n\t\tlet should_block = false;\n\n\t\tpersist_state();\n\n\t\tif (!is_navigating) {\n\t\t\tconst nav = create_navigation(current, undefined, null, 'leave');\n\n\t\t\t// If we're navigating, beforeNavigate was already called. If we end up in here during navigation,\n\t\t\t// it's due to an external or full-page-reload link, for which we don't want to call the hook again.\n\t\t\t/** @type {import('@sveltejs/kit').BeforeNavigate} */\n\t\t\tconst navigation = {\n\t\t\t\t...nav.navigation,\n\t\t\t\tcancel: () => {\n\t\t\t\t\tshould_block = true;\n\t\t\t\t\tnav.reject(new Error('navigation cancelled'));\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tbefore_navigate_callbacks.forEach((fn) => fn(navigation));\n\t\t}\n\n\t\tif (should_block) {\n\t\t\te.preventDefault();\n\t\t\te.returnValue = '';\n\t\t} else {\n\t\t\thistory.scrollRestoration = 'auto';\n\t\t}\n\t});\n\n\taddEventListener('visibilitychange', () => {\n\t\tif (document.visibilityState === 'hidden') {\n\t\t\tpersist_state();\n\t\t}\n\t});\n\n\t// @ts-expect-error this isn't supported everywhere yet\n\tif (!navigator.connection?.saveData) {\n\t\tsetup_preload();\n\t}\n\n\t/** @param {MouseEvent} event */\n\tcontainer.addEventListener('click', async (event) => {\n\t\t// Adapted from https://github.com/visionmedia/page.js\n\t\t// MIT license https://github.com/visionmedia/page.js#license\n\t\tif (event.button || event.which !== 1) return;\n\t\tif (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\t\tif (event.defaultPrevented) return;\n\n\t\tconst a = find_anchor(/** @type {Element} */ (event.composedPath()[0]), container);\n\t\tif (!a) return;\n\n\t\tconst { url, external, target, download } = get_link_info(a, base, app.hash);\n\t\tif (!url) return;\n\n\t\t// bail out before `beforeNavigate` if link opens in a different tab\n\t\tif (target === '_parent' || target === '_top') {\n\t\t\tif (window.parent !== window) return;\n\t\t} else if (target && target !== '_self') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst options = get_router_options(a);\n\t\tconst is_svg_a_element = a instanceof SVGAElement;\n\n\t\t// Ignore URL protocols that differ to the current one and are not http(s) (e.g. `mailto:`, `tel:`, `myapp:`, etc.)\n\t\t// This may be wrong when the protocol is x: and the link goes to y:.. which should be treated as an external\n\t\t// navigation, but it's not clear how to handle that case and it's not likely to come up in practice.\n\t\t// MEMO: Without this condition, firefox will open mailer twice.\n\t\t// See:\n\t\t// - https://github.com/sveltejs/kit/issues/4045\n\t\t// - https://github.com/sveltejs/kit/issues/5725\n\t\t// - https://github.com/sveltejs/kit/issues/6496\n\t\tif (\n\t\t\t!is_svg_a_element &&\n\t\t\turl.protocol !== location.protocol &&\n\t\t\t!(url.protocol === 'https:' || url.protocol === 'http:')\n\t\t)\n\t\t\treturn;\n\n\t\tif (download) return;\n\n\t\tconst [nonhash, hash] = (app.hash ? url.hash.replace(/^#/, '') : url.href).split('#');\n\t\tconst same_pathname = nonhash === strip_hash(location);\n\n\t\t// Ignore the following but fire beforeNavigate\n\t\tif (external || (options.reload && (!same_pathname || !hash))) {\n\t\t\tif (_before_navigate({ url, type: 'link', event })) {\n\t\t\t\t// set `navigating` to `true` to prevent `beforeNavigate` callbacks\n\t\t\t\t// being called when the page unloads\n\t\t\t\tis_navigating = true;\n\t\t\t} else {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if new url only differs by hash and use the browser default behavior in that case\n\t\t// This will ensure the `hashchange` event is fired\n\t\t// Removing the hash does a full page navigation in the browser, so make sure a hash is present\n\t\tif (hash !== undefined && same_pathname) {\n\t\t\t// If we are trying to navigate to the same hash, we should only\n\t\t\t// attempt to scroll to that element and avoid any history changes.\n\t\t\t// Otherwise, this can cause Firefox to incorrectly assign a null\n\t\t\t// history state value without any signal that we can detect.\n\t\t\tconst [, current_hash] = current.url.href.split('#');\n\t\t\tif (current_hash === hash) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// We're already on /# and click on a link that goes to /#, or we're on\n\t\t\t\t// /#top and click on a link that goes to /#top. In those cases just go to\n\t\t\t\t// the top of the page, and avoid a history change.\n\t\t\t\tif (hash === '' || (hash === 'top' && a.ownerDocument.getElementById('top') === null)) {\n\t\t\t\t\tscrollTo({ top: 0 });\n\t\t\t\t} else {\n\t\t\t\t\tconst element = a.ownerDocument.getElementById(decodeURIComponent(hash));\n\t\t\t\t\tif (element) {\n\t\t\t\t\t\telement.scrollIntoView();\n\t\t\t\t\t\telement.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// set this flag to distinguish between navigations triggered by\n\t\t\t// clicking a hash link and those triggered by popstate\n\t\t\thash_navigating = true;\n\n\t\t\tupdate_scroll_positions(current_history_index);\n\n\t\t\tupdate_url(url);\n\n\t\t\tif (!options.replace_state) return;\n\n\t\t\t// hashchange event shouldn't occur if the router is replacing state.\n\t\t\thash_navigating = false;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\t// allow the browser to repaint before navigating —\n\t\t// this prevents INP scores being penalised\n\t\tawait new Promise((fulfil) => {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tsetTimeout(fulfil, 0);\n\t\t\t});\n\n\t\t\tsetTimeout(fulfil, 100); // fallback for edge case where rAF doesn't fire because e.g. tab was backgrounded\n\t\t});\n\n\t\tawait navigate({\n\t\t\ttype: 'link',\n\t\t\turl,\n\t\t\tkeepfocus: options.keepfocus,\n\t\t\tnoscroll: options.noscroll,\n\t\t\treplace_state: options.replace_state ?? url.href === location.href,\n\t\t\tevent\n\t\t});\n\t});\n\n\tcontainer.addEventListener('submit', (event) => {\n\t\tif (event.defaultPrevented) return;\n\n\t\tconst form = /** @type {HTMLFormElement} */ (\n\t\t\tHTMLFormElement.prototype.cloneNode.call(event.target)\n\t\t);\n\n\t\tconst submitter = /** @type {HTMLButtonElement | HTMLInputElement | null} */ (event.submitter);\n\n\t\tconst target = submitter?.formTarget || form.target;\n\n\t\tif (target === '_blank') return;\n\n\t\tconst method = submitter?.formMethod || form.method;\n\n\t\tif (method !== 'get') return;\n\n\t\t// It is impossible to use form actions with hash router, so we just ignore handling them here\n\t\tconst url = new URL(\n\t\t\t(submitter?.hasAttribute('formaction') && submitter?.formAction) || form.action\n\t\t);\n\n\t\tif (is_external_url(url, base, false)) return;\n\n\t\tconst event_form = /** @type {HTMLFormElement} */ (event.target);\n\n\t\tconst options = get_router_options(event_form);\n\t\tif (options.reload) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst data = new FormData(event_form, submitter);\n\n\t\t// @ts-expect-error `URLSearchParams(fd)` is kosher, but typescript doesn't know that\n\t\turl.search = new URLSearchParams(data).toString();\n\n\t\tvoid navigate({\n\t\t\ttype: 'form',\n\t\t\turl,\n\t\t\tkeepfocus: options.keepfocus,\n\t\t\tnoscroll: options.noscroll,\n\t\t\treplace_state: options.replace_state ?? url.href === location.href,\n\t\t\tevent\n\t\t});\n\t});\n\n\taddEventListener('popstate', async (event) => {\n\t\tif (resetting_focus) return;\n\n\t\tif (event.state?.[HISTORY_INDEX]) {\n\t\t\tconst history_index = event.state[HISTORY_INDEX];\n\t\t\ttoken = {};\n\n\t\t\t// if a popstate-driven navigation is cancelled, we need to counteract it\n\t\t\t// with history.go, which means we end up back here, hence this check\n\t\t\tif (history_index === current_history_index) return;\n\n\t\t\tconst scroll = scroll_positions[history_index];\n\t\t\tconst state = event.state[STATES_KEY] ?? {};\n\t\t\tconst url = new URL(event.state[PAGE_URL_KEY] ?? location.href);\n\t\t\tconst navigation_index = event.state[NAVIGATION_INDEX];\n\t\t\tconst is_hash_change = current.url ? strip_hash(location) === strip_hash(current.url) : false;\n\t\t\tconst shallow =\n\t\t\t\tnavigation_index === current_navigation_index && (has_navigated || is_hash_change);\n\n\t\t\tif (shallow) {\n\t\t\t\t// We don't need to navigate, we just need to update scroll and/or state.\n\t\t\t\t// This happens with hash links and `pushState`/`replaceState`. The\n\t\t\t\t// exception is if we haven't navigated yet, since we could have\n\t\t\t\t// got here after a modal navigation then a reload\n\t\t\t\tif (state !== page.state) {\n\t\t\t\t\tpage.state = state;\n\t\t\t\t}\n\n\t\t\t\tupdate_url(url);\n\n\t\t\t\tscroll_positions[current_history_index] = scroll_state();\n\t\t\t\tif (scroll) scrollTo(scroll.x, scroll.y);\n\n\t\t\t\tcurrent_history_index = history_index;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst delta = history_index - current_history_index;\n\n\t\t\tawait navigate({\n\t\t\t\ttype: 'popstate',\n\t\t\t\turl,\n\t\t\t\tpopped: {\n\t\t\t\t\tstate,\n\t\t\t\t\tscroll,\n\t\t\t\t\tdelta\n\t\t\t\t},\n\t\t\t\taccept: () => {\n\t\t\t\t\tcurrent_history_index = history_index;\n\t\t\t\t\tcurrent_navigation_index = navigation_index;\n\t\t\t\t},\n\t\t\t\tblock: () => {\n\t\t\t\t\thistory.go(-delta);\n\t\t\t\t},\n\t\t\t\tnav_token: token,\n\t\t\t\tevent\n\t\t\t});\n\t\t} else {\n\t\t\t// since popstate event is also emitted when an anchor referencing the same\n\t\t\t// document is clicked, we have to check that the router isn't already handling\n\t\t\t// the navigation. otherwise we would be updating the page store twice.\n\t\t\tif (!hash_navigating) {\n\t\t\t\tconst url = new URL(location.href);\n\t\t\t\tupdate_url(url);\n\n\t\t\t\t// if the user edits the hash via the browser URL bar, trigger a full-page\n\t\t\t\t// reload to align with pathname router behavior\n\t\t\t\tif (app.hash) {\n\t\t\t\t\tlocation.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\taddEventListener('hashchange', () => {\n\t\t// if the hashchange happened as a result of clicking on a link,\n\t\t// we need to update history, otherwise we have to leave it alone\n\t\tif (hash_navigating) {\n\t\t\thash_navigating = false;\n\t\t\thistory.replaceState(\n\t\t\t\t{\n\t\t\t\t\t...history.state,\n\t\t\t\t\t[HISTORY_INDEX]: ++current_history_index,\n\t\t\t\t\t[NAVIGATION_INDEX]: current_navigation_index\n\t\t\t\t},\n\t\t\t\t'',\n\t\t\t\tlocation.href\n\t\t\t);\n\t\t}\n\t});\n\n\t// fix link[rel=icon], because browsers will occasionally try to load relative\n\t// URLs after a pushState/replaceState, resulting in a 404 — see\n\t// https://github.com/sveltejs/kit/issues/3748#issuecomment-1125980897\n\tfor (const link of document.querySelectorAll('link')) {\n\t\tif (ICON_REL_ATTRIBUTES.has(link.rel)) {\n\t\t\tlink.href = link.href; // eslint-disable-line\n\t\t}\n\t}\n\n\taddEventListener('pageshow', (event) => {\n\t\t// If the user navigates to another site and then uses the back button and\n\t\t// bfcache hits, we need to set navigating to null, the site doesn't know\n\t\t// the navigation away from it was successful.\n\t\t// Info about bfcache here: https://web.dev/bfcache\n\t\tif (event.persisted) {\n\t\t\tstores.navigating.set((navigating.current = null));\n\t\t}\n\t});\n\n\t/**\n\t * @param {URL} url\n\t */\n\tfunction update_url(url) {\n\t\tcurrent.url = page.url = url;\n\t\tstores.page.set(clone_page(page));\n\t\tstores.page.notify();\n\t}\n}\n\n/**\n * @param {HTMLElement} target\n * @param {import('./types.js').HydrateOptions} opts\n */\nasync function _hydrate(\n\ttarget,\n\t{ status = 200, error, node_ids, params, route, server_route, data: server_data_nodes, form }\n) {\n\thydrated = true;\n\n\tconst url = new URL(location.href);\n\n\t/** @type {import('types').CSRRoute | undefined} */\n\tlet parsed_route;\n\n\tif (__SVELTEKIT_CLIENT_ROUTING__) {\n\t\tif (!__SVELTEKIT_EMBEDDED__) {\n\t\t\t// See https://github.com/sveltejs/kit/pull/4935#issuecomment-1328093358 for one motivation\n\t\t\t// of determining the params on the client side.\n\t\t\t({ params = {}, route = { id: null } } = (await get_navigation_intent(url, false)) || {});\n\t\t}\n\n\t\tparsed_route = routes.find(({ id }) => id === route.id);\n\t} else {\n\t\t// undefined in case of 404\n\t\tif (server_route) {\n\t\t\tparsed_route = route = parse_server_route(server_route, app.nodes);\n\t\t} else {\n\t\t\troute = { id: null };\n\t\t\tparams = {};\n\t\t}\n\t}\n\n\t/** @type {import('./types.js').NavigationFinished | undefined} */\n\tlet result;\n\tlet hydrate = true;\n\n\ttry {\n\t\tconst branch_promises = node_ids.map(async (n, i) => {\n\t\t\tconst server_data_node = server_data_nodes[i];\n\t\t\t// Type isn't completely accurate, we still need to deserialize uses\n\t\t\tif (server_data_node?.uses) {\n\t\t\t\tserver_data_node.uses = deserialize_uses(server_data_node.uses);\n\t\t\t}\n\n\t\t\treturn load_node({\n\t\t\t\tloader: app.nodes[n],\n\t\t\t\turl,\n\t\t\t\tparams,\n\t\t\t\troute,\n\t\t\t\tparent: async () => {\n\t\t\t\t\tconst data = {};\n\t\t\t\t\tfor (let j = 0; j < i; j += 1) {\n\t\t\t\t\t\tObject.assign(data, (await branch_promises[j]).data);\n\t\t\t\t\t}\n\t\t\t\t\treturn data;\n\t\t\t\t},\n\t\t\t\tserver_data_node: create_data_node(server_data_node)\n\t\t\t});\n\t\t});\n\n\t\t/** @type {Array<import('./types.js').BranchNode | undefined>} */\n\t\tconst branch = await Promise.all(branch_promises);\n\n\t\t// server-side will have compacted the branch, reinstate empty slots\n\t\t// so that error boundaries can be lined up correctly\n\t\tif (parsed_route) {\n\t\t\tconst layouts = parsed_route.layouts;\n\t\t\tfor (let i = 0; i < layouts.length; i++) {\n\t\t\t\tif (!layouts[i]) {\n\t\t\t\t\tbranch.splice(i, 0, undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tresult = await get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch,\n\t\t\tstatus,\n\t\t\terror,\n\t\t\terrors: parsed_route?.errors, // TODO load earlier?\n\t\t\tform,\n\t\t\troute: parsed_route ?? null\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof Redirect) {\n\t\t\t// this is a real edge case — `load` would need to return\n\t\t\t// a redirect but only in the browser\n\t\t\tawait native_navigation(new URL(error.location, location.href));\n\t\t\treturn;\n\t\t}\n\n\t\tresult = await load_root_error_page({\n\t\t\tstatus: get_status(error),\n\t\t\terror: await handle_error(error, { url, params, route }),\n\t\t\turl,\n\t\t\troute\n\t\t});\n\n\t\ttarget.textContent = '';\n\t\thydrate = false;\n\t}\n\n\tif (result.props.page) {\n\t\tresult.props.page.state = {};\n\t}\n\n\tawait initialize(result, target, hydrate);\n}\n\n/**\n * @param {URL} url\n * @param {boolean[]} invalid\n * @returns {Promise<import('types').ServerNodesResponse | import('types').ServerRedirectNode>}\n */\nasync function load_data(url, invalid) {\n\tconst data_url = new URL(url);\n\tdata_url.pathname = add_data_suffix(url.pathname);\n\tif (url.pathname.endsWith('/')) {\n\t\tdata_url.searchParams.append(TRAILING_SLASH_PARAM, '1');\n\t}\n\tif (DEV && url.searchParams.has(INVALIDATED_PARAM)) {\n\t\tthrow new Error(`Cannot used reserved query parameter \"${INVALIDATED_PARAM}\"`);\n\t}\n\tdata_url.searchParams.append(INVALIDATED_PARAM, invalid.map((i) => (i ? '1' : '0')).join(''));\n\n\t// use window.fetch directly to allow using a 3rd party-patched fetch implementation\n\tconst fetcher = DEV ? dev_fetch : window.fetch;\n\tconst res = await fetcher(data_url.href, {});\n\n\tif (!res.ok) {\n\t\t// error message is a JSON-stringified string which devalue can't handle at the top level\n\t\t// turn it into a HttpError to not call handleError on the client again (was already handled on the server)\n\t\t// if `__data.json` doesn't exist or the server has an internal error,\n\t\t// avoid parsing the HTML error page as a JSON\n\t\t/** @type {string | undefined} */\n\t\tlet message;\n\t\tif (res.headers.get('content-type')?.includes('application/json')) {\n\t\t\tmessage = await res.json();\n\t\t} else if (res.status === 404) {\n\t\t\tmessage = 'Not Found';\n\t\t} else if (res.status === 500) {\n\t\t\tmessage = 'Internal Error';\n\t\t}\n\t\tthrow new HttpError(res.status, message);\n\t}\n\n\t// TODO: fix eslint error / figure out if it actually applies to our situation\n\t// eslint-disable-next-line\n\treturn new Promise(async (resolve) => {\n\t\t/**\n\t\t * Map of deferred promises that will be resolved by a subsequent chunk of data\n\t\t * @type {Map<string, import('types').Deferred>}\n\t\t */\n\t\tconst deferreds = new Map();\n\t\tconst reader = /** @type {ReadableStream<Uint8Array>} */ (res.body).getReader();\n\n\t\t/**\n\t\t * @param {any} data\n\t\t */\n\t\tfunction deserialize(data) {\n\t\t\treturn devalue.unflatten(data, {\n\t\t\t\t...app.decoders,\n\t\t\t\tPromise: (id) => {\n\t\t\t\t\treturn new Promise((fulfil, reject) => {\n\t\t\t\t\t\tdeferreds.set(id, { fulfil, reject });\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet text = '';\n\n\t\twhile (true) {\n\t\t\t// Format follows ndjson (each line is a JSON object) or regular JSON spec\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done && !text) break;\n\n\t\t\ttext += !value && text ? '\\n' : text_decoder.decode(value, { stream: true }); // no value -> final chunk -> add a new line to trigger the last parse\n\n\t\t\twhile (true) {\n\t\t\t\tconst split = text.indexOf('\\n');\n\t\t\t\tif (split === -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst node = JSON.parse(text.slice(0, split));\n\t\t\t\ttext = text.slice(split + 1);\n\n\t\t\t\tif (node.type === 'redirect') {\n\t\t\t\t\treturn resolve(node);\n\t\t\t\t}\n\n\t\t\t\tif (node.type === 'data') {\n\t\t\t\t\t// This is the first (and possibly only, if no pending promises) chunk\n\t\t\t\t\tnode.nodes?.forEach((/** @type {any} */ node) => {\n\t\t\t\t\t\tif (node?.type === 'data') {\n\t\t\t\t\t\t\tnode.uses = deserialize_uses(node.uses);\n\t\t\t\t\t\t\tnode.data = deserialize(node.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tresolve(node);\n\t\t\t\t} else if (node.type === 'chunk') {\n\t\t\t\t\t// This is a subsequent chunk containing deferred data\n\t\t\t\t\tconst { id, data, error } = node;\n\t\t\t\t\tconst deferred = /** @type {import('types').Deferred} */ (deferreds.get(id));\n\t\t\t\t\tdeferreds.delete(id);\n\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tdeferred.reject(deserialize(error));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.fulfil(deserialize(data));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// TODO edge case handling necessary? stream() read fails?\n}\n\n/**\n * @param {any} uses\n * @return {import('types').Uses}\n */\nfunction deserialize_uses(uses) {\n\treturn {\n\t\tdependencies: new Set(uses?.dependencies ?? []),\n\t\tparams: new Set(uses?.params ?? []),\n\t\tparent: !!uses?.parent,\n\t\troute: !!uses?.route,\n\t\turl: !!uses?.url,\n\t\tsearch_params: new Set(uses?.search_params ?? [])\n\t};\n}\n\n/**\n * This flag is used to avoid client-side navigation when we're only using\n * `location.replace()` to set focus.\n */\nlet resetting_focus = false;\n\n/**\n * @param {URL} url\n * @param {boolean} [scroll]\n */\nfunction reset_focus(url, scroll = true) {\n\tconst autofocus = document.querySelector('[autofocus]');\n\tif (autofocus) {\n\t\t// @ts-ignore\n\t\tautofocus.focus();\n\t} else {\n\t\t// Reset page selection and focus\n\n\t\t// Mimic the browsers' behaviour and set the sequential focus navigation\n\t\t// starting point to the fragment identifier.\n\t\tconst id = get_id(url);\n\t\tif (id && document.getElementById(id)) {\n\t\t\tconst { x, y } = scroll_state();\n\n\t\t\t// `element.focus()` doesn't work on Safari and Firefox Ubuntu so we need\n\t\t\t// to use this hack with `location.replace()` instead.\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst history_state = history.state;\n\n\t\t\t\tresetting_focus = true;\n\t\t\t\tlocation.replace(new URL(`#${id}`, location.href));\n\n\t\t\t\t// Firefox has a bug that sets the history state to `null` so we need to\n\t\t\t\t// restore it after. See https://bugzilla.mozilla.org/show_bug.cgi?id=1199924\n\t\t\t\t// This is also needed to restore the original hash if we're using hash routing\n\t\t\t\thistory.replaceState(history_state, '', url);\n\n\t\t\t\t// If scroll management has already happened earlier, we need to restore\n\t\t\t\t// the scroll position after setting the sequential focus navigation starting point\n\t\t\t\tif (scroll) scrollTo(x, y);\n\t\t\t\tresetting_focus = false;\n\t\t\t});\n\t\t} else {\n\t\t\t// If the ID doesn't exist, we try to mimic browsers' behaviour as closely\n\t\t\t// as possible by targeting the first scrollable region. Unfortunately, it's\n\t\t\t// not a perfect match — e.g. shift-tabbing won't immediately cycle up from\n\t\t\t// the end of the page on Chromium\n\t\t\t// See https://html.spec.whatwg.org/multipage/interaction.html#get-the-focusable-area\n\t\t\tconst root = document.body;\n\t\t\tconst tabindex = root.getAttribute('tabindex');\n\n\t\t\troot.tabIndex = -1;\n\t\t\t// @ts-expect-error options.focusVisible is only supported in Firefox\n\t\t\t// See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#browser_compatibility\n\t\t\troot.focus({ preventScroll: true, focusVisible: false });\n\n\t\t\t// restore `tabindex` as to prevent `root` from stealing input from elements\n\t\t\tif (tabindex !== null) {\n\t\t\t\troot.setAttribute('tabindex', tabindex);\n\t\t\t} else {\n\t\t\t\troot.removeAttribute('tabindex');\n\t\t\t}\n\t\t}\n\n\t\t// capture current selection, so we can compare the state after\n\t\t// snapshot restoration and afterNavigate callbacks have run\n\t\tconst selection = getSelection();\n\n\t\tif (selection && selection.type !== 'None') {\n\t\t\t/** @type {Range[]} */\n\t\t\tconst ranges = [];\n\n\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) {\n\t\t\t\tranges.push(selection.getRangeAt(i));\n\t\t\t}\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (selection.rangeCount !== ranges.length) return;\n\n\t\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) {\n\t\t\t\t\tconst a = ranges[i];\n\t\t\t\t\tconst b = selection.getRangeAt(i);\n\n\t\t\t\t\t// we need to do a deep comparison rather than just `a !== b` because\n\t\t\t\t\t// Safari behaves differently to other browsers\n\t\t\t\t\tif (\n\t\t\t\t\t\ta.commonAncestorContainer !== b.commonAncestorContainer ||\n\t\t\t\t\t\ta.startContainer !== b.startContainer ||\n\t\t\t\t\t\ta.endContainer !== b.endContainer ||\n\t\t\t\t\t\ta.startOffset !== b.startOffset ||\n\t\t\t\t\t\ta.endOffset !== b.endOffset\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if the selection hasn't changed (as a result of an element being (auto)focused,\n\t\t\t\t// or a programmatic selection, we reset everything as part of the navigation)\n\t\t\t\t// fixes https://github.com/sveltejs/kit/issues/8439\n\t\t\t\tselection.removeAllRanges();\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @template {import('@sveltejs/kit').NavigationType} T\n * @param {import('./types.js').NavigationState} current\n * @param {import('./types.js').NavigationIntent | undefined} intent\n * @param {URL | null} url\n * @param {T} type\n * @param {{ x: number, y: number } | null} [target_scroll] The scroll position for the target (for popstate navigations)\n */\nfunction create_navigation(current, intent, url, type, target_scroll = null) {\n\t/** @type {(value: any) => void} */\n\tlet fulfil;\n\n\t/** @type {(error: any) => void} */\n\tlet reject;\n\n\tconst complete = new Promise((f, r) => {\n\t\tfulfil = f;\n\t\treject = r;\n\t});\n\n\t// Handle any errors off-chain so that it doesn't show up as an unhandled rejection\n\tcomplete.catch(() => {});\n\n\t/** @type {(import('@sveltejs/kit').Navigation | import('@sveltejs/kit').AfterNavigate) & { type: T }} */\n\tconst navigation = /** @type {any} */ ({\n\t\tfrom: {\n\t\t\tparams: current.params,\n\t\t\troute: { id: current.route?.id ?? null },\n\t\t\turl: current.url,\n\t\t\tscroll: scroll_state()\n\t\t},\n\t\tto: url && {\n\t\t\tparams: intent?.params ?? null,\n\t\t\troute: { id: intent?.route?.id ?? null },\n\t\t\turl,\n\t\t\tscroll: target_scroll\n\t\t},\n\t\twillUnload: !intent,\n\t\ttype,\n\t\tcomplete\n\t});\n\n\treturn {\n\t\tnavigation,\n\t\t// @ts-expect-error\n\t\tfulfil,\n\t\t// @ts-expect-error\n\t\treject\n\t};\n}\n\n/**\n * TODO: remove this in 3.0 when the page store is also removed\n *\n * We need to assign a new page object so that subscribers are correctly notified.\n * However, spreading `{ ...page }` returns an empty object so we manually\n * assign to each property instead.\n *\n * @param {import('@sveltejs/kit').Page} page\n */\nfunction clone_page(page) {\n\treturn {\n\t\tdata: page.data,\n\t\terror: page.error,\n\t\tform: page.form,\n\t\tparams: page.params,\n\t\troute: page.route,\n\t\tstate: page.state,\n\t\tstatus: page.status,\n\t\turl: page.url\n\t};\n}\n\n/**\n * @param {URL} url\n * @returns {URL}\n */\nfunction decode_hash(url) {\n\tconst new_url = new URL(url);\n\t// Safari, for some reason, does change # to %23, when entered through the address bar\n\tnew_url.hash = decodeURIComponent(url.hash);\n\treturn new_url;\n}\n\n/**\n * @param {URL} url\n * @returns {string}\n */\nfunction get_id(url) {\n\tlet id;\n\n\tif (app.hash) {\n\t\tconst [, , second] = url.hash.split('#', 3);\n\t\tid = second ?? '';\n\t} else {\n\t\tid = url.hash.slice(1);\n\t}\n\n\treturn decodeURIComponent(id);\n}\n\nif (DEV) {\n\t// Nasty hack to silence harmless warnings the user can do nothing about\n\tconst console_warn = console.warn;\n\tconsole.warn = function warn(...args) {\n\t\tif (\n\t\t\targs.length === 1 &&\n\t\t\t/<(Layout|Page|Error)(_[\\w$]+)?> was created (with unknown|without expected) prop '(data|form)'/.test(\n\t\t\t\targs[0]\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconsole_warn(...args);\n\t};\n\n\tif (import.meta.hot) {\n\t\timport.meta.hot.on('vite:beforeUpdate', () => {\n\t\t\tif (errored) {\n\t\t\t\tlocation.reload();\n\t\t\t}\n\t\t});\n\t}\n}\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n * @type {string}\n */\nexport const VERSION = '5.55.0';\nexport const PUBLIC_VERSION = '5';\n","import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined') {\n\t// @ts-expect-error\n\t((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);\n}\n","import {\n\tpage as _page,\n\tnavigating as _navigating,\n\tupdated as _updated\n} from '../../client/state.svelte.js';\nimport { stores } from '../../client/client.js';\n\nexport const page = {\n\tget data() {\n\t\treturn _page.data;\n\t},\n\tget error() {\n\t\treturn _page.error;\n\t},\n\tget form() {\n\t\treturn _page.form;\n\t},\n\tget params() {\n\t\treturn _page.params;\n\t},\n\tget route() {\n\t\treturn _page.route;\n\t},\n\tget state() {\n\t\treturn _page.state;\n\t},\n\tget status() {\n\t\treturn _page.status;\n\t},\n\tget url() {\n\t\treturn _page.url;\n\t}\n};\n\nexport const navigating = {\n\tget from() {\n\t\treturn _navigating.current ? _navigating.current.from : null;\n\t},\n\tget to() {\n\t\treturn _navigating.current ? _navigating.current.to : null;\n\t},\n\tget type() {\n\t\treturn _navigating.current ? _navigating.current.type : null;\n\t},\n\tget willUnload() {\n\t\treturn _navigating.current ? _navigating.current.willUnload : null;\n\t},\n\tget delta() {\n\t\treturn _navigating.current ? _navigating.current.delta : null;\n\t},\n\tget complete() {\n\t\treturn _navigating.current ? _navigating.current.complete : null;\n\t}\n};\n\nObject.defineProperty(navigating, 'current', {\n\tget() {\n\t\t// between 2.12.0 and 2.12.1 `navigating.current` existed\n\t\tthrow new Error('Replace navigating.current.<prop> with navigating.<prop>');\n\t}\n});\n\nexport const updated = {\n\tget current() {\n\t\treturn _updated.current;\n\t},\n\tcheck: stores.updated.check\n};\n","import {\n\tpage as client_page,\n\tnavigating as client_navigating,\n\tupdated as client_updated\n} from './client.js';\nimport {\n\tpage as server_page,\n\tnavigating as server_navigating,\n\tupdated as server_updated\n} from './server.js';\nimport { BROWSER } from 'esm-env';\n\n/**\n * A read-only reactive object with information about the current page, serving several use cases:\n * - retrieving the combined `data` of all pages/layouts anywhere in your component tree (also see [loading data](https://svelte.dev/docs/kit/load))\n * - retrieving the current value of the `form` prop anywhere in your component tree (also see [form actions](https://svelte.dev/docs/kit/form-actions))\n * - retrieving the page state that was set through `goto`, `pushState` or `replaceState` (also see [goto](https://svelte.dev/docs/kit/$app-navigation#goto) and [shallow routing](https://svelte.dev/docs/kit/shallow-routing))\n * - retrieving metadata such as the URL you're on, the current route and its parameters, and whether or not there was an error\n *\n * ```svelte\n * <!--- file: +layout.svelte --->\n * <script>\n * \timport { page } from '$app/state';\n * </script>\n *\n * <p>Currently at {page.url.pathname}</p>\n *\n * {#if page.error}\n * \t<span class=\"red\">Problem detected</span>\n * {:else}\n * \t<span class=\"small\">All systems operational</span>\n * {/if}\n * ```\n *\n * Changes to `page` are available exclusively with runes. (The legacy reactivity syntax will not reflect any changes)\n *\n * ```svelte\n * <!--- file: +page.svelte --->\n * <script>\n * \timport { page } from '$app/state';\n * \tconst id = $derived(page.params.id); // This will correctly update id for usage on this page\n * \t$: badId = page.params.id; // Do not use; will never update after initial load\n * </script>\n * ```\n *\n * On the server, values can only be read during rendering (in other words _not_ in e.g. `load` functions). In the browser, the values can be read at any time.\n *\n * @type {import('@sveltejs/kit').Page}\n */\nexport const page = BROWSER ? client_page : server_page;\n\n/**\n * A read-only object representing an in-progress navigation, with `from`, `to`, `type` and (if `type === 'popstate'`) `delta` properties.\n * Values are `null` when no navigation is occurring, or during server rendering.\n * @type {import('@sveltejs/kit').Navigation | { from: null, to: null, type: null, willUnload: null, delta: null, complete: null }}\n */\n// @ts-expect-error\nexport const navigating = BROWSER ? client_navigating : server_navigating;\n\n/**\n * A read-only reactive value that's initially `false`. If [`version.pollInterval`](https://svelte.dev/docs/kit/configuration#version) is a non-zero value, SvelteKit will poll for new versions of the app and update `current` to `true` when it detects one. `updated.check()` will force an immediate check, regardless of polling.\n * @type {{ get current(): boolean; check(): Promise<boolean>; }}\n */\nexport const updated = BROWSER ? client_updated : server_updated;\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","// src/errors/IcebergError.ts\nvar IcebergError = class extends Error {\n  constructor(message, opts) {\n    super(message);\n    this.name = \"IcebergError\";\n    this.status = opts.status;\n    this.icebergType = opts.icebergType;\n    this.icebergCode = opts.icebergCode;\n    this.details = opts.details;\n    this.isCommitStateUnknown = opts.icebergType === \"CommitStateUnknownException\" || [500, 502, 504].includes(opts.status) && opts.icebergType?.includes(\"CommitState\") === true;\n  }\n  /**\n   * Returns true if the error is a 404 Not Found error.\n   */\n  isNotFound() {\n    return this.status === 404;\n  }\n  /**\n   * Returns true if the error is a 409 Conflict error.\n   */\n  isConflict() {\n    return this.status === 409;\n  }\n  /**\n   * Returns true if the error is a 419 Authentication Timeout error.\n   */\n  isAuthenticationTimeout() {\n    return this.status === 419;\n  }\n};\n\n// src/utils/url.ts\nfunction buildUrl(baseUrl, path, query) {\n  const url = new URL(path, baseUrl);\n  if (query) {\n    for (const [key, value] of Object.entries(query)) {\n      if (value !== void 0) {\n        url.searchParams.set(key, value);\n      }\n    }\n  }\n  return url.toString();\n}\n\n// src/http/createFetchClient.ts\nasync function buildAuthHeaders(auth) {\n  if (!auth || auth.type === \"none\") {\n    return {};\n  }\n  if (auth.type === \"bearer\") {\n    return { Authorization: `Bearer ${auth.token}` };\n  }\n  if (auth.type === \"header\") {\n    return { [auth.name]: auth.value };\n  }\n  if (auth.type === \"custom\") {\n    return await auth.getHeaders();\n  }\n  return {};\n}\nfunction createFetchClient(options) {\n  const fetchFn = options.fetchImpl ?? globalThis.fetch;\n  return {\n    async request({\n      method,\n      path,\n      query,\n      body,\n      headers\n    }) {\n      const url = buildUrl(options.baseUrl, path, query);\n      const authHeaders = await buildAuthHeaders(options.auth);\n      const res = await fetchFn(url, {\n        method,\n        headers: {\n          ...body ? { \"Content-Type\": \"application/json\" } : {},\n          ...authHeaders,\n          ...headers\n        },\n        body: body ? JSON.stringify(body) : void 0\n      });\n      const text = await res.text();\n      const isJson = (res.headers.get(\"content-type\") || \"\").includes(\"application/json\");\n      const data = isJson && text ? JSON.parse(text) : text;\n      if (!res.ok) {\n        const errBody = isJson ? data : void 0;\n        const errorDetail = errBody?.error;\n        throw new IcebergError(\n          errorDetail?.message ?? `Request failed with status ${res.status}`,\n          {\n            status: res.status,\n            icebergType: errorDetail?.type,\n            icebergCode: errorDetail?.code,\n            details: errBody\n          }\n        );\n      }\n      return { status: res.status, headers: res.headers, data };\n    }\n  };\n}\n\n// src/catalog/namespaces.ts\nfunction namespaceToPath(namespace) {\n  return namespace.join(\"\u001f\");\n}\nvar NamespaceOperations = class {\n  constructor(client, prefix = \"\") {\n    this.client = client;\n    this.prefix = prefix;\n  }\n  async listNamespaces(parent) {\n    const query = parent ? { parent: namespaceToPath(parent.namespace) } : void 0;\n    const response = await this.client.request({\n      method: \"GET\",\n      path: `${this.prefix}/namespaces`,\n      query\n    });\n    return response.data.namespaces.map((ns) => ({ namespace: ns }));\n  }\n  async createNamespace(id, metadata) {\n    const request = {\n      namespace: id.namespace,\n      properties: metadata?.properties\n    };\n    const response = await this.client.request({\n      method: \"POST\",\n      path: `${this.prefix}/namespaces`,\n      body: request\n    });\n    return response.data;\n  }\n  async dropNamespace(id) {\n    await this.client.request({\n      method: \"DELETE\",\n      path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`\n    });\n  }\n  async loadNamespaceMetadata(id) {\n    const response = await this.client.request({\n      method: \"GET\",\n      path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`\n    });\n    return {\n      properties: response.data.properties\n    };\n  }\n  async namespaceExists(id) {\n    try {\n      await this.client.request({\n        method: \"HEAD\",\n        path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`\n      });\n      return true;\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 404) {\n        return false;\n      }\n      throw error;\n    }\n  }\n  async createNamespaceIfNotExists(id, metadata) {\n    try {\n      return await this.createNamespace(id, metadata);\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 409) {\n        return;\n      }\n      throw error;\n    }\n  }\n};\n\n// src/catalog/tables.ts\nfunction namespaceToPath2(namespace) {\n  return namespace.join(\"\u001f\");\n}\nvar TableOperations = class {\n  constructor(client, prefix = \"\", accessDelegation) {\n    this.client = client;\n    this.prefix = prefix;\n    this.accessDelegation = accessDelegation;\n  }\n  async listTables(namespace) {\n    const response = await this.client.request({\n      method: \"GET\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(namespace.namespace)}/tables`\n    });\n    return response.data.identifiers;\n  }\n  async createTable(namespace, request) {\n    const headers = {};\n    if (this.accessDelegation) {\n      headers[\"X-Iceberg-Access-Delegation\"] = this.accessDelegation;\n    }\n    const response = await this.client.request({\n      method: \"POST\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(namespace.namespace)}/tables`,\n      body: request,\n      headers\n    });\n    return response.data.metadata;\n  }\n  async updateTable(id, request) {\n    const response = await this.client.request({\n      method: \"POST\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n      body: request\n    });\n    return {\n      \"metadata-location\": response.data[\"metadata-location\"],\n      metadata: response.data.metadata\n    };\n  }\n  async dropTable(id, options) {\n    await this.client.request({\n      method: \"DELETE\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n      query: { purgeRequested: String(options?.purge ?? false) }\n    });\n  }\n  async loadTable(id) {\n    const headers = {};\n    if (this.accessDelegation) {\n      headers[\"X-Iceberg-Access-Delegation\"] = this.accessDelegation;\n    }\n    const response = await this.client.request({\n      method: \"GET\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n      headers\n    });\n    return response.data.metadata;\n  }\n  async tableExists(id) {\n    const headers = {};\n    if (this.accessDelegation) {\n      headers[\"X-Iceberg-Access-Delegation\"] = this.accessDelegation;\n    }\n    try {\n      await this.client.request({\n        method: \"HEAD\",\n        path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n        headers\n      });\n      return true;\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 404) {\n        return false;\n      }\n      throw error;\n    }\n  }\n  async createTableIfNotExists(namespace, request) {\n    try {\n      return await this.createTable(namespace, request);\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 409) {\n        return await this.loadTable({ namespace: namespace.namespace, name: request.name });\n      }\n      throw error;\n    }\n  }\n};\n\n// src/catalog/IcebergRestCatalog.ts\nvar IcebergRestCatalog = class {\n  /**\n   * Creates a new Iceberg REST Catalog client.\n   *\n   * @param options - Configuration options for the catalog client\n   */\n  constructor(options) {\n    let prefix = \"v1\";\n    if (options.catalogName) {\n      prefix += `/${options.catalogName}`;\n    }\n    const baseUrl = options.baseUrl.endsWith(\"/\") ? options.baseUrl : `${options.baseUrl}/`;\n    this.client = createFetchClient({\n      baseUrl,\n      auth: options.auth,\n      fetchImpl: options.fetch\n    });\n    this.accessDelegation = options.accessDelegation?.join(\",\");\n    this.namespaceOps = new NamespaceOperations(this.client, prefix);\n    this.tableOps = new TableOperations(this.client, prefix, this.accessDelegation);\n  }\n  /**\n   * Lists all namespaces in the catalog.\n   *\n   * @param parent - Optional parent namespace to list children under\n   * @returns Array of namespace identifiers\n   *\n   * @example\n   * ```typescript\n   * // List all top-level namespaces\n   * const namespaces = await catalog.listNamespaces();\n   *\n   * // List namespaces under a parent\n   * const children = await catalog.listNamespaces({ namespace: ['analytics'] });\n   * ```\n   */\n  async listNamespaces(parent) {\n    return this.namespaceOps.listNamespaces(parent);\n  }\n  /**\n   * Creates a new namespace in the catalog.\n   *\n   * @param id - Namespace identifier to create\n   * @param metadata - Optional metadata properties for the namespace\n   * @returns Response containing the created namespace and its properties\n   *\n   * @example\n   * ```typescript\n   * const response = await catalog.createNamespace(\n   *   { namespace: ['analytics'] },\n   *   { properties: { owner: 'data-team' } }\n   * );\n   * console.log(response.namespace); // ['analytics']\n   * console.log(response.properties); // { owner: 'data-team', ... }\n   * ```\n   */\n  async createNamespace(id, metadata) {\n    return this.namespaceOps.createNamespace(id, metadata);\n  }\n  /**\n   * Drops a namespace from the catalog.\n   *\n   * The namespace must be empty (contain no tables) before it can be dropped.\n   *\n   * @param id - Namespace identifier to drop\n   *\n   * @example\n   * ```typescript\n   * await catalog.dropNamespace({ namespace: ['analytics'] });\n   * ```\n   */\n  async dropNamespace(id) {\n    await this.namespaceOps.dropNamespace(id);\n  }\n  /**\n   * Loads metadata for a namespace.\n   *\n   * @param id - Namespace identifier to load\n   * @returns Namespace metadata including properties\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.loadNamespaceMetadata({ namespace: ['analytics'] });\n   * console.log(metadata.properties);\n   * ```\n   */\n  async loadNamespaceMetadata(id) {\n    return this.namespaceOps.loadNamespaceMetadata(id);\n  }\n  /**\n   * Lists all tables in a namespace.\n   *\n   * @param namespace - Namespace identifier to list tables from\n   * @returns Array of table identifiers\n   *\n   * @example\n   * ```typescript\n   * const tables = await catalog.listTables({ namespace: ['analytics'] });\n   * console.log(tables); // [{ namespace: ['analytics'], name: 'events' }, ...]\n   * ```\n   */\n  async listTables(namespace) {\n    return this.tableOps.listTables(namespace);\n  }\n  /**\n   * Creates a new table in the catalog.\n   *\n   * @param namespace - Namespace to create the table in\n   * @param request - Table creation request including name, schema, partition spec, etc.\n   * @returns Table metadata for the created table\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.createTable(\n   *   { namespace: ['analytics'] },\n   *   {\n   *     name: 'events',\n   *     schema: {\n   *       type: 'struct',\n   *       fields: [\n   *         { id: 1, name: 'id', type: 'long', required: true },\n   *         { id: 2, name: 'timestamp', type: 'timestamp', required: true }\n   *       ],\n   *       'schema-id': 0\n   *     },\n   *     'partition-spec': {\n   *       'spec-id': 0,\n   *       fields: [\n   *         { source_id: 2, field_id: 1000, name: 'ts_day', transform: 'day' }\n   *       ]\n   *     }\n   *   }\n   * );\n   * ```\n   */\n  async createTable(namespace, request) {\n    return this.tableOps.createTable(namespace, request);\n  }\n  /**\n   * Updates an existing table's metadata.\n   *\n   * Can update the schema, partition spec, or properties of a table.\n   *\n   * @param id - Table identifier to update\n   * @param request - Update request with fields to modify\n   * @returns Response containing the metadata location and updated table metadata\n   *\n   * @example\n   * ```typescript\n   * const response = await catalog.updateTable(\n   *   { namespace: ['analytics'], name: 'events' },\n   *   {\n   *     properties: { 'read.split.target-size': '134217728' }\n   *   }\n   * );\n   * console.log(response['metadata-location']); // s3://...\n   * console.log(response.metadata); // TableMetadata object\n   * ```\n   */\n  async updateTable(id, request) {\n    return this.tableOps.updateTable(id, request);\n  }\n  /**\n   * Drops a table from the catalog.\n   *\n   * @param id - Table identifier to drop\n   *\n   * @example\n   * ```typescript\n   * await catalog.dropTable({ namespace: ['analytics'], name: 'events' });\n   * ```\n   */\n  async dropTable(id, options) {\n    await this.tableOps.dropTable(id, options);\n  }\n  /**\n   * Loads metadata for a table.\n   *\n   * @param id - Table identifier to load\n   * @returns Table metadata including schema, partition spec, location, etc.\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.loadTable({ namespace: ['analytics'], name: 'events' });\n   * console.log(metadata.schema);\n   * console.log(metadata.location);\n   * ```\n   */\n  async loadTable(id) {\n    return this.tableOps.loadTable(id);\n  }\n  /**\n   * Checks if a namespace exists in the catalog.\n   *\n   * @param id - Namespace identifier to check\n   * @returns True if the namespace exists, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const exists = await catalog.namespaceExists({ namespace: ['analytics'] });\n   * console.log(exists); // true or false\n   * ```\n   */\n  async namespaceExists(id) {\n    return this.namespaceOps.namespaceExists(id);\n  }\n  /**\n   * Checks if a table exists in the catalog.\n   *\n   * @param id - Table identifier to check\n   * @returns True if the table exists, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const exists = await catalog.tableExists({ namespace: ['analytics'], name: 'events' });\n   * console.log(exists); // true or false\n   * ```\n   */\n  async tableExists(id) {\n    return this.tableOps.tableExists(id);\n  }\n  /**\n   * Creates a namespace if it does not exist.\n   *\n   * If the namespace already exists, returns void. If created, returns the response.\n   *\n   * @param id - Namespace identifier to create\n   * @param metadata - Optional metadata properties for the namespace\n   * @returns Response containing the created namespace and its properties, or void if it already exists\n   *\n   * @example\n   * ```typescript\n   * const response = await catalog.createNamespaceIfNotExists(\n   *   { namespace: ['analytics'] },\n   *   { properties: { owner: 'data-team' } }\n   * );\n   * if (response) {\n   *   console.log('Created:', response.namespace);\n   * } else {\n   *   console.log('Already exists');\n   * }\n   * ```\n   */\n  async createNamespaceIfNotExists(id, metadata) {\n    return this.namespaceOps.createNamespaceIfNotExists(id, metadata);\n  }\n  /**\n   * Creates a table if it does not exist.\n   *\n   * If the table already exists, returns its metadata instead.\n   *\n   * @param namespace - Namespace to create the table in\n   * @param request - Table creation request including name, schema, partition spec, etc.\n   * @returns Table metadata for the created or existing table\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.createTableIfNotExists(\n   *   { namespace: ['analytics'] },\n   *   {\n   *     name: 'events',\n   *     schema: {\n   *       type: 'struct',\n   *       fields: [\n   *         { id: 1, name: 'id', type: 'long', required: true },\n   *         { id: 2, name: 'timestamp', type: 'timestamp', required: true }\n   *       ],\n   *       'schema-id': 0\n   *     }\n   *   }\n   * );\n   * ```\n   */\n  async createTableIfNotExists(namespace, request) {\n    return this.tableOps.createTableIfNotExists(namespace, request);\n  }\n};\n\n// src/catalog/types.ts\nvar DECIMAL_REGEX = /^decimal\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/;\nvar FIXED_REGEX = /^fixed\\s*\\[\\s*(\\d+)\\s*\\]$/;\nfunction parseDecimalType(type) {\n  const match = type.match(DECIMAL_REGEX);\n  if (!match) return null;\n  return {\n    precision: parseInt(match[1], 10),\n    scale: parseInt(match[2], 10)\n  };\n}\nfunction parseFixedType(type) {\n  const match = type.match(FIXED_REGEX);\n  if (!match) return null;\n  return {\n    length: parseInt(match[1], 10)\n  };\n}\nfunction isDecimalType(type) {\n  return DECIMAL_REGEX.test(type);\n}\nfunction isFixedType(type) {\n  return FIXED_REGEX.test(type);\n}\nfunction typesEqual(a, b) {\n  const decimalA = parseDecimalType(a);\n  const decimalB = parseDecimalType(b);\n  if (decimalA && decimalB) {\n    return decimalA.precision === decimalB.precision && decimalA.scale === decimalB.scale;\n  }\n  const fixedA = parseFixedType(a);\n  const fixedB = parseFixedType(b);\n  if (fixedA && fixedB) {\n    return fixedA.length === fixedB.length;\n  }\n  return a === b;\n}\nfunction getCurrentSchema(metadata) {\n  return metadata.schemas.find((s) => s[\"schema-id\"] === metadata[\"current-schema-id\"]);\n}\n\nexport { IcebergError, IcebergRestCatalog, getCurrentSchema, isDecimalType, isFixedType, parseDecimalType, parseFixedType, typesEqual };\n//# sourceMappingURL=index.mjs.map\n//# sourceMappingURL=index.mjs.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseCookie = parseCookie;\nexports.parse = parseCookie;\nexports.stringifyCookie = stringifyCookie;\nexports.stringifySetCookie = stringifySetCookie;\nexports.serialize = stringifySetCookie;\nexports.parseSetCookie = parseSetCookie;\nexports.stringifySetCookie = stringifySetCookie;\nexports.serialize = stringifySetCookie;\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name       = token\n * token             = 1*tchar\n * tchar             = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n *                     \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n *                     \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n *\n * Note: Allowing more characters - https://github.com/jshttp/cookie/issues/191\n * Allow same range as cookie value, except `=`, which delimits end of name.\n */\nconst cookieNameRegExp = /^[\\u0021-\\u003A\\u003C\\u003E-\\u007E]+$/;\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n *                     ; US-ASCII characters excluding CTLs,\n *                     ; whitespace DQUOTE, comma, semicolon,\n *                     ; and backslash\n *\n * Allowing more characters: https://github.com/jshttp/cookie/issues/191\n * Comma, backslash, and DQUOTE are not part of the parsing algorithm.\n */\nconst cookieValueRegExp = /^[\\u0021-\\u003A\\u003C-\\u007E]*$/;\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value      = <subdomain>\n *                     ; defined in [RFC1034], Section 3.5, as\n *                     ; enhanced by [RFC1123], Section 2.1\n * <subdomain>       = <label> | <subdomain> \".\" <label>\n * <label>           = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n *                     Labels must be 63 characters or less.\n *                     'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str>         = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp>     = <let-dig> | \"-\"\n * <let-dig>         = <letter> | <digit>\n * <letter>          = any one of the 52 alphabetic characters A through Z in\n *                     upper case and a through z in lower case\n * <digit>           = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\nconst domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value        = <any CHAR except CTLs or \";\">\n * CHAR              = %x01-7F\n *                     ; defined in RFC 5234 appendix B.1\n */\nconst pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n/**\n * RegExp to match max-age-value in RFC 6265 sec 5.6.2\n */\nconst maxAgeRegExp = /^-?\\d+$/;\nconst __toString = Object.prototype.toString;\nconst NullObject = /* @__PURE__ */ (() => {\n    const C = function () { };\n    C.prototype = Object.create(null);\n    return C;\n})();\n/**\n * Parse a `Cookie` header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n */\nfunction parseCookie(str, options) {\n    const obj = new NullObject();\n    const len = str.length;\n    // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n    if (len < 2)\n        return obj;\n    const dec = options?.decode || decode;\n    let index = 0;\n    do {\n        const eqIdx = eqIndex(str, index, len);\n        if (eqIdx === -1)\n            break; // No more cookie pairs.\n        const endIdx = endIndex(str, index, len);\n        if (eqIdx > endIdx) {\n            // backtrack on prior semicolon\n            index = str.lastIndexOf(\";\", eqIdx - 1) + 1;\n            continue;\n        }\n        const key = valueSlice(str, index, eqIdx);\n        // only assign once\n        if (obj[key] === undefined) {\n            obj[key] = dec(valueSlice(str, eqIdx + 1, endIdx));\n        }\n        index = endIdx + 1;\n    } while (index < len);\n    return obj;\n}\n/**\n * Stringifies an object into an HTTP `Cookie` header.\n */\nfunction stringifyCookie(cookie, options) {\n    const enc = options?.encode || encodeURIComponent;\n    const cookieStrings = [];\n    for (const name of Object.keys(cookie)) {\n        const val = cookie[name];\n        if (val === undefined)\n            continue;\n        if (!cookieNameRegExp.test(name)) {\n            throw new TypeError(`cookie name is invalid: ${name}`);\n        }\n        const value = enc(val);\n        if (!cookieValueRegExp.test(value)) {\n            throw new TypeError(`cookie val is invalid: ${val}`);\n        }\n        cookieStrings.push(`${name}=${value}`);\n    }\n    return cookieStrings.join(\"; \");\n}\nfunction stringifySetCookie(_name, _val, _opts) {\n    const cookie = typeof _name === \"object\"\n        ? _name\n        : { ..._opts, name: _name, value: String(_val) };\n    const options = typeof _val === \"object\" ? _val : _opts;\n    const enc = options?.encode || encodeURIComponent;\n    if (!cookieNameRegExp.test(cookie.name)) {\n        throw new TypeError(`argument name is invalid: ${cookie.name}`);\n    }\n    const value = cookie.value ? enc(cookie.value) : \"\";\n    if (!cookieValueRegExp.test(value)) {\n        throw new TypeError(`argument val is invalid: ${cookie.value}`);\n    }\n    let str = cookie.name + \"=\" + value;\n    if (cookie.maxAge !== undefined) {\n        if (!Number.isInteger(cookie.maxAge)) {\n            throw new TypeError(`option maxAge is invalid: ${cookie.maxAge}`);\n        }\n        str += \"; Max-Age=\" + cookie.maxAge;\n    }\n    if (cookie.domain) {\n        if (!domainValueRegExp.test(cookie.domain)) {\n            throw new TypeError(`option domain is invalid: ${cookie.domain}`);\n        }\n        str += \"; Domain=\" + cookie.domain;\n    }\n    if (cookie.path) {\n        if (!pathValueRegExp.test(cookie.path)) {\n            throw new TypeError(`option path is invalid: ${cookie.path}`);\n        }\n        str += \"; Path=\" + cookie.path;\n    }\n    if (cookie.expires) {\n        if (!isDate(cookie.expires) || !Number.isFinite(cookie.expires.valueOf())) {\n            throw new TypeError(`option expires is invalid: ${cookie.expires}`);\n        }\n        str += \"; Expires=\" + cookie.expires.toUTCString();\n    }\n    if (cookie.httpOnly) {\n        str += \"; HttpOnly\";\n    }\n    if (cookie.secure) {\n        str += \"; Secure\";\n    }\n    if (cookie.partitioned) {\n        str += \"; Partitioned\";\n    }\n    if (cookie.priority) {\n        const priority = typeof cookie.priority === \"string\"\n            ? cookie.priority.toLowerCase()\n            : undefined;\n        switch (priority) {\n            case \"low\":\n                str += \"; Priority=Low\";\n                break;\n            case \"medium\":\n                str += \"; Priority=Medium\";\n                break;\n            case \"high\":\n                str += \"; Priority=High\";\n                break;\n            default:\n                throw new TypeError(`option priority is invalid: ${cookie.priority}`);\n        }\n    }\n    if (cookie.sameSite) {\n        const sameSite = typeof cookie.sameSite === \"string\"\n            ? cookie.sameSite.toLowerCase()\n            : cookie.sameSite;\n        switch (sameSite) {\n            case true:\n            case \"strict\":\n                str += \"; SameSite=Strict\";\n                break;\n            case \"lax\":\n                str += \"; SameSite=Lax\";\n                break;\n            case \"none\":\n                str += \"; SameSite=None\";\n                break;\n            default:\n                throw new TypeError(`option sameSite is invalid: ${cookie.sameSite}`);\n        }\n    }\n    return str;\n}\n/**\n * Deserialize a `Set-Cookie` header into an object.\n *\n * deserialize('foo=bar; httpOnly')\n *   => { name: 'foo', value: 'bar', httpOnly: true }\n */\nfunction parseSetCookie(str, options) {\n    const dec = options?.decode || decode;\n    const len = str.length;\n    const endIdx = endIndex(str, 0, len);\n    const eqIdx = eqIndex(str, 0, endIdx);\n    const setCookie = eqIdx === -1\n        ? { name: \"\", value: dec(valueSlice(str, 0, endIdx)) }\n        : {\n            name: valueSlice(str, 0, eqIdx),\n            value: dec(valueSlice(str, eqIdx + 1, endIdx)),\n        };\n    let index = endIdx + 1;\n    while (index < len) {\n        const endIdx = endIndex(str, index, len);\n        const eqIdx = eqIndex(str, index, endIdx);\n        const attr = eqIdx === -1\n            ? valueSlice(str, index, endIdx)\n            : valueSlice(str, index, eqIdx);\n        const val = eqIdx === -1 ? undefined : valueSlice(str, eqIdx + 1, endIdx);\n        switch (attr.toLowerCase()) {\n            case \"httponly\":\n                setCookie.httpOnly = true;\n                break;\n            case \"secure\":\n                setCookie.secure = true;\n                break;\n            case \"partitioned\":\n                setCookie.partitioned = true;\n                break;\n            case \"domain\":\n                setCookie.domain = val;\n                break;\n            case \"path\":\n                setCookie.path = val;\n                break;\n            case \"max-age\":\n                if (val && maxAgeRegExp.test(val))\n                    setCookie.maxAge = Number(val);\n                break;\n            case \"expires\":\n                if (!val)\n                    break;\n                const date = new Date(val);\n                if (Number.isFinite(date.valueOf()))\n                    setCookie.expires = date;\n                break;\n            case \"priority\":\n                if (!val)\n                    break;\n                const priority = val.toLowerCase();\n                if (priority === \"low\" ||\n                    priority === \"medium\" ||\n                    priority === \"high\") {\n                    setCookie.priority = priority;\n                }\n                break;\n            case \"samesite\":\n                if (!val)\n                    break;\n                const sameSite = val.toLowerCase();\n                if (sameSite === \"lax\" ||\n                    sameSite === \"strict\" ||\n                    sameSite === \"none\") {\n                    setCookie.sameSite = sameSite;\n                }\n                break;\n        }\n        index = endIdx + 1;\n    }\n    return setCookie;\n}\n/**\n * Find the `;` character between `min` and `len` in str.\n */\nfunction endIndex(str, min, len) {\n    const index = str.indexOf(\";\", min);\n    return index === -1 ? len : index;\n}\n/**\n * Find the `=` character between `min` and `max` in str.\n */\nfunction eqIndex(str, min, max) {\n    const index = str.indexOf(\"=\", min);\n    return index < max ? index : -1;\n}\n/**\n * Slice out a value between startPod to max.\n */\nfunction valueSlice(str, min, max) {\n    let start = min;\n    let end = max;\n    do {\n        const code = str.charCodeAt(start);\n        if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */)\n            break;\n    } while (++start < end);\n    while (end > start) {\n        const code = str.charCodeAt(end - 1);\n        if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */)\n            break;\n        end--;\n    }\n    return str.slice(start, end);\n}\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n */\nfunction decode(str) {\n    if (str.indexOf(\"%\") === -1)\n        return str;\n    try {\n        return decodeURIComponent(str);\n    }\n    catch (e) {\n        return str;\n    }\n}\n/**\n * Determine if value is a Date.\n */\nfunction isDate(val) {\n    return __toString.call(val) === \"[object Date]\";\n}\n//# sourceMappingURL=index.js.map","/** @import { BlurParams, CrossfadeParams, DrawParams, FadeParams, FlyParams, ScaleParams, SlideParams, TransitionConfig } from './public' */\n\nimport { DEV } from 'esm-env';\nimport * as w from '../internal/client/warnings.js';\n\n/** @param {number} x */\nconst linear = (x) => x;\n\n/** @param {number} t */\nfunction cubic_out(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nfunction cubic_in_out(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/** @param {number | string} value\n * @returns {[number, string]}\n */\nfunction split_css_unit(value) {\n\tconst split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n\treturn split ? [parseFloat(split[1]), split[2] || 'px'] : [/** @type {number} */ (value), 'px'];\n}\n\n/**\n * Animates a `blur` filter alongside an element's opacity.\n *\n * @param {Element} node\n * @param {BlurParams} [params]\n * @returns {TransitionConfig}\n */\nexport function blur(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubic_in_out, amount = 5, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst f = style.filter === 'none' ? '' : style.filter;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [value, unit] = split_css_unit(amount);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `opacity: ${target_opacity - od * u}; filter: ${f} blur(${u * value}${unit});`\n\t};\n}\n\n/**\n * Animates the opacity of an element from 0 to the current opacity for `in` transitions and from the current opacity to 0 for `out` transitions.\n *\n * @param {Element} node\n * @param {FadeParams} [params]\n * @returns {TransitionConfig}\n */\nexport function fade(node, { delay = 0, duration = 400, easing = linear } = {}) {\n\tconst o = +getComputedStyle(node).opacity;\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) => `opacity: ${t * o}`\n\t};\n}\n\n/**\n * Animates the x and y positions and the opacity of an element. `in` transitions animate from the provided values, passed as parameters to the element's default values. `out` transitions animate from the element's default values to the provided values.\n *\n * @param {Element} node\n * @param {FlyParams} [params]\n * @returns {TransitionConfig}\n */\nexport function fly(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubic_out, x = 0, y = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [x_value, x_unit] = split_css_unit(x);\n\tconst [y_value, y_unit] = split_css_unit(y);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * x_value}${x_unit}, ${(1 - t) * y_value}${y_unit});\n\t\t\topacity: ${target_opacity - od * u}`\n\t};\n}\n\nvar slide_warning = false;\n\n/**\n * Slides an element in and out.\n *\n * @param {Element} node\n * @param {SlideParams} [params]\n * @returns {TransitionConfig}\n */\nexport function slide(node, { delay = 0, duration = 400, easing = cubic_out, axis = 'y' } = {}) {\n\tconst style = getComputedStyle(node);\n\n\tif (DEV && !slide_warning && /(contents|inline|table)/.test(style.display)) {\n\t\tslide_warning = true;\n\t\tPromise.resolve().then(() => (slide_warning = false));\n\t\tw.transition_slide_display(style.display);\n\t}\n\n\tconst opacity = +style.opacity;\n\tconst primary_property = axis === 'y' ? 'height' : 'width';\n\tconst primary_property_value = parseFloat(style[primary_property]);\n\tconst secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right'];\n\tconst capitalized_secondary_properties = secondary_properties.map(\n\t\t(e) => /** @type {'Left' | 'Right' | 'Top' | 'Bottom'} */ (`${e[0].toUpperCase()}${e.slice(1)}`)\n\t);\n\tconst padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);\n\tconst padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);\n\tconst margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);\n\tconst margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);\n\tconst border_width_start_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[0]}Width`]\n\t);\n\tconst border_width_end_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[1]}Width`]\n\t);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) =>\n\t\t\t'overflow: hidden;' +\n\t\t\t`opacity: ${Math.min(t * 20, 1) * opacity};` +\n\t\t\t`${primary_property}: ${t * primary_property_value}px;` +\n\t\t\t`padding-${secondary_properties[0]}: ${t * padding_start_value}px;` +\n\t\t\t`padding-${secondary_properties[1]}: ${t * padding_end_value}px;` +\n\t\t\t`margin-${secondary_properties[0]}: ${t * margin_start_value}px;` +\n\t\t\t`margin-${secondary_properties[1]}: ${t * margin_end_value}px;` +\n\t\t\t`border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;` +\n\t\t\t`border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;` +\n\t\t\t`min-${primary_property}: 0`\n\t};\n}\n\n/**\n * Animates the opacity and scale of an element. `in` transitions animate from the provided values, passed as parameters, to an element's current (default) values. `out` transitions animate from an element's default values to the provided values.\n *\n * @param {Element} node\n * @param {ScaleParams} [params]\n * @returns {TransitionConfig}\n */\nexport function scale(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubic_out, start = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst sd = 1 - start;\n\tconst od = target_opacity * (1 - opacity);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - sd * u});\n\t\t\topacity: ${target_opacity - od * u}\n\t\t`\n\t};\n}\n\n/**\n * Animates the stroke of an SVG element, like a snake in a tube. `in` transitions begin with the path invisible and draw the path to the screen over time. `out` transitions start in a visible state and gradually erase the path. `draw` only works with elements that have a `getTotalLength` method, like `<path>` and `<polyline>`.\n *\n * @param {SVGElement & { getTotalLength(): number }} node\n * @param {DrawParams} [params]\n * @returns {TransitionConfig}\n */\nexport function draw(node, { delay = 0, speed, duration, easing = cubic_in_out } = {}) {\n\tlet len = node.getTotalLength();\n\tconst style = getComputedStyle(node);\n\tif (style.strokeLinecap !== 'butt') {\n\t\tlen += parseInt(style.strokeWidth);\n\t}\n\tif (duration === undefined) {\n\t\tif (speed === undefined) {\n\t\t\tduration = 800;\n\t\t} else {\n\t\t\tduration = len / speed;\n\t\t}\n\t} else if (typeof duration === 'function') {\n\t\tduration = duration(len);\n\t}\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_, u) => `\n\t\t\tstroke-dasharray: ${len};\n\t\t\tstroke-dashoffset: ${u * len};\n\t\t`\n\t};\n}\n\n/**\n * @template T\n * @template S\n * @param {T} tar\n * @param {S} src\n * @returns {T & S}\n */\nfunction assign(tar, src) {\n\t// @ts-ignore\n\tfor (const k in src) tar[k] = src[k];\n\treturn /** @type {T & S} */ (tar);\n}\n\n/**\n * The `crossfade` function creates a pair of [transitions](https://svelte.dev/docs/svelte/transition) called `send` and `receive`. When an element is 'sent', it looks for a corresponding element being 'received', and generates a transition that transforms the element to its counterpart's position and fades it out. When an element is 'received', the reverse happens. If there is no counterpart, the `fallback` transition is used.\n *\n * @param {CrossfadeParams & {\n * \tfallback?: (node: Element, params: CrossfadeParams, intro: boolean) => TransitionConfig;\n * }} params\n * @returns {[(node: any, params: CrossfadeParams & { key: any; }) => () => TransitionConfig, (node: any, params: CrossfadeParams & { key: any; }) => () => TransitionConfig]}\n */\nexport function crossfade({ fallback, ...defaults }) {\n\t/** @type {Map<any, Element>} */\n\tconst to_receive = new Map();\n\t/** @type {Map<any, Element>} */\n\tconst to_send = new Map();\n\n\t/**\n\t * @param {Element} from_node\n\t * @param {Element} node\n\t * @param {CrossfadeParams} params\n\t * @returns {TransitionConfig}\n\t */\n\tfunction crossfade(from_node, node, params) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = /** @param {number} d */ (d) => Math.sqrt(d) * 30,\n\t\t\teasing = cubic_out\n\t\t} = assign(assign({}, defaults), params);\n\t\tconst from = from_node.getBoundingClientRect();\n\t\tconst to = node.getBoundingClientRect();\n\t\tconst dx = from.left - to.left;\n\t\tconst dy = from.top - to.top;\n\t\tconst dw = from.width / to.width;\n\t\tconst dh = from.height / to.height;\n\t\tconst d = Math.sqrt(dx * dx + dy * dy);\n\t\tconst style = getComputedStyle(node);\n\t\tconst transform = style.transform === 'none' ? '' : style.transform;\n\t\tconst opacity = +style.opacity;\n\t\treturn {\n\t\t\tdelay,\n\t\t\tduration: typeof duration === 'function' ? duration(d) : duration,\n\t\t\teasing,\n\t\t\tcss: (t, u) => `\n\t\t\t   opacity: ${t * opacity};\n\t\t\t   transform-origin: top left;\n\t\t\t   transform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${\n\t\t\t\t\t\tt + (1 - t) * dh\n\t\t\t\t\t});\n\t\t   `\n\t\t};\n\t}\n\n\t/**\n\t * @param {Map<any, Element>} items\n\t * @param {Map<any, Element>} counterparts\n\t * @param {boolean} intro\n\t * @returns {(node: any, params: CrossfadeParams & { key: any; }) => () => TransitionConfig}\n\t */\n\tfunction transition(items, counterparts, intro) {\n\t\t// @ts-expect-error TODO improve typings (are the public types wrong?)\n\t\treturn (node, params) => {\n\t\t\titems.set(params.key, node);\n\t\t\treturn () => {\n\t\t\t\tif (counterparts.has(params.key)) {\n\t\t\t\t\tconst other_node = counterparts.get(params.key);\n\t\t\t\t\tcounterparts.delete(params.key);\n\t\t\t\t\treturn crossfade(/** @type {Element} */ (other_node), node, params);\n\t\t\t\t}\n\t\t\t\t// if the node is disappearing altogether\n\t\t\t\t// (i.e. wasn't claimed by the other list)\n\t\t\t\t// then we need to supply an outro\n\t\t\t\titems.delete(params.key);\n\t\t\t\treturn fallback && fallback(node, params, intro);\n\t\t\t};\n\t\t};\n\t}\n\treturn [transition(to_send, to_receive, false), transition(to_receive, to_send, true)];\n}\n","/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function linear(t) {\n\treturn t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function backInOut(t) {\n\tconst s = 1.70158 * 1.525;\n\tif ((t *= 2) < 1) return 0.5 * (t * t * ((s + 1) * t - s));\n\treturn 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function backIn(t) {\n\tconst s = 1.70158;\n\treturn t * t * ((s + 1) * t - s);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function backOut(t) {\n\tconst s = 1.70158;\n\treturn --t * t * ((s + 1) * t + s) + 1;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function bounceOut(t) {\n\tconst a = 4.0 / 11.0;\n\tconst b = 8.0 / 11.0;\n\tconst c = 9.0 / 10.0;\n\tconst ca = 4356.0 / 361.0;\n\tconst cb = 35442.0 / 1805.0;\n\tconst cc = 16061.0 / 1805.0;\n\tconst t2 = t * t;\n\treturn t < a\n\t\t? 7.5625 * t2\n\t\t: t < b\n\t\t\t? 9.075 * t2 - 9.9 * t + 3.4\n\t\t\t: t < c\n\t\t\t\t? ca * t2 - cb * t + cc\n\t\t\t\t: 10.8 * t * t - 20.52 * t + 10.72;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function bounceInOut(t) {\n\treturn t < 0.5 ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0)) : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function bounceIn(t) {\n\treturn 1.0 - bounceOut(1.0 - t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function circInOut(t) {\n\tif ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\n\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function circIn(t) {\n\treturn 1.0 - Math.sqrt(1.0 - t * t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function circOut(t) {\n\treturn Math.sqrt(1 - --t * t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function cubicInOut(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function cubicIn(t) {\n\treturn t * t * t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function cubicOut(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function elasticInOut(t) {\n\treturn t < 0.5\n\t\t? 0.5 * Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) * Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n\t\t: 0.5 *\n\t\t\t\tMath.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n\t\t\t\tMath.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n\t\t\t\t1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function elasticIn(t) {\n\treturn Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function elasticOut(t) {\n\treturn Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function expoInOut(t) {\n\treturn t === 0.0 || t === 1.0\n\t\t? t\n\t\t: t < 0.5\n\t\t\t? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n\t\t\t: -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function expoIn(t) {\n\treturn t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function expoOut(t) {\n\treturn t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quadInOut(t) {\n\tt /= 0.5;\n\tif (t < 1) return 0.5 * t * t;\n\tt--;\n\treturn -0.5 * (t * (t - 2) - 1);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quadIn(t) {\n\treturn t * t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quadOut(t) {\n\treturn -t * (t - 2.0);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quartInOut(t) {\n\treturn t < 0.5 ? +8.0 * Math.pow(t, 4.0) : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quartIn(t) {\n\treturn Math.pow(t, 4.0);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quartOut(t) {\n\treturn Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quintInOut(t) {\n\tif ((t *= 2) < 1) return 0.5 * t * t * t * t * t;\n\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quintIn(t) {\n\treturn t * t * t * t * t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quintOut(t) {\n\treturn --t * t * t * t * t + 1;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function sineInOut(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function sineIn(t) {\n\tconst v = Math.cos(t * Math.PI * 0.5);\n\tif (Math.abs(v) < 1e-14) return 1;\n\telse return 1 - v;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function sineOut(t) {\n\treturn Math.sin((t * Math.PI) / 2);\n}\n","import * as devalue from 'devalue';\nimport { BROWSER, DEV } from 'esm-env';\nimport { invalidateAll } from './navigation.js';\nimport { app as client_app, applyAction } from '../client/client.js';\nimport { app as server_app } from '../server/app.js';\n\nexport { applyAction };\n\n/**\n * Use this function to deserialize the response from a form submission.\n * Usage:\n *\n * ```js\n * import { deserialize } from '$app/forms';\n *\n * async function handleSubmit(event) {\n *   const response = await fetch('/form?/action', {\n *     method: 'POST',\n *     body: new FormData(event.target)\n *   });\n *\n *   const result = deserialize(await response.text());\n *   // ...\n * }\n * ```\n * @template {Record<string, unknown> | undefined} Success\n * @template {Record<string, unknown> | undefined} Failure\n * @param {string} result\n * @returns {import('@sveltejs/kit').ActionResult<Success, Failure>}\n */\nexport function deserialize(result) {\n\tconst parsed = JSON.parse(result);\n\n\tif (parsed.data) {\n\t\t// the decoders should never be initialised at the top-level because `app`\n\t\t// will not be initialised yet if `kit.output.bundleStrategy` is 'single' or 'inline'\n\t\tparsed.data = devalue.parse(parsed.data, BROWSER ? client_app.decoders : server_app.decoders);\n\t}\n\n\treturn parsed;\n}\n\n/**\n * Shallow clone an element, so that we can access e.g. `form.action` without worrying\n * that someone has added an `<input name=\"action\">` (https://github.com/sveltejs/kit/issues/7593)\n * @template {HTMLElement} T\n * @param {T} element\n * @returns {T}\n */\nfunction clone(element) {\n\treturn /** @type {T} */ (HTMLElement.prototype.cloneNode.call(element));\n}\n\n/**\n * This action enhances a `<form>` element that otherwise would work without JavaScript.\n *\n * The `submit` function is called upon submission with the given FormData and the `action` that should be triggered.\n * If `cancel` is called, the form will not be submitted.\n * You can use the abort `controller` to cancel the submission in case another one starts.\n * If a function is returned, that function is called with the response from the server.\n * If nothing is returned, the fallback will be used.\n *\n * If this function or its return value isn't set, it\n * - falls back to updating the `form` prop with the returned data if the action is on the same page as the form\n * - updates `page.status`\n * - resets the `<form>` element and invalidates all data in case of successful submission with no redirect response\n * - redirects in case of a redirect response\n * - redirects to the nearest error page in case of an unexpected error\n *\n * If you provide a custom function with a callback and want to use the default behavior, invoke `update` in your callback.\n * It accepts an options object\n * - `reset: false` if you don't want the `<form>` values to be reset after a successful submission\n * - `invalidateAll: false` if you don't want the action to call `invalidateAll` after submission\n * @template {Record<string, unknown> | undefined} Success\n * @template {Record<string, unknown> | undefined} Failure\n * @param {HTMLFormElement} form_element The form element\n * @param {import('@sveltejs/kit').SubmitFunction<Success, Failure>} submit Submit callback\n */\nexport function enhance(form_element, submit = () => {}) {\n\tif (DEV && clone(form_element).method !== 'post') {\n\t\tthrow new Error('use:enhance can only be used on <form> fields with method=\"POST\"');\n\t}\n\n\t/**\n\t * @param {{\n\t *   action: URL;\n\t *   invalidateAll?: boolean;\n\t *   result: import('@sveltejs/kit').ActionResult;\n\t *   reset?: boolean\n\t * }} opts\n\t */\n\tconst fallback_callback = async ({\n\t\taction,\n\t\tresult,\n\t\treset = true,\n\t\tinvalidateAll: shouldInvalidateAll = true\n\t}) => {\n\t\tif (result.type === 'success') {\n\t\t\tif (reset) {\n\t\t\t\t// We call reset from the prototype to avoid DOM clobbering\n\t\t\t\tHTMLFormElement.prototype.reset.call(form_element);\n\t\t\t}\n\t\t\tif (shouldInvalidateAll) {\n\t\t\t\tawait invalidateAll();\n\t\t\t}\n\t\t}\n\n\t\t// For success/failure results, only apply action if it belongs to the\n\t\t// current page, otherwise `form` will be updated erroneously\n\t\tif (\n\t\t\tlocation.origin + location.pathname === action.origin + action.pathname ||\n\t\t\tresult.type === 'redirect' ||\n\t\t\tresult.type === 'error'\n\t\t) {\n\t\t\tawait applyAction(result);\n\t\t}\n\t};\n\n\t/** @param {SubmitEvent} event */\n\tasync function handle_submit(event) {\n\t\tconst method = event.submitter?.hasAttribute('formmethod')\n\t\t\t? /** @type {HTMLButtonElement | HTMLInputElement} */ (event.submitter).formMethod\n\t\t\t: clone(form_element).method;\n\t\tif (method !== 'post') return;\n\n\t\tevent.preventDefault();\n\n\t\tconst action = new URL(\n\t\t\t// We can't do submitter.formAction directly because that property is always set\n\t\t\tevent.submitter?.hasAttribute('formaction')\n\t\t\t\t? /** @type {HTMLButtonElement | HTMLInputElement} */ (event.submitter).formAction\n\t\t\t\t: clone(form_element).action\n\t\t);\n\n\t\tconst enctype = event.submitter?.hasAttribute('formenctype')\n\t\t\t? /** @type {HTMLButtonElement | HTMLInputElement} */ (event.submitter).formEnctype\n\t\t\t: clone(form_element).enctype;\n\n\t\tconst form_data = new FormData(form_element, event.submitter);\n\n\t\tif (DEV && enctype !== 'multipart/form-data') {\n\t\t\tfor (const value of form_data.values()) {\n\t\t\t\tif (value instanceof File) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Your form contains <input type=\"file\"> fields, but is missing the necessary `enctype=\"multipart/form-data\"` attribute. This will lead to inconsistent behavior between enhanced and native forms. For more details, see https://github.com/sveltejs/kit/issues/9819.'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst controller = new AbortController();\n\n\t\tlet cancelled = false;\n\t\tconst cancel = () => (cancelled = true);\n\n\t\tconst callback =\n\t\t\t(await submit({\n\t\t\t\taction,\n\t\t\t\tcancel,\n\t\t\t\tcontroller,\n\t\t\t\tformData: form_data,\n\t\t\t\tformElement: form_element,\n\t\t\t\tsubmitter: event.submitter\n\t\t\t})) ?? fallback_callback;\n\t\tif (cancelled) return;\n\n\t\t/** @type {import('@sveltejs/kit').ActionResult} */\n\t\tlet result;\n\n\t\ttry {\n\t\t\tconst headers = new Headers({\n\t\t\t\taccept: 'application/json',\n\t\t\t\t'x-sveltekit-action': 'true'\n\t\t\t});\n\n\t\t\t// do not explicitly set the `Content-Type` header when sending `FormData`\n\t\t\t// or else it will interfere with the browser's header setting\n\t\t\t// see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest_API/Using_FormData_Objects#sect4\n\t\t\tif (enctype !== 'multipart/form-data') {\n\t\t\t\theaders.set(\n\t\t\t\t\t'Content-Type',\n\t\t\t\t\t/^(:?application\\/x-www-form-urlencoded|text\\/plain)$/.test(enctype)\n\t\t\t\t\t\t? enctype\n\t\t\t\t\t\t: 'application/x-www-form-urlencoded'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// @ts-expect-error `URLSearchParams(form_data)` is kosher, but typescript doesn't know that\n\t\t\tconst body = enctype === 'multipart/form-data' ? form_data : new URLSearchParams(form_data);\n\n\t\t\tconst response = await fetch(action, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tcache: 'no-store',\n\t\t\t\tbody,\n\t\t\t\tsignal: controller.signal\n\t\t\t});\n\n\t\t\tresult = deserialize(await response.text());\n\t\t\tif (result.type === 'error') result.status = response.status;\n\t\t} catch (error) {\n\t\t\tif (/** @type {any} */ (error)?.name === 'AbortError') return;\n\t\t\tresult = { type: 'error', error };\n\t\t}\n\n\t\tawait callback({\n\t\t\taction,\n\t\t\tformData: form_data,\n\t\t\tformElement: form_element,\n\t\t\tupdate: (opts) =>\n\t\t\t\tfallback_callback({\n\t\t\t\t\taction,\n\t\t\t\t\tresult,\n\t\t\t\t\treset: opts?.reset,\n\t\t\t\t\tinvalidateAll: opts?.invalidateAll\n\t\t\t\t}),\n\t\t\t// @ts-expect-error generic constraints stuff we don't care about\n\t\t\tresult\n\t\t});\n\t}\n\n\t// @ts-expect-error\n\tHTMLFormElement.prototype.addEventListener.call(form_element, 'submit', handle_submit);\n\n\treturn {\n\t\tdestroy() {\n\t\t\t// @ts-expect-error\n\t\t\tHTMLFormElement.prototype.removeEventListener.call(form_element, 'submit', handle_submit);\n\t\t}\n\t};\n}\n","<script>\n  let { children } = $props();\n</script>\n\n{@render children()}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { source, set, state, increment } from '../internal/client/reactivity/sources.js';\nimport { label, tag } from '../internal/client/dev/tracing.js';\nimport { get, update_version } from '../internal/client/runtime.js';\n\nvar read_methods = ['forEach', 'isDisjointFrom', 'isSubsetOf', 'isSupersetOf'];\nvar set_like_methods = ['difference', 'intersection', 'symmetricDifference', 'union'];\n\nvar inited = false;\n\n/**\n * A reactive version of the built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) object.\n * Reading contents of the set (by iterating, or by reading `set.size` or calling `set.has(...)` as in the [example](https://svelte.dev/playground/53438b51194b4882bcc18cddf9f96f15) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the set is updated.\n *\n * Note that values in a reactive set are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n *\n * ```svelte\n * <script>\n * \timport { SvelteSet } from 'svelte/reactivity';\n * \tlet monkeys = new SvelteSet();\n *\n * \tfunction toggle(monkey) {\n * \t\tif (monkeys.has(monkey)) {\n * \t\t\tmonkeys.delete(monkey);\n * \t\t} else {\n * \t\t\tmonkeys.add(monkey);\n * \t\t}\n * \t}\n * </script>\n *\n * {#each ['🙈', '🙉', '🙊'] as monkey}\n * \t<button onclick={() => toggle(monkey)}>{monkey}</button>\n * {/each}\n *\n * <button onclick={() => monkeys.clear()}>clear</button>\n *\n * {#if monkeys.has('🙈')}<p>see no evil</p>{/if}\n * {#if monkeys.has('🙉')}<p>hear no evil</p>{/if}\n * {#if monkeys.has('🙊')}<p>speak no evil</p>{/if}\n * ```\n *\n * @template T\n * @extends {Set<T>}\n */\nexport class SvelteSet extends Set {\n\t/** @type {Map<T, Source<boolean>>} */\n\t#sources = new Map();\n\t#version = state(0);\n\t#size = state(0);\n\t#update_version = update_version || -1;\n\n\t/**\n\t * @param {Iterable<T> | null | undefined} [value]\n\t */\n\tconstructor(value) {\n\t\tsuper();\n\n\t\tif (DEV) {\n\t\t\t// If the value is invalid then the native exception will fire here\n\t\t\tvalue = new Set(value);\n\n\t\t\ttag(this.#version, 'SvelteSet version');\n\t\t\ttag(this.#size, 'SvelteSet.size');\n\t\t}\n\n\t\tif (value) {\n\t\t\tfor (var element of value) {\n\t\t\t\tsuper.add(element);\n\t\t\t}\n\t\t\tthis.#size.v = super.size;\n\t\t}\n\n\t\tif (!inited) this.#init();\n\t}\n\n\t/**\n\t * If the source is being created inside the same reaction as the SvelteSet instance,\n\t * we use `state` so that it will not be a dependency of the reaction. Otherwise we\n\t * use `source` so it will be.\n\t *\n\t * @template T\n\t * @param {T} value\n\t * @returns {Source<T>}\n\t */\n\t#source(value) {\n\t\treturn update_version === this.#update_version ? state(value) : source(value);\n\t}\n\n\t// We init as part of the first instance so that we can treeshake this class\n\t#init() {\n\t\tinited = true;\n\n\t\tvar proto = SvelteSet.prototype;\n\t\tvar set_proto = Set.prototype;\n\n\t\tfor (const method of read_methods) {\n\t\t\t// @ts-ignore\n\t\t\tproto[method] = function (...v) {\n\t\t\t\tget(this.#version);\n\t\t\t\t// @ts-ignore\n\t\t\t\treturn set_proto[method].apply(this, v);\n\t\t\t};\n\t\t}\n\n\t\tfor (const method of set_like_methods) {\n\t\t\t// @ts-ignore\n\t\t\tproto[method] = function (...v) {\n\t\t\t\tget(this.#version);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar set = /** @type {Set<T>} */ (set_proto[method].apply(this, v));\n\t\t\t\treturn new SvelteSet(set);\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @param {T} value */\n\thas(value) {\n\t\tvar has = super.has(value);\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(value);\n\n\t\tif (s === undefined) {\n\t\t\tif (!has) {\n\t\t\t\t// If the value doesn't exist, track the version in case it's added later\n\t\t\t\t// but don't create sources willy-nilly to track all possible values\n\t\t\t\tget(this.#version);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ts = this.#source(true);\n\n\t\t\tif (DEV) {\n\t\t\t\ttag(s, `SvelteSet has(${label(value)})`);\n\t\t\t}\n\n\t\t\tsources.set(value, s);\n\t\t}\n\n\t\tget(s);\n\t\treturn has;\n\t}\n\n\t/** @param {T} value */\n\tadd(value) {\n\t\tif (!super.has(value)) {\n\t\t\tsuper.add(value);\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @param {T} value */\n\tdelete(value) {\n\t\tvar deleted = super.delete(value);\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(value);\n\n\t\tif (s !== undefined) {\n\t\t\tsources.delete(value);\n\t\t\tset(s, false);\n\t\t}\n\n\t\tif (deleted) {\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn deleted;\n\t}\n\n\tclear() {\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Clear first, so we get nice console.log outputs with $inspect\n\t\tsuper.clear();\n\t\tvar sources = this.#sources;\n\n\t\tfor (var s of sources.values()) {\n\t\t\tset(s, false);\n\t\t}\n\n\t\tsources.clear();\n\t\tset(this.#size, 0);\n\t\tincrement(this.#version);\n\t}\n\n\tkeys() {\n\t\treturn this.values();\n\t}\n\n\tvalues() {\n\t\tget(this.#version);\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tget(this.#version);\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.keys();\n\t}\n\n\tget size() {\n\t\treturn get(this.#size);\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { set, source, state, increment } from '../internal/client/reactivity/sources.js';\nimport { label, tag } from '../internal/client/dev/tracing.js';\nimport { get, update_version } from '../internal/client/runtime.js';\n\n/**\n * A reactive version of the built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) object.\n * Reading contents of the map (by iterating, or by reading `map.size` or calling `map.get(...)` or `map.has(...)` as in the [tic-tac-toe example](https://svelte.dev/playground/0b0ff4aa49c9443f9b47fe5203c78293) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the map is updated.\n *\n * Note that values in a reactive map are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n *\n * ```svelte\n * <script>\n * \timport { SvelteMap } from 'svelte/reactivity';\n * \timport { result } from './game.js';\n *\n * \tlet board = new SvelteMap();\n * \tlet player = $state('x');\n * \tlet winner = $derived(result(board));\n *\n * \tfunction reset() {\n * \t\tplayer = 'x';\n * \t\tboard.clear();\n * \t}\n * </script>\n *\n * <div class=\"board\">\n * \t{#each Array(9), i}\n * \t\t<button\n * \t\t\tdisabled={board.has(i) || winner}\n * \t\t\tonclick={() => {\n * \t\t\t\tboard.set(i, player);\n * \t\t\t\tplayer = player === 'x' ? 'o' : 'x';\n * \t\t\t}}\n * \t\t>{board.get(i)}</button>\n * \t{/each}\n * </div>\n *\n * {#if winner}\n * \t<p>{winner} wins!</p>\n * \t<button onclick={reset}>reset</button>\n * {:else}\n * \t<p>{player} is next</p>\n * {/if}\n * ```\n *\n * @template K\n * @template V\n * @extends {Map<K, V>}\n */\nexport class SvelteMap extends Map {\n\t/** @type {Map<K, Source<number>>} */\n\t#sources = new Map();\n\t#version = state(0);\n\t#size = state(0);\n\t#update_version = update_version || -1;\n\n\t/**\n\t * @param {Iterable<readonly [K, V]> | null | undefined} [value]\n\t */\n\tconstructor(value) {\n\t\tsuper();\n\n\t\tif (DEV) {\n\t\t\t// If the value is invalid then the native exception will fire here\n\t\t\tvalue = new Map(value);\n\n\t\t\ttag(this.#version, 'SvelteMap version');\n\t\t\ttag(this.#size, 'SvelteMap.size');\n\t\t}\n\n\t\tif (value) {\n\t\t\tfor (var [key, v] of value) {\n\t\t\t\tsuper.set(key, v);\n\t\t\t}\n\t\t\tthis.#size.v = super.size;\n\t\t}\n\t}\n\n\t/**\n\t * If the source is being created inside the same reaction as the SvelteMap instance,\n\t * we use `state` so that it will not be a dependency of the reaction. Otherwise we\n\t * use `source` so it will be.\n\t *\n\t * @template T\n\t * @param {T} value\n\t * @returns {Source<T>}\n\t */\n\t#source(value) {\n\t\treturn update_version === this.#update_version ? state(value) : source(value);\n\t}\n\n\t/** @param {K} key */\n\thas(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tif (super.has(key)) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param {(value: V, key: K, map: Map<K, V>) => void} callbackfn\n\t * @param {any} [this_arg]\n\t */\n\tforEach(callbackfn, this_arg) {\n\t\tthis.#read_all();\n\t\tsuper.forEach(callbackfn, this_arg);\n\t}\n\n\t/** @param {K} key */\n\tget(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tif (super.has(key)) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn super.get(key);\n\t}\n\n\t/**\n\t * @param {K} key\n\t * @param {V} value\n\t * */\n\tset(key, value) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar prev_res = super.get(key);\n\t\tvar res = super.set(key, value);\n\t\tvar version = this.#version;\n\n\t\tif (s === undefined) {\n\t\t\ts = this.#source(0);\n\n\t\t\tif (DEV) {\n\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t}\n\n\t\t\tsources.set(key, s);\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(version);\n\t\t} else if (prev_res !== value) {\n\t\t\tincrement(s);\n\n\t\t\t// if not every reaction of s is a reaction of version we need to also include version\n\t\t\tvar v_reactions = version.reactions === null ? null : new Set(version.reactions);\n\t\t\tvar needs_version_increase =\n\t\t\t\tv_reactions === null ||\n\t\t\t\t!s.reactions?.every((r) =>\n\t\t\t\t\t/** @type {NonNullable<typeof v_reactions>} */ (v_reactions).has(r)\n\t\t\t\t);\n\t\t\tif (needs_version_increase) {\n\t\t\t\tincrement(version);\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t/** @param {K} key */\n\tdelete(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar res = super.delete(key);\n\n\t\tif (s !== undefined) {\n\t\t\tsources.delete(key);\n\t\t\tset(s, -1);\n\t\t}\n\n\t\tif (res) {\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tclear() {\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Clear first, so we get nice console.log outputs with $inspect\n\t\tsuper.clear();\n\t\tvar sources = this.#sources;\n\t\tset(this.#size, 0);\n\t\tfor (var s of sources.values()) {\n\t\t\tset(s, -1);\n\t\t}\n\t\tincrement(this.#version);\n\t\tsources.clear();\n\t}\n\n\t#read_all() {\n\t\tget(this.#version);\n\n\t\tvar sources = this.#sources;\n\t\tif (this.#size.v !== sources.size) {\n\t\t\tfor (var key of super.keys()) {\n\t\t\t\tif (!sources.has(key)) {\n\t\t\t\t\tvar s = this.#source(0);\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t\t}\n\n\t\t\t\t\tsources.set(key, s);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ([, s] of this.#sources) {\n\t\t\tget(s);\n\t\t}\n\t}\n\n\tkeys() {\n\t\tget(this.#version);\n\t\treturn super.keys();\n\t}\n\n\tvalues() {\n\t\tthis.#read_all();\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tthis.#read_all();\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\tget size() {\n\t\tget(this.#size);\n\t\treturn super.size;\n\t}\n}\n","import { getContext } from 'svelte';\nimport { BROWSER, DEV } from 'esm-env';\nimport { stores as browser_stores } from '../client/client.js';\n\n/**\n * A function that returns all of the contextual stores. On the server, this must be called during component initialization.\n * Only use this if you need to defer store subscription until after the component has mounted, for some reason.\n *\n * @deprecated Use `$app/state` instead (requires Svelte 5, [see docs for more info](https://svelte.dev/docs/kit/migrating-to-sveltekit-2#SvelteKit-2.12:-$app-stores-deprecated))\n */\nexport const getStores = () => {\n\tconst stores = BROWSER ? browser_stores : getContext('__svelte__');\n\n\treturn {\n\t\t/** @type {typeof page} */\n\t\tpage: {\n\t\t\tsubscribe: stores.page.subscribe\n\t\t},\n\t\t/** @type {typeof navigating} */\n\t\tnavigating: {\n\t\t\tsubscribe: stores.navigating.subscribe\n\t\t},\n\t\t/** @type {typeof updated} */\n\t\tupdated: stores.updated\n\t};\n};\n\n/**\n * A readable store whose value contains page data.\n *\n * On the server, this store can only be subscribed to during component initialization. In the browser, it can be subscribed to at any time.\n *\n * @deprecated Use `page` from `$app/state` instead (requires Svelte 5, [see docs for more info](https://svelte.dev/docs/kit/migrating-to-sveltekit-2#SvelteKit-2.12:-$app-stores-deprecated))\n * @type {import('svelte/store').Readable<import('@sveltejs/kit').Page>}\n */\nexport const page = {\n\tsubscribe(fn) {\n\t\tconst store = DEV ? get_store('page') : getStores().page;\n\t\treturn store.subscribe(fn);\n\t}\n};\n\n/**\n * A readable store.\n * When navigating starts, its value is a `Navigation` object with `from`, `to`, `type` and (if `type === 'popstate'`) `delta` properties.\n * When navigating finishes, its value reverts to `null`.\n *\n * On the server, this store can only be subscribed to during component initialization. In the browser, it can be subscribed to at any time.\n *\n * @deprecated Use `navigating` from `$app/state` instead (requires Svelte 5, [see docs for more info](https://svelte.dev/docs/kit/migrating-to-sveltekit-2#SvelteKit-2.12:-$app-stores-deprecated))\n * @type {import('svelte/store').Readable<import('@sveltejs/kit').Navigation | null>}\n */\nexport const navigating = {\n\tsubscribe(fn) {\n\t\tconst store = DEV ? get_store('navigating') : getStores().navigating;\n\t\treturn store.subscribe(fn);\n\t}\n};\n\n/**\n * A readable store whose initial value is `false`. If [`version.pollInterval`](https://svelte.dev/docs/kit/configuration#version) is a non-zero value, SvelteKit will poll for new versions of the app and update the store value to `true` when it detects one. `updated.check()` will force an immediate check, regardless of polling.\n *\n * On the server, this store can only be subscribed to during component initialization. In the browser, it can be subscribed to at any time.\n *\n * @deprecated Use `updated` from `$app/state` instead (requires Svelte 5, [see docs for more info](https://svelte.dev/docs/kit/migrating-to-sveltekit-2#SvelteKit-2.12:-$app-stores-deprecated))\n * @type {import('svelte/store').Readable<boolean> & { check(): Promise<boolean> }}\n */\nexport const updated = {\n\tsubscribe(fn) {\n\t\tconst store = DEV ? get_store('updated') : getStores().updated;\n\n\t\tif (BROWSER) {\n\t\t\tupdated.check = store.check;\n\t\t}\n\n\t\treturn store.subscribe(fn);\n\t},\n\tcheck: () => {\n\t\tthrow new Error(\n\t\t\tBROWSER\n\t\t\t\t? 'Cannot check updated store before subscribing'\n\t\t\t\t: 'Can only check updated store in browser'\n\t\t);\n\t}\n};\n\n/**\n * @template {keyof ReturnType<typeof getStores>} Name\n * @param {Name} name\n * @returns {ReturnType<typeof getStores>[Name]}\n */\nfunction get_store(name) {\n\ttry {\n\t\treturn getStores()[name];\n\t} catch {\n\t\tthrow new Error(\n\t\t\t`Cannot subscribe to '${name}' store on the server outside of a Svelte component, as it is bound to the current request via component context. This prevents state from leaking between users.` +\n\t\t\t\t'For more information, see https://svelte.dev/docs/kit/state-management#avoid-shared-state-on-the-server'\n\t\t);\n\t}\n}\n","/** @import { FlipParams, AnimationConfig } from './public.js' */\nimport { cubicOut } from '../easing/index.js';\n\n/**\n * The flip function calculates the start and end position of an element and animates between them, translating the x and y values.\n * `flip` stands for [First, Last, Invert, Play](https://aerotwist.com/blog/flip-your-animations/).\n *\n * @param {Element} node\n * @param {{ from: DOMRect; to: DOMRect }} fromTo\n * @param {FlipParams} params\n * @returns {AnimationConfig}\n */\nexport function flip(node, { from, to }, params = {}) {\n\tvar { delay = 0, duration = (d) => Math.sqrt(d) * 120, easing = cubicOut } = params;\n\n\tvar style = getComputedStyle(node);\n\n\t// find the transform origin, expressed as a pair of values between 0 and 1\n\tvar transform = style.transform === 'none' ? '' : style.transform;\n\tvar [ox, oy] = style.transformOrigin.split(' ').map(parseFloat);\n\tox /= node.clientWidth;\n\toy /= node.clientHeight;\n\n\t// calculate effect of parent transforms and zoom\n\tvar zoom = get_zoom(node); // https://drafts.csswg.org/css-viewport/#effective-zoom\n\tvar sx = node.clientWidth / to.width / zoom;\n\tvar sy = node.clientHeight / to.height / zoom;\n\n\t// find the starting position of the transform origin\n\tvar fx = from.left + from.width * ox;\n\tvar fy = from.top + from.height * oy;\n\n\t// find the ending position of the transform origin\n\tvar tx = to.left + to.width * ox;\n\tvar ty = to.top + to.height * oy;\n\n\t// find the translation at the start of the transform\n\tvar dx = (fx - tx) * sx;\n\tvar dy = (fy - ty) * sy;\n\n\t// find the relative scale at the start of the transform\n\tvar dsx = from.width / to.width;\n\tvar dsy = from.height / to.height;\n\n\treturn {\n\t\tdelay,\n\t\tduration: typeof duration === 'function' ? duration(Math.sqrt(dx * dx + dy * dy)) : duration,\n\t\teasing,\n\t\tcss: (t, u) => {\n\t\t\tvar x = u * dx;\n\t\t\tvar y = u * dy;\n\t\t\tvar sx = t + u * dsx;\n\t\t\tvar sy = t + u * dsy;\n\n\t\t\treturn `transform: ${transform} translate(${x}px, ${y}px) scale(${sx}, ${sy});`;\n\t\t}\n\t};\n}\n\n/**\n * @param {Element} element\n */\nfunction get_zoom(element) {\n\tif ('currentCSSZoom' in element) {\n\t\treturn /** @type {number} */ (element.currentCSSZoom);\n\t}\n\n\t/** @type {Element | null} */\n\tvar current = element;\n\tvar zoom = 1;\n\n\twhile (current !== null) {\n\t\tzoom *= +getComputedStyle(current).zoom;\n\t\tcurrent = /** @type {Element | null} */ (current.parentElement);\n\t}\n\n\treturn zoom;\n}\n","/*Copyrights for code authored by Yahoo Inc. is licensed under the following terms:\r\nMIT License\r\nCopyright  2017 Yahoo Inc.\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\n!function(e,t,r,i){\"use strict\";function n(){return C.isValid()}function o(){return C.isValid()}function a(){var e={getUserMedia:!0};return C.isValid(e)}function s(e){var t=!1;if(w.isArray(e)&&e.length){if(w.each(e,function(e,r){w.isSupported.videoCodecs[r]&&(t=!0)}),!t){ return!1 }}else if(w.isString(e)&&e.length&&!w.isSupported.videoCodecs[e]){ return!1; }return C.isValid({getUserMedia:!0})}function d(){function e(e,t,r){var i,n;for(u=e,m=t,g=r,f=new Array(h),i=0;h>i;i++){ f[i]=new Array(4),n=f[i],n[0]=n[1]=n[2]=(i<<k+8)/h|0,D[i]=F/h|0,G[i]=0 }}function t(){for(var e=[],t=new Array(h),r=0;h>r;r++){ t[f[r][3]]=r; }for(var i=0,n=0;h>n;n++){var o=t[n];e[i++]=f[o][0],e[i++]=f[o][1],e[i++]=f[o][2]}return e}function r(){var e,t,r,i,n,o,a,s;for(a=0,s=0,e=0;h>e;e++){for(n=f[e],r=e,i=n[1],t=e+1;h>t;t++){ o=f[t],o[1]<i&&(r=t,i=o[1]); }if(o=f[r],e!=r&&(t=o[0],o[0]=n[0],n[0]=t,t=o[1],o[1]=n[1],n[1]=t,t=o[2],o[2]=n[2],n[2]=t,t=o[3],o[3]=n[3],n[3]=t),i!=a){for(P[a]=s+e>>1,t=a+1;i>t;t++){ P[t]=e; }a=i,s=e}}for(P[a]=s+C>>1,t=a+1;256>t;t++){ P[t]=C }}function i(){var e,t,r,i,n,o,a,f,h,C,x,F,W,O;for(y>m&&(g=1),l=30+(g-1)/3,F=u,W=0,O=m,x=m/(3*g),C=x/S|0,f=V,o=T,a=o>>U,1>=a&&(a=0),e=0;a>e;e++){ N[e]=f*((a*a-e*e)*z/(a*a)); }for(h=y>m?3:m%p!==0?3*p:m%v!==0?3*v:m%b!==0?3*b:3*w,e=0;x>e;){ if(r=(255&F[W+0])<<k,i=(255&F[W+1])<<k,n=(255&F[W+2])<<k,t=c(r,i,n),d(f,t,r,i,n),0!==a&&s(a,t,r,i,n),W+=h,W>=O&&(W-=m),e++,0===C&&(C=1),e%C===0){ for(f-=f/l,o-=o/I,a=o>>U,1>=a&&(a=0),t=0;a>t;t++){ N[t]=f*((a*a-t*t)*z/(a*a)) } } }}function n(e,t,r){var i,n,o,a,s,d,c;for(s=1e3,c=-1,i=P[t],n=i-1;h>i||n>=0;){ h>i&&(d=f[i],o=d[1]-t,o>=s?i=h:(i++,0>o&&(o=-o),a=d[0]-e,0>a&&(a=-a),o+=a,s>o&&(a=d[2]-r,0>a&&(a=-a),o+=a,s>o&&(s=o,c=d[3])))),n>=0&&(d=f[n],o=t-d[1],o>=s?n=-1:(n--,0>o&&(o=-o),a=d[0]-e,0>a&&(a=-a),o+=a,s>o&&(a=d[2]-r,0>a&&(a=-a),o+=a,s>o&&(s=o,c=d[3])))); }return c}function o(){return i(),a(),r(),t()}function a(){var e;for(e=0;h>e;e++){ f[e][0]>>=k,f[e][1]>>=k,f[e][2]>>=k,f[e][3]=e }}function s(e,t,r,i,n){var o,a,s,d,c,l,u;for(s=t-e,-1>s&&(s=-1),d=t+e,d>h&&(d=h),o=t+1,a=t-1,l=1;d>o||a>s;){if(c=N[l++],d>o){u=f[o++];try{u[0]-=c*(u[0]-r)/B|0,u[1]-=c*(u[1]-i)/B|0,u[2]-=c*(u[2]-n)/B|0}catch(m){}}if(a>s){u=f[a--];try{u[0]-=c*(u[0]-r)/B|0,u[1]-=c*(u[1]-i)/B|0,u[2]-=c*(u[2]-n)/B|0}catch(m$1){}}}}function d(e,t,r,i,n){var o=f[t],a=e/V;o[0]-=a*(o[0]-r)|0,o[1]-=a*(o[1]-i)|0,o[2]-=a*(o[2]-n)|0}function c(e,t,r){var i,n,o,a,s,d,c,l,u,m;for(l=~(1<<31),u=l,d=-1,c=d,i=0;h>i;i++){ m=f[i],n=m[0]-e,0>n&&(n=-n),o=m[1]-t,0>o&&(o=-o),n+=o,o=m[2]-r,0>o&&(o=-o),n+=o,l>n&&(l=n,d=i),a=n-(G[i]>>x-k),u>a&&(u=a,c=i),s=D[i]>>O,D[i]-=s,G[i]+=s<<W; }return D[d]+=E,G[d]-=M,c}var l,u,m,g,f,h=256,p=499,v=491,b=487,w=503,y=3*w,C=h-1,k=4,S=100,x=16,F=1<<x,W=10,O=10,E=F>>O,M=F<<W-O,A=h>>3,U=6,R=1<<U,T=A*R,I=30,j=10,V=1<<j,H=8,z=1<<H,L=j+H,B=1<<L,P=[],G=[],D=[],N=[];e.apply(this,arguments);var q={};return q.map=n,q.process=o,q}function c(){var e=this;try{e.onmessage=function(e){var t,i=e.data||{};i.gifshot&&(t=r.run(i),postMessage(t))}}catch(t){}var r={dataToRGB:function(e,t,r){for(var i=t*r*4,n=0,o=[];i>n;){ o.push(e[n++]),o.push(e[n++]),o.push(e[n++]),n++; }return o},componentizedPaletteToArray:function(e){e=e||[];for(var t=[],r=0;r<e.length;r+=3){var i=e[r],n=e[r+1],o=e[r+2];t.push(i<<16|n<<8|o)}return t},processFrameWithQuantizer:function(e,t,r,i){for(var n=this.dataToRGB(e,t,r),o=new d(n,n.length,i),a=o.process(),s=new Uint32Array(this.componentizedPaletteToArray(a)),c=t*r,l=new Uint8Array(c),u=0,m=0;c>m;m++){var g=n[u++],f=n[u++],h=n[u++];l[m]=o.map(g,f,h)}return{pixels:l,palette:s}},run:function(e){e=e||{};var t=e,r=t.height,i=(t.palette,t.sampleInterval),n=t.width,o=e.data;return this.processFrameWithQuantizer(o,n,r,i)}};return r}function l(e,t,r,n){function o(e){var t=e.length;if(2>t||t>256||t&t-1){ throw\"Invalid code/color length, must be power of 2 and 2 .. 256.\"; }return t}function a(e,t,r,n){function o(r){for(;g>=r;){ e[t++]=255&f,f>>=8,g-=8,t===s+256&&(e[s]=255,s=t++) }}function a(e){f|=e<<g,g+=m,o(8)}e[t++]=r;var s=t++,d=1<<r,c=d-1,l=d+1,u=l+1,m=r+1,g=0,f=0,h=n[0]&c,p={};a(d);for(var v=1,b=n.length;b>v;++v){var w=n[v]&c,y=h<<8|w,C=p[y];if(C===i){for(f|=h<<g,g+=m;g>=8;){ e[t++]=255&f,f>>=8,g-=8,t===s+256&&(e[s]=255,s=t++); }4096===u?(a(d),u=l+1,m=r+1,p={}):(u>=1<<m&&++m,p[y]=u++),h=w}else { h=C }}return a(h),a(l),o(1),s+1===t?e[s]=0:(e[s]=t-s-1,e[t++]=0),t}var s=0;n=n===i?{}:n;var d=n.loop===i?null:n.loop,c=n.palette===i?null:n.palette;if(0>=t||0>=r||t>65535||r>65535){ throw\"Width/Height invalid.\"; }e[s++]=71,e[s++]=73,e[s++]=70,e[s++]=56,e[s++]=57,e[s++]=97;var l=0,u=0;if(e[s++]=255&t,e[s++]=t>>8&255,e[s++]=255&r,e[s++]=r>>8&255,e[s++]=(null!==c?128:0)|l,e[s++]=u,e[s++]=0,null!==d){if(0>d||d>65535){ throw\"Loop count invalid.\"; }e[s++]=33,e[s++]=255,e[s++]=11,e[s++]=78,e[s++]=69,e[s++]=84,e[s++]=83,e[s++]=67,e[s++]=65,e[s++]=80,e[s++]=69,e[s++]=50,e[s++]=46,e[s++]=48,e[s++]=3,e[s++]=1,e[s++]=255&d,e[s++]=d>>8&255,e[s++]=0}var m=!1;this.addFrame=function(t,r,n,d,l,u){if(m===!0&&(--s,m=!1),u=u===i?{}:u,0>t||0>r||t>65535||r>65535){ throw\"x/y invalid.\"; }if(0>=n||0>=d||n>65535||d>65535){ throw\"Width/Height invalid.\"; }if(l.length<n*d){ throw\"Not enough pixels for the frame size.\"; }var g=!0,f=u.palette;if((f===i||null===f)&&(g=!1,f=c),f===i||null===f){ throw\"Must supply either a local or global palette.\"; }for(var h=o(f),p=0;h>>=1;){ ++p; }h=1<<p;var v=u.delay===i?0:u.delay,b=u.disposal===i?0:u.disposal;if(0>b||b>3){ throw\"Disposal out of range.\"; }var w=!1,y=0;if(u.transparent!==i&&null!==u.transparent&&(w=!0,y=u.transparent,0>y||y>=h)){ throw\"Transparent color index.\"; }if((0!==b||w||0!==v)&&(e[s++]=33,e[s++]=249,e[s++]=4,e[s++]=b<<2|(w===!0?1:0),e[s++]=255&v,e[s++]=v>>8&255,e[s++]=y,e[s++]=0),e[s++]=44,e[s++]=255&t,e[s++]=t>>8&255,e[s++]=255&r,e[s++]=r>>8&255,e[s++]=255&n,e[s++]=n>>8&255,e[s++]=255&d,e[s++]=d>>8&255,e[s++]=g===!0?128|p-1:0,g===!0){ for(var C=0,k=f.length;k>C;++C){var S=f[C];e[s++]=S>>16&255,e[s++]=S>>8&255,e[s++]=255&S} }s=a(e,s,2>p?2:p,l)},this.end=function(){return m===!1&&(e[s++]=59,m=!0),s}}function u(e,t){e.getBase64GIF(function(e){t({error:!1,errorCode:\"\",errorMsg:\"\",image:e})})}function m(){function e(){w.each(l,function(e,t){t&&(t.text?f.addFrame(t.img,a,t.text):f.addFrame(t,a))}),u(f,n)}var r=arguments.length>0&&arguments[0]!==i?arguments[0]:{},n=r.callback,o=r.images,a=r.options,s=r.imagesLength,d={getUserMedia:!0,\"window.URL\":!0},c=C.validate(d),l=[],m=0,g=void 0,f=void 0;return c.error?n(c):(f=new O(a),w.each(o,function(r,i){var o=i;i.src&&(o=o.src),w.isElement(o)?(a.crossOrigin&&(o.crossOrigin=a.crossOrigin),l[r]=o,m+=1,m===s&&e()):w.isString(o)&&(g=new Image,a.crossOrigin&&(g.crossOrigin=a.crossOrigin),function(t){i.text&&(t.text=i.text),t.onerror=function(){var e=void 0;return--s,0===s?(e={},e.error=\"None of the requested images was capable of being retrieved\",n(e)):void 0},t.onload=function(){l[r]=i.text?{img:t,text:t.text}:t,m+=1,m===s&&e(),w.removeElement(t)},t.src=o}(g),w.setCSSAttr(g,{position:\"fixed\",opacity:\"0\"}),t.body.appendChild(g))}),void 0)}function g(e){e=w.isObject(e)?e:{},A.stopVideoStreaming(e)}function f(e,r){var i=e.options||{},n=i.images,o=i.video,a=Number(i.gifWidth),s=Number(i.gifHeight),d=(Number(i.numFrames),e.cameraStream),c=e.videoElement,l=e.videoWidth,u=e.videoHeight,m=M.getCropDimensions({videoWidth:l,videoHeight:u,gifHeight:s,gifWidth:a}),f=r;i.crop=m,i.videoElement=c,i.videoWidth=l,i.videoHeight=u,i.cameraStream=d,w.isElement(c)&&(c.width=a+m.width,c.height=s+m.height,i.webcamVideoElement||(w.setCSSAttr(c,{position:\"fixed\",opacity:\"0\"}),t.body.appendChild(c)),c.play(),M.getGIF(i,function(e){n&&n.length||o&&o.length||g(e),f(e)}))}function h(){var e=arguments.length>0&&arguments[0]!==i?arguments[0]:{},t=e.callback,r=e.existingVideo,n=e.options,o={getUserMedia:!0,\"window.URL\":!0},a=C.validate(o),s=void 0,d=void 0;if(a.error){ return t(a); }if(w.isElement(r)&&r.src){if(d=r.src,s=w.getExtension(d),!w.isSupported.videoCodecs[s]){ return t(C.messages.videoCodecs) }}else { w.isArray(r)&&w.each(r,function(e,t){return s=t instanceof Blob?t.type.substr(t.type.lastIndexOf(\"/\")+1,t.length):t.substr(t.lastIndexOf(\".\")+1,t.length),w.isSupported.videoCodecs[s]?(r=t,!1):void 0}); }A.startStreaming({completed:function(e){e.options=n||{},f(e,t)},existingVideo:r,crossOrigin:n.crossOrigin,options:n})}function p(){var e=arguments.length>0&&arguments[0]!==i?arguments[0]:{},t=e.callback,r=e.lastCameraStream,n=e.options,a=e.webcamVideoElement;return o()?n.savedRenderingContexts.length?(M.getGIF(n,function(e){t(e)}),void 0):(A.startVideoStreaming(function(){var e=arguments.length>0&&arguments[0]!==i?arguments[0]:{};e.options=n||{},f(e,t)},{lastCameraStream:r,callback:t,webcamVideoElement:a,crossOrigin:n.crossOrigin}),void 0):t(C.validate())}function v(e,t){if(t=w.isFunction(e)?e:t,e=w.isObject(e)?e:{},w.isFunction(t)){var r=w.mergeOptions(x,e)||{},i=e.cameraStream,n=r.images,o=n?n.length:0,a=r.video,s=r.webcamVideoElement;r=w.mergeOptions(r,{gifWidth:Math.floor(r.gifWidth),gifHeight:Math.floor(r.gifHeight)}),o?m({images:n,imagesLength:o,callback:t,options:r}):a?h({existingVideo:a,callback:t,options:r}):p({lastCameraStream:i,callback:t,webcamVideoElement:s,options:r})}}function b(e,t){if(t=w.isFunction(e)?e:t,e=w.isObject(e)?e:{},w.isFunction(t)){var r=w.mergeOptions(x,e),i=w.mergeOptions(r,{interval:.1,numFrames:1,gifWidth:Math.floor(r.gifWidth),gifHeight:Math.floor(r.gifHeight)});v(i,t)}}var w={URL:e.URL||e.webkitURL||e.mozURL||e.msURL,getUserMedia:function(){var e=r.getUserMedia||r.webkitGetUserMedia||r.mozGetUserMedia||r.msGetUserMedia;return e?e.bind(r):e}(),requestAnimFrame:e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame,requestTimeout:function(e,t){if(e=e||w.noop,t=t||0,!w.requestAnimFrame){ return setTimeout(e,t); }var r=(new Date).getTime(),i=new Object,n=w.requestAnimFrame,o=function a(){var o=(new Date).getTime(),s=o-r;s>=t?e.call():i.value=n(a)};return i.value=n(o),i},Blob:e.Blob||e.BlobBuilder||e.WebKitBlobBuilder||e.MozBlobBuilder||e.MSBlobBuilder,btoa:function(){var t=e.btoa||function(e){for(var t=\"\",r=0,i=e.length,n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",o=void 0,a=void 0,s=void 0,d=void 0,c=void 0,l=void 0,u=void 0;i>r;){ o=e.charCodeAt(r++),a=e.charCodeAt(r++),s=e.charCodeAt(r++),d=o>>2,c=(3&o)<<4|a>>4,l=(15&a)<<2|s>>6,u=63&s,isNaN(a)?l=u=64:isNaN(s)&&(u=64),t=t+n.charAt(d)+n.charAt(c)+n.charAt(l)+n.charAt(u); }return t};return t?t.bind(e):w.noop}(),isObject:function(e){return e&&\"[object Object]\"===Object.prototype.toString.call(e)},isEmptyObject:function(e){return w.isObject(e)&&!Object.keys(e).length},isArray:function(e){return e&&Array.isArray(e)},isFunction:function(e){return e&&\"function\"==typeof e},isElement:function(e){return e&&1===e.nodeType},isString:function(e){return\"string\"==typeof e||\"[object String]\"===Object.prototype.toString.call(e)},isSupported:{canvas:function(){var e=t.createElement(\"canvas\");return e&&e.getContext&&e.getContext(\"2d\")},webworkers:function(){return e.Worker},blob:function(){return w.Blob},Uint8Array:function(){return e.Uint8Array},Uint32Array:function(){return e.Uint32Array},videoCodecs:function(){var e=t.createElement(\"video\"),r={mp4:!1,h264:!1,ogv:!1,ogg:!1,webm:!1};try{e&&e.canPlayType&&(r.mp4=\"\"!==e.canPlayType('video/mp4; codecs=\"mp4v.20.8\"'),r.h264=\"\"!==(e.canPlayType('video/mp4; codecs=\"avc1.42E01E\"')||e.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"')),r.ogv=\"\"!==e.canPlayType('video/ogg; codecs=\"theora\"'),r.ogg=\"\"!==e.canPlayType('video/ogg; codecs=\"theora\"'),r.webm=-1!==e.canPlayType('video/webm; codecs=\"vp8, vorbis\"'))}catch(i){}return r}()},noop:function(){},each:function(e,t){var r=void 0,i=void 0;if(w.isArray(e)){ for(r=-1,i=e.length;++r<i&&t(r,e[r])!==!1;){ ; } }else if(w.isObject(e)){ for(r in e){ if(e.hasOwnProperty(r)&&t(r,e[r])===!1){ break } } }},mergeOptions:function(e,t){if(w.isObject(e)&&w.isObject(t)&&Object.keys){var r={};return w.each(e,function(t){r[t]=e[t]}),w.each(t,function(i){var n=t[i];r[i]=w.isObject(n)?e[i]?w.mergeOptions(e[i],n):n:n}),r}},setCSSAttr:function(e,t,r){w.isElement(e)&&(w.isString(t)&&w.isString(r)?e.style[t]=r:w.isObject(t)&&w.each(t,function(t,r){e.style[t]=r}))},removeElement:function(e){w.isElement(e)&&e.parentNode&&e.parentNode.removeChild(e)},createWebWorker:function(e){if(!w.isString(e)){ return{}; }try{var t=new w.Blob([e],{type:\"text/javascript\"}),r=w.URL.createObjectURL(t),i=new Worker(r);return{objectUrl:r,worker:i}}catch(n){return\"\"+n}},getExtension:function(e){return e.substr(e.lastIndexOf(\".\")+1,e.length)},getFontSize:function(){var e=arguments.length>0&&arguments[0]!==i?arguments[0]:{};if(!t.body||e.resizeFont===!1){ return e.fontSize; }var r=e.text,n=e.gifWidth,o=parseInt(e.fontSize,10),a=parseInt(e.minFontSize,10),s=t.createElement(\"div\"),d=t.createElement(\"span\");for(s.setAttribute(\"width\",n),s.appendChild(d),d.innerHTML=r,d.style.fontSize=o+\"px\",d.style.textIndent=\"-9999px\",d.style.visibility=\"hidden\",t.body.appendChild(d);d.offsetWidth>n&&o>=a;){ d.style.fontSize=--o+\"px\"; }return t.body.removeChild(d),o+\"px\"},webWorkerError:!1},y=Object.freeze({\"default\":w}),C={validate:function(e){e=w.isObject(e)?e:{};var t={};return w.each(C.validators,function(r,i){var n=i.errorCode;return e[n]||i.condition?void 0:(t=i,t.error=!0,!1)}),delete t.condition,t},isValid:function R(e){var t=C.validate(e),R=t.error!==!0?!0:!1;return R},validators:[{condition:w.isFunction(w.getUserMedia),errorCode:\"getUserMedia\",errorMsg:\"The getUserMedia API is not supported in your browser\"},{condition:w.isSupported.canvas(),errorCode:\"canvas\",errorMsg:\"Canvas elements are not supported in your browser\"},{condition:w.isSupported.webworkers(),errorCode:\"webworkers\",errorMsg:\"The Web Workers API is not supported in your browser\"},{condition:w.isFunction(w.URL),errorCode:\"window.URL\",errorMsg:\"The window.URL API is not supported in your browser\"},{condition:w.isSupported.blob(),errorCode:\"window.Blob\",errorMsg:\"The window.Blob File API is not supported in your browser\"},{condition:w.isSupported.Uint8Array(),errorCode:\"window.Uint8Array\",errorMsg:\"The window.Uint8Array function constructor is not supported in your browser\"},{condition:w.isSupported.Uint32Array(),errorCode:\"window.Uint32Array\",errorMsg:\"The window.Uint32Array function constructor is not supported in your browser\"}],messages:{videoCodecs:{errorCode:\"videocodec\",errorMsg:\"The video codec you are trying to use is not supported in your browser\"}}},k=Object.freeze({\"default\":C}),S=function(){},x={sampleInterval:10,numWorkers:2,filter:\"\",gifWidth:200,gifHeight:200,interval:.1,numFrames:10,frameDuration:1,keepCameraOn:!1,images:[],video:null,webcamVideoElement:null,cameraStream:null,text:\"\",fontWeight:\"normal\",fontSize:\"16px\",minFontSize:\"10px\",resizeFont:!1,fontFamily:\"sans-serif\",fontColor:\"#ffffff\",textAlign:\"center\",textBaseline:\"bottom\",textXCoordinate:null,textYCoordinate:null,progressCallback:S,completeCallback:S,saveRenderingContexts:!1,savedRenderingContexts:[],showFrameText:!0,crossOrigin:\"Anonymous\",waterMark:null,waterMarkHeight:null,waterMarkWidth:null,waterMarkXCoordinate:1,waterMarkYCoordinate:1},F=Object.freeze({\"default\":x}),W=function(){},O=function(e){this.canvas=null,this.ctx=null,this.repeat=0,this.frames=[],this.numRenderedFrames=0,this.onRenderCompleteCallback=W,this.onRenderProgressCallback=W,this.workers=[],this.availableWorkers=[],this.generatingGIF=!1,this.options=e,this.initializeWebWorkers(e)};O.prototype={workerMethods:c(),initializeWebWorkers:function(e){var r=this,i=d.toString()+\"(\"+c.toString()+\"());\",n=void 0,o=void 0,a=void 0,s=void 0,l=-1,u=\"\";for(s=e.numWorkers;++l<s;){ n=w.createWebWorker(i),w.isObject(n)?(o=n.objectUrl,a=n.worker,r.workers.push({worker:a,objectUrl:o}),r.availableWorkers.push(a)):(u=n,w.webWorkerError=!!n); }this.workerError=u,this.canvas=t.createElement(\"canvas\"),this.canvas.width=e.gifWidth,this.canvas.height=e.gifHeight,this.ctx=this.canvas.getContext(\"2d\"),this.frames=[]},getWorker:function(){return this.availableWorkers.pop()},freeWorker:function(e){this.availableWorkers.push(e)},byteMap:function(){for(var e=[],t=0;256>t;t++){ e[t]=String.fromCharCode(t); }return e}(),bufferToString:function(e){for(var t=e.length,r=\"\",i=-1;++i<t;){ r+=this.byteMap[e[i]]; }return r},onFrameFinished:function(e){var t=this,r=t.frames,i=t.options,n=!!(i.images||[]).length,o=r.every(function(e){return!e.beingProcessed&&e.done});t.numRenderedFrames++,n&&e(t.numRenderedFrames/r.length),t.onRenderProgressCallback(.75*t.numRenderedFrames/r.length),o?t.generatingGIF||t.generateGIF(r,t.onRenderCompleteCallback):w.requestTimeout(function(){t.processNextFrame()},1)},processFrame:function(e){var t=this,r=(this.options,this.options),n=r.progressCallback,o=r.sampleInterval,a=this.frames,s=void 0,d=void 0,c=function(){var e=arguments.length>0&&arguments[0]!==i?arguments[0]:{},r=e.data;delete s.data,s.pixels=Array.prototype.slice.call(r.pixels),s.palette=Array.prototype.slice.call(r.palette),s.done=!0,s.beingProcessed=!1,t.freeWorker(d),t.onFrameFinished(n)};return s=a[e],s.beingProcessed||s.done?(this.onFrameFinished(),void 0):(s.sampleInterval=o,s.beingProcessed=!0,s.gifshot=!0,d=this.getWorker(),d?(d.onmessage=c,d.postMessage(s)):c({data:t.workerMethods.run(s)}),void 0)},startRendering:function(e){this.onRenderCompleteCallback=e;for(var t=0;t<this.options.numWorkers&&t<this.frames.length;t++){ this.processFrame(t) }},processNextFrame:function(){for(var e=-1,t=0;t<this.frames.length;t++){var r=this.frames[t];if(!r.done&&!r.beingProcessed){e=t;break}}e>=0&&this.processFrame(e)},generateGIF:function(e,t){var r=[],i={loop:this.repeat},n=this.options,o=n.interval,a=n.frameDuration,s=n.images,d=!!s.length,c=n.gifHeight,u=n.gifWidth,m=new l(r,u,c,i),g=this.onRenderProgressCallback,f=d?100*o:0,h=void 0,p=void 0;this.generatingGIF=!0,w.each(e,function(t,r){var i=r.palette;g(.75+.25*r.position*1/e.length);for(var n=0;a>n;n++){ m.addFrame(0,0,u,c,r.pixels,{palette:i,delay:f}) }}),m.end(),g(1),this.frames=[],this.generatingGIF=!1,w.isFunction(t)&&(h=this.bufferToString(r),p=\"data:image/gif;base64,\"+w.btoa(h),t(p))},setRepeat:function(e){this.repeat=e},addFrame:function(e,t,r){t=w.isObject(t)?t:{};var i=this,n=i.ctx,o=i.options,a=o.gifWidth,s=o.gifHeight,d=w.getFontSize(t),c=t,l=c.filter,u=c.fontColor,m=c.fontFamily,g=c.fontWeight,f=(c.gifHeight,c.gifWidth,c.text),h=c.textAlign,p=c.textBaseline,v=c.waterMark,b=c.waterMarkHeight,y=c.waterMarkWidth,C=c.waterMarkXCoordinate,k=c.waterMarkYCoordinate,S=t.textXCoordinate?t.textXCoordinate:\"left\"===h?1:\"right\"===h?a:a/2,x=t.textYCoordinate?t.textYCoordinate:\"top\"===p?1:\"center\"===p?s/2:s,F=g+\" \"+d+\" \"+m,W=r&&t.showFrameText?r:f,O=void 0;try{n.filter=l,n.drawImage(e,0,0,a,s),W&&(n.font=F,n.fillStyle=u,n.textAlign=h,n.textBaseline=p,n.fillText(W,S,x)),v&&n.drawImage(v,C,k,y,b),O=n.getImageData(0,0,a,s),i.addFrameImageData(O)}catch(E){return\"\"+E}},addFrameImageData:function(){var e=arguments.length>0&&arguments[0]!==i?arguments[0]:{},t=this.frames,r=e.data;this.frames.push({data:r,width:e.width,height:e.height,palette:null,dithering:null,done:!1,beingProcessed:!1,position:t.length})},onRenderProgress:function(e){this.onRenderProgressCallback=e},isRendering:function(){return this.generatingGIF},getBase64GIF:function(e){var t=this,r=function(r){t.destroyWorkers(),w.requestTimeout(function(){e(r)},0)};t.startRendering(r)},destroyWorkers:function(){if(!this.workerError){var e=this.workers;w.each(e,function(e,t){var r=t.worker,i=t.objectUrl;r.terminate(),w.URL.revokeObjectURL(i)})}}};var E=function(){},M={getGIF:function(){var e=arguments.length>0&&arguments[0]!==i?arguments[0]:{},r=arguments[1];r=w.isFunction(r)?r:E;var n=t.createElement(\"canvas\"),o=void 0,a=e.images,s=!!a.length,d=e.cameraStream,c=e.crop,l=e.filter,u=e.fontColor,m=e.fontFamily,g=e.fontWeight,f=e.keepCameraOn,h=(e.numWorkers,e.progressCallback),p=e.saveRenderingContexts,v=e.savedRenderingContexts,b=e.text,y=e.textAlign,C=e.textBaseline,k=e.videoElement,S=e.videoHeight,x=e.videoWidth,F=e.webcamVideoElement,W=e.waterMark,M=e.waterMarkHeight,A=e.waterMarkWidth,U=e.waterMarkXCoordinate,R=e.waterMarkYCoordinate,T=Number(e.gifWidth),I=Number(e.gifHeight),j=Number(e.interval),V=(Number(e.sampleInterval),s?0:1e3*j),H=[],z=v.length?v.length:e.numFrames,L=z,B=new O(e),P=w.getFontSize(e),G=e.textXCoordinate?e.textXCoordinate:\"left\"===y?1:\"right\"===y?T:T/2,D=e.textYCoordinate?e.textYCoordinate:\"top\"===C?1:\"center\"===C?I/2:I,N=g+\" \"+P+\" \"+m,q=c?Math.floor(c.scaledWidth/2):0,X=c?x-c.scaledWidth:0,Y=c?Math.floor(c.scaledHeight/2):0,Q=c?S-c.scaledHeight:0,_=function K(){function e(){try{X>x&&(X=x),Q>S&&(Q=S),0>q&&(q=0),0>Y&&(Y=0),o.filter=l,o.drawImage(k,q,Y,X,Q,0,0,T,I),t()}catch(r){if(\"NS_ERROR_NOT_AVAILABLE\"!==r.name){ throw r; }w.requestTimeout(e,100)}}function t(){var e=void 0;p&&H.push(o.getImageData(0,0,T,I)),W&&o.drawImage(W,U,R,A,M),b&&(o.font=N,o.fillStyle=u,o.textAlign=y,o.textBaseline=C,o.fillText(b,G,D)),e=o.getImageData(0,0,T,I),B.addFrameImageData(e),L=i,h((z-L)/z),i>0&&w.requestTimeout(K,V),L||B.getBase64GIF(function(e){r({error:!1,errorCode:\"\",errorMsg:\"\",image:e,cameraStream:d,videoElement:k,webcamVideoElement:F,savedRenderingContexts:H,keepCameraOn:f})})}var i=L-1;v.length?(o.putImageData(v[z-L],0,0),t()):e()};z=z!==i?z:10,j=j!==i?j:.1,n.width=T,n.height=I,o=n.getContext(\"2d\"),function J(){return v.length||0!==k.currentTime?(_(),void 0):(w.requestTimeout(J,100),void 0)}()},getCropDimensions:function(){var e=arguments.length>0&&arguments[0]!==i?arguments[0]:{},t=e.videoWidth,r=e.videoHeight,n=e.gifWidth,o=e.gifHeight,a={width:0,height:0,scaledWidth:0,scaledHeight:0};return t>r?(a.width=Math.round(t*(o/r))-n,a.scaledWidth=Math.round(a.width*(r/o))):(a.height=Math.round(r*(n/t))-o,a.scaledHeight=Math.round(a.height*(t/n))),a}},A={loadedData:!1,defaultVideoDimensions:{width:640,height:480},findVideoSize:function T(e){T.attempts=T.attempts||0;var t=e.cameraStream,r=e.completedCallback,i=e.videoElement;i&&(i.videoWidth>0&&i.videoHeight>0?(i.removeEventListener(\"loadeddata\",A.findVideoSize),r({videoElement:i,cameraStream:t,videoWidth:i.videoWidth,videoHeight:i.videoHeight})):T.attempts<10?(T.attempts+=1,w.requestTimeout(function(){A.findVideoSize(e)},400)):r({videoElement:i,cameraStream:t,videoWidth:A.defaultVideoDimensions.width,videoHeight:A.defaultVideoDimensions.height}))},onStreamingTimeout:function(e){w.isFunction(e)&&e({error:!0,errorCode:\"getUserMedia\",errorMsg:\"There was an issue with the getUserMedia API - Timed out while trying to start streaming\",image:null,cameraStream:{}})},stream:function(e){var t=w.isArray(e.existingVideo)?e.existingVideo[0]:e.existingVideo,r=e.cameraStream,i=e.completedCallback,n=e.streamedCallback,o=e.videoElement;if(w.isFunction(n)&&n(),t){if(w.isString(t)){ o.src=t,o.innerHTML='<source src=\"'+t+'\" type=\"video/'+w.getExtension(t)+'\" />'; }else if(t instanceof Blob){try{o.src=w.URL.createObjectURL(t)}catch(a){}o.innerHTML='<source src=\"'+t+'\" type=\"'+t.type+'\" />'}}else if(o.mozSrcObject){ o.mozSrcObject=r; }else if(w.URL){ try{o.srcObject=r,o.src=w.URL.createObjectURL(r)}catch(a$1){o.srcObject=r} }o.play(),w.requestTimeout(function s(){s.count=s.count||0,A.loadedData===!0?(A.findVideoSize({videoElement:o,cameraStream:r,completedCallback:i}),A.loadedData=!1):(s.count+=1,s.count>10?A.findVideoSize({videoElement:o,cameraStream:r,completedCallback:i}):s())},0)},startStreaming:function(e){var r=w.isFunction(e.error)?e.error:w.noop,i=w.isFunction(e.streamed)?e.streamed:w.noop,n=w.isFunction(e.completed)?e.completed:w.noop,o=e.crossOrigin,a=e.existingVideo,s=e.lastCameraStream,d=e.options,c=e.webcamVideoElement,l=w.isElement(a)?a:c?c:t.createElement(\"video\");o&&(l.crossOrigin=d.crossOrigin),l.autoplay=!0,l.loop=!0,l.muted=!0,l.addEventListener(\"loadeddata\",function(){A.loadedData=!0,d.offset&&(l.currentTime=d.offset)}),a?A.stream({videoElement:l,existingVideo:a,completedCallback:n}):s?A.stream({videoElement:l,cameraStream:s,streamedCallback:i,completedCallback:n}):w.getUserMedia({video:!0},function(e){A.stream({videoElement:l,cameraStream:e,streamedCallback:i,completedCallback:n})},r)},startVideoStreaming:function(e){var t=arguments.length>1&&arguments[1]!==i?arguments[1]:{},r=t.timeout!==i?t.timeout:0,n=t.callback,o=t.webcamVideoElement,a=void 0;r>0&&(a=w.requestTimeout(function(){A.onStreamingTimeout(n)},1e4)),A.startStreaming({error:function(){n({error:!0,errorCode:\"getUserMedia\",errorMsg:\"There was an issue with the getUserMedia API - the user probably denied permission\",image:null,cameraStream:{}})},streamed:function(){clearTimeout(a)},completed:function(){var t=arguments.length>0&&arguments[0]!==i?arguments[0]:{},r=t.cameraStream,n=t.videoElement,o=t.videoHeight,a=t.videoWidth;e({cameraStream:r,videoElement:n,videoHeight:o,videoWidth:a})},lastCameraStream:t.lastCameraStream,webcamVideoElement:o,crossOrigin:t.crossOrigin,options:t})},stopVideoStreaming:function(e){e=w.isObject(e)?e:{};var t=e,r=t.keepCameraOn,i=t.videoElement,n=t.webcamVideoElement,o=e.cameraStream||{},a=o.getTracks?o.getTracks()||[]:[],s=!!a.length,d=a[0];!r&&s&&w.isFunction(d.stop)&&d.stop(),w.isElement(i)&&!n&&(i.pause(),w.isFunction(w.URL.revokeObjectURL)&&!w.webWorkerError&&i.src&&w.URL.revokeObjectURL(i.src),w.removeElement(i))}},U={utils:y,error:k,defaultOptions:F,createGIF:v,takeSnapShot:b,stopVideoStreaming:g,isSupported:n,isWebCamGIFSupported:o,isExistingVideoGIFSupported:s,isExistingImagesGIFSupported:a,VERSION:\"0.4.5\"};\"function\"==typeof define&&define.amd?define([],function(){return U}):\"undefined\"!=typeof exports?module.exports=U:e.gifshot=U}(\"undefined\"!=typeof window?window:{},\"undefined\"!=typeof document?document:{createElement:function(){}},\"undefined\"!=typeof window?window.navigator:{});\n(function (global, factory) {\n    if(typeof exports === 'object' && typeof module !== 'undefined') {\n        module.exports = factory();\n        module.exports.default = factory();\n    }\n\telse if(typeof define === 'function' && define.amd) {\n        define(factory);\n    }\n    else {\n        (global = global || self, global.heic2any = factory())\n    }\n}(this, function () { 'use strict';\nvar workerString = \"\\nvar Module=void 0!==Module?Module:{};(function(){var d={print:function(A){A=Array.prototype.slice.call(arguments).join(\\\" \\\"),console.log(A)},printErr:function(A){A=Array.prototype.slice.call(arguments).join(\\\" \\\"),console.error(A)},canvas:{},noInitialRun:!0},A={};for(Sr in d)d.hasOwnProperty(Sr)&&(A[Sr]=d[Sr]);var i,f,e=!1,l=!1,o=!1,r=!1;if(d.ENVIRONMENT)if(\\\"WEB\\\"===d.ENVIRONMENT)e=!0;else if(\\\"WORKER\\\"===d.ENVIRONMENT)l=!0;else if(\\\"NODE\\\"===d.ENVIRONMENT)o=!0;else{if(\\\"SHELL\\\"!==d.ENVIRONMENT)throw new Error(\\\"The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.\\\");r=!0}else e=\\\"object\\\"==typeof window,l=\\\"function\\\"==typeof importScripts,o=\\\"object\\\"==typeof process&&\\\"function\\\"==typeof require&&!e&&!l,r=!e&&!o&&!l;if(o)d.print||(d.print=console.log),d.printErr||(d.printErr=console.warn),d.read=function(A,e){var r;return(r=vr(A))||(i=i||require(\\\"fs\\\"),A=(f=f||require(\\\"path\\\")).normalize(A),r=i.readFileSync(A)),e?r:r.toString()},d.readBinary=function(A){var e=d.read(A,!0);return e.buffer||(e=new Uint8Array(e)),h(e.buffer),e},d.thisProgram||(1<process.argv.length?d.thisProgram=process.argv[1].replace(/\\\\\\\\/g,\\\"/\\\"):d.thisProgram=\\\"unknown-program\\\"),d.arguments=process.argv.slice(2),\\\"undefined\\\"!=typeof module&&(module.exports=d),process.on(\\\"uncaughtException\\\",function(A){if(!(A instanceof Yr))throw A}),process.on(\\\"unhandledRejection\\\",function(A,e){process.exit(1)}),d.inspect=function(){return\\\"[Emscripten Module object]\\\"};else if(r)d.print||(d.print=print),\\\"undefined\\\"!=typeof printErr&&(d.printErr=printErr),\\\"undefined\\\"!=typeof read?d.read=function(A){var e=vr(A);return e?kr(e):read(A)}:d.read=function(){throw\\\"no read() available\\\"},d.readBinary=function(A){var e;return(e=vr(A))?e:\\\"function\\\"==typeof readbuffer?new Uint8Array(readbuffer(A)):(h(\\\"object\\\"==typeof(e=read(A,\\\"binary\\\"))),e)},\\\"undefined\\\"!=typeof scriptArgs?d.arguments=scriptArgs:void 0!==arguments&&(d.arguments=arguments),\\\"function\\\"==typeof quit&&(d.quit=function(A,e){quit(A)});else{if(!e&&!l)throw new Error(\\\"Unknown runtime environment. Where are we?\\\");if(d.read=function(e){try{var A=new XMLHttpRequest;return A.open(\\\"GET\\\",e,!1),A.send(null),A.responseText}catch(A){var r=vr(e);if(r)return kr(r);throw A}},l&&(d.readBinary=function(e){try{var A=new XMLHttpRequest;return A.open(\\\"GET\\\",e,!1),A.responseType=\\\"arraybuffer\\\",A.send(null),new Uint8Array(A.response)}catch(A){var r=vr(e);if(r)return r;throw A}}),d.readAsync=function(e,r,i){var f=new XMLHttpRequest;f.open(\\\"GET\\\",e,!0),f.responseType=\\\"arraybuffer\\\",f.onload=function(){if(200==f.status||0==f.status&&f.response)r(f.response);else{var A=vr(e);A?r(A.buffer):i()}},f.onerror=i,f.send(null)},void 0!==arguments&&(d.arguments=arguments),\\\"undefined\\\"!=typeof console)d.print||(d.print=function(A){console.log(A)}),d.printErr||(d.printErr=function(A){console.warn(A)});else{d.print||(d.print=function(A){})}void 0===d.setWindowTitle&&(d.setWindowTitle=function(A){document.title=A})}for(Sr in d.print||(d.print=function(){}),d.printErr||(d.printErr=d.print),d.arguments||(d.arguments=[]),d.thisProgram||(d.thisProgram=\\\"./this.program\\\"),d.quit||(d.quit=function(A,e){throw e}),d.print=d.print,d.printErr=d.printErr,d.preRun=[],d.postRun=[],A)A.hasOwnProperty(Sr)&&(d[Sr]=A[Sr]);A=void 0;var k={setTempRet0:function(A){return tempRet0=A},getTempRet0:function(){return tempRet0},stackSave:function(){return _},stackRestore:function(A){_=A},getNativeTypeSize:function(A){switch(A){case\\\"i1\\\":case\\\"i8\\\":return 1;case\\\"i16\\\":return 2;case\\\"i32\\\":return 4;case\\\"i64\\\":return 8;case\\\"float\\\":return 4;case\\\"double\\\":return 8;default:if(\\\"*\\\"===A[A.length-1])return k.QUANTUM_SIZE;if(\\\"i\\\"!==A[0])return 0;var e=parseInt(A.substr(1));return h(e%8==0),e/8}},getNativeFieldSize:function(A){return Math.max(k.getNativeTypeSize(A),k.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(A,e){return\\\"double\\\"===e||\\\"i64\\\"===e?7&A&&(h(4==(7&A)),A+=4):h(0==(3&A)),A},getAlignSize:function(A,e,r){return r||\\\"i64\\\"!=A&&\\\"double\\\"!=A?A?Math.min(e||(A?k.getNativeFieldSize(A):0),k.QUANTUM_SIZE):Math.min(e,8):8},dynCall:function(A,e,r){return r&&r.length?d[\\\"dynCall_\\\"+A].apply(null,[e].concat(r)):d[\\\"dynCall_\\\"+A].call(null,e)},functionPointers:[],addFunction:function(A){for(var e=0;e<k.functionPointers.length;e++)if(!k.functionPointers[e])return k.functionPointers[e]=A,2*(1+e);throw\\\"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.\\\"},removeFunction:function(A){k.functionPointers[(A-2)/2]=null},warnOnce:function(A){k.warnOnce.shown||(k.warnOnce.shown={}),k.warnOnce.shown[A]||(k.warnOnce.shown[A]=1,d.printErr(A))},funcWrappers:{},getFuncWrapper:function(e,r){if(e){h(r),k.funcWrappers[r]||(k.funcWrappers[r]={});var A=k.funcWrappers[r];return A[e]||(1===r.length?A[e]=function(){return k.dynCall(r,e)}:2===r.length?A[e]=function(A){return k.dynCall(r,e,[A])}:A[e]=function(){return k.dynCall(r,e,Array.prototype.slice.call(arguments))}),A[e]}},getCompilerSetting:function(A){throw\\\"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work\\\"},stackAlloc:function(A){var e=_;return _=(_=_+A|0)+15&-16,e},staticAlloc:function(A){var e=R;return R=(R=R+A|0)+15&-16,e},dynamicAlloc:function(A){var e=I[D>>2],r=-16&(e+A+15|0);if((I[D>>2]=r,H<=r)&&!z())return I[D>>2]=e,0;return e},alignMemory:function(A,e){return A=Math.ceil(A/(e||16))*(e||16)},makeBigInt:function(A,e,r){return r?+(A>>>0)+4294967296*(e>>>0):+(A>>>0)+4294967296*(0|e)},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};d.Runtime=k;var n=0;function h(A,e){A||Mr(\\\"Assertion failed: \\\"+e)}function w(A,e,r){switch(\\\"*\\\"===(r=r||\\\"i8\\\").charAt(r.length-1)&&(r=\\\"i32\\\"),r){case\\\"i1\\\":case\\\"i8\\\":B[A>>0]=e;break;case\\\"i16\\\":X[A>>1]=e;break;case\\\"i32\\\":I[A>>2]=e;break;case\\\"i64\\\":tempI64=[e>>>0,(tempDouble=e,1<=+iA(tempDouble)?0<tempDouble?(0|tA(+nA(tempDouble/4294967296),4294967295))>>>0:~~+fA((tempDouble-(~~tempDouble>>>0))/4294967296)>>>0:0)],I[A>>2]=tempI64[0],I[A+4>>2]=tempI64[1];break;case\\\"float\\\":G[A>>2]=e;break;case\\\"double\\\":V[A>>3]=e;break;default:Mr(\\\"invalid type for setValue: \\\"+r)}}var t=0,v=2,m=4;function a(A,e,r,i){var f,n;n=\\\"number\\\"==typeof A?(f=!0,A):(f=!1,A.length);var t,o=\\\"string\\\"==typeof e?e:null;if(t=r==m?i:[\\\"function\\\"==typeof Gr?Gr:k.staticAlloc,k.stackAlloc,k.staticAlloc,k.dynamicAlloc][void 0===r?v:r](Math.max(n,o?1:e.length)),f){var a;for(h(0==(3&(i=t))),a=t+(-4&n);i<a;i+=4)I[i>>2]=0;for(a=t+n;i<a;)B[i++>>0]=0;return t}if(\\\"i8\\\"===o)return A.subarray||A.slice?E.set(A,t):E.set(new Uint8Array(A),t),t;for(var c,l,u,b=0;b<n;){var s=A[b];\\\"function\\\"==typeof s&&(s=k.getFunctionIndex(s)),0!==(c=o||e[b])?(\\\"i64\\\"==c&&(c=\\\"i32\\\"),w(t+b,s,c),u!==c&&(l=k.getNativeTypeSize(c),u=c),b+=l):b++}return t}function g(A,e){if(0===e||!A)return\\\"\\\";for(var r,i=0,f=0;i|=r=E[A+f>>0],(0!=r||e)&&(f++,!e||f!=e););e=e||f;var n=\\\"\\\";if(i<128){for(var t;0<e;)t=String.fromCharCode.apply(String,E.subarray(A,A+Math.min(e,1024))),n=n?n+t:t,A+=1024,e-=1024;return n}return c(E,A)}d.ALLOC_NORMAL=t,d.ALLOC_STACK=1,d.ALLOC_STATIC=v,d.ALLOC_DYNAMIC=3,d.ALLOC_NONE=m,d.getMemory=function(A){return N?AA?Gr(A):k.dynamicAlloc(A):k.staticAlloc(A)};var u=\\\"undefined\\\"!=typeof TextDecoder?new TextDecoder(\\\"utf8\\\"):void 0;function c(A,e){for(var r=e;A[r];)++r;if(16<r-e&&A.subarray&&u)return u.decode(A.subarray(e,r));for(var i,f,n,t,o,a=\\\"\\\";;){if(!(i=A[e++]))return a;if(128&i)if(f=63&A[e++],192!=(224&i))if(n=63&A[e++],(i=224==(240&i)?(15&i)<<12|f<<6|n:(t=63&A[e++],240==(248&i)?(7&i)<<18|f<<12|n<<6|t:(o=63&A[e++],248==(252&i)?(3&i)<<24|f<<18|n<<12|t<<6|o:(1&i)<<30|f<<24|n<<18|t<<12|o<<6|63&A[e++])))<65536)a+=String.fromCharCode(i);else{var c=i-65536;a+=String.fromCharCode(55296|c>>10,56320|1023&c)}else a+=String.fromCharCode((31&i)<<6|f);else a+=String.fromCharCode(i)}}function b(A,e,r,i){if(!(0<i))return 0;for(var f=r,n=r+i-1,t=0;t<A.length;++t){var o=A.charCodeAt(t);if(55296<=o&&o<=57343&&(o=65536+((1023&o)<<10)|1023&A.charCodeAt(++t)),o<=127){if(n<=r)break;e[r++]=o}else if(o<=2047){if(n<=r+1)break;e[r++]=192|o>>6,e[r++]=128|63&o}else if(o<=65535){if(n<=r+2)break;e[r++]=224|o>>12,e[r++]=128|o>>6&63,e[r++]=128|63&o}else if(o<=2097151){if(n<=r+3)break;e[r++]=240|o>>18,e[r++]=128|o>>12&63,e[r++]=128|o>>6&63,e[r++]=128|63&o}else if(o<=67108863){if(n<=r+4)break;e[r++]=248|o>>24,e[r++]=128|o>>18&63,e[r++]=128|o>>12&63,e[r++]=128|o>>6&63,e[r++]=128|63&o}else{if(n<=r+5)break;e[r++]=252|o>>30,e[r++]=128|o>>24&63,e[r++]=128|o>>18&63,e[r++]=128|o>>12&63,e[r++]=128|o>>6&63,e[r++]=128|63&o}}return e[r]=0,r-f}function s(A,e,r){return b(A,E,e,r)}function Z(A){for(var e=0,r=0;r<A.length;++r){var i=A.charCodeAt(r);55296<=i&&i<=57343&&(i=65536+((1023&i)<<10)|1023&A.charCodeAt(++r)),i<=127?++e:e+=i<=2047?2:i<=65535?3:i<=2097151?4:i<=67108863?5:6}return e}\\\"undefined\\\"!=typeof TextDecoder&&new TextDecoder(\\\"utf-16le\\\");function p(){var A=function(){var e=new Error;if(!e.stack){try{throw new Error(0)}catch(A){e=A}if(!e.stack)return\\\"(no stack trace available)\\\"}return e.stack.toString()}();return d.extraStackTrace&&(A+=\\\"\\\\n\\\"+d.extraStackTrace()),A.replace(/__Z[\\\\w\\\\d_]+/g,function(A){var e=A;return A===e?A:A+\\\" [\\\"+e+\\\"]\\\"})}var y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M=65536,T=16777216,U=16777216;function S(A,e){return 0<A%e&&(A+=e-A%e),A}function O(){d.HEAP8=B=new Int8Array(y),d.HEAP16=X=new Int16Array(y),d.HEAP32=I=new Int32Array(y),d.HEAPU8=E=new Uint8Array(y),d.HEAPU16=W=new Uint16Array(y),d.HEAPU32=C=new Uint32Array(y),d.HEAPF32=G=new Float32Array(y),d.HEAPF64=V=new Float64Array(y)}function z(){var A=d.usingWasm?M:T,e=2147483648-A;if(I[D>>2]>e)return!1;var r=H;for(H=Math.max(H,U);H<I[D>>2];)H=H<=536870912?S(2*H,A):Math.min(S((3*H+2147483648)/4,A),e);var i,f=d.reallocBuffer(H);return f&&f.byteLength==H?(i=f,d.buffer=y=i,O(),!0):(H=r,!1)}R=_=D=0,N=!1,d.reallocBuffer||(d.reallocBuffer=function(A){var e;try{if(ArrayBuffer.transfer)e=ArrayBuffer.transfer(y,A);else{var r=B;e=new ArrayBuffer(A),new Int8Array(e).set(r)}}catch(A){return!1}return!!Ir(e)&&e});try{(J=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,\\\"byteLength\\\").get))(new ArrayBuffer(4))}catch(Or){J=function(A){return A.byteLength}}var j=d.TOTAL_STACK||5242880,H=d.TOTAL_MEMORY||16777216;if(H<j&&d.printErr(\\\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \\\"+H+\\\"! (TOTAL_STACK=\\\"+j+\\\")\\\"),y=d.buffer?d.buffer:new ArrayBuffer(H),O(),I[0]=1668509029,X[1]=25459,115!==E[2]||99!==E[3])throw\\\"Runtime error: expected the system to be little-endian!\\\";function x(A){for(;0<A.length;){var e=A.shift();if(\\\"function\\\"!=typeof e){var r=e.func;\\\"number\\\"==typeof r?void 0===e.arg?d.dynCall_v(r):d.dynCall_vi(r,e.arg):r(void 0===e.arg?null:e.arg)}else e()}}d.HEAP=void 0,d.buffer=y,d.HEAP8=B,d.HEAP16=X,d.HEAP32=I,d.HEAPU8=E,d.HEAPU16=W,d.HEAPU32=C,d.HEAPF32=G,d.HEAPF64=V;var P=[],L=[],K=[],q=[],$=[],AA=!1;function eA(A,e){B.set(A,e)}function rA(A,e,r){for(var i=0;i<A.length;++i)B[e++>>0]=A.charCodeAt(i);r||(B[e>>0]=0)}Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(A,e){var r=65535&A,i=65535&e;return r*i+((A>>>16)*i+r*(e>>>16)<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(A){A>>>=0;for(var e=0;e<32;e++)if(A&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(A){return A<0?Math.ceil(A):Math.floor(A)}),Math.trunc=Math.trunc;var iA=Math.abs,fA=(Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt,Math.ceil),nA=Math.floor,tA=(Math.pow,Math.imul,Math.fround,Math.round,Math.min),oA=(Math.clz32,Math.trunc,0),aA=null,cA=null;function lA(A){oA++,d.monitorRunDependencies&&d.monitorRunDependencies(oA)}function uA(A){if(oA--,d.monitorRunDependencies&&d.monitorRunDependencies(oA),0==oA&&(null!==aA&&(clearInterval(aA),aA=null),cA)){var e=cA;cA=null,e()}}d.addRunDependency=lA,d.removeRunDependency=uA,d.preloadedImages={},d.preloadedAudios={};var bA=null;F=k.GLOBAL_BASE,R=F+79664,L.push({func:function(){Zr()}},{func:function(){yr()}},{func:function(){Br()}},{func:function(){Er()}},{func:function(){pr()}},{func:function(){Xr()}});var sA=R;function dA(){return!!dA.uncaught_exception}R+=16;var kA={last:0,caught:[],infos:{},deAdjust:function(A){if(!A||kA.infos[A])return A;for(var e in kA.infos){if(kA.infos[e].adjusted===A)return e}return A},addRef:function(A){A&&kA.infos[A].refcount++},decRef:function(A){if(A){var e=kA.infos[A];h(0<e.refcount),e.refcount--,0!==e.refcount||e.rethrown||(e.destructor&&d.dynCall_vi(e.destructor,A),delete kA.infos[A],___cxa_free_exception(A))}},clearRef:function(A){A&&(kA.infos[A].refcount=0)}};var hA={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function wA(A){return d.___errno_location&&(I[d.___errno_location()>>2]=A),A}var vA={0:\\\"Success\\\",1:\\\"Not super-user\\\",2:\\\"No such file or directory\\\",3:\\\"No such process\\\",4:\\\"Interrupted system call\\\",5:\\\"I/O error\\\",6:\\\"No such device or address\\\",7:\\\"Arg list too long\\\",8:\\\"Exec format error\\\",9:\\\"Bad file number\\\",10:\\\"No children\\\",11:\\\"No more processes\\\",12:\\\"Not enough core\\\",13:\\\"Permission denied\\\",14:\\\"Bad address\\\",15:\\\"Block device required\\\",16:\\\"Mount device busy\\\",17:\\\"File exists\\\",18:\\\"Cross-device link\\\",19:\\\"No such device\\\",20:\\\"Not a directory\\\",21:\\\"Is a directory\\\",22:\\\"Invalid argument\\\",23:\\\"Too many open files in system\\\",24:\\\"Too many open files\\\",25:\\\"Not a typewriter\\\",26:\\\"Text file busy\\\",27:\\\"File too large\\\",28:\\\"No space left on device\\\",29:\\\"Illegal seek\\\",30:\\\"Read only file system\\\",31:\\\"Too many links\\\",32:\\\"Broken pipe\\\",33:\\\"Math arg out of domain of func\\\",34:\\\"Math result not representable\\\",35:\\\"File locking deadlock error\\\",36:\\\"File or path name too long\\\",37:\\\"No record locks available\\\",38:\\\"Function not implemented\\\",39:\\\"Directory not empty\\\",40:\\\"Too many symbolic links\\\",42:\\\"No message of desired type\\\",43:\\\"Identifier removed\\\",44:\\\"Channel number out of range\\\",45:\\\"Level 2 not synchronized\\\",46:\\\"Level 3 halted\\\",47:\\\"Level 3 reset\\\",48:\\\"Link number out of range\\\",49:\\\"Protocol driver not attached\\\",50:\\\"No CSI structure available\\\",51:\\\"Level 2 halted\\\",52:\\\"Invalid exchange\\\",53:\\\"Invalid request descriptor\\\",54:\\\"Exchange full\\\",55:\\\"No anode\\\",56:\\\"Invalid request code\\\",57:\\\"Invalid slot\\\",59:\\\"Bad font file fmt\\\",60:\\\"Device not a stream\\\",61:\\\"No data (for no delay io)\\\",62:\\\"Timer expired\\\",63:\\\"Out of streams resources\\\",64:\\\"Machine is not on the network\\\",65:\\\"Package not installed\\\",66:\\\"The object is remote\\\",67:\\\"The link has been severed\\\",68:\\\"Advertise error\\\",69:\\\"Srmount error\\\",70:\\\"Communication error on send\\\",71:\\\"Protocol error\\\",72:\\\"Multihop attempted\\\",73:\\\"Cross mount point (not really error)\\\",74:\\\"Trying to read unreadable message\\\",75:\\\"Value too large for defined data type\\\",76:\\\"Given log. name not unique\\\",77:\\\"f.d. invalid for this operation\\\",78:\\\"Remote address changed\\\",79:\\\"Can   access a needed shared lib\\\",80:\\\"Accessing a corrupted shared lib\\\",81:\\\".lib section in a.out corrupted\\\",82:\\\"Attempting to link in too many libs\\\",83:\\\"Attempting to exec a shared library\\\",84:\\\"Illegal byte sequence\\\",86:\\\"Streams pipe error\\\",87:\\\"Too many users\\\",88:\\\"Socket operation on non-socket\\\",89:\\\"Destination address required\\\",90:\\\"Message too long\\\",91:\\\"Protocol wrong type for socket\\\",92:\\\"Protocol not available\\\",93:\\\"Unknown protocol\\\",94:\\\"Socket type not supported\\\",95:\\\"Not supported\\\",96:\\\"Protocol family not supported\\\",97:\\\"Address family not supported by protocol family\\\",98:\\\"Address already in use\\\",99:\\\"Address not available\\\",100:\\\"Network interface is not configured\\\",101:\\\"Network is unreachable\\\",102:\\\"Connection reset by network\\\",103:\\\"Connection aborted\\\",104:\\\"Connection reset by peer\\\",105:\\\"No buffer space available\\\",106:\\\"Socket is already connected\\\",107:\\\"Socket is not connected\\\",108:\\\"Can't send after socket shutdown\\\",109:\\\"Too many references\\\",110:\\\"Connection timed out\\\",111:\\\"Connection refused\\\",112:\\\"Host is down\\\",113:\\\"Host is unreachable\\\",114:\\\"Socket already connected\\\",115:\\\"Connection already in progress\\\",116:\\\"Stale file handle\\\",122:\\\"Quota exceeded\\\",123:\\\"No medium (in tape drive)\\\",125:\\\"Operation canceled\\\",130:\\\"Previous owner died\\\",131:\\\"State not recoverable\\\"},mA={splitPath:function(A){return/^(\\\\/?|)([\\\\s\\\\S]*?)((?:\\\\.{1,2}|[^\\\\/]+?|)(\\\\.[^.\\\\/]*|))(?:[\\\\/]*)$/.exec(A).slice(1)},normalizeArray:function(A,e){for(var r=0,i=A.length-1;0<=i;i--){var f=A[i];\\\".\\\"===f?A.splice(i,1):\\\"..\\\"===f?(A.splice(i,1),r++):r&&(A.splice(i,1),r--)}if(e)for(;r;r--)A.unshift(\\\"..\\\");return A},normalize:function(A){var e=\\\"/\\\"===A.charAt(0),r=\\\"/\\\"===A.substr(-1);return(A=mA.normalizeArray(A.split(\\\"/\\\").filter(function(A){return!!A}),!e).join(\\\"/\\\"))||e||(A=\\\".\\\"),A&&r&&(A+=\\\"/\\\"),(e?\\\"/\\\":\\\"\\\")+A},dirname:function(A){var e=mA.splitPath(A),r=e[0],i=e[1];return r||i?r+(i=i&&i.substr(0,i.length-1)):\\\".\\\"},basename:function(A){if(\\\"/\\\"===A)return\\\"/\\\";var e=A.lastIndexOf(\\\"/\\\");return-1===e?A:A.substr(e+1)},extname:function(A){return mA.splitPath(A)[3]},join:function(){var A=Array.prototype.slice.call(arguments,0);return mA.normalize(A.join(\\\"/\\\"))},join2:function(A,e){return mA.normalize(A+\\\"/\\\"+e)},resolve:function(){for(var A=\\\"\\\",e=!1,r=arguments.length-1;-1<=r&&!e;r--){var i=0<=r?arguments[r]:EA.cwd();if(\\\"string\\\"!=typeof i)throw new TypeError(\\\"Arguments to path.resolve must be strings\\\");if(!i)return\\\"\\\";A=i+\\\"/\\\"+A,e=\\\"/\\\"===i.charAt(0)}return(e?\\\"/\\\":\\\"\\\")+(A=mA.normalizeArray(A.split(\\\"/\\\").filter(function(A){return!!A}),!e).join(\\\"/\\\"))||\\\".\\\"},relative:function(A,e){function r(A){for(var e=0;e<A.length&&\\\"\\\"===A[e];e++);for(var r=A.length-1;0<=r&&\\\"\\\"===A[r];r--);return r<e?[]:A.slice(e,r-e+1)}A=mA.resolve(A).substr(1),e=mA.resolve(e).substr(1);for(var i=r(A.split(\\\"/\\\")),f=r(e.split(\\\"/\\\")),n=Math.min(i.length,f.length),t=n,o=0;o<n;o++)if(i[o]!==f[o]){t=o;break}var a=[];for(o=t;o<i.length;o++)a.push(\\\"..\\\");return(a=a.concat(f.slice(t))).join(\\\"/\\\")}},gA={ttys:[],init:function(){},shutdown:function(){},register:function(A,e){gA.ttys[A]={input:[],output:[],ops:e},EA.registerDevice(A,gA.stream_ops)},stream_ops:{open:function(A){var e=gA.ttys[A.node.rdev];if(!e)throw new EA.ErrnoError(hA.ENODEV);A.tty=e,A.seekable=!1},close:function(A){A.tty.ops.flush(A.tty)},flush:function(A){A.tty.ops.flush(A.tty)},read:function(A,e,r,i,f){if(!A.tty||!A.tty.ops.get_char)throw new EA.ErrnoError(hA.ENXIO);for(var n=0,t=0;t<i;t++){var o;try{o=A.tty.ops.get_char(A.tty)}catch(A){throw new EA.ErrnoError(hA.EIO)}if(void 0===o&&0===n)throw new EA.ErrnoError(hA.EAGAIN);if(null==o)break;n++,e[r+t]=o}return n&&(A.node.timestamp=Date.now()),n},write:function(A,e,r,i,f){if(!A.tty||!A.tty.ops.put_char)throw new EA.ErrnoError(hA.ENXIO);for(var n=0;n<i;n++)try{A.tty.ops.put_char(A.tty,e[r+n])}catch(A){throw new EA.ErrnoError(hA.EIO)}return i&&(A.node.timestamp=Date.now()),n}},default_tty_ops:{get_char:function(A){if(!A.input.length){var e=null;if(o){var r=new Buffer(256),i=0,f=\\\"win32\\\"!=process.platform,n=process.stdin.fd;if(f){var t=!1;try{n=ur.openSync(\\\"/dev/stdin\\\",\\\"r\\\"),t=!0}catch(A){}}try{i=ur.readSync(n,r,0,256,null)}catch(A){if(-1==A.toString().indexOf(\\\"EOF\\\"))throw A;i=0}t&&ur.closeSync(n),e=0<i?r.slice(0,i).toString(\\\"utf-8\\\"):null}else\\\"undefined\\\"!=typeof window&&\\\"function\\\"==typeof window.prompt?null!==(e=window.prompt(\\\"Input: \\\"))&&(e+=\\\"\\\\n\\\"):\\\"function\\\"==typeof readline&&null!==(e=readline())&&(e+=\\\"\\\\n\\\");if(!e)return null;A.input=dr(e,!0)}return A.input.shift()},put_char:function(A,e){null===e||10===e?(d.print(c(A.output,0)),A.output=[]):0!=e&&A.output.push(e)},flush:function(A){A.output&&0<A.output.length&&(d.print(c(A.output,0)),A.output=[])}},default_tty1_ops:{put_char:function(A,e){null===e||10===e?(d.printErr(c(A.output,0)),A.output=[]):0!=e&&A.output.push(e)},flush:function(A){A.output&&0<A.output.length&&(d.printErr(c(A.output,0)),A.output=[])}}},ZA={ops_table:null,mount:function(A){return ZA.createNode(null,\\\"/\\\",16895,0)},createNode:function(A,e,r,i){if(EA.isBlkdev(r)||EA.isFIFO(r))throw new EA.ErrnoError(hA.EPERM);ZA.ops_table||(ZA.ops_table={dir:{node:{getattr:ZA.node_ops.getattr,setattr:ZA.node_ops.setattr,lookup:ZA.node_ops.lookup,mknod:ZA.node_ops.mknod,rename:ZA.node_ops.rename,unlink:ZA.node_ops.unlink,rmdir:ZA.node_ops.rmdir,readdir:ZA.node_ops.readdir,symlink:ZA.node_ops.symlink},stream:{llseek:ZA.stream_ops.llseek}},file:{node:{getattr:ZA.node_ops.getattr,setattr:ZA.node_ops.setattr},stream:{llseek:ZA.stream_ops.llseek,read:ZA.stream_ops.read,write:ZA.stream_ops.write,allocate:ZA.stream_ops.allocate,mmap:ZA.stream_ops.mmap,msync:ZA.stream_ops.msync}},link:{node:{getattr:ZA.node_ops.getattr,setattr:ZA.node_ops.setattr,readlink:ZA.node_ops.readlink},stream:{}},chrdev:{node:{getattr:ZA.node_ops.getattr,setattr:ZA.node_ops.setattr},stream:EA.chrdev_stream_ops}});var f=EA.createNode(A,e,r,i);return EA.isDir(f.mode)?(f.node_ops=ZA.ops_table.dir.node,f.stream_ops=ZA.ops_table.dir.stream,f.contents={}):EA.isFile(f.mode)?(f.node_ops=ZA.ops_table.file.node,f.stream_ops=ZA.ops_table.file.stream,f.usedBytes=0,f.contents=null):EA.isLink(f.mode)?(f.node_ops=ZA.ops_table.link.node,f.stream_ops=ZA.ops_table.link.stream):EA.isChrdev(f.mode)&&(f.node_ops=ZA.ops_table.chrdev.node,f.stream_ops=ZA.ops_table.chrdev.stream),f.timestamp=Date.now(),A&&(A.contents[e]=f),f},getFileDataAsRegularArray:function(A){if(A.contents&&A.contents.subarray){for(var e=[],r=0;r<A.usedBytes;++r)e.push(A.contents[r]);return e}return A.contents},getFileDataAsTypedArray:function(A){return A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array},expandFileStorage:function(A,e){if(A.contents&&A.contents.subarray&&e>A.contents.length&&(A.contents=ZA.getFileDataAsRegularArray(A),A.usedBytes=A.contents.length),!A.contents||A.contents.subarray){var r=A.contents?A.contents.length:0;if(e<=r)return;e=Math.max(e,r*(r<1048576?2:1.125)|0),0!=r&&(e=Math.max(e,256));var i=A.contents;return A.contents=new Uint8Array(e),void(0<A.usedBytes&&A.contents.set(i.subarray(0,A.usedBytes),0))}for(!A.contents&&0<e&&(A.contents=[]);A.contents.length<e;)A.contents.push(0)},resizeFileStorage:function(A,e){if(A.usedBytes!=e){if(0==e)return A.contents=null,void(A.usedBytes=0);if(!A.contents||A.contents.subarray){var r=A.contents;return A.contents=new Uint8Array(new ArrayBuffer(e)),r&&A.contents.set(r.subarray(0,Math.min(e,A.usedBytes))),void(A.usedBytes=e)}if(A.contents||(A.contents=[]),A.contents.length>e)A.contents.length=e;else for(;A.contents.length<e;)A.contents.push(0);A.usedBytes=e}},node_ops:{getattr:function(A){var e={};return e.dev=EA.isChrdev(A.mode)?A.id:1,e.ino=A.id,e.mode=A.mode,e.nlink=1,e.uid=0,e.gid=0,e.rdev=A.rdev,EA.isDir(A.mode)?e.size=4096:EA.isFile(A.mode)?e.size=A.usedBytes:EA.isLink(A.mode)?e.size=A.link.length:e.size=0,e.atime=new Date(A.timestamp),e.mtime=new Date(A.timestamp),e.ctime=new Date(A.timestamp),e.blksize=4096,e.blocks=Math.ceil(e.size/e.blksize),e},setattr:function(A,e){void 0!==e.mode&&(A.mode=e.mode),void 0!==e.timestamp&&(A.timestamp=e.timestamp),void 0!==e.size&&ZA.resizeFileStorage(A,e.size)},lookup:function(A,e){throw EA.genericErrors[hA.ENOENT]},mknod:function(A,e,r,i){return ZA.createNode(A,e,r,i)},rename:function(A,e,r){if(EA.isDir(A.mode)){var i;try{i=EA.lookupNode(e,r)}catch(A){}if(i)for(var f in i.contents)throw new EA.ErrnoError(hA.ENOTEMPTY)}delete A.parent.contents[A.name],A.name=r,(e.contents[r]=A).parent=e},unlink:function(A,e){delete A.contents[e]},rmdir:function(A,e){var r=EA.lookupNode(A,e);for(var i in r.contents)throw new EA.ErrnoError(hA.ENOTEMPTY);delete A.contents[e]},readdir:function(A){var e=[\\\".\\\",\\\"..\\\"];for(var r in A.contents)A.contents.hasOwnProperty(r)&&e.push(r);return e},symlink:function(A,e,r){var i=ZA.createNode(A,e,41471,0);return i.link=r,i},readlink:function(A){if(!EA.isLink(A.mode))throw new EA.ErrnoError(hA.EINVAL);return A.link}},stream_ops:{read:function(A,e,r,i,f){var n=A.node.contents;if(f>=A.node.usedBytes)return 0;var t=Math.min(A.node.usedBytes-f,i);if(h(0<=t),8<t&&n.subarray)e.set(n.subarray(f,f+t),r);else for(var o=0;o<t;o++)e[r+o]=n[f+o];return t},write:function(A,e,r,i,f,n){if(!i)return 0;var t=A.node;if(t.timestamp=Date.now(),e.subarray&&(!t.contents||t.contents.subarray)){if(n)return t.contents=e.subarray(r,r+i),t.usedBytes=i;if(0===t.usedBytes&&0===f)return t.contents=new Uint8Array(e.subarray(r,r+i)),t.usedBytes=i;if(f+i<=t.usedBytes)return t.contents.set(e.subarray(r,r+i),f),i}if(ZA.expandFileStorage(t,f+i),t.contents.subarray&&e.subarray)t.contents.set(e.subarray(r,r+i),f);else for(var o=0;o<i;o++)t.contents[f+o]=e[r+o];return t.usedBytes=Math.max(t.usedBytes,f+i),i},llseek:function(A,e,r){var i=e;if(1===r?i+=A.position:2===r&&EA.isFile(A.node.mode)&&(i+=A.node.usedBytes),i<0)throw new EA.ErrnoError(hA.EINVAL);return i},allocate:function(A,e,r){ZA.expandFileStorage(A.node,e+r),A.node.usedBytes=Math.max(A.node.usedBytes,e+r)},mmap:function(A,e,r,i,f,n,t){if(!EA.isFile(A.node.mode))throw new EA.ErrnoError(hA.ENODEV);var o,a,c=A.node.contents;if(2&t||c.buffer!==e&&c.buffer!==e.buffer){if((0<f||f+i<A.node.usedBytes)&&(c=c.subarray?c.subarray(f,f+i):Array.prototype.slice.call(c,f,f+i)),a=!0,!(o=Gr(i)))throw new EA.ErrnoError(hA.ENOMEM);e.set(c,o)}else a=!1,o=c.byteOffset;return{ptr:o,allocated:a}},msync:function(A,e,r,i,f){if(!EA.isFile(A.node.mode))throw new EA.ErrnoError(hA.ENODEV);if(2&f)return 0;ZA.stream_ops.write(A,e,0,i,r,!1);return 0}}},pA={dbs:{},indexedDB:function(){if(\\\"undefined\\\"!=typeof indexedDB)return indexedDB;var A=null;return\\\"object\\\"==typeof window&&(A=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB),h(A,\\\"IDBFS used, but indexedDB not supported\\\"),A},DB_VERSION:21,DB_STORE_NAME:\\\"FILE_DATA\\\",mount:function(A){return ZA.mount.apply(null,arguments)},syncfs:function(e,n,t){pA.getLocalSet(e,function(A,f){if(A)return t(A);pA.getRemoteSet(e,function(A,e){if(A)return t(A);var r=n?e:f,i=n?f:e;pA.reconcile(r,i,t)})})},getDB:function(A,e){var r,i=pA.dbs[A];if(i)return e(null,i);try{r=pA.indexedDB().open(A,pA.DB_VERSION)}catch(A){return e(A)}if(!r)return e(\\\"Unable to connect to IndexedDB\\\");r.onupgradeneeded=function(A){var e,r=A.target.result,i=A.target.transaction;(e=r.objectStoreNames.contains(pA.DB_STORE_NAME)?i.objectStore(pA.DB_STORE_NAME):r.createObjectStore(pA.DB_STORE_NAME)).indexNames.contains(\\\"timestamp\\\")||e.createIndex(\\\"timestamp\\\",\\\"timestamp\\\",{unique:!1})},r.onsuccess=function(){i=r.result,pA.dbs[A]=i,e(null,i)},r.onerror=function(A){e(this.error),A.preventDefault()}},getLocalSet:function(A,e){var r={};function i(A){return\\\".\\\"!==A&&\\\"..\\\"!==A}function f(e){return function(A){return mA.join2(e,A)}}for(var n=EA.readdir(A.mountpoint).filter(i).map(f(A.mountpoint));n.length;){var t,o=n.pop();try{t=EA.stat(o)}catch(A){return e(A)}EA.isDir(t.mode)&&n.push.apply(n,EA.readdir(o).filter(i).map(f(o))),r[o]={timestamp:t.mtime}}return e(null,{type:\\\"local\\\",entries:r})},getRemoteSet:function(A,i){var f={};pA.getDB(A.mountpoint,function(A,r){if(A)return i(A);try{var e=r.transaction([pA.DB_STORE_NAME],\\\"readonly\\\");e.onerror=function(A){i(this.error),A.preventDefault()},e.objectStore(pA.DB_STORE_NAME).index(\\\"timestamp\\\").openKeyCursor().onsuccess=function(A){var e=A.target.result;if(!e)return i(null,{type:\\\"remote\\\",db:r,entries:f});f[e.primaryKey]={timestamp:e.key},e.continue()}}catch(A){return i(A)}})},loadLocalEntry:function(A,e){var r,i;try{i=EA.lookupPath(A).node,r=EA.stat(A)}catch(A){return e(A)}return EA.isDir(r.mode)?e(null,{timestamp:r.mtime,mode:r.mode}):EA.isFile(r.mode)?(i.contents=ZA.getFileDataAsTypedArray(i),e(null,{timestamp:r.mtime,mode:r.mode,contents:i.contents})):e(new Error(\\\"node type not supported\\\"))},storeLocalEntry:function(A,e,r){try{if(EA.isDir(e.mode))EA.mkdir(A,e.mode);else{if(!EA.isFile(e.mode))return r(new Error(\\\"node type not supported\\\"));EA.writeFile(A,e.contents,{encoding:\\\"binary\\\",canOwn:!0})}EA.chmod(A,e.mode),EA.utime(A,e.timestamp,e.timestamp)}catch(A){return r(A)}r(null)},removeLocalEntry:function(A,e){try{EA.lookupPath(A);var r=EA.stat(A);EA.isDir(r.mode)?EA.rmdir(A):EA.isFile(r.mode)&&EA.unlink(A)}catch(A){return e(A)}e(null)},loadRemoteEntry:function(A,e,r){var i=A.get(e);i.onsuccess=function(A){r(null,A.target.result)},i.onerror=function(A){r(this.error),A.preventDefault()}},storeRemoteEntry:function(A,e,r,i){var f=A.put(r,e);f.onsuccess=function(){i(null)},f.onerror=function(A){i(this.error),A.preventDefault()}},removeRemoteEntry:function(A,e,r){var i=A.delete(e);i.onsuccess=function(){r(null)},i.onerror=function(A){r(this.error),A.preventDefault()}},reconcile:function(i,f,e){var n=0,t=[];Object.keys(i.entries).forEach(function(A){var e=i.entries[A],r=f.entries[A];(!r||e.timestamp>r.timestamp)&&(t.push(A),n++)});var r=[];if(Object.keys(f.entries).forEach(function(A){f.entries[A];i.entries[A]||(r.push(A),n++)}),!n)return e(null);var o=0,A=(\\\"remote\\\"===i.type?i.db:f.db).transaction([pA.DB_STORE_NAME],\\\"readwrite\\\"),a=A.objectStore(pA.DB_STORE_NAME);function c(A){return A?c.errored?void 0:(c.errored=!0,e(A)):++o>=n?e(null):void 0}A.onerror=function(A){c(this.error),A.preventDefault()},t.sort().forEach(function(r){\\\"local\\\"===f.type?pA.loadRemoteEntry(a,r,function(A,e){if(A)return c(A);pA.storeLocalEntry(r,e,c)}):pA.loadLocalEntry(r,function(A,e){if(A)return c(A);pA.storeRemoteEntry(a,r,e,c)})}),r.sort().reverse().forEach(function(A){\\\"local\\\"===f.type?pA.removeLocalEntry(A,c):pA.removeRemoteEntry(a,A,c)})}},yA={isWindows:!(bA=\\\"data:application/octet-stream;base64,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xQAAALkAAADJAAAAbgAAAJoAAAB6AAAAiQAAAIsAAACNAAAAnQAAAGsAAACLAAAAfgAAAGsAAACLAAAAfgAAAD8AAACYAAAAmAAAAG8AAACNAAAAmQAAAG8AAABbAAAAqwAAAIYAAACNAAAAeQAAAIwAAAA9AAAAmgAAAHkAAACMAAAAPQAAAJoAAABvAAAAbwAAAH0AAABuAAAAbgAAAF4AAAB8AAAAbAAAAHwAAABrAAAAfQAAAI0AAACzAAAAmQAAAH0AAABrAAAAfQAAAI0AAACzAAAAmQAAAH0AAABrAAAAfQAAAI0AAACzAAAAmQAAAH0AAACMAAAAiwAAALYAAAC2AAAAmAAAAIgAAACYAAAAiAAAAJkAAACIAAAAiwAAAG8AAACIAAAAiwAAAG8AAACbAAAAmgAAAIsAAACZAAAAiwAAAHsAAAB7AAAAPwAAAJkAAACmAAAAtwAAAIwAAACIAAAAmQAAAJoAAACmAAAAtwAAAIwAAACIAAAAmQAAAJoAAACmAAAAtwAAAIwAAACIAAAAmQAAAJoAAACqAAAAmQAAAHsAAAB7AAAAawAAAHkAAABrAAAAeQAAAKcAAACXAAAAtwAAAIwAAACXAAAAtwAAAIwAAACqAAAAmgAAAIsAAACZAAAAiwAAAHsAAAB7AAAAPwAAAHwAAACmAAAAtwAAAIwAAACIAAAAmQAAAJoAAACmAAAAtwAAAIwAAACIAAAAmQAAAJoAAACmAAAAtwAAAIwAAACIAAAAmQAAAJoAAACqAAAAmQAAAIoAAACKAAAAegAAAHkAAAB6AAAAeQAAAKcAAACXAAAAtwAAAIwAAACXAAAAtwAAAIwAAACNAAAAbwAAAIwAAACMAAAAjAAAAIwAAACKAAAAmQAAAIgAAACnAAAAmAAAAJgAAABrAAAApwAAAFsAAAB6AAAAawAAAKcAAABrAAAApwAAAFsAAABrAAAAawAAAKcAAACZAAAAmQAAAJkAAADIAAAAuQAAAKAAAACaAAAAmgAAAJoAAACMAAAAXAAAAIkAAACKAAAAjAAAAJgAAACKAAAAiwAAAJkAAABKAAAAlQAAAFwAAACLAAAAawAAAHoAAACYAAAAjAAAALMAAACmAAAAtgAAAIwAAADjAAAAegAAAMUAAACaAAAAxAAAAMQAAACnAAAAmgAAAJgAAACnAAAAtgAAALYAAACGAAAAlQAAAIgAAACZAAAAeQAAAIgAAACJAAAAqQAAAMIAAACmAAAApwAAAJoAAACnAAAAiQAAALYAAACaAAAAxAAAAKcAAACnAAAAmgAAAJgAAACnAAAAtgAAALYAAACGAAAAlQAAAIgAAACZAAAAeQAAAIgAAAB6AAAAqQAAANAAAACmAAAApwAAAJoAAACYAAAApwAAALYAAABuAAAAbgAAAHwAAAB9AAAAjAAAAJkAAAB9AAAAfwAAAIwAAABtAAAAbwAAAI8AAAB/AAAAbwAAAE8AAABsAAAAewAAAD8AAAB9AAAAbgAAAF4AAABuAAAAXwAAAE8AAAB9AAAAbwAAAG4AAABOAAAAbgAAAG8AAABvAAAAXwAAAF4AAABsAAAAewAAAGwAAAB9AAAAbgAAAHwAAABuAAAAXwAAAF4AAAB9AAAAbwAAAG8AAABPAAAAfQAAAH4AAABvAAAAbwAAAE8AAABsAAAAewAAAF0AAACZAAAAigAAAIoAAAB8AAAAigAAAF4AAADgAAAApwAAAHoAAABeAAAAigAAALYAAACaAAAAlQAAAGsAAACnAAAAmgAAAJUAAABcAAAApwAAAJoAAAC4AAAAmgAAALcAAAC4AAAAmgAAAIsAAACaAAAAmgAAAJoAAACLAAAAmgAAAJoAAACMAAAAxgAAAKkAAADGAAAAlQAAAIYAAAAAAAAAEAkAAEsBAABSAQAAUwEAAAYAAAAAAAAAAAAAACAAAAAaAAAAFQAAABEAAAANAAAACQAAAAUAAAACAAAAAAAAAP7////7////9/////P////v////6////+b////g////5v///+v////v////8/////f////7/////v///wAAAAACAAAABQAAAAkAAAANAAAAEQAAABUAAAAaAAAAIAAAAADw//+a+f//cvz//4r9//8e/v//ev7//8X+//8A////xf7//3r+//8e/v//iv3//3L8//+a+f//APD//wAAAAADAAAAAwAAAAIAAAAAAAAAAwAAAAQAAAAEAAAAAAAAAAEAAAAAAAAAAgAAAAEAAAACAAAAAAAAAAMAAAABAAAAAwAAAAIAAAADAAAAAQAAAAAAAAACAAAAAAAAAAIAAAABAAAAAwAAAAAAAAADAAAAAQAAAAMAAAACAAAAAgAAwAMAAMAEAADA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QQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAHsAAAB8AAAAfQAAAH4AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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ZXJzaW9uOiAAZmxhZ3M6IABOU3QzX18yMTViYXNpY19zdHJpbmdidWZJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQBOU3QzX18yMTliYXNpY19vc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUATjRoZWlmOUJveEhlYWRlckUAbV91dWlkX3R5cGUuc2l6ZSgpID09IDE2AGJveC5jYwBwcmVwZW5kX2hlYWRlcgAobV9mbGFncyAmIH4weDAwRkZGRkZGKSA9PSAwAE40aGVpZjNCb3hFAGZ0eXAgYm94IHRvbyBzbWFsbCAobGVzcyB0aGFuIDggYnl0ZXMpAG1ham9yIGJyYW5kOiAAbWlub3IgdmVyc2lvbjogAGNvbXBhdGlibGUgYnJhbmRzOiAATjRoZWlmOEJveF9mdHlwRQBNYXhpbXVtIG51bWJlciBvZiBjaGlsZCBib3hlcyAAIGV4Y2VlZGVkLgBOU3QzX18yMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQBCb3ggc2l6ZSAoACBieXRlcykgc21hbGxlciB0aGFuIGhlYWRlciBzaXplICgAIGJ5dGVzKQBTZWN1cml0eSBsaW1pdCBmb3IgbWF4aW11bSBuZXN0aW5nIG9mIGJveGVzIGhhcyBiZWVuIGV4Y2VlZGVkAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjNCb3hFTlNfOWFsbG9jYXRvcklTMl9FRUVFAHdyaXRlAGJpdHNfcGVyX2NoYW5uZWw6IAAsAE40aGVpZjhCb3hfcGl4aUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9waXhpRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBwcm9maWxlIHNpemU6IABONGhlaWYxN2NvbG9yX3Byb2ZpbGVfcmF3RQBONGhlaWYxM2NvbG9yX3Byb2ZpbGVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjE3Y29sb3JfcHJvZmlsZV9yYXdFTlNfOWFsbG9jYXRvcklTMl9FRUVFAGNvbG91cl9wcmltYXJpZXM6IAB0cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3M6IABtYXRyaXhfY29lZmZpY2llbnRzOiAAZnVsbF9yYW5nZV9mbGFnOiAATjRoZWlmMThjb2xvcl9wcm9maWxlX25jbHhFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjE4Y29sb3JfcHJvZmlsZV9uY2x4RU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBtX2NvbG9yX3Byb2ZpbGUAY29sb3VyX3R5cGU6IABubyBjb2xvciBwcm9maWxlCgBONGhlaWY4Qm94X2NvbHJFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjhCb3hfY29sckVOU185YWxsb2NhdG9ySVMyX0VFRUUAbG9jYXRpb246IABONGhlaWY3Qm94X3VybEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmN0JveF91cmxFTlNfOWFsbG9jYXRvcklTMl9FRUVFAE40aGVpZjhCb3hfZHJlZkUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9kcmVmRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBONGhlaWY4Qm94X2RpbmZFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjhCb3hfZGluZkVOU185YWxsb2NhdG9ySVMyX0VFRUUAZ3JvdXAgdHlwZTogAHwgZ3JvdXAgaWQ6IAB8IGVudGl0eSBJRHM6IAAgAE40aGVpZjhCb3hfZ3JwbEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9ncnBsRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBudW1iZXIgb2YgZGF0YSBieXRlczogAE40aGVpZjhCb3hfaWRhdEUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9pZGF0RU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBzZXFfcHJvZmlsZTogAHNlcV9sZXZlbF9pZHhfMDogAGhpZ2hfYml0ZGVwdGg6IAB0d2VsdmVfYml0OiAAY2hyb21hX3N1YnNhbXBsaW5nX3g6IABjaHJvbWFfc3Vic2FtcGxpbmdfeTogAGNocm9tYV9zYW1wbGVfcG9zaXRpb246IABpbml0aWFsX3ByZXNlbnRhdGlvbl9kZWxheTogAG5vdCBwcmVzZW50CgBjb25maWcgT0JVczoATjRoZWlmOEJveF9hdjFDRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUlONGhlaWY4Qm94X2F2MUNFTlNfOWFsbG9jYXRvcklTMl9FRUVFAGNvbmZpZ3VyYXRpb25fdmVyc2lvbjogAGdlbmVyYWxfcHJvZmlsZV9zcGFjZTogAGdlbmVyYWxfdGllcl9mbGFnOiAAZ2VuZXJhbF9wcm9maWxlX2lkYzogAGdlbmVyYWxfcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdzOiAAZ2VuZXJhbF9jb25zdHJhaW50X2luZGljYXRvcl9mbGFnczogAGdlbmVyYWxfbGV2ZWxfaWRjOiAAbWluX3NwYXRpYWxfc2VnbWVudGF0aW9uX2lkYzogAHBhcmFsbGVsaXNtX3R5cGU6IABjaHJvbWFfZm9ybWF0OiAAYml0X2RlcHRoX2x1bWE6IABiaXRfZGVwdGhfY2hyb21hOiAAYXZnX2ZyYW1lX3JhdGU6IABjb25zdGFudF9mcmFtZV9yYXRlOiAAbnVtX3RlbXBvcmFsX2xheWVyczogAHRlbXBvcmFsX2lkX25lc3RlZDogAGxlbmd0aF9zaXplOiAAPGFycmF5PgoAYXJyYXlfY29tcGxldGVuZXNzOiAATkFMX3VuaXRfdHlwZTogAE40aGVpZjhCb3hfaHZjQ0UATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9odmNDRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQByZWZlcmVuY2Ugd2l0aCB0eXBlICcAJwAgZnJvbSBJRDogACB0byBJRHM6IABONGhlaWY4Qm94X2lyZWZFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjhCb3hfaXJlZkVOU185YWxsb2NhdG9ySVMyX0VFRUUAY2xlYW5fYXBlcnR1cmU6IAAvACB4IABvZmZzZXQ6IAAgOyAATjRoZWlmOEJveF9jbGFwRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUlONGhlaWY4Qm94X2NsYXBFTlNfOWFsbG9jYXRvcklTMl9FRUVFAG1pcnJvciBheGlzOiAAdmVydGljYWwKAGhvcml6b250YWwKAE40aGVpZjhCb3hfaW1pckUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9pbWlyRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQByb3RhdGlvbjogACBkZWdyZWVzIChDQ1cpCgBONGhlaWY4Qm94X2lyb3RFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjhCb3hfaXJvdEVOU185YWxsb2NhdG9ySVMyX0VFRUUAYXV4IHR5cGU6IABhdXggc3VidHlwZXM6IABONGhlaWY4Qm94X2F1eENFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjhCb3hfYXV4Q0VOU185YWxsb2NhdG9ySVMyX0VFRUUAaW1hZ2Ugd2lkdGg6IABpbWFnZSBoZWlnaHQ6IABONGhlaWY4Qm94X2lzcGVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjhCb3hfaXNwZUVOU185YWxsb2NhdG9ySVMyX0VFRUUAYXNzb2NpYXRpb25zIGZvciBpdGVtIElEOiAAcHJvcGVydHkgaW5kZXg6IAAgKGVzc2VudGlhbDogAE40aGVpZjhCb3hfaXBtYUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9pcG1hRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBONGhlaWY4Qm94X2lwY29FAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjhCb3hfaXBjb0VOU185YWxsb2NhdG9ySVMyX0VFRUUATjRoZWlmOEJveF9pcHJwRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUlONGhlaWY4Qm94X2lwcnBFTlNfOWFsbG9jYXRvcklTMl9FRUVFAG1pbWUAdXJpIABpdGVtX0lEOiAAaXRlbV9wcm90ZWN0aW9uX2luZGV4OiAAaXRlbV90eXBlOiAAaXRlbV9uYW1lOiAAY29udGVudF90eXBlOiAAY29udGVudF9lbmNvZGluZzogAGl0ZW0gdXJpIHR5cGU6IABoaWRkZW4gaXRlbTogAE40aGVpZjhCb3hfaW5mZUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9pbmZlRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBONGhlaWY4Qm94X2lpbmZFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjhCb3hfaWluZkVOU185YWxsb2NhdG9ySVMyX0VFRUUAaWxvYyBib3ggY29udGFpbnMgACBpdGVtcywgd2hpY2ggZXhjZWVkcyB0aGUgc2VjdXJpdHkgbGltaXQgb2YgACBpdGVtcy4ATnVtYmVyIG9mIGV4dGVudHMgaW4gaWxvYyBib3ggKAApIGV4Y2VlZHMgc2VjdXJpdHkgbGltaXQgKABpdGVtIElEOiAAICBjb25zdHJ1Y3Rpb24gbWV0aG9kOiAAICBkYXRhX3JlZmVyZW5jZV9pbmRleDogACAgYmFzZV9vZmZzZXQ6IAAgIGV4dGVudHM6IAA7aW5kZXg9AE40aGVpZjhCb3hfaWxvY0UATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9pbG9jRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBtX2l0ZW1fSUQgPD0gMHhGRkZGAE40aGVpZjhCb3hfcGl0bUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9waXRtRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBwcmVfZGVmaW5lZDogAGhhbmRsZXJfdHlwZTogAG5hbWU6IABONGhlaWY4Qm94X2hkbHJFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjhCb3hfaGRsckVOU185YWxsb2NhdG9ySVMyX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEJveF9tZXRhRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUlONGhlaWY4Qm94X2Z0eXBFTlNfOWFsbG9jYXRvcklTMl9FRUVFAEJveCBzaXplIAAgZXhjZWVkcyBzZWN1cml0eSBsaW1pdC4ATjRoZWlmOEJveF9tZXRhRQBpbG9jIGJveCBjb250YWluZWQgACBieXRlcywgdG90YWwgbWVtb3J5IHNpemUgd291bGQgYmUgACBieXRlcywgZXhjZWVkaW5nIHRoZSBzZWN1cml0eSBsaW1pdCBvZiAAIGJ5dGVzAGlsb2MgZGF0YSBwb2ludGVycyBvdXQgb2YgYWxsb3dlZCByYW5nZQBFeHRlbnQgaW4gaWxvYyBib3ggcmVmZXJlbmNlcyBkYXRhIG91dHNpZGUgb2YgZmlsZSBib3VuZHMgAChwb2ludHMgdG8gZmlsZSBwb3NpdGlvbiAAc3VjY2VzcwByZWFkX2RhdGEAaWRhdCBib3ggcmVmZXJlbmNlZCBpbiBpcmVmIGJveCBpcyBub3QgcHJlc2VudCBpbiBmaWxlAEl0ZW0gY29uc3RydWN0aW9uIG1ldGhvZCAAIG5vdCBpbXBsZW1lbnRlZABpZGF0IGJveCBjb250YWluZWQgAEl0ZW0gKElEPQApIGhhcyBubyBwcm9wZXJ0aWVzIGFzc2lnbmVkIHRvIGl0IGluIGlwbWEgYm94AE5vbmV4aXN0aW5nIHByb3BlcnR5IChpbmRleD0AKSBmb3IgaXRlbSAAIElEPQAgcmVmZXJlbmNlZCBpbiBpcG1hIGJveABVbmtub3duIGVycm9yAGVycm9yLmNjAGdldF9lcnJvcl9zdHJpbmcAQ29sb3IgcHJvZmlsZSBkb2VzIG5vdCBleGlzdABFcnJvciBkdXJpbmcgZW5jb2Rpbmcgb3Igd3JpdGluZyBvdXRwdXQgZmlsZQBFbmNvZGVyIHBsdWdpbiBnZW5lcmF0ZWQgYW4gZXJyb3IARGVjb2RlciBwbHVnaW4gZ2VuZXJhdGVkIGFuIGVycm9yAE1lbW9yeSBhbGxvY2F0aW9uIGVycm9yAFVzYWdlIGVycm9yAFVuc3VwcG9ydGVkIGZlYXR1cmUAVW5zdXBwb3J0ZWQgZmlsZS10eXBlAEludmFsaWQgaW5wdXQASW5wdXQgZmlsZSBkb2VzIG5vdCBleGlzdABDYW5ub3Qgd3JpdGUgb3V0cHV0IGRhdGEAVW5zdXBwb3J0ZWQgYml0IGRlcHRoAFVuc3VwcG9ydGVkIGl0ZW0gY29uc3RydWN0aW9uIG1ldGhvZABVbnN1cHBvcnRlZCBjb2xvciBjb252ZXJzaW9uAFVuc3VwcG9ydGVkIGRhdGEgdmVyc2lvbgBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlAFVuc3VwcG9ydGVkIGNvZGVjAEludmFsaWQgcGFyYW1ldGVyIHZhbHVlAFVuc3VwcG9ydGVkIHBhcmFtZXRlcgBUaGUgdmVyc2lvbiBvZiB0aGUgcGFzc2VkIHdyaXRlciBpcyBub3Qgc3VwcG9ydGVkAFRoZSB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQgcGx1Z2luIGlzIG5vdCBzdXBwb3J0ZWQATm9uLWV4aXN0aW5nIGltYWdlIGNoYW5uZWwgcmVmZXJlbmNlZABOVUxMIGFyZ3VtZW50IHJlY2VpdmVkAE5vbi1leGlzdGluZyBpdGVtIElEIHJlZmVyZW5jZWQAU2VjdXJpdHkgbGltaXQgZXhjZWVkZWQASW52YWxpZCBwaXhpIGJveABJbnZhbGlkIGltYWdlIHNpemUASW52YWxpZCBmcmFjdGlvbmFsIG51bWJlcgBXcm9uZyB0aWxlIGltYWdlIGNocm9tYSBmb3JtYXQAVW5rbm93biBjb2xvciBwcm9maWxlIHR5cGUATm8gb3IgaW52YWxpZCBwcmltYXJ5IGl0ZW0AVHlwZSBvZiBhdXhpbGlhcnkgaW1hZ2UgdW5zcGVjaWZpZWQAT3ZlcmxheSBpbWFnZSBvdXRzaWRlIG9mIGNhbnZhcyBhcmVhAEludmFsaWQgb3ZlcmxheSBkYXRhAEludmFsaWQgY2xlYW4tYXBlcnR1cmUgc3BlY2lmaWNhdGlvbgBJdGVtIGhhcyBubyBkYXRhAE5vIHByb3BlcnRpZXMgYXNzaWduZWQgdG8gaXRlbQAnaXBtYScgYm94IHJlZmVyZW5jZXMgYSBub24tZXhpc3RpbmcgcHJvcGVydHkATm90IGEgJ3BpY3QnIGhhbmRsZXIATm8gJ2luZmUnIGJveABObyAnaXJlZicgYm94AE5vICdpcHJwJyBib3gATm8gJ2lpbmYnIGJveABObyAnaWxvYycgYm94AE5vICdpcG1hJyBib3gATm8gJ2lwY28nIGJveABObyAncGl0bScgYm94AE5vICdhdjFDJyBib3gATm8gJ2h2Y0MnIGJveABObyAnaGRscicgYm94AE5vICdtZXRhJyBib3gATm8gJ2lkYXQnIGJveABObyAnZnR5cCcgYm94AE1pc3NpbmcgZ3JpZCBpbWFnZXMASW52YWxpZCBncmlkIGRhdGEASW52YWxpZCBib3ggc2l6ZQBVbmV4cGVjdGVkIGVuZCBvZiBmaWxlAFVuc3BlY2lmaWVkADogAEZpbGUgZG9lcyBub3QgaW5jbHVkZSBhbnkgc3VwcG9ydGVkIGJyYW5kcy4KAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjE5U3RyZWFtUmVhZGVyX21lbW9yeUVOU185YWxsb2NhdG9ySVMyX0VFRUUAaGVpZl9maWxlLmNjAEl0ZW0gd2l0aCBJRCAAIGhhcyBubyBjb21wcmVzc2VkIGRhdGEAZ2V0X2NvbXByZXNzZWRfaW1hZ2VfZGF0YQBoZWlmX2ltYWdlLmNjAGNocm9tYV9oX3N1YnNhbXBsaW5nAGNocm9tYV92X3N1YnNhbXBsaW5nAG51bV9pbnRlcmxlYXZlZF9waXhlbHNfcGVyX3BsYW5lAHdpZHRoID49IDAAYWxsb2MAaGVpZ2h0ID49IDAAYml0X2RlcHRoID49IDEAYml0X2RlcHRoIDw9IDMyAG1fYml0X2RlcHRoIDw9IDE2AGJwcCA8PSAyNTUAZ2V0X3N0b3JhZ2VfYml0c19wZXJfcGl4ZWwAaXNfY2hyb21hX3dpdGhfYWxwaGEATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmMTRIZWlmUGl4ZWxJbWFnZUVOU185YWxsb2NhdG9ySVMyX0VFRUUAQ2FuIGN1cnJlbnRseSBvbmx5IG1pcnJvciBpbWFnZXMgd2l0aCA4IGJpdHMgcGVyIHBpeGVsAENhbiBjdXJyZW50bHkgb25seSBmaWxsIGltYWdlcyB3aXRoIDggYml0cyBwZXIgcGl4ZWwAZmlsbF9SR0JfMTZiaXQAaW5fdyA+PSAwAG92ZXJsYXkAaW5faCA+PSAwAG91dF93ID49IDAAb3V0X2ggPj0gMABPdmVybGF5IGltYWdlIG91dHNpZGUgb2YgcmlnaHQgb3IgYm90dG9tIGNhbnZhcyBib3JkZXIAT3ZlcmxheSBpbWFnZSBvdXRzaWRlIG9mIGxlZnQgb3IgdG9wIGNhbnZhcyBib3JkZXIAaGVpZl9nZXRfdmVyc2lvbgBpaQBoZWlmX2dldF92ZXJzaW9uX251bWJlcgBoZWlmX2NvbnRleHRfYWxsb2MAaGVpZl9jb250ZXh0X2ZyZWUAdmlpAGhlaWZfY29udGV4dF9yZWFkX2Zyb21fbWVtb3J5AGlpaWkAaGVpZl9jb250ZXh0X2dldF9udW1iZXJfb2ZfdG9wX2xldmVsX2ltYWdlcwBpaWkAaGVpZl9qc19jb250ZXh0X2dldF9saXN0X29mX3RvcF9sZXZlbF9pbWFnZV9JRHMAaGVpZl9qc19jb250ZXh0X2dldF9pbWFnZV9oYW5kbGUAaGVpZl9qc19kZWNvZGVfaW1hZ2UAaWlpaWkAaGVpZl9pbWFnZV9oYW5kbGVfcmVsZWFzZQBoZWlmX2Vycm9yX2NvZGUAaGVpZl9lcnJvcl9PawBoZWlmX2Vycm9yX0lucHV0X2RvZXNfbm90X2V4aXN0AGhlaWZfZXJyb3JfSW52YWxpZF9pbnB1dABoZWlmX2Vycm9yX1Vuc3VwcG9ydGVkX2ZpbGV0eXBlAGhlaWZfZXJyb3JfVW5zdXBwb3J0ZWRfZmVhdHVyZQBoZWlmX2Vycm9yX1VzYWdlX2Vycm9yAGhlaWZfZXJyb3JfTWVtb3J5X2FsbG9jYXRpb25fZXJyb3IAaGVpZl9lcnJvcl9EZWNvZGVyX3BsdWdpbl9lcnJvcgBoZWlmX2Vycm9yX0VuY29kZXJfcGx1Z2luX2Vycm9yAGhlaWZfZXJyb3JfRW5jb2RpbmdfZXJyb3IAaGVpZl9lcnJvcl9Db2xvcl9wcm9maWxlX2RvZXNfbm90X2V4aXN0AGhlaWZfc3ViZXJyb3JfY29kZQBoZWlmX3N1YmVycm9yX1Vuc3BlY2lmaWVkAGhlaWZfc3ViZXJyb3JfQ2Fubm90X3dyaXRlX291dHB1dF9kYXRhAGhlaWZfc3ViZXJyb3JfRW5kX29mX2RhdGEAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX2JveF9zaXplAGhlaWZfc3ViZXJyb3JfTm9fZnR5cF9ib3gAaGVpZl9zdWJlcnJvcl9Ob19pZGF0X2JveABoZWlmX3N1YmVycm9yX05vX21ldGFfYm94AGhlaWZfc3ViZXJyb3JfTm9faGRscl9ib3gAaGVpZl9zdWJlcnJvcl9Ob19odmNDX2JveABoZWlmX3N1YmVycm9yX05vX3BpdG1fYm94AGhlaWZfc3ViZXJyb3JfTm9faXBjb19ib3gAaGVpZl9zdWJlcnJvcl9Ob19pcG1hX2JveABoZWlmX3N1YmVycm9yX05vX2lsb2NfYm94AGhlaWZfc3ViZXJyb3JfTm9faWluZl9ib3gAaGVpZl9zdWJlcnJvcl9Ob19pcHJwX2JveABoZWlmX3N1YmVycm9yX05vX2lyZWZfYm94AGhlaWZfc3ViZXJyb3JfTm9fcGljdF9oYW5kbGVyAGhlaWZfc3ViZXJyb3JfSXBtYV9ib3hfcmVmZXJlbmNlc19ub25leGlzdGluZ19wcm9wZXJ0eQBoZWlmX3N1YmVycm9yX05vX3Byb3BlcnRpZXNfYXNzaWduZWRfdG9faXRlbQBoZWlmX3N1YmVycm9yX05vX2l0ZW1fZGF0YQBoZWlmX3N1YmVycm9yX0ludmFsaWRfZ3JpZF9kYXRhAGhlaWZfc3ViZXJyb3JfTWlzc2luZ19ncmlkX2ltYWdlcwBoZWlmX3N1YmVycm9yX05vX2F2MUNfYm94AGhlaWZfc3ViZXJyb3JfSW52YWxpZF9jbGVhbl9hcGVydHVyZQBoZWlmX3N1YmVycm9yX0ludmFsaWRfb3ZlcmxheV9kYXRhAGhlaWZfc3ViZXJyb3JfT3ZlcmxheV9pbWFnZV9vdXRzaWRlX29mX2NhbnZhcwBoZWlmX3N1YmVycm9yX0F1eGlsaWFyeV9pbWFnZV90eXBlX3Vuc3BlY2lmaWVkAGhlaWZfc3ViZXJyb3JfTm9fb3JfaW52YWxpZF9wcmltYXJ5X2l0ZW0AaGVpZl9zdWJlcnJvcl9Ob19pbmZlX2JveABoZWlmX3N1YmVycm9yX1NlY3VyaXR5X2xpbWl0X2V4Y2VlZGVkAGhlaWZfc3ViZXJyb3JfVW5rbm93bl9jb2xvcl9wcm9maWxlX3R5cGUAaGVpZl9zdWJlcnJvcl9Xcm9uZ190aWxlX2ltYWdlX2Nocm9tYV9mb3JtYXQAaGVpZl9zdWJlcnJvcl9JbnZhbGlkX2ZyYWN0aW9uYWxfbnVtYmVyAGhlaWZfc3ViZXJyb3JfSW52YWxpZF9pbWFnZV9zaXplAGhlaWZfc3ViZXJyb3JfTm9uZXhpc3RpbmdfaXRlbV9yZWZlcmVuY2VkAGhlaWZfc3ViZXJyb3JfTnVsbF9wb2ludGVyX2FyZ3VtZW50AGhlaWZfc3ViZXJyb3JfTm9uZXhpc3RpbmdfaW1hZ2VfY2hhbm5lbF9yZWZlcmVuY2VkAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfcGx1Z2luX3ZlcnNpb24AaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF93cml0ZXJfdmVyc2lvbgBoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX3BhcmFtZXRlcgBoZWlmX3N1YmVycm9yX0ludmFsaWRfcGFyYW1ldGVyX3ZhbHVlAGhlaWZfc3ViZXJyb3JfSW52YWxpZF9waXhpX2JveABoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX2NvZGVjAGhlaWZfc3ViZXJyb3JfVW5zdXBwb3J0ZWRfaW1hZ2VfdHlwZQBoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX2RhdGFfdmVyc2lvbgBoZWlmX3N1YmVycm9yX1Vuc3VwcG9ydGVkX2NvbG9yX2NvbnZlcnNpb24AaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF9pdGVtX2NvbnN0cnVjdGlvbl9tZXRob2QAaGVpZl9zdWJlcnJvcl9VbnN1cHBvcnRlZF9iaXRfZGVwdGgAaGVpZl9jb21wcmVzc2lvbl9mb3JtYXQAaGVpZl9jb21wcmVzc2lvbl91bmRlZmluZWQAaGVpZl9jb21wcmVzc2lvbl9IRVZDAGhlaWZfY29tcHJlc3Npb25fQVZDAGhlaWZfY29tcHJlc3Npb25fSlBFRwBoZWlmX2NvbXByZXNzaW9uX0FWMQBoZWlmX2Nocm9tYQBoZWlmX2Nocm9tYV91bmRlZmluZWQAaGVpZl9jaHJvbWFfbW9ub2Nocm9tZQBoZWlmX2Nocm9tYV80MjAAaGVpZl9jaHJvbWFfNDIyAGhlaWZfY2hyb21hXzQ0NABoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF9SR0IAaGVpZl9jaHJvbWFfaW50ZXJsZWF2ZWRfUkdCQQBoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF9SUkdHQkJfQkUAaGVpZl9jaHJvbWFfaW50ZXJsZWF2ZWRfUlJHR0JCQUFfQkUAaGVpZl9jaHJvbWFfaW50ZXJsZWF2ZWRfUlJHR0JCX0xFAGhlaWZfY2hyb21hX2ludGVybGVhdmVkX1JSR0dCQkFBX0xFAGhlaWZfY2hyb21hX2ludGVybGVhdmVkXzI0Yml0AGhlaWZfY2hyb21hX2ludGVybGVhdmVkXzMyYml0AGhlaWZfY29sb3JzcGFjZQBoZWlmX2NvbG9yc3BhY2VfdW5kZWZpbmVkAGhlaWZfY29sb3JzcGFjZV9ZQ2JDcgBoZWlmX2NvbG9yc3BhY2VfUkdCAGhlaWZfY29sb3JzcGFjZV9tb25vY2hyb21lAGhlaWZfY2hhbm5lbABoZWlmX2NoYW5uZWxfWQBoZWlmX2NoYW5uZWxfQ3IAaGVpZl9jaGFubmVsX0NiAGhlaWZfY2hhbm5lbF9SAGhlaWZfY2hhbm5lbF9HAGhlaWZfY2hhbm5lbF9CAGhlaWZfY2hhbm5lbF9BbHBoYQBoZWlmX2NoYW5uZWxfaW50ZXJsZWF2ZWQAaGVpZl9jb250ZXh0AHYAdmkAaGVpZl9pbWFnZV9oYW5kbGUAaGVpZl9pbWFnZQBoZWlmX2Vycm9yAGkAY29kZQB2aWlpAHN1YmNvZGUAMTBoZWlmX2Vycm9yAFBLMTBoZWlmX2ltYWdlAFAxMGhlaWZfaW1hZ2UAMTBoZWlmX2ltYWdlAFBLMTdoZWlmX2ltYWdlX2hhbmRsZQBQMTdoZWlmX2ltYWdlX2hhbmRsZQAxN2hlaWZfaW1hZ2VfaGFuZGxlAFBLMTJoZWlmX2NvbnRleHQAUDEyaGVpZl9jb250ZXh0ADEyaGVpZl9jb250ZXh0ADEyaGVpZl9jaGFubmVsADE1aGVpZl9jb2xvcnNwYWNlADExaGVpZl9jaHJvbWEAMjNoZWlmX2NvbXByZXNzaW9uX2Zvcm1hdAAxOGhlaWZfc3ViZXJyb3JfY29kZQAxNWhlaWZfZXJyb3JfY29kZQBOMTBlbXNjcmlwdGVuM3ZhbEUAaXNfcHJpbWFyeQB0aHVtYm5haWxzAHdpZHRoAGhlaWdodABjaHJvbWEAY29sb3JzcGFjZQBoZWlmX2ltYWdlX2dldF9jaHJvbWFfZm9ybWF0KGltYWdlKSA9PSBoZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF8yNGJpdAAuL2hlaWZfZW1zY3JpcHRlbi5oAGhlaWZfaW1hZ2VfZ2V0X2Nocm9tYV9mb3JtYXQoaW1hZ2UpID09IGhlaWZfY2hyb21hX21vbm9jaHJvbWUAZGF0YQBOU3QzX18yMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQBOU3QzX18yMjFfX2Jhc2ljX3N0cmluZ19jb21tb25JTGIxRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjExSGVpZkNvbnRleHRFTlNfOWFsbG9jYXRvcklTMl9FRUVFADEuMTAuMABTdWNjZXNzAExlc3MgdGhhbiA4IGJ5dGVzIG9mIGRhdGEAR3JpZCBpbWFnZSBkYXRhIGluY29tcGxldGUACgBPdmVybGF5IGltYWdlIGRhdGEgaW5jb21wbGV0ZQBPdmVybGF5IGltYWdlIGRhdGEgdmVyc2lvbiAAIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQAeABpbWFnZV9pbmRleCA8IG1fb2Zmc2V0cy5zaXplKCkAaGVpZl9jb250ZXh0LmNjAGdldF9vZmZzZXQATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmOEhlaWZGaWxlRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBodmMxAGdyaWQAaWRlbgBpb3ZsAGF2MDEAJ3BpdG0nIGJveCByZWZlcmVuY2VzIGEgbm9uLWV4aXN0aW5nIGltYWdlAEltYWdlIHNpemUgACBleGNlZWRzIHRoZSBtYXhpbXVtIGltYWdlIHNpemUgAFRvbyBtYW55IHRodW1ibmFpbCByZWZlcmVuY2VzAFRodW1ibmFpbCByZWZlcmVuY2VzIGEgbm9uLWV4aXN0aW5nIGltYWdlAFRodW1ibmFpbCByZWZlcmVuY2VzIGFub3RoZXIgdGh1bWJuYWlsAFJlY3Vyc2l2ZSB0aHVtYm5haWwgaW1hZ2UgZGV0ZWN0ZWQATm8gYXV4QyBwcm9wZXJ0eSBmb3IgaW1hZ2UgAFRvbyBtYW55IGF1eGlsaWFyeSBpbWFnZSByZWZlcmVuY2VzAHVybjptcGVnOmF2YzoyMDE1OmF1eGlkOjEAdXJuOm1wZWc6aGV2YzoyMDE1OmF1eGlkOjEAdXJuOm1wZWc6bXBlZ0I6Y2ljcDpzeXN0ZW1zOmF1eGlsaWFyeTphbHBoYQBOb24tZXhpc3RpbmcgYWxwaGEgaW1hZ2UgcmVmZXJlbmNlZABSZWN1cnNpdmUgYWxwaGEgaW1hZ2UgZGV0ZWN0ZWQAdXJuOm1wZWc6aGV2YzoyMDE1OmF1eGlkOjIAdXJuOm1wZWc6bXBlZ0I6Y2ljcDpzeXN0ZW1zOmF1eGlsaWFyeTpkZXB0aABOb24tZXhpc3RpbmcgZGVwdGggaW1hZ2UgcmVmZXJlbmNlZABSZWN1cnNpdmUgZGVwdGggaW1hZ2UgZGV0ZWN0ZWQATm9uLWV4aXN0aW5nIGF1eCBpbWFnZSByZWZlcmVuY2VkAFJlY3Vyc2l2ZSBhdXggaW1hZ2UgZGV0ZWN0ZWQATm8gaHZjQyBwcm9wZXJ0eSBpbiBodmMxIHR5cGUgaW1hZ2UATWV0YWRhdGEgbm90IGNvcnJlY3RseSBhc3NpZ25lZCB0byBpbWFnZQBNZXRhZGF0YSBhc3NpZ25lZCB0byBub24tZXhpc3RpbmcgaW1hZ2UATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJTjRoZWlmMTNJbWFnZU1ldGFkYXRhRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBONGhlaWYzNlNFSU1lc3NhZ2VfZGVwdGhfcmVwcmVzZW50YXRpb25faW5mb0UAMzBoZWlmX2RlcHRoX3JlcHJlc2VudGF0aW9uX2luZm8ATjRoZWlmMTBTRUlNZXNzYWdlRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUlONGhlaWYxMUhlaWZDb250ZXh0NUltYWdlRU5TXzlhbGxvY2F0b3JJUzNfRUVFRQBpbWdpbmZvAGRlY29kZV9pbWFnZV9wbGFuYXIAaW1nX3dpZHRoID49IDAAaW1nX2hlaWdodCA+PSAwAE5vIGlyZWYgYm94IGF2YWlsYWJsZSwgYnV0IG5lZWRlZCBmb3IgaW92bCBpbWFnZQBOdW1iZXIgb2YgaW1hZ2Ugb2Zmc2V0cyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGltYWdlIHJlZmVyZW5jZXMATm8gaXJlZiBib3ggYXZhaWxhYmxlLCBidXQgbmVlZGVkIGZvciBpZGVuIGltYWdlACdpZGVuJyBpbWFnZSB3aXRoIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIGltYWdlAE5vIGlyZWYgYm94IGF2YWlsYWJsZSwgYnV0IG5lZWRlZCBmb3IgZ3JpZCBpbWFnZQBtX3Jvd3MgPD0gMjU2AGdldF9yb3dzAG1fY29sdW1ucyA8PSAyNTYAZ2V0X2NvbHVtbnMAVGlsZWQgaW1hZ2Ugd2l0aCAAPQAgdGlsZXMsIGJ1dCBvbmx5IAAgdGlsZSBpbWFnZXMgaW4gZmlsZQBUaWxlIGltYWdlIElEPQAgaXMgbm90IGEgcHJvcGVyIGltYWdlLgAhaW1hZ2VfcmVmZXJlbmNlcy5lbXB0eSgpAGRlY29kZV9mdWxsX2dyaWRfaW1hZ2UATm8gcGl4aSBpbmZvcm1hdGlvbiBmb3IgbHVtYSBjaGFubmVsLgBEaWZmZXJlbnQgbnVtYmVyIG9mIGJpdHMgcGVyIHBpeGVsIGluIGVhY2ggY2hhbm5lbC4AVW5leGlzdGluZyBncmlkIGltYWdlIHJlZmVyZW5jZWQAc3JjX3dpZHRoID49IDAAZGVjb2RlX2FuZF9wYXN0ZV90aWxlX2ltYWdlAHNyY19oZWlnaHQgPj0gMABJbWFnZSB0aWxlIGhhcyBkaWZmZXJlbnQgY2hyb21hIGZvcm1hdCB0aGFuIGNvbWJpbmVkIGltYWdlAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSU40aGVpZjM2U0VJTWVzc2FnZV9kZXB0aF9yZXByZXNlbnRhdGlvbl9pbmZvRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBTdWNjZXNzAHdhbnRfYWxwaGEgJiYgIWhhc19hbHBoYQBoZWlmX2NvbG9yY29udmVyc2lvbi5jYwBjb252ZXJ0X2NvbG9yc3BhY2UAMThPcF9SR0JfdG9fUkdCMjRfMzIATjRoZWlmMjRDb2xvckNvbnZlcnNpb25PcGVyYXRpb25FADIwT3BfWUNiQ3I0MjBfdG9fUkdCMjQAMjBPcF9ZQ2JDcjQyMF90b19SR0IzMgAyNU9wX1JHQl9IRFJfdG9fUlJHR0JCYWFfQkUAMjFPcF9SR0JfdG9fUlJHR0JCYWFfQkUAMjVPcF9SUkdHQkJhYV9CRV90b19SR0JfSERSADI3T3BfUlJHR0JCYWFfc3dhcF9lbmRpYW5uZXNzADE5T3BfbW9ub190b19ZQ2JDcjQyMAAxOU9wX21vbm9fdG9fUkdCMjRfMzIAMjBPcF9SR0IyNF8zMl90b19ZQ2JDcgB0YXJnZXRfc3RhdGUubmNseF9wcm9maWxlAHRhcmdldF9zdGF0ZS5uY2x4X3Byb2ZpbGUtPmdldF9tYXRyaXhfY29lZmZpY2llbnRzKCkgPT0gMAAyN09wX1JHQjI0XzMyX3RvX1lDYkNyNDQ0X0dCUgAxOU9wX2Ryb3BfYWxwaGFfcGxhbmUAMTZPcF90b19oZHJfcGxhbmVzADE2T3BfdG9fc2RyX3BsYW5lcwAyN09wX1JSR0dCQnh4X0hEUl90b19ZQ2JDcjQyMAAyM09wX1lDYkNyNDIwX3RvX1JSR0dCQmFhAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTI3T3BfUlJHR0JCeHhfSERSX3RvX1lDYkNyNDIwTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE2T3BfdG9fc2RyX3BsYW5lc05TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxNk9wX3RvX2hkcl9wbGFuZXNOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMTlPcF9kcm9wX2FscGhhX3BsYW5lTlNfOWFsbG9jYXRvcklTMV9FRUVFADE1T3BfUkdCX3RvX1lDYkNySXRFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE1T3BfUkdCX3RvX1lDYkNySXRFTlNfOWFsbG9jYXRvcklTMl9FRUVFADE1T3BfUkdCX3RvX1lDYkNySWhFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE1T3BfUkdCX3RvX1lDYkNySWhFTlNfOWFsbG9jYXRvcklTMl9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTI3T3BfUkdCMjRfMzJfdG9fWUNiQ3I0NDRfR0JSTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIwT3BfUkdCMjRfMzJfdG9fWUNiQ3JOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjVPcF9SUkdHQkJhYV9CRV90b19SR0JfSERSTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTI3T3BfUlJHR0JCYWFfc3dhcF9lbmRpYW5uZXNzTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE5T3BfbW9ub190b19SR0IyNF8zMk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkxOU9wX21vbm9fdG9fWUNiQ3I0MjBOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjFPcF9SR0JfdG9fUlJHR0JCYWFfQkVOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjVPcF9SR0JfSERSX3RvX1JSR0dCQmFhX0JFTlNfOWFsbG9jYXRvcklTMV9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTIzT3BfWUNiQ3I0MjBfdG9fUlJHR0JCYWFOU185YWxsb2NhdG9ySVMxX0VFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX2VtcGxhY2VJMjBPcF9ZQ2JDcjQyMF90b19SR0IzMk5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfZW1wbGFjZUkyME9wX1lDYkNyNDIwX3RvX1JHQjI0TlNfOWFsbG9jYXRvcklTMV9FRUVFADE1T3BfWUNiQ3JfdG9fUkdCSWhFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE1T3BfWUNiQ3JfdG9fUkdCSWhFTlNfOWFsbG9jYXRvcklTMl9FRUVFADE1T3BfWUNiQ3JfdG9fUkdCSXRFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE1T3BfWUNiQ3JfdG9fUkdCSXRFTlNfOWFsbG9jYXRvcklTMl9FRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9lbXBsYWNlSTE4T3BfUkdCX3RvX1JHQjI0XzMyTlNfOWFsbG9jYXRvcklTMV9FRUVFACFjaGFubmVscy5lbXB0eSgpAFN1Y2Nlc3MAQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgaW1hZ2UgcGxhbmUAQ2hhbm5lbHMgd2l0aCBkaWZmZXJlbnQgbnVtYmVyIG9mIGJpdHMgcGVyIHBpeGVsIGFyZSBub3Qgc3VwcG9ydGVkAGxpYmRlMjY1IEhFVkMgZGVjb2RlcgAsIHZlcnNpb24gADEuMC4yAGRlMjY1LmNjAGRlMjY1X3NldF9wYXJhbWV0ZXJfYm9vbABjaGFubmVsPj0wICYmIGNoYW5uZWwgPD0gMgBkZTI2NV9nZXRfaW1hZ2VfcGxhbmUAMTVkZWNvZGVyX2NvbnRleHQAMTJiYXNlX2NvbnRleHQAMTFlcnJvcl9xdWV1ZQB0aHJlYWRfY29udGV4dHM9PU5VTEwAZGVjY3R4LmNjAGFsbG9jYXRlX3RocmVhZF9jb250ZXh0cwBkZWNvZGVfc2xpY2VfdW5pdF9wYXJhbGxlbABpbWctPm51bV90aHJlYWRzX2FjdGl2ZSgpID09IDAAZGVjb2RlX3NsaWNlX3VuaXRfdGlsZXMAbiA8IG5UaHJlYWRDb250ZXh0cwAuL2RlY2N0eC5oAGdldF90aHJlYWRfY29udGV4dABkZWNvZGVfc2xpY2VfdW5pdF9XUFAAUFBTICVkIGhhcyBub3QgYmVlbiByZWFkCgBwcm9jZXNzX3NsaWNlX3NlZ21lbnRfaGVhZGVyAGhkci0+bnVtX3JlZl9pZHhfbDBfYWN0aXZlIDw9IDE2AGNvbnN0cnVjdF9yZWZlcmVuY2VfcGljdHVyZV9saXN0cwBoZHItPm51bV9yZWZfaWR4X2wxX2FjdGl2ZSA8PSAxNgBjdHgtPmRwYi5oYXNfZnJlZV9kcGJfcGljdHVyZSh0cnVlKQBnZW5lcmF0ZV91bmF2YWlsYWJsZV9yZWZlcmVuY2VfcGljdHVyZQBpZHg+PTAAbmFsAGRlY29kZQBmYWxsYmFjay1kY3QuY2MAdHJhbnNmb3JtX3NraXBfOF9mYWxsYmFjawB0cmFuc2Zvcm1fc2tpcF8xNl9mYWxsYmFjawBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFpaWFVSTklDPTYuJh8WDQT88+rh2tLKw723sq6rqKamWldQRjkrGQn359XHurCppqapsLrH1ef3CRkrOUZQV1paUkMuFvzhyrerpqiyw9rzDSY9TlhaVUk2HwTq0r2upllLMhLuzrWnp7XO7hIyS1lZSzIS7s61p6e1zu4SMktZWEMf88quprLS/CZJWlU9FurDq6a32gQuTlpSNg3hvahXOQnVsKa65xlGWlAr98epqcf3K1BaRhnnuqaw1Qk5V1Uu872mt+omUlg2/MOmsuEfTlo9BMqortoWSVpDDdKrUyTcra3cJFNTJNytrdwkU1Mk3K2t3CRTUyTcra3cJFNSFsqmww1OVR/Spr0ESVgm2qi3/ENaLuGrsvM9WjbqrlAJuqnnOVor1abHGVdG97Cw90ZXGcem1StaOeepuglQTvyutw1VQ+qowx9aNtqm0i5aJsqm4T1YFr2r80lSBLJL7qfOMlkStbUSWTLOp+5LS+6nzjJZErW1ElkyzqfuS0nhpupOQ9qm81I90qj8VTbKqwRYLsOuDVomvbIWWh+3RtWpCVoZsMc5UOem91crurorV/em51A5x7AZWgmp1UZDyrImVeqmBFoNqOFSLrfDPUnSrh9Y86b8Whar2k42vUDAwEBAwMBAQMDAQEDAwEBAwMBAQMDAQEDAwEBAwMBAPbfSUh+o81r8phZV2rI2Q73KTiar6loEpg1Y4a4uScM5sOda96krRrrVVwmmGVDHx1AZpglX1bpGK6n3WuewOTar/FjSw1INpiZDsupa4bdJH6YWTr3aWvOuPS6oBFXKMqcSS7XuWc7OWe61SxKnMjKnEku17lnOzlnutUsSpzIupiY2ph89qBZDqw1JrgROsvxSt/NVvepYw+Faytpa0iumORmpRgmwUPe6V+fHWtXVWsfnV7r3ULAJRqkZOaYrJqhJ/L1a0uFVsg09pjYWrlLqylrD806rHy6mQwS3WNokrVPc3FOtJCStU9zcU60kJK1T3NxTrSQkrVPc3FOtJB+yWsMENqhS2upJpkPz0lWrLg29WrcWJq5Yyvw9pk7hGbpasCsJx1epOffVUKZG5+dGplDV9zmpV8cJK7BauhkWw1WmSdr8LrJarjbz4UOoWL0fDcpSpk7SBCa3Wqs96hLOS6dZtTLu7jK1WadLzhISzkunWbUy7u4ytVmnS84SDdo9slimVbc24QQW0kOuWqZSvS7q/B/KSataqE7DJvMJ5yvHRrBXplqpULo51Rn39xnVObpQqVqmV7BGxyvnCQTzFuEm0jbDQ7dOrlWoWqZaplirUrJJvT3KLtof6g38KHdpZHRoJjEpPT0wAGZhbGxiYWNrLW1vdGlvbi5jYwBwdXRfdW53ZWlnaHRlZF9wcmVkXzhfZmFsbGJhY2sAbG9nMldEPj0xAHB1dF93ZWlnaHRlZF9wcmVkXzhfZmFsbGJhY2sAcHV0X3dlaWdodGVkX2JpcHJlZF84X2ZhbGxiYWNrAHB1dF93ZWlnaHRlZF9wcmVkX2F2Z184X2ZhbGxiYWNrAHB1dF91bndlaWdodGVkX3ByZWRfMTZfZmFsbGJhY2sAcHV0X3dlaWdodGVkX3ByZWRfMTZfZmFsbGJhY2sAcHV0X3dlaWdodGVkX2JpcHJlZF8xNl9mYWxsYmFjawBwdXRfd2VpZ2h0ZWRfcHJlZF9hdmdfMTZfZmFsbGJhY2sAIXJlb3JkZXJfb3V0cHV0X3F1ZXVlLmVtcHR5KCkAZHBiLmNjAG91dHB1dF9uZXh0X3BpY3R1cmVfaW5fcmVvcmRlcl9idWZmZXIAbmV3X2ltYWdlAGltZy0+c3BzLkJpdERlcHRoX1kgPj0gOCAmJiBpbWctPnNwcy5CaXREZXB0aF9ZIDw9IDE2AGltYWdlLmNjAGRlMjY1X2ltYWdlX2dldF9idWZmZXIAaW1nLT5zcHMuQml0RGVwdGhfQyA+PSA4ICYmIGltZy0+c3BzLkJpdERlcHRoX0MgPD0gMTYAc3BzAGFsbG9jX2ltYWdlAGZpcnN0ICUgMiA9PSAwAGNvcHlfbGluZXNfZnJvbQBlbmQgJSAyID09IDAAblRocmVhZHNSdW5uaW5nID49IDAAdGhyZWFkX2ZpbmlzaGVzAC4vaW1hZ2UuaABwZW5kaW5nX2lucHV0X05BTCA9PSBOVUxMAG5hbC1wYXJzZXIuY2MAcHVzaF9OQUwALS0tLS0tLS0tLSBQUFMgcmFuZ2UtZXh0ZW5zaW9uIC0tLS0tLS0tLS0KAGxvZzJfbWF4X3RyYW5zZm9ybV9za2lwX2Jsb2NrX3NpemUgICAgICA6ICVkCgBjcm9zc19jb21wb25lbnRfcHJlZGljdGlvbl9lbmFibGVkX2ZsYWcgOiAlZAoAY2hyb21hX3FwX29mZnNldF9saXN0X2VuYWJsZWRfZmxhZyAgICAgIDogJWQKAGRpZmZfY3VfY2hyb21hX3FwX29mZnNldF9kZXB0aCAgICAgICAgICA6ICVkCgBjaHJvbWFfcXBfb2Zmc2V0X2xpc3RfbGVuICAgICAgICAgICAgICAgOiAlZAoAY2JfcXBfb2Zmc2V0X2xpc3RbJWRdICAgICAgICAgICAgICAgICAgICA6ICVkCgBjcl9xcF9vZmZzZXRfbGlzdFslZF0gICAgICAgICAgICAgICAgICAgIDogJWQKAGxvZzJfc2FvX29mZnNldF9zY2FsZV9sdW1hICAgICAgICAgICAgICA6ICVkCgBsb2cyX3Nhb19vZmZzZXRfc2NhbGVfY2hyb21hICAgICAgICAgICAgOiAlZAoAdGlsZVg+PTAgJiYgdGlsZVk+PTAAcHBzLmNjAHNldF9kZXJpdmVkX3ZhbHVlcwAtLS0tLS0tLS0tLS0tLS0tLSBQUFMgLS0tLS0tLS0tLS0tLS0tLS0KAHBpY19wYXJhbWV0ZXJfc2V0X2lkICAgICAgIDogJWQKAHNlcV9wYXJhbWV0ZXJfc2V0X2lkICAgICAgIDogJWQKAGRlcGVuZGVudF9zbGljZV9zZWdtZW50c19lbmFibGVkX2ZsYWcgOiAlZAoAc2lnbl9kYXRhX2hpZGluZ19mbGFnICAgICAgOiAlZAoAY2FiYWNfaW5pdF9wcmVzZW50X2ZsYWcgICAgOiAlZAoAbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmUgOiAlZAoAbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmUgOiAlZAoAcGljX2luaXRfcXAgICAgICAgICAgICAgICAgOiAlZAoAY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnOiAlZAoAdHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnOiAlZAoAY3VfcXBfZGVsdGFfZW5hYmxlZF9mbGFnICAgOiAlZAoAZGlmZl9jdV9xcF9kZWx0YV9kZXB0aCAgICAgOiAlZAoAcGljX2NiX3FwX29mZnNldCAgICAgICAgICAgICA6ICVkCgBwaWNfY3JfcXBfb2Zmc2V0ICAgICAgICAgICAgIDogJWQKAHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWcgOiAlZAoAd2VpZ2h0ZWRfcHJlZF9mbGFnICAgICAgICAgICA6ICVkCgB3ZWlnaHRlZF9iaXByZWRfZmxhZyAgICAgICAgIDogJWQKAG91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZyAgICAgOiAlZAoAdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlX2ZsYWc6ICVkCgB0aWxlc19lbmFibGVkX2ZsYWcgICAgICAgICAgIDogJWQKAGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnOiAlZAoAbnVtX3RpbGVfY29sdW1ucyAgICA6ICVkCgBudW1fdGlsZV9yb3dzICAgICAgIDogJWQKAHVuaWZvcm1fc3BhY2luZ19mbGFnOiAlZAoAdGlsZSBjb2x1bW4gYm91bmRhcmllczogAHRpbGUgcm93IGJvdW5kYXJpZXM6IAAqJWQgAGxvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcgOiAlZAoAcHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnOiAlZAoAZGVibG9ja2luZ19maWx0ZXJfY29udHJvbF9wcmVzZW50X2ZsYWc6ICVkCgBkZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWc6ICVkCgBwaWNfZGlzYWJsZV9kZWJsb2NraW5nX2ZpbHRlcl9mbGFnOiAlZAoAYmV0YV9vZmZzZXQ6ICAlZAoAdGNfb2Zmc2V0OiAgICAlZAoAcGljX3NjYWxpbmdfbGlzdF9kYXRhX3ByZXNlbnRfZmxhZzogJWQKAGxpc3RzX21vZGlmaWNhdGlvbl9wcmVzZW50X2ZsYWc6ICVkCgBsb2cyX3BhcmFsbGVsX21lcmdlX2xldmVsICAgICAgOiAlZAoAbnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzICAgIDogJWQKAHNsaWNlX3NlZ21lbnRfaGVhZGVyX2V4dGVuc2lvbl9wcmVzZW50X2ZsYWcgOiAlZAoAcHBzX2V4dGVuc2lvbl9mbGFnICAgICAgICAgICAgOiAlZAoAcHBzX3JhbmdlX2V4dGVuc2lvbl9mbGFnICAgICAgOiAlZAoAcHBzX211bHRpbGF5ZXJfZXh0ZW5zaW9uX2ZsYWcgOiAlZAoAcHBzX2V4dGVuc2lvbl82Yml0cyAgICAgICAgICAgOiAlZAoATG9nMk1pbkN1UXBEZWx0YVNpemUgICAgICAgICAgOiAlZAoATG9nMk1pbkN1Q2hyb21hUXBPZmZzZXRTaXplIChSRXh0KSA6ICVkCgBMb2cyTWF4VHJhbnNmb3JtU2tpcFNpemUgICAgKFJFeHQpIDogJWQKAHNhby0lZAAxNXRocmVhZF90YXNrX3NhbwAxMXRocmVhZF90YXNrAFNFSSBkZWNvZGVkIHBpY3R1cmUgTUQ1IG1pc21hdGNoIChQT0M9JWQpCgBTRUkgZGVjb2RlZCBwaWN0dXJlIGhhc2g6ICUwNHgsIGRlY29kZWQgcGljdHVyZTogJTA0eCAoUE9DPSVkKQoAc2xpY2Utc2VnbWVudC0lZDslZABpbml0VHlwZSA+PSAwICYmIGluaXRUeXBlIDw9IDIAc2xpY2UuY2MAaW5pdGlhbGl6ZV9DQUJBQ19tb2RlbHMAZGVjb2RlX3BhcnRfbW9kZQAAAQICAgIDBQcICgwNDxESExQVFhcXGBgZGRobGxwcHR0eH3JlYWRfY29kaW5nX3VuaXQAUHJlZE1vZGUgPT0gY3VQcmVkTW9kZQByZWFkX3RyYW5zZm9ybV90cmVlAGNvbnRleHQgPj0gMCAmJiBjb250ZXh0IDw9IDIAZGVjb2RlX3NwbGl0X3RyYW5zZm9ybV9mbGFnACEodHJhZm9EZXB0aD09MCAmJiBsb2cyVHJhZm9TaXplPT0yKQBjYmZfY2IgIT0gLTEAcmVhZF90cmFuc2Zvcm1fdW5pdABjYmZfY3IgIT0gLTEAY2JmX2x1bWEgIT0gLTEAeDxzcHMuUGljV2lkdGhJbk1pblBVcwBzZXRfSW50cmFQcmVkTW9kZUMAeTxzcHMuUGljSGVpZ2h0SW5NaW5QVXMAaWR4PGludHJhUHJlZE1vZGVDLmRhdGFfc2l6ZQAyNXRocmVhZF90YXNrX3NsaWNlX3NlZ21lbnQAY3RiLXJvdy0lZAAxOXRocmVhZF90YXNrX2N0Yl9yb3cAcHBzLT5wcHNfcmVhZABkdW1wX3NsaWNlX3NlZ21lbnRfaGVhZGVyAHNwcy0+c3BzX3JlYWQALS0tLS0tLS0tLS0tLS0tLS0gU0xJQ0UgLS0tLS0tLS0tLS0tLS0tLS0KAGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWcgICAgICA6ICVkCgBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnICAgICAgICAgOiAlZAoAc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWQgICAgICAgICAgIDogJWQKAGRlcGVuZGVudF9zbGljZV9zZWdtZW50X2ZsYWcgICAgICAgICA6ICVkCgBzbGljZV9zZWdtZW50X2FkZHJlc3MgICAgICAgICAgICAgICAgOiAlZAoAc2xpY2VfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJWMKAHBpY19vdXRwdXRfZmxhZyAgICAgICAgICAgICAgICAgICAgICA6ICVkCgBjb2xvdXJfcGxhbmVfaWQgICAgICAgICAgICAgICAgICAgICAgOiAlZAoAc2xpY2VfcGljX29yZGVyX2NudF9sc2IgICAgICAgICAgICAgIDogJWQKAHNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWcgICAgICA6ICVkCgBzaG9ydF90ZXJtX3JlZl9waWNfc2V0X2lkeCAgICAgICAgICAgOiAlZAoAbnVtX2xvbmdfdGVybV9zcHMgICAgICAgICAgICAgICAgICAgICAgICA6ICVkCgBudW1fbG9uZ190ZXJtX3BpY3MgICAgICAgICAgICAgICAgICAgICAgIDogJWQKAHNsaWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWcgOiAlZAoAc2xpY2Vfc2FvX2x1bWFfZmxhZyAgICAgICAgICAgICA6ICVkCgBzbGljZV9zYW9fY2hyb21hX2ZsYWcgICAgICAgICAgIDogJWQKAG51bV9yZWZfaWR4X2FjdGl2ZV9vdmVycmlkZV9mbGFnIDogJWQKAChmcm9tIFBQUykAbnVtX3JlZl9pZHhfbDBfYWN0aXZlICAgICAgICAgIDogJWQgJXMKAG51bV9yZWZfaWR4X2wxX2FjdGl2ZSAgICAgICAgICA6ICVkICVzCgByZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDAgOiAlZAoAICAlZDogJWQKAHJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMSA6ICVkCgBtdmRfbDFfemVyb19mbGFnICAgICAgICAgICAgICAgOiAlZAoAY2FiYWNfaW5pdF9mbGFnICAgICAgICAgICAgICAgIDogJWQKAGNvbGxvY2F0ZWRfZnJvbV9sMF9mbGFnICAgICAgICA6ICVkCgBjb2xsb2NhdGVkX3JlZl9pZHggICAgICAgICAgICAgOiAlZAoAbHVtYV9sb2cyX3dlaWdodF9kZW5vbSAgICAgICAgIDogJWQKAENocm9tYUxvZzJXZWlnaHREZW5vbSAgICAgICAgICA6ICVkCgBMdW1hV2VpZ2h0X0wlZFslZF0gICAgICAgICAgICAgOiAlZAoAbHVtYV9vZmZzZXRfbCVkWyVkXSAgICAgICAgICAgIDogJWQKAENocm9tYVdlaWdodF9MJWRbJWRdWyVkXSAgICAgICAgOiAlZAoAQ2hyb21hT2Zmc2V0X0wlZFslZF1bJWRdICAgICAgICA6ICVkCgBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZCAgOiAlZAoAc2xpY2VfcXBfZGVsdGEgICAgICAgICA6ICVkCgBzbGljZV9jYl9xcF9vZmZzZXQgICAgIDogJWQKAHNsaWNlX2NyX3FwX29mZnNldCAgICAgOiAlZAoAZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZmxhZyA6ICVkCgAob3ZlcnJpZGUpAChmcm9tIHBwcykAc2xpY2VfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZyA6ICVkICVzCgBzbGljZV9iZXRhX29mZnNldCAgOiAlZAoAc2xpY2VfdGNfb2Zmc2V0ICAgIDogJWQKAHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIDogJWQKAG51bV9lbnRyeV9wb2ludF9vZmZzZXRzICAgIDogJWQKAG9mZnNldF9sZW4gICAgICAgICAgICAgICAgIDogJWQKAGVudHJ5IHBvaW50IFslaV0gOiAlZAoAAAEEBQIDBAUGBggIBwcIY2N0eElkeExvb2t1cFtsb2cydy0yXVtjSWR4XVtzY2FuSWR4XVtwcmV2Q3NiZl1beEMrKHlDPDxsb2cydyldID09IGN0eElkeEluYwBhbGxvY19hbmRfaW5pdF9zaWduaWZpY2FudF9jb2VmZl9jdHhJZHhfbG9va3VwVGFibGUAcmVmPDcAc3BzLmNjABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQERAREBESERISERIVExQVFBMVGBYWGBgWFhgZGRseGxkZHR8jIx8dJCksKSQvNjYvQUZBWFhzEBAQEBAQEBAQEBEREREREhISEhISFBQUFBQUFBgYGBgYGBgYGRkZGRkZGRwcHBwcHCEhISEhKSkpKTY2NkdHW2ZpbGxfc2NhbGluZ19mYWN0b3IAc2NhbGluZ19saXN0X3ByZWRfbWF0cml4X2lkX2RlbHRhPT0xAHJlYWRfc2NhbGluZ19saXN0AC0tLS0tLS0tLS0tLS0tLS0tIFNQUyAtLS0tLS0tLS0tLS0tLS0tLQoAdmlkZW9fcGFyYW1ldGVyX3NldF9pZCAgOiAlZAoAc3BzX21heF9zdWJfbGF5ZXJzICAgICAgOiAlZAoAc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZyA6ICVkCgBzZXFfcGFyYW1ldGVyX3NldF9pZCAgICA6ICVkCgA0OjQ6NAB1bmtub3duAG1vbm9jaHJvbWUANDoyOjAANDoyOjIAY2hyb21hX2Zvcm1hdF9pZGMgICAgICAgOiAlZCAoJXMpCgBzZXBhcmF0ZV9jb2xvdXJfcGxhbmVfZmxhZyA6ICVkCgBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzICA6ICVkCgBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyA6ICVkCgBjb25mb3JtYW5jZV93aW5kb3dfZmxhZyAgICA6ICVkCgBjb25mX3dpbl9sZWZ0X29mZnNldCAgOiAlZAoAY29uZl93aW5fcmlnaHRfb2Zmc2V0IDogJWQKAGNvbmZfd2luX3RvcF9vZmZzZXQgICA6ICVkCgBjb25mX3dpbl9ib3R0b21fb2Zmc2V0OiAlZAoAYml0X2RlcHRoX2x1bWEgICA6ICVkCgBiaXRfZGVwdGhfY2hyb21hIDogJWQKAGxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNiIDogJWQKAHNwc19zdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50X2ZsYWcgOiAlZAoAbG9nMl9taW5fbHVtYV9jb2RpbmdfYmxvY2tfc2l6ZSA6ICVkCgBsb2cyX2RpZmZfbWF4X21pbl9sdW1hX2NvZGluZ19ibG9ja19zaXplIDogJWQKAGxvZzJfbWluX3RyYW5zZm9ybV9ibG9ja19zaXplICAgOiAlZAoAbG9nMl9kaWZmX21heF9taW5fdHJhbnNmb3JtX2Jsb2NrX3NpemUgOiAlZAoAbWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50ZXIgOiAlZAoAbWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmEgOiAlZAoAc2NhbGluZ19saXN0X2VuYWJsZV9mbGFnIDogJWQKAExheWVyICVkCgAgIHNwc19tYXhfZGVjX3BpY19idWZmZXJpbmcgICAgICA6ICVkCgAgIHNwc19tYXhfbnVtX3Jlb3JkZXJfcGljcyAgICAgICA6ICVkCgAgIHNwc19tYXhfbGF0ZW5jeV9pbmNyZWFzZV9wbHVzMSA6ICVkCgBzcHNfc2NhbGluZ19saXN0X2RhdGFfcHJlc2VudF9mbGFnIDogJWQKAHNjYWxpbmcgbGlzdCBsb2dnaW5nIG91dHB1dCBub3QgaW1wbGVtZW50ZWQAYW1wX2VuYWJsZWRfZmxhZyAgICAgICAgICAgICAgICAgICAgOiAlZAoAc2FtcGxlX2FkYXB0aXZlX29mZnNldF9lbmFibGVkX2ZsYWcgOiAlZAoAcGNtX2VuYWJsZWRfZmxhZyAgICAgICAgICAgICAgICAgICAgOiAlZAoAcGNtX3NhbXBsZV9iaXRfZGVwdGhfbHVtYSAgICAgOiAlZAoAcGNtX3NhbXBsZV9iaXRfZGVwdGhfY2hyb21hICAgOiAlZAoAbG9nMl9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemUgOiAlZAoAbG9nMl9kaWZmX21heF9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemUgOiAlZAoAcGNtX2xvb3BfZmlsdGVyX2Rpc2FibGVfZmxhZyAgOiAlZAoAbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIDogJWQKAGxvbmdfdGVybV9yZWZfcGljc19wcmVzZW50X2ZsYWcgOiAlZAoAcmVmX3BpY19zZXRbICUyZCBdOiAAbnVtX2xvbmdfdGVybV9yZWZfcGljc19zcHMgOiAlZAoAbHRfcmVmX3BpY19wb2NfbHNiX3Nwc1slZF0gOiAlZCAgICh1c2VkX2J5X2N1cnJfcGljX2x0X3Nwc19mbGFnPSVkKQoAc3BzX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWcgICAgICA6ICVkCgBzdHJvbmdfaW50cmFfc21vb3RoaW5nX2VuYWJsZV9mbGFnIDogJWQKAHZ1aV9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZyAgICAgICAgOiAlZAoAc3BzX2V4dGVuc2lvbl9wcmVzZW50X2ZsYWcgICAgOiAlZAoAc3BzX3JhbmdlX2V4dGVuc2lvbl9mbGFnICAgICAgOiAlZAoAc3BzX211bHRpbGF5ZXJfZXh0ZW5zaW9uX2ZsYWcgOiAlZAoAc3BzX2V4dGVuc2lvbl82Yml0cyAgICAgICAgICAgOiAlZAoAQ3RiU2l6ZVkgICAgIDogJWQKAE1pbkNiU2l6ZVkgICA6ICVkCgBNYXhDYlNpemVZICAgOiAlZAoATWluVEJTaXplWSAgIDogJWQKAE1heFRCU2l6ZVkgICA6ICVkCgBQaWNXaWR0aEluQ3Ric1kgICAgICAgICA6ICVkCgBQaWNIZWlnaHRJbkN0YnNZICAgICAgICA6ICVkCgBTdWJXaWR0aEMgICAgICAgICAgICAgICA6ICVkCgBTdWJIZWlnaHRDICAgICAgICAgICAgICA6ICVkCgAtLS0tLS0tLS0tLS0tLS0tLSBTUFMtcmFuZ2UtZXh0ZW5zaW9uIC0tLS0tLS0tLS0tLS0tLS0tCgB0cmFuc2Zvcm1fc2tpcF9yb3RhdGlvbl9lbmFibGVkX2ZsYWcgICAgOiAlZAoAdHJhbnNmb3JtX3NraXBfY29udGV4dF9lbmFibGVkX2ZsYWcgICAgIDogJWQKAGltcGxpY2l0X3JkcGNtX2VuYWJsZWRfZmxhZyAgICAgICAgICAgICA6ICVkCgBleHBsaWNpdF9yZHBjbV9lbmFibGVkX2ZsYWcgICAgICAgICAgICAgOiAlZAoAZXh0ZW5kZWRfcHJlY2lzaW9uX3Byb2Nlc3NpbmdfZmxhZyAgICAgIDogJWQKAGludHJhX3Ntb290aGluZ19kaXNhYmxlZF9mbGFnICAgICAgICAgICA6ICVkCgBoaWdoX3ByZWNpc2lvbl9vZmZzZXRzX2VuYWJsZWRfZmxhZyAgICAgOiAlZAoAcGVyc2lzdGVudF9yaWNlX2FkYXB0YXRpb25fZW5hYmxlZF9mbGFnIDogJWQKAGNhYmFjX2J5cGFzc19hbGlnbm1lbnRfZW5hYmxlZF9mbGFnICAgICA6ICVkCgB0cmFuc2Zvcm0uY2MAMABzY2FsZV9jb2VmZmljaWVudHNfaW50ZXJuYWwAcmRwY21Nb2RlPT0wAEVSUjogAElORk86IAB2cHMuY2MAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQBmaXJzdExheWVyUmVhZCA8IE1BWF9URU1QT1JBTF9TVUJMQVlFUlMAcmVhZAAtLS0tLS0tLS0tLS0tLS0tLSBWUFMgLS0tLS0tLS0tLS0tLS0tLS0KAHZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgICAgICAgICAgICAgICAgOiAlZAoAdnBzX21heF9sYXllcnMgICAgICAgICAgICAgICAgICAgICAgICA6ICVkCgB2cHNfbWF4X3N1Yl9sYXllcnMgICAgICAgICAgICAgICAgICAgIDogJWQKAHZwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWcgICAgICAgICAgOiAlZAoAICBQcm9maWxlL1RpZXIvTGV2ZWwgW0xheWVyICVkXQoAdnBzX3N1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRfZmxhZyA6ICVkCgBsYXllciAlZDogdnBzX21heF9kZWNfcGljX2J1ZmZlcmluZyA9ICVkCgAgICAgICAgICB2cHNfbWF4X251bV9yZW9yZGVyX3BpY3MgID0gJWQKACAgICAgICAgIHZwc19tYXhfbGF0ZW5jeV9pbmNyZWFzZSAgPSAlZAoAbGF5ZXIgKGFsbCk6IHZwc19tYXhfZGVjX3BpY19idWZmZXJpbmcgPSAlZAoAICAgICAgICAgICAgIHZwc19tYXhfbnVtX3Jlb3JkZXJfcGljcyAgPSAlZAoAICAgICAgICAgICAgIHZwc19tYXhfbGF0ZW5jeV9pbmNyZWFzZSAgPSAlZAoAdnBzX21heF9sYXllcl9pZCAgID0gJWQKAHZwc19udW1fbGF5ZXJfc2V0cyA9ICVkCgB2cHNfdGltaW5nX2luZm9fcHJlc2VudF9mbGFnID0gJWQKAGxheWVyX2lkX2luY2x1ZGVkX2ZsYWdbJWRdWyVkXSA9ICVkCgB2cHNfbnVtX3VuaXRzX2luX3RpY2sgPSAlZAoAdnBzX3RpbWVfc2NhbGUgICAgICAgID0gJWQKAHZwc19wb2NfcHJvcG9ydGlvbmFsX3RvX3RpbWluZ19mbGFnID0gJWQKAHZwc19udW1fdGlja3NfcG9jX2RpZmZfb25lID0gJWQKAHZwc19udW1faHJkX3BhcmFtZXRlcnMgICAgID0gJWQKAGhyZF9sYXllcl9zZXRfaWR4WyVkXSA9ICVkCgB2cHNfZXh0ZW5zaW9uX2ZsYWcgPSAlZAoAZ2VuZXJhbABzdWJfbGF5ZXIAICAlc19wcm9maWxlX3NwYWNlICAgICA6ICVkCgAgICVzX3RpZXJfZmxhZyAgICAgICAgIDogJWQKACh1bmtub3duKQBGb3JtYXRSYW5nZUV4dGVuc2lvbnMATWFpblN0aWxsUGljdHVyZQBNYWluMTAATWFpbgAgICVzX3Byb2ZpbGVfaWRjICAgICAgIDogJXMKACAgJXNfcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdzOiAAKgoAICAgICVzX3Byb2dyZXNzaXZlX3NvdXJjZV9mbGFnIDogJWQKACAgICAlc19pbnRlcmxhY2VkX3NvdXJjZV9mbGFnIDogJWQKACAgICAlc19ub25fcGFja2VkX2NvbnN0cmFpbnRfZmxhZyA6ICVkCgAgICAgJXNfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgOiAlZAoAKiwAKiVkACAgJXNfbGV2ZWxfaWRjICAgICAgICAgOiAlZCAoJTQuMmYpCgB1bnNwZWNpZmllZABNQUMAU0VDQU0ATlRTQwBQQUwAY29tcG9uZW50AC0tLS0tLS0tLS0tLS0tLS0tIFZVSSAtLS0tLS0tLS0tLS0tLS0tLQoAc2FtcGxlIGFzcGVjdCByYXRpbyAgICAgICAgOiAlZDolZAoAb3ZlcnNjYW5faW5mb19wcmVzZW50X2ZsYWcgOiAlZAoAb3ZlcnNjYW5fYXBwcm9wcmlhdGVfZmxhZyAgOiAlZAoAdmlkZW9fc2lnbmFsX3R5cGVfcHJlc2VudF9mbGFnOiAlZAoAICB2aWRlb19mb3JtYXQgICAgICAgICAgICAgICAgOiAlcwoAICB2aWRlb19mdWxsX3JhbmdlX2ZsYWcgICAgICAgOiAlZAoAICBjb2xvdXJfZGVzY3JpcHRpb25fcHJlc2VudF9mbGFnIDogJWQKACAgY29sb3VyX3ByaW1hcmllcyAgICAgICAgICAgIDogJWQKACAgdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzICAgIDogJWQKACAgbWF0cml4X2NvZWZmcyAgICAgICAgICAgICAgIDogJWQKAGNocm9tYV9sb2NfaW5mb19wcmVzZW50X2ZsYWc6ICVkCgAgIGNocm9tYV9zYW1wbGVfbG9jX3R5cGVfdG9wX2ZpZWxkICAgOiAlZAoAICBjaHJvbWFfc2FtcGxlX2xvY190eXBlX2JvdHRvbV9maWVsZDogJWQKAG5ldXRyYWxfY2hyb21hX2luZGljYXRpb25fZmxhZzogJWQKAGZpZWxkX3NlcV9mbGFnICAgICAgICAgICAgICAgIDogJWQKAGZyYW1lX2ZpZWxkX2luZm9fcHJlc2VudF9mbGFnIDogJWQKAGRlZmF1bHRfZGlzcGxheV93aW5kb3dfZmxhZyAgIDogJWQKACAgZGVmX2Rpc3Bfd2luX2xlZnRfb2Zmc2V0ICAgIDogJWQKACAgZGVmX2Rpc3Bfd2luX3JpZ2h0X29mZnNldCAgIDogJWQKACAgZGVmX2Rpc3Bfd2luX3RvcF9vZmZzZXQgICAgIDogJWQKACAgZGVmX2Rpc3Bfd2luX2JvdHRvbV9vZmZzZXQgIDogJWQKAHZ1aV90aW1pbmdfaW5mb19wcmVzZW50X2ZsYWcgIDogJWQKACAgdnVpX251bV91bml0c19pbl90aWNrICAgICAgIDogJWQKACAgdnVpX3RpbWVfc2NhbGUgICAgICAgICAgICAgIDogJWQKAHZ1aV9wb2NfcHJvcG9ydGlvbmFsX3RvX3RpbWluZ19mbGFnIDogJWQKAHZ1aV9udW1fdGlja3NfcG9jX2RpZmZfb25lICAgICAgICAgIDogJWQKAHZ1aV9ocmRfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgOiAlZAoAYml0c3RyZWFtX3Jlc3RyaWN0aW9uX2ZsYWcgICAgICAgICA6ICVkCgAgIHRpbGVzX2ZpeGVkX3N0cnVjdHVyZV9mbGFnICAgICAgIDogJWQKACAgbW90aW9uX3ZlY3RvcnNfb3Zlcl9waWNfYm91bmRhcmllc19mbGFnIDogJWQKACAgcmVzdHJpY3RlZF9yZWZfcGljX2xpc3RzX2ZsYWcgICAgOiAlZAoAICBtaW5fc3BhdGlhbF9zZWdtZW50YXRpb25faWRjICAgICA6ICVkCgAgIG1heF9ieXRlc19wZXJfcGljX2Rlbm9tICAgICAgICAgIDogJWQKACAgbWF4X2JpdHNfcGVyX21pbl9jdV9kZW5vbSAgICAgICAgOiAlZAoAICBsb2cyX21heF9tdl9sZW5ndGhfaG9yaXpvbnRhbCAgICA6ICVkCgAgIGxvZzJfbWF4X212X2xlbmd0aF92ZXJ0aWNhbCAgICAgIDogJWQKAGJpdHN0cmVhbS5jYwB2YWx1ZT4wAGdldF91dmxjAICw0PCAp8XjgJ672HuWss10jqnDb4eguWmAmK9kepCmX3SJnlpugpZVaHuOUWN1h01eb4BJWWl6RVVkdEJQX24+TFpoO0hWYzhFUV41QU1ZMz5JVTA7RVAuOEJMKzU/SCkyO0UnMDhBJS02PiMrMzshKTA4ICcuNR4lKzIdIykwGyEnLRofJSsYHiMpFxwhJxYbICUVGh4jFBgdIRMXGx8SFhoeERUZHBAUFxsPExYZDhIVGA4RFBcNEBMWDA8SFQwOERQLDhATCw0PEgoMDxEKDA4QCQsNDwkLDA4ICgwOCAkLDQcJCwwHCQoMBwgKCwYICQsGBwkKBgcICQICAgIGBQQEAwMDAwICAgICAgICAQEBAQEBAQEBAQEBAQEBAQAAAQICBAQFBgcICQkLCwwNDQ8PEBASEhMTFRUWFhcYGBkaGhsbHB0dHh4eHyAgISEhIiIjIyMkJCQlJSUmJj8BAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj4/Y2FiYWMuY2MAbGVuZ3RoID49IDAAaW5pdF9DQUJBQ19kZWNvZGVyACVwIGMndG9yID0gJXAKACVwIGRlc3RydWN0b3IKAG1mcmVlICVwCgAlcCBpbml0CgAqcmVmY250PjEAY29udGV4dG1vZGVsLmNjAGRlY291cGxlX29yX2FsbG9jX3dpdGhfZW1wdHlfZGF0YQAlcCAoYWxsb2MpCgBtb2RlbFtpXS5zdGF0ZSA8PSA2MgBzZXRfaW5pdFZhbHVlACVwIHJlbGVhc2UgJXAKACVwIGRlY291cGxlICglcCkKAHJlZmNudABkZWNvdXBsZQAlcCBhc3NpZ24gPSAlcAoAZGVibG9jay0lZAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQECAgICAwMDAwQEBAUFBgYHCAkKCw0OEBIUFhgAAAAAAAAAAAAAAAAAAAAABgcICQoLDA0ODxAREhQWGBocHiAiJCYoKiwuMDI0Njg6PD5AcmVmUGljUTA9PXJlZlBpY1ExAGRlYmxvY2suY2MAZGVyaXZlX2JvdW5kYXJ5U3RyZW5ndGgAMjZ0aHJlYWRfdGFza19kZWJsb2NrX0NUQlJvdwBpbnRyYXByZWQuY2MAaW50cmFQcmVkTW9kZTwzNQBpbnRyYV9wcmVkaWN0aW9uX2FuZ3VsYXIAaW50cmFQcmVkTW9kZT49MgBpbnRyYV9wcmVkaWN0aW9uX3NhbXBsZV9maWx0ZXJpbmcAc2hkci0+c2xpY2VfdHlwZSA9PSBTTElDRV9UWVBFX0IAbW90aW9uLmNjAGdlbmVyYXRlX2ludGVyX3ByZWRpY3Rpb25fc2FtcGxlcwBtY19jaHJvbWEAdW5pdFggPj0gMCAmJiB1bml0WCA8IHdpZHRoX2luX3VuaXRzAC4uL2xpYmRlMjY1L2ltYWdlLmgAZ2V0AHVuaXRZID49IDAgJiYgdW5pdFkgPCBoZWlnaHRfaW5fdW5pdHMAY3R4LT5oYXNfaW1hZ2UoY29sUGljKQBkZXJpdmVfY29sbG9jYXRlZF9tb3Rpb25fdmVjdG9ycwBkZXJpdmVfY29tYmluZWRfYmlwcmVkaWN0aXZlX21lcmdpbmdfY2FuZGlkYXRlcwByZWZQaWNMaXN0Pj0wAGRlcml2ZV9zcGF0aWFsX2x1bWFfdmVjdG9yX3ByZWRpY3Rpb24AbnVtTVZQQ2FuZExYPT0yAGZpbGxfbHVtYV9tb3Rpb25fdmVjdG9yX3ByZWRpY3RvcnMAUklkeD49MAByZWZwaWMuY2MAcmVhZF9zaG9ydF90ZXJtX3JlZl9waWNfc2V0AFJJZHggPj0gMCAmJiBSSWR4IDwgc2V0cy5zaXplKCkAaj49MCAmJiBqIDwgTUFYX05VTV9SRUZfUElDUwAqJWQlYyAAKiVzCgB2b2lkAGJvb2wAY2hhcgBzaWduZWQgY2hhcgB1bnNpZ25lZCBjaGFyAHNob3J0AHVuc2lnbmVkIHNob3J0AGludAB1bnNpZ25lZCBpbnQAbG9uZwB1bnNpZ25lZCBsb25nAGZsb2F0AGRvdWJsZQBzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBOQU4AMDEyMzQ1Njc4OUFCQ0RFRi4AVCEiGQ0BAgMRSxwMEAQLHRIeJ2hub3BxYiAFBg8TFBUaCBYHKCQXGAkKDhsfJSODgn0mKis8PT4/Q0dKTVhZWltcXV5fYGFjZGVmZ2lqa2xyc3R5ent8AElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE5vIGVycm9yIGluZm9ybWF0aW9uAAD/////////////////////////////////////////////////////////////////AAECAwQFBgcICf////////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wABAgQHAwYFAGluZmluaXR5AG5hbgBMQ19BTEwATENfQ1RZUEUAAAAATENfTlVNRVJJQwAATENfVElNRQAAAAAATENfQ09MTEFURQAATENfTU9ORVRBUlkATENfTUVTU0FHRVMATEFORwBDLlVURi04AFBPU0lYAE1VU0xfTE9DUEFUSABOU3QzX18yOGlvc19iYXNlRQBOU3QzX18yOWJhc2ljX2lvc0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQBOU3QzX18yOWJhc2ljX2lvc0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRQBOU3QzX18yMTViYXNpY19zdHJlYW1idWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUATlN0M19fMjE1YmFzaWNfc3RyZWFtYnVmSXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFAE5TdDNfXzIxM2Jhc2ljX2lzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFRUUATlN0M19fMjEzYmFzaWNfaXN0cmVhbUl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRQBOU3QzX18yMTNiYXNpY19vc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAE5TdDNfXzIxM2Jhc2ljX29zdHJlYW1Jd05TXzExY2hhcl90cmFpdHNJd0VFRUUATlN0M19fMjE0YmFzaWNfaW9zdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFRUUATlN0M19fMjExX19zdGRvdXRidWZJd0VFAE5TdDNfXzIxMV9fc3Rkb3V0YnVmSWNFRQB1bnN1cHBvcnRlZCBsb2NhbGUgZm9yIHN0YW5kYXJkIGlucHV0AE5TdDNfXzIxMF9fc3RkaW5idWZJd0VFAE5TdDNfXzIxMF9fc3RkaW5idWZJY0VFAE5TdDNfXzI3Y29sbGF0ZUljRUUATlN0M19fMjZsb2NhbGU1ZmFjZXRFAE5TdDNfXzI3Y29sbGF0ZUl3RUUAMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRnhYKy1wUGlJbk4AJXAAQwBOU3QzX18yN251bV9nZXRJY05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRUVFAE5TdDNfXzI5X19udW1fZ2V0SWNFRQBOU3QzX18yMTRfX251bV9nZXRfYmFzZUUATlN0M19fMjdudW1fZ2V0SXdOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQBOU3QzX18yOV9fbnVtX2dldEl3RUUAJXAAAAAATABsbAAlAAAAAABsAE5TdDNfXzI3bnVtX3B1dEljTlNfMTlvc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUATlN0M19fMjlfX251bV9wdXRJY0VFAE5TdDNfXzIxNF9fbnVtX3B1dF9iYXNlRQBOU3QzX18yN251bV9wdXRJd05TXzE5b3N0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAE5TdDNfXzI5X19udW1fcHV0SXdFRQAlSDolTTolUwAlbS8lZC8leQAlSTolTTolUyAlcAAlYSAlYiAlZCAlSDolTTolUyAlWQBBTQBQTQBKYW51YXJ5AEZlYnJ1YXJ5AE1hcmNoAEFwcmlsAE1heQBKdW5lAEp1bHkAQXVndXN0AFNlcHRlbWJlcgBPY3RvYmVyAE5vdmVtYmVyAERlY2VtYmVyAEphbgBGZWIATWFyAEFwcgBKdW4ASnVsAEF1ZwBTZXAAT2N0AE5vdgBEZWMAU3VuZGF5AE1vbmRheQBUdWVzZGF5AFdlZG5lc2RheQBUaHVyc2RheQBGcmlkYXkAU2F0dXJkYXkAU3VuAE1vbgBUdWUAV2VkAFRodQBGcmkAU2F0ACVtLyVkLyV5JVktJW0tJWQlSTolTTolUyAlcCVIOiVNJUg6JU06JVMlSDolTTolU05TdDNfXzI4dGltZV9nZXRJY05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRUVFAE5TdDNfXzIyMF9fdGltZV9nZXRfY19zdG9yYWdlSWNFRQBOU3QzX18yOXRpbWVfYmFzZUUATlN0M19fMjh0aW1lX2dldEl3TlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFRUUATlN0M19fMjIwX190aW1lX2dldF9jX3N0b3JhZ2VJd0VFAE5TdDNfXzI4dGltZV9wdXRJY05TXzE5b3N0cmVhbWJ1Zl9pdGVyYXRvckljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRUVFAE5TdDNfXzIxMF9fdGltZV9wdXRFAE5TdDNfXzI4dGltZV9wdXRJd05TXzE5b3N0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAE5TdDNfXzIxMG1vbmV5cHVuY3RJY0xiMEVFRQBOU3QzX18yMTBtb25leV9iYXNlRQBOU3QzX18yMTBtb25leXB1bmN0SWNMYjFFRUUATlN0M19fMjEwbW9uZXlwdW5jdEl3TGIwRUVFAE5TdDNfXzIxMG1vbmV5cHVuY3RJd0xiMUVFRQAwMTIzNDU2Nzg5ACVMZgBOU3QzX18yOW1vbmV5X2dldEljTlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUATlN0M19fMjExX19tb25leV9nZXRJY0VFADAxMjM0NTY3ODkATlN0M19fMjltb25leV9nZXRJd05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAE5TdDNfXzIxMV9fbW9uZXlfZ2V0SXdFRQAlLjBMZgBOU3QzX18yOW1vbmV5X3B1dEljTlNfMTlvc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUATlN0M19fMjExX19tb25leV9wdXRJY0VFAE5TdDNfXzI5bW9uZXlfcHV0SXdOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQBOU3QzX18yMTFfX21vbmV5X3B1dEl3RUUATlN0M19fMjhtZXNzYWdlc0ljRUUATlN0M19fMjEzbWVzc2FnZXNfYmFzZUUATlN0M19fMjE3X193aWRlbl9mcm9tX3V0ZjhJTGozMkVFRQBOU3QzX18yN2NvZGVjdnRJRGljMTFfX21ic3RhdGVfdEVFAE5TdDNfXzIxMmNvZGVjdnRfYmFzZUUATlN0M19fMjE2X19uYXJyb3dfdG9fdXRmOElMajMyRUVFAE5TdDNfXzI4bWVzc2FnZXNJd0VFAE5TdDNfXzI3Y29kZWN2dEljYzExX19tYnN0YXRlX3RFRQBOU3QzX18yN2NvZGVjdnRJd2MxMV9fbWJzdGF0ZV90RUUATlN0M19fMjdjb2RlY3Z0SURzYzExX19tYnN0YXRlX3RFRQBOU3QzX18yNmxvY2FsZTVfX2ltcEUATlN0M19fMjVjdHlwZUljRUUATlN0M19fMjEwY3R5cGVfYmFzZUUATlN0M19fMjVjdHlwZUl3RUUAZmFsc2UAdHJ1ZQBOU3QzX18yOG51bXB1bmN0SWNFRQBOU3QzX18yOG51bXB1bmN0SXdFRQBOU3QzX18yMTRfX3NoYXJlZF9jb3VudEUATlN0M19fMjE5X19zaGFyZWRfd2Vha19jb3VudEUAYmFkX3dlYWtfcHRyAE5TdDNfXzIxMmJhZF93ZWFrX3B0ckUAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABTdDExbG9naWNfZXJyb3IAU3QxMmxlbmd0aF9lcnJvcgBOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYARG4AYgBjAGgAYQBzAHQAaQBqAG0AZgBkAE4xMF9fY3h4YWJpdjExNl9fZW51bV90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0U=\\\"),staticInit:function(){yA.isWindows=!!process.platform.match(/^win/)},mount:function(A){return h(o),yA.createNode(null,\\\"/\\\",yA.getMode(A.opts.root),0)},createNode:function(A,e,r,i){if(!EA.isDir(r)&&!EA.isFile(r)&&!EA.isLink(r))throw new EA.ErrnoError(hA.EINVAL);var f=EA.createNode(A,e,r);return f.node_ops=yA.node_ops,f.stream_ops=yA.stream_ops,f},getMode:function(A){var e;try{e=ur.lstatSync(A),yA.isWindows&&(e.mode=e.mode|(146&e.mode)>>1)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}return e.mode},realPath:function(A){for(var e=[];A.parent!==A;)e.push(A.name),A=A.parent;return e.push(A.mount.opts.root),e.reverse(),mA.join.apply(null,e)},flagsToPermissionStringMap:{0:\\\"r\\\",1:\\\"r+\\\",2:\\\"r+\\\",64:\\\"r\\\",65:\\\"r+\\\",66:\\\"r+\\\",129:\\\"rx+\\\",193:\\\"rx+\\\",514:\\\"w+\\\",577:\\\"w\\\",578:\\\"w+\\\",705:\\\"wx\\\",706:\\\"wx+\\\",1024:\\\"a\\\",1025:\\\"a\\\",1026:\\\"a+\\\",1089:\\\"a\\\",1090:\\\"a+\\\",1153:\\\"ax\\\",1154:\\\"ax+\\\",1217:\\\"ax\\\",1218:\\\"ax+\\\",4096:\\\"rs\\\",4098:\\\"rs+\\\"},flagsToPermissionString:function(A){if(A&=-2097153,A&=-2049,A&=-32769,(A&=-524289)in yA.flagsToPermissionStringMap)return yA.flagsToPermissionStringMap[A];throw new EA.ErrnoError(hA.EINVAL)},node_ops:{getattr:function(A){var e,r=yA.realPath(A);try{e=ur.lstatSync(r)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}return yA.isWindows&&!e.blksize&&(e.blksize=4096),yA.isWindows&&!e.blocks&&(e.blocks=(e.size+e.blksize-1)/e.blksize|0),{dev:e.dev,ino:e.ino,mode:e.mode,nlink:e.nlink,uid:e.uid,gid:e.gid,rdev:e.rdev,size:e.size,atime:e.atime,mtime:e.mtime,ctime:e.ctime,blksize:e.blksize,blocks:e.blocks}},setattr:function(A,e){var r=yA.realPath(A);try{if(void 0!==e.mode&&(ur.chmodSync(r,e.mode),A.mode=e.mode),void 0!==e.timestamp){var i=new Date(e.timestamp);ur.utimesSync(r,i,i)}void 0!==e.size&&ur.truncateSync(r,e.size)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}},lookup:function(A,e){var r=mA.join2(yA.realPath(A),e),i=yA.getMode(r);return yA.createNode(A,e,i)},mknod:function(A,e,r,i){var f=yA.createNode(A,e,r,i),n=yA.realPath(f);try{EA.isDir(f.mode)?ur.mkdirSync(n,f.mode):ur.writeFileSync(n,\\\"\\\",{mode:f.mode})}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}return f},rename:function(A,e,r){var i=yA.realPath(A),f=mA.join2(yA.realPath(e),r);try{ur.renameSync(i,f)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}},unlink:function(A,e){var r=mA.join2(yA.realPath(A),e);try{ur.unlinkSync(r)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}},rmdir:function(A,e){var r=mA.join2(yA.realPath(A),e);try{ur.rmdirSync(r)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}},readdir:function(A){var e=yA.realPath(A);try{return ur.readdirSync(e)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}},symlink:function(A,e,r){var i=mA.join2(yA.realPath(A),e);try{ur.symlinkSync(r,i)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}},readlink:function(A){var e=yA.realPath(A);try{return e=ur.readlinkSync(e),e=br.relative(br.resolve(A.mount.opts.root),e)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}}},stream_ops:{open:function(A){var e=yA.realPath(A.node);try{EA.isFile(A.node.mode)&&(A.nfd=ur.openSync(e,yA.flagsToPermissionString(A.flags)))}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}},close:function(A){try{EA.isFile(A.node.mode)&&A.nfd&&ur.closeSync(A.nfd)}catch(A){if(!A.code)throw A;throw new EA.ErrnoError(hA[A.code])}},read:function(A,e,r,i,f){if(0===i)return 0;var n,t=new Buffer(i);try{n=ur.readSync(A.nfd,t,0,i,f)}catch(A){throw new EA.ErrnoError(hA[A.code])}if(0<n)for(var o=0;o<n;o++)e[r+o]=t[o];return n},write:function(A,e,r,i,f){var n,t=new Buffer(e.subarray(r,r+i));try{n=ur.writeSync(A.nfd,t,0,i,f)}catch(A){throw new EA.ErrnoError(hA[A.code])}return n},llseek:function(A,e,r){var i=e;if(1===r)i+=A.position;else if(2===r&&EA.isFile(A.node.mode))try{i+=ur.fstatSync(A.nfd).size}catch(A){throw new EA.ErrnoError(hA[A.code])}if(i<0)throw new EA.ErrnoError(hA.EINVAL);return i}}},BA={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(A){h(l),BA.reader||(BA.reader=new FileReaderSync);var n=BA.createNode(null,\\\"/\\\",BA.DIR_MODE,0),t={};function i(A){for(var e=A.split(\\\"/\\\"),r=n,i=0;i<e.length-1;i++){var f=e.slice(0,i+1).join(\\\"/\\\");t[f]||(t[f]=BA.createNode(r,e[i],BA.DIR_MODE,0)),r=t[f]}return r}function f(A){var e=A.split(\\\"/\\\");return e[e.length-1]}return Array.prototype.forEach.call(A.opts.files||[],function(A){BA.createNode(i(A.name),f(A.name),BA.FILE_MODE,0,A,A.lastModifiedDate)}),(A.opts.blobs||[]).forEach(function(A){BA.createNode(i(A.name),f(A.name),BA.FILE_MODE,0,A.data)}),(A.opts.packages||[]).forEach(function(r){r.metadata.files.forEach(function(A){var e=A.filename.substr(1);BA.createNode(i(e),f(e),BA.FILE_MODE,0,r.blob.slice(A.start,A.end))})}),n},createNode:function(A,e,r,i,f,n){var t=EA.createNode(A,e,r);return t.mode=r,t.node_ops=BA.node_ops,t.stream_ops=BA.stream_ops,t.timestamp=(n||new Date).getTime(),h(BA.FILE_MODE!==BA.DIR_MODE),r===BA.FILE_MODE?(t.size=f.size,t.contents=f):(t.size=4096,t.contents={}),A&&(A.contents[e]=t),t},node_ops:{getattr:function(A){return{dev:1,ino:void 0,mode:A.mode,nlink:1,uid:0,gid:0,rdev:void 0,size:A.size,atime:new Date(A.timestamp),mtime:new Date(A.timestamp),ctime:new Date(A.timestamp),blksize:4096,blocks:Math.ceil(A.size/4096)}},setattr:function(A,e){void 0!==e.mode&&(A.mode=e.mode),void 0!==e.timestamp&&(A.timestamp=e.timestamp)},lookup:function(A,e){throw new EA.ErrnoError(hA.ENOENT)},mknod:function(A,e,r,i){throw new EA.ErrnoError(hA.EPERM)},rename:function(A,e,r){throw new EA.ErrnoError(hA.EPERM)},unlink:function(A,e){throw new EA.ErrnoError(hA.EPERM)},rmdir:function(A,e){throw new EA.ErrnoError(hA.EPERM)},readdir:function(A){var e=[\\\".\\\",\\\"..\\\"];for(var r in A.contents)A.contents.hasOwnProperty(r)&&e.push(r);return e},symlink:function(A,e,r){throw new EA.ErrnoError(hA.EPERM)},readlink:function(A){throw new EA.ErrnoError(hA.EPERM)}},stream_ops:{read:function(A,e,r,i,f){if(f>=A.node.size)return 0;var n=A.node.contents.slice(f,f+i),t=BA.reader.readAsArrayBuffer(n);return e.set(new Uint8Array(t),r),n.size},write:function(A,e,r,i,f){throw new EA.ErrnoError(hA.EIO)},llseek:function(A,e,r){var i=e;if(1===r?i+=A.position:2===r&&EA.isFile(A.node.mode)&&(i+=A.node.size),i<0)throw new EA.ErrnoError(hA.EINVAL);return i}}};R+=16,R+=16,R+=16;var EA={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:\\\"/\\\",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(A){if(!(A instanceof EA.ErrnoError))throw A+\\\" : \\\"+p();return wA(A.errno)},lookupPath:function(A,e){if(e=e||{},!(A=mA.resolve(EA.cwd(),A)))return{path:\\\"\\\",node:null};var r={follow_mount:!0,recurse_count:0};for(var i in r)void 0===e[i]&&(e[i]=r[i]);if(8<e.recurse_count)throw new EA.ErrnoError(hA.ELOOP);for(var f=mA.normalizeArray(A.split(\\\"/\\\").filter(function(A){return!!A}),!1),n=EA.root,t=\\\"/\\\",o=0;o<f.length;o++){var a=o===f.length-1;if(a&&e.parent)break;if(n=EA.lookupNode(n,f[o]),t=mA.join2(t,f[o]),EA.isMountpoint(n)&&(!a||a&&e.follow_mount)&&(n=n.mounted.root),!a||e.follow)for(var c=0;EA.isLink(n.mode);){var l=EA.readlink(t);if(t=mA.resolve(mA.dirname(t),l),n=EA.lookupPath(t,{recurse_count:e.recurse_count}).node,40<c++)throw new EA.ErrnoError(hA.ELOOP)}}return{path:t,node:n}},getPath:function(A){for(var e;;){if(EA.isRoot(A)){var r=A.mount.mountpoint;return e?\\\"/\\\"!==r[r.length-1]?r+\\\"/\\\"+e:r+e:r}e=e?A.name+\\\"/\\\"+e:A.name,A=A.parent}},hashName:function(A,e){for(var r=0,i=0;i<e.length;i++)r=(r<<5)-r+e.charCodeAt(i)|0;return(A+r>>>0)%EA.nameTable.length},hashAddNode:function(A){var e=EA.hashName(A.parent.id,A.name);A.name_next=EA.nameTable[e],EA.nameTable[e]=A},hashRemoveNode:function(A){var e=EA.hashName(A.parent.id,A.name);if(EA.nameTable[e]===A)EA.nameTable[e]=A.name_next;else for(var r=EA.nameTable[e];r;){if(r.name_next===A){r.name_next=A.name_next;break}r=r.name_next}},lookupNode:function(A,e){var r=EA.mayLookup(A);if(r)throw new EA.ErrnoError(r,A);for(var i=EA.hashName(A.id,e),f=EA.nameTable[i];f;f=f.name_next){var n=f.name;if(f.parent.id===A.id&&n===e)return f}return EA.lookup(A,e)},createNode:function(A,e,r,i){if(!EA.FSNode){EA.FSNode=function(A,e,r,i){A=A||this,this.parent=A,this.mount=A.mount,this.mounted=null,this.id=EA.nextInode++,this.name=e,this.mode=r,this.node_ops={},this.stream_ops={},this.rdev=i},EA.FSNode.prototype={};Object.defineProperties(EA.FSNode.prototype,{read:{get:function(){return 365==(365&this.mode)},set:function(A){A?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146==(146&this.mode)},set:function(A){A?this.mode|=146:this.mode&=-147}},isFolder:{get:function(){return EA.isDir(this.mode)}},isDevice:{get:function(){return EA.isChrdev(this.mode)}}})}var f=new EA.FSNode(A,e,r,i);return EA.hashAddNode(f),f},destroyNode:function(A){EA.hashRemoveNode(A)},isRoot:function(A){return A===A.parent},isMountpoint:function(A){return!!A.mounted},isFile:function(A){return 32768==(61440&A)},isDir:function(A){return 16384==(61440&A)},isLink:function(A){return 40960==(61440&A)},isChrdev:function(A){return 8192==(61440&A)},isBlkdev:function(A){return 24576==(61440&A)},isFIFO:function(A){return 4096==(61440&A)},isSocket:function(A){return 49152==(49152&A)},flagModes:{r:0,rs:1052672,\\\"r+\\\":2,w:577,wx:705,xw:705,\\\"w+\\\":578,\\\"wx+\\\":706,\\\"xw+\\\":706,a:1089,ax:1217,xa:1217,\\\"a+\\\":1090,\\\"ax+\\\":1218,\\\"xa+\\\":1218},modeStringToFlags:function(A){var e=EA.flagModes[A];if(void 0===e)throw new Error(\\\"Unknown file open mode: \\\"+A);return e},flagsToPermissionString:function(A){var e=[\\\"r\\\",\\\"w\\\",\\\"rw\\\"][3&A];return 512&A&&(e+=\\\"w\\\"),e},nodePermissions:function(A,e){return EA.ignorePermissions||(-1===e.indexOf(\\\"r\\\")||292&A.mode)&&(-1===e.indexOf(\\\"w\\\")||146&A.mode)&&(-1===e.indexOf(\\\"x\\\")||73&A.mode)?0:hA.EACCES},mayLookup:function(A){var e=EA.nodePermissions(A,\\\"x\\\");return e||(A.node_ops.lookup?0:hA.EACCES)},mayCreate:function(A,e){try{EA.lookupNode(A,e);return hA.EEXIST}catch(A){}return EA.nodePermissions(A,\\\"wx\\\")},mayDelete:function(A,e,r){var i;try{i=EA.lookupNode(A,e)}catch(A){return A.errno}var f=EA.nodePermissions(A,\\\"wx\\\");if(f)return f;if(r){if(!EA.isDir(i.mode))return hA.ENOTDIR;if(EA.isRoot(i)||EA.getPath(i)===EA.cwd())return hA.EBUSY}else if(EA.isDir(i.mode))return hA.EISDIR;return 0},mayOpen:function(A,e){return A?EA.isLink(A.mode)?hA.ELOOP:EA.isDir(A.mode)&&(\\\"r\\\"!==EA.flagsToPermissionString(e)||512&e)?hA.EISDIR:EA.nodePermissions(A,EA.flagsToPermissionString(e)):hA.ENOENT},MAX_OPEN_FDS:4096,nextfd:function(A,e){A=A||0,e=e||EA.MAX_OPEN_FDS;for(var r=A;r<=e;r++)if(!EA.streams[r])return r;throw new EA.ErrnoError(hA.EMFILE)},getStream:function(A){return EA.streams[A]},createStream:function(A,e,r){EA.FSStream||(EA.FSStream=function(){},EA.FSStream.prototype={},Object.defineProperties(EA.FSStream.prototype,{object:{get:function(){return this.node},set:function(A){this.node=A}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}));var i=new EA.FSStream;for(var f in A)i[f]=A[f];A=i;var n=EA.nextfd(e,r);return A.fd=n,EA.streams[n]=A},closeStream:function(A){EA.streams[A]=null},chrdev_stream_ops:{open:function(A){var e=EA.getDevice(A.node.rdev);A.stream_ops=e.stream_ops,A.stream_ops.open&&A.stream_ops.open(A)},llseek:function(){throw new EA.ErrnoError(hA.ESPIPE)}},major:function(A){return A>>8},minor:function(A){return 255&A},makedev:function(A,e){return A<<8|e},registerDevice:function(A,e){EA.devices[A]={stream_ops:e}},getDevice:function(A){return EA.devices[A]},getMounts:function(A){for(var e=[],r=[A];r.length;){var i=r.pop();e.push(i),r.push.apply(r,i.mounts)}return e},syncfs:function(e,r){\\\"function\\\"==typeof e&&(r=e,e=!1),EA.syncFSRequests++,1<EA.syncFSRequests&&console.log(\\\"warning: \\\"+EA.syncFSRequests+\\\" FS.syncfs operations in flight at once, probably just doing extra work\\\");var i=EA.getMounts(EA.root.mount),f=0;function n(A){return h(0<EA.syncFSRequests),EA.syncFSRequests--,r(A)}function t(A){if(A)return t.errored?void 0:(t.errored=!0,n(A));++f>=i.length&&n(null)}i.forEach(function(A){if(!A.type.syncfs)return t(null);A.type.syncfs(A,e,t)})},mount:function(A,e,r){var i,f=\\\"/\\\"===r,n=!r;if(f&&EA.root)throw new EA.ErrnoError(hA.EBUSY);if(!f&&!n){var t=EA.lookupPath(r,{follow_mount:!1});if(r=t.path,i=t.node,EA.isMountpoint(i))throw new EA.ErrnoError(hA.EBUSY);if(!EA.isDir(i.mode))throw new EA.ErrnoError(hA.ENOTDIR)}var o={type:A,opts:e,mountpoint:r,mounts:[]},a=A.mount(o);return(a.mount=o).root=a,f?EA.root=a:i&&(i.mounted=o,i.mount&&i.mount.mounts.push(o)),a},unmount:function(A){var e=EA.lookupPath(A,{follow_mount:!1});if(!EA.isMountpoint(e.node))throw new EA.ErrnoError(hA.EINVAL);var r=e.node,i=r.mounted,f=EA.getMounts(i);Object.keys(EA.nameTable).forEach(function(A){for(var e=EA.nameTable[A];e;){var r=e.name_next;-1!==f.indexOf(e.mount)&&EA.destroyNode(e),e=r}}),r.mounted=null;var n=r.mount.mounts.indexOf(i);h(-1!==n),r.mount.mounts.splice(n,1)},lookup:function(A,e){return A.node_ops.lookup(A,e)},mknod:function(A,e,r){var i=EA.lookupPath(A,{parent:!0}).node,f=mA.basename(A);if(!f||\\\".\\\"===f||\\\"..\\\"===f)throw new EA.ErrnoError(hA.EINVAL);var n=EA.mayCreate(i,f);if(n)throw new EA.ErrnoError(n);if(!i.node_ops.mknod)throw new EA.ErrnoError(hA.EPERM);return i.node_ops.mknod(i,f,e,r)},create:function(A,e){return e=void 0!==e?e:438,e&=4095,e|=32768,EA.mknod(A,e,0)},mkdir:function(A,e){return e=void 0!==e?e:511,e&=1023,e|=16384,EA.mknod(A,e,0)},mkdirTree:function(A,e){for(var r=A.split(\\\"/\\\"),i=\\\"\\\",f=0;f<r.length;++f)if(r[f]){i+=\\\"/\\\"+r[f];try{EA.mkdir(i,e)}catch(A){if(A.errno!=hA.EEXIST)throw A}}},mkdev:function(A,e,r){return void 0===r&&(r=e,e=438),e|=8192,EA.mknod(A,e,r)},symlink:function(A,e){if(!mA.resolve(A))throw new EA.ErrnoError(hA.ENOENT);var r=EA.lookupPath(e,{parent:!0}).node;if(!r)throw new EA.ErrnoError(hA.ENOENT);var i=mA.basename(e),f=EA.mayCreate(r,i);if(f)throw new EA.ErrnoError(f);if(!r.node_ops.symlink)throw new EA.ErrnoError(hA.EPERM);return r.node_ops.symlink(r,i,A)},rename:function(e,r){var A,i,f=mA.dirname(e),n=mA.dirname(r),t=mA.basename(e),o=mA.basename(r);try{A=EA.lookupPath(e,{parent:!0}).node,i=EA.lookupPath(r,{parent:!0}).node}catch(A){throw new EA.ErrnoError(hA.EBUSY)}if(!A||!i)throw new EA.ErrnoError(hA.ENOENT);if(A.mount!==i.mount)throw new EA.ErrnoError(hA.EXDEV);var a,c=EA.lookupNode(A,t),l=mA.relative(e,n);if(\\\".\\\"!==l.charAt(0))throw new EA.ErrnoError(hA.EINVAL);if(\\\".\\\"!==(l=mA.relative(r,f)).charAt(0))throw new EA.ErrnoError(hA.ENOTEMPTY);try{a=EA.lookupNode(i,o)}catch(A){}if(c!==a){var u=EA.isDir(c.mode),b=EA.mayDelete(A,t,u);if(b)throw new EA.ErrnoError(b);if(b=a?EA.mayDelete(i,o,u):EA.mayCreate(i,o))throw new EA.ErrnoError(b);if(!A.node_ops.rename)throw new EA.ErrnoError(hA.EPERM);if(EA.isMountpoint(c)||a&&EA.isMountpoint(a))throw new EA.ErrnoError(hA.EBUSY);if(i!==A&&(b=EA.nodePermissions(A,\\\"w\\\")))throw new EA.ErrnoError(b);try{EA.trackingDelegate.willMovePath&&EA.trackingDelegate.willMovePath(e,r)}catch(A){console.log(\\\"FS.trackingDelegate['willMovePath']('\\\"+e+\\\"', '\\\"+r+\\\"') threw an exception: \\\"+A.message)}EA.hashRemoveNode(c);try{A.node_ops.rename(c,i,o)}catch(A){throw A}finally{EA.hashAddNode(c)}try{EA.trackingDelegate.onMovePath&&EA.trackingDelegate.onMovePath(e,r)}catch(A){console.log(\\\"FS.trackingDelegate['onMovePath']('\\\"+e+\\\"', '\\\"+r+\\\"') threw an exception: \\\"+A.message)}}},rmdir:function(e){var A=EA.lookupPath(e,{parent:!0}).node,r=mA.basename(e),i=EA.lookupNode(A,r),f=EA.mayDelete(A,r,!0);if(f)throw new EA.ErrnoError(f);if(!A.node_ops.rmdir)throw new EA.ErrnoError(hA.EPERM);if(EA.isMountpoint(i))throw new EA.ErrnoError(hA.EBUSY);try{EA.trackingDelegate.willDeletePath&&EA.trackingDelegate.willDeletePath(e)}catch(A){console.log(\\\"FS.trackingDelegate['willDeletePath']('\\\"+e+\\\"') threw an exception: \\\"+A.message)}A.node_ops.rmdir(A,r),EA.destroyNode(i);try{EA.trackingDelegate.onDeletePath&&EA.trackingDelegate.onDeletePath(e)}catch(A){console.log(\\\"FS.trackingDelegate['onDeletePath']('\\\"+e+\\\"') threw an exception: \\\"+A.message)}},readdir:function(A){var e=EA.lookupPath(A,{follow:!0}).node;if(!e.node_ops.readdir)throw new EA.ErrnoError(hA.ENOTDIR);return e.node_ops.readdir(e)},unlink:function(e){var A=EA.lookupPath(e,{parent:!0}).node,r=mA.basename(e),i=EA.lookupNode(A,r),f=EA.mayDelete(A,r,!1);if(f)throw new EA.ErrnoError(f);if(!A.node_ops.unlink)throw new EA.ErrnoError(hA.EPERM);if(EA.isMountpoint(i))throw new EA.ErrnoError(hA.EBUSY);try{EA.trackingDelegate.willDeletePath&&EA.trackingDelegate.willDeletePath(e)}catch(A){console.log(\\\"FS.trackingDelegate['willDeletePath']('\\\"+e+\\\"') threw an exception: \\\"+A.message)}A.node_ops.unlink(A,r),EA.destroyNode(i);try{EA.trackingDelegate.onDeletePath&&EA.trackingDelegate.onDeletePath(e)}catch(A){console.log(\\\"FS.trackingDelegate['onDeletePath']('\\\"+e+\\\"') threw an exception: \\\"+A.message)}},readlink:function(A){var e=EA.lookupPath(A).node;if(!e)throw new EA.ErrnoError(hA.ENOENT);if(!e.node_ops.readlink)throw new EA.ErrnoError(hA.EINVAL);return mA.resolve(EA.getPath(e.parent),e.node_ops.readlink(e))},stat:function(A,e){var r=EA.lookupPath(A,{follow:!e}).node;if(!r)throw new EA.ErrnoError(hA.ENOENT);if(!r.node_ops.getattr)throw new EA.ErrnoError(hA.EPERM);return r.node_ops.getattr(r)},lstat:function(A){return EA.stat(A,!0)},chmod:function(A,e,r){var i;\\\"string\\\"==typeof A?i=EA.lookupPath(A,{follow:!r}).node:i=A;if(!i.node_ops.setattr)throw new EA.ErrnoError(hA.EPERM);i.node_ops.setattr(i,{mode:4095&e|-4096&i.mode,timestamp:Date.now()})},lchmod:function(A,e){EA.chmod(A,e,!0)},fchmod:function(A,e){var r=EA.getStream(A);if(!r)throw new EA.ErrnoError(hA.EBADF);EA.chmod(r.node,e)},chown:function(A,e,r,i){var f;\\\"string\\\"==typeof A?f=EA.lookupPath(A,{follow:!i}).node:f=A;if(!f.node_ops.setattr)throw new EA.ErrnoError(hA.EPERM);f.node_ops.setattr(f,{timestamp:Date.now()})},lchown:function(A,e,r){EA.chown(A,e,r,!0)},fchown:function(A,e,r){var i=EA.getStream(A);if(!i)throw new EA.ErrnoError(hA.EBADF);EA.chown(i.node,e,r)},truncate:function(A,e){if(e<0)throw new EA.ErrnoError(hA.EINVAL);var r;\\\"string\\\"==typeof A?r=EA.lookupPath(A,{follow:!0}).node:r=A;if(!r.node_ops.setattr)throw new EA.ErrnoError(hA.EPERM);if(EA.isDir(r.mode))throw new EA.ErrnoError(hA.EISDIR);if(!EA.isFile(r.mode))throw new EA.ErrnoError(hA.EINVAL);var i=EA.nodePermissions(r,\\\"w\\\");if(i)throw new EA.ErrnoError(i);r.node_ops.setattr(r,{size:e,timestamp:Date.now()})},ftruncate:function(A,e){var r=EA.getStream(A);if(!r)throw new EA.ErrnoError(hA.EBADF);if(0==(2097155&r.flags))throw new EA.ErrnoError(hA.EINVAL);EA.truncate(r.node,e)},utime:function(A,e,r){var i=EA.lookupPath(A,{follow:!0}).node;i.node_ops.setattr(i,{timestamp:Math.max(e,r)})},open:function(e,A,r,i,f){if(\\\"\\\"===e)throw new EA.ErrnoError(hA.ENOENT);var n;if(r=void 0===r?438:r,r=64&(A=\\\"string\\\"==typeof A?EA.modeStringToFlags(A):A)?4095&r|32768:0,\\\"object\\\"==typeof e)n=e;else{e=mA.normalize(e);try{n=EA.lookupPath(e,{follow:!(131072&A)}).node}catch(A){}}var t=!1;if(64&A)if(n){if(128&A)throw new EA.ErrnoError(hA.EEXIST)}else n=EA.mknod(e,r,0),t=!0;if(!n)throw new EA.ErrnoError(hA.ENOENT);if(EA.isChrdev(n.mode)&&(A&=-513),65536&A&&!EA.isDir(n.mode))throw new EA.ErrnoError(hA.ENOTDIR);if(!t){var o=EA.mayOpen(n,A);if(o)throw new EA.ErrnoError(o)}512&A&&EA.truncate(n,0),A&=-641;var a=EA.createStream({node:n,path:EA.getPath(n),flags:A,seekable:!0,position:0,stream_ops:n.stream_ops,ungotten:[],error:!1},i,f);a.stream_ops.open&&a.stream_ops.open(a),!d.logReadFiles||1&A||(EA.readFiles||(EA.readFiles={}),e in EA.readFiles||(EA.readFiles[e]=1,d.printErr(\\\"read file: \\\"+e)));try{if(EA.trackingDelegate.onOpenFile){var c=0;1!=(2097155&A)&&(c|=EA.tracking.openFlags.READ),0!=(2097155&A)&&(c|=EA.tracking.openFlags.WRITE),EA.trackingDelegate.onOpenFile(e,c)}}catch(A){console.log(\\\"FS.trackingDelegate['onOpenFile']('\\\"+e+\\\"', flags) threw an exception: \\\"+A.message)}return a},close:function(A){A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(A){throw A}finally{EA.closeStream(A.fd)}},llseek:function(A,e,r){if(!A.seekable||!A.stream_ops.llseek)throw new EA.ErrnoError(hA.ESPIPE);return A.position=A.stream_ops.llseek(A,e,r),A.ungotten=[],A.position},read:function(A,e,r,i,f){if(i<0||f<0)throw new EA.ErrnoError(hA.EINVAL);if(1==(2097155&A.flags))throw new EA.ErrnoError(hA.EBADF);if(EA.isDir(A.node.mode))throw new EA.ErrnoError(hA.EISDIR);if(!A.stream_ops.read)throw new EA.ErrnoError(hA.EINVAL);var n=!0;if(void 0===f)f=A.position,n=!1;else if(!A.seekable)throw new EA.ErrnoError(hA.ESPIPE);var t=A.stream_ops.read(A,e,r,i,f);return n||(A.position+=t),t},write:function(A,e,r,i,f,n){if(i<0||f<0)throw new EA.ErrnoError(hA.EINVAL);if(0==(2097155&A.flags))throw new EA.ErrnoError(hA.EBADF);if(EA.isDir(A.node.mode))throw new EA.ErrnoError(hA.EISDIR);if(!A.stream_ops.write)throw new EA.ErrnoError(hA.EINVAL);1024&A.flags&&EA.llseek(A,0,2);var t=!0;if(void 0===f)f=A.position,t=!1;else if(!A.seekable)throw new EA.ErrnoError(hA.ESPIPE);var o=A.stream_ops.write(A,e,r,i,f,n);t||(A.position+=o);try{A.path&&EA.trackingDelegate.onWriteToFile&&EA.trackingDelegate.onWriteToFile(A.path)}catch(A){console.log(\\\"FS.trackingDelegate['onWriteToFile']('\\\"+path+\\\"') threw an exception: \\\"+A.message)}return o},allocate:function(A,e,r){if(e<0||r<=0)throw new EA.ErrnoError(hA.EINVAL);if(0==(2097155&A.flags))throw new EA.ErrnoError(hA.EBADF);if(!EA.isFile(A.node.mode)&&!EA.isDir(A.node.mode))throw new EA.ErrnoError(hA.ENODEV);if(!A.stream_ops.allocate)throw new EA.ErrnoError(hA.EOPNOTSUPP);A.stream_ops.allocate(A,e,r)},mmap:function(A,e,r,i,f,n,t){if(1==(2097155&A.flags))throw new EA.ErrnoError(hA.EACCES);if(!A.stream_ops.mmap)throw new EA.ErrnoError(hA.ENODEV);return A.stream_ops.mmap(A,e,r,i,f,n,t)},msync:function(A,e,r,i,f){return A&&A.stream_ops.msync?A.stream_ops.msync(A,e,r,i,f):0},munmap:function(A){return 0},ioctl:function(A,e,r){if(!A.stream_ops.ioctl)throw new EA.ErrnoError(hA.ENOTTY);return A.stream_ops.ioctl(A,e,r)},readFile:function(A,e){if((e=e||{}).flags=e.flags||\\\"r\\\",e.encoding=e.encoding||\\\"binary\\\",\\\"utf8\\\"!==e.encoding&&\\\"binary\\\"!==e.encoding)throw new Error('Invalid encoding type \\\"'+e.encoding+'\\\"');var r,i=EA.open(A,e.flags),f=EA.stat(A).size,n=new Uint8Array(f);return EA.read(i,n,0,f,0),\\\"utf8\\\"===e.encoding?r=c(n,0):\\\"binary\\\"===e.encoding&&(r=n),EA.close(i),r},writeFile:function(A,e,r){if((r=r||{}).flags=r.flags||\\\"w\\\",r.encoding=r.encoding||\\\"utf8\\\",\\\"utf8\\\"!==r.encoding&&\\\"binary\\\"!==r.encoding)throw new Error('Invalid encoding type \\\"'+r.encoding+'\\\"');var i=EA.open(A,r.flags,r.mode);if(\\\"utf8\\\"===r.encoding){var f=new Uint8Array(Z(e)+1),n=b(e,f,0,f.length);EA.write(i,f,0,n,0,r.canOwn)}else\\\"binary\\\"===r.encoding&&EA.write(i,e,0,e.length,0,r.canOwn);EA.close(i)},cwd:function(){return EA.currentPath},chdir:function(A){var e=EA.lookupPath(A,{follow:!0});if(null===e.node)throw new EA.ErrnoError(hA.ENOENT);if(!EA.isDir(e.node.mode))throw new EA.ErrnoError(hA.ENOTDIR);var r=EA.nodePermissions(e.node,\\\"x\\\");if(r)throw new EA.ErrnoError(r);EA.currentPath=e.path},createDefaultDirectories:function(){EA.mkdir(\\\"/tmp\\\"),EA.mkdir(\\\"/home\\\"),EA.mkdir(\\\"/home/web_user\\\")},createDefaultDevices:function(){var A;if(EA.mkdir(\\\"/dev\\\"),EA.registerDevice(EA.makedev(1,3),{read:function(){return 0},write:function(A,e,r,i,f){return i}}),EA.mkdev(\\\"/dev/null\\\",EA.makedev(1,3)),gA.register(EA.makedev(5,0),gA.default_tty_ops),gA.register(EA.makedev(6,0),gA.default_tty1_ops),EA.mkdev(\\\"/dev/tty\\\",EA.makedev(5,0)),EA.mkdev(\\\"/dev/tty1\\\",EA.makedev(6,0)),\\\"undefined\\\"!=typeof crypto){var e=new Uint8Array(1);A=function(){return crypto.getRandomValues(e),e[0]}}else A=o?function(){return require(\\\"crypto\\\").randomBytes(1)[0]}:function(){return 256*Math.random()|0};EA.createDevice(\\\"/dev\\\",\\\"random\\\",A),EA.createDevice(\\\"/dev\\\",\\\"urandom\\\",A),EA.mkdir(\\\"/dev/shm\\\"),EA.mkdir(\\\"/dev/shm/tmp\\\")},createSpecialDirectories:function(){EA.mkdir(\\\"/proc\\\"),EA.mkdir(\\\"/proc/self\\\"),EA.mkdir(\\\"/proc/self/fd\\\"),EA.mount({mount:function(){var A=EA.createNode(\\\"/proc/self\\\",\\\"fd\\\",16895,73);return A.node_ops={lookup:function(A,e){var r=+e,i=EA.getStream(r);if(!i)throw new EA.ErrnoError(hA.EBADF);var f={parent:null,mount:{mountpoint:\\\"fake\\\"},node_ops:{readlink:function(){return i.path}}};return f.parent=f}},A}},{},\\\"/proc/self/fd\\\")},createStandardStreams:function(){d.stdin?EA.createDevice(\\\"/dev\\\",\\\"stdin\\\",d.stdin):EA.symlink(\\\"/dev/tty\\\",\\\"/dev/stdin\\\"),d.stdout?EA.createDevice(\\\"/dev\\\",\\\"stdout\\\",null,d.stdout):EA.symlink(\\\"/dev/tty\\\",\\\"/dev/stdout\\\"),d.stderr?EA.createDevice(\\\"/dev\\\",\\\"stderr\\\",null,d.stderr):EA.symlink(\\\"/dev/tty1\\\",\\\"/dev/stderr\\\");var A=EA.open(\\\"/dev/stdin\\\",\\\"r\\\");h(0===A.fd,\\\"invalid handle for stdin (\\\"+A.fd+\\\")\\\");var e=EA.open(\\\"/dev/stdout\\\",\\\"w\\\");h(1===e.fd,\\\"invalid handle for stdout (\\\"+e.fd+\\\")\\\");var r=EA.open(\\\"/dev/stderr\\\",\\\"w\\\");h(2===r.fd,\\\"invalid handle for stderr (\\\"+r.fd+\\\")\\\")},ensureErrnoError:function(){EA.ErrnoError||(EA.ErrnoError=function(A,e){this.node=e,this.setErrno=function(A){for(var e in this.errno=A,hA)if(hA[e]===A){this.code=e;break}},this.setErrno(A),this.message=vA[A],this.stack&&Object.defineProperty(this,\\\"stack\\\",{value:(new Error).stack})},EA.ErrnoError.prototype=new Error,EA.ErrnoError.prototype.constructor=EA.ErrnoError,[hA.ENOENT].forEach(function(A){EA.genericErrors[A]=new EA.ErrnoError(A),EA.genericErrors[A].stack=\\\"<generic error, no stack>\\\"}))},staticInit:function(){EA.ensureErrnoError(),EA.nameTable=new Array(4096),EA.mount(ZA,{},\\\"/\\\"),EA.createDefaultDirectories(),EA.createDefaultDevices(),EA.createSpecialDirectories(),EA.filesystems={MEMFS:ZA,IDBFS:pA,NODEFS:yA,WORKERFS:BA}},init:function(A,e,r){h(!EA.init.initialized,\\\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\\\"),EA.init.initialized=!0,EA.ensureErrnoError(),d.stdin=A||d.stdin,d.stdout=e||d.stdout,d.stderr=r||d.stderr,EA.createStandardStreams()},quit:function(){EA.init.initialized=!1;var A=d._fflush;A&&A(0);for(var e=0;e<EA.streams.length;e++){var r=EA.streams[e];r&&EA.close(r)}},getMode:function(A,e){var r=0;return A&&(r|=365),e&&(r|=146),r},joinPath:function(A,e){var r=mA.join.apply(null,A);return e&&\\\"/\\\"==r[0]&&(r=r.substr(1)),r},absolutePath:function(A,e){return mA.resolve(e,A)},standardizePath:function(A){return mA.normalize(A)},findObject:function(A,e){var r=EA.analyzePath(A,e);return r.exists?r.object:(wA(r.error),null)},analyzePath:function(A,e){try{A=(i=EA.lookupPath(A,{follow:!e})).path}catch(A){}var r={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var i=EA.lookupPath(A,{parent:!0});r.parentExists=!0,r.parentPath=i.path,r.parentObject=i.node,r.name=mA.basename(A),i=EA.lookupPath(A,{follow:!e}),r.exists=!0,r.path=i.path,r.object=i.node,r.name=i.node.name,r.isRoot=\\\"/\\\"===i.path}catch(A){r.error=A.errno}return r},createFolder:function(A,e,r,i){var f=mA.join2(\\\"string\\\"==typeof A?A:EA.getPath(A),e),n=EA.getMode(r,i);return EA.mkdir(f,n)},createPath:function(A,e,r,i){A=\\\"string\\\"==typeof A?A:EA.getPath(A);for(var f=e.split(\\\"/\\\").reverse();f.length;){var n=f.pop();if(n){var t=mA.join2(A,n);try{EA.mkdir(t)}catch(A){}A=t}}return t},createFile:function(A,e,r,i,f){var n=mA.join2(\\\"string\\\"==typeof A?A:EA.getPath(A),e),t=EA.getMode(i,f);return EA.create(n,t)},createDataFile:function(A,e,r,i,f,n){var t=e?mA.join2(\\\"string\\\"==typeof A?A:EA.getPath(A),e):A,o=EA.getMode(i,f),a=EA.create(t,o);if(r){if(\\\"string\\\"==typeof r){for(var c=new Array(r.length),l=0,u=r.length;l<u;++l)c[l]=r.charCodeAt(l);r=c}EA.chmod(a,146|o);var b=EA.open(a,\\\"w\\\");EA.write(b,r,0,r.length,0,n),EA.close(b),EA.chmod(a,o)}return a},createDevice:function(A,e,a,t){var r=mA.join2(\\\"string\\\"==typeof A?A:EA.getPath(A),e),i=EA.getMode(!!a,!!t);EA.createDevice.major||(EA.createDevice.major=64);var f=EA.makedev(EA.createDevice.major++,0);return EA.registerDevice(f,{open:function(A){A.seekable=!1},close:function(A){t&&t.buffer&&t.buffer.length&&t(10)},read:function(A,e,r,i,f){for(var n=0,t=0;t<i;t++){var o;try{o=a()}catch(A){throw new EA.ErrnoError(hA.EIO)}if(void 0===o&&0===n)throw new EA.ErrnoError(hA.EAGAIN);if(null==o)break;n++,e[r+t]=o}return n&&(A.node.timestamp=Date.now()),n},write:function(A,e,r,i,f){for(var n=0;n<i;n++)try{t(e[r+n])}catch(A){throw new EA.ErrnoError(hA.EIO)}return i&&(A.node.timestamp=Date.now()),n}}),EA.mkdev(r,i,f)},createLink:function(A,e,r,i,f){var n=mA.join2(\\\"string\\\"==typeof A?A:EA.getPath(A),e);return EA.symlink(r,n)},forceLoadFile:function(A){if(A.isDevice||A.isFolder||A.link||A.contents)return!0;var e=!0;if(\\\"undefined\\\"!=typeof XMLHttpRequest)throw new Error(\\\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\\\");if(!d.read)throw new Error(\\\"Cannot load without read() or XMLHttpRequest.\\\");try{A.contents=dr(d.read(A.url),!0),A.usedBytes=A.contents.length}catch(A){e=!1}return e||wA(hA.EIO),e},createLazyFile:function(A,e,o,r,i){function f(){this.lengthKnown=!1,this.chunks=[]}if(f.prototype.get=function(A){if(!(A>this.length-1||A<0)){var e=A%this.chunkSize,r=A/this.chunkSize|0;return this.getter(r)[e]}},f.prototype.setDataGetter=function(A){this.getter=A},f.prototype.cacheLength=function(){var A=new XMLHttpRequest;if(A.open(\\\"HEAD\\\",o,!1),A.send(null),!(200<=A.status&&A.status<300||304===A.status))throw new Error(\\\"Couldn't load \\\"+o+\\\". Status: \\\"+A.status);var e,i=Number(A.getResponseHeader(\\\"Content-length\\\")),r=(e=A.getResponseHeader(\\\"Accept-Ranges\\\"))&&\\\"bytes\\\"===e,f=(e=A.getResponseHeader(\\\"Content-Encoding\\\"))&&\\\"gzip\\\"===e,n=1048576;r||(n=i);var t=this;t.setDataGetter(function(A){var e=A*n,r=(A+1)*n-1;if(r=Math.min(r,i-1),void 0===t.chunks[A]&&(t.chunks[A]=function(A,e){if(e<A)throw new Error(\\\"invalid range (\\\"+A+\\\", \\\"+e+\\\") or no bytes requested!\\\");if(i-1<e)throw new Error(\\\"only \\\"+i+\\\" bytes available! programmer error!\\\");var r=new XMLHttpRequest;if(r.open(\\\"GET\\\",o,!1),i!==n&&r.setRequestHeader(\\\"Range\\\",\\\"bytes=\\\"+A+\\\"-\\\"+e),\\\"undefined\\\"!=typeof Uint8Array&&(r.responseType=\\\"arraybuffer\\\"),r.overrideMimeType&&r.overrideMimeType(\\\"text/plain; charset=x-user-defined\\\"),r.send(null),!(200<=r.status&&r.status<300||304===r.status))throw new Error(\\\"Couldn't load \\\"+o+\\\". Status: \\\"+r.status);return void 0!==r.response?new Uint8Array(r.response||[]):dr(r.responseText||\\\"\\\",!0)}(e,r)),void 0===t.chunks[A])throw new Error(\\\"doXHR failed!\\\");return t.chunks[A]}),!f&&i||(n=i=1,i=this.getter(0).length,n=i,console.log(\\\"LazyFiles on gzip forces download of the whole file when length is accessed\\\")),this._length=i,this._chunkSize=n,this.lengthKnown=!0},\\\"undefined\\\"!=typeof XMLHttpRequest){if(!l)throw\\\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\\\";var n=new f;Object.defineProperties(n,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var t={isDevice:!1,contents:n}}else t={isDevice:!1,url:o};var a=EA.createFile(A,e,t,r,i);t.contents?a.contents=t.contents:t.url&&(a.contents=null,a.url=t.url),Object.defineProperties(a,{usedBytes:{get:function(){return this.contents.length}}});var c={};return Object.keys(a.stream_ops).forEach(function(A){var e=a.stream_ops[A];c[A]=function(){if(!EA.forceLoadFile(a))throw new EA.ErrnoError(hA.EIO);return e.apply(null,arguments)}}),c.read=function(A,e,r,i,f){if(!EA.forceLoadFile(a))throw new EA.ErrnoError(hA.EIO);var n=A.node.contents;if(f>=n.length)return 0;var t=Math.min(n.length-f,i);if(h(0<=t),n.slice)for(var o=0;o<t;o++)e[r+o]=n[f+o];else for(o=0;o<t;o++)e[r+o]=n.get(f+o);return t},a.stream_ops=c,a},createPreloadedFile:function(f,n,A,t,o,a,c,l,u,b){Browser.init();var s=n?mA.resolve(mA.join2(f,n)):f;function e(e){function r(A){b&&b(),l||EA.createDataFile(f,n,A,t,o,u),a&&a(),uA()}var i=!1;d.preloadPlugins.forEach(function(A){i||A.canHandle(s)&&(A.handle(e,s,r,function(){c&&c(),uA()}),i=!0)}),i||r(e)}lA(),\\\"string\\\"==typeof A?Browser.asyncLoad(A,function(A){e(A)},c):e(A)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return\\\"EM_FS_\\\"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:\\\"FILE_DATA\\\",saveFilesToDB:function(e,o,a){o=o||function(){},a=a||function(){};var A=EA.indexedDB();try{var c=A.open(EA.DB_NAME(),EA.DB_VERSION)}catch(A){return a(A)}c.onupgradeneeded=function(){console.log(\\\"creating db\\\"),c.result.createObjectStore(EA.DB_STORE_NAME)},c.onsuccess=function(){var A=c.result.transaction([EA.DB_STORE_NAME],\\\"readwrite\\\"),r=A.objectStore(EA.DB_STORE_NAME),i=0,f=0,n=e.length;function t(){(0==f?o:a)()}e.forEach(function(A){var e=r.put(EA.analyzePath(A).object.contents,A);e.onsuccess=function(){++i+f==n&&t()},e.onerror=function(){i+ ++f==n&&t()}}),A.onerror=a},c.onerror=a},loadFilesFromDB:function(o,a,c){a=a||function(){},c=c||function(){};var A=EA.indexedDB();try{var l=A.open(EA.DB_NAME(),EA.DB_VERSION)}catch(A){return c(A)}l.onupgradeneeded=c,l.onsuccess=function(){var A=l.result;try{var e=A.transaction([EA.DB_STORE_NAME],\\\"readonly\\\")}catch(A){return void c(A)}var r=e.objectStore(EA.DB_STORE_NAME),i=0,f=0,n=o.length;function t(){(0==f?a:c)()}o.forEach(function(A){var e=r.get(A);e.onsuccess=function(){EA.analyzePath(A).exists&&EA.unlink(A),EA.createDataFile(mA.dirname(A),mA.basename(A),e.result,!0,!0,!0),++i+f==n&&t()},e.onerror=function(){i+ ++f==n&&t()}}),e.onerror=c},l.onerror=c}},XA={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function(A,e){if(\\\"/\\\"!==e[0]){var r;if(-100===A)r=EA.cwd();else{var i=EA.getStream(A);if(!i)throw new EA.ErrnoError(hA.EBADF);r=i.path}e=mA.join2(r,e)}return e},doStat:function(A,e,r){try{var i=A(e)}catch(A){if(A&&A.node&&mA.normalize(e)!==mA.normalize(EA.getPath(A.node)))return-hA.ENOTDIR;throw A}return I[r>>2]=i.dev,I[r+4>>2]=0,I[r+8>>2]=i.ino,I[r+12>>2]=i.mode,I[r+16>>2]=i.nlink,I[r+20>>2]=i.uid,I[r+24>>2]=i.gid,I[r+28>>2]=i.rdev,I[r+32>>2]=0,I[r+36>>2]=i.size,I[r+40>>2]=4096,I[r+44>>2]=i.blocks,I[r+48>>2]=i.atime.getTime()/1e3|0,I[r+52>>2]=0,I[r+56>>2]=i.mtime.getTime()/1e3|0,I[r+60>>2]=0,I[r+64>>2]=i.ctime.getTime()/1e3|0,I[r+68>>2]=0,I[r+72>>2]=i.ino,0},doMsync:function(A,e,r,i){var f=new Uint8Array(E.subarray(A,A+r));EA.msync(e,f,0,r,i)},doMkdir:function(A,e){return\\\"/\\\"===(A=mA.normalize(A))[A.length-1]&&(A=A.substr(0,A.length-1)),EA.mkdir(A,e,0),0},doMknod:function(A,e,r){switch(61440&e){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-hA.EINVAL}return EA.mknod(A,e,r),0},doReadlink:function(A,e,r){if(r<=0)return-hA.EINVAL;var i=EA.readlink(A),f=Math.min(r,Z(i)),n=B[e+f];return s(i,e,r+1),B[e+f]=n,f},doAccess:function(A,e){if(-8&e)return-hA.EINVAL;var r;r=EA.lookupPath(A,{follow:!0}).node;var i=\\\"\\\";return 4&e&&(i+=\\\"r\\\"),2&e&&(i+=\\\"w\\\"),1&e&&(i+=\\\"x\\\"),i&&EA.nodePermissions(r,i)?-hA.EACCES:0},doDup:function(A,e,r){var i=EA.getStream(r);return i&&EA.close(i),EA.open(A,e,0,r,r).fd},doReadv:function(A,e,r,i){for(var f=0,n=0;n<r;n++){var t=I[e+8*n>>2],o=I[e+(8*n+4)>>2],a=EA.read(A,B,t,o,i);if(a<0)return-1;if(f+=a,a<o)break}return f},doWritev:function(A,e,r,i){for(var f=0,n=0;n<r;n++){var t=I[e+8*n>>2],o=I[e+(8*n+4)>>2],a=EA.write(A,B,t,o,i);if(a<0)return-1;f+=a}return f},varargs:0,get:function(A){return XA.varargs+=4,I[XA.varargs-4>>2]},getStr:function(){return g(XA.get())},getStreamFromFD:function(){var A=EA.getStream(XA.get());if(!A)throw new EA.ErrnoError(hA.EBADF);return A},getSocketFromFD:function(){var A=SOCKFS.getSocket(XA.get());if(!A)throw new EA.ErrnoError(hA.EBADF);return A},getSocketAddress:function(A){var e=XA.get(),r=XA.get();if(A&&0===e)return null;var i=__read_sockaddr(e,r);if(i.errno)throw new EA.ErrnoError(i.errno);return i.addr=DNS.lookup_addr(i.addr)||i.addr,i},get64:function(){var A=XA.get(),e=XA.get();return h(0<=A?0===e:-1===e),A},getZero:function(){h(0===XA.get())}};var WA=a([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],\\\"i8\\\",v);var IA={};function CA(A){for(;A.length;){var e=A.pop();A.pop()(e)}}function GA(A){return this.fromWireType(C[A>>2])}var VA={},FA={},RA={},NA=48,_A=57;function YA(A){if(void 0===A)return\\\"_unknown\\\";var e=(A=A.replace(/[^a-zA-Z0-9_]/g,\\\"$\\\")).charCodeAt(0);return NA<=e&&e<=_A?\\\"_\\\"+A:A}function QA(A,e){return A=YA(A),new Function(\\\"body\\\",\\\"return function \\\"+A+'() {\\\\n    \\\"use strict\\\";    return body.apply(this, arguments);\\\\n};\\\\n')(e)}function DA(A,r){var e=QA(r,function(A){this.name=r,this.message=A;var e=new Error(A).stack;void 0!==e&&(this.stack=this.toString()+\\\"\\\\n\\\"+e.replace(/^Error(:[^\\\\n]*)?\\\\n/,\\\"\\\"))});return e.prototype=Object.create(A.prototype),(e.prototype.constructor=e).prototype.toString=function(){return void 0===this.message?this.name:this.name+\\\": \\\"+this.message},e}var JA=void 0;function MA(A){throw new JA(A)}function TA(i,e,f){function r(A){var e=f(A);e.length!==i.length&&MA(\\\"Mismatched type converter count\\\");for(var r=0;r<i.length;++r)xA(i[r],e[r])}i.forEach(function(A){RA[A]=e});var n=new Array(e.length),t=[],o=0;e.forEach(function(A,e){FA.hasOwnProperty(A)?n[e]=FA[A]:(t.push(A),VA.hasOwnProperty(A)||(VA[A]=[]),VA[A].push(function(){n[e]=FA[A],++o===t.length&&r(n)}))}),0===t.length&&r(n)}function UA(A){switch(A){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\\\"Unknown type size: \\\"+A)}}function SA(){for(var A=new Array(256),e=0;e<256;++e)A[e]=String.fromCharCode(e);OA=A}var OA=void 0;function zA(A){for(var e=\\\"\\\",r=A;E[r];)e+=OA[E[r++]];return e}var jA=void 0;function HA(A){throw new jA(A)}function xA(A,e,r){if(r=r||{},!(\\\"argPackAdvance\\\"in e))throw new TypeError(\\\"registerType registeredInstance requires argPackAdvance\\\");var i=e.name;if(A||HA('type \\\"'+i+'\\\" must have a positive integer typeid pointer'),FA.hasOwnProperty(A)){if(r.ignoreDuplicateRegistrations)return;HA(\\\"Cannot register type '\\\"+i+\\\"' twice\\\")}if(FA[A]=e,delete RA[A],VA.hasOwnProperty(A)){var f=VA[A];delete VA[A],f.forEach(function(A){A()})}}function PA(A){if(!(this instanceof oe))return!1;if(!(A instanceof oe))return!1;for(var e=this.$$.ptrType.registeredClass,r=this.$$.ptr,i=A.$$.ptrType.registeredClass,f=A.$$.ptr;e.baseClass;)r=e.upcast(r),e=e.baseClass;for(;i.baseClass;)f=i.upcast(f),i=i.baseClass;return e===i&&r===f}function LA(A){return{count:A.count,deleteScheduled:A.deleteScheduled,preservePointerOnDelete:A.preservePointerOnDelete,ptr:A.ptr,ptrType:A.ptrType,smartPtr:A.smartPtr,smartPtrType:A.smartPtrType}}function KA(A){HA(A.$$.ptrType.registeredClass.name+\\\" instance already deleted\\\")}function qA(){if(this.$$.ptr||KA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var A=Object.create(Object.getPrototypeOf(this),{$$:{value:LA(this.$$)}});return A.$$.count.value+=1,A.$$.deleteScheduled=!1,A}function $A(A){var e=A.$$;e.smartPtr?e.smartPtrType.rawDestructor(e.smartPtr):e.ptrType.registeredClass.rawDestructor(e.ptr)}function Ae(){this.$$.ptr||KA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&HA(\\\"Object already scheduled for deletion\\\"),--this.$$.count.value,0===this.$$.count.value&&$A(this),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function ee(){return!this.$$.ptr}var re=void 0,ie=[];function fe(){for(;ie.length;){var A=ie.pop();A.$$.deleteScheduled=!1,A.delete()}}function ne(){return this.$$.ptr||KA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&HA(\\\"Object already scheduled for deletion\\\"),ie.push(this),1===ie.length&&re&&re(fe),this.$$.deleteScheduled=!0,this}function te(){oe.prototype.isAliasOf=PA,oe.prototype.clone=qA,oe.prototype.delete=Ae,oe.prototype.isDeleted=ee,oe.prototype.deleteLater=ne}function oe(){}var ae={};function ce(A,e,r){if(void 0===A[e].overloadTable){var i=A[e];A[e]=function(){return A[e].overloadTable.hasOwnProperty(arguments.length)||HA(\\\"Function '\\\"+r+\\\"' called with an invalid number of arguments (\\\"+arguments.length+\\\") - expects one of (\\\"+A[e].overloadTable+\\\")!\\\"),A[e].overloadTable[arguments.length].apply(this,arguments)},A[e].overloadTable=[],A[e].overloadTable[i.argCount]=i}}function le(A,e,r){d.hasOwnProperty(A)?((void 0===r||void 0!==d[A].overloadTable&&void 0!==d[A].overloadTable[r])&&HA(\\\"Cannot register public name '\\\"+A+\\\"' twice\\\"),ce(d,A,A),d.hasOwnProperty(r)&&HA(\\\"Cannot register multiple overloads of a function with the same number of arguments (\\\"+r+\\\")!\\\"),d[A].overloadTable[r]=e):(d[A]=e,void 0!==r&&(d[A].numArguments=r))}function ue(A,e,r,i,f,n,t,o){this.name=A,this.constructor=e,this.instancePrototype=r,this.rawDestructor=i,this.baseClass=f,this.getActualType=n,this.upcast=t,this.downcast=o,this.pureVirtualFunctions=[]}function be(A,e,r){for(;e!==r;)e.upcast||HA(\\\"Expected null or instance of \\\"+r.name+\\\", got an instance of \\\"+e.name),A=e.upcast(A),e=e.baseClass;return A}function se(A,e){if(null===e)return this.isReference&&HA(\\\"null is not a valid \\\"+this.name),0;e.$$||HA('Cannot pass \\\"'+ze(e)+'\\\" as a '+this.name),e.$$.ptr||HA(\\\"Cannot pass deleted object as a pointer of type \\\"+this.name);var r=e.$$.ptrType.registeredClass;return be(e.$$.ptr,r,this.registeredClass)}function de(A,e){var r;if(null===e)return this.isReference&&HA(\\\"null is not a valid \\\"+this.name),this.isSmartPointer?(r=this.rawConstructor(),null!==A&&A.push(this.rawDestructor,r),r):0;e.$$||HA('Cannot pass \\\"'+ze(e)+'\\\" as a '+this.name),e.$$.ptr||HA(\\\"Cannot pass deleted object as a pointer of type \\\"+this.name),!this.isConst&&e.$$.ptrType.isConst&&HA(\\\"Cannot convert argument of type \\\"+(e.$$.smartPtrType?e.$$.smartPtrType.name:e.$$.ptrType.name)+\\\" to parameter type \\\"+this.name);var i=e.$$.ptrType.registeredClass;if(r=be(e.$$.ptr,i,this.registeredClass),this.isSmartPointer)switch(void 0===e.$$.smartPtr&&HA(\\\"Passing raw pointer to smart pointer is illegal\\\"),this.sharingPolicy){case 0:e.$$.smartPtrType===this?r=e.$$.smartPtr:HA(\\\"Cannot convert argument of type \\\"+(e.$$.smartPtrType?e.$$.smartPtrType.name:e.$$.ptrType.name)+\\\" to parameter type \\\"+this.name);break;case 1:r=e.$$.smartPtr;break;case 2:if(e.$$.smartPtrType===this)r=e.$$.smartPtr;else{var f=e.clone();r=this.rawShare(r,Ue(function(){f.delete()})),null!==A&&A.push(this.rawDestructor,r)}break;default:HA(\\\"Unsupporting sharing policy\\\")}return r}function ke(A,e){if(null===e)return this.isReference&&HA(\\\"null is not a valid \\\"+this.name),0;e.$$||HA('Cannot pass \\\"'+ze(e)+'\\\" as a '+this.name),e.$$.ptr||HA(\\\"Cannot pass deleted object as a pointer of type \\\"+this.name),e.$$.ptrType.isConst&&HA(\\\"Cannot convert argument of type \\\"+e.$$.ptrType.name+\\\" to parameter type \\\"+this.name);var r=e.$$.ptrType.registeredClass;return be(e.$$.ptr,r,this.registeredClass)}function he(A){return this.rawGetPointee&&(A=this.rawGetPointee(A)),A}function we(A){this.rawDestructor&&this.rawDestructor(A)}function ve(A){null!==A&&A.delete()}function me(A,e,r){if(e===r)return A;if(void 0===r.baseClass)return null;var i=me(A,e,r.baseClass);return null===i?null:r.downcast(i)}function ge(){return Object.keys(Be).length}function Ze(){var A=[];for(var e in Be)Be.hasOwnProperty(e)&&A.push(Be[e]);return A}function pe(A){re=A,ie.length&&re&&re(fe)}function ye(){d.getInheritedInstanceCount=ge,d.getLiveInheritedInstances=Ze,d.flushPendingDeletes=fe,d.setDelayFunction=pe}var Be={};function Ee(A,e){for(void 0===e&&HA(\\\"ptr should not be undefined\\\");A.baseClass;)e=A.upcast(e),A=A.baseClass;return e}function Xe(A,e){return e=Ee(A,e),Be[e]}function We(A,e){return e.ptrType&&e.ptr||MA(\\\"makeClassHandle requires ptr and ptrType\\\"),!!e.smartPtrType!=!!e.smartPtr&&MA(\\\"Both smartPtrType and smartPtr must be specified\\\"),e.count={value:1},Object.create(A,{$$:{value:e}})}function Ie(A){var e=this.getPointee(A);if(!e)return this.destructor(A),null;var r=Xe(this.registeredClass,e);if(void 0!==r){if(0===r.$$.count.value)return r.$$.ptr=e,r.$$.smartPtr=A,r.clone();var i=r.clone();return this.destructor(A),i}function f(){return this.isSmartPointer?We(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:e,smartPtrType:this,smartPtr:A}):We(this.registeredClass.instancePrototype,{ptrType:this,ptr:A})}var n,t=this.registeredClass.getActualType(e),o=ae[t];if(!o)return f.call(this);n=this.isConst?o.constPointerType:o.pointerType;var a=me(e,this.registeredClass,n.registeredClass);return null===a?f.call(this):this.isSmartPointer?We(n.registeredClass.instancePrototype,{ptrType:n,ptr:a,smartPtrType:this,smartPtr:A}):We(n.registeredClass.instancePrototype,{ptrType:n,ptr:a})}function Ce(){Ge.prototype.getPointee=he,Ge.prototype.destructor=we,Ge.prototype.argPackAdvance=8,Ge.prototype.readValueFromPointer=GA,Ge.prototype.deleteObject=ve,Ge.prototype.fromWireType=Ie}function Ge(A,e,r,i,f,n,t,o,a,c,l){this.name=A,this.registeredClass=e,this.isReference=r,this.isConst=i,this.isSmartPointer=f,this.pointeeType=n,this.sharingPolicy=t,this.rawGetPointee=o,this.rawConstructor=a,this.rawShare=c,this.rawDestructor=l,f||void 0!==e.baseClass?this.toWireType=de:(this.toWireType=i?se:ke,this.destructorFunction=null)}function Ve(A,e,r){d.hasOwnProperty(A)||MA(\\\"Replacing nonexistant public symbol\\\"),void 0!==d[A].overloadTable&&void 0!==r?d[A].overloadTable[r]=e:(d[A]=e,d[A].argCount=r)}function Fe(f,n){var A;if(f=zA(f),void 0!==d[\\\"FUNCTION_TABLE_\\\"+f])A=d[\\\"FUNCTION_TABLE_\\\"+f][n];else if(\\\"undefined\\\"!=typeof FUNCTION_TABLE)A=FUNCTION_TABLE[n];else{var e=d.asm[\\\"dynCall_\\\"+f];void 0===e&&void 0===(e=d.asm[\\\"dynCall_\\\"+f.replace(/f/g,\\\"d\\\")])&&HA(\\\"No dynCall invoker for signature: \\\"+f),A=function(A){for(var e=[],r=1;r<f.length;++r)e.push(\\\"a\\\"+r);var i=\\\"return function \\\"+(\\\"dynCall_\\\"+f+\\\"_\\\"+n)+\\\"(\\\"+e.join(\\\", \\\")+\\\") {\\\\n\\\";return i+=\\\"    return dynCall(rawFunction\\\"+(e.length?\\\", \\\":\\\"\\\")+e.join(\\\", \\\")+\\\");\\\\n\\\",i+=\\\"};\\\\n\\\",new Function(\\\"dynCall\\\",\\\"rawFunction\\\",i)(A,n)}(e)}return\\\"function\\\"!=typeof A&&HA(\\\"unknown function pointer with signature \\\"+f+\\\": \\\"+n),A}var Re=void 0;function Ne(A){var e=Wr(A),r=zA(e);return Cr(e),r}function _e(A,e){var r=[],i={};throw e.forEach(function A(e){i[e]||FA[e]||(RA[e]?RA[e].forEach(A):(r.push(e),i[e]=!0))}),new Re(A+\\\": \\\"+r.map(Ne).join([\\\", \\\"]))}var Ye=[],Qe=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function De(A){4<A&&0==--Qe[A].refcount&&(Qe[A]=void 0,Ye.push(A))}function Je(){for(var A=0,e=5;e<Qe.length;++e)void 0!==Qe[e]&&++A;return A}function Me(){for(var A=5;A<Qe.length;++A)if(void 0!==Qe[A])return Qe[A];return null}function Te(){d.count_emval_handles=Je,d.get_first_emval=Me}function Ue(A){switch(A){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var e=Ye.length?Ye.pop():Qe.length;return Qe[e]={refcount:1,value:A},e}}function Se(A,e,r){switch(e){case 0:return function(A){var e=r?B:E;return this.fromWireType(e[A])};case 1:return function(A){var e=r?X:W;return this.fromWireType(e[A>>1])};case 2:return function(A){var e=r?I:C;return this.fromWireType(e[A>>2])};default:throw new TypeError(\\\"Unknown integer type: \\\"+A)}}function Oe(A,e){var r=FA[A];return void 0===r&&HA(e+\\\" has unknown type \\\"+Ne(A)),r}function ze(A){if(null===A)return\\\"null\\\";var e=typeof A;return\\\"object\\\"==e||\\\"array\\\"==e||\\\"function\\\"==e?A.toString():\\\"\\\"+A}function je(A,e){switch(e){case 2:return function(A){return this.fromWireType(G[A>>2])};case 3:return function(A){return this.fromWireType(V[A>>3])};default:throw new TypeError(\\\"Unknown float type: \\\"+A)}}function He(A,e){if(!(A instanceof Function))throw new TypeError(\\\"new_ called with constructor type \\\"+typeof A+\\\" which is not a function\\\");var r=QA(A.name||\\\"unknownFunctionName\\\",function(){});r.prototype=A.prototype;var i=new r,f=A.apply(i,e);return f instanceof Object?f:i}function xe(A,e,r,i,f){var n=e.length;n<2&&HA(\\\"argTypes array size mismatch! Must at least get return value and 'this' types!\\\");for(var t=null!==e[1]&&null!==r,o=!1,a=1;a<e.length;++a)if(null!==e[a]&&void 0===e[a].destructorFunction){o=!0;break}var c=\\\"void\\\"!==e[0].name,l=\\\"\\\",u=\\\"\\\";for(a=0;a<n-2;++a)l+=(0!==a?\\\", \\\":\\\"\\\")+\\\"arg\\\"+a,u+=(0!==a?\\\", \\\":\\\"\\\")+\\\"arg\\\"+a+\\\"Wired\\\";var b=\\\"return function \\\"+YA(A)+\\\"(\\\"+l+\\\") {\\\\nif (arguments.length !== \\\"+(n-2)+\\\") {\\\\nthrowBindingError('function \\\"+A+\\\" called with ' + arguments.length + ' arguments, expected \\\"+(n-2)+\\\" args!');\\\\n}\\\\n\\\";o&&(b+=\\\"var destructors = [];\\\\n\\\");var s=o?\\\"destructors\\\":\\\"null\\\",d=[\\\"throwBindingError\\\",\\\"invoker\\\",\\\"fn\\\",\\\"runDestructors\\\",\\\"retType\\\",\\\"classParam\\\"],k=[HA,i,f,CA,e[0],e[1]];t&&(b+=\\\"var thisWired = classParam.toWireType(\\\"+s+\\\", this);\\\\n\\\");for(a=0;a<n-2;++a)b+=\\\"var arg\\\"+a+\\\"Wired = argType\\\"+a+\\\".toWireType(\\\"+s+\\\", arg\\\"+a+\\\"); // \\\"+e[a+2].name+\\\"\\\\n\\\",d.push(\\\"argType\\\"+a),k.push(e[a+2]);if(t&&(u=\\\"thisWired\\\"+(0<u.length?\\\", \\\":\\\"\\\")+u),b+=(c?\\\"var rv = \\\":\\\"\\\")+\\\"invoker(fn\\\"+(0<u.length?\\\", \\\":\\\"\\\")+u+\\\");\\\\n\\\",o)b+=\\\"runDestructors(destructors);\\\\n\\\";else for(a=t?1:2;a<e.length;++a){var h=1===a?\\\"thisWired\\\":\\\"arg\\\"+(a-2)+\\\"Wired\\\";null!==e[a].destructorFunction&&(b+=h+\\\"_dtor(\\\"+h+\\\"); // \\\"+e[a].name+\\\"\\\\n\\\",d.push(h+\\\"_dtor\\\"),k.push(e[a].destructorFunction))}return c&&(b+=\\\"var ret = retType.fromWireType(rv);\\\\nreturn ret;\\\\n\\\"),b+=\\\"}\\\\n\\\",d.push(b),He(Function,d).apply(null,k)}function Pe(A,e){for(var r=[],i=0;i<A;i++)r.push(I[(e>>2)+i]);return r}function Le(A,e,r){switch(e){case 0:return r?function(A){return B[A]}:function(A){return E[A]};case 1:return r?function(A){return X[A>>1]}:function(A){return W[A>>1]};case 2:return r?function(A){return I[A>>2]}:function(A){return C[A>>2]};default:throw new TypeError(\\\"Unknown integer type: \\\"+A)}}var Ke={};function qe(A){var e=Ke[A];return void 0===e?zA(A):e}function $e(A){return A||HA(\\\"Cannot use deleted val. handle = \\\"+A),Qe[A].value}var Ar=R;function er(A){var e,r;er.called?(r=I[Ar>>2],e=I[r>>2]):(er.called=!0,rr.USER=rr.LOGNAME=\\\"web_user\\\",rr.PATH=\\\"/\\\",rr.PWD=\\\"/\\\",rr.HOME=\\\"/home/web_user\\\",rr.LANG=\\\"C.UTF-8\\\",rr._=d.thisProgram,e=a(1024,\\\"i8\\\",v),r=a(256,\\\"i8*\\\",v),I[r>>2]=e,I[Ar>>2]=r);var i=[],f=0;for(var n in A)if(\\\"string\\\"==typeof A[n]){var t=n+\\\"=\\\"+A[n];i.push(t),f+=t.length}if(1024<f)throw new Error(\\\"Environment size exceeded TOTAL_ENV_SIZE!\\\");for(var o=0;o<i.length;o++){rA(t=i[o],e),I[r+4*o>>2]=e,e+=t.length+1}I[r+4*i.length>>2]=0}R+=16;var rr={};var ir={};var fr=1;function nr(A){return A%4==0&&(A%100!=0||A%400==0)}function tr(A,e){for(var r=0,i=0;i<=e;r+=A[i++]);return r}var or=[31,29,31,30,31,30,31,31,30,31,30,31],ar=[31,28,31,30,31,30,31,31,30,31,30,31];function cr(A,e){for(var r=new Date(A.getTime());0<e;){var i=nr(r.getFullYear()),f=r.getMonth(),n=(i?or:ar)[f];if(!(e>n-r.getDate()))return r.setDate(r.getDate()+e),r;e-=n-r.getDate()+1,r.setDate(1),f<11?r.setMonth(f+1):(r.setMonth(0),r.setFullYear(r.getFullYear()+1))}return r}function lr(A,e,r,i){var f=I[i+40>>2],n={tm_sec:I[i>>2],tm_min:I[i+4>>2],tm_hour:I[i+8>>2],tm_mday:I[i+12>>2],tm_mon:I[i+16>>2],tm_year:I[i+20>>2],tm_wday:I[i+24>>2],tm_yday:I[i+28>>2],tm_isdst:I[i+32>>2],tm_gmtoff:I[i+36>>2],tm_zone:f?g(f):\\\"\\\"},t=g(r),o={\\\"%c\\\":\\\"%a %b %d %H:%M:%S %Y\\\",\\\"%D\\\":\\\"%m/%d/%y\\\",\\\"%F\\\":\\\"%Y-%m-%d\\\",\\\"%h\\\":\\\"%b\\\",\\\"%r\\\":\\\"%I:%M:%S %p\\\",\\\"%R\\\":\\\"%H:%M\\\",\\\"%T\\\":\\\"%H:%M:%S\\\",\\\"%x\\\":\\\"%m/%d/%y\\\",\\\"%X\\\":\\\"%H:%M:%S\\\"};for(var a in o)t=t.replace(new RegExp(a,\\\"g\\\"),o[a]);var c=[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],l=[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"];function u(A,e,r){for(var i=\\\"number\\\"==typeof A?A.toString():A||\\\"\\\";i.length<e;)i=r[0]+i;return i}function b(A,e){return u(A,e,\\\"0\\\")}function s(A,e){function r(A){return A<0?-1:0<A?1:0}var i;return 0===(i=r(A.getFullYear()-e.getFullYear()))&&0===(i=r(A.getMonth()-e.getMonth()))&&(i=r(A.getDate()-e.getDate())),i}function d(A){switch(A.getDay()){case 0:return new Date(A.getFullYear()-1,11,29);case 1:return A;case 2:return new Date(A.getFullYear(),0,3);case 3:return new Date(A.getFullYear(),0,2);case 4:return new Date(A.getFullYear(),0,1);case 5:return new Date(A.getFullYear()-1,11,31);case 6:return new Date(A.getFullYear()-1,11,30)}}function k(A){var e=cr(new Date(A.tm_year+1900,0,1),A.tm_yday),r=new Date(e.getFullYear(),0,4),i=new Date(e.getFullYear()+1,0,4),f=d(r),n=d(i);return s(f,e)<=0?s(n,e)<=0?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var h={\\\"%a\\\":function(A){return c[A.tm_wday].substring(0,3)},\\\"%A\\\":function(A){return c[A.tm_wday]},\\\"%b\\\":function(A){return l[A.tm_mon].substring(0,3)},\\\"%B\\\":function(A){return l[A.tm_mon]},\\\"%C\\\":function(A){return b((A.tm_year+1900)/100|0,2)},\\\"%d\\\":function(A){return b(A.tm_mday,2)},\\\"%e\\\":function(A){return u(A.tm_mday,2,\\\" \\\")},\\\"%g\\\":function(A){return k(A).toString().substring(2)},\\\"%G\\\":function(A){return k(A)},\\\"%H\\\":function(A){return b(A.tm_hour,2)},\\\"%I\\\":function(A){var e=A.tm_hour;return 0==e?e=12:12<e&&(e-=12),b(e,2)},\\\"%j\\\":function(A){return b(A.tm_mday+tr(nr(A.tm_year+1900)?or:ar,A.tm_mon-1),3)},\\\"%m\\\":function(A){return b(A.tm_mon+1,2)},\\\"%M\\\":function(A){return b(A.tm_min,2)},\\\"%n\\\":function(){return\\\"\\\\n\\\"},\\\"%p\\\":function(A){return 0<=A.tm_hour&&A.tm_hour<12?\\\"AM\\\":\\\"PM\\\"},\\\"%S\\\":function(A){return b(A.tm_sec,2)},\\\"%t\\\":function(){return\\\"\\\\t\\\"},\\\"%u\\\":function(A){return new Date(A.tm_year+1900,A.tm_mon+1,A.tm_mday,0,0,0,0).getDay()||7},\\\"%U\\\":function(A){var e=new Date(A.tm_year+1900,0,1),r=0===e.getDay()?e:cr(e,7-e.getDay()),i=new Date(A.tm_year+1900,A.tm_mon,A.tm_mday);if(s(r,i)<0){var f=tr(nr(i.getFullYear())?or:ar,i.getMonth()-1)-31,n=31-r.getDate()+f+i.getDate();return b(Math.ceil(n/7),2)}return 0===s(r,e)?\\\"01\\\":\\\"00\\\"},\\\"%V\\\":function(A){var e,r=new Date(A.tm_year+1900,0,4),i=new Date(A.tm_year+1901,0,4),f=d(r),n=d(i),t=cr(new Date(A.tm_year+1900,0,1),A.tm_yday);return s(t,f)<0?\\\"53\\\":s(n,t)<=0?\\\"01\\\":(e=f.getFullYear()<A.tm_year+1900?A.tm_yday+32-f.getDate():A.tm_yday+1-f.getDate(),b(Math.ceil(e/7),2))},\\\"%w\\\":function(A){return new Date(A.tm_year+1900,A.tm_mon+1,A.tm_mday,0,0,0,0).getDay()},\\\"%W\\\":function(A){var e=new Date(A.tm_year,0,1),r=1===e.getDay()?e:cr(e,0===e.getDay()?1:7-e.getDay()+1),i=new Date(A.tm_year+1900,A.tm_mon,A.tm_mday);if(s(r,i)<0){var f=tr(nr(i.getFullYear())?or:ar,i.getMonth()-1)-31,n=31-r.getDate()+f+i.getDate();return b(Math.ceil(n/7),2)}return 0===s(r,e)?\\\"01\\\":\\\"00\\\"},\\\"%y\\\":function(A){return(A.tm_year+1900).toString().substring(2)},\\\"%Y\\\":function(A){return A.tm_year+1900},\\\"%z\\\":function(A){var e=A.tm_gmtoff,r=0<=e;return e=(e=Math.abs(e)/60)/60*100+e%60,(r?\\\"+\\\":\\\"-\\\")+String(\\\"0000\\\"+e).slice(-4)},\\\"%Z\\\":function(A){return A.tm_zone},\\\"%%\\\":function(){return\\\"%\\\"}};for(var a in h)0<=t.indexOf(a)&&(t=t.replace(new RegExp(a,\\\"g\\\"),h[a](n)));var w=dr(t,!1);return w.length>e?0:(eA(w,A),w.length-1)}if(EA.staticInit(),L.unshift(function(){d.noFSInit||EA.init.initialized||EA.init()}),K.push(function(){EA.ignorePermissions=!1}),q.push(function(){EA.quit()}),d.FS_createFolder=EA.createFolder,d.FS_createPath=EA.createPath,d.FS_createDataFile=EA.createDataFile,d.FS_createPreloadedFile=EA.createPreloadedFile,d.FS_createLazyFile=EA.createLazyFile,d.FS_createLink=EA.createLink,d.FS_createDevice=EA.createDevice,d.FS_unlink=EA.unlink,L.unshift(function(){gA.init()}),q.push(function(){gA.shutdown()}),o){var ur=require(\\\"fs\\\"),br=require(\\\"path\\\");yA.staticInit()}JA=d.InternalError=DA(Error,\\\"InternalError\\\"),SA(),jA=d.BindingError=DA(Error,\\\"BindingError\\\"),te(),Ce(),ye(),Re=d.UnboundTypeError=DA(Error,\\\"UnboundTypeError\\\"),Te(),er(rr),D=k.staticAlloc(4),Y=(_=k.alignMemory(R))+j,Q=k.alignMemory(Y),I[D>>2]=Q;var sr=!(N=!0);function dr(A,e,r){var i=0<r?r:Z(A)+1,f=new Array(i),n=b(A,f,0,f.length);return e&&(f.length=n),f}function kr(A){for(var e=[],r=0;r<A.length;r++){var i=A[r];255<i&&(sr&&h(!1,\\\"Character code \\\"+i+\\\" (\\\"+String.fromCharCode(i)+\\\")  at offset \\\"+r+\\\" not in 0x00-0xFF.\\\"),i&=255),e.push(String.fromCharCode(i))}return e.join(\\\"\\\")}var hr=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\\",wr=\\\"function\\\"==typeof atob?atob:function(A){var e,r,i,f,n,t,o=\\\"\\\",a=0;for(A=A.replace(/[^A-Za-z0-9\\\\+\\\\/\\\\=]/g,\\\"\\\");e=hr.indexOf(A.charAt(a++))<<2|(f=hr.indexOf(A.charAt(a++)))>>4,r=(15&f)<<4|(n=hr.indexOf(A.charAt(a++)))>>2,i=(3&n)<<6|(t=hr.indexOf(A.charAt(a++))),o+=String.fromCharCode(e),64!==n&&(o+=String.fromCharCode(r)),64!==t&&(o+=String.fromCharCode(i)),a<A.length;);return o};function vr(A){var e=\\\"data:application/octet-stream;base64,\\\";if(String.prototype.startsWith?A.startsWith(e):0===A.indexOf(e))return function(e){if(\\\"boolean\\\"==typeof o&&o){var r;try{r=Buffer.from(e,\\\"base64\\\")}catch(A){r=new Buffer(e,\\\"base64\\\")}return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}try{for(var A=wr(e),i=new Uint8Array(A.length),f=0;f<A.length;++f)i[f]=A.charCodeAt(f);return i}catch(A){throw new Error(\\\"Converting base64 string to bytes failed.\\\")}}(A.slice(e.length))}d.asmGlobalArg={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,NaN:NaN,Infinity:1/0,byteLength:J},d.asmLibraryArg={abort:Mr,assert:h,enlargeMemory:z,getTotalMemory:function(){return H},abortOnCannotGrowMemory:function(){Mr(\\\"Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value \\\"+H+\\\", (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 \\\")},invoke_i:function(A){try{return d.dynCall_i(A)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_ii:function(A,e){try{return d.dynCall_ii(A,e)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_iii:function(A,e,r){try{return d.dynCall_iii(A,e,r)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_iiii:function(A,e,r,i){try{return d.dynCall_iiii(A,e,r,i)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_iiiii:function(A,e,r,i,f){try{return d.dynCall_iiiii(A,e,r,i,f)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_iiiiid:function(A,e,r,i,f,n){try{return d.dynCall_iiiiid(A,e,r,i,f,n)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_iiiiii:function(A,e,r,i,f,n){try{return d.dynCall_iiiiii(A,e,r,i,f,n)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_iiiiiid:function(A,e,r,i,f,n,t){try{return d.dynCall_iiiiiid(A,e,r,i,f,n,t)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_iiiiiii:function(A,e,r,i,f,n,t){try{return d.dynCall_iiiiiii(A,e,r,i,f,n,t)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_iiiiiiii:function(A,e,r,i,f,n,t,o){try{return d.dynCall_iiiiiiii(A,e,r,i,f,n,t,o)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_iiiiiiiii:function(A,e,r,i,f,n,t,o,a){try{return d.dynCall_iiiiiiiii(A,e,r,i,f,n,t,o,a)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_v:function(A){try{d.dynCall_v(A)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_vi:function(A,e){try{d.dynCall_vi(A,e)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_vii:function(A,e,r){try{d.dynCall_vii(A,e,r)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viii:function(A,e,r,i){try{d.dynCall_viii(A,e,r,i)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viiii:function(A,e,r,i,f){try{d.dynCall_viiii(A,e,r,i,f)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viiiii:function(A,e,r,i,f,n){try{d.dynCall_viiiii(A,e,r,i,f,n)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viiiiii:function(A,e,r,i,f,n,t){try{d.dynCall_viiiiii(A,e,r,i,f,n,t)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viiiiiii:function(A,e,r,i,f,n,t,o){try{d.dynCall_viiiiiii(A,e,r,i,f,n,t,o)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viiiiiiii:function(A,e,r,i,f,n,t,o,a){try{d.dynCall_viiiiiiii(A,e,r,i,f,n,t,o,a)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viiiiiiiii:function(A,e,r,i,f,n,t,o,a,c){try{d.dynCall_viiiiiiiii(A,e,r,i,f,n,t,o,a,c)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viiiiiiiiii:function(A,e,r,i,f,n,t,o,a,c,l){try{d.dynCall_viiiiiiiiii(A,e,r,i,f,n,t,o,a,c,l)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viiiiiiiiiiii:function(A,e,r,i,f,n,t,o,a,c,l,u,b){try{d.dynCall_viiiiiiiiiiii(A,e,r,i,f,n,t,o,a,c,l,u,b)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},invoke_viiiiiiiiiiiii:function(A,e,r,i,f,n,t,o,a,c,l,u,b,s){try{d.dynCall_viiiiiiiiiiiii(A,e,r,i,f,n,t,o,a,c,l,u,b,s)}catch(A){if(\\\"number\\\"!=typeof A&&\\\"longjmp\\\"!==A)throw A;d.setThrew(1,0)}},ClassHandle:oe,ClassHandle_clone:qA,ClassHandle_delete:Ae,ClassHandle_deleteLater:ne,ClassHandle_isAliasOf:PA,ClassHandle_isDeleted:ee,RegisteredClass:ue,RegisteredPointer:Ge,RegisteredPointer_deleteObject:ve,RegisteredPointer_destructor:we,RegisteredPointer_fromWireType:Ie,RegisteredPointer_getPointee:he,__ZSt18uncaught_exceptionv:dA,___assert_fail:function(A,e,r,i){throw n=!0,\\\"Assertion failed: \\\"+g(A)+\\\", at: \\\"+[e?g(e):\\\"unknown filename\\\",r,i?g(i):\\\"unknown function\\\"]+\\\" at \\\"+p()},___buildEnvironment:er,___cxa_allocate_exception:function(A){return Gr(A)},___cxa_begin_catch:function(A){var e=kA.infos[A];return e&&!e.caught&&(e.caught=!0,dA.uncaught_exception--),e&&(e.rethrown=!1),kA.caught.push(A),kA.addRef(kA.deAdjust(A)),A},___cxa_find_matching_catch:function A(){var e=kA.last;if(!e)return 0|(k.setTempRet0(0),0);var r=kA.infos[e],i=r.type;if(!i)return 0|(k.setTempRet0(0),e);var f=Array.prototype.slice.call(arguments);d.___cxa_is_pointer_type(i);A.buffer||(A.buffer=Gr(4)),I[A.buffer>>2]=e,e=A.buffer;for(var n=0;n<f.length;n++)if(f[n]&&d.___cxa_can_catch(f[n],i,e))return e=I[e>>2],r.adjusted=e,0|(k.setTempRet0(f[n]),e);return e=I[e>>2],0|(k.setTempRet0(i),e)},___cxa_pure_virtual:function(){throw n=!0,\\\"Pure virtual function called!\\\"},___cxa_throw:function(A,e,r){throw kA.infos[A]={ptr:A,adjusted:A,type:e,destructor:r,refcount:0,caught:!1,rethrown:!1},kA.last=A,\\\"uncaught_exception\\\"in dA?dA.uncaught_exception++:dA.uncaught_exception=1,A+\\\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\\\"},___gxx_personality_v0:function(){},___lock:function(){},___map_file:function(A,e){return wA(hA.EPERM),-1},___resumeException:function(A){throw kA.last||(kA.last=A),A+\\\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\\\"},___setErrNo:wA,___syscall140:function(A,e){XA.varargs=e;try{var r=XA.getStreamFromFD(),i=(XA.get(),XA.get()),f=XA.get(),n=XA.get(),t=i;return EA.llseek(r,t,n),I[f>>2]=r.position,r.getdents&&0===t&&0===n&&(r.getdents=null),0}catch(A){return void 0!==EA&&A instanceof EA.ErrnoError||Mr(A),-A.errno}},___syscall145:function(A,e){XA.varargs=e;try{var r=XA.getStreamFromFD(),i=XA.get(),f=XA.get();return XA.doReadv(r,i,f)}catch(A){return void 0!==EA&&A instanceof EA.ErrnoError||Mr(A),-A.errno}},___syscall146:function(A,e){XA.varargs=e;try{var r=XA.getStreamFromFD(),i=XA.get(),f=XA.get();return XA.doWritev(r,i,f)}catch(A){return void 0!==EA&&A instanceof EA.ErrnoError||Mr(A),-A.errno}},___syscall54:function(A,e){XA.varargs=e;try{var r=XA.getStreamFromFD(),i=XA.get();switch(i){case 21505:case 21506:return r.tty?0:-hA.ENOTTY;case 21519:if(!r.tty)return-hA.ENOTTY;var f=XA.get();return I[f>>2]=0;case 21520:return r.tty?-hA.EINVAL:-hA.ENOTTY;case 21531:f=XA.get();return EA.ioctl(r,i,f);case 21523:return r.tty?0:-hA.ENOTTY;default:Mr(\\\"bad ioctl syscall \\\"+i)}}catch(A){return void 0!==EA&&A instanceof EA.ErrnoError||Mr(A),-A.errno}},___syscall6:function(A,e){XA.varargs=e;try{var r=XA.getStreamFromFD();return EA.close(r),0}catch(A){return void 0!==EA&&A instanceof EA.ErrnoError||Mr(A),-A.errno}},___syscall91:function(A,e){XA.varargs=e;try{var r=XA.get(),i=XA.get(),f=XA.mappings[r];if(!f)return 0;if(i===f.len){var n=EA.getStream(f.fd);XA.doMsync(r,n,i,f.flags),EA.munmap(n),XA.mappings[r]=null,f.allocated&&Cr(f.malloc)}return 0}catch(A){return void 0!==EA&&A instanceof EA.ErrnoError||Mr(A),-A.errno}},___unlock:function(){},__addDays:cr,__arraySum:tr,__embind_finalize_value_object:function(A){var e=IA[A];delete IA[A];var f=e.rawConstructor,n=e.rawDestructor,u=e.fields;TA([A],u.map(function(A){return A.getterReturnType}).concat(u.map(function(A){return A.setterArgumentType})),function(c){var l={};return u.forEach(function(A,e){var r=A.fieldName,i=c[e],f=A.getter,n=A.getterContext,t=c[e+u.length],o=A.setter,a=A.setterContext;l[r]={read:function(A){return i.fromWireType(f(n,A))},write:function(A,e){var r=[];o(a,A,t.toWireType(r,e)),CA(r)}}}),[{name:e.name,fromWireType:function(A){var e={};for(var r in l)e[r]=l[r].read(A);return n(A),e},toWireType:function(A,e){for(var r in l)if(!(r in e))throw new TypeError(\\\"Missing field\\\");var i=f();for(r in l)l[r].write(i,e[r]);return null!==A&&A.push(n,i),i},argPackAdvance:8,readValueFromPointer:GA,destructorFunction:n}]})},__embind_register_bool:function(A,r,i,f,n){var t=UA(i);xA(A,{name:r=zA(r),fromWireType:function(A){return!!A},toWireType:function(A,e){return e?f:n},argPackAdvance:8,readValueFromPointer:function(A){var e;if(1===i)e=B;else if(2===i)e=X;else{if(4!==i)throw new TypeError(\\\"Unknown boolean type size: \\\"+r);e=I}return this.fromWireType(e[A>>t])},destructorFunction:null})},__embind_register_class:function(c,A,e,l,r,u,i,b,f,s,d,n,k){d=zA(d),u=Fe(r,u),b=b&&Fe(i,b),s=s&&Fe(f,s),k=Fe(n,k);var h=YA(d);le(h,function(){_e(\\\"Cannot construct \\\"+d+\\\" due to unbound types\\\",[l])}),TA([c,A,e],l?[l]:[],function(A){var e,r;A=A[0],r=l?(e=A.registeredClass).instancePrototype:oe.prototype;var i=QA(h,function(){if(Object.getPrototypeOf(this)!==f)throw new jA(\\\"Use 'new' to construct \\\"+d);if(void 0===n.constructor_body)throw new jA(d+\\\" has no accessible constructor\\\");var A=n.constructor_body[arguments.length];if(void 0===A)throw new jA(\\\"Tried to invoke ctor of \\\"+d+\\\" with invalid number of parameters (\\\"+arguments.length+\\\") - expected (\\\"+Object.keys(n.constructor_body).toString()+\\\") parameters instead!\\\");return A.apply(this,arguments)}),f=Object.create(r,{constructor:{value:i}});i.prototype=f;var n=new ue(d,i,f,k,e,u,b,s),t=new Ge(d,n,!0,!1,!1),o=new Ge(d+\\\"*\\\",n,!1,!1,!1),a=new Ge(d+\\\" const*\\\",n,!1,!0,!1);return ae[c]={pointerType:o,constPointerType:a},Ve(h,i),[t,o,a]})},__embind_register_emval:function(A,e){xA(A,{name:e=zA(e),fromWireType:function(A){var e=Qe[A].value;return De(A),e},toWireType:function(A,e){return Ue(e)},argPackAdvance:8,readValueFromPointer:GA,destructorFunction:null})},__embind_register_enum:function(A,e,r,i){var f=UA(r);function n(){}e=zA(e),n.values={},xA(A,{name:e,constructor:n,fromWireType:function(A){return this.constructor.values[A]},toWireType:function(A,e){return e.value},argPackAdvance:8,readValueFromPointer:Se(e,f,i),destructorFunction:null}),le(e,n)},__embind_register_enum_value:function(A,e,r){var i=Oe(A,\\\"enum\\\");e=zA(e);var f=i.constructor,n=Object.create(i.constructor.prototype,{value:{value:r},constructor:{value:QA(i.name+\\\"_\\\"+e,function(){})}});f.values[r]=n,f[e]=n},__embind_register_float:function(A,e,r){var i=UA(r);xA(A,{name:e=zA(e),fromWireType:function(A){return A},toWireType:function(A,e){if(\\\"number\\\"!=typeof e&&\\\"boolean\\\"!=typeof e)throw new TypeError('Cannot convert \\\"'+ze(e)+'\\\" to '+this.name);return e},argPackAdvance:8,readValueFromPointer:je(e,i),destructorFunction:null})},__embind_register_function:function(r,i,A,e,f,n){var t=Pe(i,A);r=zA(r),f=Fe(e,f),le(r,function(){_e(\\\"Cannot call \\\"+r+\\\" due to unbound types\\\",t)},i-1),TA([],t,function(A){var e=[A[0],null].concat(A.slice(1));return Ve(r,xe(r,e,null,f,n),i-1),[]})},__embind_register_integer:function(A,r,e,i,f){r=zA(r),-1===f&&(f=4294967295);var n=UA(e),t=function(A){return A};if(0===i){var o=32-8*e;t=function(A){return A<<o>>>o}}var a=-1!=r.indexOf(\\\"unsigned\\\");xA(A,{name:r,fromWireType:t,toWireType:function(A,e){if(\\\"number\\\"!=typeof e&&\\\"boolean\\\"!=typeof e)throw new TypeError('Cannot convert \\\"'+ze(e)+'\\\" to '+this.name);if(e<i||f<e)throw new TypeError('Passing a number \\\"'+ze(e)+'\\\" from JS side to C/C++ side to an argument of type \\\"'+r+'\\\", which is outside the valid range ['+i+\\\", \\\"+f+\\\"]!\\\");return a?e>>>0:0|e},argPackAdvance:8,readValueFromPointer:Le(r,n,0!==i),destructorFunction:null})},__embind_register_memory_view:function(A,e,r){var i=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][e];function f(A){var e=C[A>>=2],r=C[A+1];return new i(C.buffer,r,e)}xA(A,{name:r=zA(r),fromWireType:f,argPackAdvance:8,readValueFromPointer:f},{ignoreDuplicateRegistrations:!0})},__embind_register_std_string:function(A,e){xA(A,{name:e=zA(e),fromWireType:function(A){for(var e=C[A>>2],r=new Array(e),i=0;i<e;++i)r[i]=String.fromCharCode(E[A+4+i]);return Cr(A),r.join(\\\"\\\")},toWireType:function(A,e){function r(A,e){return A[e]}var i;e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array?i=r:\\\"string\\\"==typeof e?i=function(A,e){return A.charCodeAt(e)}:HA(\\\"Cannot pass non-string to std::string\\\");var f=e.length,n=Gr(4+f);C[n>>2]=f;for(var t=0;t<f;++t){var o=i(e,t);255<o&&(Cr(n),HA(\\\"String has UTF-16 code units that do not fit in 8 bits\\\")),E[n+4+t]=o}return null!==A&&A.push(Cr,n),n},argPackAdvance:8,readValueFromPointer:GA,destructorFunction:function(A){Cr(A)}})},__embind_register_std_wstring:function(A,o,e){var a,c;e=zA(e),2===o?(a=function(){return W},c=1):4===o&&(a=function(){return C},c=2),xA(A,{name:e,fromWireType:function(A){for(var e=a(),r=C[A>>2],i=new Array(r),f=A+4>>c,n=0;n<r;++n)i[n]=String.fromCharCode(e[f+n]);return Cr(A),i.join(\\\"\\\")},toWireType:function(A,e){var r=a(),i=e.length,f=Gr(4+i*o);C[f>>2]=i;for(var n=f+4>>c,t=0;t<i;++t)r[n+t]=e.charCodeAt(t);return null!==A&&A.push(Cr,f),f},argPackAdvance:8,readValueFromPointer:GA,destructorFunction:function(A){Cr(A)}})},__embind_register_value_object:function(A,e,r,i,f,n){IA[A]={name:zA(e),rawConstructor:Fe(r,i),rawDestructor:Fe(f,n),fields:[]}},__embind_register_value_object_field:function(A,e,r,i,f,n,t,o,a,c){IA[A].fields.push({fieldName:zA(e),getterReturnType:r,getter:Fe(i,f),getterContext:n,setterArgumentType:t,setter:Fe(o,a),setterContext:c})},__embind_register_void:function(A,e){xA(A,{isVoid:!0,name:e=zA(e),argPackAdvance:0,fromWireType:function(){},toWireType:function(A,e){}})},__emval_decref:De,__emval_incref:function(A){4<A&&(Qe[A].refcount+=1)},__emval_new_array:function(){return Ue([])},__emval_new_cstring:function(A){return Ue(qe(A))},__emval_new_object:function(){return Ue({})},__emval_register:Ue,__emval_set_property:function(A,e,r){A=$e(A),e=$e(e),r=$e(r),A[e]=r},__emval_take_value:function(A,e){return Ue((A=Oe(A,\\\"_emval_take_value\\\")).readValueFromPointer(e))},__isLeapYear:nr,_abort:function(){d.abort()},_embind_repr:ze,_emscripten_memcpy_big:function(A,e,r){return E.set(E.subarray(e,e+r),A),A},_getenv:function A(e){return 0===e?0:(e=g(e),rr.hasOwnProperty(e)?(A.ret&&Cr(A.ret),A.ret=a(dr(rr[e]),\\\"i8\\\",t)):0)},_pthread_cond_destroy:function(){return 0},_pthread_cond_init:function(){return 0},_pthread_cond_signal:function(){return 0},_pthread_cond_wait:function(){return 0},_pthread_getspecific:function(A){return ir[A]||0},_pthread_join:function(){},_pthread_key_create:function(A,e){return 0==A?hA.EINVAL:(I[A>>2]=fr,ir[fr]=0,fr++,0)},_pthread_mutex_destroy:function(){},_pthread_mutex_init:function(){},_pthread_once:function A(e,r){A.seen||(A.seen={}),e in A.seen||(d.dynCall_v(r),A.seen[e]=1)},_pthread_setspecific:function(A,e){return A in ir?(ir[A]=e,0):hA.EINVAL},_strftime:lr,_strftime_l:function(A,e,r,i){return lr(A,e,r,i)},constNoSmartPtrRawPointerToWireType:se,count_emval_handles:Je,craftInvokerFunction:xe,createNamedFunction:QA,downcastPointer:me,embind_init_charCodes:SA,ensureOverloadTable:ce,enumReadValueFromPointer:Se,exposePublicSymbol:le,extendError:DA,floatReadValueFromPointer:je,flushPendingDeletes:fe,genericPointerToWireType:de,getBasestPointer:Ee,getInheritedInstance:Xe,getInheritedInstanceCount:ge,getLiveInheritedInstances:Ze,getShiftFromSize:UA,getStringOrSymbol:qe,getTypeName:Ne,get_first_emval:Me,heap32VectorToArray:Pe,init_ClassHandle:te,init_RegisteredPointer:Ce,init_embind:ye,init_emval:Te,integerReadValueFromPointer:Le,makeClassHandle:We,makeLegalFunctionName:YA,new_:He,nonConstNoSmartPtrRawPointerToWireType:ke,readLatin1String:zA,registerType:xA,replacePublicSymbol:Ve,requireFunction:Fe,requireHandle:$e,requireRegisteredType:Oe,runDestructor:$A,runDestructors:CA,setDelayFunction:pe,shallowCopyInternalPointer:LA,simpleReadValueFromPointer:GA,throwBindingError:HA,throwInstanceAlreadyDeleted:KA,throwInternalError:MA,throwUnboundTypeError:_e,upcastPointer:be,whenDependentTypesAreResolved:TA,DYNAMICTOP_PTR:D,tempDoublePtr:sA,ABORT:n,STACKTOP:_,STACK_MAX:Y,cttz_i8:WA};var mr,gr=function(A,e,r){var i=A.Int8Array,tr=new i(r),f=A.Int16Array,or=new f(r),n=A.Int32Array,ar=new n(r),t=A.Uint8Array,cr=new t(r),o=A.Uint16Array,lr=new o(r),a=A.Uint32Array,c=(new a(r),A.Float32Array),gA=new c(r),l=A.Float64Array,Q=new l(r),u=A.byteLength,b=0|e.DYNAMICTOP_PTR,d=0|e.tempDoublePtr,ur=(e.ABORT,0|e.STACKTOP),s=(e.STACK_MAX,0|e.cttz_i8),k=0,h=A.NaN,w=A.Infinity,D=0,v=A.Math.floor,V=A.Math.abs,m=(A.Math.sqrt,A.Math.pow,A.Math.cos,A.Math.sin,A.Math.tan,A.Math.acos,A.Math.asin,A.Math.atan,A.Math.atan2,A.Math.exp,A.Math.log,A.Math.ceil),br=A.Math.imul,g=(A.Math.min,A.Math.max,A.Math.clz32),Z=e.abort,p=(e.assert,e.enlargeMemory),y=e.getTotalMemory,B=e.abortOnCannotGrowMemory,E=(e.invoke_i,e.invoke_ii,e.invoke_iii,e.invoke_iiii,e.invoke_iiiii,e.invoke_iiiiid,e.invoke_iiiiii,e.invoke_iiiiiid,e.invoke_iiiiiii,e.invoke_iiiiiiii,e.invoke_iiiiiiiii,e.invoke_v,e.invoke_vi,e.invoke_vii,e.invoke_viii,e.invoke_viiii,e.invoke_viiiii,e.invoke_viiiiii,e.invoke_viiiiiii,e.invoke_viiiiiiii,e.invoke_viiiiiiiii,e.invoke_viiiiiiiiii,e.invoke_viiiiiiiiiiii,e.invoke_viiiiiiiiiiiii,e.ClassHandle,e.ClassHandle_clone,e.ClassHandle_delete,e.ClassHandle_deleteLater,e.ClassHandle_isAliasOf,e.ClassHandle_isDeleted,e.RegisteredClass,e.RegisteredPointer,e.RegisteredPointer_deleteObject,e.RegisteredPointer_destructor,e.RegisteredPointer_fromWireType,e.RegisteredPointer_getPointee,e.__ZSt18uncaught_exceptionv),sr=e.___assert_fail,X=(e.___buildEnvironment,e.___cxa_allocate_exception),W=(e.___cxa_begin_catch,e.___cxa_find_matching_catch,e.___cxa_pure_virtual),I=e.___cxa_throw,C=(e.___gxx_personality_v0,e.___lock),G=e.___map_file,F=(e.___resumeException,e.___setErrNo),R=e.___syscall140,N=e.___syscall145,_=e.___syscall146,Y=e.___syscall54,J=e.___syscall6,M=e.___syscall91,T=e.___unlock,U=(e.__addDays,e.__arraySum,e.__embind_finalize_value_object),S=e.__embind_register_bool,O=e.__embind_register_class,z=e.__embind_register_emval,j=e.__embind_register_enum,H=e.__embind_register_enum_value,x=e.__embind_register_float,P=e.__embind_register_function,L=e.__embind_register_integer,K=e.__embind_register_memory_view,q=e.__embind_register_std_string,$=e.__embind_register_std_wstring,AA=e.__embind_register_value_object,eA=e.__embind_register_value_object_field,rA=e.__embind_register_void,iA=e.__emval_decref,fA=e.__emval_incref,nA=e.__emval_new_array,tA=e.__emval_new_cstring,oA=e.__emval_new_object,aA=(e.__emval_register,e.__emval_set_property),cA=e.__emval_take_value,lA=(e.__isLeapYear,e._abort),uA=(e._embind_repr,e._emscripten_memcpy_big),bA=e._getenv,sA=e._pthread_cond_destroy,dA=e._pthread_cond_init,kA=e._pthread_cond_signal,hA=e._pthread_cond_wait,wA=e._pthread_getspecific,vA=e._pthread_join,mA=e._pthread_key_create,ZA=e._pthread_mutex_destroy,pA=e._pthread_mutex_init,yA=e._pthread_once,BA=e._pthread_setspecific,EA=(e._strftime,e._strftime_l);e.constNoSmartPtrRawPointerToWireType,e.count_emval_handles,e.craftInvokerFunction,e.createNamedFunction,e.downcastPointer,e.embind_init_charCodes,e.ensureOverloadTable,e.enumReadValueFromPointer,e.exposePublicSymbol,e.extendError,e.floatReadValueFromPointer,e.flushPendingDeletes,e.genericPointerToWireType,e.getBasestPointer,e.getInheritedInstance,e.getInheritedInstanceCount,e.getLiveInheritedInstances,e.getShiftFromSize,e.getStringOrSymbol,e.getTypeName,e.get_first_emval,e.heap32VectorToArray,e.init_ClassHandle,e.init_RegisteredPointer,e.init_embind,e.init_emval,e.integerReadValueFromPointer,e.makeClassHandle,e.makeLegalFunctionName,e.new_,e.nonConstNoSmartPtrRawPointerToWireType,e.readLatin1String,e.registerType,e.replacePublicSymbol,e.requireFunction,e.requireHandle,e.requireRegisteredType,e.runDestructor,e.runDestructors,e.setDelayFunction,e.shallowCopyInternalPointer,e.simpleReadValueFromPointer,e.throwBindingError,e.throwInstanceAlreadyDeleted,e.throwInternalError,e.throwUnboundTypeError,e.upcastPointer,e.whenDependentTypesAreResolved;function XA(A){ar[(A|=0)>>2]=4232,(A=0|ar[A+24>>2])&&mu(A)}function WA(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n,t,o,a=0;n=(A|=0)+4|0,t=A+8|0,o=A+12|0,tr[A+24>>0]=0,ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ar[A+12>>2]=0,ar[(a=A+16|0)>>2]=r,ar[a+4>>2]=i,a=0|ar[e>>2],(i=r=0|ar[e+4>>2])?(bu(r),r=0|ar[n>>2],ar[A>>2]=a,ar[n>>2]=i,0|r&&du(r)):(ar[A>>2]=a,ar[n>>2]=i),(ar[t>>2]=f)&&(ar[o>>2]=1+(0|ar[f+12>>2]))}function IA(A){var e,r,i,f,n=0;return ur=(f=ur)+16|0,e=f,0|CA(A|=0,1,0)?(r=0|ar[A>>2],(n=0==(0|(i=0|ar[A+4>>2])))||bu(i),A=0|xb[63&ar[16+(0|ar[r>>2])>>2]](r,e,1)?0|tr[e>>0]:(GA(A),0),n||du(i),ur=f,0|(n=A)):(ur=f,(n=0)|n)}function CA(A,e,r){A|=0,e|=0;var i=0,f=0,n=0,t=0,o=0,a=0,c=0;if((0|(r|=0))<0&&sr(55739,47382,290,18687),a=0|ar[(i=c=A+16|0)>>2],!((0|(i=0|ar[i+4>>2]))<(0|r)|(0|i)==(0|r)&a>>>0<e>>>0)){f=0|ar[A+8>>2];do{if(f){if(0|CA(f,e,r)){f=0|ar[(i=c)>>2],i=0|ar[i+4>>2];break}return(c=0)|c}f=a}while(0);return a=0|ob(0|f,0|i,0|e,0|r),ar[c>>2]=a,ar[c+4>>2]=D,0|(c=1)}if(0<(0|i)|0==(0|i)&0<a>>>0){f=0|ar[A+8>>2];do{if(f){for(;;){if(r=0|ar[(n=e=f+16|0)>>2],(0|(n=0|ar[n+4>>2]))<(0|i)|(0|n)==(0|i)&r>>>0<a>>>0){i=7;break}if(r=0|ob(0|r,0|n,0|a,0|i),ar[(n=e)>>2]=r,ar[n+4>>2]=D,!(f=0|ar[f+8>>2])){i=9;break}}if(7==(0|i))sr(18700,47382,327,18717);else if(9==(0|i)){t=0|ar[(o=c)>>2],o=0|ar[o+4>>2];break}}else t=a,o=i}while(0);n=0|ar[A>>2],a=0|ar[n>>2],r=0|ar[a+20>>2],a=0|tb(0|(a=0|jb[127&ar[a+8>>2]](n)),0|D,0|t,0|o),xb[63&r](n,a,D),ar[c>>2]=0,ar[c+4>>2]=0}return tr[A+24>>0]=1,(c=0)|c}function GA(A){var e=0;ar[(e=(A|=0)+16|0)>>2]=0,(e=(ar[e+4>>2]=0)|ar[A+8>>2])&&GA(e),tr[(e=A+24|0)>>0]=1}function VA(A){var e,r,i,f,n=0;return ur=(f=ur)+16|0,e=f,0|CA(A|=0,2,0)?(r=0|ar[A>>2],(n=0==(0|(i=0|ar[A+4>>2])))||bu(i),A=0|xb[63&ar[16+(0|ar[r>>2])>>2]](r,e,2)?65535&((0|cr[e>>0])<<8|0|cr[e+1>>0]):(GA(A),0),n||du(i),ur=f,0|(n=A)):(ur=f,(n=0)|n)}function FA(A){var e,r,i,f,n=0;return ur=(f=ur)+16|0,e=f,0|CA(A|=0,4,0)?(r=0|ar[A>>2],(n=0==(0|(i=0|ar[A+4>>2])))||bu(i),A=0|xb[63&ar[16+(0|ar[r>>2])>>2]](r,e,4)?(0|cr[e+1>>0])<<16|(0|cr[e>>0])<<24|(0|cr[e+2>>0])<<8|0|cr[e+3>>0]:(GA(A),0),n||du(i),ur=f,0|(n=A)):(ur=f,(n=0)|n)}function RA(A,e){A|=0,e|=0;var r,i,f,n=0,t=0,o=0,a=0;ur=(f=ur)+16|0,r=(i=f)+12|0,ar[i>>2]=0,ar[i+4>>2]=0,a=e+16|(ar[i+8>>2]=0);A:do{if(0==(0|ar[a>>2])&0==(0|ar[a+4>>2]))ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0;else{t=e+4|0;e:for(;;){if(!(0|CA(e,1,0))){n=5;break}switch(n=0|ar[e>>2],(a=0==(0|(o=0|ar[t>>2])))||bu(o),n=0|xb[63&ar[16+(0|ar[n>>2])>>2]](n,r,1)?(n=0|tr[r>>0])<<24>>24?(_u(i,n),0):2:(GA(e),ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,1),a||du(o),3&n){case 0:break;case 2:n=15;break e;default:break A}}if(5==(0|n)){ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0;break}if(15==(0|n)){ar[A>>2]=ar[i>>2],ar[A+4>>2]=ar[i+4>>2],ar[A+8>>2]=ar[i+8>>2],ar[i>>2]=0,ar[i+4>>2]=0,ar[i+8>>2]=0;break}}}while(0);ur=(0<=(0|tr[i+11>>0])||vu(0|ar[i>>2]),f)}function NA(A,e,r){e|=0,r|=0;var i=0;return i=0|ar[(A|=0)>>2],r=0|tb(0|(i=0|jb[127&ar[8+(0|ar[i>>2])>>2]](i)),0|D,0|e,0|r),e=0|ar[A>>2],0|xb[63&ar[12+(0|ar[e>>2])>>2]](e,r,D)}function _A(A,e,r){A|=0,e|=0,r|=0;for(var i=0,f=0,n=0;;){if(f=0|ar[(n=i=A+16|0)>>2],(0|(n=0|ar[n+4>>2]))<(0|r)|(0|n)==(0|r)&f>>>0<e>>>0){A=3;break}if(f=0|ob(0|f,0|n,0|e,0|r),ar[(n=i)>>2]=f,ar[n+4>>2]=D,!(A=0|ar[A+8>>2])){A=5;break}}if(3==(0|A))sr(18700,47382,327,18717);else if(5==(0|A))return}function YA(A,e,r){e|=0,r|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0,l=0;return ar[(A|=0)>>2]=e,ar[A+4>>2]=r,ar[(i=A+8|0)>>2]=r,ar[(a=c=A+16|0)>>2]=0,ar[a+4>>2]=0,ar[(a=A+24|0)>>2]=0,r?(f=e+1|0,ar[A>>2]=f,n=0|cr[e>>0],o=r+-1|0,ar[i>>2]=o,n=0|db(0|n,0,56),t=D,ar[(l=c)>>2]=n,ar[l+4>>2]=t,o?(o=e+2|0,ar[A>>2]=o,f=0|cr[f>>0],l=r+-2|0,ar[i>>2]=l,f=0|db(0|f,0,48),f|=n,n=t|D,ar[(t=c)>>2]=f,ar[t+4>>2]=n,l?(t=e+3|0,ar[A>>2]=t,o=0|cr[o>>0],l=r+-3|0,ar[i>>2]=l,o=0|db(0|o,0,40),o|=f,f=n|D,ar[(n=c)>>2]=o,ar[n+4>>2]=f,l?(n=e+4|0,ar[A>>2]=n,t=0|cr[t>>0],l=r+-4|0,ar[i>>2]=l,f|=t,ar[(t=c)>>2]=o,ar[t+4>>2]=f,l?(t=e+5|0,ar[A>>2]=t,n=0|cr[n>>0],l=r+-5|0,ar[i>>2]=l,n=0|db(0|n,0,24),n|=o,f|=D,ar[(o=c)>>2]=n,ar[o+4>>2]=f,l?(o=e+6|0,ar[A>>2]=o,t=0|cr[t>>0],l=r+-6|0,ar[i>>2]=l,n|=t=0|db(0|t,0,16),f|=D,ar[(t=c)>>2]=n,ar[t+4>>2]=f,l?(t=e+7|0,ar[A>>2]=t,o=0|cr[o>>0],l=r+-7|0,ar[i>>2]=l,n|=o=0|db(0|o,0,8),f|=D,ar[(o=c)>>2]=n,ar[o+4>>2]=f,l=l?(ar[A>>2]=e+8,e=0|cr[t>>0],ar[i>>2]=r+-8,ar[(l=c)>>2]=n|e,ar[l+4>>2]=f,64-(l=0)|0):64-(l=8)|0,void(ar[a>>2]=l)):(l=64-(l=16)|0,void(ar[a>>2]=l))):(l=64-(l=24)|0,void(ar[a>>2]=l))):(l=64-(l=32)|0,void(ar[a>>2]=l))):(l=64-(l=40)|0,void(ar[a>>2]=l))):(l=64-(l=48)|0,void(ar[a>>2]=l))):(l=64-(l=56)|0,void(ar[a>>2]=l))):(c=(c=64)-c|0,void(ar[a>>2]=c))}function QA(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0;if((0|(i=0|ar[(r=(A|=0)+24|0)>>2]))<(0|e)){i=64-i|0,n=A+8|0;A:do{if(7<(0|i)){t=A+16|0,f=0|ar[n>>2];do{if(!f)break A;c=0|ar[A>>2],ar[A>>2]=c+1,c=0|cr[c>>0],f=f+-1|0,ar[n>>2]=f,c=0|db(0|c,0,0|(i=i+-8|0)),a=ar[(l=t)+4>>2]|D,ar[(o=t)>>2]=ar[l>>2]|c,ar[o+4>>2]=a}while(7<(0|i))}}while(0);i=64-i|0,ar[r>>2]=i}return l=0|sb(0|(o=0|ar[(a=c=A+16|0)>>2]),0|(a=0|ar[a+4>>2]),64-e|0),a=0|db(0|o,0|a,0|e),ar[c>>2]=a,ar[c+4>>2]=D,ar[r>>2]=i-e,0|l}function DA(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;for(c=(A|=0)+8|0,i=A+16|0,f=(l=0)|ar[(r=A+24|0)>>2];;){if((0|f)<1){f=64-f|0;A:do{if(7<(0|f)){n=0|ar[c>>2];do{if(!n)break A;u=0|ar[A>>2],ar[A>>2]=u+1,u=0|cr[u>>0],n=n+-1|0,ar[c>>2]=n,u=0|db(0|u,0,0|(f=f+-8|0)),t=ar[(b=i)+4>>2]|D,ar[(o=i)>>2]=ar[b>>2]|u,ar[o+4>>2]=t}while(7<(0|f))}}while(0);o=64-f|0,ar[r>>2]=o}else o=f;if(t=0|db(0|(b=0|ar[(u=i)>>2]),0|(u=0|ar[u+4>>2]),1),n=D,ar[(f=i)>>2]=t,ar[f+4>>2]=n,f=o+-1|0,ar[r>>2]=f,!(-1<(0|u)|-1==(0|u)&4294967295<b>>>0))break;if(19<(0|l)){f=0,a=20;break}l=l+1|0}if(20==(0|a))return 0|f;if(!l)return(ar[e>>2]=0)|(b=1);if((0|o)<=(0|l)){f=65-o|0;A:do{if(7<(0|f)){o=0|ar[c>>2];do{if(!o)break A;b=0|ar[A>>2],ar[A>>2]=b+1,b=0|cr[b>>0],o=o+-1|0,ar[c>>2]=o,t|=b=0|db(0|b,0,0|(f=f+-8|0)),n|=D,ar[(b=i)>>2]=t,ar[b+4>>2]=n}while(7<(0|f))}}while(0);f=64-f|0,ar[r>>2]=f}return b=0|sb(0|t,0|n,64-l|0),c=0|db(0|t,0|n,0|l),ar[(u=i)>>2]=c,ar[u+4>>2]=D,ar[r>>2]=f-l,b=b+(1<<l)|0,ar[e>>2]=b+-1,1<(0|b)?0|(b=1):(sr(18749,47382,427,47403),0)}function JA(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0,u=0;if((0|(t=0|ar[(r=(A|=0)+12|0)>>2]))!=((o=u=0|ar[(i=A+4|0)>>2])-(n=f=0|ar[A>>2])|0))return ar[r>>2]=t+1,void(tr[n+t>>0]=e);(0|o)==(0|(t=0|ar[(u=A+8|0)>>2]))?((0|(t=(l=t-f|0)+1|0))<0&&zl(),o=l<<1,c=(o=l>>>0<1073741823?o>>>0<t>>>0?t:o:2147483647)?0|hu(o):0,tr[(a=c+l|0)>>0]=e,t=a+(0-l)|0,0<(0|l)&&hb(0|t,0|n,0|l),ar[A>>2]=t,ar[i>>2]=a+1,ar[u>>2]=c+o,0|f&&vu(n)):(tr[o>>0]=e,ar[i>>2]=1+(0|ar[i>>2])),ar[r>>2]=1+(0|ar[r>>2])}function MA(A,e){e|=0;var r,i,f=0,n=0,t=0;t=(n=0|ar[(i=(A|=0)+12|0)>>2])+2|0,f=0|ar[A>>2],(r=(0|ar[A+4>>2])-f|0)>>>0<t>>>0?(TA(A,t-r|0),t=A,n=0|ar[i>>2],f=0|ar[A>>2]):t=A,ar[i>>2]=n+1,tr[f+n>>0]=(65535&e)>>>8,A=0|ar[i>>2],ar[i>>2]=A+1,tr[(0|ar[t>>2])+A>>0]=e}function TA(A,e){var r,i,f=0,n=0,t=0,o=0,a=0;if((e|=0)>>>0<=((t=0|ar[(r=(A|=0)+8|0)>>2])-(f=0|ar[(i=A+4|0)>>2])|0)>>>0)for(;f=1+((tr[f>>0]=0)|ar[i>>2])|0,ar[i>>2]=f,0!=(0|(e=e+-1|0)););else{for((0|(f=(o=f-(n=0|ar[A>>2])|0)+e|0))<0&&zl(),a=(t=t-n|0)<<1,a=(n=(f=t>>>0<1073741823?a>>>0<f>>>0?f:a:2147483647)?0|hu(f):0)+o|0,o=n+f|0,f=t=a;t=f=t+1|(tr[f>>0]=0),0!=(0|(e=e+-1|0)););e=0|ar[A>>2],f=a+(0-(n=(0|ar[i>>2])-e|0))|0,0<(0|n)&&hb(0|f,0|e,0|n),ar[A>>2]=f,ar[i>>2]=t,ar[r>>2]=o,e&&vu(e)}}function UA(A,e){e|=0;var r,i,f=0,n=0,t=0;t=(n=0|ar[(i=(A|=0)+12|0)>>2])+4|0,f=0|ar[A>>2],(r=(0|ar[A+4>>2])-f|0)>>>0<t>>>0?(TA(A,t-r|0),t=A,n=0|ar[i>>2],f=0|ar[A>>2]):t=A,ar[i>>2]=n+1,tr[f+n>>0]=e>>>24,A=0|ar[i>>2],ar[i>>2]=A+1,tr[(0|ar[t>>2])+A>>0]=e>>>16,A=0|ar[i>>2],ar[i>>2]=A+1,tr[(0|ar[t>>2])+A>>0]=e>>>8,A=0|ar[i>>2],ar[i>>2]=A+1,tr[(0|ar[t>>2])+A>>0]=e}function SA(A,e,r,i){A|=0,r|=0,i|=0;var f=0,n=0,t=0;switch(0|(e|=0)){case 1:return i>>>0<0|0==(0|i)&r>>>0<256||sr(18760,47382,543,19563),void JA(A,255&r);case 2:return i>>>0<0|0==(0|i)&r>>>0<65536||sr(18774,47382,547,19563),i=(n=0|ar[(t=A+12|0)>>2])+2|0,e=0|ar[A>>2],(f=(0|ar[A+4>>2])-e|0)>>>0<i>>>0?(TA(A,i-f|0),f=A,i=0|ar[t>>2],e=0|ar[A>>2]):(f=A,i=n),ar[t>>2]=i+1,tr[e+i>>0]=(65535&r)>>>8,A=0|ar[t>>2],ar[t>>2]=A+1,void(tr[(0|ar[f>>2])+A>>0]=r);case 4:return i>>>0<1|1==(0|i)&r>>>0<0||sr(18790,47382,551,19563),i=(n=0|ar[(t=A+12|0)>>2])+4|0,e=0|ar[A>>2],(f=(0|ar[A+4>>2])-e|0)>>>0<i>>>0?(TA(A,i-f|0),f=A,i=0|ar[t>>2],e=0|ar[A>>2]):(f=A,i=n),ar[t>>2]=i+1,tr[e+i>>0]=r>>>24,A=0|ar[t>>2],ar[t>>2]=A+1,tr[(0|ar[f>>2])+A>>0]=r>>>16,A=0|ar[t>>2],ar[t>>2]=A+1,tr[(0|ar[f>>2])+A>>0]=r>>>8,A=0|ar[t>>2],ar[t>>2]=A+1,void(tr[(0|ar[f>>2])+A>>0]=r);case 8:return void function(A,e,r){e|=0,r|=0;var i,f=0,n=0,t=0,o=0;t=(n=0|ar[(i=(A|=0)+12|0)>>2])+8|0,f=0|ar[A>>2],(o=(0|ar[A+4>>2])-f|0)>>>0<t>>>0?(TA(A,t-o|0),t=A,n=0|ar[i>>2],f=0|ar[A>>2]):t=A,A=0|sb(0|e,0|r,56),ar[i>>2]=n+1,tr[f+n>>0]=A,A=0|sb(0|e,0|r,48),o=0|ar[i>>2],ar[i>>2]=o+1,tr[(0|ar[t>>2])+o>>0]=A,o=0|sb(0|e,0|r,40),A=0|ar[i>>2],ar[i>>2]=A+1,tr[(0|ar[t>>2])+A>>0]=o,A=0|ar[i>>2],ar[i>>2]=A+1,A=0|sb(0|e,0|(tr[(0|ar[t>>2])+A>>0]=r),24),o=0|ar[i>>2],ar[i>>2]=o+1,tr[(0|ar[t>>2])+o>>0]=A,o=0|sb(0|e,0|r,16),A=0|ar[i>>2],ar[i>>2]=A+1,tr[(0|ar[t>>2])+A>>0]=o,A=0|sb(0|e,0|r,8),r=0|ar[i>>2],ar[i>>2]=r+1,tr[(0|ar[t>>2])+r>>0]=A,r=0|ar[i>>2],ar[i>>2]=r+1,tr[(0|ar[t>>2])+r>>0]=e}(A,r,i);default:sr(55739,47382,558,19563)}}function OA(A,e){var r=0,i=0,f=0,n=0,t=0,o=0,a=0;if(a=(A|=0)+12|0,n=0|tr[(t=(e|=0)+11|0)>>0],r=0|ar[(o=e+4|0)>>2],i=1+(0|ar[a>>2])+(n<<24>>24<0?r:255&n)|0,(f=(0|ar[A+4>>2])-(0|ar[A>>2])|0)>>>0<i>>>0?(TA(A,i-f|0),f=0|tr[t>>0],r=0|ar[o>>2]):f=n,!(0|(f<<24>>24<0?r:255&f)))return t=A,e=(o=0|ar[a>>2])+1|0,ar[a>>2]=e,a=0|ar[t>>2],void(tr[(a=a+o|0)>>0]=0);for(i=0,r=f;f=0|tr[(r<<24>>24<0?0|ar[e>>2]:e)+i>>0],n=0|ar[a>>2],ar[a>>2]=n+1,tr[(0|ar[A>>2])+n>>0]=f,(i=i+1|0)>>>0<((r=0|tr[t>>0])<<24>>24<0?0|ar[o>>2]:255&r)>>>0;);t=(o=0|ar[a>>2])+1|0,ar[a>>2]=t,a=0|ar[A>>2],tr[(a=a+o|0)>>0]=0}function zA(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0;a=0|ar[(f=(A|=0)+12|0)>>2],i=(t=0|ar[(n=e+4|0)>>2])-(o=0|ar[e>>2])+a|0,c=0|ar[A>>2],(r=(0|ar[A+4>>2])-c|0)>>>0<i>>>0&&(TA(A,i-r|0),c=0|ar[A>>2],a=0|ar[f>>2],o=0|ar[e>>2],t=0|ar[n>>2]),hb(c+a|0,0|o,t-o|0),ar[f>>2]=(0|ar[n>>2])-(0|ar[e>>2])+(0|ar[f>>2])}function jA(A,e){e|=0;var r,i,f,n,t,o=0,a=0;(0|(o=0|ar[(t=(A|=0)+12|0)>>2]))!=((r=0|ar[(f=A+4|0)>>2])-(i=0|ar[A>>2])|0)&&sr(18810,47382,610,18838),(n=o+e|0)>>>0<=o>>>0?n>>>0<o>>>0&&(0|r)!=(0|(a=i+n|0))&&(ar[f>>2]=a):(TA(A,e),o=0|ar[t>>2]),ar[t>>2]=o+e}function HA(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0,b=0;if(ur=(o=ur)+160|0,l=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[l>>2]=0,ar[l+4>>2]=0,ar[l+8>>2]=0,Xe(t,l),(0|tr[l+11>>0])<0&&vu(0|ar[l>>2]),0<(0|ar[r>>2]))for(c=0;We(f,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(b=0|We(f,18865,5),xA(l,e),We(0|We(b,(u=(a=0|tr[(c=l+11|0)>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[l+4>>2]:255&a),18871,7),(0|tr[c>>0])<0&&vu(0|ar[l>>2]),0<(0|ar[r>>2]))for(c=0;We(f,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(u=0|We(f,18879,6),b=0|We(0|Kf(u,0|ar[(b=e+8|0)>>2],0|ar[b+4>>2]),18886,17),We(0|Lf(b,0|ar[e+16>>2]),18904,2),0|tr[e+36>>0]){if(0<(0|ar[r>>2]))for(c=0;We(f,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(l=0|We(f,18907,9),l=0|We(0|Pf(l,0|cr[e+37>>0]),30086,1),0<(0|ar[r>>2]))for(c=0;We(l,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););u=(b=0|We(l,18917,7))+(0|ar[(0|ar[b>>2])-12>>2])+4|0,ar[u>>2]=-75&ar[u>>2]|8,We(0|Lf(b,0|ar[e+40>>2]),30086,1)}if(Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o}function Xe(A,e){var r,i,f=0,n=0,t=0,o=0;Eu(r=(A|=0)+32|0,e|=0),8&(t=(ar[(o=A+44|0)>>2]=0)|ar[(i=A+48|0)>>2])|0&&(e=(e=0|tr[11+r>>0])<<24>>24<0?(n=f=e=0|ar[r>>2])+(0|ar[A+36>>2])|0:(n=f=r)+(255&e)|0,ar[o>>2]=e,ar[A+8>>2]=f,ar[A+12>>2]=n,ar[A+16>>2]=e),16&t&&(o=(e=(e=0|tr[(f=11+r|0)>>0])<<24>>24<0?(t=0|ar[A+36>>2],ar[o>>2]=(0|ar[r>>2])+t,(2147483647&ar[A+40>>2])-1|0):(t=255&e,ar[o>>2]=r+t,10),t),Vu(r,e,0),(e=0|tr[f>>0])<<24>>24<0?(t=f=0|ar[r>>2],n=0|ar[A+36>>2]):(n=255&e,f=t=r),ar[(e=A+24|0)>>2]=f,ar[A+20>>2]=f,ar[A+28>>2]=t+n,3&ar[i>>2]&&(ar[e>>2]=f+o))}function We(A,e,r){e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0;return ur=(a=ur)+16|0,n=a+12|0,l=(o=a)+8|0,zf(o,A|=0),0|tr[o>>0]?(c=(0|ar[A>>2])-12|0,ar[l>>2]=ar[A+(0|ar[c>>2])+24>>2],c=A+(0|ar[c>>2])|0,t=0|ar[c+4>>2],f=e+r|0,-1==(0|(r=0|ar[(i=c+76|0)>>2]))&&(Tf(n,c),r=0|un(n,59232),r=0|Hb[31&ar[28+(0|ar[r>>2])>>2]](r,32),bn(n),r=r<<24>>24,ar[i>>2]=r),ar[n>>2]=ar[l>>2],ur=(0|PA(n,e,32==(176&t|0)?f:e,f,c,255&r)||Df(l=A+(0|ar[(0|ar[A>>2])-12>>2])|0,5|ar[l+16>>2]),jf(o),a),0|A):(jf(o),ur=a,0|A)}function xA(A,e){A|=0;var r,i,f,n,t,o,a=0;if(ur=(o=ur)+160|0,n=o+136|0,t=o,1970628964!=(0|(a=0|ar[(e|=0)+20>>2])))return ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,tr[A+11>>0]=4,tr[A+4>>0]=0,tr[A>>0]=a>>>24,tr[A+1>>0]=a>>>16,tr[A+2>>0]=a>>>8,tr[A+3>>0]=a,void(ur=o);i=t+56|0,f=t+4|0,ar[t>>2]=292,ar[i>>2]=312,Jf(t+56|0,f),ar[t+128>>2]=0,ar[t+132>>2]=-1,ar[t>>2]=4304,ar[i>>2]=4324,Sf(f),ar[f>>2]=4340,ar[(r=t+36|0)>>2]=0,ar[4+r>>2]=0,ar[8+r>>2]=0,ar[12+r>>2]=0,ar[t+52>>2]=16,ar[n>>2]=0,ar[4+n>>2]=0,ar[8+n>>2]=0,Xe(f,n),(0|tr[11+n>>0])<0&&vu(0|ar[n>>2]),a=t+(0|ar[(0|ar[t>>2])-12>>2])+4|0,ar[a>>2]=-75&ar[a>>2]|8,ar[t+(0|ar[(0|ar[t>>2])-12>>2])+76>>2]=48,ar[t+(0|ar[(0|ar[t>>2])-12>>2])+12>>2]=2,e=e+24|0,a=0;do{switch(0|a){case 4:case 6:case 8:case 10:tr[n>>0]=45,We(t,n,1)}Pf(t,0|cr[(0|ar[e>>2])+a>>0]),a=a+1|0}while((0|a)<16);Ie(A,f),ar[t>>2]=4304,ar[i>>2]=4324,ar[f>>2]=4340,(0|tr[11+r>>0])<0&&vu(0|ar[r>>2]),kf(f),Gf(),bf(i),ur=o}function Ie(A,e){A|=0;var r=0,i=0,f=0,n=0;if(16&(r=0|ar[(e|=0)+48>>2])|0){if((i=0|ar[(r=e+44|0)>>2])>>>0<(f=0|ar[e+24>>2])>>>0&&(i=ar[r>>2]=f),r=0|ar[e+20>>2],ar[A>>2]=0,ar[A+4>>2]=0,4294967279<(e=i-r|(ar[A+8>>2]=0))>>>0&&pu(),e>>>0<11?tr[A+11>>0]=e:(f=0|hu(n=e+16&-16),ar[A>>2]=f,ar[A+8>>2]=-2147483648|n,ar[A+4>>2]=e,A=f),(0|r)!=(0|i)){for(f=A;tr[f>>0]=0|tr[r>>0],(0|(r=r+1|0))!=(0|i);)f=f+1|0;A=A+e|0}tr[A>>0]=0}else{if(!(8&r))return ar[A>>2]=0,ar[A+4>>2]=0,void(ar[A+8>>2]=0);if(r=0|ar[e+8>>2],f=0|ar[e+16>>2],ar[A>>2]=0,ar[A+4>>2]=0,4294967279<(e=f-r|(ar[A+8>>2]=0))>>>0&&pu(),e>>>0<11?tr[A+11>>0]=e:(n=0|hu(i=e+16&-16),ar[A>>2]=n,ar[A+8>>2]=-2147483648|i,ar[A+4>>2]=e,A=n),(0|r)!=(0|f)){for(i=A;tr[i>>0]=0|tr[r>>0],(0|(r=r+1|0))!=(0|f);)i=i+1|0;A=A+e|0}tr[A>>0]=0}}function PA(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c=0,l=0,u=0,b=0;if(ur=(a=ur)+16|0,o=a,!(b=0|ar[(A|=0)>>2]))return ur=a,(b=0)|b;if(l=(0|(l=i-(c=e)|0))<(0|(u=0|ar[(t=f+12|0)>>2]))?u-l|0:0,0<(0|(f=(u=r)-c|0))&&(0|xb[63&ar[48+(0|ar[b>>2])>>2]](b,e,f))!=(0|f))return ar[A>>2]=0,ur=a,(b=0)|b;do{if(0<(0|l)){if(ar[o>>2]=0,ar[o+4>>2]=0,c=l>>>(ar[o+8>>2]=0)<11?(tr[(e=o+11|0)>>0]=l,f=o):(f=0|hu(e=l+16&-16),ar[o>>2]=f,ar[o+8>>2]=-2147483648|e,ar[o+4>>2]=l,e=o+11|0,o),vb(0|f,0|n,0|l),((tr[f+l>>0]=0)|xb[63&ar[48+(0|ar[b>>2])>>2]](b,(0|tr[e>>0])<0?0|ar[c>>2]:o,l))!=(0|l))return((ar[A>>2]=0)|tr[e>>0])<0&&vu(0|ar[c>>2]),ur=a,(b=0)|b;(0|tr[e>>0])<0&&vu(0|ar[c>>2]);break}}while(0);return 0<(0|(i=i-u|0))&&(0|xb[63&ar[48+(0|ar[b>>2])>>2]](b,r,i))!=(0|i)?(ar[A>>2]=0,ur=a,(b=0)|b):(ar[t>>2]=0,ur=a,0|b)}function LA(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),HA(f,e,r),We(n,(c=(e=0|tr[(r=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,c?0|ar[4+f>>2]:255&e),(0|tr[r>>0])<0&&vu(0|ar[f>>2]),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),Gf(),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),Gf(),bf(t),ur=a}function KA(A,e,r,i){A|=0,r|=0,i|=0;var f,n,t,o,a=0,c=0,l=0;c=0|tr[(f=(e|=0)+36|0)>>0]?12:8,l=1970628964==(0|ar[(o=e+20|0)>>2])?16|c:c,a=(0|ar[(n=r+4|0)>>2])-i-c-(0|ar[r>>2])+l|0,ar[(t=r+12|0)>>2]=i,function(A,e){A|=0;var r,i,f,n,t=0,o=0,a=0,c=0;(0|(e|=0))<=-1&&sr(18843,47382,618,18855),e&&(n=0|ar[(f=A+4|0)>>2],a=c=0|ar[A>>2],(i=(r=(o=n)-c|0)+e|0)>>>0<=r>>>0?i>>>0<r>>>0&&(0|o)!=(0|(t=a+i|0))?ar[f>>2]=t:t=n:(TA(A,e),c=a=0|ar[A>>2],t=0|ar[f>>2]),(t=t-c-e|0)>>>0<=(o=0|ar[A+12>>2])>>>0||wb((A=a+o|0)+e|0,0|A,t-o|0))}(r,l-c|0),UA(r,a),UA(r,0|ar[o>>2]);do{if(1970628964==(0|ar[o>>2])){if(i=e+24|0,16==((0|ar[e+28>>2])-(0|ar[i>>2])|0)){zA(r,i);break}sr(19079,19104,309,19111)}}while(0);do{if(0|tr[f>>0]){if((i=0|ar[e+40>>2])>>>0<16777216){UA(r,cr[e+37>>0]<<24|i);break}sr(19126,19104,314,19111)}}while(0);ar[t>>2]=(0|ar[n>>2])-(0|ar[r>>2]),c=0|ar[(a=56592)+4>>2],ar[(l=A)>>2]=ar[a>>2],ar[l+4>>2]=c,yu(A+8|0,56600)}function Ce(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=(A|=0)+4|0,n=0|ar[A>>2],1073741823<(o=1+(i=(t=(0|ar[f>>2])-n|0)>>2)|0)>>>0&&zl(),a=(c=(0|ar[(l=A+8|0)>>2])-n|0)>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t),ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),n&&vu(n)}function qA(A,e,r){A|=0,e|=0;var i,f=0,n=0;if(ur=(i=ur)+16|0,f=i,n=0|FA(r|=0),tr[e+37>>0]=n>>>24,ar[e+40>>2]=16777215&n,tr[e+36>>0]=1,ar[(e=e+16|0)>>2]=4+(0|ar[e>>2]),!(0|tr[r+24>>0]))return f=0|ar[(r=56592)+4>>2],ar[(n=A)>>2]=ar[r>>2],ar[n+4>>2]=f,yu(A+8|0,56600),void(ur=i);ar[f>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,oo(A,2,100,f),ur=(0<=(0|tr[f+11>>0])||vu(0|ar[f>>2]),i)}function $A(A,e,r,i){var f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F=0,R=0,N=0,_=0,Y=0;ur=(V=ur)+208|0,N=(r|=0)+16|0,c=r+24|0,l=4+(W=V+184|0)|0,u=(e|=0)+44|0,b=e+48|0,k=12+(C=(I=V)+24|0)|0,h=4+C|0,w=s=64+C|0,v=136+C|0,m=140+C|0,Z=60+C|0,p=11+(X=V+192|0)|0,y=d=8+C|0,B=11+(G=V+168|0)|0,E=11+(g=44+C|0)|0,f=e+52|0,n=-1!=(0|(i|=0)),o=11+(t=I+8|0)|0,a=(A|=0)+8|0,e=0;A:for(;!(0==(0|ar[(R=N)>>2])&0==(0|ar[R+4>>2])||0|tr[c>>0]);){ar[W>>2]=0,ar[l>>2]=0,Ae(I,r,W);do{if((0|ar[I>>2])==(0|ar[14148])){if((R=F=0|ar[b>>2])-(0|ar[u>>2])>>3>>>0<=2e4){R>>>0<(0|ar[f>>2])>>>0?(ar[F>>2]=ar[W>>2],ar[R+4>>2]=ar[l>>2],ar[W>>2]=0,ar[l>>2]=0,ar[b>>2]=R+8):ee(u,W),R=(n&(0|(e=e+1|0))==(0|i))<<31>>31;break}ar[d>>2]=4524,ar[C>>2]=188,ar[s>>2]=208,ar[h>>2]=0,Jf(w,k),ar[v>>2]=0,ar[m>>2]=-1,ar[C>>2]=4504,ar[s>>2]=4544,ar[d>>2]=4524,Sf(k),ar[k>>2]=4340,ar[g>>2]=0,ar[4+g>>2]=0,ar[8+g>>2]=0,ar[12+g>>2]=0,ar[Z>>2]=24,ar[X>>2]=0,ar[4+X>>2]=0,ar[8+X>>2]=0,Xe(k,X),(0|tr[p>>0])<0&&vu(0|ar[X>>2]),We(0|Lf(0|We(y,19273,30),2e4),19304,10),Ie(G,k),oo(A,6,1e3,G),(0|tr[B>>0])<0&&vu(0|ar[G>>2]),ar[C>>2]=4504,ar[s>>2]=4544,ar[y>>2]=4524,ar[k>>2]=4340,(0|tr[E>>0])<0&&vu(0|ar[g>>2]),kf(k),_f(),bf(s),R=1}else F=0|ar[(Y=I)+4>>2],ar[(R=A)>>2]=ar[Y>>2],ar[R+4>>2]=F,ar[a>>2]=ar[t>>2],ar[4+a>>2]=ar[4+t>>2],ar[8+a>>2]=ar[8+t>>2],ar[t>>2]=0,ar[4+t>>2]=0,ar[8+t>>2]=0,R=1}while(0);switch((0|tr[o>>0])<0&&vu(0|ar[t>>2]),0|(F=0|ar[l>>2])&&du(F),3&R){case 0:break;case 3:break A;default:_=28;break A}}ur=(28!=(0|_)&&(0|tr[c>>0]?(ar[X>>2]=0,ar[4+X>>2]=0,ar[8+X>>2]=0,oo(A,2,100,X),(0|tr[11+X>>0])<0&&vu(0|ar[X>>2])):(_=0|ar[(N=56592)+4>>2],ar[(Y=A)>>2]=ar[N>>2],ar[Y+4>>2]=_,yu(a,56600))),V)}function Ae(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c,l,u,b,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0;ur=(b=ur)+320|0,p=b+216|0,l=b+144|0,a=(Z=b)+304|0,n=b+292|0,i=b+280|0,f=b+268|0,t=b+256|0,c=b+248|0,ar[(u=b+168|0)>>2]=4264,o=8+u|0,ar[40+u>>2]=0,ar[o>>2]=0,ar[4+o>>2]=0,ar[8+o>>2]=0,ar[12+o>>2]=0,ar[16+o>>2]=0,ar[20+o>>2]=0,ar[24+o>>2]=0,or[28+o>>1]=0,re(l,u,e);A:do{if(0|ar[l>>2])B=0|ar[(p=l)+4>>2],ar[(y=A)>>2]=ar[p>>2],ar[y+4>>2]=B,B=8+l|0,ar[(y=A+8|0)>>2]=ar[B>>2],ar[y+4>>2]=ar[B+4>>2],ar[y+8>>2]=ar[B+8>>2],ar[B>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0;else{if(0|tr[e+24>>0]){ar[p>>2]=0,ar[p+4>>2]=0,ar[p+8>>2]=0,oo(A,2,100,p),(0|tr[p+11>>0])<0&&vu(0|ar[p>>2]);break}s=0|ar[20+u>>2];e:do{if((0|s)<1768714083){if((0|s)<1718909296){if((0|s)<1668246642){if((0|s)<1635135811){switch(0|s){case 1635088451:break;default:g=133;break e}s=0|hu(96),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5196,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,d=(ar[d>>2]=y)+w|0,ar[h>>2]=d,hb(0|y,0|v,0|w),ar[k>>2]=d;break}zl()}}while(0);v=0|ar[(w=36+u|0)+4>>2],ar[(y=s+52|0)>>2]=ar[w>>2],ar[y+4>>2]=v,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5224,ar[(y=s+72|0)>>2]=0,ar[y+4>>2]=0,ar[y+8>>2]=0,ar[y+12>>2]=0,ar[y+16>>2]=0,ar[y+20>>2]=0;break}if((0|s)<1668047216){switch(0|s){case 1635135811:break;default:g=133;break e}s=0|hu(96),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5556,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){B=0|hu(w),ar[k>>2]=B,y=(ar[d>>2]=B)+w|0,ar[h>>2]=y,hb(0|B,0|v,0|w),ar[k>>2]=y;break}zl()}}while(0);for(w=0|ar[(B=36+u|0)+4>>2],ar[(h=s+52|0)>>2]=ar[B>>2],ar[h+4>>2]=w,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5584,tr[s+72>>0]=1,w=(h=s+73|0)+23|0;(0|(h=h+1|(tr[h>>0]=0)))<(0|w););break}switch(0|s){case 1668047216:break;default:g=133;break e}s=0|hu(104),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5376,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5404,ar[s+72>>2]=0,ar[s+76>>2]=1,ar[s+80>>2]=0,ar[s+84>>2]=1,ar[s+88>>2]=0,ar[s+92>>2]=1,ar[s+96>>2]=0,ar[s+100>>2]=1;break}if((0|s)<1684631142){switch(0|s){case 1668246642:break;default:g=133;break e}s=0|hu(80),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5916,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5944,ar[s+72>>2]=0,ar[s+76>>2]=0;break}if((0|s)<1685218662){switch(0|s){case 1684631142:break;default:g=133;break e}s=0|hu(72),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5736,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5764;break}switch(0|s){case 1685218662:break;default:g=133;break e}s=0|hu(72),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5796,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5824;break}if((0|s)<1752589123){if((0|s)<1735553132){switch(0|s){case 1718909296:break;default:g=133;break e}s=0|hu(96),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=4600,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=4436,ar[(B=s+72|0)>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,ar[B+12>>2]=0,ar[B+16>>2]=0;break}if((0|s)<1751411826){switch(0|s){case 1735553132:break;default:g=133;break e}s=0|hu(88),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5676,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5704,ar[s+72>>2]=0,ar[s+76>>2]=0,ar[s+80>>2]=0;break}switch(0|s){case 1751411826:break;default:g=133;break e}s=0|hu(104),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=4656,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=4684,ar[s+72>>2]=0,ar[s+76>>2]=1885954932,ar[(B=s+80|0)>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,ar[B+12>>2]=0,ar[B+16>>2]=0,ar[B+20>>2]=0;break}if((0|s)<1768186228){switch(0|s){case 1752589123:break;default:g=133;break e}s=0|hu(120),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5496,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5524,ar[s+80>>2]=0,ar[s+84>>2]=0,tr[s+104>>0]=4,ar[s+108>>2]=0,ar[s+112>>2]=0,ar[s+116>>2]=0;break}if((0|s)<1768517222){switch(0|s){case 1768186228:break;default:g=133;break e}s=0|hu(104),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5616,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5644,ar[(B=s+72|0)>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,ar[B+12>>2]=0,ar[B+16>>2]=0,ar[B+20>>2]=0,ar[B+24>>2]=0;break}switch(0|s){case 1768517222:break;default:g=133;break e}s=0|hu(72),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=4836,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=4864;break}if((0|s)<1769104742){if(1768973167<=(0|s)){if((0|s)<1768975713){switch(0|s){case 1768973167:break;default:g=133;break e}s=0|hu(72),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5016,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5044;break}switch(0|s){case 1768977008:s=0|hu(72),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=4956,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=4984;break e;case 1768975713:s=0|hu(88),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5076,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5104,ar[s+72>>2]=0,ar[s+76>>2]=0,ar[s+80>>2]=0;break e;default:g=133;break e}}if((0|s)<1768778098){switch(0|s){case 1768714083:break;default:g=133;break e}s=0|hu(104),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=4776,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=4804,B=s+72|0,ar[s+96>>2]=0,ar[B>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,ar[B+12>>2]=0,ar[B+16>>2]=0,tr[B+20>>0]=0;break}if((0|s)<1768842853){switch(0|s){case 1768778098:break;default:g=133;break e}s=0|hu(80),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5316,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5344,tr[s+72>>0]=0;break}switch(0|s){case 1768842853:break;default:g=133;break e}s=0|hu(144),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=4896,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);for(h=0|ar[(w=36+u|0)+4>>2],ar[(d=s+52|0)>>2]=ar[w>>2],ar[d+4>>2]=h,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=4924,ar[s+72>>2]=0,w=(h=d=s+80|(or[s+76>>1]=0))+60|0;(0|(h=h+4|(ar[h>>2]=0)))<(0|w););tr[d+60>>0]=0;break}if((0|s)<1835365473){if((0|s)<1769107316){switch(0|s){case 1769104742:break;default:g=133;break e}s=0|hu(88),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5436,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5464,ar[s+72>>2]=0,ar[s+76>>2]=0,ar[s+80>>2]=0;break}if((0|s)<1769173093){switch(0|s){case 1769107316:break;default:g=133;break e}s=0|hu(80),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5256,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5284,ar[s+72>>2]=0;break}switch(0|s){case 1769173093:break;default:g=133;break e}s=0|hu(80),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5136,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5164,ar[s+72>>2]=0,ar[s+76>>2]=0;break}if((0|s)<1885960297){if((0|s)<1885959277){switch(0|s){case 1835365473:break;default:g=133;break e}s=0|hu(72),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=4628,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=4468;break}switch(0|s){case 1885959277:break;default:g=133;break e}s=0|hu(80),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=4716,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=4744,ar[s+72>>2]=0;break}if((0|s)<1970433056){switch(0|s){case 1885960297:break;default:g=133;break e}s=0|hu(88),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5976,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=6004,ar[s+72>>2]=0,ar[s+76>>2]=0,ar[s+80>>2]=0;break}switch(0|s){case 1970433056:break;default:g=133;break e}s=0|hu(88),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=5856,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(v=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[v>>2],ar[B+4>>2]=y,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0,ar[m>>2]=5884,ar[(B=s+72|0)>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0;break}while(0);if(133==(0|g)){s=0|hu(72),ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s>>2]=6036,ar[(m=s+16|0)>>2]=4264,ar[(d=s+24|0)>>2]=ar[o>>2],ar[d+4>>2]=ar[4+o>>2],ar[d+8>>2]=ar[8+o>>2],ar[d+12>>2]=ar[12+o>>2],ar[(d=s+40|0)>>2]=0,ar[(k=s+44|0)>>2]=0,v=(ar[(h=s+48|0)>>2]=0)|ar[24+u>>2],w=(0|ar[28+u>>2])-v|0;do{if(0|w){if(!((0|w)<0)){y=0|hu(w),ar[k>>2]=y,B=(ar[d>>2]=y)+w|0,ar[h>>2]=B,hb(0|y,0|v,0|w),ar[k>>2]=B;break}zl()}}while(0);y=0|ar[(g=36+u|0)+4>>2],ar[(B=s+52|0)>>2]=ar[g>>2],ar[B+4>>2]=y,ar[m>>2]=4404,ar[s+60>>2]=0,ar[s+64>>2]=0,ar[s+68>>2]=0}g=m,d=0|ar[(k=o)>>2],k=0|ar[k+4>>2],h=0|ar[(v=16+u|0)>>2];do{if(k>>>0<0|0==(0|k)&d>>>0<h>>>0)k=Z+64|0,ar[(w=Z+8|0)>>2]=4524,h=Z+12|0,ar[Z>>2]=188,ar[k>>2]=208,Jf(Z+64|(ar[Z+4>>2]=0),h),ar[Z+136>>2]=0,ar[Z+140>>2]=-1,ar[Z>>2]=4504,ar[k>>2]=4544,ar[w>>2]=4524,Sf(h),ar[h>>2]=4340,ar[(w=Z+44|0)>>2]=0,ar[w+4>>2]=0,ar[w+8>>2]=0,ar[w+12>>2]=0,ar[Z+60>>2]=24,ar[p>>2]=0,ar[p+4>>2]=0,ar[p+8>>2]=0,Xe(h,p),(0|tr[p+11>>0])<0&&vu(0|ar[p>>2]),y=0|We(d=Z+8|0,19384,10),B=0|We(0|Kf(y,0|ar[(B=o)>>2],0|ar[B+4>>2]),19395,34),We(0|Lf(B,0|ar[v>>2]),19430,7),Ie(a,h),oo(A,2,101,a),(0|tr[11+a>>0])<0&&vu(0|ar[a>>2]),ar[Z>>2]=4504,ar[k>>2]=4544,ar[d>>2]=4524,ar[h>>2]=4340,(0|tr[w+11>>0])<0&&vu(0|ar[w>>2]),kf(h),_f(),bf(k);else{if(20<(0|ar[e+12>>2])){for(ar[n>>2]=0,ar[4+n>>2]=0,d=(ar[8+n>>2]=0)|hu(64),ar[n>>2]=d,ar[8+n>>2]=-2147483584,k=19438,w=(h=d)+(ar[4+n>>2]=61)|0;tr[h>>0]=0|tr[k>>0],k=k+1|0,(0|(h=h+1|0))<(0|w););if(tr[d+61>>0]=0,oo(A,6,1e3,n),0<=(0|tr[11+n>>0]))break;vu(0|ar[n>>2]);break}if(0|NA(e,B=0|ob(0|d,0|k,0|h,0),D)){if(ar[i>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,oo(A,2,100,i),0<=(0|tr[11+i>>0]))break;vu(0|ar[i>>2]);break}if(d=0|ar[(k=o)>>2],(0|(k=0|ar[k+4>>2]))<0){if(ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,oo(A,2,101,f),0<=(0|tr[11+f>>0]))break;vu(0|ar[f>>2]);break}if(h=0|ob(0|d,0|k,0|ar[v>>2],0),w=D,(0|(y=0|ar[(B=e+16|0)+4>>2]))<(0|w)|((0|y)==(0|w)?(0|ar[B>>2])>>>0<h>>>0:0)){if(ar[t>>2]=0,ar[4+t>>2]=0,ar[8+t>>2]=0,oo(A,2,101,t),0<=(0|tr[11+t>>0]))break;vu(0|ar[t>>2]);break}if(ar[c>>2]=ar[e>>2],d=4+c|0,k=0|ar[e+4>>2],0|(ar[d>>2]=k)&&bu(k),WA(p,c,h,w,e),0|(d=0|ar[d>>2])&&du(d),ns[127&ar[20+(0|ar[m>>2])>>2]](Z,m,p),d=0|ar[(k=Z)+4>>2],ar[(v=l)>>2]=ar[k>>2],ar[v+4>>2]=d,d=Z+8|0,(0|tr[(k=(v=8+l|0)+11|0)>>0])<0?(tr[ar[v>>2]>>0]=0,ar[12+l>>2]=0):(tr[v>>0]=0,tr[k>>0]=0),Cu(v,0),ar[v>>2]=ar[d>>2],ar[v+4>>2]=ar[d+4>>2],ar[v+8>>2]=ar[d+8>>2],(0|ar[l>>2])==(0|ar[14148])&&(ar[r>>2]=g,d=0|ar[(B=r+4|0)>>2],ar[B>>2]=s,s=(d&&du(d),0)),k=0|ar[(d=w=p+16|0)>>2],0<(0|(d=0|ar[d+4>>2]))|0==(0|d)&0<k>>>0&&((h=0|ar[p+8>>2])&&(_A(h,k,d),k=0|ar[(d=w)>>2],d=0|ar[d+4>>2]),y=0|ar[p>>2],B=0|ar[y>>2],Z=0|ar[B+20>>2],B=0|tb(0|(B=0|jb[127&ar[B+8>>2]](y)),0|D,0|k,0|d),xb[63&Z](y,B,D),ar[(B=w)>>2]=0,ar[B+4>>2]=0),B=0|ar[(y=l)+4>>2],ar[(d=A)>>2]=ar[y>>2],ar[d+4>>2]=B,ar[(d=A+8|0)>>2]=ar[v>>2],ar[d+4>>2]=ar[v+4>>2],ar[d+8>>2]=ar[v+8>>2],ar[v>>2]=0,ar[v+4>>2]=0,(ar[v+8>>2]=0)|(d=0|ar[p+4>>2])&&du(d),!s)break A}}while(0);du(s)}}while(0);(0|tr[(s=8+l|0)+11>>0])<0&&vu(0|ar[s>>2]),ar[u>>2]=4264,ur=((d=0|ar[24+u>>2])&&((0|ar[(s=28+u|0)>>2])!=(0|d)&&(ar[s>>2]=d),vu(d)),b)}function ee(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;t=0|ar[(b=(A|=0)+4|0)>>2],r=o=0|ar[A>>2],536870911<(f=(l=t-o>>3)+1|0)>>>0&&zl(),a=(u=(0|ar[(i=A+8|0)>>2])-o|0)>>2,a=u>>3>>>0<268435455?a>>>0<f>>>0?f:a:536870911;do{if(a){if(!(536870911<a>>>0)){c=0|hu(a<<3);break}Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)}else c=0}while(0);if(u=c+(a<<3)|0,ar[(f=n=c+(l<<3)|0)>>2]=ar[e>>2],a=e+4|0,ar[c+(l<<3)+4>>2]=ar[a>>2],ar[e>>2]=0,a=n+8|(ar[a>>2]=0),(0|t)!=(0|r)){for(;t=(l=t)+-8|0,ar[n+-8>>2]=ar[t>>2],l=l+-4|0,ar[n+-4>>2]=ar[l>>2],ar[t>>2]=0,f=n=f+-8|(ar[l>>2]=0),(0|t)!=(0|r););o=0|ar[A>>2]}if(ar[A>>2]=f,f=0|ar[b>>2],ar[b>>2]=a,ar[i>>2]=u,(0|f)!=(0|(t=o)))for(;n=0|ar[f+-4>>2],f=f+-8|0,0|n&&du(n),(0|f)!=(0|t););o&&vu(o)}function re(A,e,r){A|=0,e|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;if(ur=(o=ur)+208|0,k=o+196|0,a=o+184|0,c=o+24|0,i=o+40|0,f=o+12|0,n=o,0|NA(r|=0,8,0))return ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,oo(A,2,100,a),0<=(0|tr[a+11>>0])||vu(0|ar[a>>2]),void(ur=o);s=0|FA(r),ar[(a=b=e+8|0)>>2]=s,a=(ar[a+4>>2]=0)|FA(r),ar[(s=e+20|0)>>2]=a,ar[(t=e+16|0)>>2]=8,u=b;do{if(1==(0|ar[u>>2])&0==(0|ar[u+4>>2])){if(0|NA(r,8,0))return ar[c>>2]=0,ar[c+4>>2]=0,ar[c+8>>2]=0,oo(A,2,100,c),0<=(0|tr[c+11>>0])||vu(0|ar[c>>2]),void(ur=o);if(l=0|FA(r),c=0|FA(r),ar[(a=b)>>2]=c,ar[a+4>>2]=l,ar[t>>2]=8+(0|ar[t>>2]),a=64+i|0,ar[(l=8+i|0)>>2]=4524,c=12+i|0,ar[i>>2]=188,ar[a>>2]=208,Jf(64+i|(ar[4+i>>2]=0),c),ar[136+i>>2]=0,ar[140+i>>2]=-1,ar[i>>2]=4504,ar[a>>2]=4544,ar[l>>2]=4524,Sf(c),ar[c>>2]=4340,ar[(l=44+i|0)>>2]=0,ar[l+4>>2]=0,ar[l+8>>2]=0,ar[l+12>>2]=0,ar[60+i>>2]=24,ar[k>>2]=0,ar[k+4>>2]=0,ar[k+8>>2]=0,Xe(c,k),(0|tr[k+11>>0])<0&&vu(0|ar[k>>2]),w=0|We(u=8+i|0,23427,9),We(0|Kf(w,0|ar[(h=b)>>2],0|ar[h+4>>2]),23437,24),268435455<(h=0|ar[b+4>>2])>>>0|268435455==(0|h)&4294967295<(0|ar[b>>2])>>>0)return Ie(f,c),oo(A,6,1e3,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),ar[i>>2]=4504,ar[a>>2]=4544,ar[u>>2]=4524,ar[c>>2]=4340,(0|tr[l+11>>0])<0&&vu(0|ar[l>>2]),kf(c),_f(),bf(a),void(ur=o);ar[i>>2]=4504,ar[a>>2]=4544,ar[u>>2]=4524,ar[c>>2]=4340,(0|tr[l+11>>0])<0&&vu(0|ar[l>>2]),kf(c),_f(),bf(a),a=0|ar[s>>2];break}}while(0);if(1970628964==(0|a)){if(0|NA(r,16,0))return ar[n>>2]=0,ar[n+4>>2]=0,ar[n+8>>2]=0,oo(A,2,100,n),0<=(0|tr[n+11>>0])||vu(0|ar[n>>2]),void(ur=o);do{if(0|CA(r,16,0)){if(b=e+24|0,16<=(c=(u=0|ar[(a=e+28|0)>>2])-(l=0|ar[b>>2])|0)>>>0?16!=(0|c)&&(0|u)!=(0|(d=l+16|0))&&(ar[a>>2]=d):TA(b,16-c|0),a=0|ar[r>>2],c=0|ar[r+4>>2]){bu(c),xb[63&ar[16+(0|ar[a>>2])>>2]](a,0|ar[b>>2],16),du(c);break}xb[63&ar[16+(0|ar[a>>2])>>2]](a,0|ar[b>>2],16);break}}while(0);ar[t>>2]=16+(0|ar[t>>2])}0|tr[r+24>>0]?(ar[k>>2]=0,ar[k+4>>2]=0,ar[k+8>>2]=0,oo(A,2,100,k),(0|tr[k+11>>0])<0&&vu(0|ar[k>>2])):(h=0|ar[(k=56592)+4>>2],ar[(w=A)>>2]=ar[k>>2],ar[w+4>>2]=h,yu(A+8|0,56600)),ur=o}function ie(A,e,r){A|=0,e|=0;var i,f=0;if(ur=(i=ur)+16|0,f=i,!(0|NA(r|=0,7,0)))return f=0|VA(r),or[e+4>>1]=f,f=0|VA(r),or[e+6>>1]=f,f=0|VA(r),or[e+8>>1]=f,r=(255&(0|IA(r)))>>>7,tr[e+10>>0]=r,r=0|ar[(e=56592)+4>>2],ar[(f=A)>>2]=ar[e>>2],ar[f+4>>2]=r,yu(A+8|0,56600),void(ur=i);ar[f>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,oo(A,2,100,f),ur=(0<=(0|tr[f+11>>0])||vu(0|ar[f>>2]),i)}function fe(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0;ur=(t=ur)+16|0,o=t,n=0|hu(32),ar[4+n>>2]=0,ar[8+n>>2]=0,ar[n>>2]=6120,a=0|ar[e>>2],ar[o>>2]=0,ar[(f=o+4|0)>>2]=0,c=(ar[o+8>>2]=0)|ar[r>>2],e=(0|ar[r+4>>2])-c|0,r=c;do{if(e){if(!((0|e)<0)){b=0|hu(e),s=(ar[o>>2]=b)+e|0,ar[o+8>>2]=s,hb(0|b,0|r,0|e),l=b,u=ar[f>>2]=s;break}zl()}else s=b=u=l=0}while(0);if(ar[(c=12+n|0)>>2]=6148,ar[16+n>>2]=a,ar[(r=20+n|0)>>2]=0,ar[(i=24+n|0)>>2]=0,(ar[(o=28+n|0)>>2]=0)|(e=u-l|0)&&((0|e)<0&&zl(),a=0|hu(e),ar[i>>2]=a,ar[r>>2]=a,ar[o>>2]=a+e,0<(0|(e=u-b|0))&&(hb(0|a,0|b,0|e),ar[i>>2]=a+e)),!b)return s=A+4|0,ar[A>>2]=c,ar[s>>2]=n,void(ur=t);(0|s)!=(0|b)&&(ar[f>>2]=b),vu(b),s=A+4|0,ar[A>>2]=c,ar[s>>2]=n,ur=t}function ne(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c,l=0,u=0,b=0,s=0;if(ur=(c=ur)+160|0,f=c+136|0,o=(t=c)+56|0,a=t+4|0,ar[t>>2]=292,ar[o>>2]=312,Jf(t+56|0,a),ar[t+128>>2]=0,ar[t+132>>2]=-1,ar[t>>2]=4304,ar[o>>2]=4324,Sf(a),ar[a>>2]=4340,ar[(n=t+36|0)>>2]=0,ar[4+n>>2]=0,ar[8+n>>2]=0,ar[12+n>>2]=0,ar[t+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(a,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),l=1+(0|ar[r>>2])|0,ar[r>>2]=l,(0|(u=0|ar[e+44>>2]))!=(0|(i=0|ar[e+48>>2]))){for(b=11+f|0,s=4+f|0,l=1,e=u;;){if(!l){if(0<(0|ar[r>>2]))for(l=0;We(t,18862,2),(0|(l=l+1|0))<(0|ar[r>>2]););We(t,30086,1)}if(u=0|ar[e>>2],ns[127&ar[8+(0|ar[u>>2])>>2]](f,u,r),We(t,(l=(u=0|tr[b>>0])<<24>>24<0)?0|ar[f>>2]:f,l?0|ar[s>>2]:255&u),(0|tr[b>>0])<0&&vu(0|ar[f>>2]),(0|(e=e+8|0))==(0|i))break;l=0}l=0|ar[r>>2]}if(ar[r>>2]=(0|l)<1?0:l+-1|0,Ie(A,a),ar[t>>2]=4304,ar[o>>2]=4324,ar[a>>2]=4340,0<=(0|tr[11+n>>0]))return kf(a),Gf(),bf(o),void(ur=c);vu(0|ar[n>>2]),kf(a),Gf(),bf(o),ur=c}function te(A){var e,r=0,i=0,f=0,n=0,t=0,o=0,a=0;if(ar[(A|=0)>>2]=5704,0|(r=0|ar[(e=A+56|0)>>2])){if((0|(i=0|ar[(a=A+60|0)>>2]))!=(0|r)){for(;o=i+-64|0,ar[a>>2]=o,0|(f=0|ar[i+-12>>2])&&((0|(t=0|ar[(n=i+-8|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(~((t+-4-f|0)>>>2)<<2)),vu(f)),ar[o>>2]=4264,0|(f=0|ar[i+-40>>2])&&((0|ar[(i=i+-36|0)>>2])!=(0|f)&&(ar[i>>2]=f),vu(f)),(0|(i=0|ar[a>>2]))!=(0|r););r=0|ar[e>>2]}vu(r)}if(ar[A>>2]=4404,0|(r=0|ar[(n=A+44|0)>>2])){if((0|(i=0|ar[(t=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[t>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[t>>2]):f))!=(0|r););r=0|ar[n>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))}function oe(A,e){e|=0;var r=0,i=0,f=0,n=0,t=0,o=0;ar[(A|=0)>>2]=4264,f=e+8|0,ar[(i=A+8|0)>>2]=ar[f>>2],ar[i+4>>2]=ar[f+4>>2],ar[i+8>>2]=ar[f+8>>2],ar[i+12>>2]=ar[f+12>>2],f=e+24|0,ar[(i=A+24|0)>>2]=0,ar[(o=A+28|0)>>2]=0,(ar[A+32>>2]=0)|(r=(0|ar[(n=e+28|0)>>2])-(0|ar[f>>2])|0)&&((0|r)<0&&zl(),t=0|hu(r),ar[o>>2]=t,ar[i>>2]=t,ar[A+32>>2]=t+r,i=0|ar[f>>2],0<(0|(r=(0|ar[n>>2])-i|0))&&(hb(0|t,0|i,0|r),ar[o>>2]=t+r)),t=0|ar[(n=e+36|0)+4>>2],ar[(o=A+36|0)>>2]=ar[n>>2],ar[o+4>>2]=t,ar[A+48>>2]=ar[e+48>>2],Ge(A+52|0,e+52|0)}function ae(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0;i=(A|=0)+4|0,f=0|ar[A>>2],67108863<(n=(t=(0|ar[i>>2])-f>>6)+1|0)>>>0&&zl(),f=(c=(0|ar[(l=A+8|0)>>2])-f|0)>>5,f=c>>6>>>0<33554431?f>>>0<n>>>0?n:f:67108863;do{if(f){if(!(67108863<f>>>0)){n=0|hu(f<<6);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else n=0}while(0);if(r=n+(f<<6)|0,oe(t=o=n+(t<<6)|0,e),a=o+64|0,e=0|ar[A>>2],(0|(f=0|ar[i>>2]))==(0|e))f=t,n=c=e;else{for(n=o;oe(n+-64|0,f=f+-64|0),t=n=t+-64|0,(0|f)!=(0|e););f=t,c=0|ar[A>>2],n=0|ar[i>>2]}if(ar[A>>2]=f,ar[i>>2]=a,ar[l>>2]=r,(0|n)!=(0|(a=c)))for(o=n;o=(e=o)+-64|0,0|(f=0|ar[e+-12>>2])&&((0|(t=0|ar[(n=e+-8|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(~((t+-4-f|0)>>>2)<<2)),vu(f)),ar[o>>2]=4264,0|(n=0|ar[e+-40>>2])&&((0|ar[(f=e+-36|0)>>2])!=(0|n)&&(ar[f>>2]=n),vu(n)),(0|o)!=(0|a););c&&vu(c)}function Ge(A,e){e|=0;var r,i,f,n,t=0;ar[(A|=0)>>2]=0,ar[(n=A+4|0)>>2]=0,(r=(t=((ar[A+8>>2]=0)|ar[(f=e+4|0)>>2])-(0|ar[e>>2])|0)>>2)&&(1073741823<r>>>0&&zl(),i=0|hu(t),ar[n>>2]=i,ar[A>>2]=i,ar[A+8>>2]=i+(r<<2),A=0|ar[e>>2],(0|(t=(0|ar[f>>2])-A|0))<=0||(hb(0|i,0|A,0|t),ar[n>>2]=i+(t>>>2<<2)))}function ce(A){var e,r=0,i=0,f=0,n=0,t=0,o=0,a=0,c=0;if(ar[(A|=0)>>2]=5524,0|(r=0|ar[(e=A+92|0)>>2])){if((0|(i=0|ar[(c=A+96|0)>>2]))!=(0|r)){for(f=i;;){if(i=f+-16|0,ar[c>>2]=i,o=0|ar[(a=f+-12|0)>>2]){if((0|(i=0|ar[(t=f+-8|0)>>2]))==(0|o))i=o;else{for(;f=i+-12|0,ar[t>>2]=f,(0|(i=(n=0|ar[f>>2])?((0|ar[(i=i+-8|0)>>2])!=(0|n)&&(ar[i>>2]=n),vu(n),0|ar[t>>2]):f))!=(0|o););i=0|ar[a>>2]}vu(i),i=0|ar[c>>2]}if((0|i)==(0|r))break;f=i}r=0|ar[e>>2]}vu(r)}if(ar[A>>2]=4404,0|(r=0|ar[(n=A+44|0)>>2])){if((0|(i=0|ar[(t=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[t>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[t>>2]):f))!=(0|r););r=0|ar[n>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))}function le(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;r=(A|=0)+4|0,i=0|ar[A>>2],268435455<(f=(o=(0|ar[r>>2])-i>>4)+1|0)>>>0&&zl(),i=(c=(0|ar[(l=A+8|0)>>2])-i|0)>>3,i=c>>4>>>0<134217727?i>>>0<f>>>0?f:i:268435455;do{if(i){if(!(268435455<i>>>0)){t=0|hu(i<<4);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else t=0}while(0);if(a=t+(i<<4)|0,or[(n=f=t+(o<<4)|0)>>1]=0|or[e>>1],i=e+4|0,ar[t+(o<<4)+12>>2]=0,ar[t+(o<<4)+4>>2]=ar[i>>2],c=e+8|0,ar[t+(o<<4)+8>>2]=ar[c>>2],e=e+12|0,ar[t+(o<<4)+12>>2]=ar[e>>2],ar[e>>2]=0,ar[c>>2]=0,e=f+16|(ar[i>>2]=0),t=0|ar[A>>2],(0|(i=0|ar[r>>2]))==(0|t))i=n,f=c=t;else{for(;i=(u=i)+-16|0,or[f+-16>>1]=0|or[i>>1],c=u+-12|0,ar[(o=f+-12|0)>>2]=0,ar[(b=f+-8|0)>>2]=0,ar[f+-4>>2]=0,ar[o>>2]=ar[c>>2],o=u+-8|0,ar[b>>2]=ar[o>>2],u=u+-4|0,ar[f+-4>>2]=ar[u>>2],ar[u>>2]=0,ar[o>>2]=0,n=f=n+-16|(ar[c>>2]=0),(0|i)!=(0|t););i=n,c=0|ar[A>>2],f=0|ar[r>>2]}if(ar[A>>2]=i,ar[r>>2]=e,ar[l>>2]=a,(0|f)!=(0|(A=c))){a=f;do{if(0|(i=0|ar[(e=a+-12|0)>>2])){if((0|(f=0|ar[(o=a+-8|0)>>2]))!=(0|i)){for(;n=f+-12|0,ar[o>>2]=n,(0|(f=(t=0|ar[n>>2])?((0|ar[(f=f+-8|0)>>2])!=(0|t)&&(ar[f>>2]=t),vu(t),0|ar[o>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}a=a+-16|0}while((0|a)!=(0|A))}c&&vu(A)}function ue(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;r=(A|=0)+4|0,i=0|ar[A>>2],357913941<(f=(o=((0|ar[r>>2])-i|0)/12|0)+1|0)>>>0&&zl(),i=(a=((0|ar[(c=A+8|0)>>2])-i|0)/12|0)<<1,i=a>>>0<178956970?i>>>0<f>>>0?f:i:357913941;do{if(i){if(!(357913941<i>>>0)){t=0|hu(12*i|0);break}Zu(c=0|X(8),44519),ar[c>>2]=17660,I(0|c,4016,428)}else t=0}while(0);if(n=f=t+(12*o|0)|0,a=t+(12*i|0)|0,ar[t+(12*o|0)+8>>2]=0,ar[f>>2]=ar[e>>2],i=e+4|0,ar[t+(12*o|0)+4>>2]=ar[i>>2],l=e+8|0,ar[t+(12*o|0)+8>>2]=ar[l>>2],ar[l>>2]=0,ar[i>>2]=0,o=f+12|(ar[e>>2]=0),t=0|ar[A>>2],(0|(i=0|ar[r>>2]))==(0|t))i=n,f=e=t;else{for(;i=(e=i)+-12|0,ar[(l=f+-12|0)>>2]=0,ar[(u=f+-8|0)>>2]=0,ar[f+-4>>2]=0,ar[l>>2]=ar[i>>2],l=e+-8|0,ar[u>>2]=ar[l>>2],e=e+-4|0,ar[f+-4>>2]=ar[e>>2],ar[e>>2]=0,ar[l>>2]=0,n=f=n+-12|(ar[i>>2]=0),(0|i)!=(0|t););i=n,e=0|ar[A>>2],f=0|ar[r>>2]}if(ar[A>>2]=i,ar[r>>2]=o,ar[c>>2]=a,(0|f)!=(0|(t=e)))for(;0|(n=0|ar[(f=(i=f)+-12|0)>>2])&&((0|ar[(i=i+-8|0)>>2])!=(0|n)&&(ar[i>>2]=n),vu(n)),(0|f)!=(0|t););e&&vu(e)}function be(A){var e,r=0,i=0,f=0,n=0,t=0,o=0,a=0;if(ar[(A|=0)>>2]=5464,0|(r=0|ar[(e=A+56|0)>>2])){if((0|(i=0|ar[(a=A+60|0)>>2]))!=(0|r)){for(;o=i+-64|0,ar[a>>2]=o,0|(f=0|ar[i+-12>>2])&&((0|(t=0|ar[(n=i+-8|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(~((t+-4-f|0)>>>2)<<2)),vu(f)),ar[o>>2]=4264,0|(f=0|ar[i+-40>>2])&&((0|ar[(i=i+-36|0)>>2])!=(0|f)&&(ar[i>>2]=f),vu(f)),(0|(i=0|ar[a>>2]))!=(0|r););r=0|ar[e>>2]}vu(r)}if(ar[A>>2]=4404,0|(r=0|ar[(n=A+44|0)>>2])){if((0|(i=0|ar[(t=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[t>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[t>>2]):f))!=(0|r););r=0|ar[n>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))}function se(A,e){e|=0;var r=0,i=0,f=0,n=0,t=0,o=0;ar[(A|=0)>>2]=4264,f=e+8|0,ar[(i=A+8|0)>>2]=ar[f>>2],ar[i+4>>2]=ar[f+4>>2],ar[i+8>>2]=ar[f+8>>2],ar[i+12>>2]=ar[f+12>>2],f=e+24|0,ar[(i=A+24|0)>>2]=0,ar[(o=A+28|0)>>2]=0,(ar[A+32>>2]=0)|(r=(0|ar[(n=e+28|0)>>2])-(0|ar[f>>2])|0)&&((0|r)<0&&zl(),t=0|hu(r),ar[o>>2]=t,ar[i>>2]=t,ar[A+32>>2]=t+r,i=0|ar[f>>2],0<(0|(r=(0|ar[n>>2])-i|0))&&(hb(0|t,0|i,0|r),ar[o>>2]=t+r)),t=0|ar[(n=e+36|0)+4>>2],ar[(o=A+36|0)>>2]=ar[n>>2],ar[o+4>>2]=t,ar[A+48>>2]=ar[e+48>>2],Ge(A+52|0,e+52|0)}function de(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0;i=(A|=0)+4|0,f=0|ar[A>>2],67108863<(n=(t=(0|ar[i>>2])-f>>6)+1|0)>>>0&&zl(),f=(c=(0|ar[(l=A+8|0)>>2])-f|0)>>5,f=c>>6>>>0<33554431?f>>>0<n>>>0?n:f:67108863;do{if(f){if(!(67108863<f>>>0)){n=0|hu(f<<6);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else n=0}while(0);if(r=n+(f<<6)|0,se(t=o=n+(t<<6)|0,e),a=o+64|0,e=0|ar[A>>2],(0|(f=0|ar[i>>2]))==(0|e))f=t,n=c=e;else{for(n=o;se(n+-64|0,f=f+-64|0),t=n=t+-64|0,(0|f)!=(0|e););f=t,c=0|ar[A>>2],n=0|ar[i>>2]}if(ar[A>>2]=f,ar[i>>2]=a,ar[l>>2]=r,(0|n)!=(0|(a=c)))for(o=n;o=(e=o)+-64|0,0|(f=0|ar[e+-12>>2])&&((0|(t=0|ar[(n=e+-8|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(~((t+-4-f|0)>>>2)<<2)),vu(f)),ar[o>>2]=4264,0|(n=0|ar[e+-40>>2])&&((0|ar[(f=e+-36|0)>>2])!=(0|n)&&(ar[f>>2]=n),vu(n)),(0|o)!=(0|a););c&&vu(c)}function ke(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;t=0|ar[(b=(A|=0)+4|0)>>2],r=o=0|ar[A>>2],536870911<(f=(l=t-o>>3)+1|0)>>>0&&zl(),a=(u=(0|ar[(i=A+8|0)>>2])-o|0)>>2,a=u>>3>>>0<268435455?a>>>0<f>>>0?f:a:536870911;do{if(a){if(!(536870911<a>>>0)){c=0|hu(a<<3);break}Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)}else c=0}while(0);if(u=c+(a<<3)|0,ar[(f=n=c+(l<<3)|0)>>2]=ar[e>>2],a=e+4|0,ar[c+(l<<3)+4>>2]=ar[a>>2],ar[e>>2]=0,a=n+8|(ar[a>>2]=0),(0|t)!=(0|r)){for(;t=(l=t)+-8|0,ar[n+-8>>2]=ar[t>>2],l=l+-4|0,ar[n+-4>>2]=ar[l>>2],ar[t>>2]=0,f=n=f+-8|(ar[l>>2]=0),(0|t)!=(0|r););o=0|ar[A>>2]}if(ar[A>>2]=f,f=0|ar[b>>2],ar[b>>2]=a,ar[i>>2]=u,(0|f)!=(0|(t=o)))for(;n=0|ar[f+-4>>2],f=f+-8|0,0|n&&du(n),(0|f)!=(0|t););o&&vu(o)}function he(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;l=0|ar[(b=(A|=0)+4|0)>>2],r=f=0|ar[A>>2],89478485<(n=(c=((t=l)-f|0)/48|0)+1|0)>>>0&&zl(),o=(u=((0|ar[(i=A+8|0)>>2])-f|0)/48|0)<<1,o=u>>>0<44739242?o>>>0<n>>>0?n:o:89478485;do{if(o){if(!(89478485<o>>>0)){a=0|hu(48*o|0);break}Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)}else a=0}while(0);if(u=a+(48*o|0)|0,ar[(f=n=a+(48*c|0)|0)>>2]=ar[e>>2],o=e+4|0,ar[a+(48*c|0)+4>>2]=ar[o>>2],s=e+8|0,ar[a+(48*c|0)+8>>2]=ar[s>>2],ar[o>>2]=0,o=e+12|(ar[s>>2]=0),ar[(s=a+(48*c|0)+12|0)>>2]=ar[o>>2],ar[s+4>>2]=ar[o+4>>2],ar[s+8>>2]=ar[o+8>>2],ar[s+12>>2]=ar[o+12>>2],s=e+28|0,ar[a+(48*c|0)+28>>2]=ar[s>>2],o=e+32|0,ar[a+(48*c|0)+32>>2]=ar[o>>2],ar[s>>2]=0,a=a+(48*c|(ar[o>>2]=0))+36|0,c=e+36|0,ar[a>>2]=ar[c>>2],ar[a+4>>2]=ar[c+4>>2],ar[a+8>>2]=ar[c+8>>2],a=n+48|0,(0|t)==(0|r))o=l;else{for(;t=(l=t)+-48|0,ar[n+-48>>2]=ar[t>>2],s=l+-44|0,ar[n+-44>>2]=ar[s>>2],c=l+-40|0,ar[n+-40>>2]=ar[c>>2],ar[s>>2]=0,s=l+-36|(ar[c>>2]=0),ar[(c=n+-36|0)>>2]=ar[s>>2],ar[c+4>>2]=ar[s+4>>2],ar[c+8>>2]=ar[s+8>>2],ar[c+12>>2]=ar[s+12>>2],c=l+-20|0,ar[n+-20>>2]=ar[c>>2],s=l+-16|0,ar[n+-16>>2]=ar[s>>2],ar[c>>2]=0,l=l+-12|(ar[s>>2]=0),ar[(s=n+-12|0)>>2]=ar[l>>2],ar[s+4>>2]=ar[l+4>>2],ar[s+8>>2]=ar[l+8>>2],f=n=f+-48|0,(0|t)!=(0|r););o=0|ar[A>>2]}if(ar[A>>2]=f,n=0|ar[b>>2],ar[b>>2]=a,ar[i>>2]=u,(0|n)!=(0|(t=o)))for(;0|(f=0|ar[n+-16>>2])&&du(f),f=0|ar[n+-40>>2],n=n+-48|0,0|f&&du(f),(0|n)!=(0|t););o&&vu(o)}function we(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;r=(A|=0)+4|0,i=0|ar[A>>2],89478485<(f=(o=((0|ar[r>>2])-i|0)/48|0)+1|0)>>>0&&zl(),i=(a=((0|ar[(c=A+8|0)>>2])-i|0)/48|0)<<1,i=a>>>0<44739242?i>>>0<f>>>0?f:i:89478485;do{if(i){if(!(89478485<i>>>0)){t=0|hu(48*i|0);break}Zu(c=0|X(8),44519),ar[c>>2]=17660,I(0|c,4016,428)}else t=0}while(0);if(a=t+(48*i|0)|0,ar[(n=f=t+(48*o|0)|0)>>2]=ar[e>>2],ar[t+(48*o|0)+4>>2]=ar[e+4>>2],i=0|ar[e+8>>2],0|(ar[t+(48*o|0)+8>>2]=i)&&bu(i),l=e+12|0,ar[(i=t+(48*o|0)+12|0)>>2]=ar[l>>2],ar[i+4>>2]=ar[l+4>>2],ar[i+8>>2]=ar[l+8>>2],ar[i+12>>2]=ar[l+12>>2],ar[t+(48*o|0)+28>>2]=ar[e+28>>2],i=0|ar[e+32>>2],0|(ar[t+(48*o|0)+32>>2]=i)&&bu(i),e=e+36|0,ar[(o=t+(48*o|0)+36|0)>>2]=ar[e>>2],ar[o+4>>2]=ar[e+4>>2],ar[o+8>>2]=ar[e+8>>2],o=f+48|0,e=0|ar[A>>2],(0|(i=0|ar[r>>2]))==(0|e))i=n,f=t=e;else{for(;i=(t=i)+-48|0,ar[f+-48>>2]=ar[i>>2],l=t+-44|0,ar[f+-44>>2]=ar[l>>2],u=t+-40|0,ar[f+-40>>2]=ar[u>>2],ar[l>>2]=0,l=t+-36|(ar[u>>2]=0),ar[(u=f+-36|0)>>2]=ar[l>>2],ar[u+4>>2]=ar[l+4>>2],ar[u+8>>2]=ar[l+8>>2],ar[u+12>>2]=ar[l+12>>2],u=t+-20|0,ar[f+-20>>2]=ar[u>>2],l=t+-16|0,ar[f+-16>>2]=ar[l>>2],ar[u>>2]=0,t=t+-12|(ar[l>>2]=0),ar[(l=f+-12|0)>>2]=ar[t>>2],ar[l+4>>2]=ar[t+4>>2],ar[l+8>>2]=ar[t+8>>2],n=f=n+-48|0,(0|i)!=(0|e););i=n,t=0|ar[A>>2],f=0|ar[r>>2]}if(ar[A>>2]=i,ar[r>>2]=o,ar[c>>2]=a,(0|f)!=(0|(n=t)))for(;0|(i=0|ar[f+-16>>2])&&du(i),i=0|ar[f+-40>>2],f=f+-48|0,0|i&&du(i),(0|f)!=(0|n););t&&vu(t)}function ve(A,e){var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;if((e|=0)>>>0<=(t=0|ar[(i=(A|=0)+8|0)>>2])-(f=n=0|ar[(u=A+4|0)>>2])>>3>>>0)return vb(0|n,0,e<<3|0),void(ar[u>>2]=f+(e<<3));r=l=0|ar[A>>2],536870911<(n=(a=n-l>>3)+e|0)>>>0&&zl(),o=(c=t-l|0)>>2,o=c>>3>>>0<268435455?o>>>0<n>>>0?n:o:536870911;do{if(o){if(!(536870911<o>>>0)){c=0|hu(o<<3);break}Zu(u=0|X(8),44519),ar[u>>2]=17660,I(0|u,4016,428)}else c=0}while(0);if(n=c+(a<<3)|0,c=c+(o<<3)|0,vb(0|(t=n),0,e<<3|0),a=n+(e<<3)|0,(0|f)==(0|r))o=l;else{for(;f=(l=f)+-8|0,ar[n+-8>>2]=ar[f>>2],l=l+-4|0,ar[n+-4>>2]=ar[l>>2],ar[f>>2]=0,t=n=t+-8|(ar[l>>2]=0),(0|f)!=(0|r););o=0|ar[A>>2],f=0|ar[u>>2]}if(ar[A>>2]=t,ar[u>>2]=a,ar[i>>2]=c,(0|f)!=(0|(t=o)))for(;n=0|ar[f+-4>>2],f=f+-8|0,0|n&&du(n),(0|f)!=(0|t););o&&vu(o)}function me(A,e,r,i,f,n){A|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y=0,B=0,E=0,X=0;ur=(p=ur)+128|0,u=p+108|0,b=p+115|0,Z=p+96|0,s=p+112|0,g=p+56|0,k=p+32|0,h=p+8|0,d=p,X=0|ar[(e|=0)>>2],y=0|ar[X+24>>2],B=0|ar[X+28>>2];do{if(0|Eo(X,6)){if((0|Xo(0|ar[e>>2],6))==(0|y)&&(0|Wo(0|ar[e>>2],6))==(0|B))break;return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=p)}}while(0);if(0==(0|r)&3<i>>>0)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=p);if(X=0|ar[e>>2],a=0|ar[X+32>>2],c=0|ar[X+36>>2],E=0|Eo(X,6)?1:0|tl(0|ar[36+(0|ar[e>>2])>>2]),y=0|ar[e>>2],l=0|ar[y+40>>2],(X=0==(0|(m=0|ar[y+44>>2])))||(bu(m),y=0|ar[e>>2]),Io(Z,y),0|ar[8+Z>>2]||sr(34377,32248,3067,32272),t=255&(0|Vo(0|ar[e>>2],0|ar[16+(0|ar[Z>>2])>>2])),tr[s>>0]=0|tr[b>>0],tr[1+s>>0]=0|tr[1+b>>0],tr[2+s>>0]=0|tr[2+b>>0],X||bu(m),o=0|ar[f>>2],(v=0==(0|(w=0|ar[f+4>>2])))||bu(w),X||du(m),B=1<(0|function(A){var e=0;switch(0|(A|=0)){case 3:case 2:case 1:case 0:case 99:e=1;break;case 14:case 12:case 10:e=3;break;case 15:case 13:case 11:e=4;break;default:sr(55739,25597,118,25653)}return 0|e}(i))?0|tl(i):E,y=11==(1|i)?8:0==(0|n)?t:n,ar[g>>2]=0,ar[(n=4+g|0)>>2]=0,ar[8+g>>2]=0,ar[12+g>>2]=99,ar[16+g>>2]=99,tr[20+g>>0]=0,ar[24+g>>2]=8,ar[28+g>>2]=0,ar[(f=32+g|0)>>2]=0,ar[36+g>>2]=3,ar[k>>2]=a,ar[4+k>>2]=c,tr[8+k>>0]=1&E,tr[(E=9+k|0)>>0]=0|tr[b>>0],tr[E+1>>0]=0|tr[1+b>>0],tr[E+2>>0]=0|tr[2+b>>0],ar[12+k>>2]=t,ar[16+k>>2]=l,ar[20+k>>2]=m,X||bu(m),ar[h>>2]=r,ar[4+h>>2]=i,tr[8+h>>0]=1&B,tr[(r=9+h|0)>>0]=0|tr[s>>0],tr[r+1>>0]=0|tr[1+s>>0],tr[r+2>>0]=0|tr[2+s>>0],ar[12+h>>2]=12==(-4&i|0)&(0|y)<9?10:y,ar[16+h>>2]=o,ar[20+h>>2]=w,v||bu(w),ar[d>>2]=3,ar[u>>2]=ar[d>>2],y=0|function(A,e,r,i){e|=0,r|=0,i|=0;var f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0,fA=0,nA=0,tA=0,oA=0,aA=0,cA=0,lA=0,uA=0,bA=0,sA=0,dA=0,kA=0,hA=0,wA=0,vA=0,mA=0;if(ur=(v=ur)+256|0,o=v+96|0,mA=v+232|0,w=v+168|0,h=v+156|0,R=v+80|0,s=v+144|0,d=v+208|0,k=v+184|0,b=v+180|0,c=(l=v)+244|0,u=v+64|0,a=v+48|0,Z=0|ar[(A|=0)>>2],(0|(m=0|ar[(wA=A+4|0)>>2]))!=(0|Z))for(;g=m+-8|0,ar[wA>>2]=g,(0|(m=(m=0|ar[m+-4>>2])?(du(m),0|ar[wA>>2]):g))!=(0|Z););if(ar[(kA=A+12|0)>>2]=ar[r>>2],ar[kA+4>>2]=ar[r+4>>2],ar[kA+8>>2]=ar[r+8>>2],ar[kA+12>>2]=ar[r+12>>2],m=0|ar[(kA=r+16|0)>>2],0|(g=0|ar[(t=r+20|0)>>2])&&bu(g),ar[A+28>>2]=m,m=0|ar[(vA=A+32|0)>>2],ar[vA>>2]=g,0|m&&du(m),ar[A+36>>2]=ar[i>>2],(0|ar[e>>2])==(0|ar[r>>2])&&(0|ar[e+4>>2])==(0|ar[r+4>>2])&&(0|tr[e+8>>0])==(0|tr[r+8>>0])&&(0|ar[e+12>>2])==(0|ar[r+12>>2]))return ur=v,0|(mA=1);ar[mA>>2]=0,ar[(vA=mA+4|0)>>2]=0,y=(ar[mA+8>>2]=0)|hu(16),ar[y+4>>2]=0,ar[y+8>>2]=0,ar[y>>2]=6932,ar[(m=y+12|0)>>2]=6492,ar[o>>2]=m,ar[(m=4+o|0)>>2]=y,y=mA+8|0,ke(mA,o),0|(m=0|ar[m>>2])&&du(m),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=6960,ar[(m=g+12|0)>>2]=6988,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7012,ar[(m=g+12|0)>>2]=7040,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7064,ar[(m=g+12|0)>>2]=6516,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7092,ar[(m=g+12|0)>>2]=6540,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7120,ar[(m=g+12|0)>>2]=6908,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7148,ar[(m=g+12|0)>>2]=6564,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7176,ar[(m=g+12|0)>>2]=6588,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7204,ar[(m=g+12|0)>>2]=6660,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7232,ar[(m=g+12|0)>>2]=6684,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7260,ar[(m=g+12|0)>>2]=6636,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7288,ar[(m=g+12|0)>>2]=6612,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7316,ar[(m=g+12|0)>>2]=6708,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7344,ar[(m=g+12|0)>>2]=6732,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,(p=0|ar[vA>>2])>>>0>=(0|ar[y>>2])>>>0?(ke(mA,o),0|(m=0|ar[Z>>2])&&du(m)):(ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8),g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7372,ar[(m=g+12|0)>>2]=7400,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,p=0|ar[vA>>2];do{if(p>>>0<(0|ar[y>>2])>>>0)ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8;else{if(ke(mA,o),!(m=0|ar[Z>>2]))break;du(m)}}while(0);g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7424,ar[(m=g+12|0)>>2]=7452,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,p=0|ar[vA>>2];do{if(p>>>0<(0|ar[y>>2])>>>0)ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8;else{if(ke(mA,o),!(m=0|ar[Z>>2]))break;du(m)}}while(0);g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7476,ar[(m=g+12|0)>>2]=6756,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,p=0|ar[vA>>2];do{if(p>>>0<(0|ar[y>>2])>>>0)ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8;else{if(ke(mA,o),!(m=0|ar[Z>>2]))break;du(m)}}while(0);g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7504,ar[(m=g+12|0)>>2]=6780,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,p=0|ar[vA>>2];do{if(p>>>0<(0|ar[y>>2])>>>0)ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8;else{if(ke(mA,o),!(m=0|ar[Z>>2]))break;du(m)}}while(0);g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7532,ar[(m=g+12|0)>>2]=6832,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,p=0|ar[vA>>2];do{if(p>>>0<(0|ar[y>>2])>>>0)ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8;else{if(ke(mA,o),!(m=0|ar[Z>>2]))break;du(m)}}while(0);g=0|hu(16),ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g>>2]=7560,ar[(m=g+12|0)>>2]=6884,ar[o>>2]=m,ar[(Z=4+o|0)>>2]=g,p=0|ar[vA>>2];do{if(p>>>0<(0|ar[y>>2])>>>0)ar[p>>2]=m,ar[p+4>>2]=g,ar[o>>2]=0,ar[Z>>2]=0,ar[vA>>2]=p+8;else{if(ke(mA,o),!(m=0|ar[Z>>2]))break;du(m)}}while(0);ar[w>>2]=0,ar[(n=4+w|0)>>2]=0,ar[8+w>>2]=0,ar[h>>2]=0,ar[(f=4+h|0)>>2]=0,ar[8+h>>2]=0,ar[R>>2]=ar[e>>2],ar[R+4>>2]=ar[e+4>>2],ar[R+8>>2]=ar[e+8>>2],ar[R+12>>2]=ar[e+12>>2],p=0|ar[e+16>>2],(I=0==(0|(W=0|ar[e+20>>2])))||bu(W),B=4+o|0,X=8+o|0,E=12+o|0,ar[(e=28+o|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[o>>2]=-1,ar[B>>2]=0,ar[X>>2]=0,ar[E>>2]=ar[R>>2],ar[E+4>>2]=ar[R+4>>2],ar[E+8>>2]=ar[R+8>>2],ar[E+12>>2]=ar[R+12>>2],e=28+o|0,g=W;do{if(I)dA=32+o|0,ar[e>>2]=p,ar[dA>>2]=g,y=e,g=p=dA;else{if(bu(W),m=0|ar[(Z=32+o|0)>>2],ar[e>>2]=p,ar[Z>>2]=g,!m){y=e,g=p=Z;break}du(m),y=e,g=p=Z}}while(0);gA[36+o>>2]=0,gA[40+o>>2]=0,m=(gA[44+o>>2]=0)|ar[f>>2],dA=8+h|0;do{if(m>>>0<(0|ar[dA>>2])>>>0)ar[m>>2]=ar[o>>2],ar[m+4>>2]=ar[B>>2],ar[m+8>>2]=ar[X>>2],ar[B>>2]=0,ar[X>>2]=0,ar[(sA=m+12|0)>>2]=ar[E>>2],ar[sA+4>>2]=ar[E+4>>2],ar[sA+8>>2]=ar[E+8>>2],ar[sA+12>>2]=ar[E+12>>2],ar[m+28>>2]=ar[y>>2],ar[m+32>>2]=ar[g>>2],ar[e>>2]=0,bA=36+o|(ar[p>>2]=0),ar[(sA=m+36|0)>>2]=ar[bA>>2],ar[sA+4>>2]=ar[bA+4>>2],ar[sA+8>>2]=ar[bA+8>>2],ar[f>>2]=m+48;else{if(he(h,o),!(m=0|ar[p>>2]))break;du(m)}}while(0);0|(m=0|ar[X>>2])&&du(m),I||du(W),m=0|ar[h>>2],g=0|ar[f>>2];A:do{if((0|m)==(0|g))p=0;else{P=8+w|0,L=r+4|0,K=r+8|0,q=r+12|0,$=16+d|0,AA=20+d|0,eA=16+k|0,rA=20+k|0,iA=4+s|0,fA=l+4|0,nA=l+8|0,tA=l+12|0,oA=l+16|0,aA=l+20|0,cA=l+24|0,uA=lA=l+28|0,bA=l+32|0,H=l+40|0,x=l+44|0,sA=j=l+36|0,C=0;e:for(;;){if((0|g)==(0|m))g=-1;else for(p=(g-m|0)/48|0,g=-1,Z=0;C=(z=0==(0|Z)|(F=.30000001192092896*gA[m+(48*Z|0)+36>>2]+.6000000238418579*gA[m+(48*Z|0)+40>>2]+.10000000149011612*gA[m+(48*Z|0)+44>>2])<C)?F:C,g=z?Z:g,(Z=Z+1|0)>>>0<p>>>0;);for(Z=m+(48*g|0)|0,(0|(p=0|ar[n>>2]))==(0|ar[P>>2])?we(w,Z):(ar[p>>2]=ar[Z>>2],ar[p+4>>2]=ar[m+(48*g|0)+4>>2],Z=0|ar[m+(48*g|0)+8>>2],0|(ar[p+8>>2]=Z)&&bu(Z),z=m+(48*g|0)+12|0,ar[(Z=p+12|0)>>2]=ar[z>>2],ar[Z+4>>2]=ar[z+4>>2],ar[Z+8>>2]=ar[z+8>>2],ar[Z+12>>2]=ar[z+12>>2],ar[p+28>>2]=ar[m+(48*g|0)+28>>2],Z=0|ar[m+(48*g|0)+32>>2],0|(ar[p+32>>2]=Z)&&bu(Z),O=m+(48*g|0)+36|0,ar[(z=p+36|0)>>2]=ar[O>>2],ar[z+4>>2]=ar[O+4>>2],ar[z+8>>2]=ar[O+8>>2],ar[n>>2]=48+(0|ar[n>>2])),p=0|ar[f>>2],y=0|ar[h>>2],ar[y+(48*g|0)>>2]=ar[p+-48>>2],m=0|ar[p+-44>>2],0|(Z=0|ar[p+-40>>2])&&bu(Z),ar[y+(48*g|0)+4>>2]=m,m=0|ar[(z=y+(48*g|0)+8|0)>>2],ar[z>>2]=Z,0|m&&du(m),Z=p+-36|0,ar[(m=y+(48*g|0)+12|0)>>2]=ar[Z>>2],ar[m+4>>2]=ar[Z+4>>2],ar[m+8>>2]=ar[Z+8>>2],ar[m+12>>2]=ar[Z+12>>2],m=0|ar[p+-20>>2],0|(Z=0|ar[p+-16>>2])&&bu(Z),ar[y+(48*g|0)+28>>2]=m,m=0|ar[(z=y+(48*g|0)+32|0)>>2],ar[z>>2]=Z,0|m&&du(m),m=y+(48*g|0)+36|0,g=p+-12|0,ar[m>>2]=ar[g>>2],ar[m+4>>2]=ar[g+4>>2],ar[m+8>>2]=ar[g+8>>2],g=(m=0|ar[f>>2])+-48|0;ar[f>>2]=m+-48,0|(Z=0|ar[m+-16>>2])&&du(Z),0|(m=0|ar[m+-40>>2])&&du(m),(0|(m=0|ar[f>>2]))!=(0|g););Z=0|ar[n>>2];do{if((0|ar[Z+-36>>2])==(0|ar[r>>2])){if((0|ar[Z+-32>>2])!=(0|ar[L>>2]))break;if((0|tr[Z+-28>>0])!=(0|tr[K>>0]))break;if((0|ar[Z+-24>>2])==(0|ar[q>>2]))break e}}while(0);if((0|(m=0|ar[mA>>2]))!=(0|(z=0|ar[vA>>2]))){for(;;){if(p=0|ar[m>>2],y=0|ar[8+(0|ar[p>>2])>>2],g=Z+-36|0,ar[d>>2]=ar[g>>2],ar[4+d>>2]=ar[g+4>>2],ar[8+d>>2]=ar[g+8>>2],ar[12+d>>2]=ar[g+12>>2],ar[$>>2]=ar[Z+-20>>2],g=0|ar[Z+-16>>2],0|(ar[AA>>2]=g)&&bu(g),ar[k>>2]=ar[r>>2],ar[4+k>>2]=ar[r+4>>2],ar[8+k>>2]=ar[r+8>>2],ar[12+k>>2]=ar[r+12>>2],ar[eA>>2]=ar[kA>>2],g=0|ar[t>>2],0|(ar[rA>>2]=g)&&bu(g),ar[b>>2]=ar[i>>2],ar[o>>2]=ar[b>>2],os[63&y](s,p,d,k,o),0|(g=0|ar[rA>>2])&&du(g),0|(g=0|ar[AA>>2])&&du(g),(0|(g=0|ar[s>>2]))!=(0|(S=0|ar[iA>>2]))){O=m+4|0;do{if((0|(y=p=0|ar[w>>2]))!=(0|(U=W=0|ar[n>>2]))){e=0|ar[g>>2],B=g+4|0,E=g+8|0,X=g+12|0,Z=0;r:do{do{if((0|ar[p+12>>2])==(0|e)){if((0|ar[p+16>>2])!=(0|ar[B>>2]))break;if((0|tr[p+20>>0])!=(0|tr[E>>0]))break;if(Z|=T=(0|ar[p+24>>2])==(0|ar[X>>2]),T)break r}}while(0);p=p+48|0}while((0|p)!=(0|W));Z||(hA=182)}else hA=182;r:do{if(182==(0|hA)){Z=(hA=0)|ar[h>>2],p=0|ar[f>>2];i:do{if((0|Z)!=(0|p)){T=0|ar[g>>2],e=g+4|0,B=g+8|0,E=g+12|0;f:for(;;){N=Z+12|0;do{if((0|ar[N>>2])==(0|T)){if((0|(Y=0|ar[(_=Z+16|0)>>2]))!=(0|ar[e>>2]))break;if((D=0|tr[(Q=Z+20|0)>>0])<<24>>24!=(0|tr[B>>0]))break;if((0|(M=0|ar[(J=Z+24|0)>>2]))==(0|ar[E>>2]))break f}}while(0);if((0|(Z=Z+48|0))==(0|p))break i}if(V=+gA[(p=g+24|0)>>2]+ +gA[W+-12>>2],F=+gA[g+28>>2]+ +gA[W+-8>>2],G=+gA[g+32>>2]+ +gA[W+-4>>2],X=Z+40|0,W=Z+44|0,!(.30000001192092896*gA[(E=Z+36|0)>>2]+.6000000238418579*gA[X>>2]+.10000000149011612*gA[W>>2]>.30000001192092896*V+.6000000238418579*F+.10000000149011612*G))break r;B=g+9|0,tr[c>>0]=0|tr[B>>0],tr[1+c>>0]=0|tr[B+1>>0],tr[2+c>>0]=0|tr[B+2>>0],B=0|ar[g+16>>2],(R=0==(0|(I=0|ar[g+20>>2])))||bu(I),ar[u>>2]=ar[p>>2],ar[4+u>>2]=ar[p+4>>2],ar[8+u>>2]=ar[p+8>>2],ar[l>>2]=0,ar[l+4>>2]=0,p=(ar[l+8>>2]=0)|ar[m>>2],0|(e=0|ar[O>>2])&&bu(e),tr[o>>0]=0|tr[c>>0],tr[1+o>>0]=0|tr[1+c>>0],tr[2+o>>0]=0|tr[2+c>>0],R||bu(I),ar[l>>2]=ar[u>>2],ar[l+4>>2]=ar[4+u>>2],ar[l+8>>2]=ar[8+u>>2],ar[Z>>2]=((U-y|0)/48|0)-1,ar[Z+4>>2]=p,p=0|ar[(U=Z+8|0)>>2],ar[U>>2]=e,0|p&&du(p),ar[N>>2]=T,ar[_>>2]=Y,tr[Q>>0]=D,tr[(U=Z+21|0)>>0]=0|tr[o>>0],tr[U+1>>0]=0|tr[1+o>>0],tr[U+2>>0]=0|tr[2+o>>0],ar[J>>2]=M,ar[Z+28>>2]=B,p=0|ar[(U=Z+32|0)>>2],ar[U>>2]=I,0|p&&du(p),ar[E>>2]=ar[l>>2],ar[E+4>>2]=ar[l+4>>2],ar[E+8>>2]=ar[l+8>>2],R||du(I),gA[Z+36>>2]=V,gA[X>>2]=F,gA[W>>2]=G;break r}}while(0);ar[o>>2]=ar[g>>2],ar[4+o>>2]=ar[g+4>>2],ar[8+o>>2]=ar[g+8>>2],ar[12+o>>2]=ar[g+12>>2],e=0|ar[g+16>>2],(E=0==(0|(B=0|ar[g+20>>2])))?(p=W,Z=U):(bu(B),p=Z=0|ar[n>>2],y=0|ar[w>>2]),V=+gA[g+24>>2]+ +gA[p+-12>>2],F=+gA[g+28>>2]+ +gA[p+-8>>2],G=+gA[g+32>>2]+ +gA[p+-4>>2],ar[a>>2]=ar[o>>2],ar[4+a>>2]=ar[4+o>>2],ar[8+a>>2]=ar[8+o>>2],ar[12+a>>2]=ar[12+o>>2],E||bu(B),ar[fA>>2]=0,ar[nA>>2]=0,ar[tA>>2]=99,ar[oA>>2]=99,tr[aA>>0]=0,ar[cA>>2]=8,ar[lA>>2]=0,ar[lA+4>>2]=0,ar[lA+8>>2]=0,ar[lA+12>>2]=0,ar[lA+16>>2]=0,ar[l>>2]=((Z-y|0)/48|0)-1,p=0|ar[m>>2],y=Z=0|ar[O>>2];do{if(Z){if(bu(Z),Z=0|ar[nA>>2],ar[fA>>2]=p,ar[nA>>2]=y,!Z)break;du(Z)}else ar[fA>>2]=p,ar[nA>>2]=y}while(0);ar[tA>>2]=ar[a>>2],ar[tA+4>>2]=ar[4+a>>2],ar[tA+8>>2]=ar[8+a>>2],ar[tA+12>>2]=ar[12+a>>2],E||bu(B),ar[uA>>2]=e,Z=0|ar[bA>>2],ar[bA>>2]=B,0|Z&&du(Z),gA[j>>2]=V,gA[H>>2]=F,gA[x>>2]=G,Z=0|ar[f>>2];do{if(Z>>>0<(0|ar[dA>>2])>>>0)ar[Z>>2]=ar[l>>2],ar[Z+4>>2]=ar[fA>>2],ar[Z+8>>2]=ar[nA>>2],ar[fA>>2]=0,ar[nA>>2]=0,ar[(U=Z+12|0)>>2]=ar[tA>>2],ar[U+4>>2]=ar[tA+4>>2],ar[U+8>>2]=ar[tA+8>>2],ar[U+12>>2]=ar[tA+12>>2],ar[Z+28>>2]=ar[uA>>2],ar[Z+32>>2]=ar[bA>>2],ar[uA>>2]=0,ar[bA>>2]=0,ar[(U=Z+36|0)>>2]=ar[sA>>2],ar[U+4>>2]=ar[sA+4>>2],ar[U+8>>2]=ar[sA+8>>2],ar[f>>2]=Z+48;else{if(he(h,l),!(Z=0|ar[bA>>2]))break;du(Z)}}while(0);0|(Z=0|ar[nA>>2])&&du(Z),E||(du(B),du(B))}}while(0);g=g+36|0}while((0|g)!=(0|S));g=0|ar[s>>2]}if(0|g){if((0|(Z=0|ar[iA>>2]))!=(0|g)){for(;p=Z+-36|0,ar[iA>>2]=p,(0|(Z=(Z=0|ar[Z+-16>>2])?(du(Z),0|ar[iA>>2]):p))!=(0|g););g=0|ar[s>>2]}vu(g)}if((0|(m=m+8|0))==(0|z))break;Z=0|ar[n>>2]}g=0|ar[f>>2]}if((0|(m=0|ar[h>>2]))==(0|g)){p=0;break A}}if(m=((Z-(hA=0|ar[w>>2])|0)/48|0)-1|0,Z=hA,m)for(g=0;g=g+1|0,0!=(0|(m=0|ar[Z+(48*m|0)>>2])););else g=0;m=(p=0|ar[wA>>2])-(Z=0|ar[A>>2])>>3;do{if(m>>>0<g>>>0)ve(A,g-m|0);else{if(m>>>0<=g>>>0)break;if((0|p)==(0|(y=Z+(g<<3)|0)))break;for(Z=p;m=Z+-8|0,ar[wA>>2]=m,(Z=0|ar[Z+-4>>2])&&(du(Z),m=0|ar[wA>>2]),(0|m)!=(0|y);)Z=m}}while(0);if(Z=0|ar[w>>2],0|(m=(((0|ar[n>>2])-Z|0)/48|0)-1|0))for(B=g+-1|0,e=0;g=B-e|0,p=0|ar[A>>2],y=0|ar[Z+(48*m|0)+4>>2],0|(Z=0|ar[Z+(48*m|0)+8>>2])&&bu(Z),ar[p+(g<<3)>>2]=y,g=0|ar[(wA=p+(g<<3)+4|0)>>2],ar[wA>>2]=Z,0|g&&du(g),Z=0|ar[w>>2],m=0|ar[Z+(48*m|0)>>2];)e=e+1|0;p=1,m=0|ar[h>>2]}}while(0);if(0|m){if((0|(g=0|ar[f>>2]))!=(0|m)){for(;ar[f>>2]=g+-48,0|(Z=0|ar[g+-16>>2])&&du(Z),0|(g=0|ar[g+-40>>2])&&du(g),(0|(g=0|ar[f>>2]))!=(0|m););m=0|ar[h>>2]}vu(m)}if(0|(m=0|ar[w>>2])){if((0|(g=0|ar[n>>2]))!=(0|m)){for(;ar[n>>2]=g+-48,0|(Z=0|ar[g+-16>>2])&&du(Z),0|(g=0|ar[g+-40>>2])&&du(g),(0|(g=0|ar[n>>2]))!=(0|m););m=0|ar[w>>2]}vu(m)}if(0|(m=0|ar[mA>>2])){if((0|(g=0|ar[vA>>2]))!=(0|m)){for(;Z=g+-8|0,ar[vA>>2]=Z,(0|(g=(g=0|ar[g+-4>>2])?(du(g),0|ar[vA>>2]):Z))!=(0|m););m=0|ar[mA>>2]}vu(m)}return ur=v,0|(mA=p)}(g,k,h,u),v||du(w),X||du(m),y?function(A,e,r){A|=0,e|=0;var i,f,n,t,o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;ur=(c=ur)+64|0,f=c+48|0,n=c+40|0,t=c+32|0,o=c+8|0,a=c,l=0|ar[(r|=0)>>2],0|(r=u=0|ar[r+4>>2])&&(bu(u),bu(u)),u=0|ar[e>>2],i=0|ar[e+4>>2];A:do{if((0|u)!=(0|i)){for(g=4+t|0,Z=e+12|0,p=16+o|0,y=e+28|0,B=20+o|0,E=e+32|0,v=e+36|0,m=4+n|0,d=l;l=0|ar[u>>2],e=0|ar[12+(0|ar[l>>2])>>2],ar[t>>2]=d,h=r,ar[g>>2]=h,(w=0==(0|r))||bu(h),ar[o>>2]=ar[Z>>2],ar[4+o>>2]=ar[Z+4>>2],ar[8+o>>2]=ar[Z+8>>2],ar[12+o>>2]=ar[Z+12>>2],ar[p>>2]=ar[y>>2],b=0|ar[E>>2],0|(ar[B>>2]=b)&&bu(b),ar[a>>2]=ar[v>>2],ar[f>>2]=ar[a>>2],os[63&e](n,l,t,o,f),l=0|ar[n>>2],k=0|ar[m>>2],ar[n>>2]=0,ar[m>>2]=0,!w&&(du(h),0|(X=0|ar[m>>2]))&&du(X),0|(e=0|ar[B>>2])&&du(e),0|(e=0|ar[g>>2])&&du(e),s=l;){if(r=0|ar[y>>2],(b=0==(0|(e=0|ar[E>>2])))||(bu(e),bu(e)),ar[s+40>>2]=r,r=0|ar[(I=s+44|0)>>2],ar[I>>2]=e,0|r&&du(r),b||du(e),r=0|ar[(e=d)+48>>2],(b=0==(0|(e=0|ar[e+52>>2])))||(bu(e),bu(e)),ar[s+48>>2]=r,r=0|ar[(I=s+52|0)>>2],ar[I>>2]=e,0|r&&du(r),b||du(e),0|k&&bu(k),w||du(h),(0|(u=u+8|0))==(0|i)){r=k,W=34;break A}d=l,r=k}ar[A>>2]=0,ar[A+4>>2]=0,k&&du(k)}else W=34}while(0);34==(0|W)&&(ar[A>>2]=l,ar[A+4>>2]=r),ur=(r&&du(r),c)}(A,g,e):(ar[A>>2]=0,ar[A+4>>2]=0),0|(y=0|ar[f>>2])&&du(y),0|(y=0|ar[g>>2])){if((0|(B=0|ar[n>>2]))!=(0|y)){for(;f=B+-8|0,ar[n>>2]=f,(0|(B=(B=0|ar[B+-4>>2])?(du(B),0|ar[n>>2]):f))!=(0|y););y=0|ar[g>>2]}vu(y)}v||du(w),Co(Z,0|ar[4+Z>>2]),X||du(m),ur=p}function ge(A,e,r){e|=0,r|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0;switch(gA[(A|=0)>>2]=0,gA[(i=A+4|0)>>2]=0,e<<16>>16){case 13:case 12:switch(r<<16>>16){case 1:f=.30000001192092896,n=.6000000238418579,t=.15000000596046448,o=.05999999865889549,a=.6399999856948853,c=.33000001311302185,l=.3127000033855438,u=.32899999618530273;break;case 4:f=.20999999344348907,n=.7099999785423279,t=.14000000059604645,o=.07999999821186066,a=.6700000166893005,c=.33000001311302185,l=.3100000023841858,u=.3160000145435333;break;case 5:f=.28999999165534973,n=.6000000238418579,t=.15000000596046448,o=.05999999865889549,a=.6399999856948853,c=.33000001311302185,l=.3127000033855438,u=.32899999618530273;break;case 7:case 6:f=.3100000023841858,n=.5950000286102295,t=.1550000011920929,o=.07000000029802322,a=.6299999952316284,c=.3400000035762787,l=.3127000033855438,u=.32899999618530273;break;case 8:f=.24300000071525574,n=.6919999718666077,t=.14499999582767487,o=.04899999871850014,a=.6809999942779541,c=.3190000057220459,l=.3100000023841858,u=.3160000145435333;break;case 9:f=.17000000178813934,n=.796999990940094,t=.13099999725818634,o=.04600000008940697,a=.7080000042915344,c=.2919999957084656,l=.3127000033855438,u=.32899999618530273;break;case 10:a=n=1,c=o=t=f=0,l=.33333298563957214,u=.3333300054073334;break;case 11:f=.26499998569488525,n=.6899999976158142,t=.15000000596046448,o=.05999999865889549,a=.6800000071525574,c=.3199999928474426,l=.3140000104904175,u=.35100001096725464;break;case 12:f=.26499998569488525,n=.6899999976158142,t=.15000000596046448,o=.05999999865889549,a=.6800000071525574,c=.3199999928474426,l=.3127000033855438,u=.32899999618530273;break;case 22:f=.29499998688697815,n=.6050000190734863,t=.1550000011920929,o=.07699999958276749,a=.6299999952316284,c=.3400000035762787,l=.3127000033855438,u=.32899999618530273;break;default:u=l=c=a=o=t=n=f=0}h=1-(u+l),b=u*(t*(k=c*(s=1-(n+f))-(d=1-(c+a))*n)+(f*(o*d-c*(w=1-(o+t)))+a*(v=n*w-o*s))),gA[A>>2]=c*(h*(o*f-t*n)+(l*v+u*(t*s-f*w)))/b,f=o*(h*(a*n-c*f)+(l*k+u*(d*f-a*s)))/b;break;case 1:gA[A>>2]=.2125999927520752,f=.0722000002861023;break;case 4:gA[A>>2]=.30000001192092896,f=.10999999940395355;break;case 6:case 5:gA[A>>2]=.29899999499320984,f=.11400000005960464;break;case 7:gA[A>>2]=.21199999749660492,f=.08699999749660492;break;case 10:case 9:gA[A>>2]=.26269999146461487,f=.059300001710653305;break;default:return}gA[i>>2]=f}function Ze(A){tr[(A|=0)>>0]=1,gA[A+4>>2]=1.4019999504089355,gA[A+8>>2]=-.34413599967956543,gA[A+12>>2]=-.714136004447937,gA[A+16>>2]=1.7719999551773071}function pe(A,e,r){e|=0,r|=0;var i,f,n,t,o=0,a=0,c=0,l=0,u=0;ur=(n=ur)+16|0,t=n,tr[(A|=0)>>0]=0,ar[(i=A+4|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ge(t,e,r),f=+gA[t+4>>2],o=+gA[t>>2],tr[A>>0]=1,o=0!=f|0!=o?(a=1-o,gA[i>>2]=2*a,c=2*(u=1-f),a=2*o*a/(l=o+f+-1),2*f*u/l):(gA[i>>2]=1.4019999504089355,c=1.7719999551773071,a=-.714136004447937,-.34413599967956543),gA[A+8>>2]=o,gA[A+12>>2]=a,gA[A+16>>2]=c,ur=n}function ye(A,e,r){e|=0,r|=0;var i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0;for(ur=(t=ur)+16|0,f=t,i=(c=n=(A|=0)+4|(tr[A>>0]=0))+36|0;(0|(c=c+4|(ar[c>>2]=0)))<(0|i););ge(f,e,r),o=+gA[f+4>>2],a=+gA[f>>2],tr[A>>0]=1,0!=o|0!=a?(b=(u=1-(gA[n>>2]=a))-o,l=-o/u*.5,u=(b=-(gA[A+8>>2]=b))/u*.5,b=b/(s=1-o)*.5,a=-a/s*.5):(gA[n>>2]=.29899999499320984,gA[A+8>>2]=.5870000123977661,l=-.08131200075149536,u=-.41868799924850464,b=-.3312639892101288,a=-.16873499751091003,o=.11400000005960464),gA[A+12>>2]=o,gA[A+16>>2]=a,gA[A+20>>2]=b,gA[A+24>>2]=.5,gA[A+28>>2]=.5,gA[A+32>>2]=u,gA[A+36>>2]=l,ur=t}function Be(A){tr[(A|=0)>>0]=1,gA[A+4>>2]=.29899999499320984,gA[A+8>>2]=.5870000123977661,gA[A+12>>2]=.11400000005960464,gA[A+16>>2]=-.16873499751091003,gA[A+20>>2]=-.3312639892101288,gA[A+24>>2]=.5,gA[A+28>>2]=.5,gA[A+32>>2]=-.41868799924850464,gA[A+36>>2]=-.08131200075149536}function Ee(A,e){return 0|function(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0;ur=(t=ur)+16|0,n=t,a=548+(A|=0)|0,i=0==(0|ar[(r=A+580|0)>>2]),f=0|tr[a>>0];do{if(i){if(f<<24>>24==0&&0==(0|tr[A+549>>0])){c=8;break}if((0|ar[A+377216>>2])==(0|ar[A+377220>>2]))return ra(A+376148|0),ur=(e&&(ar[e>>2]=ar[A+376200>>2]),t),(c=0)|c;c=7}else c=7}while(0);7==(0|c)&&f<<24>>24==0&&(c=8);if(8==(0|c)&&!(0!=(0|tr[A+549>>0])|1^i))return ur=(e&&(ar[e>>2]=1),t),0|(c=13);if(!(0|Lo(A+376148|0,0)))return ur=(e&&(ar[e>>2]=1),t),0|(c=9);tr[n>>0]=0;do{if(0|ar[r>>2]){if(a=0|ya(a)){o=0|Uo(A,a),tr[n>>0]=1,c=23;break}sr(35126,34700,1314,35130)}else{if(0|tr[A+549>>0]&&(0|ar[A+377216>>2])==(0|ar[A+377220>>2])){if(!e){o=13;break}ar[e>>2]=1,o=13;break}o=0|Yo(A,n),c=23}}while(0);23==(0|c)&&e&&(ar[e>>2]=0==(0|o)&0!=(1&tr[n>>0])&1);return ur=t,0|(c=o)}(A|=0,e|=0)}function Ve(A,e,r,i,f,n){return 0|function(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;ur=(t=ur)+16|0,d=t,0|ar[8+(A|=0)>>2]&&sr(36856,36882,375,36896);tr[A+1>>0]=0,k=0|function(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(ur=(n=ur)+16|0,i=n,f=40+(A|=0)|0,(0|(t=0|ar[(s=A+44|0)>>2]))==(0|ar[f>>2])){for(t=0|hu(48),tr[t>>0]=0,tr[t+1>>0]=0,tr[t+2>>0]=0,ar[(a=t+32|0)>>2]=0,ar[(o=t+36|0)>>2]=0,ar[(l=t+40|0)>>2]=0,c=0|hu(64),ar[a>>2]=c,a=c+64|0,ar[l>>2]=a,l=c+64|0;((ar[c>>2]=0)|(c=c+4|0))<(0|l););ar[o>>2]=a,ar[(b=t+8|0)>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,ar[b+12>>2]=0,ar[b+16>>2]=0,ar[b+20>>2]=0,b=t}else b=0|ar[(u=t+-4|0)>>2],ar[s>>2]=u;tr[b>>0]=0,tr[b+1>>0]=0,tr[b+2>>0]=0,ar[(l=b+8|0)>>2]=0,ar[l+4>>2]=0,ar[b+16>>2]=0,ar[(l=b+24|0)>>2]=0,t=0|ar[(r=b+32|0)>>2],(0|(o=0|ar[(u=b+36|0)>>2]))!=(0|t)&&(ar[u>>2]=o+(~((o+-4-t|0)>>>2)<<2));if((0|ar[(a=b+28|0)>>2])>=(0|e))return ur=n,0|(s=b);if(0|(c=0|yc(e)))return 0|(o=0|ar[(t=b+20|0)>>2])&&(hb(0|c,0|o,0|ar[l>>2]),Bc(o)),ar[t>>2]=c,ar[a>>2]=e,ur=n,0|(s=b);ar[i>>2]=b,t=b,o=0|ar[s>>2];do{if(o-(0|ar[f>>2])>>2>>>0<16){if((0|o)==(0|ar[A+48>>2])){pa(f,i);break}ar[o>>2]=t,ar[s>>2]=4+(0|ar[s>>2]);break}Bc(0|ar[b+20>>2]),0|(t=0|ar[r>>2])&&((0|(o=0|ar[u>>2]))!=(0|t)&&(ar[u>>2]=o+(~((o+-4-t|0)>>>2)<<2)),vu(t)),vu(b)}while(0);return ur=n,(s=0)|s}(A,r);A:do{if(k){a=k+28|0;do{if((0|ar[a>>2])<(0|r)){if(0|(o=0|yc(r))){0|(l=0|ar[(c=k+20|0)>>2])&&(hb(0|o,0|l,0|ar[k+24>>2]),Bc(l)),ar[c>>2]=o,ar[a>>2]=r;break}if(ar[d>>2]=k,o=k,a=A+40|0,(l=0|ar[(c=A+44|0)>>2])-(0|ar[a>>2])>>2>>>0<16){if((0|l)==(0|ar[A+48>>2])){pa(a,d);break A}ar[l>>2]=o,ar[c>>2]=4+(0|ar[c>>2]);break A}Bc(0|ar[k+20>>2]),0|(o=0|ar[k+32>>2])&&((0|(c=0|ar[(a=k+36|0)>>2]))!=(0|o)&&(ar[a>>2]=c+(~((c+-4-o|0)>>>2)<<2)),vu(o)),vu(k);break A}o=0|ar[k+20>>2]}while(0);hb(0|o,0|e,0|r),ar[(s=k+24|0)>>2]=r,ar[(u=k+8|0)>>2]=i,ar[u+4>>2]=f,ar[k+16>>2]=n;e:do{if(2<(0|r))for(f=k+32|0,n=k+36|0,u=k+40|0,o=0|ar[k+20>>2],i=0,l=r;;){switch((a=0|tr[(e=o+2|0)>>0])<<24>>24){case 0:case 3:0==(0|tr[o>>0])&&a<<24>>24==3&0==(0|tr[(b=o+1|0)>>0])?(c=0|ar[n>>2],a=i+2+(c-(0|ar[f>>2])>>2)|0,ar[d>>2]=a,(0|c)==(0|ar[u>>2])?ga(f,d):(ar[c>>2]=a,ar[n>>2]=c+4),wb(0|e,o+3|0,-3-i+(0|ar[s>>2])|0),a=(0|ar[s>>2])-1|0,ar[s>>2]=a,c=i+1|0,o=b):(c=i,a=l);break;default:c=i+2|0,o=e,a=l}if((a+-2|0)<=(0|(i=c+1|0)))break e;o=o+1|0,l=a}}while(0);return o=0|ar[(e=A+16|0)>>2],d=(0|ar[A+20>>2])-o|0,c=0|ar[(a=A+28|0)>>2],l=0|ar[(i=A+32|0)>>2],(0|(0==(0|d)?0:(d<<8)-1|0))==(l+c|0)?(Ea(A+12|0),c=0|ar[a>>2],a=0|ar[i>>2],o=0|ar[e>>2]):a=l,ar[(0|ar[o+((d=a+c|0)>>>10<<2)>>2])+((1023&d)<<2)>>2]=k,ar[i>>2]=a+1,ar[(k=A+36|0)>>2]=(0|ar[k>>2])+(0|ar[s>>2]),ur=t,(k=0)|k}ar[d>>2]=0}while(0);return ur=t,0|(k=7)}((A|=0)+548|0,e|=0,r|=0,i|=0,f|=0,n|=0)}function Fe(A){var e=0;return(0|ar[(A|=0)+376200>>2])<=0?(e=0)|e:(e=0|ar[A+376196>>2],(e=0|ar[(0|ar[(0|ar[A+376184>>2])+(e>>>10<<2)>>2])+((1023&e)<<2)>>2])?(fa(A+376148|(tr[e+100>>0]=0)),0|e):(e=0)|e)}function Re(A){var e;0|ar[(A|=0)+376200>>2]&&(e=0|ar[A+376196>>2],fa(A+376148|(tr[100+(0|ar[(0|ar[(0|ar[A+376184>>2])+(e>>>10<<2)>>2])+((1023&e)<<2)>>2])>>0]=0)))}function Ne(A,e,r){switch(A|=0,r|=0,0|(e|=0)){case 0:return void(tr[A+512>>0]=0!=(0|r)&1);case 6:return void(tr[A+514>>0]=0!=(0|r)&1);case 7:return void(tr[A+532>>0]=0!=(0|r)&1);case 8:return void(tr[A+533>>0]=0!=(0|r)&1);default:sr(55739,34548,503,34557)}}function _e(A,e){switch(A|=0,0|(e|=0)){case 0:A=A+72|0;break;case 2:case 1:A=A+80|0;break;default:return(e=0)|e}return 0|(e=0|ar[A>>2])}function Ye(A,e){switch(A|=0,0|(e|=0)){case 0:A=A+76|0;break;case 2:case 1:A=A+84|0;break;default:return(e=0)|e}return 0|(e=0|ar[A>>2])}function Qe(A,e){switch(A|=0,0|(e|=0)){case 0:A=A+5760|0;break;case 2:case 1:A=A+5768|0;break;default:return(e=0)|e}return 0|(e=0|ar[A>>2])}function De(A){return 0|ar[(A|=0)+20>>2]}function Je(A,e,r){A|=0,r|=0;var i,f,n=0;if(3<=(e|=0)>>>0&&sr(34582,34548,639,34609),f=0|ar[A+60+(e<<2)>>2],!r)return 0|f;switch(i=0|ar[(0==(0|e)?A+40|0:A+44|0)>>2],0|e){case 0:A=A+5760|0,n=7;break;case 2:case 1:A=A+5768|0,n=7;break;default:A=0}return 7==(0|n)&&(A=(7+(0|ar[A>>2])|0)/8|0),n=0|br(A,i),ar[r>>2]=n,0|f}function Me(A){var e,r=0,i=0,f=0,n=0,t=0,o=0;if(ar[(A|=0)>>2]=7696,(0|(r=0|ar[(n=A+377216|0)>>2]))!=(0|(i=0|ar[(t=A+377220|0)>>2])))for(;(f=0|ar[i+-4>>2])&&(Te(f),vu(f),i=0|ar[t>>2],r=0|ar[n>>2]),i=i+-4|0,(0|r)!=(0|(ar[t>>2]=i)););0|r&&vu(r),function(A){var e,r,i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(n=8+(A|=0)|0,a=0|ar[(t=A+12|0)>>2],o=0|ar[n>>2],(0|a)!=(0|o))for(l=0;(c=0|ar[o+(l<<2)>>2])&&(aa(c),vu(c),o=0|ar[n>>2],a=0|ar[t>>2]),(l=l+1|0)>>>0<a-o>>2>>>0;);a=0|ar[(i=A+36|0)>>2],o=0|ar[(r=A+48|0)>>2],c=a+(o>>>10<<2)|0,b=0|ar[(f=A+40|0)>>2],o=(0|(l=b))==(0|(e=a))?(b=A+52|(u=0),0):(u=(0|ar[(b=A+52|0)>>2])+o|0,u=(0|ar[a+(u>>>10<<2)>>2])+((1023&u)<<2)|0,(0|ar[c>>2])+((1023&o)<<2)|0);A:for(;;){do{if((0|o)==(0|u))break A;o=o+4|0}while(4096!=(o-(0|ar[c>>2])|0));o=0|ar[(c=o=c+4|0)>>2]}if(ar[b>>2]=0,2<(o=l-e>>2)>>>0)for(;vu(0|ar[a>>2]),a=4+(0|ar[i>>2])|0,ar[i>>2]=a,o=(0|ar[f>>2])-a>>2,2<o>>>0;);switch(0|o){case 1:o=512,s=14;break;case 2:o=1024,s=14}14==(0|s)&&(ar[r>>2]=o);if(o=0|ar[i>>2],a=0|ar[f>>2],(0|o)!=(0|a)){for(;vu(0|ar[o>>2]),(0|(o=o+4|0))!=(0|a););o=0|ar[i>>2],(0|(a=0|ar[f>>2]))!=(0|o)&&(ar[f>>2]=a+(~((a+-4-o|0)>>>2)<<2))}0|(o=0|ar[A+32>>2])&&vu(o);0|(c=0|ar[A+20>>2])&&((0|(a=0|ar[(o=A+24|0)>>2]))!=(0|c)&&(ar[o>>2]=a+(~((a+-4-c|0)>>>2)<<2)),vu(c));if(!(o=0|ar[n>>2]))return;(0|(a=0|ar[t>>2]))!=(0|o)&&(ar[t>>2]=a+(~((a+-4-o|0)>>>2)<<2));vu(o)}(A+376148|0),function(A){var e,r,i,f,n,t=0,o=0,a=0,c=0,l=0,u=0;o=0|ar[(f=8+(A|=0)|0)>>2],t=0|ar[(i=A+20|0)>>2],a=o+(t>>>10<<2)|0,l=0|ar[(n=A+12|0)>>2],t=(0|(e=l))==(0|(r=o))?(l=A+24|(c=0),0):(c=(0|ar[(l=A+24|0)>>2])+t|0,c=(0|ar[o+(c>>>10<<2)>>2])+((1023&c)<<2)|0,(0|ar[a>>2])+((1023&t)<<2)|0);A:for(;;){do{if((0|t)==(0|c))break A;t=t+4|0}while(4096!=(t-(0|ar[a>>2])|0));t=0|ar[(a=t=a+4|0)>>2]}if(ar[l>>2]=0,2<(t=e-r>>2)>>>0)for(;vu(0|ar[o>>2]),o=4+(0|ar[f>>2])|0,ar[f>>2]=o,t=(0|ar[n>>2])-o>>2,2<t>>>0;);switch(0|t){case 1:t=512,u=13;break;case 2:t=1024,u=13}13==(0|u)&&(ar[i>>2]=t);if(t=0|ar[f>>2],o=0|ar[n>>2],(0|t)!=(0|o)){for(;vu(0|ar[t>>2]),(0|(t=t+4|0))!=(0|o););t=0|ar[f>>2],(0|(o=0|ar[n>>2]))!=(0|t)&&(ar[n>>2]=o+(~((o+-4-t|0)>>>2)<<2))}if(!(t=0|ar[A+4>>2]))return;vu(t)}(A+375396|0),Ga(A+370984|0),Ga(A+366584|0),Ga(A+362184|0),Ga(A+357784|0),Ga(A+353384|0),Ga(A+348984|0),Ga(A+344584|0),Ga(A+340184|0),Ga(A+335784|0),Ga(A+331384|0),Ga(A+326984|0),Ga(A+322584|0),Ga(A+318184|0),Ga(A+313784|0),Ga(A+309384|0),Ga(A+304984|0),Ga(A+300584|0),Ga(A+296184|0),Ga(A+291784|0),Ga(A+287384|0),Ga(A+282984|0),Ga(A+278584|0),Ga(A+274184|0),Ga(A+269784|0),Ga(A+265384|0),Ga(A+260984|0),Ga(A+256584|0),Ga(A+252184|0),Ga(A+247784|0),Ga(A+243384|0),Ga(A+238984|0),Ga(A+234584|0),Ga(A+230184|0),Ga(A+225784|0),Ga(A+221384|0),Ga(A+216984|0),Ga(A+212584|0),Ga(A+208184|0),Ga(A+203784|0),Ga(A+199384|0),Ga(A+194984|0),Ga(A+190584|0),Ga(A+186184|0),Ga(A+181784|0),Ga(A+177384|0),Ga(A+172984|0),Ga(A+168584|0),Ga(A+164184|0),Ga(A+159784|0),Ga(A+155384|0),Ga(A+150984|0),Ga(A+146584|0),Ga(A+142184|0),Ga(A+137784|0),Ga(A+133384|0),Ga(A+128984|0),Ga(A+124584|0),Ga(A+120184|0),Ga(A+115784|0),Ga(A+111384|0),Ga(A+106984|0),Ga(A+102584|0),Ga(A+98184|0),Ga(A+93784|0),Ac(A+88616|0),Ac(A+83448|0),Ac(A+78280|0),Ac(A+73112|0),Ac(A+67944|0),Ac(A+62776|0),Ac(A+57608|0),Ac(A+52440|0),Ac(A+47272|0),Ac(A+42104|0),Ac(A+36936|0),Ac(A+31768|0),Ac(A+26600|0),Ac(A+21432|0),Ac(A+16264|0),Ac(A+11096|0),e=A+600|0,o=A+11096|0;do{if(0|(r=0|ar[o+-16>>2])&&((0|ar[(i=o+-12|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),0|(r=0|ar[o+-28>>2])&&((0|(f=0|ar[(i=o+-24|0)>>2]))!=(0|r)&&(ar[i>>2]=f+(~((f+-2-r|0)>>>1)<<1)),vu(r)),0|(r=0|ar[(n=o+-64|0)>>2])){if((0|(i=0|ar[(t=o+-60|0)>>2]))!=(0|r)){for(;i=i+-12|0,ar[t>>2]=i,(f=0|ar[i>>2])&&(vu(f),i=0|ar[t>>2]),(0|i)!=(0|r););r=0|ar[n>>2]}vu(r)}o=o+-656|0}while((0|o)!=(0|e));!function(A){var e,r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0;ur=(i=ur)+16|0,e=i,f=0|ar[(r=32+(A|=0)|0)>>2];A:do{if(0|f){c=A+16|0,l=A+28|0,u=A+36|0,b=A+40|0,s=A+44|0,a=A+48|0;do{if(n=0|ar[c>>2],t=0|ar[l>>2],o=0|ar[(0|ar[n+(t>>>10<<2)>>2])+((1023&t)<<2)>>2],ar[r>>2]=f+-1,t=t+1|0,2047<(ar[l>>2]=t)>>>0&&(vu(0|ar[n>>2]),ar[c>>2]=4+(0|ar[c>>2]),ar[l>>2]=(0|ar[l>>2])-1024),ar[u>>2]=(0|ar[u>>2])-(0|ar[o+24>>2]),!o)break A;ar[e>>2]=o,f=o,n=0|ar[s>>2];do{if(n-(0|ar[b>>2])>>2>>>0<16){if((0|n)==(0|ar[a>>2])){pa(b,e);break}ar[n>>2]=f,ar[s>>2]=4+(0|ar[s>>2]);break}Bc(0|ar[o+20>>2]),0|(f=0|ar[o+32>>2])&&((0|(t=0|ar[(n=o+36|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(~((t+-4-f|0)>>>2)<<2)),vu(f)),vu(o)}while(0);f=0|ar[r>>2]}while(0!=(0|f))}}while(0);if(o=0|ar[A+8>>2]){ar[e>>2]=o,f=o,c=A+40|0,n=0|ar[(a=A+44|0)>>2];do{if(n-(0|ar[c>>2])>>2>>>0<16){if((0|n)==(0|ar[A+48>>2])){pa(c,e);break}ar[n>>2]=f,ar[a>>2]=4+(0|ar[a>>2]);break}Bc(0|ar[o+20>>2]),0|(f=0|ar[o+32>>2])&&((0|(t=0|ar[(n=o+36|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(~((t+-4-f|0)>>>2)<<2)),vu(f)),vu(o)}while(0);u=b=a}else b=u=A+44|0,c=A+40|0;if(t=0|ar[u>>2],o=0|ar[c>>2],(0|(f=t))!=(0|(n=o)))for(l=0;(a=0|ar[n+(l<<2)>>2])&&(Bc(0|ar[a+20>>2]),0|(f=0|ar[a+32>>2])&&((0|(t=0|ar[(n=a+36|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(~((t+-4-f|0)>>>2)<<2)),vu(f)),vu(a),f=0|ar[u>>2],o=0|ar[c>>2],t=f),(l=l+1|0)>>>0<t-(n=o)>>2>>>0;);0|n&&((0|f)!=(0|n)&&(ar[b>>2]=f+(~((f+-4-n|0)>>>2)<<2)),vu(n));f=0|ar[(b=A+16|0)>>2],n=0|ar[(u=A+28|0)>>2],o=f+(n>>>10<<2)|0,t=0|ar[(s=A+20|0)>>2],n=(0|(a=t))==(0|(c=f))?l=0:(l=(0|ar[r>>2])+n|0,l=(0|ar[f+(l>>>10<<2)>>2])+((1023&l)<<2)|0,(0|ar[o>>2])+((1023&n)<<2)|0);A:for(;;){do{if((0|n)==(0|l))break A;n=n+4|0}while(4096!=(n-(0|ar[o>>2])|0));n=0|ar[(o=n=o+4|0)>>2]}if(ar[r>>2]=0,2<(n=a-c>>2)>>>0)for(;vu(0|ar[f>>2]),f=4+(0|ar[b>>2])|0,ar[b>>2]=f,t=0|ar[s>>2],n=t-f>>2,2<n>>>0;);switch(0|n){case 1:n=512,d=45;break;case 2:n=1024,d=45}45==(0|d)&&(ar[u>>2]=n);if((0|f)!=(0|t)){for(;vu(0|ar[f>>2]),(0|(f=f+4|0))!=(0|t););f=0|ar[b>>2],(0|(n=0|ar[s>>2]))!=(0|f)&&(ar[s>>2]=n+(~((n+-4-f|0)>>>2)<<2))}(f=0|ar[A+12>>2])&&vu(f),ur=i}(A+548|0)}function Te(A){var e,r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0;if(i=(A|=0)+10632|0,(0|(n=0|ar[(l=A+10636|0)>>2]))!=(0|(f=0|ar[i>>2]))){a=0;do{if(o=0|ar[f+(a<<2)>>2]){if(Ba(548+(0|ar[o+144>>2])|0,0|ar[o>>2]),0|(n=0|ar[o+136>>2])){if(0|(f=0|ar[(t=n+-16|0)+12>>2]))for(f=n+(18624*f|0)|0;kt(f+-44|0),(0|(f=f+-18624|0))!=(0|n););mu(t)}Jn(o+44|0),vu(o),f=0|ar[i>>2],n=0|ar[l>>2]}a=a+1|0}while(a>>>0<n-f>>2>>>0)}if(e=A+10664|0,(0|(f=0|ar[(r=A+10668|0)>>2]))!=(0|(n=t=0|ar[e>>2])))for(c=0,a=n,o=t;(t=0|ar[a+(c<<2)>>2])?(is[511&ar[4+(0|ar[t>>2])>>2]](t),n=t=0|ar[e>>2],f=0|ar[r>>2]):t=o,!(f-t>>2>>>0<=(c=c+1|0)>>>0);)o=a=t;if(f=0|ar[(o=A+10676|0)>>2]){if((0|(n=0|ar[(t=A+10680|0)>>2]))!=(0|f)){for(;c=n+-8|0,kt(ar[t>>2]=c),(0|(n=0|ar[t>>2]))!=(0|f););f=0|ar[o>>2]}vu(f),f=0|ar[e>>2]}else f=n;0|f&&((0|(n=0|ar[r>>2]))!=(0|f)&&(ar[r>>2]=n+(~((n+-4-f|0)>>>2)<<2)),vu(f)),0|(f=0|ar[A+10644>>2])&&((0|(t=0|ar[(n=A+10648|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(80*~(((t+-80-f|0)>>>0)/80|0)|0)),vu(f)),(f=0|ar[i>>2])&&((0|(n=0|ar[l>>2]))!=(0|f)&&(ar[l>>2]=n+(~((n+-4-f|0)>>>2)<<2)),vu(f)),aa(l=A+8|0)}function Ue(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0;if(0|ar[(i=(A|=0)+136|0)>>2]&&sr(34678,34700,169,34710),n=0|wu(230614<e>>>0|4294967279<(n=18624*e|0)>>>0?-1:n+16|0),ar[n+12>>2]=e,n=n+16|0,!e)return ar[i>>2]=n,void(ar[(n=A+140|0)>>2]=e);for(r=n+(18624*e|0)|0,f=n;st(f+18580|0),o=f+18592|0,t=0==(0|(t=15&(c=f+48|0)))?c:c+(16-t)|0,ar[(a=f+18508|0)>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,ar[a+12>>2]=0,ar[a+16>>2]=0,ar[o>>2]=0,ar[o+4>>2]=0,ar[o+8>>2]=0,ar[o+12>>2]=0,vb((ar[o+16>>2]=0)|(ar[f+2112>>2]=t),0,2048),(0|(f=f+18624|0))!=(0|r););ar[i>>2]=n,ar[(c=A+140|0)>>2]=e}function Se(A,e){A|=0;var r,i=0,f=0,n=0,t=0;vb((e|=0)+48|0,0,2064),ar[e+18532>>2]=-1,ar[e+18536>>2]=-1,r=0|ar[e+18596>>2],(0|(A=0|ar[16+(0|ar[e+18600>>2])>>2]))<=0||(A=(1+((0|(n=0|ar[(0|ar[10284+r>>2])+((0|ar[(0|ar[10272+r>>2])+(A<<2)>>2])-1<<2)>>2]))%(0|(t=0|ar[5820+r>>2]))|0)<<(f=0|ar[5804+r>>2]))-1|0,f=(1+((0|n)/(0|t)|0)<<f)-1|0,t=(0|ar[1248+r>>2])-1|0,n=(0|ar[1252+r>>2])-1|0,A=((0|t)<(0|A)?t:A)>>(i=0|ar[10368+r>>2]),i=((0|n)<(0|f)?n:f)>>i,(0|A)<=-1&&sr(48482,48519,118,48539),(0|(f=0|ar[10372+r>>2]))<=(0|A)&&sr(48482,48519,118,48539),(0|i)<=-1&&sr(48543,48519,119,48539),(0|i)>=(0|ar[10376+r>>2])&&sr(48543,48519,119,48539),t=(0|ar[10360+r>>2])+(3*((0|br(f,i))+A|0)|0)+2|0,ar[e+18528>>2]=tr[t>>0])}function Oe(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=(A|=0)+4|0,n=0|ar[A>>2],1073741823<(o=1+(i=(t=(0|ar[f>>2])-n|0)>>2)|0)>>>0&&zl(),a=(c=(0|ar[(l=A+8|0)>>2])-n|0)>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t),ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),n&&vu(n)}function ze(A,e){A|=0,e|=0;var r,i,f,n=0,t=0,o=0;if(ur=(f=ur)+656|0,ar[(n=(r=f)+592|0)>>2]=0,ar[(i=r+596|0)>>2]=0,ar[r+600>>2]=0,ar[(t=r+628|0)>>2]=0,ar[t+4>>2]=0,ar[t+8>>2]=0,ar[t+12>>2]=0,ar[t+16>>2]=0,o=(e=(ar[t+20>>2]=0)|function(A,e,r){A|=0,e|=0;var i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(l=0|At(r|=0,4),15<(0|(ar[A>>2]=l)))return 0|(r=8);if(et(r,2),l=0|At(r,6),ar[A+4>>2]=l+1,62<(0|l))return 0|(r=8);if(l=0|At(r,3),ar[(t=A+8|0)>>2]=l+1,6<(0|l))return 0|(r=8);l=0|At(r,1),ar[A+12>>2]=l,et(r,16),Ln(A+16|0,r,0|ar[t>>2]),l=0|At(r,1),ar[(o=A+484|0)>>2]=l,i=0|ar[t>>2],l?0<(0|i)&&(a=0,f=7):(a=i+-1|0,f=7);do{if(7==(0|f)){for(i=a;;){if(n=0|it(r),ar[(l=A+488+(12*i|0)|0)>>2]=n,n=0|it(r),ar[(f=A+488+(12*i|0)+4|0)>>2]=n,n=0|it(r),ar[A+488+(12*i|0)+8>>2]=n,-99999==(0|ar[l>>2])){i=8,f=48;break}if(i=i+1|0,-99999==(0|n)|-99999==(0|ar[f>>2])){i=8,f=48;break}if((0|i)>=(0|ar[t>>2])){f=11;break}}if(11==(0|f)){if(0|ar[o>>2])break;if(8<=(0|a)&&sr(44587,44512,144,44627),(0|a)<=0)break;for(f=A+488+(12*a|0)|0,n=A+488+(12*a|0)+4|0,t=A+488+(12*a|0)+8|0,i=0;ar[A+488+(12*i|0)>>2]=ar[f>>2],ar[A+488+(12*i|0)+4>>2]=ar[n>>2],ar[A+488+(12*i|0)+8>>2]=ar[t>>2],(0|(i=i+1|0))!=(0|a););}else if(48==(0|f))return 0|i}}while(0);if(a=255&(0|At(r,6)),tr[(c=A+584|0)>>0]=a,a=0|it(r),-99999==(0|(ar[(l=A+588|0)>>2]=a))|1023<(t=a+1|0)>>>0)return er(e,8,0),0|(r=8);if(ar[l>>2]=t,a=A+592|0,i=0|ar[(o=A+596|0)>>2],n=0|ar[a>>2],t>>>0<=(f=(i-n|0)/12|0)>>>0){if(t>>>0<f>>>0&&(0|i)!=(0|(u=n+(12*t|0)|0)))for(;i=i+-12|0,ar[o>>2]=i,(f=0|ar[i>>2])&&(vu(f),i=0|ar[o>>2]),(0|i)!=(0|u););}else!function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;if(t=0|ar[(i=8+(A|=0)|0)>>2],n=0|ar[(u=A+4|0)>>2],((t-(f=n)|0)/12|0)>>>0>=e>>>0)return vb(0|n,0,12*e|0),ar[u>>2]=f+(12*e|0);l=0|ar[A>>2],357913941<(n=(a=(n-(r=l)|0)/12|0)+e|0)>>>0&&zl();o=(c=(t-l|0)/12|0)<<1,o=c>>>0<178956970?o>>>0<n>>>0?n:o:357913941;do{if(o){if(!(357913941<o>>>0)){c=0|hu(12*o|0);break}Zu(u=0|X(8),44519),ar[u>>2]=17660,I(0|u,4016,428)}else c=0}while(0);if(n=c+(12*a|0)|0,c=c+(12*o|0)|0,vb(0|(t=n),0,12*e|0),a=n+(12*e|0)|0,(0|f)==(0|r))o=l;else{for(;f=(l=f)+-12|0,ar[n+-12>>2]=ar[f>>2],e=l+-8|0,ar[n+-8>>2]=ar[e>>2],l=l+-4|0,ar[n+-4>>2]=ar[l>>2],ar[f>>2]=0,ar[e>>2]=0,ar[l>>2]=0,t=n=t+-12|0,(0|f)!=(0|r););o=0|ar[A>>2],f=0|ar[u>>2]}if(ar[A>>2]=t,ar[u>>2]=a,ar[i>>2]=c,(0|f)!=(0|(t=o)))for(;0|(n=0|ar[(f=f+-12|0)>>2])&&vu(n),(0|f)!=(0|t););if(!o)return;vu(o)}(a,t-f|0);if(1<(0|ar[l>>2]))for(f=1,n=0|ar[a>>2],i=0|tr[c>>0];;){for(Kn(n+(12*f|0)|0,1+(255&i)|0,0),n=0;o=0!=(0|At(r,1)),t=0|ar[a>>2],i=(0|ar[t+(12*f|0)>>2])+(n>>>5<<2)|0,u=1<<(31&n),e=0|ar[i>>2],ar[i>>2]=o?e|u:e&~u,i=0|tr[c>>0],(0|n)<(255&i|0);)n=n+1|0;if(!((0|(f=f+1|0))<(0|ar[l>>2])))break;n=t}if(u=255&(0|At(r,1)),(tr[A+604>>0]=u)<<24>>24&&(u=0|At(r,32),ar[A+608>>2]=u,u=0|At(r,32),ar[A+612>>2]=u,u=255&(0|At(r,1)),(tr[A+616>>0]=u)<<24>>24)&&(i=1+(0|it(r))|0,ar[A+620>>2]=i,i=0|it(r),1023<(0|(ar[(e=A+624|0)>>2]=i))&&sr(55739,44512,189,44627),c=A+628|0,o=0|ar[(f=A+632|0)>>2],t=0|ar[c>>2],i>>>0<=(n=o-t>>1)>>>0?i>>>0<n>>>0&&(0|o)!=(0|(b=t+(i<<1)|0))&&(ar[f>>2]=o+(~((o+-2-b|0)>>>1)<<1)):(function(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;if(a=0|ar[(t=8+(A|=0)|0)>>2],o=0|ar[(l=A+4|0)>>2],e>>>0<=a-o>>1>>>0)return vb(0|o,0,e<<1|0),ar[l>>2]=o+(e<<1);n=0|ar[A>>2],(0|(o=(i=(f=o-n|0)>>1)+e|0))<0&&zl();a=(a=a-n|0)>>1>>>0<1073741823?a>>>0<o>>>0?o:a:2147483647;do{if(a){if(!((0|a)<0)){c=0|hu(a<<1);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);vb(0|(r=c+(i<<1)|0),0,e<<1|0),o=r+(0-i<<1)|0,0<(0|f)&&hb(0|o,0|n,0|f);if(ar[A>>2]=o,ar[l>>2]=r+(e<<1),ar[t>>2]=c+(a<<1),!n)return;vu(n)}(c,i-n|0),i=0|ar[e>>2]),f=A+640|0,a=0|ar[(n=A+644|0)>>2],o=0|ar[f>>2],i>>>0<=(t=a-o|0)>>>0?i>>>0<t>>>0&&(0|a)!=(0|(s=o+i|0))&&(ar[n>>2]=s):(function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0;if(t=0|ar[(r=8+(A|=0)|0)>>2],f=0|ar[(i=A+4|0)>>2],e>>>0<=(t-f|0)>>>0){for(;tr[f>>0]=0,f=1+(0|ar[i>>2])|0,ar[i>>2]=f,0!=(0|(e=e+-1|0)););return}n=0|ar[A>>2],(0|(f=(o=f-n|0)+e|0))<0&&zl();a=(t=t-n|0)<<1,n=(f=t>>>0<1073741823?a>>>0<f>>>0?f:a:2147483647)?0|hu(f):0;a=n+o|0,o=n+f|0,f=t=a;for(;tr[f>>0]=0,t=f=t+1|0,e=e+-1|0,0!=(0|e););e=0|ar[A>>2],n=(0|ar[i>>2])-e|0,f=a+(0-n)|0,0<(0|n)&&hb(0|f,0|e,0|n);if(ar[A>>2]=f,ar[i>>2]=t,ar[r>>2]=o,!e)return;vu(e)}(f,i-t|0),i=0|ar[e>>2]),0<(0|i)))return r=65535&(0|it(r)),or[ar[c>>2]>>1]=r,(r=0)|r;return r=255&(0|At(r,1)),tr[A+652>>0]=r,(r=0)|r}(r,A+4|0,e))||(-1<(0|(e=0|ar[A+520>>2]))&&function(A,e){A|=0;var r,i,f,n,t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;switch(ur=(h=ur)+208|0,I=h+192|0,k=h+184|0,d=h+176|0,W=h+168|0,s=h+160|0,X=h+152|0,b=h+144|0,E=h+128|0,u=h+120|0,B=h+112|0,a=h+104|0,y=h+96|0,f=h+88|0,i=h+80|0,o=h+72|0,t=h+64|0,n=h+56|0,r=h+48|0,p=h+40|0,Z=h+32|0,g=h+24|0,m=h+16|0,v=h+8|0,l=(w=h)+200|0,0|(e|=0)){case 1:e=10172;break;case 2:e=10676;break;default:return ur=h}if(Pn(c=0|ar[e>>2],44632,w),ar[v>>2]=ar[A>>2],Pn(c,44673,v),ar[m>>2]=ar[A+4>>2],Pn(c,44717,m),v=A+8|0,ar[g>>2]=ar[v>>2],Pn(c,44761,g),ar[Z>>2]=ar[A+12>>2],Pn(c,44805,Z),Z=0|ar[v>>2],$n(A+16|0,1,c),w=Z+-1|0,1<(0|Z))for(e=0;ar[p>>2]=e,Pn(c,44849,p),$n(A+68+(52*e|0)|0,0,c),(0|(e=e+1|0))!=(0|w););if(p=A+484|0,ar[r>>2]=ar[p>>2],Pn(c,44882,r),0|ar[p>>2]){if(0<(0|ar[v>>2]))for(e=0;y=0|ar[A+488+(12*e|0)>>2],ar[n>>2]=e,ar[4+n>>2]=y,Pn(c,44929,n),ar[t>>2]=ar[A+488+(12*e|0)+4>>2],Pn(c,44971,t),ar[o>>2]=ar[A+488+(12*e|0)+8>>2],Pn(c,45012,o),(0|(e=e+1|0))<(0|ar[v>>2]););}else ar[i>>2]=ar[A+488>>2],Pn(c,45053,i),ar[f>>2]=ar[A+492>>2],Pn(c,45098,f),ar[y>>2]=ar[A+496>>2],Pn(c,45143,y);if(Z=A+584|0,ar[a>>2]=cr[Z>>0],Pn(c,45188,a),g=A+588|0,ar[B>>2]=ar[g>>2],Pn(c,45213,B),1<(0|ar[g>>2])){v=A+592|0,m=4+l|0,w=1;do{for(e=0;ar[l>>2]=(0|ar[(0|ar[v>>2])+(12*w|0)>>2])+(e>>>5<<2),ar[m>>2]=1<<(31&e),ar[E>>2]=w,ar[E+4>>2]=e,tr[(B=E+8|0)>>0]=0|tr[l>>0],tr[B+1>>0]=0|tr[1+l>>0],tr[B+2>>0]=0|tr[2+l>>0],tr[B+3>>0]=0|tr[3+l>>0],tr[B+4>>0]=0|tr[4+l>>0],tr[B+5>>0]=0|tr[5+l>>0],tr[B+6>>0]=0|tr[6+l>>0],tr[B+7>>0]=0|tr[7+l>>0],Pn(c,45273,E),(0|e)<(0|cr[Z>>0]);)e=e+1|0;w=w+1|0}while((0|w)<(0|ar[g>>2]))}if(E=A+604|0,ar[u>>2]=tr[E>>0],Pn(c,45238,u),0|tr[E>>0]&&(ar[b>>2]=ar[A+608>>2],Pn(c,45310,b),ar[X>>2]=ar[A+612>>2],Pn(c,45338,X),X=A+616|0,ar[s>>2]=tr[X>>0],Pn(c,45366,s),0|tr[X>>0])&&(ar[W>>2]=ar[A+620>>2],Pn(c,45408,W),W=A+624|0,ar[d>>2]=ar[W>>2],Pn(c,45441,d),0<(0|ar[W>>2])))return I=0|lr[ar[A+628>>2]>>1],ar[k>>2]=0,ar[4+k>>2]=I,Pn(c,45474,k),ur=h;ar[I>>2]=tr[A+652>>0],Pn(c,45502,I),ur=h}(r,e),hb(0|(o=A+600+(656*(e=0|ar[r>>2])|0)|0),0|r,592),(0|o)==(0|r)?(n=r+604|0,ar[(o=A+600+(656*e|0)+604|0)>>2]=ar[n>>2],ar[o+4>>2]=ar[n+4>>2],ar[o+8>>2]=ar[n+8>>2],ar[o+12>>2]=ar[n+12>>2],ar[o+16>>2]=ar[n+16>>2],ar[o+20>>2]=ar[n+20>>2]):(je(A+600+(656*e|0)+592|0,0|ar[n>>2],0|ar[i>>2]),n=r+604|0,ar[(o=A+600+(656*e|0)+604|0)>>2]=ar[n>>2],ar[o+4>>2]=ar[n+4>>2],ar[o+8>>2]=ar[n+8>>2],ar[o+12>>2]=ar[n+12>>2],ar[o+16>>2]=ar[n+16>>2],ar[o+20>>2]=ar[n+20>>2],He(A+600+(656*e|0)+628|0,0|ar[t>>2],0|ar[r+632>>2]),xe(A+600+(656*e|0)+640|0,0|ar[r+640>>2],0|ar[r+644>>2])),tr[A+600+(656*e|0)+652>>0]=0|tr[r+652>>0],0),0|(e=0|ar[r+640>>2])&&((0|ar[(A=r+644|0)>>2])!=(0|e)&&(ar[A>>2]=e),vu(e)),0|(e=0|ar[t>>2])&&((0|(n=0|ar[(A=r+632|0)>>2]))!=(0|e)&&(ar[A>>2]=n+(~((n+-2-e|0)>>>1)<<1)),vu(e)),!(e=0|ar[(t=r+592|0)>>2]))return ur=f,0|o;if((0|(A=0|ar[i>>2]))!=(0|e)){for(;A=A+-12|0,ar[i>>2]=A,(n=0|ar[A>>2])&&(vu(n),A=0|ar[i>>2]),(0|A)!=(0|e););e=0|ar[t>>2]}return vu(e),ur=f,0|o}function je(A,e,r){var i,f,n,t,o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;if(ur=(c=ur)+32|0,t=c+24|0,n=c+16|0,o=c+8|0,a=c,f=((r|=0)-(e|=0)|0)/12|0,(((u=0|ar[(d=(A|=0)+8|0)>>2])-(l=i=0|ar[A>>2])|0)/12|0)>>>0<f>>>0){if(i){if((0|(u=0|ar[(s=A+4|0)>>2]))==(0|l))u=i;else{for(;u=u+-12|0,ar[s>>2]=u,(b=0|ar[u>>2])&&(vu(b),u=0|ar[s>>2]),(0|u)!=(0|l););u=0|ar[A>>2]}vu(u),ar[d>>2]=0,ar[s>>2]=0,u=ar[A>>2]=0}if(357913941<f>>>0&&zl(),u=(m=(0|u)/12|0)<<1,357913941<(u=m>>>0<178956970?u>>>0<f>>>0?f:u:357913941)>>>0&&zl(),b=0|hu(12*u|0),ar[(m=A+4|0)>>2]=b,ar[A>>2]=b,ar[d>>2]=b+(12*u|0),(0|e)==(0|r))return void(ur=c);for(w=4+o|0,v=a+4|0,h=e;;){if(ar[b>>2]=0,ar[(u=b+4|0)>>2]=0,(ar[(s=b+8|0)>>2]=0)|(k=0|ar[(d=h+4|0)>>2])){if((0|k)<0){u=42;break}Z=0|hu((k=1+((k+-1|0)>>>5)|0)<<2),ar[b>>2]=Z,ar[u>>2]=0,ar[s>>2]=k,s=0|ar[h>>2],ar[o>>2]=s,k=(ar[w>>2]=0)|ar[d>>2],ar[a>>2]=s+(k>>>5<<2),ar[v>>2]=31&k,ar[n>>2]=ar[o>>2],ar[4+n>>2]=ar[4+o>>2],ar[t>>2]=ar[a>>2],ar[4+t>>2]=ar[a+4>>2],Pe(b,n,t)}if(h=h+12|0,u=12+(0|ar[m>>2])|0,ar[m>>2]=u,(0|h)==(0|r)){u=45;break}b=u}if(42==(0|u))zl();else if(45==(0|u))return void(ur=c)}w=(d=((0|ar[(v=A+4|0)>>2])-i|0)/12|0)>>>0<f>>>0,d=e+(12*d|0)|0,h=w?d:r;A:do{if((0|h)==(0|e))g=l;else{for(;;){if((0|l)!=(0|e)){if(u=0|ar[(k=e+4|0)>>2]){if(u>>>0>ar[(s=l+8|0)>>2]<<5>>>0){if((b=0|ar[l>>2])&&(vu(b),ar[l>>2]=0,ar[s>>2]=0,u=(ar[l+4>>2]=0)|ar[k>>2]),(0|u)<0)break;b=0|hu((u=1+((u+-1|0)>>>5)|0)<<2),ar[l>>2]=b,ar[l+4>>2]=0,ar[s>>2]=u,u=0|ar[k>>2]}else b=0|ar[l>>2];wb(0|b,0|ar[e>>2],4+((u+-1|0)>>>5<<2)|0),u=0|ar[k>>2]}else u=0;ar[l+4>>2]=u}if(l=l+12|0,(0|(e=e+12|0))==(0|h)){g=l;break A}}zl()}}while(0);if(w)if((0|h)!=(0|r)){for(k=4+o|0,e=a+4|0,h=0|ar[v>>2];;){if(ar[h>>2]=0,ar[(l=h+4|0)>>2]=0,(ar[(u=h+8|0)>>2]=0)|(s=0|ar[(b=d+4|0)>>2])){if((0|s)<0){u=20;break}Z=0|hu((g=1+((s+-1|0)>>>5)|0)<<2),ar[h>>2]=Z,ar[l>>2]=0,ar[u>>2]=g,g=0|ar[d>>2],ar[o>>2]=g,Z=(ar[k>>2]=0)|ar[b>>2],ar[a>>2]=g+(Z>>>5<<2),ar[e>>2]=31&Z,ar[n>>2]=ar[o>>2],ar[4+n>>2]=ar[4+o>>2],ar[t>>2]=ar[a>>2],ar[4+t>>2]=ar[a+4>>2],Pe(h,n,t)}if(d=d+12|0,l=12+(0|ar[v>>2])|0,ar[v>>2]=l,(0|d)==(0|r)){u=45;break}h=l}if(20==(0|u))zl();else if(45==(0|u))return void(ur=c)}else ur=c;else{if((0|(l=0|ar[v>>2]))==(0|g))return void(ur=c);for(;l=l+-12|0,ar[v>>2]=l,(u=0|ar[l>>2])&&(vu(u),l=0|ar[v>>2]),(0|l)!=(0|g););ur=c}}function He(A,e,r){var i,f,n,t,o=0,a=0,c=0,l=0;if((c=(l=(i=r|=0)-(e|=0)|0)>>1)>>>0<=(o=0|ar[(f=(A|=0)+8|0)>>2])-(n=t=0|ar[A>>2])>>1>>>0)return 0|(r=(o=(a=c=(A=(a=(0|ar[(l=A+4|0)>>2])-t>>1)>>>0<c>>>0)?e+(a<<1)|0:r)-e|0)>>1)&&wb(0|t,0|e,0|o),r=n+(r<<1)|0,A?!((0|(o=i-a|0))<=0)&&(hb(0|ar[l>>2],0|c,0|o),void(ar[l>>2]=(0|ar[l>>2])+(o>>>1<<1))):(0|(o=0|ar[l>>2]))!=(0|r)&&void(ar[l>>2]=o+(~((o+-2-r|0)>>>1)<<1));(a=t)&&((0|(r=0|ar[(o=A+4|0)>>2]))!=(0|n)&&(ar[o>>2]=r+(~((r+-2-t|0)>>>1)<<1)),vu(a),ar[f>>2]=0,ar[o>>2]=0,o=ar[A>>2]=0),(0|l)<0&&zl(),(0|(o=o>>1>>>0<1073741823?o>>>0<c>>>0?c:o:2147483647))<0&&zl(),r=0|hu(o<<1),ar[(a=A+4|0)>>2]=r,ar[A>>2]=r,ar[f>>2]=r+(o<<1),(0|l)<=0||(hb(0|r,0|e,0|l),ar[a>>2]=r+(l>>>1<<1))}function xe(A,e,r){var i,f,n=0,t=0,o=0,a=0,c=0;return f=(c=r|=0)-(i=e|=0)|0,((n=0|ar[(o=(A|=0)+8|0)>>2])-(a=t=0|ar[A>>2])|0)>>>0<f>>>0?(t&&((0|ar[(n=A+4|0)>>2])!=(0|a)&&(ar[n>>2]=a),vu(a),ar[o>>2]=0,ar[n>>2]=0,n=ar[A>>2]=0),(0|f)<0&&zl(),c=n<<1,(0|(n=n>>>0<1073741823?c>>>0<f>>>0?f:c:2147483647))<0&&zl(),a=0|hu(n),ar[(c=A+4|0)>>2]=a,ar[A>>2]=a,ar[o>>2]=a+n,hb(0|a,0|e,0|f),void(ar[c>>2]=a+f)):(0|(n=(t=r=(A=(t=(0|ar[(o=A+4|0)>>2])-t|0)>>>0<f>>>0)?e+t|0:r)-i|0)&&wb(0|a,0|e,0|n),n=a+n|0,A?!((0|(n=c-t|0))<=0)&&(hb(0|ar[o>>2],0|r,0|n),void(ar[o>>2]=(0|ar[o>>2])+n)):(0|ar[o>>2])!=(0|n)&&void(ar[o>>2]=n))}function Pe(A,e,r){e|=0,r|=0;var i,f,n,t,o,a,c,l,u,b=0,s=0,d=0,k=0,h=0;if(ur=(u=ur)+48|0,a=u+40|0,o=u+32|0,f=u+8|0,t=(n=u)+24|0,l=u+16|0,h=0|ar[(d=(A|=0)+4|0)>>2],c=0|ar[(b=e)>>2],b=0|ar[b+4>>2],s=0|ar[(k=r)>>2],k=0|ar[k+4>>2],i=s-c<<3,ar[d>>2]=h-b+k+i,e=d=(0|ar[A>>2])+(h>>>5<<2)|0,(0|b)!=(0|(r=31&h)))return ar[(h=f)>>2]=c,ar[h+4>>2]=b,ar[(h=n)>>2]=s,ar[h+4>>2]=k,ar[t>>2]=e,ar[4+t>>2]=r,ar[o>>2]=ar[f>>2],ar[4+o>>2]=ar[4+f>>2],ar[a>>2]=ar[n>>2],ar[4+a>>2]=ar[n+4>>2],function(A,e,r,i){A|=0,r|=0,i|=0;var f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0;if(d=0|ar[(e|=0)>>2],u=0|ar[e+4>>2],o=((0|ar[r>>2])-d<<3)+(0|ar[r+4>>2])-u|0,r=d,(0|o)<=0)return e=i+4|0,i=0|ar[i>>2],ar[A>>2]=i,i=A+4|0,A=0|ar[e>>2],ar[i>>2]=A;u?(t=-1>>>((t=32-u|0)-(l=(0|o)<(0|t)?o:t)|0)&-1<<u&ar[r>>2],f=0|ar[(b=i+4|0)>>2],n=(c=32-f|0)>>>0<l>>>0?c:l,a=0|ar[i>>2],f=ar[a>>2]&~(-1>>>(c-n|0)&-1<<f),ar[a>>2]=f,c=0|ar[b>>2],ar[a>>2]=(u>>>0<c>>>0?t<<c-u:t>>>(u-c|0))|f,f=(0|ar[b>>2])+n|0,a=a+(f>>>5<<2)|0,ar[i>>2]=a,f&=31,ar[b>>2]=f,0<(0|(c=l-n|0))&&(ar[a>>2]=t>>>(u+n|0)|ar[a>>2]&~(-1>>>(32-c|0)),ar[b>>2]=c,f=c),r=r+4|0,ar[e>>2]=r,o=o-l|0):f=0|ar[(b=f=i+4|0)>>2];if(d=32-f|0,c=-1<<f,31<(0|o)){for(l=~c,a=0|ar[i>>2],u=(s=(f=o+-32|0)>>>5)+1|0,s=f-(s<<5)|0,f=r,n=0|ar[a>>2],t=a;k=0|ar[f>>2],h=n&l,ar[t>>2]=h,ar[t>>2]=k<<ar[b>>2]|h,n=ar[(t=t+4|0)>>2]&c|k>>>d,ar[t>>2]=n,!((0|(o=o+-32|0))<=31);)f=f+4|0;r=r+(u<<2)|0,ar[e>>2]=r,ar[i>>2]=a+(u<<2),o=s}if((0|o)<=0)return k=b,h=0|ar[i>>2],ar[A>>2]=h,h=A+4|0,k=0|ar[k>>2],ar[h>>2]=k;if(t=ar[r>>2]&-1>>>(32-o|0),n=(0|d)<(0|o)?d:o,f=0|ar[i>>2],r=ar[f>>2]&~(-1<<ar[b>>2]&-1>>>(d-n|0)),ar[f>>2]=r,ar[f>>2]=r|t<<ar[b>>2],r=(0|ar[b>>2])+n|0,f=f+(r>>>5<<2)|0,ar[i>>2]=f,ar[b>>2]=31&r,(0|(r=o-n|0))<=0)return k=b,h=0|ar[i>>2],ar[A>>2]=h,h=A+4|0,k=0|ar[k>>2],ar[h>>2]=k;ar[f>>2]=ar[f>>2]&~(-1>>>(32-r|0))|t>>>n,ar[b>>2]=r,k=b,h=0|ar[i>>2],ar[A>>2]=h,h=A+4|0,k=0|ar[k>>2],ar[h>>2]=k}(l,o,a,t),void(ur=u);r=k-b+i|0,k=c,0<(0|r)&&(e=b?(e=-1>>>((e=32-b|0)-(h=(0|r)<(0|e)?r:e)|0)&-1<<b,ar[d>>2]=ar[d>>2]&~e|ar[k>>2]&e,r=r-h|0,b=31&(e=h+b|0),d=d+(e>>>5<<2)|0,k=k+4|0):(b=0,c),wb(0|d,0|e,(s=(0|r)/32|0)<<2|0),A=r-(s<<5)|0,e=r=d+(s<<2)|0,0<(0|A)&&(b=-1>>>(32-A|0),ar[r>>2]=ar[r>>2]&~b|ar[k+(s<<2)>>2]&b,b=A)),ar[l>>2]=e,ar[4+l>>2]=b,ur=u}function Le(A,e){A|=0,e|=0;var r,i,f=0;return ur=(i=ur)+5168|0,$a(r=i),0|(e=0|function(A,e,r){A|=0,e|=0;var i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0;if(c=255&(0|At(r|=0,4)),tr[A+1>>0]=c,c=1+(0|At(r,3))|0,117440512<((tr[(o=A+2|0)>>0]=c)<<24|0))return 0|(A=8);if(i=255&(0|At(r,1)),tr[A+3>>0]=i,Ln(A+4|0,r,0|tr[o>>0]),-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(15<(0|(ar[A+472>>2]=i)))return 0|(A=8);if(-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);3==(0|(ar[(f=A+476|0)>>2]=i))?(n=255&(0|At(r,1)),i=0|ar[f>>2]):n=0;if(tr[A+480>>0]=n,ar[A+5012>>2]=n<<24>>24==0?i:0,3<i>>>0)return er(e,1019,0),0|(A=8);if(-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[(f=A+484|0)>>2]=i,-99999==(0|(n=0|it(r))))return er(e,8,0),0|(A=8);if(ar[A+488>>2]=n,i=0|ar[f>>2],0==(0|n)|0==(0|i))return 0|(A=8);if(7e4<(0|n)|7e4<(0|i))return 0|(A=8);if(c=255&(0|At(r,1)),(tr[A+492>>0]=c)<<24>>24){if(-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[A+496>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[A+500>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[A+504>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8)}else ar[A+496>>2]=0,ar[A+500>>2]=0,ar[A+504>>2]=0,i=0;if(ar[A+508>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[A+512>>2]=i+8,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[A+516>>2]=i+8,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);a=i+4|0,ar[(c=A+520|0)>>2]=a,ar[A+5032>>2]=1<<a,a=255&(0|At(r,1)),(tr[(t=A+524|0)>>0]=a)<<24>>24?(i=0,l=35):(n=0|tr[o>>0],i=(n<<24>>24)-1|0);for(;;){if(35==(0|l)&&(n=0|tr[o>>0]),(0|(f=n<<24>>24))<=(0|i)){l=44;break}if(-99999==(0|(f=0|it(r)))|15<(0|f)){l=38;break}if(ar[A+528+(i<<2)>>2]=f+1,-99999==(0|(f=0|it(r)))){l=40;break}if(ar[(n=A+556+(i<<2)|0)>>2]=f,-99999==(0|(f=0|it(r)))){l=42;break}ar[A+584+(i<<2)>>2]=f,ar[A+5128+(i<<2)>>2]=f+-1+(0|ar[n>>2]),i=i+1|0,l=35}{if(38==(0|l))return er(e,8,0),0|(A=8);if(40==(0|l))return er(e,8,0),0|(A=8);if(42==(0|l))return er(e,8,0),0|(A=8);if(44==(0|l)){if(0|tr[t>>0]&&(i=f+-1|0,8<=n<<24>>24&&sr(41633,41639,317,44627),1<n<<24>>24))for(n=A+528+(i<<2)|0,t=A+556+(i<<2)|0,f=A+584+(i<<2)|0,i=0;ar[A+528+(i<<2)>>2]=ar[n>>2],ar[A+556+(i<<2)>>2]=ar[t>>2],ar[A+584+(i<<2)>>2]=ar[f>>2],(0|(i=i+1|0))<((0|tr[o>>0])-1|0););if(-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[(t=A+612|0)>>2]=i+3,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[(o=A+616|0)>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[(f=A+620|0)>>2]=i+2,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[(n=A+624|0)>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[A+628>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[A+632>>2]=i,6<(0|(i=0|ar[t>>2])))return 0|(A=8);if(6<((0|ar[o>>2])+i|0))return 0|(A=8);if(5<(0|(i=0|ar[f>>2])))return 0|(A=8);if(5<((0|ar[n>>2])+i|0))return 0|(A=8);a=255&(0|At(r,1)),tr[A+636>>0]=a;do{if(a<<24>>24){if(a=255&(0|At(r,1)),tr[A+637>>0]=a,i=A+638|0,!(a<<24>>24)){rc(i);break}if(!(i=0|ec(r,0,i,0)))break;return 0|i}}while(0);a=255&(0|At(r,1)),tr[A+4702>>0]=a,a=255&(0|At(r,1)),tr[A+4703>>0]=a,a=255&(0|At(r,1)),tr[A+4704>>0]=a;do{if(a<<24>>24){if(i=1+(0|At(r,4))&255,tr[A+4705>>0]=i,i=1+(0|At(r,4))&255,tr[A+4706>>0]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(ar[A+4708>>2]=i+3,-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);ar[A+4712>>2]=i,i=255&(0|At(r,1));break}tr[A+4705>>0]=0,tr[A+4706>>0]=0,ar[A+4708>>2]=0,ar[A+4712>>2]=0,i=0}while(0);if(tr[A+4716>>0]=i,-99999==(0|(o=0|it(r))))return er(e,8,0),0|(A=8);if(64<o>>>0)return er(e,1014,0),0|(A=8);if(a=A+4720|0,t=0|ar[(n=A+4724|0)>>2],f=0|ar[a>>2],o>>>0<=(i=(t-f|0)/100|0)>>>0){do{if(o>>>0<i>>>0){if((0|t)==(0|(i=f+(100*o|0)|0)))break;ar[n>>2]=t+(100*~(((t+-100-i|0)>>>0)/100|0)|0)}}while(0);0<(0|o)&&(l=87)}else!function(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0;if(n=0|ar[(r=8+(A|=0)|0)>>2],i=0|ar[(a=A+4|0)>>2],e>>>0<=((n-i|0)/100|0)>>>0){do{for(f=i+100|0;((or[i>>1]=0)|(i=i+2|0))<(0|f););i=100+(0|ar[a>>2])|0,ar[a>>2]=i,e=e+-1|0}while(0!=(0|e));return}f=0|ar[A>>2],42949672<(i=(t=(i-f|0)/100|0)+e|0)>>>0&&zl();o=(n=(n-f|0)/100|0)<<1,i=n>>>0<21474836?o>>>0<i>>>0?i:o:42949672;do{if(i){if(!(42949672<i>>>0)){f=0|hu(100*i|0);break}Zu(a=0|X(8),44519),ar[a>>2]=17660,I(0|a,4016,428)}else f=0}while(0);o=f+(100*t|0)|0,t=f+(100*i|0)|0,n=i=o;do{for(f=i+100|0;((or[i>>1]=0)|(i=i+2|0))<(0|f););n=i=n+100|0,e=e+-1|0}while(0!=(0|e));e=0|ar[A>>2],f=(0|ar[a>>2])-e|0,i=o+(100*((0|f)/-100|0)|0)|0,0<(0|f)&&hb(0|i,0|e,0|f);if(ar[A>>2]=i,ar[a>>2]=n,ar[r>>2]=t,!e)return;vu(e)}(a,o-i|0),l=87;A:do{if(87==(0|l)){for(i=0;;){if(!(0|Zc(e,A,r,(0|ar[a>>2])+(100*i|0)|0,i,a,0))){i=1005;break}if((0|o)<=(0|(i=i+1|0)))break A}return 0|i}}while(0);l=255&(0|At(r,1)),tr[A+4732>>0]=l;do{if(l<<24>>24){if(-99999==(0|(i=0|it(r))))return er(e,8,0),0|(A=8);if(32<(0|(ar[(f=A+4736|0)>>2]=i)))return 0|(A=8);if(!(0<(0|i)))break;for(i=0;l=0|At(r,0|ar[c>>2]),ar[A+4740+(i<<2)>>2]=l,l=255&(0|At(r,1)),tr[A+4868+i>>0]=l,(0|(i=i+1|0))<(0|ar[f>>2]););}else ar[A+4736>>2]=0}while(0);l=255&(0|At(r,1)),tr[A+4900>>0]=l,l=255&(0|At(r,1)),tr[A+4901>>0]=l,l=255&(0|At(r,1)),(tr[A+4902>>0]=l)<<24>>24&&function(A,e,r,i){A|=0,e|=0,i|=0;var f,n,t=0,o=0,a=0,c=0;o=0!=(0|At(r|=0,1)),tr[A>>0]=1&o;do{if(o){if((0|(i=0|At(r,8)))<18){or[A+2>>1]=0|or[17796+(i<<2)>>1],i=0|or[17796+(i<<2)+2>>1];break}if(255==(0|i)){i=65535&(0|At(r,16)),or[A+2>>1]=i,i=65535&(0|At(r,16));break}or[A+2>>1]=0,i=0;break}or[A+2>>1]=0,i=0}while(0);or[A+4>>1]=i,o=0!=(0|At(r,1)),tr[A+6>>0]=1&o,o&&(o=0!=(0|At(r,1))&1,tr[A+7>>0]=o);if(ar[(i=A+12|0)>>2]=5,tr[(t=A+16|0)>>0]=0,tr[(f=A+18|0)>>0]=2,tr[(n=A+19|0)>>0]=2,tr[(o=A+20|0)>>0]=2,c=0!=(0|At(r,1)),tr[A+8>>0]=1&c,c&&(c=0|At(r,3),ar[i>>2]=(0|c)<5?c:5,c=0!=(0|At(r,1))&1,tr[t>>0]=c,c=0!=(0|At(r,1)),tr[A+17>>0]=1&c,c)){switch(i=0|At(r,8),c=255&i,(tr[f>>0]=c)<<24>>24){case 3:case 0:a=14;break;default:10<(255&i)>>>0&&(a=14)}switch(14==(0|a)&&(tr[f>>0]=2),i=0|At(r,8),c=255&i,(tr[n>>0]=c)<<24>>24){case 3:case 0:a=17;break;default:17<(254&i)>>>0&&(a=17)}17==(0|a)&&(tr[n>>0]=2),c=0|At(r,8),tr[o>>0]=9<((255&c)-1|0)>>>0?2:255&c}c=0!=(0|At(r,1)),tr[A+21>>0]=1&c;do{if(c){if(-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;if(tr[A+22>>0]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;i&=255;break}tr[A+22>>0]=0,i=0}while(0);if(tr[A+23>>0]=i,c=0!=(0|At(r,1))&1,tr[A+24>>0]=c,c=0!=(0|At(r,1))&1,tr[A+25>>0]=c,c=0!=(0|At(r,1))&1,tr[A+26>>0]=c,c=0!=(0|At(r,1)),tr[A+27>>0]=1&c,c){if(-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;if(ar[A+28>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;if(ar[A+32>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;if(ar[A+36>>2]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),c=8}else ar[A+28>>2]=0,ar[A+32>>2]=0,ar[A+36>>2]=0,i=0;ar[A+40>>2]=i,c=0!=(0|At(r,1)),tr[A+44>>0]=1&c,c&&(c=0|At(r,32),ar[A+48>>2]=c,c=0|At(r,32),ar[A+52>>2]=c);if(i=0!=(0|At(r,1))&1,tr[A+56>>0]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;if(ar[A+60>>2]=i+1,c=0!=(0|At(r,1)),tr[A+64>>0]=1&c,c)return c=502;c=0!=(0|At(r,1)),tr[A+65>>0]=1&c;do{if(c){if(i=0!=(0|At(r,1))&1,tr[A+66>>0]=i,i=0!=(0|At(r,1))&1,tr[A+67>>0]=i,i=0!=(0|At(r,1))&1,tr[A+68>>0]=i,-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;if(4095<(61440&(or[(t=A+70|0)>>1]=i))>>>0&&(er(e,8,0),or[t>>1]=0),-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;if(16<(255&(tr[(t=A+72|0)>>0]=i))>>>0&&(er(e,8,0),tr[t>>0]=2),-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;if(16<(255&(tr[(t=A+73|0)>>0]=i))>>>0&&(er(e,8,0),tr[t>>0]=1),-99999==(0|(i=0|it(r))))return er(e,8,0),c=8;if(15<(240&(tr[(t=A+74|0)>>0]=i))>>>0&&(er(e,8,0),tr[t>>0]=15),-99999==(0|(t=0|it(r))))return er(e,8,0),c=8;if(15<(240&(tr[(i=A+75|0)>>0]=t))>>>0){er(e,8,0);break}return c=0}tr[A+66>>0]=0,tr[A+67>>0]=1,tr[A+68>>0]=0,or[A+70>>1]=0,tr[A+72>>0]=2,tr[A+73>>0]=1,tr[A+74>>0]=15,i=A+75|0}while(0);tr[i>>0]=15,c=0}(A+4904|0,e,r,A),e=255&(0|At(r,1)),tr[A+4980>>0]=e;do{if(e<<24>>24){if(l=255&(0|At(r,1)),tr[(e=A+4981|0)>>0]=l,l=255&(0|At(r,1)),tr[A+4982>>0]=l,l=255&(0|At(r,6)),tr[A+4983>>0]=l,!(0|tr[e>>0]))break;ic(A+4984|0,0,r)}else tr[A+4981>>0]=0}while(0);return 0|(i=0|function(A){var e,r,i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;s=0|ar[476+(A|=0)>>2],a=0|ar[7988+(s<<2)>>2],ar[A+5016>>2]=a,c=0|ar[8004+(s<<2)>>2],ar[A+5020>>2]=c,d=0==(0|ar[A+5012>>2]),ar[A+5024>>2]=d?1:a,ar[A+5028>>2]=d?1:c,d=0|ar[A+512>>2],ar[A+4996>>2]=d,ar[A+5e3>>2]=(6*d|0)-48,e=0|ar[A+516>>2],ar[A+5004>>2]=e,ar[A+5008>>2]=(6*e|0)-48,r=0|ar[A+612>>2],ar[A+5036>>2]=r,i=(0|ar[A+616>>2])+r|0,ar[A+5040>>2]=i,f=1<<r,ar[A+5044>>2]=f,o=1<<i,ar[A+5048>>2]=o,n=0|ar[A+484>>2],b=(f-1+n|0)/(0|f)|0,ar[A+5052>>2]=b,l=(n-1+o|0)/(0|o)|0,ar[A+5056>>2]=l,t=0|ar[A+488>>2],k=((u=t-1|0)+f|0)/(0|f)|0,ar[A+5060>>2]=k,u=(u+o|0)/(0|o)|0,ar[A+5064>>2]=u,b=0|br(k,b),ar[A+5068>>2]=b,b=0|br(u,l),ar[A+5072>>2]=b,b=0|br(t,n),ar[A+5076>>2]=b,o=0!=(0|s)&&0==(0|tr[A+480>>0])?(ar[A+5080>>2]=(0|o)/(0|a)|0,(0|o)/(0|c)|0):(ar[A+5080>>2]=0,0);if(ar[A+5084>>2]=o,b=0|ar[A+620>>2],ar[A+5100>>2]=b,s=(0|ar[A+624>>2])+b|0,ar[A+5104>>2]=s,o=i-b|0,(0|ar[A+628>>2])>(0|o))return 0|(k=8);if((0|ar[A+632>>2])>(0|o))return 0|(k=8);k=r-1|0,ar[A+5108>>2]=k,k=i-k|0,ar[A+5112>>2]=l<<k,ar[A+5116>>2]=u<<k,k=0|ar[A+4708>>2],ar[A+5120>>2]=k,ar[A+5124>>2]=(0|ar[A+4712>>2])+k,k=l<<o,ar[A+5088>>2]=k,u<<=o,ar[A+5092>>2]=u,k=0|br(u,k),ar[A+5096>>2]=k,l=0|tr[A+4990>>0]?(a=o=0,c=1<<e-1,1<<d+-1):(o=248+e&255,a=d+248&255,c=128);if(tr[A+5156>>0]=a,tr[A+5157>>0]=o,ar[A+5160>>2]=l,ar[A+5164>>2]=c,(0|n)%(0|f)|0)return 0|(k=8);if(0!=((0|t)%(0|f)|0)|(0|r)<(0|b))return 0|(k=8);if((0|((0|i)<5?i:5))<(0|s)|8<(d+-8|0)>>>0|8<(e-8|0)>>>0)return 0|(k=8);return tr[A>>0]=1,(k=0)|k}(A))?0|(A=i):(tr[A>>0]=1,(A=0)|A)}}return 0}(r,A+4|0,e))?(A=e,Ac(r),ur=i,0|A):(-1<(0|(e=0|ar[A+516>>2]))&&function(A,e){A|=0;var r,i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z,j,H,x,P,L,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0,fA=0,nA=0,tA=0,oA=0,aA=0,cA=0,lA=0,uA=0,bA=0;switch(ur=(L=ur)+496|0,P=L+480|0,x=L+472|0,H=L+464|0,j=L+456|0,z=L+448|0,O=L+440|0,S=L+432|0,U=L+424|0,T=L+416|0,M=L+408|0,J=L+400|0,D=L+392|0,bA=L+384|0,Q=L+376|0,Y=L+368|0,_=L+360|0,N=L+344|0,lA=L+336|0,cA=L+328|0,F=L+320|0,V=L+312|0,y=L+304|0,p=L+296|0,Z=L+288|0,g=L+280|0,G=L+272|0,C=L+264|0,aA=L+256|0,I=L+248|0,W=L+240|0,X=L+232|0,h=L+224|0,k=L+216|0,d=L+208|0,s=L+200|0,oA=L+192|0,tA=L+184|0,E=L+176|0,B=L+168|0,m=L+160|0,v=L+152|0,w=L+144|0,nA=L+136|0,b=L+128|0,u=L+120|0,l=L+112|0,c=L+104|0,a=L+96|0,o=L+88|0,t=L+80|0,n=L+72|0,fA=L+64|0,f=L+56|0,i=L+48|0,r=L+40|0,rA=L+32|0,eA=L+24|0,AA=L+16|0,$=L+8|0,q=L,0|(e|=0)){case 1:K=10172;break;case 2:K=10676;break;default:return ur=L}switch(Pn(R=0|ar[K>>2],41865,q),ar[$>>2]=tr[A+1>>0],Pn(R,41906,$),iA=A+2|0,ar[AA>>2]=tr[iA>>0],Pn(R,41936,AA),ar[eA>>2]=tr[A+3>>0],Pn(R,41966,eA),function(A,e,r){e|=0;var i,f,n;{if(ur=(n=ur)+16|0,f=n,$n(A|=0,1,r|=0),i=e+-1|0,!(1<(0|e)))return ur=n;e=0}for(;ar[f>>2]=e,Pn(r,44849,f),$n(A+52+(52*e|0)|0,0,r),e=e+1|0,(0|e)!=(0|i););ur=n}(A+4|0,0|tr[iA>>0],R),ar[rA>>2]=ar[A+472>>2],Pn(R,42001,rA),0|(q=0|ar[(K=A+476|0)>>2])){case 0:$=42045;break;case 1:$=42056;break;case 2:$=42062;break;default:$=3==(0|q)?42031:42037}ar[r>>2]=q,ar[4+r>>2]=$,Pn(R,42068,r),3==(0|ar[K>>2])&&(ar[i>>2]=tr[A+480>>0],Pn(R,42103,i));ar[f>>2]=ar[A+484>>2],Pn(R,42136,f),ar[fA>>2]=ar[A+488>>2],Pn(R,42169,fA),fA=A+492|0,ar[n>>2]=tr[fA>>0],Pn(R,42202,n),0|tr[fA>>0]&&(ar[t>>2]=ar[A+496>>2],Pn(R,42235,t),ar[o>>2]=ar[A+500>>2],Pn(R,42263,o),ar[a>>2]=ar[A+504>>2],Pn(R,42291,a),ar[c>>2]=ar[A+508>>2],Pn(R,42319,c));if(ar[l>>2]=ar[A+512>>2],Pn(R,42347,l),ar[u>>2]=ar[A+516>>2],Pn(R,42370,u),ar[b>>2]=ar[A+520>>2],Pn(R,42393,b),K=A+524|0,ar[nA>>2]=tr[K>>0],Pn(R,42426,nA),nA=0|tr[iA>>0],(0|(K=0==(0|tr[K>>0])?(nA<<24>>24)-1|0:0))<(nA<<24>>24|0))for(;ar[s>>2]=K,Pn(R,42756,s),ar[d>>2]=ar[A+528+(K<<2)>>2],Pn(R,42766,d),ar[k>>2]=ar[A+556+(K<<2)>>2],Pn(R,42805,k),ar[h>>2]=ar[A+584+(K<<2)>>2],Pn(R,42844,h),K=K+1|0,(0|K)<(0|tr[iA>>0]););iA=A+612|0,ar[w>>2]=ar[iA>>2],Pn(R,42473,w),rA=A+616|0,ar[v>>2]=ar[rA>>2],Pn(R,42511,v),eA=A+620|0,ar[m>>2]=ar[eA>>2],Pn(R,42558,m),AA=A+624|0,ar[B>>2]=ar[AA>>2],Pn(R,42596,B),ar[E>>2]=ar[A+628>>2],Pn(R,42641,E),ar[tA>>2]=ar[A+632>>2],Pn(R,42683,tA),tA=A+636|0,ar[oA>>2]=tr[tA>>0],Pn(R,42725,oA),0|tr[tA>>0]&&(oA=A+637|0,ar[X>>2]=tr[oA>>0],Pn(R,42883,X),0|tr[oA>>0])&&Pn(R,42924,W);ar[I>>2]=tr[A+4702>>0],Pn(R,42968,I),ar[aA>>2]=tr[A+4703>>0],Pn(R,43010,aA),aA=A+4704|0,ar[C>>2]=tr[aA>>0],Pn(R,43052,C),0|tr[aA>>0]&&(ar[G>>2]=tr[A+4705>>0],Pn(R,43094,G),ar[g>>2]=tr[A+4706>>0],Pn(R,43130,g),ar[Z>>2]=ar[A+4708>>2],Pn(R,43166,Z),ar[p>>2]=ar[A+4712>>2],Pn(R,43208,p),ar[y>>2]=tr[A+4716>>0],Pn(R,43259,y));if(q=A+4720|0,$=A+4724|0,ar[V>>2]=((0|ar[$>>2])-(0|ar[q>>2])|0)/100|0,Pn(R,43295,V),(0|ar[$>>2])!=(0|ar[q>>2]))for(K=0;ar[cA>>2]=K,Pn(R,43367,cA),pc((0|ar[q>>2])+(100*K|0)|0,16,R),(K=K+1|0)>>>0<(((0|ar[$>>2])-(0|ar[q>>2])|0)/100|0)>>>0;);if(cA=A+4732|0,ar[F>>2]=tr[cA>>0],Pn(R,43329,F),0|tr[cA>>0]&&(uA=A+4736|0,ar[lA>>2]=ar[uA>>2],Pn(R,43388,lA),0<(0|ar[uA>>2])))for(K=0;cA=0|ar[A+4740+(K<<2)>>2],lA=0|tr[A+4868+K>>0],ar[N>>2]=K,ar[4+N>>2]=cA,ar[8+N>>2]=lA,Pn(R,43421,N),(0|(K=K+1|0))<(0|ar[uA>>2]););ar[_>>2]=tr[A+4900>>0],Pn(R,43490,_),ar[Y>>2]=tr[A+4901>>0],Pn(R,43531,Y),K=A+4902|0,ar[Q>>2]=tr[K>>0],Pn(R,43572,Q),ar[bA>>2]=tr[A+4980>>0],Pn(R,43613,bA),bA=A+4981|0,ar[D>>2]=tr[bA>>0],Pn(R,43649,D),ar[J>>2]=tr[A+4982>>0],Pn(R,43685,J),ar[M>>2]=tr[A+4983>>0],Pn(R,43721,M),ar[T>>2]=ar[A+5048>>2],Pn(R,43757,T),ar[U>>2]=ar[A+5044>>2],Pn(R,43776,U),ar[S>>2]=1<<(0|ar[rA>>2])+(0|ar[iA>>2]),Pn(R,43795,S),ar[O>>2]=1<<ar[eA>>2],Pn(R,43814,O),ar[z>>2]=1<<(0|ar[AA>>2])+(0|ar[eA>>2]),Pn(R,43833,z),ar[j>>2]=ar[A+5056>>2],Pn(R,43852,j),ar[H>>2]=ar[A+5064>>2],Pn(R,43882,H),ar[x>>2]=ar[A+5016>>2],Pn(R,43912,x),ar[P>>2]=ar[A+5020>>2],Pn(R,43942,P),0|tr[bA>>0]&&function(A,e){A|=0;var r,i,f,n,t,o,a,c,l,u,b;switch(ur=(b=ur)+80|0,a=b+72|0,o=b+64|0,t=b+56|0,n=b+48|0,f=b+40|0,u=b+32|0,l=b+24|0,c=b+16|0,i=b+8|0,r=b,0|(e|=0)){case 1:e=10172;break;case 2:e=10676;break;default:return ur=b}Pn(e=0|ar[e>>2],43972,r),ar[i>>2]=cr[A>>0],Pn(e,44029,i),ar[c>>2]=cr[A+1>>0],Pn(e,44075,c),ar[l>>2]=cr[A+2>>0],Pn(e,44121,l),ar[u>>2]=cr[A+3>>0],Pn(e,44167,u),ar[f>>2]=cr[A+4>>0],Pn(e,44213,f),ar[n>>2]=cr[A+5>>0],Pn(e,44259,n),ar[t>>2]=cr[A+6>>0],Pn(e,44305,t),ar[o>>2]=cr[A+7>>0],Pn(e,44351,o),ar[a>>2]=cr[A+8>>0],Pn(e,44397,a),ur=b}(A+4984|0,e);0|tr[K>>0]&&function(A,e){A|=0;var r,i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y=0,Q=0,D=0,J=0,M=0;switch(ur=(_=ur)+304|0,a=_+288|0,o=_+280|0,t=_+272|0,N=_+264|0,R=_+256|0,F=_+248|0,V=_+240|0,G=_+232|0,C=_+224|0,M=_+216|0,I=_+208|0,W=_+200|0,X=_+192|0,E=_+184|0,B=_+176|0,J=_+168|0,y=_+160|0,p=_+152|0,Z=_+144|0,g=_+136|0,m=_+128|0,v=_+120|0,w=_+112|0,h=_+104|0,k=_+96|0,d=_+88|0,D=_+80|0,s=_+72|0,b=_+64|0,u=_+56|0,l=_+48|0,c=_+40|0,f=_+32|0,Q=_+24|0,n=_+16|0,i=_+8|0,Y=_,0|(e|=0)){case 1:e=10172;break;case 2:e=10676;break;default:return ur=_}if(Pn(r=0|ar[e>>2],45969,Y),Y=0|lr[A+4>>1],ar[i>>2]=lr[A+2>>1],ar[4+i>>2]=Y,Pn(r,46010,i),ar[n>>2]=cr[A+6>>0],Pn(r,46046,n),ar[Q>>2]=cr[A+7>>0],Pn(r,46079,Q),Q=A+8|0,ar[f>>2]=cr[Q>>0],Pn(r,46112,f),0|tr[Q>>0]){switch(0|ar[A+12>>2]){case 0:e=45959;break;case 1:e=45955;break;case 2:e=45950;break;case 3:e=45944;break;case 4:e=45940;break;default:e=45928}ar[c>>2]=e,Pn(r,46148,c),ar[l>>2]=cr[A+16>>0],Pn(r,46184,l),ar[u>>2]=cr[A+17>>0],Pn(r,46220,u),ar[b>>2]=cr[A+18>>0],Pn(r,46260,b),ar[s>>2]=cr[A+19>>0],Pn(r,46296,s),ar[D>>2]=cr[A+20>>0],Pn(r,46332,D)}D=A+21|0,ar[d>>2]=cr[D>>0],Pn(r,46368,d),0|tr[D>>0]&&(ar[k>>2]=cr[A+22>>0],Pn(r,46402,k),ar[h>>2]=cr[A+23>>0],Pn(r,46445,h));ar[w>>2]=cr[A+24>>0],Pn(r,46488,w),ar[v>>2]=cr[A+25>>0],Pn(r,46524,v),ar[m>>2]=cr[A+26>>0],Pn(r,46560,m),ar[g>>2]=cr[A+27>>0],Pn(r,46596,g),ar[Z>>2]=ar[A+28>>2],Pn(r,46632,Z),ar[p>>2]=ar[A+32>>2],Pn(r,46668,p),ar[y>>2]=ar[A+36>>2],Pn(r,46704,y),ar[J>>2]=ar[A+40>>2],Pn(r,46740,J),J=A+44|0,ar[B>>2]=cr[J>>0],Pn(r,46776,B),0|tr[J>>0]&&(ar[E>>2]=ar[A+48>>2],Pn(r,46812,E),ar[X>>2]=ar[A+52>>2],Pn(r,46848,X));ar[W>>2]=cr[A+56>>0],Pn(r,46884,W),ar[I>>2]=ar[A+60>>2],Pn(r,46926,I),ar[M>>2]=cr[A+64>>0],Pn(r,46968,M),M=A+65|0,ar[C>>2]=cr[M>>0],Pn(r,47006,C),0|tr[M>>0]&&(ar[G>>2]=cr[A+66>>0],Pn(r,47047,G),ar[V>>2]=cr[A+67>>0],Pn(r,47088,V),ar[F>>2]=cr[A+68>>0],Pn(r,47136,F),ar[R>>2]=lr[A+70>>1],Pn(r,47177,R),ar[N>>2]=cr[A+72>>0],Pn(r,47218,N),ar[t>>2]=cr[A+73>>0],Pn(r,47259,t),ar[o>>2]=cr[A+74>>0],Pn(r,47300,o),ar[a>>2]=cr[A+75>>0],Pn(r,47341,a)),ur=_}(A+4904|0,e),ur=L}(r,e),hb(0|(f=A+11096+(5168*(e=0|ar[r+472>>2])|0)|0),0|r,4717),(0|f)!=(0|r)&&Ke(A+11096+(5168*e|0)+4720|0,0|ar[r+4720>>2],0|ar[r+4724>>2]),hb(A+11096+(5168*e|0)+4732|0,r+4732|0,436),f=0,Ac(r),ur=i,0|f)}function Ke(A,e,r){var i,f,n,t=0,o=0,a=0,c=0,l=0;if((a=(0|(c=(i=r|=0)-(e|=0)|0))/100|0)>>>0<=(((t=0|ar[(f=(A|=0)+8|0)>>2])-(n=l=0|ar[A>>2])|0)/100|0)>>>0)return 0|(t=(o=a=(A=(o=((0|ar[(c=A+4|0)>>2])-l|0)/100|0)>>>0<a>>>0)?e+(100*o|0)|0:r)-e|0)&&wb(0|l,0|e,0|t),r=n+(100*((0|t)/100|0)|0)|0,A?!((0|(t=i-o|0))<=0)&&(hb(0|ar[c>>2],0|a,0|t),void(ar[c>>2]=(0|ar[c>>2])+(100*((t>>>0)/100|0)|0))):(0|(t=0|ar[c>>2]))!=(0|r)&&void(ar[c>>2]=t+(100*~(((t+-100-r|0)>>>0)/100|0)|0));(o=l)&&((0|(r=0|ar[(t=A+4|0)>>2]))!=(0|n)&&(ar[t>>2]=r+(100*~(((r+-100-l|0)>>>0)/100|0)|0)),vu(o),ar[f>>2]=0,ar[t>>2]=0,t=ar[A>>2]=0),42949672<a>>>0&&zl(),t=(l=(0|t)/100|0)<<1,42949672<(t=l>>>0<21474836?t>>>0<a>>>0?a:t:42949672)>>>0&&zl(),r=0|hu(100*t|0),ar[(o=A+4|0)>>2]=r,ar[A>>2]=r,ar[f>>2]=r+(100*t|0),(0|c)<=0||(hb(0|r,0|e,0|c),ar[o>>2]=r+(100*((c>>>0)/100|0)|0))}function qe(A,e){A|=0,e|=0;var r,i,f,n=0;return ur=(f=ur)+4400|0,Ia(i=f),r=0|function(A,e,r){e|=0,r|=0;var i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;if(Ca(A|=0,0),u=0|it(e),63<(0|(tr[A+1>>0]=u))|-99999==(0|u))return er(r+4|0,1009,0),(r=0)|r;if(u=0|it(e),63<(0|(tr[(n=A+2|0)>>0]=u))|-99999==(0|u))return er(r+4|0,1010,0),(r=0)|r;if(u=255&(0|At(e,1)),tr[A+3>>0]=u,u=255&(0|At(e,1)),tr[A+31>>0]=u,u=255&(0|At(e,3)),tr[A+4132>>0]=u,u=255&(0|At(e,1)),tr[A+4>>0]=u,u=255&(0|At(e,1)),tr[A+5>>0]=u,u=0|it(e),i=255&u,tr[(f=A+6|0)>>0]=i,-99999==(0|u))return er(r+4|0,1006,0),(r=0)|r;if(tr[f>>0]=i+1<<24>>24,u=0|it(e),i=255&u,tr[(f=A+7|0)>>0]=i,-99999==(0|u))return er(r+4|0,1006,0),(r=0)|r;if(tr[f>>0]=i+1<<24>>24,l=0|tr[n>>0],!(0|tr[(u=r+11096+(5168*l|0)|0)>>0]))return er(r+4|0,1010,0),(r=0)|r;if(i=0|ft(e),-99999==(0|(ar[(f=A+8|0)>>2]=i)))return er(r+4|0,1006,0),(r=0)|r;if(ar[f>>2]=i+26,c=255&(0|At(e,1)),tr[A+12>>0]=c,c=255&(0|At(e,1)),tr[A+13>>0]=c,c=255&(0|At(e,1)),(tr[A+14>>0]=c)<<24>>24){if(c=0|it(e),-99999==(0|(ar[A+16>>2]=c)))return er(r+4|0,1006,0),(r=0)|r}else ar[A+16>>2]=0;if(c=0|ft(e),-99999==(0|(ar[A+20>>2]=c)))return er(r+4|0,1006,0),(r=0)|r;if(c=0|ft(e),-99999==(0|(ar[A+24>>2]=c)))return er(r+4|0,1006,0),(r=0)|r;if(a=255&(0|At(e,1)),tr[A+28>>0]=a,a=255&(0|At(e,1)),tr[A+29>>0]=a,a=255&(0|At(e,1)),tr[A+30>>0]=a,a=255&(0|At(e,1)),tr[A+32>>0]=a,a=255&(0|At(e,1)),tr[(c=A+34|0)>>0]=a,a=255&(0|At(e,1)),tr[A+33>>0]=a,0|tr[c>>0]){if(i=0|it(e),-99999==(0|(ar[(a=A+36|0)>>2]=i))|9<(0|i))return er(r+4|0,1006,0),(r=0)|r;if(ar[a>>2]=i+1,i=0|it(e),-99999==(0|(ar[(c=A+40|0)>>2]=i))|9<(0|i))return er(r+4|0,1006,0),(r=0)|r;ar[c>>2]=i+1,o=0|At(e,1),tr[A+44>>0]=o;do{if(!(255&o)){n=0|ar[r+11096+(5168*l|0)+5056>>2],f=0|ar[r+11096+(5168*l|0)+5064>>2],o=0|ar[a>>2],i=o+-1|0;A:do{if(1<(0|o)){for(o=0;i=0|it(e),-99999!=(0|(ar[(t=A+4172+(o<<2)|0)>>2]=i));)if(i=i+1|0,ar[t>>2]=i,n=n-i|0,o=o+1|0,(0|(i=(0|ar[a>>2])-1|0))<=(0|o))break A;return er(r+4|0,1006,0),(r=0)|r}}while(0);if((0|n)<1)return(r=0)|r;ar[A+4172+(i<<2)>>2]=n,a=0|ar[c>>2],i=a+-1|0;A:do{if(1<(0|a)){for(t=0;i=0|it(e),-99999!=(0|(ar[(n=A+4212+(t<<2)|0)>>2]=i));)if(i=i+1|0,ar[n>>2]=i,f=f-i|0,t=t+1|0,(0|(i=(0|ar[c>>2])-1|0))<=(0|t))break A;return er(r+4|0,1006,0),(r=0)|r}}while(0);if((0|f)<1)return(r=0)|r;ar[A+4212+(i<<2)>>2]=f;break}}while(0);i=255&(0|At(e,1))}else ar[A+36>>2]=1,ar[A+40>>2]=1,tr[A+44>>0]=1,i=0;tr[A+45>>0]=i,ar[(i=A+52|0)>>2]=0,ar[(n=A+56|0)>>2]=0,c=255&(0|At(e,1)),tr[A+46>>0]=c,c=255&(0|At(e,1)),tr[A+47>>0]=c;do{if(c<<24>>24){if(c=255&(0|At(e,1)),tr[A+48>>0]=c,c=255&(0|At(e,1)),!((tr[A+49>>0]=c)<<24>>24)){if(f=0|ft(e),-99999==(0|(ar[i>>2]=f)))return er(r+4|0,1006,0),(r=0)|r;if(ar[i>>2]=f<<1,i=0|ft(e),-99999==(0|(ar[n>>2]=i)))return er(r+4|0,1006,0),(r=0)|r;ar[n>>2]=i<<1;break}}else tr[A+48>>0]=0,tr[A+49>>0]=0}while(0);if(c=0|At(e,1),i=255&c,tr[A+60>>0]=i,0!=(255&c|0)&&0==(0|tr[r+11096+(5168*l|0)+636>>0]))return er(r+4|0,1006,0),(r=0)|r;if(i<<24>>24){if(0|(i=0|ec(e,u,A+61|0,1)))return er(r+4|0,i,0),(r=0)|r}else hb(A+61|0,r+11096+(5168*l|0)+638|0,4064);if(i=255&(0|At(e,1)),tr[A+4125>>0]=i,i=0|it(e),-99999==(0|(ar[(f=A+4128|0)>>2]=i)))return er(r+4|0,1006,0),(r=0)|r;if(ar[f>>2]=i+2,(0|i)>((0|ar[r+11096+(5168*l|0)+612>>2])-2+(0|ar[r+11096+(5168*l|0)+616>>2])|0))return(r=0)|r;return l=255&(0|At(e,1)),tr[A+4133>>0]=l,l=255&(0|At(e,1)),!((tr[A+4134>>0]=l)<<24>>24&&(c=255&(0|At(e,1)),tr[(l=A+4135|0)>>0]=c,c=255&(0|At(e,1)),tr[A+4136>>0]=c,c=255&(0|At(e,6)),tr[A+4137>>0]=c,0|tr[l>>0]))||0|function(A,e,r,i){A|=0,e|=0,r|=0;var f,n=0,t=0,o=0;f=0|tr[2+(i|=0)>>0],0|tr[i+13>>0]&&(t=2+(0|it(e))&255,tr[A>>0]=t);t=0!=(0|At(e,1)),tr[A+1>>0]=1&t,3==(0|ar[(n=r+11096+(5168*f|0)+5012|0)>>2])|1^t||er(r+4|0,1006,0);o=0!=(0|At(e,1)),i=1&o,tr[(t=A+2|0)>>0]=i,0!=(0|ar[n>>2])|1^o||(er(r+4|0,1006,0),i=0|tr[t>>0]);A:do{if(i<<24>>24){if(-99999!=(0|(i=0|it(e)))&&(0|i)<=(0|ar[r+11096+(5168*f|0)+616>>2])){if(tr[A+3>>0]=i,-99999==(0|(i=0|it(e)))|5<(0|i))return er(r+4|0,1006,0),(o=0)|o;if(o=i+1|0,!(255&(tr[(t=A+4|0)>>0]=o)))break;for(n=0;;){if(24<((i=0|ft(e))+12|0)>>>0){i=15;break}if(tr[A+5+n>>0]=i,24<((i=0|ft(e))+12|0)>>>0){i=17;break}if(tr[A+11+n>>0]=i,(0|(n=n+1|0))>=(0|cr[t>>0]))break A}if(15==(0|i))return er(r+4|0,1006,0),(o=0)|o;if(17==(0|i))return er(r+4|0,1006,0),(o=0)|o}return er(r+4|0,1006,0),(o=0)|o}}while(0);if(-99999!=(0|(i=0|it(e)))&&(o=0|ar[r+11096+(5168*f|0)+4996>>2],(0|i)<=(0|((0|o)<10?0:o+-10|0))))return tr[A+17>>0]=i,-99999!=(0|(i=0|it(e)))&&(o=0|ar[r+11096+(5168*f|0)+5004>>2],(0|i)<=(0|((0|o)<10?0:o+-10|0)))?(tr[A+18>>0]=i,0|(o=1)):(er(r+4|0,1006,0),(o=0)|o);return er(r+4|0,1006,0),(o=0)|o}(A+4138|0,e,r,A)?(function(A,e){A|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0;if(t=ur,y=0|ar[(n=5040+(e|=0)|0)>>2],ar[A+4160>>2]=y-(0|ar[A+16>>2]),ar[A+4164>>2]=y-(0|cr[A+4141>>0]),ar[A+4168>>2]=cr[A+4138>>0],y=A+36|0,0|tr[A+44>>0]){if(a=0|ar[y>>2],ur=(l=ur)+(15+(4+(a<<2)|0)&-16)|0,0<=(0|a)){for(c=0|ar[e+5056>>2],o=0;B=(0|br(c,o))/(0|a)|0,ar[l+(o<<2)>>2]=B,(0|o)!=(0|a);)o=o+1|0;if(0<(0|a))for(a=(o=0)|ar[l>>2];p=a,a=0|ar[l+((o=(B=o)+1|0)<<2)>>2],ar[A+4172+(B<<2)>>2]=a-p,(0|o)<(0|ar[y>>2]););}if(a=0|ar[(l=A+40|0)>>2],ur=(u=ur)+(15+(4+(a<<2)|0)&-16)|0,0<=(0|a)){for(c=0|ar[e+5064>>2],o=0;B=(0|br(c,o))/(0|a)|0,ar[u+(o<<2)>>2]=B,(0|o)!=(0|a);)o=o+1|0;if(0<(0|a))for(a=(o=0)|ar[u>>2];p=a,a=0|ar[u+((o=(B=o)+1|0)<<2)>>2],ar[A+4212+(B<<2)>>2]=a-p,(0|o)<(0|ar[l>>2]););}}if(ar[A+4252>>2]=0,0<(0|ar[y>>2]))for(a=o=0;a=(0|ar[A+4172+(o<<2)>>2])+a|0,ar[A+4252+((o=o+1|0)<<2)>>2]=a,(0|o)<(0|ar[y>>2]););if(ar[A+4296>>2]=0,0<(0|ar[(p=A+40|0)>>2]))for(a=o=0;o=(0|ar[A+4212+(a<<2)>>2])+o|0,ar[A+4296+((a=a+1|0)<<2)>>2]=o,(0|a)<(0|ar[p>>2]););B=A+4340|0,a=0|ar[(v=e+5072|0)>>2],u=0|ar[(o=A+4344|0)>>2],l=0|ar[B>>2],a>>>0<=(c=u-l>>2)>>>0?a>>>0<c>>>0&&(0|u)!=(0|(b=l+(a<<2)|0))&&(ar[o>>2]=u+(~((u+-4-b|0)>>>2)<<2)):(Va(B,a-c|0),a=0|ar[v>>2]);w=A+4352|0,l=0|ar[(u=A+4356|0)>>2],c=0|ar[w>>2],a>>>0<=(o=l-c>>2)>>>0?a>>>0<o>>>0&&(0|l)!=(0|(s=c+(a<<2)|0))&&(ar[u>>2]=l+(~((l+-4-s|0)>>>2)<<2)):(Va(w,a-o|0),a=0|ar[v>>2]);i=A+4364|0,u=0|ar[(o=A+4368|0)>>2],l=0|ar[i>>2],a>>>0<=(c=u-l>>2)>>>0?a>>>0<c>>>0&&(0|u)!=(0|(d=l+(a<<2)|0))&&(ar[o>>2]=u+(~((u+-4-d|0)>>>2)<<2)):(Va(i,a-c|0),a=0|ar[v>>2]);r=A+4376|0,u=0|ar[(o=A+4380|0)>>2],l=0|ar[r>>2],a>>>0<=(c=u-l>>2)>>>0?a>>>0<c>>>0&&(0|u)!=(0|(k=l+(a<<2)|0))&&(ar[o>>2]=u+(~((u+-4-k|0)>>>2)<<2)):Va(r,a-c|0);f=A+4388|0,o=0|ar[e+5096>>2],u=0|ar[(a=A+4392|0)>>2],l=0|ar[f>>2],o>>>0<=(c=u-l>>2)>>>0?o>>>0<c>>>0&&(0|u)!=(0|(h=l+(o<<2)|0))&&(ar[a>>2]=u+(~((u+-4-h|0)>>>2)<<2)):Va(f,o-c|0);A:do{if(0<(0|ar[v>>2])){for(d=e+5056|0,s=0;;){if(h=0|ar[d>>2],k=(0|s)%(0|h)|0,h=(0|s)/(0|h)|0,0<(0|(c=0|ar[y>>2])))for(a=0,o=-1;o=(0|k)<(0|ar[A+4252+(a<<2)>>2])?o:a,(0|(a=a+1|0))<(0|c););else o=-1;if(0<(0|(l=0|ar[p>>2])))for(c=0,a=-1;a=(0|h)<(0|ar[A+4296+(c<<2)>>2])?a:c,(0|(c=c+1|0))<(0|l););else a=-1;if(b=(0|ar[B>>2])+(s<<2)|0,(ar[b>>2]=0)<(0|o))for(u=A+4212+(a<<2)|0,c=l=0;c=c+(0|br(0|ar[A+4172+(l<<2)>>2],0|ar[u>>2]))|0,ar[b>>2]=c,(0|(l=l+1|0))!=(0|o););else c=0;if(0<(0|a))for(l=0;c=c+(0|br(0|ar[A+4212+(l<<2)>>2],0|ar[d>>2]))|0,ar[b>>2]=c,(0|(l=l+1|0))!=(0|a););if((a|o|0)<=-1)break;if(Z=c+(0|br(h-(0|ar[A+4296+(a<<2)>>2])|0,0|ar[A+4172+(o<<2)>>2]))|0,ar[b>>2]=Z,Z=k-(0|ar[A+4252+(o<<2)>>2])+Z|0,ar[b>>2]=Z,(0|(s=(ar[(0|ar[w>>2])+(Z<<2)>>2]=s)+1|0))>=(0|ar[v>>2]))break A}sr(37364,37385,618,37392)}}while(0);if(0<(0|(o=0|ar[p>>2]))){Z=e+5056|0,a=(c=l=0)|ar[y>>2];do{if(0<(0|a)){g=A+4296+(c<<2)|0,w=l,o=(v=0)|ar[(m=A+4296+((c=c+1|0)<<2)|0)>>2];do{if(u=0|ar[g>>2],v=(l=v)+1|0,(0|u)<(0|o)){k=A+4252+(l<<2)|0,a=0|ar[(h=A+4252+(v<<2)|0)>>2];do{if((0|(d=0|ar[k>>2]))<(0|a)){for(l=0|ar[B>>2],b=0|ar[i>>2],s=0|ar[r>>2],o=d;a=l+((0|br(0|ar[Z>>2],u))+o<<2)|0,ar[b+(ar[a>>2]<<2)>>2]=w,a=s+((0|br(0|ar[Z>>2],u))+o<<2)|0,ar[a>>2]=w,o=o+1|0,a=0|ar[h>>2],(0|o)<(0|a););o=0|ar[m>>2]}u=u+1|0}while((0|u)<(0|o));a=0|ar[y>>2]}w=w+1|0}while((0|v)<(0|a));l=w,o=0|ar[p>>2]}else c=c+1|0}while((0|c)<(0|o))}if((0|(o=0|ar[(k=e+5092|0)>>2]))<=0)return ur=t;w=e+5100|0,d=e+5056|0,a=0|ar[(h=e+5088|(s=0))>>2];do{if(0<(0|a)){u=0|ar[B>>2],b=0|ar[f>>2],l=0;do{if(e=0|ar[w>>2],A=0|ar[n>>2],y=u+((0|br(0|ar[d>>2],s<<e>>A))+(l<<e>>A)<<2)|0,o=b+((0|br(a,s))+l<<2)|0,ar[o>>2]=ar[y>>2]<<(A-e<<1),o=0|ar[n>>2],(0|(a=0|ar[w>>2]))<(0|o))for(c=o-a|0,o=a=0;o=(0==((e=1<<a)&s|0)?0:e<<1<<a)+o+(0==(e&l|0)?0:e<<a)|0,(0|(a=a+1|0))<(0|c););else o=0;a=b+((0|br(0|ar[h>>2],s))+l<<2)|0,ar[a>>2]=(0|ar[a>>2])+o,l=l+1|0,a=0|ar[h>>2]}while((0|l)<(0|a));o=0|ar[k>>2]}s=s+1|0}while((0|s)<(0|o));ur=t}(A,u),tr[A>>0]=1,0|(r=1)):(r=0)|r}(i,e,A),-1<(0|(e=0|ar[A+524>>2]))&&function(A,e){A|=0;var r,i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z,j,H,x,P=0,L=0,K=0,q=0,$=0,AA=0;switch(ur=(x=ur)+400|0,U=x+392|0,T=x+384|0,M=x+376|0,J=x+368|0,D=x+360|0,Q=x+352|0,Y=x+344|0,_=x+336|0,N=x+328|0,R=x+320|0,F=x+312|0,V=x+304|0,G=x+296|0,C=x+288|0,AA=x+280|0,H=x+272|0,j=x+264|0,$=x+256|0,z=x+248|0,O=x+240|0,S=x+232|0,I=x+224|0,W=x+216|0,X=x+208|0,B=x+200|0,y=x+192|0,p=x+184|0,Z=x+176|0,g=x+168|0,v=x+160|0,w=x+152|0,h=x+144|0,k=x+136|0,d=x+128|0,s=x+120|0,b=x+112|0,u=x+104|0,l=x+96|0,c=x+88|0,o=x+80|0,t=x+72|0,n=x+64|0,f=x+56|0,i=x+48|0,r=x+40|0,q=x+32|0,m=x+24|0,a=x+16|0,K=x+8|0,L=x,0|(e|=0)){case 1:P=10172;break;case 2:P=10676;break;default:return ur=x}Pn(E=0|ar[P>>2],37411,L),ar[K>>2]=tr[A+1>>0],Pn(E,37452,K),ar[a>>2]=tr[A+2>>0],Pn(E,37485,a),ar[m>>2]=tr[A+3>>0],Pn(E,37518,m),ar[q>>2]=tr[A+4>>0],Pn(E,37562,q),ar[r>>2]=tr[A+5>>0],Pn(E,37595,r),ar[i>>2]=tr[A+6>>0],Pn(E,37628,i),ar[f>>2]=tr[A+7>>0],Pn(E,37664,f),ar[n>>2]=ar[A+8>>2],Pn(E,37700,n),ar[t>>2]=tr[A+12>>0],Pn(E,37733,t),ar[o>>2]=tr[A+13>>0],Pn(E,37766,o),q=A+14|0,ar[c>>2]=tr[q>>0],Pn(E,37799,c),0|tr[q>>0]&&(ar[l>>2]=ar[A+16>>2],Pn(E,37832,l));if(ar[u>>2]=ar[A+20>>2],Pn(E,37865,u),ar[b>>2]=ar[A+24>>2],Pn(E,37900,b),ar[s>>2]=tr[A+28>>0],Pn(E,37935,s),ar[d>>2]=tr[A+29>>0],Pn(E,37982,d),ar[k>>2]=tr[A+30>>0],Pn(E,38017,k),ar[h>>2]=tr[A+31>>0],Pn(E,38052,h),ar[w>>2]=tr[A+32>>0],Pn(E,38087,w),q=A+34|0,ar[v>>2]=tr[q>>0],Pn(E,38122,v),ar[g>>2]=tr[A+33>>0],Pn(E,38157,g),0|tr[q>>0]){if(L=A+36|0,ar[Z>>2]=ar[L>>2],Pn(E,38195,Z),K=A+40|0,ar[p>>2]=ar[K>>2],Pn(E,38221,p),ar[y>>2]=tr[A+44>>0],Pn(E,38247,y),Pn(E,38273,B),0<=(0|ar[L>>2]))for(P=0;ar[I>>2]=ar[A+4252+(P<<2)>>2],Pn(E,38320,I),(0|P)<(0|ar[L>>2]);)P=P+1|0;if(Pn(E,45728,X),Pn(E,38298,W),0<=(0|ar[K>>2]))for(P=0;ar[z>>2]=ar[A+4296+(P<<2)>>2],Pn(E,38320,z),(0|P)<(0|ar[K>>2]);)P=P+1|0;Pn(E,45728,S),ar[O>>2]=tr[A+45>>0],Pn(E,38325,O)}ar[$>>2]=tr[A+46>>0],Pn(E,38369,$),$=A+47|0,ar[j>>2]=tr[$>>0],Pn(E,38417,j),0|tr[$>>0]&&(ar[H>>2]=tr[A+48>>0],Pn(E,38461,H),ar[AA>>2]=tr[A+49>>0],Pn(E,38506,AA),ar[C>>2]=ar[A+52>>2],Pn(E,38546,C),ar[G>>2]=ar[A+56>>2],Pn(E,38564,G));ar[V>>2]=tr[A+60>>0],Pn(E,38582,V),ar[F>>2]=tr[A+4125>>0],Pn(E,38622,F),ar[R>>2]=ar[A+4128>>2],Pn(E,38659,R),ar[N>>2]=tr[A+4132>>0],Pn(E,38696,N),ar[_>>2]=tr[A+4133>>0],Pn(E,38733,_),ar[Y>>2]=tr[A+4134>>0],Pn(E,38783,Y),AA=A+4135|0,ar[Q>>2]=tr[AA>>0],Pn(E,38819,Q),ar[D>>2]=tr[A+4136>>0],Pn(E,38855,D),ar[J>>2]=tr[A+4137>>0],Pn(E,38891,J),ar[M>>2]=ar[A+4160>>2],Pn(E,38927,M),ar[T>>2]=ar[A+4164>>2],Pn(E,38963,T),ar[U>>2]=ar[A+4168>>2],Pn(E,39004,U),0|tr[AA>>0]&&function(A,e){A|=0;var r,i,f,n,t,o,a,c,l,u,b=0,s=0,d=0;switch(ur=(u=ur)+80|0,l=u+72|0,c=u+64|0,a=u+56|0,o=u+48|0,n=u+40|0,s=u+32|0,t=u+24|0,b=u+16|0,f=u+8|0,i=u,0|(e|=0)){case 1:e=10172;break;case 2:e=10676;break;default:return ur=u}if(Pn(r=0|ar[e>>2],36905,i),ar[f>>2]=cr[A>>0],Pn(r,36948,f),ar[b>>2]=cr[A+1>>0],Pn(r,36994,b),b=A+2|0,ar[t>>2]=cr[b>>0],Pn(r,37040,t),0|tr[b>>0]&&(ar[s>>2]=cr[A+3>>0],Pn(r,37086,s),d=A+4|0,ar[n>>2]=cr[d>>0],Pn(r,37132,n),0|tr[d>>0]))for(e=0;s=0|tr[A+5+e>>0],ar[o>>2]=e,ar[4+o>>2]=s,Pn(r,37178,o),s=0|tr[A+11+e>>0],ar[a>>2]=e,ar[4+a>>2]=s,Pn(r,37225,a),(0|(e=e+1|0))<(0|cr[d>>0]););ar[c>>2]=cr[A+17>>0],Pn(r,37272,c),ar[l>>2]=cr[A+18>>0],Pn(r,37318,l),ur=u}(A+4138|0,e),ur=x}(i,e),r?(hb(0|(n=A+93784+(4400*(e=0|tr[i+1>>0])|0)|0),0|i,4340),ur=(n=((0|n)==(0|i)||($e(A+93784+(4400*e|0)+4340|0,0|ar[i+4340>>2],0|ar[i+4344>>2]),$e(A+93784+(4400*e|0)+4352|0,0|ar[i+4352>>2],0|ar[i+4356>>2]),$e(A+93784+(4400*e|0)+4364|0,0|ar[i+4364>>2],0|ar[i+4368>>2]),$e(A+93784+(4400*e|0)+4376|0,0|ar[i+4376>>2],0|ar[i+4380>>2]),$e(A+93784+(4400*e|0)+4388|0,0|ar[i+4388>>2],0|ar[i+4392>>2])),r?0:1006),Ga(i),f),0|n):(A=r?0:1006,Ga(i),ur=f,0|A)}function $e(A,e,r){var i,f,n,t=0,o=0,a=0,c=0,l=0;if((a=(c=(i=r|=0)-(e|=0)|0)>>2)>>>0<=(t=0|ar[(f=(A|=0)+8|0)>>2])-(n=l=0|ar[A>>2])>>2>>>0)return 0|(r=(t=(o=a=(A=(o=(0|ar[(c=A+4|0)>>2])-l>>2)>>>0<a>>>0)?e+(o<<2)|0:r)-e|0)>>2)&&wb(0|l,0|e,0|t),r=n+(r<<2)|0,A?!((0|(t=i-o|0))<=0)&&(hb(0|ar[c>>2],0|a,0|t),void(ar[c>>2]=(0|ar[c>>2])+(t>>>2<<2))):(0|(t=0|ar[c>>2]))!=(0|r)&&void(ar[c>>2]=t+(~((t+-4-r|0)>>>2)<<2));(o=l)&&((0|(r=0|ar[(t=A+4|0)>>2]))!=(0|n)&&(ar[t>>2]=r+(~((r+-4-l|0)>>>2)<<2)),vu(o),ar[f>>2]=0,ar[t>>2]=0,t=ar[A>>2]=0),1073741823<a>>>0&&zl(),l=t>>1,1073741823<(t=t>>2>>>0<536870911?l>>>0<a>>>0?a:l:1073741823)>>>0&&zl(),r=0|hu(t<<2),ar[(o=A+4|0)>>2]=r,ar[A>>2]=r,ar[f>>2]=r+(t<<2),(0|c)<=0||(hb(0|r,0|e,0|c),ar[o>>2]=r+(c>>>2<<2))}function Ar(A,e){e|=0;var r,i,f,n=0,t=0,o=0,a=0,c=0,l=0;r=(A|=0)+4|0,i=0|ar[A>>2],53687091<(n=(o=(0|(f=(0|ar[r>>2])-i|0))/80|0)+1|0)>>>0&&zl(),c=(a=((0|ar[(l=A+8|0)>>2])-i|0)/80|0)<<1,n=a>>>0<26843545?c>>>0<n>>>0?n:c:53687091;do{if(n){if(!(53687091<n>>>0)){t=0|hu(80*n|0);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else t=0}while(0);for(a=t+(80*n|0)|0,n=e,t=(o=c=t+(80*o|0)|0)+80|0;ar[o>>2]=ar[n>>2],n=n+4|0,(0|(o=o+4|0))<(0|t););n=c+(80*((0|f)/-80|0)|0)|0,0<(0|f)&&hb(0|n,0|i,0|f),ar[A>>2]=n,ar[r>>2]=c+80,ar[l>>2]=a,i&&vu(i)}function er(A,e,r){A|=0,e|=0,r|=0;var i=0,f=0;A:do{if(r){f=0|ar[(i=A+164|0)>>2];do{if(0<(0|f)){for(r=0;;){if((0|ar[A+84+(r<<2)>>2])==(0|e)){r=10;break}if((0|f)<=(0|(r=r+1|0))){r=5;break}}if(5==(0|r)){if((0|f)<20)break;break A}if(10==(0|r))return}}while(0);ar[i>>2]=f+1,ar[A+84+(f<<2)>>2]=e}}while(0);20==(0|(r=0|ar[(i=A+80|0)>>2]))?(e=1001,r=19):ar[i>>2]=r+1,ar[A+(r<<2)>>2]=e}function rr(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;if(ur=(t=ur)+16|0,f=t+4|0,b=t+8|0,n=t,s=0|hu(1356),o=s,ar[776+(o|=0)>>2]=0,ar[o+780>>2]=0,ar[o+784>>2]=0,st(o+1332|0),ar[o+1344>>2]=0,ar[o+1348>>2]=0,ar[o+1352>>2]=0,La(o),l=0|function(A,e,r,i){A|=0,e|=0,r|=0;var f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0;tr[(i|=0)>>0]=0,La(A),tr[(l=A+12|0)>>0]=0,w=255&(0|At(e,1)),tr[(c=A+4|0)>>0]=w,0|tr[r+377214>>0]&&(w=255&(0|At(e,1)),tr[A+5>>0]=w);if(w=0|it(e),64<(0|(ar[A+8>>2]=w))|-99999==(0|w))return er(r+4|0,1009,0),(i=0)|i;if(!(0|tr[r+93784+(4400*w|0)>>0]))return er(r+4|0,1009,0),(i=0)|i;if(n=0|tr[r+93784+(4400*w|0)+2>>0],!(0|tr[(u=r+11096+(5168*n|0)|0)>>0]))return er(r+4|0,1010,0),tr[i>>0]=0,(i=0)|i;if(0|tr[c>>0])o=t=0,h=23;else{for(t=0|tr[r+93784+(4400*w|0)+3>>0]?255&(0|At(e,1)):0,tr[l>>0]=t,o=0|ar[r+11096+(5168*n|0)+5072>>2],t=0;(1<<t|0)<(0|o);)t=t+1|0;if(t=0|At(e,t),0|tr[l>>0]){if(!t)return tr[i>>0]=0,er(r+4|0,1021,0),(i=0)|i;if(!(o=0|ar[r+376228>>2]))return 0|(i=16);hb(0|A,0|o,776),(a=(0|o)==(0|A))||$e(A+776|0,0|ar[o+776>>2],0|ar[o+780>>2]),hb(A+788|0,o+788|0,544),gt(A+1332|0,o+1332|0),tr[A+1340>>0]=0|tr[o+1340>>0],a||$e(A+1344|0,0|ar[o+1344>>2],0|ar[o+1348>>2]),tr[c>>0]=0,o=1,h=23}else o=0}23==(0|h)&&(tr[l>>0]=o);if(0<=(0|(ar[(f=A+16|0)>>2]=t))&&(0|t)<(0|ar[r+11096+(5168*n|0)+5072>>2])){if(!(o<<24>>24)){if(0<(0|tr[(o=r+93784+(4400*w|0)+4132|0)>>0]))for(t=0;et(e,1),(0|(t=t+1|0))<(0|tr[o>>0]););if(s=0|it(e),2<(0|(ar[(d=A+20|0)>>2]=s))|-99999==(0|s))return er(r+4|0,1007,0),tr[i>>0]=0,(i=0)|i;if(t=0|tr[r+93784+(4400*w|0)+31>>0]?255&(0|At(e,1)):1,tr[A+24>>0]=t,1==(0|tr[r+11096+(5168*n|0)+480>>0])&&(s=255&(0|At(e,2)),tr[A+25>>0]=s),ar[(t=A+28|0)>>2]=0,(((tr[(o=A+32|0)>>0]=0)|tr[r+377212>>0])-19&255)<2)ar[t>>2]=0,ar[A+140>>2]=0,ar[A+144>>2]=0,t=0;else{b=0|At(e,0|ar[(s=r+11096+(5168*n|0)+520|0)>>2]),ar[t>>2]=b,b=255&(0|At(e,1)),tr[o>>0]=b;do{if(b<<24>>24){for(a=r+11096+(5168*n|0)+4720|0,t=0|ar[(u=r+11096+(5168*n|0)+4724|0)>>2],c=0|ar[a>>2],l=(t-c|0)/100|0,o=0;(1<<o|0)<(0|l);)o=o+1|0;if(0<(0|o)?(c=0|At(e,o),o=0|ar[a>>2],t=0|ar[u>>2]):(o=c,c=0),(0|(ar[A+136>>2]=c))<((t-o|0)/100|0)){for(ar[A+808>>2]=c,t=o+(100*c|0)|0,o=(a=A+812|0)+100|0;or[a>>1]=0|or[t>>1],t=t+2|0,(0|(a=a+2|0))<(0|o););break}return er(r+4|0,1015,0),0|(i=8)}for(a=r+11096+(5168*n|0)+4720|0,Zc(r+4|0,u,e,t=A+34|0,((0|ar[(o=r+11096+(5168*n|0)+4724|0)>>2])-(0|ar[a>>2])|0)/100|0,a,1),ar[A+808>>2]=((0|ar[o>>2])-(0|ar[a>>2])|0)/100|0,o=(a=A+812|0)+100|0;or[a>>1]=0|or[t>>1],t=t+2|0,(0|(a=a+2|0))<(0|o););}while(0);A:do{if(0|tr[r+11096+(5168*n|0)+4732>>0]){l=r+11096+(5168*n|0)+4736|0;do{if(0<(0|ar[l>>2])){if(b=0|it(e),-99999!=(0|(ar[A+140>>2]=b)))break;return 0|(t=8)}ar[A+140>>2]=0}while(0);if(t=0|it(e),-99999==(0|(ar[(u=A+144|0)>>2]=t)))return 0|(i=8);if(o=0|ar[(b=A+140|0)>>2],((t=o+t|0)+(0|cr[A+908>>0])+(0|cr[A+909>>0])|0)>(0|ar[r+11096+(5168*n|0)+528+((0|tr[r+11096+(5168*n|0)+2>>0])-1<<2)>>2]))return er(r+4|0,1018,0),tr[i>>0]=0,(i=0)|i;if(!(0<(0|t))){t=0;break}for(c=t=0;;){if((0|c)<(0|o)){for(a=0|ar[l>>2],o=0;(1<<o|0)<(0|a);)o=o+1|0;if(a=0|At(e,o),tr[(o=A+148+c|0)>>0]=a,(0|(a&=255))>=(0|ar[l>>2]))break;ar[r+376232+(c<<2)>>2]=ar[r+11096+(5168*n|0)+4740+(a<<2)>>2],o=(0|cr[o>>0])+(r+11096+(5168*n|0)+4868)|0}else v=0|At(e,0|ar[s>>2]),ar[(a=A+164+(c<<2)|0)>>2]=v,v=255&(0|At(e,1)),tr[(o=A+228+c|0)>>0]=v,ar[r+376232+(c<<2)>>2]=ar[a>>2];if(v=0|tr[o>>0],ar[r+376296+(c<<2)>>2]=v<<24>>24,t=(v<<24>>24!=0&1)+t|0,v=255&(0|At(e,1)),(tr[A+244+c>>0]=v)<<24>>24){if(o=0|it(e),-99999==(0|(ar[A+260+(c<<2)>>2]=o))){t=8,h=189;break}}else ar[A+260+(c<<2)>>2]=0,o=0;do{if(c){if((0|c)==(0|ar[b>>2]))break;o=(0|ar[r+376360+(c+-1<<2)>>2])+o|0}}while(0);if(ar[r+376360+(c<<2)>>2]=o,c=c+1|0,o=0|ar[b>>2],(0|c)>=((0|ar[u>>2])+o|0))break A}return 189==(0|h)?0|t:(er(r+4|0,1023,0),tr[i>>0]=0,(v=0)|v)}ar[A+140>>2]=0,ar[A+144>>2]=0,t=0}while(0);o=0|tr[r+11096+(5168*n|0)+4900>>0]?255&(0|At(e,1)):0,tr[A+324>>0]=o}o=0|tr[r+11096+(5168*n|0)+4703>>0]?(v=255&(0|At(e,1)),tr[A+325>>0]=v,0|ar[r+11096+(5168*n|0)+5012>>2]?255&(0|At(e,1)):0):tr[A+325>>0]=0,tr[(u=A+326|0)>>0]=o,ar[(c=A+328|0)>>2]=0,ar[(l=A+332|0)>>2]=0;do{if((0|ar[d>>2])>>>0<2){v=255&(0|At(e,1)),tr[A+327>>0]=v;do{if(v<<24>>24){if(o=0|it(e),-99999==(0|(ar[c>>2]=o)))return er(r+4|0,1007,0),0|(v=8);if(o=o+1|0,ar[c>>2]=o,0|ar[d>>2])break;if(a=0|it(e),-99999==(0|(ar[l>>2]=a)))return er(r+4|0,1007,0),0|(v=8);o=0|ar[c>>2],a=a+1|0,h=86;break}o=0|tr[r+93784+(4400*w|0)+6>>0],ar[c>>2]=o,a=0|tr[r+93784+(4400*w|0)+7>>0],h=86}while(0);if(86==(0|h)&&(ar[l>>2]=a),16<(0|o))return 0|(v=8);if(16<(0|ar[l>>2]))return 0|(v=8);t=(0|cr[A+911>>0])+t|0,ar[A+912>>2]=t;do{if(1<(0|t)&&0!=(0|tr[r+93784+(4400*w|0)+4125>>0])){for(o=0;(1<<o|0)<(0|t);)o=o+1|0;v=255&(0|At(e,1)),tr[A+336>>0]=v;do{if(v<<24>>24){if(!(0<(0|ar[c>>2])))break;for(t=0;v=255&(0|At(e,o)),tr[A+338+t>>0]=v,(0|(t=t+1|0))<(0|ar[c>>2]););}}while(0);if(0|ar[d>>2]){tr[A+337>>0]=0;break}if(v=255&(0|At(e,1)),!((tr[A+337>>0]=v)<<24>>24))break;if(!(0<(0|ar[l>>2])))break;for(t=0;v=255&(0|At(e,o)),tr[A+354+t>>0]=v,(0|(t=t+1|0))<(0|ar[l>>2]););}else tr[A+336>>0]=0,tr[A+337>>0]=0}while(0);0|ar[d>>2]||(v=255&(0|At(e,1)),tr[A+370>>0]=v),t=0|tr[r+93784+(4400*w|0)+5>>0]?255&(0|At(e,1)):0,tr[A+371>>0]=t;do{if(0|tr[A+324>>0]){do{if(0|ar[d>>2])tr[(o=A+372|0)>>0]=1,t=1,h=108;else{if(t=255&(0|At(e,1)),(tr[(o=A+372|0)>>0]=t)<<24>>24){h=108;break}h=1<(0|ar[l>>2])?110:(t=0,113)}}while(0);108==(0|h)&&(h=1<(0|ar[c>>2])?110:113);do{if(110==(0|h)){if(a=0|it(e),-99999==(0|(ar[A+376>>2]=a)))return er(r+4|0,1007,0),0|(v=8);t=0|tr[o>>0];break}113==(0|h)&&(ar[A+376>>2]=0,a=0)}while(0);if(t<<24>>24){if((0|a)<(0|ar[c>>2]))break}else if((0|a)<(0|ar[l>>2]))break;return er(r+4|0,8,0),0|(v=8)}}while(0);h=0!=(0|tr[r+93784+(4400*w|0)+29>>0])&&1==(0|ar[d>>2])?122:120;do{if(120==(0|h)){if(!(0|tr[r+93784+(4400*w|0)+30>>0]))break;0|ar[d>>2]||(h=122)}}while(0);do{if(122==(0|h)){if(0|Pa(e,A,r))break;return er(r+4|0,8,0),0|(v=8)}}while(0);if(t=0|it(e),-99999==(0|(ar[A+736>>2]=t)))return er(r+4|0,1007,0),0|(v=8);ar[A+804>>2]=5-t;break}}while(0);if(v=0|ft(e),-99999==(0|(ar[A+740>>2]=v)))return er(r+4|0,1007,0),0|(v=8);do{if(0|tr[r+93784+(4400*w|0)+28>>0]){if(v=0|ft(e),-99999==(0|(ar[A+744>>2]=v)))return er(r+4|0,1007,0),0|(v=8);if(v=0|ft(e),-99999!=(0|(ar[A+748>>2]=v)))break;return er(r+4|0,1007,0),0|(v=8)}ar[A+744>>2]=0,ar[A+748>>2]=0}while(0);0|tr[r+93784+(4400*w|0)+4140>>0]&&(v=255&(0|At(e,1)),tr[A+752>>0]=v),t=0|tr[r+93784+(4400*w|0)+48>>0]?255&(0|At(e,1)):0,tr[A+753>>0]=t,ar[(o=A+756|0)>>2]=ar[r+93784+(4400*w|0)+52>>2],ar[(a=A+760|0)>>2]=ar[r+93784+(4400*w|0)+56>>2];do{if(t<<24>>24){if(v=255&(0|At(e,1)),(tr[A+754>>0]=v)<<24>>24)break;if(t=0|ft(e),-99999==(0|(ar[o>>2]=t)))return er(r+4|0,1007,0),0|(v=8);if(ar[o>>2]=t<<1,t=0|ft(e),-99999==(0|(ar[a>>2]=t)))return er(r+4|0,1007,0),0|(v=8);ar[a>>2]=t<<1;break}tr[A+754>>0]=0|tr[r+93784+(4400*w|0)+49>>0]}while(0);t=0|tr[r+93784+(4400*w|0)+46>>0];A:do{if(t<<24>>24){do{if(!(0|tr[A+325>>0])){if(0|tr[u>>0])break;if(0|tr[A+754>>0])break A}}while(0);t=255&(0|At(e,1))}else t=0}while(0);tr[A+764>>0]=t}0==(0|tr[(o=r+93784+(4400*w|0)+34|0)>>0])&&0==(0|tr[r+93784+(4400*w|0)+33>>0])?ar[A+768>>2]=0:h=155;A:do{if(155==(0|h)){if(t=0|it(e),-99999==(0|(ar[(b=A+768|0)>>2]=t)))return er(r+4|0,1007,0),0|(v=8);if(0|tr[r+93784+(4400*w|0)+33>>0]&&(((0|ar[f>>2])/(0|ar[r+11096+(5168*n|0)+5056>>2])|0)+t|0)>=(0|ar[r+11096+(5168*n|0)+5064>>2]))return er(r+4|0,1007,0),0|(v=8);if(0|tr[o>>0]&&(0|t)>(0|br(0|ar[r+93784+(4400*w|0)+40>>2],0|ar[r+93784+(4400*w|0)+36>>2])))return er(r+4|0,1007,0),0|(v=8);if(u=A+776|0,l=0|ar[(o=A+780|0)>>2],c=0|ar[u>>2],t>>>0<=(a=l-c>>2)>>>0?t>>>0<a>>>0&&(0|l)!=(0|(k=c+(t<<2)|0))&&(ar[o>>2]=l+(~((l+-4-k|0)>>>2)<<2)):(Va(u,t-a|0),t=0|ar[b>>2]),0<(0|t)){if(t=0|it(e),-99999==(0|(ar[(l=A+772|0)>>2]=t)))return er(r+4|0,1007,0),0|(v=8);if(o=t+1|0,ar[l>>2]=o,31<(0|t))return 0|(v=8);if(0<(0|ar[b>>2]))for(t=0;;){if(o=1+(0|At(e,o))|0,a=0|ar[u>>2],ar[(c=a+(t<<2)|0)>>2]=o,0<(0|t)&&(ar[c>>2]=o+(0|ar[a+(t+-1<<2)>>2])),(0|(t=t+1|0))>=(0|ar[b>>2]))break A;o=0|ar[l>>2]}}}}while(0);do{if(0|tr[r+93784+(4400*w|0)+4133>>0]){if(t=0|it(e),-99999==(0|(ar[(o=A+788|0)>>2]=t))|1e3<(0|t))return er(r+4|0,1007,0),0|(v=8);if(!(0<(0|t)))break;for(t=0;At(e,8),(0|(t=t+1|0))<(0|ar[o>>2]););}}while(0);switch(ar[A+792>>2]=(0|ar[A+740>>2])+(0|ar[r+93784+(4400*w|0)+8>>2]),0|ar[A+20>>2]){case 2:t=0,h=187;break;case 1:t=1+(0|tr[A+371>>0])|0,h=187;break;case 0:t=2-(0|tr[A+371>>0])|0,h=187}return 187==(0|h)&&(ar[A+796>>2]=t),ar[A+804>>2]=5-(0|ar[A+736>>2]),tr[i>>0]=1,(v=0)|v}return er(r+4|0,1020,0),0|(v=8)}(s,e,A,b),ar[n>>2]=l,!(0|tr[b>>0]))return 0|(a=0|ar[A+376224>>2])&&(tr[a+10516>>0]=2),Ba(A+548|0,r),0|(a=0|ar[s+1344>>2])&&((0|(c=0|ar[(i=s+1348|0)>>2]))!=(0|a)&&(ar[i>>2]=c+(~((c+-4-a|0)>>>2)<<2)),vu(a)),kt(s+1332|0),0|(a=0|ar[s+776>>2])&&((0|(c=0|ar[(i=s+780|0)>>2]))!=(0|a)&&(ar[i>>2]=c+(~((c+-4-a|0)>>>2)<<2)),vu(a)),vu(s),ur=t,0|(s=l);if(-1<(0|(a=0|ar[A+528>>2]))&&function(A,e,r){A|=0,e|=0;var i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0;switch(ur=(D=ur)+448|0,Q=D+432|0,iA=D+424|0,Y=D+416|0,N=D+408|0,R=D+400|0,F=D+392|0,V=D+384|0,rA=D+376|0,I=D+368|0,W=D+360|0,X=D+352|0,E=D+344|0,B=D+328|0,y=D+312|0,p=D+296|0,Z=D+280|0,G=D+264|0,C=D+248|0,eA=D+240|0,m=D+232|0,v=D+224|0,w=D+216|0,h=D+208|0,k=D+200|0,d=D+192|0,$=D+184|0,q=D+176|0,K=D+168|0,L=D+160|0,P=D+152|0,x=D+144|0,b=D+136|0,u=D+128|0,l=D+120|0,c=D+112|0,a=D+104|0,o=D+96|0,H=D+88|0,t=D+80|0,j=D+72|0,n=D+64|0,f=D+56|0,i=D+48|0,U=D+40|0,z=D+32|0,O=D+24|0,S=D+16|0,T=D+8|0,J=D,0|(r|=0)){case 1:r=10172;break;case 2:r=10676;break;default:return ur=D}_=0|ar[r>>2],g=0|ar[(M=A+8|0)>>2],0|tr[e+93784+(4400*g|0)>>0]||sr(39698,39242,1278,39712);s=0|tr[e+93784+(4400*g|0)+2>>0],0|tr[e+11096+(5168*s|0)>>0]||sr(39738,39242,1281,39712);Pn(_,39752,J),r=A+4|0,ar[T>>2]=tr[r>>0],Pn(_,39795,T),(-8&tr[(J=e+377212|0)>>0])<<24>>24==16&&(ar[S>>2]=tr[A+5>>0],Pn(_,39838,S));ar[O>>2]=ar[M>>2],Pn(_,39881,O),0|tr[r>>0]||(ar[z>>2]=tr[A+12>>0],Pn(_,39924,z),ar[U>>2]=ar[A+16>>2],Pn(_,39967,U));z=0|ar[(O=A+20|0)>>2],ar[i>>2]=0==(0|z)?66:1==(0|z)?80:73,Pn(_,40010,i),0|tr[e+93784+(4400*g|0)+31>>0]&&(ar[f>>2]=tr[A+24>>0],Pn(_,40053,f));1==(0|tr[e+11096+(5168*s|0)+480>>0])&&(ar[n>>2]=tr[A+25>>0],Pn(_,40096,n));ar[j>>2]=ar[A+28>>2],Pn(_,40139,j),2<=((0|tr[J>>0])-19&255)&&(j=A+32|0,ar[t>>2]=tr[j>>0],Pn(_,40182,t),r=e+11096+(5168*s|0)+4720|0,J=(0|ar[e+11096+(5168*s|0)+4724>>2])-(0|ar[r>>2])|0,0|tr[j>>0]?100<(0|J)&&(H=A+136|0,ar[o>>2]=ar[H>>2],Pn(_,40225,o),pc((0|ar[r>>2])+(100*(0|ar[H>>2])|0)|0,16,_)):(ar[H>>2]=(0|J)/100|0,Pn(_,43367,H),pc(A+34|0,16,_)),0|tr[e+11096+(5168*s|0)+4732>>0]&&(0<(0|ar[e+11096+(5168*s|0)+4736>>2])&&(ar[a>>2]=ar[A+140>>2],Pn(_,40268,a)),ar[c>>2]=ar[A+144>>2],Pn(_,40315,c)),0|tr[e+11096+(5168*s|0)+4900>>0]&&(ar[l>>2]=tr[A+324>>0],Pn(_,40362,l)));0|tr[e+11096+(5168*s|0)+4703>>0]&&(ar[u>>2]=tr[A+325>>0],Pn(_,40400,u),ar[b>>2]=tr[A+326>>0],Pn(_,40438,b));if((0|ar[O>>2])>>>0<2){if(r=A+327|0,ar[x>>2]=tr[r>>0],Pn(_,40476,x),S=A+328|0,x=0|tr[r>>0]?79659:40515,ar[P>>2]=ar[S>>2],ar[P+4>>2]=x,Pn(_,40526,P),0|ar[O>>2]||(P=0|tr[r>>0]?79659:40515,ar[L>>2]=ar[A+332>>2],ar[L+4>>2]=P,Pn(_,40566,L)),0|tr[e+93784+(4400*g|0)+4125>>0]&&1<(0|ar[A+912>>2])){if(L=A+336|0,ar[K>>2]=tr[L>>0],Pn(_,40606,K),0|tr[L>>0]&&0<(0|ar[S>>2]))for(r=0;K=0|cr[A+338+r>>0],ar[q>>2]=r,ar[q+4>>2]=K,Pn(_,40646,q),(0|(r=r+1|0))<(0|ar[S>>2]););if(q=A+337|0,ar[$>>2]=tr[q>>0],Pn(_,40656,$),0|tr[q>>0]&&0<(0|ar[(AA=A+332|0)>>2]))for(r=0;$=0|cr[A+354+r>>0],ar[d>>2]=r,ar[4+d>>2]=$,Pn(_,40646,d),(0|(r=r+1|0))<(0|ar[AA>>2]););}0|ar[O>>2]||(ar[k>>2]=tr[A+370>>0],Pn(_,40696,k)),ar[h>>2]=tr[A+371>>0],Pn(_,40733,h),0|tr[A+324>>0]&&(ar[w>>2]=tr[A+372>>0],Pn(_,40770,w),ar[v>>2]=ar[A+376>>2],Pn(_,40807,v)),45==(0|(U=0!=(0|tr[e+93784+(4400*g|0)+29>>0])&&1==(0|ar[O>>2])?47:45))&&0|tr[e+93784+(4400*g|0)+30>>0]&&0==(0|ar[O>>2])&&(U=47);A:do{if(47==(0|U)){ar[m>>2]=cr[A+380>>0],Pn(_,40844,m),0|ar[e+11096+(5168*s|0)+476>>2]&&(ar[eA>>2]=cr[A+381>>0],Pn(_,40881,eA)),T=A+332|0,M=0;do{r=0==(0|M);do{if(r)U=53;else{if(1!=(0|M))break;if(0|ar[O>>2])break A;U=53}}while(0);do{if(53==(0|U)){if(!((U=0)<(0|(J=0|ar[(r?S:T)>>2]))))break;for(r=0;eA=0|or[A+446+(M<<5)+(r<<1)>>1],ar[C>>2]=M,ar[4+C>>2]=r,ar[8+C>>2]=eA,Pn(_,40918,C),eA=0|tr[A+510+(M<<4)+r>>0],ar[G>>2]=M,ar[4+G>>2]=r,ar[8+G>>2]=eA,Pn(_,40955,G),eA=0|or[A+542+(M<<6)+(r<<2)>>1],ar[Z>>2]=M,ar[4+Z>>2]=r,ar[8+Z>>2]=0,ar[12+Z>>2]=eA,Pn(_,40992,Z),eA=0|tr[A+670+(M<<5)+(r<<1)>>0],ar[p>>2]=M,ar[4+p>>2]=r,ar[8+p>>2]=0,ar[12+p>>2]=eA,Pn(_,41030,p),eA=0|or[A+542+(M<<6)+(r<<2)+2>>1],ar[y>>2]=M,ar[4+y>>2]=r,ar[8+y>>2]=1,ar[12+y>>2]=eA,Pn(_,40992,y),eA=0|tr[A+670+(M<<5)+(r<<1)+1>>0],ar[B>>2]=M,ar[4+B>>2]=r,ar[8+B>>2]=1,ar[12+B>>2]=eA,Pn(_,41030,B),(0|(r=r+1|0))!=(0|J););}}while(0);M=M+1|0}while(2!=(0|M))}}while(0);ar[E>>2]=ar[A+736>>2],Pn(_,41068,E)}ar[X>>2]=ar[A+740>>2],Pn(_,41105,X),0|tr[e+93784+(4400*g|0)+28>>0]&&(ar[W>>2]=ar[A+744>>2],Pn(_,41134,W),ar[I>>2]=ar[A+748>>2],Pn(_,41163,I));J=A+753|0,0|tr[e+93784+(4400*g|0)+48>>0]&&(ar[rA>>2]=tr[J>>0],Pn(_,41192,rA));r=A+754|0,rA=0|tr[J>>0]?41230:41241,ar[V>>2]=tr[r>>0],ar[4+V>>2]=rA,Pn(_,41252,V),0|tr[J>>0]&&0==(0|tr[r>>0])&&(ar[F>>2]=ar[A+756>>2],Pn(_,41299,F),ar[R>>2]=ar[A+760>>2],Pn(_,41324,R));do{if(0|tr[e+93784+(4400*g|0)+46>>0]){if(0==(0|tr[A+325>>0])&&0==(0|tr[A+326>>0])&&0|tr[r>>0])break;ar[N>>2]=tr[A+764>>0],Pn(_,41349,N)}}while(0);if(0==(0|tr[e+93784+(4400*g|0)+34>>0])&&0==(0|tr[e+93784+(4400*g|0)+33>>0]))return ur=D;if(M=A+768|0,ar[Y>>2]=ar[M>>2],Pn(_,41400,Y),(0|ar[M>>2])<=0)return ur=D;if(ar[iA>>2]=ar[A+772>>2],Pn(_,41433,iA),(0|ar[M>>2])<=0)return ur=D;J=A+776|0,r=0;for(;iA=0|ar[(0|ar[J>>2])+(r<<2)>>2],ar[Q>>2]=r,ar[4+Q>>2]=iA,Pn(_,41466,Q),r=r+1|0,(0|r)<(0|ar[M>>2]););ur=D}(s,A,a),u=0|function(A,e,r,i,f,n,t,o){A|=0,e|=0,r|=0,f|=0,n|=0,t|=0,o|=0;var a,c,l=0,u=0,b=0,s=0,d=0;ur=(c=ur)+16|0,l=c,ar[(i|=0)>>2]=0,tr[A+377228>>0]=0,u=0|ar[r+8>>2],0|tr[(b=e+93784+(4400*u|0)|0)>>0]||(ar[l>>2]=u,function(A,e,r){A|=0,e|=0,r|=0;var i,f,n;if(ur=(n=ur)+16|0,i=n,!(-9999<=(0|ar[14391])&!0))return ur=n;f=42==(0|tr[e>>0]),A=0|ar[2543],f||Ui(44499,5,1,A);ar[i>>2]=r,Qc(A,e+(1&f)|0,i),Oi(A),ur=n}(1,34889,l),sr(55739,34700,1987,34915));if(ar[(s=e+375392|0)>>2]=b,d=0|tr[e+93784+(4400*u|0)+2>>0],ar[(l=e+375388|0)>>2]=e+11096+(5168*d|0),ar[(a=e+375384|0)>>2]=e+600+(656*(0|tr[e+11096+(5168*d|0)+1>>0])|0),function(A){var e=0,r=0,i=0,f=0,n=0,t=0,o=0,a=0,c=0;r=0|ar[375388+(A|=0)>>2],e=(i=0==(0|r))?(e=0|ar[A+375384>>2])?(0|ar[e+8>>2])-1|0:6:(0|tr[r+2>>0])-1|0;do{if((0|tr[A+376116>>0])!=(0|e)){if(i?(e=0|ar[A+375384>>2])?(e=0|ar[e+8>>2],f=10):e=6:(e=0|tr[r+2>>0],f=10),10==(0|f)){if(!(0<(0|e)))break;e=e+-1|0}for(t=e+1|0,o=A+375896|0;;){if((0|(i=(0|(n=100*e|0))/(0|t)|0))<=(0|(n=(n+100|0)/(0|t)|0)))for(f=n-i|0,r=i;c=0|ar[o>>2],e=(a=(0|c)<(0|e))?c:e,tr[A+375916+(r<<1)>>0]=e,tr[A+375916+(r<<1)+1>>0]=a?100:255&((100*(r-i|0)|0)/(0|f)|0),(0|r)<(0|n);)r=r+1|0;if(ar[A+376120+(e<<2)>>2]=n,!(0<(0|e)))break;e=e+-1|0}}}while(0);a=0|ar[A+375900>>2],c=0|tr[A+375916+(a<<1)>>0],ar[A+375904>>2]=c,ar[A+375908>>2]=tr[A+375916+(a<<1)+1>>0],ar[A+375912>>2]=c}(A),0|tr[(d=r+4|0)>>0]){if(ar[e+376204>>2]=ar[r+28>>2],l=0|ar[l>>2],u=0|tr[l+4703>>0]?0!=(0|tr[e+533>>0]):1,-1==(0|(u=0|ia(e+376148|0,l,A,f,n,o,u))))return ar[i>>2]=9,ur=c,(r=0)|r;l=0|ar[e+376156>>2],u=(0|ar[e+376160>>2])-l>>2>>>0>u>>>0?0|ar[l+(u<<2)>>2]:0,tr[(b=u+10518|0)>>0]=0|tr[t>>0],tr[b+1>>0]=0|tr[t+1>>0],tr[b+2>>0]=0|tr[t+2>>0],ar[(b=e+376224|0)>>2]=u,l=0|ar[a>>2],hb(0|(t=u+108|0),0|l,592),(0|t)==(0|l)?(i=l+604|0,ar[(t=u+712|0)>>2]=ar[i>>2],ar[t+4>>2]=ar[i+4>>2],ar[t+8>>2]=ar[i+8>>2],ar[t+12>>2]=ar[i+12>>2],ar[t+16>>2]=ar[i+16>>2],ar[t+20>>2]=ar[i+20>>2]):(je(u+700|0,0|ar[l+592>>2],0|ar[l+596>>2]),i=l+604|0,ar[(t=u+712|0)>>2]=ar[i>>2],ar[t+4>>2]=ar[i+4>>2],ar[t+8>>2]=ar[i+8>>2],ar[t+12>>2]=ar[i+12>>2],ar[t+16>>2]=ar[i+16>>2],ar[t+20>>2]=ar[i+20>>2],He(u+736|0,0|ar[l+628>>2],0|ar[l+632>>2]),xe(u+748|0,0|ar[l+640>>2],0|ar[l+644>>2])),tr[u+760>>0]=0|tr[l+652>>0],l=0|ar[s>>2],hb(0|(s=u+5932|0),0|l,4340),(0|s)!=(0|l)&&($e(u+10272|0,0|ar[l+4340>>2],0|ar[l+4344>>2]),$e(u+10284|0,0|ar[l+4352>>2],0|ar[l+4356>>2]),$e(u+10296|0,0|ar[l+4364>>2],0|ar[l+4368>>2]),$e(u+10308|0,0|ar[l+4376>>2],0|ar[l+4380>>2]),$e(u+10320|0,0|ar[l+4388>>2],0|ar[l+4392>>2])),ar[u+10332>>2]=e,function(A){var e,r=0;0|(r=0|ar[10360+(A|=0)>>2])&&vb(0|r,0,3*(0|ar[A+10364>>2])|0);0|(r=0|ar[A+10340>>2])&&vb(0|r,0,24*(0|ar[A+10344>>2])|0);0|(r=0|ar[A+10460>>2])&&vb(0|r,0,0|ar[A+10464>>2]);if((0|(e=0|ar[A+10344>>2]))<=0)return;A=0|ar[A+10524>>2],r=0;for(;ar[A+(80*r|0)>>2]=0,r=r+1|0,(0|r)<(0|e););}(u),l=e+377212|0;do{if(0|ma(0|tr[l>>0])){if(!(0|ha(0|tr[l>>0])||0|wa(0|tr[l>>0])||0!=(0|tr[e+376208>>0]))&&0==(0|tr[e+376211>>0])){tr[e+376209>>0]=0,tr[e+376210>>0]=0;break}tr[e+376209>>0]=1,tr[e+376211>>0]=0}}while(0);0|va(0|tr[l>>0])&&0!=(0|tr[e+376209>>0])?tr[100+(0|ar[b>>2])>>0]=0:tr[100+(0|ar[b>>2])>>0]=0!=(0|tr[r+24>>0])&1,function(A,e,r){A|=0,r|=0;var i,f=0,n=0,t=0;0|ma(0|tr[(i=377212+(e|=0)|0)>>0])&&0!=(0|tr[e+376209>>0])?(ar[(n=e+376212|0)>>2]=0,tr[A+377228>>0]=1,A=r+28|0,A=(r=0)|ar[(f=A)>>2]):(n=0|ar[5032+(0|ar[e+375388>>2])>>2],A=0|ar[(t=r+28|0)>>2],f=0|ar[e+376216>>2],r=0|ar[e+376220>>2],(0|A)<(0|f)&&((0|n)/2|0)<=(f-A|0)?r=r+n|0:(0|f)<(0|A)&&(r=r-(((0|n)/2|0)<(A-f|0)?n:0)|0),ar[(n=e+376212|0)>>2]=r,f=t);if(t=0|ar[e+376224>>2],ar[t+92>>2]=A+r,ar[t+88>>2]=A,0|tr[t+10520>>0])return;if(0|function(A){return(255&(A|=0))<15?0==(1&A)|0:0}(0|tr[i>>0]))return;if(0|va(0|tr[i>>0]))return;if(0|function(A){return(1|(A|=0))<<24>>24==7|0}(0|tr[i>>0]))return;ar[e+376216>>2]=ar[f>>2],ar[e+376220>>2]=ar[n>>2]}(A,e,r),l=u+96|0,0|tr[d>>0]&&(ar[l>>2]=1,function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0;if(ur=(c=ur)+32|0,t=c+4|0,ar[(o=(f=c)+16|0)>>2]=0,ar[(a=4+o|0)>>2]=0,ar[8+o>>2]=0,i=0|ar[ar[(n=e+376224|0)>>2]>>2],0|ma(0|tr[(h=e+377212|0)>>0])&&0|tr[e+376209>>0]&&(u=0|ar[n>>2],w=0|ar[u+92>>2],v=A+376156|0,b=0|ar[(m=A+376160|0)>>2],l=0|ar[v>>2],0<(b-l|0)))for(g=e+376156|0,Z=e+376160|0,p=8+o|0,k=0,d=b;b=0|ar[g>>2],b=(0|ar[Z>>2])-b>>2>>>0>k>>>0?0|ar[b+(k<<2)>>2]:0,0!=(0|ar[b+96>>2])&&(0|ar[b+92>>2])<(0|w)&&(0|ar[(y=b+104|0)>>2])>>>0>(0|ar[u>>2])>>>0?(b=0|ar[b>>2],ar[t>>2]=b,(s=0|ar[a>>2])>>>0<(0|ar[p>>2])>>>0?(ar[s>>2]=b,ar[a>>2]=s+4,b=d):(Mo(o,t),b=0|ar[m>>2],l=0|ar[v>>2],u=0|ar[n>>2]),ar[y>>2]=ar[u>>2]):b=d,!((b-l>>2|0)<=(0|(k=k+1|0)));)d=b;if(0|ha(0|tr[h>>0]))ar[e+376552>>2]=0,ar[e+376556>>2]=0,ar[e+376560>>2]=0,u=l=0;else{if((l=0|tr[r+908>>0])<<24>>24)for(k=255&l,d=s=b=0;y=0==(0|tr[r+876+b>>0]),l=(1&y)+d|0,u=(1&(1^y))+s|0,ar[(y?e+376700+(d<<2)|0:e+376572+(s<<2)|0)>>2]=(0|or[r+812+(b<<1)>>1])+(0|ar[92+(0|ar[n>>2])>>2]),!((0|k)<=(0|(b=b+1|0)));)s=u,d=l;else l=u=0;if(ar[e+376552>>2]=u,(u=0|tr[r+909>>0])<<24>>24)for(k=255&u,s=b=0;;){if(y=0==(0|tr[r+892+b>>0]),d=(1&y)+l|0,u=(1&(1^y))+s|0,ar[(y?e+376700+(l<<2)|0:e+376636+(s<<2)|0)>>2]=(0|or[r+844+(b<<1)>>1])+(0|ar[92+(0|ar[n>>2])>>2]),(0|k)<=(0|(b=b+1|0))){l=d;break}s=u,l=d}else u=0;if(ar[e+376556>>2]=u,ar[e+376560>>2]=l,k=r+140|0,0<((0|ar[(h=r+144|0)>>2])+(0|ar[k>>2])|0))for(w=r+28|0,v=e+375388|0,u=l=d=0;b=0|ar[e+376232+(d<<2)>>2],0|tr[(s=r+244+d|0)>>0]&&(b=(0|ar[92+(0|ar[n>>2])>>2])+b-(0|ar[w>>2])-(0|br(0|ar[5032+(0|ar[v>>2])>>2],0|ar[e+376360+(d<<2)>>2]))|0),0|ar[e+376296+(d<<2)>>2]?(ar[e+376764+(l<<2)>>2]=b,ar[e+376424+(l<<2)>>2]=tr[s>>0],l=l+1|0):(ar[e+376828+(u<<2)>>2]=b,ar[e+376488+(u<<2)>>2]=tr[s>>0],u=u+1|0),(0|(d=d+1|0))<((0|ar[h>>2])+(0|ar[k>>2])|0););else u=l=0}ar[(v=e+376564|0)>>2]=l,ar[(w=e+376568|0)>>2]=u,m=A+376156|0,l=(0|ar[(g=A+376160|0)>>2])-(0|ar[m>>2])|0,u=l>>2,ar[t>>2]=0,ar[(b=4+t|0)>>2]=0,ar[(s=8+t|0)>>2]=0,0|u&&((0|l)<0&&zl(),p=0|hu((y=1+((u+-1|0)>>>5)|0)<<2),ar[t>>2]=p,ar[s>>2]=y,ar[b>>2]=u,vb(0|p,0,(y=u>>>5)<<2|0),l=u-(y<<5)|0,u=p+(y<<2)|0,0|l&&(ar[u>>2]=ar[u>>2]&~(-1>>>(32-l|0))));if(0<(0|(l=0|ar[v>>2])))for(d=e+376148|0,k=e+376156|0,h=e+375388|0,s=0;l=0|ar[(b=e+376764+(s<<2)|0)>>2],l=0|ar[e+376424+(s<<2)>>2]?0|Ko(d,l,i,1):0|qo(d,l,i,1),(0|(ar[(u=e+377084+(s<<2)|0)>>2]=l))<=-1&&(l=0|To(A,e,0|ar[h>>2],0|ar[b>>2],1),ar[u>>2]=l),y=(0|ar[t>>2])+(l>>>5<<2)|0,ar[y>>2]=ar[y>>2]|1<<(31&l),0|tr[10516+(0|ar[(0|ar[k>>2])+(l<<2)>>2])>>0]&&(tr[10516+(0|ar[n>>2])>>0]=4),s=s+1|0,l=0|ar[v>>2],(0|s)<(0|l););if(0<(0|(u=0|ar[w>>2]))){for(k=e+376148|0,h=e+375388|0,d=0;l=0|ar[(b=e+376828+(d<<2)|0)>>2],l=0|ar[e+376488+(d<<2)>>2]?0|Ko(k,l,i,1):0|qo(k,l,i,1),(0|(ar[(u=e+377148+(d<<2)|0)>>2]=l))<=-1&&(l=0|To(A,e,0|ar[h>>2],0|ar[b>>2],1),ar[u>>2]=l),s=(0|ar[t>>2])+(l>>>5<<2)|0,ar[s>>2]=ar[s>>2]|1<<(31&l),d=d+1|0,s=0|ar[w>>2],(0|d)<(0|s););l=0|ar[v>>2]}else s=u;if(0<(0|l))for(b=0|ar[e+376156>>2],u=0;ar[96+(0|ar[b+(ar[e+377084+(u<<2)>>2]<<2)>>2])>>2]=2,(0|(u=u+1|0))<(0|l););if(0<(0|s))for(u=0|ar[e+376156>>2],l=0;ar[96+(0|ar[u+(ar[e+377148+(l<<2)>>2]<<2)>>2])>>2]=2,(0|(l=l+1|0))<(0|s););if(0<(0|ar[(d=e+376552|0)>>2]))for(k=e+376148|0,h=e+376156|0,w=e+375388|0,s=0;l=0|Ko(k,0|ar[(u=e+376572+(s<<2)|0)>>2],i,0),(0|(ar[(b=e+376892+(s<<2)|0)>>2]=l))<=-1&&(l=0|To(A,e,0|ar[w>>2],0|ar[u>>2],0),ar[b>>2]=l),y=(0|ar[t>>2])+(l>>>5<<2)|0,ar[y>>2]=ar[y>>2]|1<<(31&l),0|tr[10516+(0|ar[(0|ar[h>>2])+(l<<2)>>2])>>0]&&(tr[10516+(0|ar[n>>2])>>0]=4),(0|(s=s+1|0))<(0|ar[d>>2]););if(0<(0|ar[(d=e+376556|0)>>2]))for(k=e+376148|0,h=e+376156|0,w=e+375388|0,s=0;l=0|Ko(k,0|ar[(u=e+376636+(s<<2)|0)>>2],i,0),(0|(ar[(b=e+376956+(s<<2)|0)>>2]=l))<=-1&&(l=0|To(A,e,0|ar[w>>2],0|ar[u>>2],0),ar[b>>2]=l),y=(0|ar[t>>2])+(l>>>5<<2)|0,ar[y>>2]=ar[y>>2]|1<<(31&l),0|tr[10516+(0|ar[(0|ar[h>>2])+(l<<2)>>2])>>0]&&(tr[10516+(0|ar[n>>2])>>0]=4),(0|(s=s+1|0))<(0|ar[d>>2]););if(0<(0|ar[(u=e+376560|0)>>2]))for(b=e+376148|0,l=0;s=0|Ko(b,0|ar[e+376700+(l<<2)>>2],i,0),-1<(0|(ar[e+377020+(l<<2)>>2]=s))&&(A=(0|ar[t>>2])+(s>>>5<<2)|0,ar[A>>2]=ar[A>>2]|1<<(31&s)),(0|(l=l+1|0))<(0|ar[u>>2]););if(u=0|ar[g>>2],l=0|ar[m>>2],0<(u-l|0))for(v=e+376156|0,h=e+376160|0,w=8+o|0,k=0,d=u;!(((u=ar[(0|ar[t>>2])+(k>>>5<<2)>>2]&1<<(31&k)?d:(u=0|ar[v>>2],b=(0|ar[h>>2])-u>>2>>>0>k>>>0?0|ar[u+(k<<2)>>2]:0,u=0|ar[n>>2],(0|b)!=(0|u)&&(0|ar[(B=b+104|0)>>2])>>>0>(0|ar[u>>2])>>>0&&0!=(0|ar[b+96>>2])?(b=0|ar[b>>2],ar[f>>2]=b,(s=0|ar[a>>2])>>>0<(0|ar[w>>2])>>>0?(ar[s>>2]=b,ar[a>>2]=s+4,b=d):(Mo(o,f),b=0|ar[g>>2],l=0|ar[m>>2],u=0|ar[n>>2]),ar[B>>2]=ar[u>>2],b):d))-l>>2|0)<=(0|(k=k+1|0)));)d=u;(0|(l=r+1344|0))!=(0|o)&&$e(l,0|ar[o>>2],0|ar[a>>2]);0|(l=0|ar[t>>2])&&vu(l);if(!(l=0|ar[o>>2]))return ur=c;(0|(u=0|ar[a>>2]))!=(0|l)&&(ar[a>>2]=u+(~((u+-4-l|0)>>>2)<<2));vu(l),ur=c}(A,e,r)),ar[l>>2]=1,function(A){A|=0,ar[14391]=A}(0|ar[92+(0|ar[b>>2])>>2]),tr[A+376208>>0]=0}else if(!(0|ar[e+376224>>2]))return ur=c,(r=0)|r;if((0|ar[r+20>>2])>>>0<2&&!(0|function(A,e,r){A|=0,e|=0;var i,f,n,t,o,a,c,l,u,b,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;ur=(b=ur)+480|0,v=b+192|0,u=(l=b)+384|0,m=0|ar[912+(r|=0)>>2],h=0|ar[(i=r+328|0)>>2],k=(0|m)<(0|h)?h:m,s=96+(A=u)|0;for(;tr[A>>0]=0,A=A+1|0,(0|A)<(0|s););f=e+376552|0,n=e+376556|0,t=e+376564|0,o=e+376892|0,a=e+376956|0,c=e+377084|0,A=0;for(;!((0|k)<=(0|A));){if(0<(0|(d=0|ar[f>>2])))for(hb(v+(A<<2)|0,0|o,0|br((s=A-k|0)>>>0<(w=0-d|0)>>>0?w:s,-4)),s=0;(0|(A=A+1|0))<(0|k)&(0|(s=s+1|0))<(0|d););if(d=0|ar[n>>2],(0|A)<(0|k)&0<(0|d))for(hb(v+(A<<2)|0,0|a,0|br((s=A-k|0)>>>0<(w=0-(1<(0|d)?d:1)|0)>>>0?w:s,-4)),s=0;(0|(A=A+1|0))<(0|k)&(0|(s=s+1|0))<(0|d););if(d=0|ar[t>>2],(0|A)<(0|k)&0<(0|d))for(vb(u+A|0,1,0-(s=(s=A-k|0)>>>0<(w=0-(1<(0|d)?d:1)|0)>>>0?w:s)|0),hb(v+(A<<2)|0,0|c,0|br(s,-4)),s=0;(0|(A=A+1|0))<(0|k)&(0|(s=s+1|0))<(0|d););if(!A){Z=13;break}}if(13==(0|Z))return 20==(0|(A=0|ar[(s=e+84|0)>>2]))?(s=1001,A=19):(ar[s>>2]=A+1,s=1016),ar[e+4+(A<<2)>>2]=s,ur=b,(e=0)|e;17<=(0|h)&&sr(34944,34700,1781,34977);A:do{if(0<(0|h)){for(k=r+336|0,h=e+376156|0,w=e+376160|0,d=0;;){if(A=0|tr[k>>0]?0|cr[r+338+d>>0]:d,ar[(s=r+916+(d<<2)|0)>>2]=ar[v+(A<<2)>>2],tr[r+1300+d>>0]=0|tr[u+A>>0],A=0|ar[s>>2],s=0|ar[h>>2],(0|ar[w>>2])-s>>2>>>0<=A>>>0){A=0,Z=54;break}if(!(A=0|ar[s+(A<<2)>>2])){A=0,Z=54;break}if(ar[r+1044+(d<<2)>>2]=ar[A+92>>2],ar[r+1172+(d<<2)>>2]=ar[A+96>>2],d=d+1|0,(0|(A=0|ar[i>>2]))<=(0|d)){g=A;break A}}if(54==(0|Z))return ur=b,0|A}else g=h}while(0);if(0|ar[r+20>>2])return ur=b,0|(e=1);h=0|ar[(v=r+332|0)>>2],k=(0|m)<(0|h)?h:m,A=0;for(;!((0|k)<=(0|A));){if(0<(0|(d=0|ar[n>>2])))for(hb(l+(A<<2)|0,0|a,0|br((s=A-k|0)>>>0<(m=0-d|0)>>>0?m:s,-4)),s=0;(0|(A=A+1|0))<(0|k)&(0|(s=s+1|0))<(0|d););if(d=0|ar[f>>2],(0|A)<(0|k)&0<(0|d))for(hb(l+(A<<2)|0,0|o,0|br((s=A-k|0)>>>0<(m=0-(1<(0|d)?d:1)|0)>>>0?m:s,-4)),s=0;(0|(A=A+1|0))<(0|k)&(0|(s=s+1|0))<(0|d););if(d=0|ar[t>>2],(0|A)<(0|k)&0<(0|d))for(vb(48+u+A|0,1,0-(s=(s=A-k|0)>>>0<(m=0-(1<(0|d)?d:1)|0)>>>0?m:s)|0),hb(l+(A<<2)|0,0|c,0|br(s,-4)),s=0;(0|(A=A+1|0))<(0|k)&(0|(s=s+1|0))<(0|d););if(!A){Z=38;break}}if(38==(0|Z))return 20==(0|(A=0|ar[(s=e+84|0)>>2]))?(s=1001,A=19):(ar[s>>2]=A+1,s=1016),ar[e+4+(A<<2)>>2]=s,ur=b,(e=0)|e;if(16<(0|g))return 20==(0|(A=0|ar[(s=e+84|0)>>2]))?(s=1001,A=19):(ar[s>>2]=A+1,s=1012),ar[e+4+(A<<2)>>2]=s,ur=b,(e=0)|e;17<=(0|h)&&sr(35011,34700,1834,34977);if((0|h)<=0)return ur=b,0|(e=1);h=r+337|0,w=e+376156|0,k=e+376160|0,d=0;for(;;){if(A=0|tr[h>>0]?0|cr[r+354+d>>0]:d,ar[(s=r+980+(d<<2)|0)>>2]=ar[l+(A<<2)>>2],tr[r+1316+d>>0]=0|tr[48+u+A>>0],A=0|ar[s>>2],s=0|ar[w>>2],(0|ar[k>>2])-s>>2>>>0<=A>>>0){A=0,Z=54;break}if(!(A=0|ar[s+(A<<2)>>2])){A=0,Z=54;break}if(ar[r+1108+(d<<2)>>2]=ar[A+92>>2],ar[r+1236+(d<<2)>>2]=ar[A+96>>2],(0|(d=d+1|0))>=(0|ar[v>>2])){A=1,Z=54;break}}return 54!=(0|Z)?0:(ur=b,0|A)}(0,e,r)))return ur=c,(r=0)|r;u=0|tr[r+12>>0]?800+(0|ar[(l=u=e+376228|0)>>2])|0:(l=e+376228|0,r+16|0);return ar[r+800>>2]=ar[u>>2],ar[l>>2]=r,ur=c,0|(r=1)}(A,A,s,n,0|ar[(u=r+8|0)>>2],0|ar[u+4>>2],i,0|ar[r+16>>2]),a=0|ar[(b=A+376224|0)>>2],!u)return 0|a&&(tr[a+10516>>0]=2),Ba(A+548|0,r),0|(a=0|ar[s+1344>>2])&&((0|(c=0|ar[(i=s+1348|0)>>2]))!=(0|a)&&(ar[i>>2]=c+(~((c+-4-a|0)>>>2)<<2)),vu(a)),kt(s+1332|0),0|(a=0|ar[s+776>>2])&&((0|(c=0|ar[(i=s+780|0)>>2]))!=(0|a)&&(ar[i>>2]=c+(~((c+-4-a|0)>>>2)<<2)),vu(a)),vu(s),s=0|ar[n>>2],ur=t,0|s;if(ar[f>>2]=s,i=a+48|0,l=0|ar[(c=a+52|0)>>2],ar[s>>2]=l-(0|ar[i>>2])>>2,(0|l)==(0|ar[a+56>>2])?function(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=4+(A|=0)|0,n=0|ar[A>>2],t=(0|ar[f>>2])-n|0,1073741823<(o=1+(i=t>>2)|0)>>>0&&zl();c=(0|ar[(l=A+8|0)>>2])-n|0,a=c>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t);if(ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),!n)return;vu(n)}(i,f):(ar[l>>2]=s,ar[c>>2]=4+(0|ar[c>>2])),et(e,1),rt(e),l=(0|ar[e>>2])-(0|ar[r+20>>2])|0,0<(0|ar[(u=s+768|0)>>2]))for(c=(a=0)|ar[(i=s+776|0)>>2];k=0|Za(r,0|ar[c+(a<<2)>>2],l),c=0|ar[i>>2],ar[(d=c+(a<<2)|0)>>2]=(0|ar[d>>2])-k,(0|(a=a+1|0))<(0|ar[u>>2]););if(0|tr[s+4>>0]){for(na((c=0|hu(10688))+8|0),i=(a=c+10632|0)+56|0;(0|(a=a+4|(ar[a>>2]=0)))<(0|i););ar[f>>2]=c,ar[c>>2]=ar[b>>2],(0|(i=0|ar[(a=A+377220|0)>>2]))==(0|ar[A+377224>>2])?function(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=4+(A|=0)|0,n=0|ar[A>>2],t=(0|ar[f>>2])-n|0,1073741823<(o=1+(i=t>>2)|0)>>>0&&zl();c=(0|ar[(l=A+8|0)>>2])-n|0,a=c>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t);if(ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),!n)return;vu(n)}(A+377216|0,f):(ar[i>>2]=c,ar[a>>2]=4+(0|ar[a>>2]))}else a=A+377220|0;return(0|ar[A+377216>>2])!=(0|ar[a>>2])&&(l=0|hu(152),ar[l>>2]=0,ar[(i=l+4|0)>>2]=0,ar[l+32>>2]=0,Dn(l+44|(tr[l+36>>0]=0)),ar[l+124>>2]=0,ar[l+128>>2]=-1,ar[l+132>>2]=-1,ar[l+136>>2]=0,ar[l+144>>2]=A,ar[l+40>>2]=0,ar[l+140>>2]=0,ar[f>>2]=l,ar[l>>2]=r,ar[i>>2]=s,ar[(i=l+8|0)>>2]=ar[e>>2],ar[i+4>>2]=ar[e+4>>2],ar[i+8>>2]=ar[e+8>>2],ar[i+12>>2]=ar[e+12>>2],ar[i+16>>2]=ar[e+16>>2],ar[i+20>>2]=ar[e+20>>2],tr[l+36>>0]=0|tr[A+377228>>0],a=0|ar[(0|ar[a>>2])-4>>2],(0|(c=0|ar[(i=a+10636|0)>>2]))==(0|ar[a+10640>>2])?function(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=4+(A|=0)|0,n=0|ar[A>>2],t=(0|ar[f>>2])-n|0,1073741823<(o=1+(i=t>>2)|0)>>>0&&zl();c=(0|ar[(l=A+8|0)>>2])-n|0,a=c>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t);if(ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),!n)return;vu(n)}(a+10632|0,f):(ar[c>>2]=l,ar[i>>2]=4+(0|ar[i>>2]))),k=0|Yo(A,f),ar[n>>2]=k,ur=t,(k=0)|k}function ir(A,e,r,i,f,n,t){A|=0,e|=0,f|=0,n|=0,t|=0;var o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;for(c=ur=(o=ur)+31&-32,ur=ur+112|0,100<(l=((i|=0)-(r|=0)|0)/12|0)>>>0?(c=0|yc(l))?g=a=c:gu():(a=c,g=0),c=0,b=r,s=a;(0|b)!=(0|i);)(u=0|tr[b+8+3>>0])<<24>>24<0?u=0|ar[b+4>>2]:u&=255,u?tr[s>>0]=1:(tr[s>>0]=2,c=c+1|0,l=l+-1|0),b=b+12|0,s=s+1|0;m=0,w=c;A:for(;;){c=0|ar[A>>2];do{if(c){if(0|Uf(c=(0|(u=0|ar[c+12>>2]))==(0|ar[c+16>>2])?0|jb[127&ar[36+(0|ar[c>>2])>>2]](c):0|gf(0|ar[u>>2]),-1)){ar[A>>2]=0,s=1;break}s=0==(0|ar[A>>2]);break}s=1}while(0);if(c=(u=0|ar[e>>2])?0|Uf(c=(0|(c=0|ar[u+12>>2]))==(0|ar[u+16>>2])?0|jb[127&ar[36+(0|ar[u>>2])>>2]](u):0|gf(0|ar[c>>2]),-1)?(u=ar[e>>2]=0,1):0:(u=0,1),b=0|ar[A>>2],!(0!=(0|l)&(s^c)))break;for(c=(0|(c=0|ar[b+12>>2]))==(0|ar[b+16>>2])?0|jb[127&ar[36+(0|ar[b>>2])>>2]](b):0|gf(0|ar[c>>2]),t||(c=0|Hb[31&ar[28+(0|ar[f>>2])>>2]](f,c)),v=m+1|0,k=r,d=0,h=a;(0|k)!=(0|i);){do{if(1==(0|tr[h>>0])){if(u=(0|tr[(b=k+8+3|0)>>0])<0?0|ar[k>>2]:k,u=0|ar[u+(m<<2)>>2],t||(u=0|Hb[31&ar[28+(0|ar[f>>2])>>2]](f,u)),s=l+-1|0,(0|c)!=(0|u)){tr[h>>0]=0,u=d,b=w,l=s;break}(u=0|tr[b>>0])<<24>>24<0?u=0|ar[k+4>>2]:u&=255,(0|u)==(0|v)?(tr[h>>0]=2,b=w+(u=1)|0,l=s):(u=1,b=w)}else u=d,b=w}while(0);k=k+12|0,d=u,h=h+1|0,w=b}if(d)if(c=0|ar[A>>2],(0|(b=0|ar[(u=c+12|0)>>2]))==(0|ar[c+16>>2])?jb[127&ar[40+(0|ar[c>>2])>>2]](c):(ar[u>>2]=b+4,gf(0|ar[b>>2])),1<(w+l|0)>>>0)for(b=r,s=a,c=w;;){if((0|b)==(0|i)){m=v,w=c;continue A}2==(0|tr[s>>0])&&((u=0|tr[b+8+3>>0])<<24>>24<0?u=0|ar[b+4>>2]:u&=255,(0|u)!=(0|v)&&(c=c+-1|(tr[s>>0]=0))),b=b+12|0,s=s+1|0}else m=v;else m=v}do{if(b){if(0|Uf(c=(0|(c=0|ar[b+12>>2]))==(0|ar[b+16>>2])?0|jb[127&ar[36+(0|ar[b>>2])>>2]](b):0|gf(0|ar[c>>2]),-1)){ar[A>>2]=0,l=1;break}l=0==(0|ar[A>>2]);break}l=1}while(0);do{if(u){if(0|Uf(c=(0|(c=0|ar[u+12>>2]))==(0|ar[u+16>>2])?0|jb[127&ar[36+(0|ar[u>>2])>>2]](u):0|gf(0|ar[c>>2]),-1)){ar[e>>2]=0,Z=41;break}if(l)break;Z=77;break}Z=41}while(0);for(41==(0|Z)&&l&&(Z=77),77==(0|Z)&&(ar[n>>2]=2|ar[n>>2]);;){if((0|r)==(0|i)){Z=81;break}if(2==(0|tr[a>>0]))break;r=r+12|0,a=a+1|0}return 81==(0|Z)&&(ar[n>>2]=4|ar[n>>2],r=i),Bc(g),ur=o,0|r}function fr(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t;return t=ur=(n=ur)+31&-32,ur=ur+16|0,ar[t>>2]=f,f=0|rf(r),r=0|Yc(A,e,i,t),0|f&&rf(f),ur=n,0|r}function nr(A,e,r){A|=0,e|=0,r|=0;var i=0;A:do{switch((176&ar[r+4>>2])<<24>>24){case 16:switch(i=A+1|0,(r=0|tr[A>>0])<<24>>24){case 43:case 45:A=i;break A}if(1<(e-A|0)&r<<24>>24==48){switch(0|tr[i>>0]){case 88:case 120:break;default:0;break A}A=A+2|0}else 0;break;case 32:A=e;break;default:0}}while(0);return 0|A}function dr(A,e,r){A|=0,e|=0;var i,f,n,t=0;for(2048&(r|=0)&&(tr[A>>0]=43,A=A+1|0),1024&r&&(tr[A>>0]=35,A=A+1|0),i=0!=(16384&r|0),(f=260==(0|(n=260&r)))?t=0:(tr[A>>0]=46,tr[A+1>>0]=42,t=1,A=A+2|0);(r=0|tr[e>>0])<<24>>24;)tr[A>>0]=r,e=e+1|0,A=A+1|0;A:do{switch(511&n){case 4:r=i?70:102;break;case 256:r=i?69:101;break;default:if(f){r=i?65:97;break A}r=i?71:103;break A}}while(0);return tr[A>>0]=r,0|t}function kr(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n;return n=ur=(f=ur)+31&-32,ur=ur+16|0,ar[n>>2]=i,i=0|rf(e),e=0|function(A,e,r){A|=0,e|=0,r|=0;var i,f=0,n=0,t=0;f=ur=(i=ur)+31&-32,ur=ur+16|0,ar[f>>2]=ar[r>>2],A=0<=(0|(f=0|Yc(0,0,e,f)))&&(t=0|yc(n=f+1|0),0!=(0|(ar[A>>2]=t)))?0|Yc(t,n,e,r):-1;return ur=i,0|A}(A,r,n),0|i&&rf(i),ur=f,0|e}function hr(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var o,a,c,l,u,b,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;switch(l=ur=(b=ur)+31&-32,ur=ur+16|0,u=0|un(t|=0,59232),c=0|un(t,59248),fs[63&ar[20+(0|ar[c>>2])>>2]](l,c),ar[n>>2]=i,(t=0|tr[A>>0])<<24>>24){case 43:case 45:v=0|Hb[31&ar[28+(0|ar[u>>2])>>2]](u,t),s=0|ar[n>>2],ar[n>>2]=s+1,tr[s>>0]=v,s=A+1|0;break;default:s=A}v=r;A:do{if(1<(v-s|0)&&48==(0|tr[s>>0])){switch(0|tr[(t=s+1|0)>>0]){case 88:case 120:break;default:t=s,m=10;break A}for(h=0|Hb[31&ar[28+(0|ar[u>>2])>>2]](u,48),w=0|ar[n>>2],ar[n>>2]=w+1,tr[w>>0]=h,s=s+2|0,w=0|Hb[31&ar[28+(0|ar[u>>2])>>2]](u,0|tr[t>>0]),t=0|ar[n>>2],ar[n>>2]=t+1,tr[t>>0]=w,t=s;;){if(r>>>0<=t>>>0)break A;if(!(0|lf(w=0|tr[t>>0],dn())))break A;t=t+1|0}}else t=s,m=10}while(0);A:do{if(10==(0|m))for(;;){if(r>>>(m=0)<=t>>>0)break A;if(!(0|af(w=0|tr[t>>0],dn())))break A;t=t+1|0,m=10}}while(0);k=0|tr[(o=11+l|0)>>0],a=4+l|0,h=s,w=A;A:do{if(0|(k<<24>>24<0?0|ar[a>>2]:255&k)){e:do{if((0|s)!=(0|t))for(A=t,d=s;;){if((A=A+-1|0)>>>0<=d>>>0)break e;k=0|tr[d>>0],tr[d>>0]=0|tr[A>>0],tr[A>>0]=k,d=d+1|0}}while(0);for(k=0|jb[127&ar[16+(0|ar[c>>2])>>2]](c),A=d=0;!(t>>>0<=s>>>0);)0<(g=0|tr[((0|tr[o>>0])<0?0|ar[l>>2]:l)+A>>0])<<24>>24&(0|d)==(g<<24>>24|0)&&(d=0|ar[n>>2],ar[n>>2]=d+1,tr[d>>0]=k,A=(A>>>0<(((d=0|tr[o>>0])<<24>>24<0?0|ar[a>>2]:255&d)-1|0)>>>0&1)+A|0,d=0),Z=0|Hb[31&ar[28+(0|ar[u>>2])>>2]](u,0|tr[s>>0]),g=0|ar[n>>2],ar[n>>2]=g+1,tr[g>>0]=Z,s=s+1|0,d=d+1|0;if((0|(A=i+(h-w)|0))==(0|(s=0|ar[n>>2])))A=u;else for(;;){if((s=s+-1|0)>>>0<=A>>>0){A=u;break A}Z=0|tr[A>>0],tr[A>>0]=0|tr[s>>0],tr[s>>0]=Z,A=A+1|0}}else Pb[7&ar[32+(0|ar[u>>2])>>2]](u,s,t,0|ar[n>>2]),ar[n>>2]=(0|ar[n>>2])+(t-h),A=u}while(0);for(;!(r>>>0<=t>>>0);){if(s=0|tr[t>>0],t=t+1|0,s<<24>>24==46){m=29;break}g=0|Hb[31&ar[28+(0|ar[A>>2])>>2]](u,s),Z=0|ar[n>>2],ar[n>>2]=Z+1,tr[Z>>0]=g}29==(0|m)&&(g=0|jb[127&ar[12+(0|ar[c>>2])>>2]](c),Z=0|ar[n>>2],ar[n>>2]=Z+1,tr[Z>>0]=g),Pb[7&ar[32+(0|ar[u>>2])>>2]](u,t,r,0|ar[n>>2]),Z=(0|ar[n>>2])+(v-t)|0,ar[n>>2]=Z,ar[f>>2]=(0|e)==(0|r)?Z:i+(e-w)|0,Bu(l),ur=b}function wr(A,e,r,i){A|=0,e|=0,r|=0;var f=0;for(2048&(i|=0)&&(tr[A>>0]=43,A=A+1|0),f=512&i?(tr[A>>0]=35,A+1|0):A;(A=0|tr[e>>0])<<24>>24;)tr[f>>0]=A,e=e+1|0,f=f+1|0;switch(74&i){case 64:A=111;break;case 8:A=16384&i|0?88:120;break;default:A=r?100:117}tr[f>>0]=A}function vr(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var o,a,c,l,u,b,s=0,d=0,k=0,h=0,w=0;if(u=ur=(b=ur)+31&-32,ur=ur+16|0,c=0|un(t|=0,59232),d=0|un(t,59248),fs[63&ar[20+(0|ar[d>>2])>>2]](u,d),a=4+u|0,l=A,s=r,0|((k=0|tr[(o=11+u|0)>>0])<<24>>24<0?0|ar[a>>2]:255&k)){switch(ar[n>>2]=i,(t=0|tr[A>>0])<<24>>24){case 43:case 45:t=0|Hb[31&ar[28+(0|ar[c>>2])>>2]](c,t),k=0|ar[n>>2],ar[n>>2]=k+1,tr[k>>0]=t,A=A+1|0}A:do{if(1<(s-A|0)&&48==(0|tr[A>>0])){switch(0|tr[(t=A+1|0)>>0]){case 88:case 120:break;default:break A}k=0|Hb[31&ar[28+(0|ar[c>>2])>>2]](c,48),s=0|ar[n>>2],ar[n>>2]=s+1,tr[s>>0]=k,s=0|Hb[31&ar[28+(0|ar[c>>2])>>2]](c,0|tr[t>>0]),k=0|ar[n>>2],ar[n>>2]=k+1,tr[k>>0]=s,A=A+2|0}}while(0);A:do{if((0|A)!=(0|r))for(t=r,s=A;;){if((t=t+-1|0)>>>0<=s>>>0)break A;k=0|tr[s>>0],tr[s>>0]=0|tr[t>>0],tr[t>>0]=k,s=s+1|0}}while(0);for(k=0|jb[127&ar[16+(0|ar[d>>2])>>2]](d),d=A,s=t=0;!(r>>>0<=d>>>0);)(h=0|tr[((0|tr[o>>0])<0?0|ar[u>>2]:u)+t>>0])<<24>>24!=0&(0|s)==(h<<24>>24|0)&&(s=0|ar[n>>2],ar[n>>2]=s+1,tr[s>>0]=k,t=(t>>>0<(((s=0|tr[o>>0])<<24>>24<0?0|ar[a>>2]:255&s)-1|0)>>>0&1)+t|0,s=0),w=0|Hb[31&ar[28+(0|ar[c>>2])>>2]](c,0|tr[d>>0]),h=0|ar[n>>2],ar[n>>2]=h+1,tr[h>>0]=w,d=d+1|0,s=s+1|0;if((0|(t=i+(A-l)|0))!=(0|(A=0|ar[n>>2]))){for(;!((A=A+-1|0)>>>0<=t>>>0);)w=0|tr[t>>0],tr[t>>0]=0|tr[A>>0],tr[A>>0]=w,t=t+1|0;t=0|ar[n>>2]}}else Pb[7&ar[32+(0|ar[c>>2])>>2]](c,A,r,i),t=i+(s-l)|0,ar[n>>2]=t;ar[f>>2]=(0|e)==(0|r)?t:i+(e-l)|0,Bu(u),ur=b}function mr(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0;o=ur=(a=ur)+31&-32,ur=ur+16|0,t=12+o|0,c=0|ar[(A|=0)>>2];A:do{if(c){if(l=(0|(l=i-(h=e)>>2))<(0|(u=0|ar[(b=f+12|0)>>2]))?u-l|0:0,f=(h=(u=r)-h|0)>>2,0<(0|h)&&(0|xb[63&ar[48+(0|ar[c>>2])>>2]](c,e,f))!=(0|f)){c=ar[A>>2]=0;break}do{if(0<(0|l)){ar[o>>2]=0,ar[4+o>>2]=0,1073741807<l>>>(ar[8+o>>2]=0)&&pu();do{if(2<=l>>>0){if(!(1073741823<(f=l+4&2147483644)>>>0)){s=0|hu(f<<2),ar[o>>2]=s,ar[(d=8+o|0)>>2]=-2147483648|f,ar[4+o>>2]=l,d=d+3|0,k=o;break}lA()}else tr[(d=8+o+3|0)>>0]=l,k=s=o}while(0);if(gr(s,l,n),ln(s+(l<<2)|(ar[t>>2]=0),t),(0|xb[63&ar[48+(0|ar[c>>2])>>2]](c,(0|tr[d>>0])<0?0|ar[o>>2]:k,l))==(0|l)){Qu(o);break}ar[A>>2]=0,Qu(o),c=0;break A}}while(0);if(i=(h=i-u|0)>>2,0<(0|h)&&(0|xb[63&ar[48+(0|ar[c>>2])>>2]](c,r,i))!=(0|i)){c=ar[A>>2]=0;break}ar[b>>2]=0}else c=0}while(0);return ur=a,0|c}function gr(A,e,r){return A|=0,r|=0,(e|=0)&&function(A,e,r){A|=0,e|=0;var i=0;if(0|(r|=0))for(i=A;r=r+-1|0,ar[i>>2]=e,r;)i=i+4|0}(A,r,e),0|A}function Zr(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var o,a,c,l,u,b,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0;switch(l=ur=(b=ur)+31&-32,ur=ur+16|0,u=0|un(t|=0,59264),c=0|un(t,59272),fs[63&ar[20+(0|ar[c>>2])>>2]](l,c),ar[n>>2]=i,(t=0|tr[A>>0])<<24>>24){case 43:case 45:g=0|Hb[31&ar[44+(0|ar[u>>2])>>2]](u,t),t=0|ar[n>>2],ar[n>>2]=t+4,ar[t>>2]=g,t=A+1|0;break;default:t=A}g=r;A:do{if(1<(g-t|0)&&48==(0|tr[t>>0])){switch(0|tr[(s=t+1|0)>>0]){case 88:case 120:break;default:s=t,Z=10;break A}for(v=0|Hb[31&ar[44+(0|ar[u>>2])>>2]](u,48),m=0|ar[n>>2],ar[n>>2]=m+4,ar[m>>2]=v,t=t+2|0,m=0|Hb[31&ar[44+(0|ar[u>>2])>>2]](u,0|tr[s>>0]),s=0|ar[n>>2],ar[n>>2]=s+4,ar[s>>2]=m,s=t;;){if(r>>>0<=s>>>0)break A;if(!(0|lf(m=0|tr[s>>0],dn())))break A;s=s+1|0}}else s=t,Z=10}while(0);A:do{if(10==(0|Z))for(;;){if(r>>>(Z=0)<=s>>>0)break A;if(!(0|af(m=0|tr[s>>0],dn())))break A;s=s+1|0,Z=10}}while(0);w=0|tr[(o=11+l|0)>>0],a=4+l|0,v=t,m=A;A:do{if(0|(w<<24>>24<0?0|ar[a>>2]:255&w)){e:do{if((0|t)!=(0|s))for(A=s,d=t;;){if((A=A+-1|0)>>>0<=d>>>0)break e;w=0|tr[d>>0],tr[d>>0]=0|tr[A>>0],tr[A>>0]=w,d=d+1|0}}while(0);for(w=0|jb[127&ar[16+(0|ar[c>>2])>>2]](c),d=A=0;!(s>>>0<=t>>>0);)k=0|tr[o>>0],0<(p=0|tr[((h=k<<24>>24<0)?0|ar[l>>2]:l)+A>>0])<<24>>24&(0|d)==(p<<24>>24|0)&&(d=0|ar[n>>2],ar[n>>2]=d+4,ar[d>>2]=w,A=(A>>>0<((h?0|ar[a>>2]:255&k)-1|0)>>>0&1)+A|0,d=0),h=0|Hb[31&ar[44+(0|ar[u>>2])>>2]](u,0|tr[t>>0]),p=0|ar[n>>2],ar[n>>2]=p+4,ar[p>>2]=h,t=t+1|0,d=d+1|0;if((0|(t=i+(v-m<<2)|0))==(0|(d=0|ar[n>>2])))A=u;else for(A=d;;){if((A=A+-4|0)>>>0<=t>>>0){A=u,t=d;break A}p=0|ar[t>>2],ar[t>>2]=ar[A>>2],ar[A>>2]=p,t=t+4|0}}else Pb[7&ar[48+(0|ar[u>>2])>>2]](u,t,s,0|ar[n>>2]),t=(0|ar[n>>2])+(s-v<<2)|0,ar[n>>2]=t,A=u}while(0);for(;!(r>>>0<=s>>>0);){if(t=0|tr[s>>0],s=s+1|0,t<<24>>24==46){Z=29;break}v=0|Hb[31&ar[44+(0|ar[A>>2])>>2]](u,t),t=(p=0|ar[n>>2])+4|0,ar[n>>2]=t,ar[p>>2]=v}29==(0|Z)&&(Z=0|jb[127&ar[12+(0|ar[c>>2])>>2]](c),t=(p=0|ar[n>>2])+4|0,ar[n>>2]=t,ar[p>>2]=Z),Pb[7&ar[48+(0|ar[u>>2])>>2]](u,s,r,t),p=(0|ar[n>>2])+(g-s<<2)|0,ar[n>>2]=p,ar[f>>2]=(0|e)==(0|r)?p:i+(e-m<<2)|0,Bu(l),ur=b}function pr(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var o,a,c,l,u,b,s=0,d=0,k=0,h=0,w=0,v=0;if(u=ur=(b=ur)+31&-32,ur=ur+16|0,c=0|un(t|=0,59264),d=0|un(t,59272),fs[63&ar[20+(0|ar[d>>2])>>2]](u,d),a=4+u|0,l=A,s=r,0|((w=0|tr[(o=11+u|0)>>0])<<24>>24<0?0|ar[a>>2]:255&w)){switch(ar[n>>2]=i,(t=0|tr[A>>0])<<24>>24){case 43:case 45:h=0|Hb[31&ar[44+(0|ar[c>>2])>>2]](c,t),w=0|ar[n>>2],ar[n>>2]=w+4,ar[w>>2]=h,A=A+1|0}A:do{if(1<(s-A|0)&&48==(0|tr[A>>0])){switch(0|tr[(t=A+1|0)>>0]){case 88:case 120:break;default:break A}w=0|Hb[31&ar[44+(0|ar[c>>2])>>2]](c,48),h=0|ar[n>>2],ar[n>>2]=h+4,ar[h>>2]=w,h=0|Hb[31&ar[44+(0|ar[c>>2])>>2]](c,0|tr[t>>0]),w=0|ar[n>>2],ar[n>>2]=w+4,ar[w>>2]=h,A=A+2|0}}while(0);A:do{if((0|A)!=(0|r))for(t=r,s=A;;){if((t=t+-1|0)>>>0<=s>>>0)break A;w=0|tr[s>>0],tr[s>>0]=0|tr[t>>0],tr[t>>0]=w,s=s+1|0}}while(0);for(w=0|jb[127&ar[16+(0|ar[d>>2])>>2]](d),h=A,s=t=0;!(r>>>0<=h>>>0);)d=0|tr[o>>0],(v=0|tr[((k=d<<24>>24<0)?0|ar[u>>2]:u)+t>>0])<<24>>24!=0&(0|s)==(v<<24>>24|0)&&(s=0|ar[n>>2],ar[n>>2]=s+4,ar[s>>2]=w,t=(t>>>0<((k?0|ar[a>>2]:255&d)-1|0)>>>0&1)+t|0,s=0),k=0|Hb[31&ar[44+(0|ar[c>>2])>>2]](c,0|tr[h>>0]),v=0|ar[n>>2],ar[n>>2]=v+4,ar[v>>2]=k,h=h+1|0,s=s+1|0;if((0|(t=i+(A-l<<2)|0))!=(0|(A=0|ar[n>>2]))){for(;!((A=A+-4|0)>>>0<=t>>>0);)v=0|ar[t>>2],ar[t>>2]=ar[A>>2],ar[A>>2]=v,t=t+4|0;t=0|ar[n>>2]}}else Pb[7&ar[48+(0|ar[c>>2])>>2]](c,A,r,i),t=i+(s-l<<2)|0,ar[n>>2]=t;ar[f>>2]=(0|e)==(0|r)?t:i+(e-l<<2)|0,Bu(u),ur=b}function yr(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a;a=ur=(t=ur)+31&-32,ur=ur+16|0,o=4+a|0,A=0|jb[127&ar[ar[(A=(A|=0)+8|0)>>2]>>2]](A),ar[a>>2]=ar[i>>2],ar[o>>2]=ar[a>>2],(0|(A=(0|Vn(r,o,A,A+168|0,n,f,0))-A|0))<168&&(ar[e>>2]=((0|A)/12|0)%7|0),ur=t}function Br(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a;a=ur=(t=ur)+31&-32,ur=ur+16|0,o=4+a|0,A=0|jb[127&ar[4+(0|ar[(A=(A|=0)+8|0)>>2])>>2]](A),ar[a>>2]=ar[i>>2],ar[o>>2]=ar[a>>2],(0|(A=(0|Vn(r,o,A,A+288|0,n,f,0))-A|0))<288&&(ar[e>>2]=((0|A)/12|0)%12|0),ur=t}function Er(A,e,r,i,f,n,t,o){A|=0,e|=0,r|=0,f|=0,n|=0,t|=0,o|=0;var a,c,l,u,b,s,d,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0;s=ur=(d=ur)+31&-32,ur=ur+16|0,a=8+s|0,b=4+s|0,Tf(c=12+s|0,i|=0),l=0|un(c,59232),bn(c),u=8+l|(ar[f>>2]=0),k=0;A:for(;;){for(Z=(0|t)!=(0|o),h=k;;){if(k=0|ar[e>>2],!(Z&0==(0|h)))break A;g=(w=k)?0|Mf(h=(0|(h=0|ar[k+12>>2]))==(0|ar[k+16>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|hf(0|tr[h>>0]),-1)?(m=1,k=ar[e>>2]=0):(m=0,w):(k=0,m=1,w),h=v=0|ar[r>>2];do{if(v){if(0|Mf(w=(0|(w=0|ar[v+12>>2]))==(0|ar[v+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](v):0|hf(0|tr[w>>0]),-1)){h=ar[r>>2]=0,y=16;break}if(m)break;y=61;break A}y=16}while(0);if(16==(0|y)){if(y=0,m){y=61;break A}v=0}if((0|xb[63&ar[36+(0|ar[l>>2])>>2]](l,0|tr[t>>0],0))<<24>>24==37){y=19;break}if(-1<(h=0|tr[t>>0])<<24>>24&&(p=0|ar[u>>2],8192&or[p+(h<<24>>24<<1)>>1])){y=27;break}if(h=(0|(h=0|ar[(w=k+12|0)>>2]))==(0|ar[(v=k+16|0)>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|hf(0|tr[h>>0]),(g=0|Hb[31&ar[12+(0|ar[l>>2])>>2]](l,255&h))<<24>>24==(0|Hb[31&ar[12+(0|ar[l>>2])>>2]](l,0|tr[t>>0]))<<24>>24){y=57;break}h=ar[f>>2]=4}e:do{if(19==(0|y)){if(((y=0)|(m=t+1|0))==(0|o)){y=61;break A}switch((w=0|xb[63&ar[36+(0|ar[l>>2])>>2]](l,0|tr[m>>0],0))<<24>>24){case 48:case 69:if((0|(t=t+2|0))==(0|o)){y=61;break A}v=w,k=0|xb[63&ar[36+(0|ar[l>>2])>>2]](l,0|tr[t>>0],0),t=m;break;default:v=0,k=w}Z=0|ar[36+(0|ar[A>>2])>>2],ar[b>>2]=g,ar[s>>2]=h,ar[a>>2]=ar[b>>2],ar[c>>2]=ar[s>>2],Z=0|es[15&Z](A,a,c,i,f,n,k,v),ar[e>>2]=Z,t=t+2|0}else if(27==(0|y)){for(;;){if(((y=0)|(t=t+1|0))==(0|o)){t=o;break}if((h=0|tr[t>>0])<<24>>24<=-1)break;if(!(8192&or[p+(h<<24>>24<<1)>>1]))break;y=27}for(h=v;;){k?0|Mf(w=(0|(w=0|ar[k+12>>2]))==(0|ar[k+16>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|hf(0|tr[w>>0]),-1)?(m=1,k=ar[e>>2]=0):m=0:(m=1,k=0);do{if(v){if(0|Mf(w=(0|(w=0|ar[v+12>>2]))==(0|ar[v+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](v):0|hf(0|tr[w>>0]),-1)){h=ar[r>>2]=0,y=43;break}if(m^0==(0|h)){v=g=h;break}break e}y=43}while(0);if(43==(0|y)){if(y=0,m)break e;g=h,v=0}if((255&(h=(0|(h=0|ar[(w=k+12|0)>>2]))==(0|ar[(m=k+16|0)>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|hf(0|tr[h>>0])))<<24>>24<=-1)break e;if(!(8192&or[(0|ar[u>>2])+(h<<24>>24<<1)>>1]))break e;(0|(h=0|ar[w>>2]))!=(0|ar[m>>2])?(ar[w>>2]=h+1,hf(0|tr[h>>0]),h=g):(jb[127&ar[40+(0|ar[k>>2])>>2]](k),h=g)}}else if(57==(0|y)){if(t=t+1|(y=0),(0|(h=0|ar[w>>2]))==(0|ar[v>>2])){jb[127&ar[40+(0|ar[k>>2])>>2]](k);break}ar[w>>2]=h+1,hf(0|tr[h>>0]);break}}while(0);k=0|ar[f>>2]}61==(0|y)&&(ar[f>>2]=4),w=k?0|Mf(t=(0|(t=0|ar[k+12>>2]))==(0|ar[k+16>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|hf(0|tr[t>>0]),-1)?(k=ar[e>>2]=0,1):0:(k=0,1),t=0|ar[r>>2];do{if(t){if(0|Mf(t=(0|(h=0|ar[t+12>>2]))==(0|ar[t+16>>2])?0|jb[127&ar[36+(0|ar[t>>2])>>2]](t):0|hf(0|tr[h>>0]),-1)){ar[r>>2]=0,y=74;break}if(w)break;y=76;break}y=74}while(0);return 74==(0|y)&&w&&(y=76),76==(0|y)&&(ar[f>>2]=2|ar[f>>2]),ur=d,0|k}function Xr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],((A=0|Jr(r,A,f,n,2))+-1|0)>>>0<31&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function Wr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|Jr(r,A,f,n,2)))<24&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function Ir(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],((A=0|Jr(r,A,f,n,2))+-1|0)>>>0<12&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function Cr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|Jr(r,A,f,n,3)))<366&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function Gr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|Jr(r,A,f,n,2)))<13&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A+-1:ar[f>>2]=4|r,ur=t}function Vr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|Jr(r,A,f,n,2)))<60&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function Fr(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0;var n,t=0,o=0;n=(f|=0)+8|0;A:for(;;){A=0|ar[e>>2];do{if(A){if(0|Mf(A=(0|(f=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|hf(0|tr[f>>0]),-1)){ar[e>>2]=0,t=1;break}t=0==(0|ar[e>>2]);break}t=1}while(0);f=0|ar[r>>2];do{if(f){if(0|Mf(A=(0|(A=0|ar[f+12>>2]))==(0|ar[f+16>>2])?0|jb[127&ar[36+(0|ar[f>>2])>>2]](f):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,o=15;break}if(t){t=f;break}t=f;break A}o=15}while(0);if(15==(0|o)){if(o=0,t){t=0;break}t=0}if(A=0|ar[e>>2],(255&(A=(0|(f=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|hf(0|tr[f>>0])))<<24>>24<=-1)break;if(!(8192&or[(0|ar[n>>2])+(A<<24>>24<<1)>>1]))break;A=0|ar[e>>2],(0|(t=0|ar[(f=A+12|0)>>2]))!=(0|ar[A+16>>2])?(ar[f>>2]=t+1,hf(0|tr[t>>0])):jb[127&ar[40+(0|ar[A>>2])>>2]](A)}A=0|ar[e>>2];do{if(A){if(0|Mf(A=(0|(f=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|hf(0|tr[f>>0]),-1)){ar[e>>2]=0,f=1;break}f=0==(0|ar[e>>2]);break}f=1}while(0);do{if(t){if(0|Mf(A=(0|(A=0|ar[t+12>>2]))==(0|ar[t+16>>2])?0|jb[127&ar[36+(0|ar[t>>2])>>2]](t):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,o=38;break}if(f)break;o=40;break}o=38}while(0);38==(0|o)&&f&&(o=40),40==(0|o)&&(ar[i>>2]=2|ar[i>>2])}function Rr(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c=0,l=0;o=ur=(a=ur)+31&-32,ur=ur+16|0,t=4+o|0,l=0|jb[127&ar[8+(0|ar[(l=(A|=0)+8|0)>>2])>>2]](l),c=(A=0|tr[l+11>>0])<<24>>24<0?0|ar[l+4>>2]:255&A,(A=0|tr[l+12+11>>0])<<24>>24<0?A=0|ar[l+16>>2]:A&=255;do{if((0|c)!=(0-A|0)){if(ar[o>>2]=ar[i>>2],ar[t>>2]=ar[o>>2],A=(0|Vn(r,t,l,l+24|0,n,f,0))-l|0,12==(0|(c=0|ar[e>>2]))&0==(0|A)){ar[e>>2]=0;break}(0|c)<12&12==(0|A)&&(ar[e>>2]=c+12)}else ar[f>>2]=4|ar[f>>2]}while(0);ur=a}function Nr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|Jr(r,A,f,n,2)))<61&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function _r(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|Jr(r,A,f,n,1)))<7&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function Yr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],A=0|Jr(r,A,f,n,4),4&ar[f>>2]||(A=(0|A)<69?A+2e3|0:(0|A)<100?A+1900|0:A,ar[e>>2]=A+-1900),ur=t}function Qr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],A=0|Jr(r,A,f,n,4),4&ar[f>>2]||(ar[e>>2]=A+-1900),ur=t}function Dr(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n=0,t=0,o=0,a=0;A=0|ar[(e|=0)>>2];do{if(A){if(0|Mf(A=(0|(n=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|hf(0|tr[n>>0]),-1)){ar[e>>2]=0,t=1;break}t=0==(0|ar[e>>2]);break}t=1}while(0);n=0|ar[r>>2];do{if(n){if(0|Mf(A=(0|(A=0|ar[n+12>>2]))==(0|ar[n+16>>2])?0|jb[127&ar[36+(0|ar[n>>2])>>2]](n):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,a=14;break}if(t){o=n,a=16;break}A=6,a=38;break}a=14}while(0);14==(0|a)&&(a=t?(A=6,38):(o=0,16));A:do{if(16==(0|a))if(A=0|ar[e>>2],A=(0|(n=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|hf(0|tr[n>>0]),(0|xb[63&ar[36+(0|ar[f>>2])>>2]](f,255&A,0))<<24>>24==37){A=0|ar[e>>2],(0|(t=0|ar[(n=A+12|0)>>2]))==(0|ar[A+16>>2])?jb[127&ar[40+(0|ar[A>>2])>>2]](A):(ar[n>>2]=t+1,hf(0|tr[t>>0])),A=0|ar[e>>2];do{if(A){if(0|Mf(A=(0|(n=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|hf(0|tr[n>>0]),-1)){ar[e>>2]=0,n=1;break}n=0==(0|ar[e>>2]);break}n=1}while(0);do{if(0|o){if(0|Mf(A=(0|(A=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0;break}if(n)break A;A=2,a=38;break A}}while(0);n&&(A=2,a=38)}else A=4,a=38}while(0);38==(0|a)&&(ar[i>>2]=ar[i>>2]|A)}function Jr(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;n=0|ar[(A|=0)>>2];do{if(n){if(0|Mf(n=(0|(t=0|ar[n+12>>2]))==(0|ar[n+16>>2])?0|jb[127&ar[36+(0|ar[n>>2])>>2]](n):0|hf(0|tr[t>>0]),-1)){ar[A>>2]=0,o=1;break}o=0==(0|ar[A>>2]);break}o=1}while(0);t=0|ar[e>>2];do{if(t){if(0|Mf(n=(0|(n=0|ar[t+12>>2]))==(0|ar[t+16>>2])?0|jb[127&ar[36+(0|ar[t>>2])>>2]](t):0|hf(0|tr[n>>0]),-1)){ar[e>>2]=0,k=14;break}if(o){k=17;break}k=16;break}k=14}while(0);14==(0|k)&&(k=o?16:(t=0,17));A:do{if(16==(0|k))ar[r>>2]=6|ar[r>>2],n=0;else if(17==(0|k)){if(n=0|ar[A>>2],-1<(o=255&(n=(0|(o=0|ar[n+12>>2]))==(0|ar[n+16>>2])?0|jb[127&ar[36+(0|ar[n>>2])>>2]](n):0|hf(0|tr[o>>0])))<<24>>24&&2048&or[(0|ar[(d=i+8|0)>>2])+(n<<24>>24<<1)>>1]){for(n=(0|xb[63&ar[36+(0|ar[i>>2])>>2]](i,o,0))<<24>>24,o=0|ar[A>>2],a=l=((0|(c=0|ar[(a=o+12|0)>>2]))==(0|ar[o+16>>2])?jb[127&ar[40+(0|ar[o>>2])>>2]](o):(ar[a>>2]=c+1,hf(0|tr[c>>0])),t);;){n=n+-48|0,s=f+-1|0,t=0|ar[A>>2];do{if(t){if(0|Mf(t=(0|(o=0|ar[t+12>>2]))==(0|ar[t+16>>2])?0|jb[127&ar[36+(0|ar[t>>2])>>2]](t):0|hf(0|tr[o>>0]),-1)){ar[A>>2]=0,c=1;break}c=0==(0|ar[A>>2]);break}c=1}while(0);do{if(a){if(0|Mf(t=(0|(t=0|ar[a+12>>2]))==(0|ar[a+16>>2])?0|jb[127&ar[36+(0|ar[a>>2])>>2]](a):0|hf(0|tr[t>>0]),-1)){t=1,u=b=ar[e>>2]=0;break}t=0==(0|(b=l)),u=l;break}b=l,t=1,u=0}while(0);if(o=0|ar[A>>2],!(1<(0|f)&(c^t)))break;if((o=255&(t=(0|(t=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|hf(0|tr[t>>0])))<<24>>24<=-1)break A;if(!(2048&or[(0|ar[d>>2])+(t<<24>>24<<1)>>1]))break A;n=((0|xb[63&ar[36+(0|ar[i>>2])>>2]](i,o,0))<<24>>24)+(10*n|0)|0,t=0|ar[A>>2],(0|(a=0|ar[(o=t+12|0)>>2]))!=(0|ar[t+16>>2])?(ar[o>>2]=a+1,hf(0|tr[a>>0]),f=s,l=b,a=u):(jb[127&ar[40+(0|ar[t>>2])>>2]](t),f=s,l=b,a=u)}do{if(o){if(0|Mf(t=(0|(t=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|hf(0|tr[t>>0]),-1)){ar[A>>2]=0,o=1;break}o=0==(0|ar[A>>2]);break}o=1}while(0);do{if(b){if(0|Mf(t=(0|(t=0|ar[b+12>>2]))==(0|ar[b+16>>2])?0|jb[127&ar[36+(0|ar[b>>2])>>2]](b):0|hf(0|tr[t>>0]),-1)){ar[e>>2]=0,k=62;break}if(o)break A;break}k=62}while(0);if(62==(0|k)&&!o)break;ar[r>>2]=2|ar[r>>2];break}ar[r>>2]=4|ar[r>>2],n=0}}while(0);return 0|n}function Mr(A){return 0|function(A){var e=0;e=A|=0;for(;0|ar[e>>2];)e=e+4|0;return e-A>>2|0}(A|=0)}function Tr(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a;a=ur=(t=ur)+31&-32,ur=ur+16|0,o=4+a|0,A=0|jb[127&ar[ar[(A=(A|=0)+8|0)>>2]>>2]](A),ar[a>>2]=ar[i>>2],ar[o>>2]=ar[a>>2],(0|(A=(0|ir(r,o,A,A+168|0,n,f,0))-A|0))<168&&(ar[e>>2]=((0|A)/12|0)%7|0),ur=t}function Ur(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a;a=ur=(t=ur)+31&-32,ur=ur+16|0,o=4+a|0,A=0|jb[127&ar[4+(0|ar[(A=(A|=0)+8|0)>>2])>>2]](A),ar[a>>2]=ar[i>>2],ar[o>>2]=ar[a>>2],(0|(A=(0|ir(r,o,A,A+288|0,n,f,0))-A|0))<288&&(ar[e>>2]=((0|A)/12|0)%12|0),ur=t}function Sr(A,e,r,i,f,n,t,o){A|=0,e|=0,r|=0,f|=0,n|=0,t|=0,o|=0;var a,c,l,u,b,s,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;b=ur=(s=ur)+31&-32,ur=ur+16|0,a=8+b|0,u=4+b|0,Tf(c=12+b|0,i|=0),l=0|un(c,59264),bn(c),d=ar[f>>2]=0;A:for(;;){for(g=(0|t)!=(0|o),k=d;;){if(d=0|ar[e>>2],!(g&0==(0|k)))break A;m=(h=d)?0|Uf(k=(0|(k=0|ar[d+12>>2]))==(0|ar[d+16>>2])?0|jb[127&ar[36+(0|ar[d>>2])>>2]](d):0|gf(0|ar[k>>2]),-1)?(v=1,d=ar[e>>2]=0):(v=0,h):(d=0,v=1,h),k=w=0|ar[r>>2];do{if(w){if(0|Uf(h=(0|(h=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[h>>2]),-1)){k=ar[r>>2]=0,Z=16;break}if(v)break;Z=58;break A}Z=16}while(0);if(16==(0|Z)){if(Z=0,v){Z=58;break A}w=0}if((0|xb[63&ar[52+(0|ar[l>>2])>>2]](l,0|ar[t>>2],0))<<24>>24==37){Z=19;break}if(0|xb[63&ar[12+(0|ar[l>>2])>>2]](l,8192,0|ar[t>>2])){Z=26;break}if(k=(0|(k=0|ar[(h=d+12|0)>>2]))==(0|ar[(w=d+16|0)>>2])?0|jb[127&ar[36+(0|ar[d>>2])>>2]](d):0|gf(0|ar[k>>2]),(0|(m=0|Hb[31&ar[28+(0|ar[l>>2])>>2]](l,k)))==(0|Hb[31&ar[28+(0|ar[l>>2])>>2]](l,0|ar[t>>2]))){Z=54;break}k=ar[f>>2]=4}e:do{if(19==(0|Z)){if(((Z=0)|(v=t+4|0))==(0|o)){Z=58;break A}switch((h=0|xb[63&ar[52+(0|ar[l>>2])>>2]](l,0|ar[v>>2],0))<<24>>24){case 48:case 69:if((0|(t=t+8|0))==(0|o)){Z=58;break A}w=h,d=0|xb[63&ar[52+(0|ar[l>>2])>>2]](l,0|ar[t>>2],0),t=v;break;default:w=0,d=h}g=0|ar[36+(0|ar[A>>2])>>2],ar[u>>2]=m,ar[b>>2]=k,ar[a>>2]=ar[u>>2],ar[c>>2]=ar[b>>2],g=0|es[15&g](A,a,c,i,f,n,d,w),ar[e>>2]=g,t=t+8|0}else if(26==(0|Z)){for(;;){if(((Z=0)|(t=t+4|0))==(0|o)){t=o;break}if(!(0|xb[63&ar[12+(0|ar[l>>2])>>2]](l,8192,0|ar[t>>2])))break;Z=26}for(k=w;;){d?0|Uf(h=(0|(h=0|ar[d+12>>2]))==(0|ar[d+16>>2])?0|jb[127&ar[36+(0|ar[d>>2])>>2]](d):0|gf(0|ar[h>>2]),-1)?(v=1,d=ar[e>>2]=0):v=0:(v=1,d=0);do{if(w){if(0|Uf(h=(0|(h=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[h>>2]),-1)){k=ar[r>>2]=0,Z=41;break}if(v^0==(0|k)){w=m=k;break}break e}Z=41}while(0);if(41==(0|Z)){if(Z=0,v)break e;m=k,w=0}if(k=(0|(k=0|ar[(h=d+12|0)>>2]))==(0|ar[(v=d+16|0)>>2])?0|jb[127&ar[36+(0|ar[d>>2])>>2]](d):0|gf(0|ar[k>>2]),!(0|xb[63&ar[12+(0|ar[l>>2])>>2]](l,8192,k)))break e;(0|(k=0|ar[h>>2]))!=(0|ar[v>>2])?(ar[h>>2]=k+4,gf(0|ar[k>>2]),k=m):(jb[127&ar[40+(0|ar[d>>2])>>2]](d),k=m)}}else if(54==(0|Z)){if(t=t+4|(Z=0),(0|(k=0|ar[h>>2]))==(0|ar[w>>2])){jb[127&ar[40+(0|ar[d>>2])>>2]](d);break}ar[h>>2]=k+4,gf(0|ar[k>>2]);break}}while(0);d=0|ar[f>>2]}58==(0|Z)&&(ar[f>>2]=4),h=d?0|Uf(t=(0|(t=0|ar[d+12>>2]))==(0|ar[d+16>>2])?0|jb[127&ar[36+(0|ar[d>>2])>>2]](d):0|gf(0|ar[t>>2]),-1)?(d=ar[e>>2]=0,1):0:(d=0,1),t=0|ar[r>>2];do{if(t){if(0|Uf(t=(0|(k=0|ar[t+12>>2]))==(0|ar[t+16>>2])?0|jb[127&ar[36+(0|ar[t>>2])>>2]](t):0|gf(0|ar[k>>2]),-1)){ar[r>>2]=0,Z=71;break}if(h)break;Z=73;break}Z=71}while(0);return 71==(0|Z)&&h&&(Z=73),73==(0|Z)&&(ar[f>>2]=2|ar[f>>2]),ur=s,0|d}function Or(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],((A=0|ii(r,A,f,n,2))+-1|0)>>>0<31&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function zr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|ii(r,A,f,n,2)))<24&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function jr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],((A=0|ii(r,A,f,n,2))+-1|0)>>>0<12&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function Hr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|ii(r,A,f,n,3)))<366&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function xr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|ii(r,A,f,n,2)))<13&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A+-1:ar[f>>2]=4|r,ur=t}function Pr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|ii(r,A,f,n,2)))<60&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function Lr(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n=0,t=0,o=0;A:for(;;){A=0|ar[e>>2];do{if(A){if(0|Uf(A=(0|(n=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|gf(0|ar[n>>2]),-1)){ar[e>>2]=0,t=1;break}t=0==(0|ar[e>>2]);break}t=1}while(0);n=0|ar[r>>2];do{if(n){if(0|Uf(A=(0|(A=0|ar[n+12>>2]))==(0|ar[n+16>>2])?0|jb[127&ar[36+(0|ar[n>>2])>>2]](n):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,o=15;break}if(t){t=n;break}t=n;break A}o=15}while(0);if(15==(0|o)){if(o=0,t){t=0;break}t=0}if(A=0|ar[e>>2],A=(0|(n=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|gf(0|ar[n>>2]),!(0|xb[63&ar[12+(0|ar[f>>2])>>2]](f,8192,A)))break;A=0|ar[e>>2],(0|(t=0|ar[(n=A+12|0)>>2]))!=(0|ar[A+16>>2])?(ar[n>>2]=t+4,gf(0|ar[t>>2])):jb[127&ar[40+(0|ar[A>>2])>>2]](A)}A=0|ar[e>>2];do{if(A){if(0|Uf(A=(0|(n=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|gf(0|ar[n>>2]),-1)){ar[e>>2]=0,n=1;break}n=0==(0|ar[e>>2]);break}n=1}while(0);do{if(t){if(0|Uf(A=(0|(A=0|ar[t+12>>2]))==(0|ar[t+16>>2])?0|jb[127&ar[36+(0|ar[t>>2])>>2]](t):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,o=37;break}if(n)break;o=39;break}o=37}while(0);37==(0|o)&&n&&(o=39),39==(0|o)&&(ar[i>>2]=2|ar[i>>2])}function Kr(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c=0,l=0;o=ur=(a=ur)+31&-32,ur=ur+16|0,t=4+o|0,l=0|jb[127&ar[8+(0|ar[(l=(A|=0)+8|0)>>2])>>2]](l),c=(A=0|tr[l+8+3>>0])<<24>>24<0?0|ar[l+4>>2]:255&A,(A=0|tr[l+20+3>>0])<<24>>24<0?A=0|ar[l+16>>2]:A&=255;do{if((0|c)!=(0-A|0)){if(ar[o>>2]=ar[i>>2],ar[t>>2]=ar[o>>2],A=(0|ir(r,t,l,l+24|0,n,f,0))-l|0,12==(0|(c=0|ar[e>>2]))&0==(0|A)){ar[e>>2]=0;break}(0|c)<12&12==(0|A)&&(ar[e>>2]=c+12)}else ar[f>>2]=4|ar[f>>2]}while(0);ur=a}function qr(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|ii(r,A,f,n,2)))<61&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function $r(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],(0|(A=0|ii(r,A,f,n,1)))<7&0==(4&(r=0|ar[f>>2])|0)?ar[e>>2]=A:ar[f>>2]=4|r,ur=t}function Ai(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],A=0|ii(r,A,f,n,4),4&ar[f>>2]||(A=(0|A)<69?A+2e3|0:(0|A)<100?A+1900|0:A,ar[e>>2]=A+-1900),ur=t}function ei(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o;o=ur=(t=ur)+31&-32,ur=ur+16|0,A=4+o|0,ar[o>>2]=ar[i>>2],ar[A>>2]=ar[o>>2],A=0|ii(r,A,f,n,4),4&ar[f>>2]||(ar[e>>2]=A+-1900),ur=t}function ri(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n=0,t=0,o=0,a=0;A=0|ar[(e|=0)>>2];do{if(A){if(0|Uf(A=(0|(n=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|gf(0|ar[n>>2]),-1)){ar[e>>2]=0,t=1;break}t=0==(0|ar[e>>2]);break}t=1}while(0);n=0|ar[r>>2];do{if(n){if(0|Uf(A=(0|(A=0|ar[n+12>>2]))==(0|ar[n+16>>2])?0|jb[127&ar[36+(0|ar[n>>2])>>2]](n):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,a=14;break}if(t){o=n,a=16;break}A=6,a=38;break}a=14}while(0);14==(0|a)&&(a=t?(A=6,38):(o=0,16));A:do{if(16==(0|a))if(A=0|ar[e>>2],A=(0|(n=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|gf(0|ar[n>>2]),(0|xb[63&ar[52+(0|ar[f>>2])>>2]](f,A,0))<<24>>24==37){A=0|ar[e>>2],(0|(t=0|ar[(n=A+12|0)>>2]))==(0|ar[A+16>>2])?jb[127&ar[40+(0|ar[A>>2])>>2]](A):(ar[n>>2]=t+4,gf(0|ar[t>>2])),A=0|ar[e>>2];do{if(A){if(0|Uf(A=(0|(n=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|gf(0|ar[n>>2]),-1)){ar[e>>2]=0,n=1;break}n=0==(0|ar[e>>2]);break}n=1}while(0);do{if(0|o){if(0|Uf(A=(0|(A=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0;break}if(n)break A;A=2,a=38;break A}}while(0);n&&(A=2,a=38)}else A=4,a=38}while(0);38==(0|a)&&(ar[i>>2]=ar[i>>2]|A)}function ii(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0;n=0|ar[(A|=0)>>2];do{if(n){if(0|Uf(n=(0|(t=0|ar[n+12>>2]))==(0|ar[n+16>>2])?0|jb[127&ar[36+(0|ar[n>>2])>>2]](n):0|gf(0|ar[t>>2]),-1)){ar[A>>2]=0,o=1;break}o=0==(0|ar[A>>2]);break}o=1}while(0);t=0|ar[e>>2];do{if(t){if(0|Uf(n=(0|(n=0|ar[t+12>>2]))==(0|ar[t+16>>2])?0|jb[127&ar[36+(0|ar[t>>2])>>2]](t):0|gf(0|ar[n>>2]),-1)){ar[e>>2]=0,d=14;break}if(o){d=17;break}d=16;break}d=14}while(0);14==(0|d)&&(d=o?16:(t=0,17));A:do{if(16==(0|d))ar[r>>2]=6|ar[r>>2],n=0;else if(17==(0|d)){if(n=0|ar[A>>2],n=(0|(o=0|ar[n+12>>2]))==(0|ar[n+16>>2])?0|jb[127&ar[36+(0|ar[n>>2])>>2]](n):0|gf(0|ar[o>>2]),!(0|xb[63&ar[12+(0|ar[i>>2])>>2]](i,2048,n))){ar[r>>2]=4|ar[r>>2],n=0;break}for(n=(0|xb[63&ar[52+(0|ar[i>>2])>>2]](i,n,0))<<24>>24,o=0|ar[A>>2],a=l=((0|(c=0|ar[(a=o+12|0)>>2]))==(0|ar[o+16>>2])?jb[127&ar[40+(0|ar[o>>2])>>2]](o):(ar[a>>2]=c+4,gf(0|ar[c>>2])),t);;){n=n+-48|0,s=f+-1|0,t=0|ar[A>>2];do{if(t){if(0|Uf(t=(0|(o=0|ar[t+12>>2]))==(0|ar[t+16>>2])?0|jb[127&ar[36+(0|ar[t>>2])>>2]](t):0|gf(0|ar[o>>2]),-1)){ar[A>>2]=0,c=1;break}c=0==(0|ar[A>>2]);break}c=1}while(0);do{if(a){if(0|Uf(t=(0|(t=0|ar[a+12>>2]))==(0|ar[a+16>>2])?0|jb[127&ar[36+(0|ar[a>>2])>>2]](a):0|gf(0|ar[t>>2]),-1)){t=1,u=b=ar[e>>2]=0;break}t=0==(0|(b=l)),u=l;break}b=l,t=1,u=0}while(0);if(o=0|ar[A>>2],!(1<(0|f)&(c^t)))break;if(t=(0|(t=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|gf(0|ar[t>>2]),!(0|xb[63&ar[12+(0|ar[i>>2])>>2]](i,2048,t)))break A;n=((0|xb[63&ar[52+(0|ar[i>>2])>>2]](i,t,0))<<24>>24)+(10*n|0)|0,t=0|ar[A>>2],(0|(a=0|ar[(o=t+12|0)>>2]))!=(0|ar[t+16>>2])?(ar[o>>2]=a+4,gf(0|ar[a>>2]),f=s,l=b,a=u):(jb[127&ar[40+(0|ar[t>>2])>>2]](t),f=s,l=b,a=u)}do{if(o){if(0|Uf(t=(0|(t=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|gf(0|ar[t>>2]),-1)){ar[A>>2]=0,o=1;break}o=0==(0|ar[A>>2]);break}o=1}while(0);do{if(b){if(0|Uf(t=(0|(t=0|ar[b+12>>2]))==(0|ar[b+16>>2])?0|jb[127&ar[36+(0|ar[b>>2])>>2]](b):0|gf(0|ar[t>>2]),-1)){ar[e>>2]=0,d=60;break}if(o)break A;break}d=60}while(0);if(60==(0|d)&&!o)break;ar[r>>2]=2|ar[r>>2]}}while(0);return 0|n}function fi(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u=0;t=ur=(a=ur)+31&-32,ur=ur+16|0,tr[t>>0]=37,tr[(o=1+t|0)>>0]=f,tr[(u=2+t|0)>>0]=n,tr[3+t>>0]=0,n<<24>>24&&(tr[o>>0]=n,tr[u>>0]=f),u=0|(c=e,l=0|ar[r>>2],(l|=0)-(c|=0)|0),u=e+(0|EA(0|e,0|u,0|t,0|i,0|ar[A>>2]))|0,ar[r>>2]=u,ur=a}function ni(A){(0|(0|ar[(A|=0)>>2]))!=(0|dn())&&of(0|ar[A>>2])}function ti(){lA()}function oi(A,e,r){return A|=0,r|=0,0|(e|=0)&&vb(0|A,255&(0|hf(r))|0,0|e),0|A}function ai(A,e,r,i,f,n,t,o,a,c,l){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0;var u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0;for(V=ur=(J=ur)+31&-32,ur=ur+512|0,j=96+V|0,D=80+V|0,G=72+V|0,E=68+V|0,X=500+V|0,W=497+V|0,I=496+V|0,F=56+V|0,R=44+V|0,N=32+V|0,_=20+V|0,Y=8+V|0,C=4+V|0,ar[(B=88+V|0)>>2]=l,ar[D>>2]=j,ar[(Q=4+D|0)>>2]=444,ar[G>>2]=j,ar[E>>2]=j+400,ar[F>>2]=0,ar[4+F>>2]=0,l=ar[8+F>>2]=0;3!=(0|l);)l=l+1|(ar[F+(l<<2)>>2]=0);for(ar[R>>2]=0,ar[4+R>>2]=0,l=ar[8+R>>2]=0;3!=(0|l);)l=l+1|(ar[R+(l<<2)>>2]=0);for(ar[N>>2]=0,ar[4+N>>2]=0,l=ar[8+N>>2]=0;3!=(0|l);)l=l+1|(ar[N+(l<<2)>>2]=0);for(ar[_>>2]=0,ar[4+_>>2]=0,l=ar[8+_>>2]=0;3!=(0|l);)l=l+1|(ar[_+(l<<2)>>2]=0);for(ar[Y>>2]=0,ar[4+Y>>2]=0,l=ar[8+Y>>2]=0;3!=(0|l);)l=l+1|(ar[Y+(l<<2)>>2]=0);!function(A,e,r,i,f,n,t,o,a,c){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l,u,b;if(u=ur=(b=ur)+31&-32,ur=ur+16|0,l=12+u|0,A|=0){for(e=0|un(e,60952),fs[63&ar[44+(0|ar[e>>2])>>2]](l,e),A=0|ar[l>>2],tr[r>>0]=A,tr[r+1>>0]=A>>8,tr[r+2>>0]=A>>16,tr[r+3>>0]=A>>24,fs[63&ar[32+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=a+11|0)>>0])<0?(A=0|ar[a>>2],tr[l>>0]=0,Qf(A,l),ar[a+4>>2]=0):(tr[l>>0]=0,Qf(a,l),tr[A>>0]=0),a),Cu(a,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Bu(u),fs[63&ar[28+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=o+11|0)>>0])<0?(A=0|ar[o>>2],tr[l>>0]=0,Qf(A,l),ar[o+4>>2]=0):(tr[l>>0]=0,Qf(o,l),tr[A>>0]=0),o),Cu(o,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Bu(u),A=0|jb[127&ar[12+(0|ar[e>>2])>>2]](e),tr[i>>0]=A,A=0|jb[127&ar[16+(0|ar[e>>2])>>2]](e),tr[f>>0]=A,fs[63&ar[20+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=n+11|0)>>0])<0?(A=0|ar[n>>2],tr[l>>0]=0,Qf(A,l),ar[n+4>>2]=0):(tr[l>>0]=0,Qf(n,l),tr[A>>0]=0),n),Cu(n,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Bu(u),fs[63&ar[24+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=t+11|0)>>0])<0?(A=0|ar[t>>2],tr[l>>0]=0,Qf(A,l),ar[t+4>>2]=0):(tr[l>>0]=0,Qf(t,l),tr[A>>0]=0),t),Cu(t,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;Bu(u),A=0|jb[127&ar[36+(0|ar[e>>2])>>2]](e)}else{for(e=0|un(e,60944),fs[63&ar[44+(0|ar[e>>2])>>2]](l,e),A=0|ar[l>>2],tr[r>>0]=A,tr[r+1>>0]=A>>8,tr[r+2>>0]=A>>16,tr[r+3>>0]=A>>24,fs[63&ar[32+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=a+11|0)>>0])<0?(A=0|ar[a>>2],tr[l>>0]=0,Qf(A,l),ar[a+4>>2]=0):(tr[l>>0]=0,Qf(a,l),tr[A>>0]=0),a),Cu(a,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Bu(u),fs[63&ar[28+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=o+11|0)>>0])<0?(A=0|ar[o>>2],tr[l>>0]=0,Qf(A,l),ar[o+4>>2]=0):(tr[l>>0]=0,Qf(o,l),tr[A>>0]=0),o),Cu(o,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Bu(u),A=0|jb[127&ar[12+(0|ar[e>>2])>>2]](e),tr[i>>0]=A,A=0|jb[127&ar[16+(0|ar[e>>2])>>2]](e),tr[f>>0]=A,fs[63&ar[20+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=n+11|0)>>0])<0?(A=0|ar[n>>2],tr[l>>0]=0,Qf(A,l),ar[n+4>>2]=0):(tr[l>>0]=0,Qf(n,l),tr[A>>0]=0),n),Cu(n,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Bu(u),fs[63&ar[24+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=t+11|0)>>0])<0?(A=0|ar[t>>2],tr[l>>0]=0,Qf(A,l),ar[t+4>>2]=0):(tr[l>>0]=0,Qf(t,l),tr[A>>0]=0),t),Cu(t,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;Bu(u),A=0|jb[127&ar[36+(0|ar[e>>2])>>2]](e)}ar[c>>2]=A,ur=b}(r,i,X,W,I,F,R,N,_,C),ar[c>>2]=ar[a>>2],m=o+8|0,g=11+N|0,Z=4+N|0,p=11+_|0,y=4+_|0,u=0!=(512&f|0),b=11+R|0,s=4+R|0,d=11+Y|0,k=4+Y|0,h=3+X|0,w=11+F|0,v=4+F|0,z=j=0;A:for(;;){if(o=0!=(0|j),4<=z>>>0){H=234;break}l=0|ar[A>>2];do{if(l){if(0|Mf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);r=0|ar[e>>2];do{if(r){if(0|Mf(l=(0|(l=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|hf(0|tr[l>>0]),-1)){ar[e>>2]=0,H=31;break}if(i){O=r;break}H=234;break A}H=31}while(0);if(31==(0|H)){if(H=0,i){H=234;break}O=0}l=3!=(0|z);e:do{switch(0|tr[X+z>>0]){case 1:if(l){if(l=0|ar[A>>2],(255&(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0])))<<24>>24<=-1){H=44;break A}if(!(8192&or[(0|ar[m>>2])+(l<<24>>24<<1)>>1])){H=44;break A}l=0|ar[A>>2],_u(Y,255&(l=(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+1,0|hf(0|tr[i>>0])))),o=l=O,H=46}else l=j;break;case 0:l?(o=l=O,H=46):l=j;break;case 3:if((0|(l=(l=0|tr[g>>0])<<24>>24<0?0|ar[Z>>2]:255&l))==(0-(o=(o=0|tr[p>>0])<<24>>24<0?0|ar[y>>2]:255&o)|0))l=j;else{if(f=0==(0|l),l=0|ar[A>>2],i=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2]),f|0==(0|o)){if(l=i?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0]),l&=255,f){if(l<<24>>24!=(0|tr[((0|tr[p>>0])<0?0|ar[_>>2]:_)>>0])){l=j;break e}l=0|ar[A>>2],(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+1,hf(0|tr[i>>0])),l=(tr[t>>0]=1)<((l=0|tr[p>>0])<<24>>24<0?0|ar[y>>2]:255&l)>>>0?_:j;break e}if(l<<24>>24!=(0|tr[((0|tr[g>>0])<0?0|ar[N>>2]:N)>>0])){tr[t>>0]=1,l=j;break e}l=0|ar[A>>2],(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+1,hf(0|tr[i>>0])),l=1<((l=0|tr[g>>0])<<24>>24<0?0|ar[Z>>2]:255&l)>>>0?N:j;break e}if(l=i?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0]),r=0|ar[A>>2],f=(0|(o=0|ar[(i=r+12|0)>>2]))==(0|ar[r+16>>2]),(255&l)<<24>>24==(0|tr[((0|tr[g>>0])<0?0|ar[N>>2]:N)>>0])){f?jb[127&ar[40+(0|ar[r>>2])>>2]](r):(ar[i>>2]=o+1,hf(0|tr[o>>0])),l=1<((l=0|tr[g>>0])<<24>>24<0?0|ar[Z>>2]:255&l)>>>0?N:j;break e}if((255&(l=f?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|hf(0|tr[o>>0])))<<24>>24!=(0|tr[((0|tr[p>>0])<0?0|ar[_>>2]:_)>>0])){H=103;break A}l=0|ar[A>>2],(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+1,hf(0|tr[i>>0])),l=(tr[t>>0]=1)<((l=0|tr[p>>0])<<24>>24<0?0|ar[y>>2]:255&l)>>>0?_:j}break;case 2:if(!(z>>>0<2|o)&&!(u|2==(0|z)&0!=(0|tr[h>>0]))){l=0;break e}l=(r=0|tr[b>>0])<<24>>24<0,U=0|ar[R>>2],T=i=l?U:R;r:do{if(0!=(0|z)&&(0|cr[X+(z+-1)>>0])<2){for(l=i+(l?0|ar[s>>2]:255&r)|0,M=T;(0|(o=M))!=(0|l)&&!((f=0|tr[o>>0])<<24>>24<=-1)&&8192&or[(0|ar[m>>2])+(f<<24>>24<<1)>>1];)M=o+1|0;if((f=M-T|0)>>>0<=(o=(l=(o=0|tr[d>>0])<<24>>24<0)?0|ar[k>>2]:255&o)>>>0)for(l=(o=(l?0|ar[Y>>2]:Y)+o|0)+(0-f)|0;;){if((0|l)==(0|o)){i=M,l=U,o=S=O;break r}if((0|tr[l>>0])!=(0|tr[i>>0])){i=T,l=U,o=S=O;break r}i=i+1|0,l=l+1|0}else i=T,l=U,o=S=O}else i=T,l=U,o=S=O}while(0);r:for(;l=((M=r<<24>>24<0)?l:R)+(M?0|ar[s>>2]:255&r)|0,(0|(M=i))!=(0|l);){l=0|ar[A>>2];do{if(l){if(0|Mf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0]),-1)){ar[A>>2]=0,r=1;break}r=0==(0|ar[A>>2]);break}r=1}while(0);do{if(o){if(0|Mf(l=(0|(l=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|hf(0|tr[l>>0]),-1)){l=ar[e>>2]=0,H=132;break}if(r^0==(0|S)){f=l=S;break}l=M;break r}l=S,H=132}while(0);if(132==(0|H)){if(H=0,r){l=M;break}f=0}if(r=0|ar[A>>2],(255&(r=(0|(i=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|hf(0|tr[i>>0])))<<24>>24!=(0|tr[M>>0])){l=M;break}r=0|ar[A>>2],(0|(o=0|ar[(i=r+12|0)>>2]))==(0|ar[r+16>>2])?jb[127&ar[40+(0|ar[r>>2])>>2]](r):(ar[i>>2]=o+1,hf(0|tr[o>>0])),S=l,i=M+1|0,r=0|tr[b>>0],l=0|ar[R>>2],o=f}if(u&&(0|l)!=(((S=(O=0|tr[b>>0])<<24>>24<0)?0|ar[R>>2]:R)+(S?0|ar[s>>2]:255&O)|0)){H=144;break A}l=j;break;case 4:T=0,o=l=O;r:for(;;){r=0|ar[A>>2];do{if(r){if(0|Mf(r=(0|(i=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|hf(0|tr[i>>0]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);do{if(o){if(0|Mf(r=(0|(r=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|hf(0|tr[r>>0]),-1)){l=ar[e>>2]=0,H=158;break}if(i^0==(0|l)){M=f=l;break}o=l;break r}H=158}while(0);if(158==(0|H)){if(H=0,i){o=l;break}f=l,M=0}if(l=0|ar[A>>2],-1<(r=255&(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0])))<<24>>24&&0!=(2048&or[(0|ar[m>>2])+(l<<24>>24<<1)>>1]))(0|(l=0|ar[c>>2]))==(0|ar[B>>2])&&(li(a,c,B),l=0|ar[c>>2]),ar[c>>2]=l+1,tr[l>>0]=r,l=T+1|0;else{if(O=0|tr[w>>0],!(r<<24>>24==(0|tr[I>>0])&(0|T?0!=(0|(O<<24>>24<0?0|ar[v>>2]:255&O)):0))){o=f;break}(0|(l=0|ar[G>>2]))==(0|ar[E>>2])&&(ui(D,G,E),l=0|ar[G>>2]),ar[G>>2]=l+4,ar[l>>2]=T,l=0}r=0|ar[A>>2],(0|(o=0|ar[(i=r+12|0)>>2]))!=(0|ar[r+16>>2])?(ar[i>>2]=o+1,hf(0|tr[o>>0]),T=l,l=f,o=M):(jb[127&ar[40+(0|ar[r>>2])>>2]](r),T=l,l=f,o=M)}l=0|ar[G>>2],0|T&&(0|ar[D>>2])!=(0|l)&&((0|l)==(0|ar[E>>2])&&(ui(D,G,E),l=0|ar[G>>2]),ar[G>>2]=l+4,ar[l>>2]=T);r:do{if(0<(0|ar[C>>2])){l=0|ar[A>>2];do{if(l){if(0|Mf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0]),-1)){ar[A>>2]=0,r=1;break}r=0==(0|ar[A>>2]);break}r=1}while(0);do{if(o){if(0|Mf(l=(0|(l=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|hf(0|tr[l>>0]),-1)){ar[e>>2]=0,H=193;break}if(r)break;H=232;break A}H=193}while(0);if(193==(0|H)){if(H=0,r){H=232;break A}o=0}if(l=0|ar[A>>2],(255&(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0])))<<24>>24!=(0|tr[W>>0])){H=232;break A}for(l=0|ar[A>>2],l=((0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+1,hf(0|tr[i>>0])),o);;){if((0|ar[C>>2])<=0)break r;r=0|ar[A>>2];do{if(r){if(0|Mf(r=(0|(i=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|hf(0|tr[i>>0]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);do{if(o){if(0|Mf(r=(0|(r=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|hf(0|tr[r>>0]),-1)){l=ar[e>>2]=0,H=216;break}if(i^0==(0|l)){o=f=l;break}H=232;break A}H=216}while(0);if(216==(0|H)){if(H=0,i){H=232;break A}f=l,o=0}if(l=0|ar[A>>2],(255&(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0])))<<24>>24<=-1){H=232;break A}if(!(2048&or[(0|ar[m>>2])+(l<<24>>24<<1)>>1])){H=232;break A}(0|ar[c>>2])==(0|ar[B>>2])&&li(a,c,B),l=0|ar[A>>2],l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0]),r=0|ar[c>>2],ar[c>>2]=r+1,tr[r>>0]=l,ar[C>>2]=(0|ar[C>>2])-1,l=0|ar[A>>2],(0|(i=0|ar[(r=l+12|0)>>2]))!=(0|ar[l+16>>2])?(ar[r>>2]=i+1,hf(0|tr[i>>0]),l=f):(jb[127&ar[40+(0|ar[l>>2])>>2]](l),l=f)}}}while(0);if((0|ar[c>>2])==(0|ar[a>>2])){H=232;break A}l=j;break;default:l=j}}while(0);e:do{if(46==(0|H))for(;;){r=(H=0)|ar[A>>2];do{if(r){if(0|Mf(r=(0|(i=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|hf(0|tr[i>>0]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);do{if(o){if(0|Mf(r=(0|(r=0|ar[o+12>>2]))==(0|ar[o+16>>2])?0|jb[127&ar[36+(0|ar[o>>2])>>2]](o):0|hf(0|tr[r>>0]),-1)){l=ar[e>>2]=0,H=59;break}if(i^0==(0|l)){o=f=l;break}l=j;break e}H=59}while(0);if(59==(0|H)){if(H=0,i){l=j;break e}f=l,o=0}if(l=0|ar[A>>2],(255&(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0])))<<24>>24<=-1){l=j;break e}if(!(8192&or[(0|ar[m>>2])+(l<<24>>24<<1)>>1])){l=j;break e}l=0|ar[A>>2],_u(Y,255&(l=(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+1,0|hf(0|tr[i>>0])))),l=f,H=46}}while(0);j=l,z=z+1|0}A:do{if(44==(0|H))ar[n>>2]=4|ar[n>>2],r=0;else if(103==(0|H))ar[n>>2]=4|ar[n>>2],r=0;else if(144==(0|H))ar[n>>2]=4|ar[n>>2],r=0;else if(232==(0|H))ar[n>>2]=4|ar[n>>2],r=0;else if(234==(0|H)){e:do{if(o){f=j+11|0,M=j+4|0,o=1;r:for(;;){if((l=0|tr[f>>0])<<24>>24<0?l=0|ar[M>>2]:l&=255,l>>>0<=o>>>0)break e;l=0|ar[A>>2];do{if(l){if(0|Mf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);l=0|ar[e>>2];do{if(l){if(0|Mf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0]),-1)){ar[e>>2]=0,H=253;break}if(i)break;break r}H=253}while(0);if(253==(0|H)&&(H=0,i))break;if(l=0|ar[A>>2],l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|hf(0|tr[r>>0]),r=(0|tr[f>>0])<0?0|ar[j>>2]:j,(255&l)<<24>>24!=(0|tr[r+o>>0]))break;l=o+1|0,r=0|ar[A>>2],(0|(o=0|ar[(i=r+12|0)>>2]))!=(0|ar[r+16>>2])?(ar[i>>2]=o+1,hf(0|tr[o>>0]),o=l):(jb[127&ar[40+(0|ar[r>>2])>>2]](r),o=l)}ar[n>>2]=4|ar[n>>2],r=0;break A}}while(0);if((0|(r=0|ar[D>>2]))!=(0|(l=0|ar[G>>2]))){if(ar[V>>2]=0,gn(F,r,l,V),0|ar[V>>2]){ar[n>>2]=4|ar[n>>2],r=0;break}r=1;break}r=1}}while(0);return Bu(Y),Bu(_),Bu(N),Bu(R),Bu(F),l=0|ar[D>>2],(ar[D>>2]=0)|l&&is[511&ar[Q>>2]](l),ur=J,0|r}function ci(A,e,r){return(e|=0)>>>0<=(A|=0)>>>0&A>>>0<(r|=0)>>>0|0}function li(A,e,r){e|=0,r|=0;var i,f,n=0,t=0,o=0;t=444!=(0|ar[(f=(A|=0)+4|0)>>2]),n=0|ar[A>>2],o=0==(0|(o=(o=(0|ar[r>>2])-n|0)>>>0<2147483647?o<<1:-1))?1:o,i=(0|ar[e>>2])-n|0,(n=0|Ec(t?n:0,o))||gu(),t?ar[A>>2]=n:(t=0|ar[A>>2],ar[A>>2]=n,t&&(is[511&ar[f>>2]](t),n=0|ar[A>>2])),ar[f>>2]=445,ar[e>>2]=n+i,ar[r>>2]=(0|ar[A>>2])+o}function ui(A,e,r){e|=0,r|=0;var i,f,n=0,t=0,o=0;t=444!=(0|ar[(f=(A|=0)+4|0)>>2]),n=0|ar[A>>2],o=0==(0|(o=(o=(0|ar[r>>2])-n|0)>>>0<2147483647?o<<1:-1))?4:o,i=(0|ar[e>>2])-n>>2,(n=0|Ec(t?n:0,o))||gu(),t?ar[A>>2]=n:(t=0|ar[A>>2],ar[A>>2]=n,t&&(is[511&ar[f>>2]](t),n=0|ar[A>>2])),ar[f>>2]=445,ar[e>>2]=n+(i<<2),ar[r>>2]=(0|ar[A>>2])+(o>>>2<<2)}function bi(A,e,r,i,f,n,t,o,a,c,l){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0;var u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0;for(G=ur=(D=ur)+31&-32,ur=ur+512|0,z=104+G|0,Q=88+G|0,C=80+G|0,B=76+G|0,E=504+G|0,X=72+G|0,W=68+G|0,V=56+G|0,F=44+G|0,R=32+G|0,N=20+G|0,_=8+G|0,I=4+G|0,ar[(y=96+G|0)>>2]=l,ar[Q>>2]=z,ar[(Y=4+Q|0)>>2]=444,ar[C>>2]=z,ar[B>>2]=z+400,ar[V>>2]=0,ar[4+V>>2]=0,l=ar[8+V>>2]=0;3!=(0|l);)l=l+1|(ar[V+(l<<2)>>2]=0);for(ar[F>>2]=0,ar[4+F>>2]=0,l=ar[8+F>>2]=0;3!=(0|l);)l=l+1|(ar[F+(l<<2)>>2]=0);for(ar[R>>2]=0,ar[4+R>>2]=0,l=ar[8+R>>2]=0;3!=(0|l);)l=l+1|(ar[R+(l<<2)>>2]=0);for(ar[N>>2]=0,ar[4+N>>2]=0,l=ar[8+N>>2]=0;3!=(0|l);)l=l+1|(ar[N+(l<<2)>>2]=0);for(ar[_>>2]=0,ar[4+_>>2]=0,l=ar[8+_>>2]=0;3!=(0|l);)l=l+1|(ar[_+(l<<2)>>2]=0);!function(A,e,r,i,f,n,t,o,a,c){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l,u,b;if(u=ur=(b=ur)+31&-32,ur=ur+16|0,l=12+u|0,A|=0){for(e=0|un(e,60968),fs[63&ar[44+(0|ar[e>>2])>>2]](l,e),A=0|ar[l>>2],tr[r>>0]=A,tr[r+1>>0]=A>>8,tr[r+2>>0]=A>>16,tr[r+3>>0]=A>>24,fs[63&ar[32+(0|ar[e>>2])>>2]](u,e),(0|tr[(A=a+8+3|0)>>0])<0?(r=0|ar[a>>2],ar[l>>2]=0,ln(r,l),ar[a+4>>2]=0):(ar[l>>2]=0,ln(a,l),tr[A>>0]=0),Mu(a,0),ar[a>>2]=ar[u>>2],ar[a+4>>2]=ar[4+u>>2],ar[a+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Qu(u),fs[63&ar[28+(0|ar[e>>2])>>2]](u,e),(0|tr[(A=o+8+3|0)>>0])<0?(a=0|ar[o>>2],ar[l>>2]=0,ln(a,l),ar[o+4>>2]=0):(ar[l>>2]=0,ln(o,l),tr[A>>0]=0),Mu(o,0),ar[o>>2]=ar[u>>2],ar[o+4>>2]=ar[4+u>>2],ar[o+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Qu(u),A=0|jb[127&ar[12+(0|ar[e>>2])>>2]](e),ar[i>>2]=A,A=0|jb[127&ar[16+(0|ar[e>>2])>>2]](e),ar[f>>2]=A,fs[63&ar[20+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=n+11|0)>>0])<0?(A=0|ar[n>>2],tr[l>>0]=0,Qf(A,l),ar[n+4>>2]=0):(tr[l>>0]=0,Qf(n,l),tr[A>>0]=0),n),Cu(n,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Bu(u),fs[63&ar[24+(0|ar[e>>2])>>2]](u,e),(0|tr[(A=t+8+3|0)>>0])<0?(n=0|ar[t>>2],ar[l>>2]=0,ln(n,l),ar[t+4>>2]=0):(ar[l>>2]=0,ln(t,l),tr[A>>0]=0),Mu(t,0),ar[t>>2]=ar[u>>2],ar[t+4>>2]=ar[4+u>>2],ar[t+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;Qu(u),A=0|jb[127&ar[36+(0|ar[e>>2])>>2]](e)}else{for(e=0|un(e,60960),fs[63&ar[44+(0|ar[e>>2])>>2]](l,e),A=0|ar[l>>2],tr[r>>0]=A,tr[r+1>>0]=A>>8,tr[r+2>>0]=A>>16,tr[r+3>>0]=A>>24,fs[63&ar[32+(0|ar[e>>2])>>2]](u,e),(0|tr[(A=a+8+3|0)>>0])<0?(r=0|ar[a>>2],ar[l>>2]=0,ln(r,l),ar[a+4>>2]=0):(ar[l>>2]=0,ln(a,l),tr[A>>0]=0),Mu(a,0),ar[a>>2]=ar[u>>2],ar[a+4>>2]=ar[4+u>>2],ar[a+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Qu(u),fs[63&ar[28+(0|ar[e>>2])>>2]](u,e),(0|tr[(A=o+8+3|0)>>0])<0?(a=0|ar[o>>2],ar[l>>2]=0,ln(a,l),ar[o+4>>2]=0):(ar[l>>2]=0,ln(o,l),tr[A>>0]=0),Mu(o,0),ar[o>>2]=ar[u>>2],ar[o+4>>2]=ar[4+u>>2],ar[o+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Qu(u),A=0|jb[127&ar[12+(0|ar[e>>2])>>2]](e),ar[i>>2]=A,A=0|jb[127&ar[16+(0|ar[e>>2])>>2]](e),ar[f>>2]=A,fs[63&ar[20+(0|ar[e>>2])>>2]](u,e),A=((0|tr[(A=n+11|0)>>0])<0?(A=0|ar[n>>2],tr[l>>0]=0,Qf(A,l),ar[n+4>>2]=0):(tr[l>>0]=0,Qf(n,l),tr[A>>0]=0),n),Cu(n,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;for(Bu(u),fs[63&ar[24+(0|ar[e>>2])>>2]](u,e),(0|tr[(A=t+8+3|0)>>0])<0?(n=0|ar[t>>2],ar[l>>2]=0,ln(n,l),ar[t+4>>2]=0):(ar[l>>2]=0,ln(t,l),tr[A>>0]=0),Mu(t,0),ar[t>>2]=ar[u>>2],ar[t+4>>2]=ar[4+u>>2],ar[t+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)ar[u+(A<<2)>>2]=0,A=A+1|0;Qu(u),A=0|jb[127&ar[36+(0|ar[e>>2])>>2]](e)}ar[c>>2]=A,ur=b}(r,i,E,X,W,V,F,R,N,I),ar[c>>2]=ar[a>>2],m=8+R+3|0,g=4+R|0,Z=8+N+3|0,p=4+N|0,u=0!=(512&f|0),b=8+F+3|0,s=4+F|0,d=8+_+3|0,k=4+_|0,h=3+E|0,w=11+V|0,v=4+V|0,O=z=0;A:for(;;){if(f=0!=(0|z),4<=O>>>0){j=229;break}l=0|ar[A>>2];do{if(l){if(0|Uf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);r=0|ar[e>>2];do{if(r){if(0|Uf(l=(0|(l=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|gf(0|ar[l>>2]),-1)){ar[e>>2]=0,j=31;break}if(i){S=r;break}j=229;break A}j=31}while(0);if(31==(0|j)){if(j=0,i){j=229;break}S=0}l=3!=(0|O);e:do{switch(0|tr[E+O>>0]){case 1:if(l){if(l=0|ar[A>>2],l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),!(0|xb[63&ar[12+(0|ar[o>>2])>>2]](o,8192,l))){j=43;break A}l=0|ar[A>>2],Ou(_,l=(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+4,0|gf(0|ar[i>>2]))),f=l=S,j=45}else l=z;break;case 0:l?(f=l=S,j=45):l=z;break;case 3:if((0|(l=(l=0|tr[m>>0])<<24>>24<0?0|ar[g>>2]:255&l))==(0-(f=(f=0|tr[Z>>0])<<24>>24<0?0|ar[p>>2]:255&f)|0))l=z;else{if(J=0==(0|l),l=0|ar[A>>2],i=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2]),J|0==(0|f)){if(l=i?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),J){if((0|l)!=(0|ar[((0|tr[Z>>0])<0?0|ar[N>>2]:N)>>2])){l=z;break e}l=0|ar[A>>2],(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+4,gf(0|ar[i>>2])),l=(tr[t>>0]=1)<((l=0|tr[Z>>0])<<24>>24<0?0|ar[p>>2]:255&l)>>>0?N:z;break e}if((0|l)!=(0|ar[((0|tr[m>>0])<0?0|ar[R>>2]:R)>>2])){tr[t>>0]=1,l=z;break e}l=0|ar[A>>2],(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+4,gf(0|ar[i>>2])),l=1<((l=0|tr[m>>0])<<24>>24<0?0|ar[g>>2]:255&l)>>>0?R:z;break e}if(l=i?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),r=0|ar[A>>2],J=(0|(f=0|ar[(i=r+12|0)>>2]))==(0|ar[r+16>>2]),(0|l)==(0|ar[((0|tr[m>>0])<0?0|ar[R>>2]:R)>>2])){J?jb[127&ar[40+(0|ar[r>>2])>>2]](r):(ar[i>>2]=f+4,gf(0|ar[f>>2])),l=1<((l=0|tr[m>>0])<<24>>24<0?0|ar[g>>2]:255&l)>>>0?R:z;break e}if((0|(l=J?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|gf(0|ar[f>>2])))!=(0|ar[((0|tr[Z>>0])<0?0|ar[N>>2]:N)>>2])){j=101;break A}l=0|ar[A>>2],(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+4,gf(0|ar[i>>2])),l=(tr[t>>0]=1)<((l=0|tr[Z>>0])<<24>>24<0?0|ar[p>>2]:255&l)>>>0?N:z}break;case 2:if(!(O>>>0<2|f)&&!(u|2==(0|O)&0!=(0|tr[h>>0]))){l=0;break e}i=0|tr[b>>0],f=0|ar[F>>2],l=i<<24>>24<0?f:F;r:do{if(0!=(0|O)&&(0|cr[E+(O+-1)>>0])<2){for(;(0|(r=l))!=(((U=i<<24>>24<0)?f:F)+((U?0|ar[s>>2]:255&i)<<2)|0);){if(!(0|xb[63&ar[12+(0|ar[o>>2])>>2]](o,8192,0|ar[r>>2]))){j=108;break}l=r+4|0,i=0|tr[b>>0],f=0|ar[F>>2]}if(108==(0|j)&&(i=(j=0)|tr[b>>0],f=0|ar[F>>2]),T=l-(U=J=i<<24>>24<0?f:F)>>2,(M=(r=(M=0|tr[d>>0])<<24>>24<0)?0|ar[k>>2]:255&M)>>>0<T>>>0)r=U,J=T=S;else for(r=(M=(r?0|ar[_>>2]:_)+(M<<2)|0)+(0-T<<2)|0;;){if((0|r)==(0|M)){r=l,J=T=S;break r}if((0|ar[r>>2])!=(0|ar[J>>2])){r=U,J=T=S;break r}J=J+4|0,r=r+4|0}}else r=l,J=T=S}while(0);r:for(;(0|(M=r))!=(0|(l=((l=i<<24>>24<0)?f:F)+((l?0|ar[s>>2]:255&i)<<2)|0));){l=0|ar[A>>2];do{if(l){if(0|Uf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),-1)){ar[A>>2]=0,r=1;break}r=0==(0|ar[A>>2]);break}r=1}while(0);do{if(J){if(0|Uf(l=(0|(l=0|ar[J+12>>2]))==(0|ar[J+16>>2])?0|jb[127&ar[36+(0|ar[J>>2])>>2]](J):0|gf(0|ar[l>>2]),-1)){l=ar[e>>2]=0,j=129;break}if(r^0==(0|T)){J=l=T;break}l=M;break r}l=T,j=129}while(0);if(129==(0|j)){if(j=0,r){l=M;break}J=0}if(r=0|ar[A>>2],(0|(r=(0|(i=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|gf(0|ar[i>>2])))!=(0|ar[M>>2])){l=M;break}r=0|ar[A>>2],(0|(f=0|ar[(i=r+12|0)>>2]))==(0|ar[r+16>>2])?jb[127&ar[40+(0|ar[r>>2])>>2]](r):(ar[i>>2]=f+4,gf(0|ar[f>>2])),T=l,r=M+4|0,i=0|tr[b>>0],f=0|ar[F>>2]}if(u&&(0|l)!=(((U=(S=0|tr[b>>0])<<24>>24<0)?0|ar[F>>2]:F)+((U?0|ar[s>>2]:255&S)<<2)|0)){j=141;break A}l=z;break;case 4:T=0,f=l=S;r:for(;;){r=0|ar[A>>2];do{if(r){if(0|Uf(r=(0|(i=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|gf(0|ar[i>>2]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);do{if(f){if(0|Uf(r=(0|(r=0|ar[f+12>>2]))==(0|ar[f+16>>2])?0|jb[127&ar[36+(0|ar[f>>2])>>2]](f):0|gf(0|ar[r>>2]),-1)){l=ar[e>>2]=0,j=155;break}if(i^0==(0|l)){M=J=l;break}f=l;break r}j=155}while(0);if(155==(0|j)){if(j=0,i){f=l;break}J=l,M=0}if(l=0|ar[A>>2],r=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),0|xb[63&ar[12+(0|ar[o>>2])>>2]](o,2048,r))(0|(l=0|ar[c>>2]))==(0|ar[y>>2])&&(di(a,c,y),l=0|ar[c>>2]),ar[c>>2]=l+4,ar[l>>2]=r,l=T+1|0;else{if(S=0|tr[w>>0],!((0|r)==(0|ar[W>>2])&(0|T?0!=(0|(S<<24>>24<0?0|ar[v>>2]:255&S)):0))){f=J;break}(0|(l=0|ar[C>>2]))==(0|ar[B>>2])&&(ui(Q,C,B),l=0|ar[C>>2]),ar[C>>2]=l+4,ar[l>>2]=T,l=0}r=0|ar[A>>2],(0|(f=0|ar[(i=r+12|0)>>2]))!=(0|ar[r+16>>2])?(ar[i>>2]=f+4,gf(0|ar[f>>2]),T=l,l=J,f=M):(jb[127&ar[40+(0|ar[r>>2])>>2]](r),T=l,l=J,f=M)}l=0|ar[C>>2],0|T&&(0|ar[Q>>2])!=(0|l)&&((0|l)==(0|ar[B>>2])&&(ui(Q,C,B),l=0|ar[C>>2]),ar[C>>2]=l+4,ar[l>>2]=T);r:do{if(0<(0|ar[I>>2])){l=0|ar[A>>2];do{if(l){if(0|Uf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),-1)){ar[A>>2]=0,r=1;break}r=0==(0|ar[A>>2]);break}r=1}while(0);do{if(f){if(0|Uf(l=(0|(l=0|ar[f+12>>2]))==(0|ar[f+16>>2])?0|jb[127&ar[36+(0|ar[f>>2])>>2]](f):0|gf(0|ar[l>>2]),-1)){ar[e>>2]=0,j=189;break}if(r)break;j=227;break A}j=189}while(0);if(189==(0|j)){if(j=0,r){j=227;break A}f=0}if(l=0|ar[A>>2],(0|(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2])))!=(0|ar[X>>2])){j=227;break A}for(l=0|ar[A>>2],l=((0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+4,gf(0|ar[i>>2])),f);;){if((0|ar[I>>2])<=0)break r;r=0|ar[A>>2];do{if(r){if(0|Uf(r=(0|(i=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|gf(0|ar[i>>2]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);do{if(f){if(0|Uf(r=(0|(r=0|ar[f+12>>2]))==(0|ar[f+16>>2])?0|jb[127&ar[36+(0|ar[f>>2])>>2]](f):0|gf(0|ar[r>>2]),-1)){l=ar[e>>2]=0,j=212;break}if(i^0==(0|l)){f=J=l;break}j=227;break A}j=212}while(0);if(212==(0|j)){if(j=0,i){j=227;break A}J=l,f=0}if(l=0|ar[A>>2],l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),!(0|xb[63&ar[12+(0|ar[o>>2])>>2]](o,2048,l))){j=227;break A}(0|ar[c>>2])==(0|ar[y>>2])&&di(a,c,y),l=0|ar[A>>2],l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),r=0|ar[c>>2],ar[c>>2]=r+4,ar[r>>2]=l,ar[I>>2]=(0|ar[I>>2])-1,l=0|ar[A>>2],(0|(i=0|ar[(r=l+12|0)>>2]))!=(0|ar[l+16>>2])?(ar[r>>2]=i+4,gf(0|ar[i>>2]),l=J):(jb[127&ar[40+(0|ar[l>>2])>>2]](l),l=J)}}}while(0);if((0|ar[c>>2])==(0|ar[a>>2])){j=227;break A}l=z;break;default:l=z}}while(0);e:do{if(45==(0|j))for(;;){r=(j=0)|ar[A>>2];do{if(r){if(0|Uf(r=(0|(i=0|ar[r+12>>2]))==(0|ar[r+16>>2])?0|jb[127&ar[36+(0|ar[r>>2])>>2]](r):0|gf(0|ar[i>>2]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);do{if(f){if(0|Uf(r=(0|(r=0|ar[f+12>>2]))==(0|ar[f+16>>2])?0|jb[127&ar[36+(0|ar[f>>2])>>2]](f):0|gf(0|ar[r>>2]),-1)){l=ar[e>>2]=0,j=58;break}if(i^0==(0|l)){f=J=l;break}l=z;break e}j=58}while(0);if(58==(0|j)){if(j=0,i){l=z;break e}J=l,f=0}if(l=0|ar[A>>2],l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),!(0|xb[63&ar[12+(0|ar[o>>2])>>2]](o,8192,l))){l=z;break e}l=0|ar[A>>2],Ou(_,l=(0|(i=0|ar[(r=l+12|0)>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[40+(0|ar[l>>2])>>2]](l):(ar[r>>2]=i+4,0|gf(0|ar[i>>2]))),l=J,j=45}}while(0);z=l,O=O+1|0}A:do{if(43==(0|j))ar[n>>2]=4|ar[n>>2],r=0;else if(101==(0|j))ar[n>>2]=4|ar[n>>2],r=0;else if(141==(0|j))ar[n>>2]=4|ar[n>>2],r=0;else if(227==(0|j))ar[n>>2]=4|ar[n>>2],r=0;else if(229==(0|j)){e:do{if(f){J=z+8+3|0,M=z+4|0,f=1;r:for(;;){if((l=0|tr[J>>0])<<24>>24<0?l=0|ar[M>>2]:l&=255,l>>>0<=f>>>0)break e;l=0|ar[A>>2];do{if(l){if(0|Uf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),-1)){ar[A>>2]=0,i=1;break}i=0==(0|ar[A>>2]);break}i=1}while(0);l=0|ar[e>>2];do{if(l){if(0|Uf(l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),-1)){ar[e>>2]=0,j=248;break}if(i)break;break r}j=248}while(0);if(248==(0|j)&&(j=0,i))break;if(l=0|ar[A>>2],l=(0|(r=0|ar[l+12>>2]))==(0|ar[l+16>>2])?0|jb[127&ar[36+(0|ar[l>>2])>>2]](l):0|gf(0|ar[r>>2]),r=(0|tr[J>>0])<0?0|ar[z>>2]:z,(0|l)!=(0|ar[r+(f<<2)>>2]))break;l=f+1|0,r=0|ar[A>>2],(0|(f=0|ar[(i=r+12|0)>>2]))!=(0|ar[r+16>>2])?(ar[i>>2]=f+4,gf(0|ar[f>>2]),f=l):(jb[127&ar[40+(0|ar[r>>2])>>2]](r),f=l)}ar[n>>2]=4|ar[n>>2],r=0;break A}}while(0);if((0|(r=0|ar[Q>>2]))!=(0|(l=0|ar[C>>2]))){if(ar[G>>2]=0,gn(V,r,l,G),0|ar[G>>2]){ar[n>>2]=4|ar[n>>2],r=0;break}r=1;break}r=1}}while(0);return Qu(_),Qu(N),Qu(R),Qu(F),Bu(V),l=0|ar[Q>>2],(ar[Q>>2]=0)|l&&is[511&ar[Y>>2]](l),ur=D,0|r}function si(A,e,r){return(e|=0)>>>0<=(A|=0)>>>0&A>>>0<(r|=0)>>>0|0}function di(A,e,r){e|=0,r|=0;var i,f,n=0,t=0,o=0;t=444!=(0|ar[(f=(A|=0)+4|0)>>2]),n=0|ar[A>>2],o=0==(0|(o=(o=(0|ar[r>>2])-n|0)>>>0<2147483647?o<<1:-1))?4:o,i=(0|ar[e>>2])-n>>2,(n=0|Ec(t?n:0,o))||gu(),t?ar[A>>2]=n:(t=0|ar[A>>2],ar[A>>2]=n,t&&(is[511&ar[f>>2]](t),n=0|ar[A>>2])),ar[f>>2]=445,ar[e>>2]=n+(i<<2),ar[r>>2]=(0|ar[A>>2])+(o>>>2<<2)}function ki(A,e,r,i,f,n,t,o,a,c){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l,u,b,s=0;if(u=ur=(b=ur)+31&-32,ur=ur+16|0,l=12+u|0,A|=0){if(s=0|un(r,60952),e){for(fs[63&ar[44+(0|ar[s>>2])>>2]](l,s),A=0|ar[l>>2],tr[i>>0]=A,tr[i+1>>0]=A>>8,tr[i+2>>0]=A>>16,tr[i+3>>0]=A>>24,fs[63&ar[32+(0|ar[s>>2])>>2]](u,s),A=((0|tr[(A=a+11|0)>>0])<0?(A=0|ar[a>>2],tr[l>>0]=0,Qf(A,l),ar[a+4>>2]=0):(tr[l>>0]=0,Qf(a,l),tr[A>>0]=0),a),Cu(a,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Bu(u),r=s}else{for(fs[63&ar[40+(0|ar[s>>2])>>2]](l,s),A=0|ar[l>>2],tr[i>>0]=A,tr[i+1>>0]=A>>8,tr[i+2>>0]=A>>16,tr[i+3>>0]=A>>24,fs[63&ar[28+(0|ar[s>>2])>>2]](u,s),A=((0|tr[(A=a+11|0)>>0])<0?(A=0|ar[a>>2],tr[l>>0]=0,Qf(A,l),ar[a+4>>2]=0):(tr[l>>0]=0,Qf(a,l),tr[A>>0]=0),a),Cu(a,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Bu(u),r=s}for(A=0|jb[127&ar[12+(0|ar[s>>2])>>2]](s),tr[f>>0]=A,A=0|jb[127&ar[16+(0|ar[s>>2])>>2]](s),tr[n>>0]=A,fs[63&ar[20+(0|ar[r>>2])>>2]](u,s),A=((0|tr[(A=t+11|0)>>0])<0?(A=0|ar[t>>2],tr[l>>0]=0,Qf(A,l),ar[t+4>>2]=0):(tr[l>>0]=0,Qf(t,l),tr[A>>0]=0),t),Cu(t,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);for(Bu(u),fs[63&ar[24+(0|ar[r>>2])>>2]](u,s),A=((0|tr[(A=o+11|0)>>0])<0?(A=0|ar[o>>2],tr[l>>0]=0,Qf(A,l),ar[o+4>>2]=0):(tr[l>>0]=0,Qf(o,l),tr[A>>0]=0),o),Cu(o,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Bu(u),A=0|jb[127&ar[36+(0|ar[s>>2])>>2]](s)}else{if(s=0|un(r,60944),e){for(fs[63&ar[44+(0|ar[s>>2])>>2]](l,s),A=0|ar[l>>2],tr[i>>0]=A,tr[i+1>>0]=A>>8,tr[i+2>>0]=A>>16,tr[i+3>>0]=A>>24,fs[63&ar[32+(0|ar[s>>2])>>2]](u,s),A=((0|tr[(A=a+11|0)>>0])<0?(A=0|ar[a>>2],tr[l>>0]=0,Qf(A,l),ar[a+4>>2]=0):(tr[l>>0]=0,Qf(a,l),tr[A>>0]=0),a),Cu(a,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Bu(u),r=s}else{for(fs[63&ar[40+(0|ar[s>>2])>>2]](l,s),A=0|ar[l>>2],tr[i>>0]=A,tr[i+1>>0]=A>>8,tr[i+2>>0]=A>>16,tr[i+3>>0]=A>>24,fs[63&ar[28+(0|ar[s>>2])>>2]](u,s),A=((0|tr[(A=a+11|0)>>0])<0?(A=0|ar[a>>2],tr[l>>0]=0,Qf(A,l),ar[a+4>>2]=0):(tr[l>>0]=0,Qf(a,l),tr[A>>0]=0),a),Cu(a,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Bu(u),r=s}for(A=0|jb[127&ar[12+(0|ar[s>>2])>>2]](s),tr[f>>0]=A,A=0|jb[127&ar[16+(0|ar[s>>2])>>2]](s),tr[n>>0]=A,fs[63&ar[20+(0|ar[r>>2])>>2]](u,s),A=((0|tr[(A=t+11|0)>>0])<0?(A=0|ar[t>>2],tr[l>>0]=0,Qf(A,l),ar[t+4>>2]=0):(tr[l>>0]=0,Qf(t,l),tr[A>>0]=0),t),Cu(t,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);for(Bu(u),fs[63&ar[24+(0|ar[r>>2])>>2]](u,s),A=((0|tr[(A=o+11|0)>>0])<0?(A=0|ar[o>>2],tr[l>>0]=0,Qf(A,l),ar[o+4>>2]=0):(tr[l>>0]=0,Qf(o,l),tr[A>>0]=0),o),Cu(o,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Bu(u),A=0|jb[127&ar[36+(0|ar[s>>2])>>2]](s)}ar[c>>2]=A,ur=b}function hi(A,e,r,i,f,n,t,o,a,c,l,u,b,s,d){A|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0,s|=0,d|=0;var k,h,w,v,m,g,Z,p,y,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0;for(ar[(r|=0)>>2]=A,k=s+11|0,y=s+4|0,h=b+11|0,w=b+4|0,v=0==(512&i|0),m=t+8|0,g=0<(0|d),Z=u+11|0,p=u+4|0,G=0;4!=(0|G);){A:do{switch(0|tr[a+G>>0]){case 0:ar[e>>2]=ar[r>>2];break;case 1:ar[e>>2]=ar[r>>2],I=0|Hb[31&ar[28+(0|ar[t>>2])>>2]](t,32),C=0|ar[r>>2],ar[r>>2]=C+1,tr[C>>0]=I;break;case 3:0|((B=(C=0|tr[k>>0])<<24>>24<0)?0|ar[y>>2]:255&C)&&(I=0|tr[(B?0|ar[s>>2]:s)>>0],C=0|ar[r>>2],ar[r>>2]=C+1,tr[C>>0]=I);break;case 2:if(!(v|0==(0|(E=(B=(E=0|tr[h>>0])<<24>>24<0)?0|ar[w>>2]:255&E)))){for(X=(C=B?0|ar[b>>2]:b)+E|0,B=0|ar[r>>2],E=C;(0|E)!=(0|X);)tr[B>>0]=0|tr[E>>0],B=B+1|0,E=E+1|0;ar[r>>2]=B}break;case 4:for(E=0|ar[r>>2],X=f=o?f+1|0:f;!(n>>>0<=X>>>0)&&!((B=0|tr[X>>0])<<24>>24<=-1)&&2048&or[(0|ar[m>>2])+(B<<24>>24<<1)>>1];)X=X+1|0;if(g){for(W=d;f>>>0<X>>>0&(B=0<(0|W));)B=0|tr[(C=X+-1|0)>>0],I=0|ar[r>>2],ar[r>>2]=I+1,tr[I>>0]=B,W=W+-1|0,X=C;for(I=B?0|Hb[31&ar[28+(0|ar[t>>2])>>2]](t,48):0,B=W;W=0|ar[r>>2],ar[r>>2]=W+1,!((0|B)<=0);)tr[W>>0]=I,B=B+-1|0;tr[W>>0]=c}e:do{if((0|X)==(0|f))I=0|Hb[31&ar[28+(0|ar[t>>2])>>2]](t,48),C=0|ar[r>>2],ar[r>>2]=C+1,tr[C>>0]=I;else for(C=W=(I=0|((B=(C=0|tr[Z>>0])<<24>>24<0)?0|ar[p>>2]:255&C)?0|tr[(B?0|ar[u>>2]:u)>>0]:-1,0);;){if((0|X)==(0|f))break e;B=(0|C)==(0|I)?(I=0|ar[r>>2],ar[r>>2]=I+1,tr[I>>0]=l,I=(W=W+1|0)>>>0<((B=(I=0|tr[Z>>0])<<24>>24<0)?0|ar[p>>2]:255&I)>>>0?(I=0|tr[(B?0|ar[u>>2]:u)+W>>0])<<24>>24==127?-1:I<<24>>24:C,0):C,F=0|tr[(V=X+-1|0)>>0],C=0|ar[r>>2],ar[r>>2]=C+1,tr[C>>0]=F,C=B+1|0,X=V}}while(0);if((0|E)!=(0|(B=0|ar[r>>2])))for(;;){if((B=B+-1|0)>>>0<=E>>>0)break A;F=0|tr[E>>0],tr[E>>0]=0|tr[B>>0],tr[B>>0]=F,E=E+1|0}}}while(0);G=G+1|0}if(1<(f=(B=(f=0|tr[k>>0])<<24>>24<0)?0|ar[y>>2]:255&f)>>>0){for(E=(F=B?0|ar[s>>2]:s)+f|0,B=0|ar[r>>2],f=F;(0|(f=f+1|0))!=(0|E);)tr[B>>0]=0|tr[f>>0],B=B+1|0;ar[r>>2]=B}switch((176&i)<<24>>24){case 32:ar[e>>2]=ar[r>>2];break;case 16:break;default:ar[e>>2]=A}}function wi(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0;A:do{if(36<e>>>0)ar[(f=10364)>>2]=22,i=f=0;else{for(d=A+4|0,s=A+100|0;0!=(0|mi(n=(n=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=n+1,0|cr[n>>0]):0|vi(A))););e:do{switch(0|n){case 43:case 45:if(n=(45==(0|n))<<31>>31,(t=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0){ar[d>>2]=t+1,b=n,n=0|cr[t>>0];break e}b=n,n=0|vi(A);break e;default:b=0}}while(0);t=0==(0|e);do{if(16==(16|e)&48==(0|n)){if(120!=(32|(n=(n=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=n+1,0|cr[n>>0]):0|vi(A)))){if(t){e=8,l=46;break}l=32;break}if(n=(n=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=n+1,0|cr[n>>0]):0|vi(A),15<(0|cr[52625+n>>0])){if((i=0!=(0|ar[s>>2]))&&(ar[d>>2]=(0|ar[d>>2])-1),!r){nl(A,0),i=f=0;break A}if(!i){i=f=0;break A}ar[d>>2]=(0|ar[d>>2])-1,i=f=0;break A}e=16,l=46}else{if(e=t?10:e,!((0|cr[52625+n>>0])>>>0<e>>>0)){0|ar[s>>2]&&(ar[d>>2]=(0|ar[d>>2])-1),nl(A,0),ar[(f=10364)>>2]=22,i=f=0;break A}l=32}}while(0);e:do{if(32==(0|l))if(10==(0|e)){if((e=n+-48|0)>>>0<10){for(n=0,t=e;n=(10*n|0)+t|0,(t=(e=(e=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=e+1,0|cr[e>>0]):0|vi(A))+-48|0)>>>0<10&n>>>0<429496729;);r=0}else e=n,r=n=0;if((o=e+-48|0)>>>0<10){t=e;do{if(e=0|nb(0|n,0|r,10,0),(u=~(c=((0|o)<0)<<31>>31))>>>0<(a=D)>>>0|(0|a)==(0|u)&~o>>>0<e>>>0){e=10,l=72;break e}n=0|tb(0|e,0|a,0|o,0|c),r=D,o=(t=(e=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=e+1,0|cr[e>>0]):0|vi(A))+-48|0}while(o>>>0<10&(r>>>0<429496729|429496729==(0|r)&n>>>0<2576980378));9<o>>>0?(t=b,e=r):(e=10,l=72)}else t=b,e=r}else l=46}while(0);e:do{if(46==(0|l)){if(!(e+-1&e)){if(l=0|tr[52881+((23*e|0)>>>5&7)>>0],(t=255&(r=0|tr[52625+n>>0]))>>>0<e>>>0){for(n=0,o=t;n=o|n<<l,t=(t=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=t+1,0|cr[t>>0]):0|vi(A),n>>>0<134217728&(o=255&(r=0|tr[52625+t>>0]))>>>0<e>>>0;);o=0}else t=n,n=o=0;if(a=0|sb(-1,-1,0|l),e>>>0<=(255&r)>>>0|(c=D)>>>0<o>>>0|(0|o)==(0|c)&a>>>0<n>>>0){r=o,l=72;break}for(t=o;;){if(n=0|db(0|n,0|t,0|l),o=D,n|=255&r,t=(t=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=t+1,0|cr[t>>0]):0|vi(A),e>>>0<=(255&(r=0|tr[52625+t>>0]))>>>0|c>>>0<o>>>0|(0|o)==(0|c)&a>>>0<n>>>0){r=o,l=72;break e}t=o}}if((t=255&(r=0|tr[52625+n>>0]))>>>0<e>>>0){for(n=0,o=t;n=o+(0|br(n,e))|0,t=(t=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=t+1,0|cr[t>>0]):0|vi(A),n>>>0<119304647&(o=255&(r=0|tr[52625+t>>0]))>>>0<e>>>0;);o=0}else t=n,o=n=0;if((255&r)>>>0<e>>>0)for(l=0|lb(-1,-1,0|e,0),u=D,c=o;;){if(u>>>0<c>>>0|(0|c)==(0|u)&l>>>0<n>>>0){r=c,l=72;break e}if(o=0|nb(0|n,0|c,0|e,0),4294967295<(a=D)>>>0|-1==(0|a)&~(r&=255)>>>0<o>>>0){r=c,l=72;break e}if(n=0|tb(0|r,0,0|o,0|a),o=D,t=(t=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=t+1,0|cr[t>>0]):0|vi(A),e>>>0<=(255&(r=0|tr[52625+t>>0]))>>>0){r=o,l=72;break}c=o}else r=o,l=72}}while(0);if(72==(0|l))if((0|cr[52625+t>>0])>>>0<e>>>0){for(;n=(n=0|ar[d>>2])>>>0<(0|ar[s>>2])>>>0?(ar[d>>2]=n+1,0|cr[n>>0]):0|vi(A),(0|cr[52625+n>>0])>>>0<e>>>0;);ar[(t=10364)>>2]=34,t=0==(1&i|0)&!0?b:0,e=f,n=i}else t=b,e=r;if(0|ar[s>>2]&&(ar[d>>2]=(0|ar[d>>2])-1),!(e>>>0<f>>>0|(0|e)==(0|f)&n>>>0<i>>>0)){if(!(0!=(1&i|0)|!1|0!=(0|t))){ar[(d=10364)>>2]=34,i=0|tb(0|i,0|f,-1,-1),f=D;break}if(f>>>0<e>>>0|(0|e)==(0|f)&i>>>0<n>>>0){ar[(d=10364)>>2]=34;break}}i=0|ob(n^t|0,e^(i=((0|t)<0)<<31>>31)|0,0|t,0|i),f=D}}while(0);return D=f,0|i}function vi(A){var e=0,r=0,i=0,f=0,n=0,t=0,o=0;return!(0!=(0|(t=0|ar[(r=(A|=0)+104|0)>>2]))&&(0|ar[A+108>>2])>=(0|t))&&0<=(0|(e=0|gi(A)))?(i=0|ar[r>>2],r=A+8|0,i?i=((t=n=0|ar[r>>2])-(r=0|ar[A+4>>2])|0)<(0|(i=i-(0|ar[(f=A+108|0)>>2])|0))?n=t:(n=r+(i+-1)|0,t):(f=A+108|0,n=i=0|ar[r>>2],r=0|ar[A+4>>2]),ar[A+100>>2]=n,0|i&&(ar[f>>2]=i+1-r+(0|ar[f>>2])),(0|cr[(r=r+-1|0)>>0])!=(0|e)&&(tr[r>>0]=e)):o=4,4==(0|o)&&(ar[A+100>>2]=0,e=-1),0|e}function mi(A){return 1&(32==(0|(A|=0))|(A+-9|0)>>>0<5)|0}function gi(A){var e,r;return e=ur=(r=ur)+31&-32,ur=ur+16|0,A=0==(0|Zi(A|=0))&&1==(0|xb[63&ar[A+32>>2]](A,e,1))?0|cr[e>>0]:-1,ur=r,0|A}function Zi(A){var e=0,r=0;return r=0|tr[(e=(A|=0)+74|0)>>0],tr[e>>0]=r+255|r,r=A+28|0,(0|ar[(e=A+20|0)>>2])>>>0>(0|ar[r>>2])>>>0&&xb[63&ar[A+36>>2]](A,0,0),ar[A+16>>2]=0,ar[r>>2]=0,(ar[e>>2]=0)|(e=4&(e=0|ar[A>>2])?(ar[A>>2]=32|e,-1):(r=(0|ar[A+44>>2])+(0|ar[A+48>>2])|0,ar[A+8>>2]=r,ar[A+4>>2]=r,e<<27>>31))}function pi(A,e,r){var i,f,n;return 0|(0|(i=A|=0,f=e|=0,n=r|=0,0|(n=0|fl(i|=0,f|=0,n|=0,0,-2147483648))))}function yi(){return 0|(0|ar[ar[2622]>>2]?4:1)}function Bi(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o;return f=ur=(i=ur)+31&-32,ur=ur+16|0,ar[f>>2]=r,r=0|(n=A,t=e,o=f,0|Yc(n|=0,2147483647,t|=0,o|=0)),ur=i,0|r}function Ei(A,e){A|=0,e|=0;var r,i;return i=ur=(r=ur)+31&-32,ur=ur+16|0,ar[i>>2]=A,ar[4+i>>2]=e,e=0|Ic(0|M(91,0|i)),ur=r,0|e}function Xi(A,e,r,i){A|=0,r|=0,i|=0;var f=0,n=0,t=0,o=0,a=0;f=0|ar[(e|=0)>>2],a=0!=(0|i)&&0!=(0|(n=0|ar[i>>2]))?A?(ar[i>>2]=0,o=r,t=f,43):(t=f,i=r,25):5;A:do{if(5==(0|a)){if(i=0!=(0|A),0|ar[ar[(a=10488)>>2]>>2]){if(i){i=r,a=15;break}i=r,a=14;break}if(!i){r=0|Vc(f),a=59;break}e:do{if(r){for(i=r;(n=0|tr[f>>0])<<24>>24;){if(f=f+1|0,ar[A>>2]=n<<24>>24&57343,!(i=i+-1|0))break e;A=A+4|0}ar[A>>2]=0,r=r-i|(ar[e>>2]=0),a=59;break A}}while(0);ar[e>>2]=f,a=59}}while(0);A:for(;;){e:do{if(14==(0|a)){for(;;){if(((255&(n=0|tr[f>>0]))-1|0)>>>0<127&&0==(3&f|0)&&(n=255&(a=0|ar[f>>2]),!(-2139062144&(a+-16843009|a)))){for(;i=i+-4|0,!(-2139062144&((n=0|ar[(f=f+4|0)>>2])+-16843009|n)|0););n&=255}if(127<=((n&=255)+-1|0)>>>0)break;f=f+1|0,i=i+-1|0}if(!(50<(n=n+-194|0)>>>0)){n=0|ar[9896+(n<<2)>>2],t=f+1|0,a=25;continue A}a=53}else{if(15==(0|a)){r:do{if(i){for(;;){n=0|tr[f>>0];do{if(((255&n)-1|0)>>>0<127&&4<i>>>0&0==(3&f|0)){for(;;){if(-2139062144&((n=0|ar[f>>2])+-16843009|n)|0){a=38;break}if(ar[A>>2]=255&n,ar[A+4>>2]=cr[f+1>>0],ar[A+8>>2]=cr[f+2>>0],t=f+4|0,n=A+16|0,ar[A+12>>2]=cr[f+3>>0],!(4<(i=i+-4|0)>>>0)){a=37;break}A=n,f=t}if(37==(0|a)){A=n,n=0|tr[(f=t)>>0];break}if(38==(0|a)){n&=255;break}}}while(0);if(127<=((n&=255)+-1|0)>>>0)break;if(f=f+1|0,ar[A>>2]=n,!(i=i+-1|0))break r;A=A+4|0}if(50<(n=n+-194|0)>>>0){a=53;break e}n=0|ar[9896+(n<<2)>>2],o=i,t=f+1|0,a=43;continue A}}while(0);ar[e>>2]=f,a=59;continue A}if(25==(0|a)){if(!(7<((a=(0|cr[t>>0])>>>3)+-16|a+(n>>26))>>>0)){if(f=t+1|0,33554432&n){if((-64&tr[f>>0])<<24>>24!=-128){f=t,a=52;break}if(f=t+2|0,524288&n){if((-64&tr[f>>0])<<24>>24!=-128){f=t,a=52;break}f=t+3|0}}i=i+-1|0,a=14;continue A}f=t,a=52}else if(43==(0|a)){if(!(7<((f=(i=(a=0)|cr[t>>0])>>>3)+-16|f+(n>>26))>>>0)){f=t+1|0,i=i+-128|n<<6;do{if((0|i)<0){if(63<(n=(0|cr[f>>0])-128|0)>>>0){f=t+-1|0,r=A;break e}if(f=t+2|0,(0|(i=n|i<<6))<0){if(63<(n=(0|cr[f>>0])-128|0)>>>0){f=t+-1|0,r=A;break e}f=t+3|0,i=n|i<<6;break}}}while(0);ar[A>>2]=i,A=A+4|0,i=o+-1|0,a=15;continue A}f=t,i=o,a=52}else if(59==(0|a))return 0|r}}while(0);if(52==(0|a)&&(f=f+-1|(a=0),n?r=A:a=53),53==(0|a)){if(!(0|tr[f>>0])){0|A&&(ar[A>>2]=0,ar[e>>2]=0),r=r-i|0,a=59;continue}r=A}ar[(a=10364)>>2]=84,r?(ar[e>>2]=f,r=-1,a=59):(r=-1,a=59)}return 0}function Wi(A){var e=0,r=0,i=0;0<=(0|ar[(A|=0)+76>>2])&&0!=(0|Jc())?e=(r=0|ar[(e=A+4|0)>>2])>>>0<(0|ar[A+8>>2])>>>0?(ar[e>>2]=r+1,0|cr[r>>0]):0|gi(A):i=3;do{if(3==(0|i)){if((r=0|ar[(e=A+4|0)>>2])>>>0<(0|ar[A+8>>2])>>>0){ar[e>>2]=r+1,e=0|cr[r>>0];break}e=0|gi(A);break}}while(0);return 0|e}function Ii(A,e,r){A|=0,e|=0,r|=0;var i,f;return f=ur=(i=ur)+31&-32,ur=ur+16|0,ar[f>>2]=r,r=0|Qc(A,e,f),ur=i,0|r}function Ci(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t=0,o=0;f=ur=(n=ur)+31&-32,ur=ur+16|0;A:do{if(A){e:do{if(3<r>>>0){for(i=r,t=0|ar[e>>2];;){if(126<((o=0|ar[t>>2])+-1|0)>>>0){if(!o)break;if(-1==(0|(o=0|$c(A,o)))){r=-1;break A}A=A+o|0,i=i-o|0}else tr[A>>0]=o,A=A+1|0,i=i+-1|0,t=0|ar[e>>2];if(t=t+4|0,ar[e>>2]=t,i>>>0<=3)break e}tr[A>>0]=0,r=r-i|(ar[e>>2]=0);break A}i=r}while(0);if(i){for(t=0|ar[e>>2];;){if(126<((o=0|ar[t>>2])+-1|0)>>>0){if(!o){t=19;break}if(-1==(0|(o=0|$c(f,o)))){r=-1;break A}if(i>>>0<o>>>0){t=22;break}$c(A,0|ar[t>>2]),A=A+o|0,i=i-o|0}else tr[A>>0]=o,A=A+1|0,i=i+-1|0,t=0|ar[e>>2];if(t=t+4|0,ar[e>>2]=t,!i)break A}if(19==(0|t)){tr[A>>0]=0,r=r-i|(ar[e>>2]=0);break}if(22==(0|t)){r=r-i|0;break}}}else if(r=0|ar[e>>2],i=0|ar[r>>2]){A=r,r=0;do{if(127<i>>>0){if(-1==(0|(i=0|$c(f,i)))){r=-1;break A}}else i=1;r=i+r|0,i=0|ar[(A=A+4|0)>>2]}while(0!=(0|i))}else r=0}while(0);return ur=n,0|r}function Gi(A,e,r,i){A|=0,e|=0,r|=0;var f,n,t=0,o=0,a=0,c=0;t=ur=(n=ur)+31&-32,ur=ur+16|0,i=0|ar[(f=0==(0|(i|=0))?58152:i)>>2];A:do{if(e)if(o=0==(0|A)?t:A,r){if(i)t=r,a=11;else{if(-1<(i=0|tr[e>>0])<<24>>24){ar[o>>2]=255&i,i=i<<24>>24!=0&1;break}if(t=10488,i=0|tr[e>>0],!(0|ar[ar[t>>2]>>2])){ar[o>>2]=i<<24>>24&57343,i=1;break}if(50<(i=(255&i)-194|0)>>>0){a=17;break}i=0|ar[9896+(i<<2)>>2],(t=r+-1|0)&&(e=e+1|0,a=11)}e:do{if(11==(0|a)){if(7<((c=(255&(A=0|tr[e>>0]))>>>3)+-16|c+(i>>26))>>>0){a=17;break A}for(;e=e+1|0,t=t+-1|0,!(0<=(0|(i=(255&A)-128|i<<6)));){if(!t)break e;if((-64&(A=0|tr[e>>0]))<<24>>24!=-128){a=17;break A}}ar[f>>2]=0,ar[o>>2]=i,i=r-t|0;break A}}while(0);ar[f>>2]=i,i=-2}else i=-2;else i?a=17:i=0}while(0);return 17==(0|a)&&(ar[f>>2]=0,ar[(i=10364)>>2]=84,i=-1),ur=n,0|i}function Vi(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0,b=0;t=ur=(a=ur)+31&-32,ur=ur+1040|0,n=8+t|0,b=0|ar[(e|=0)>>2],l=(o=0!=(0|A))?i:256,A=o?A:n,c=ar[t>>2]=b;A:do{if(0!=(0|l)&0!=(0|b)){for(i=0,b=r;;){if(!(131<b>>>0|(r=l>>>0<=(u=b>>>2)>>>0))){r=b;break A}if(r=b-(c=r?l:u)|0,-1==(0|(c=0|Xi(A,t,c,f))))break;if(A=(b=(0|A)==(0|n))?A:A+(c<<2)|0,i=c+i|0,!(0!=(0|(l=l-(b?0:c)|0))&0!=(0|(c=0|ar[t>>2]))))break A;b=r}i=-1,c=(l=0)|ar[t>>2]}else i=0}while(0);A:do{if(0!=(0|c)&&0!=(0|l)&0!=(0|r)){for(u=A;!(((A=0|Gi(u,c,r,f))+2|0)>>>0<3);){if(c=(0|ar[t>>2])+A|0,ar[t>>2]=c,i=i+1|0,!(0!=(0|(l=l+-1|0))&0!=(0|(r=r-A|0))))break A;u=u+4|0}switch(0|A){case-1:i=-1;break A;case 0:ar[t>>2]=0;break A;default:ar[f>>2]=0;break A}}}while(0);return o&&(ar[e>>2]=ar[t>>2]),ur=a,0|i}function Fi(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0;t=ur=(a=ur)+31&-32,ur=ur+272|0,n=8+t|0,l=0|ar[(e|=0)>>2],c=(o=0!=(0|A))?i:256,A=o?A:n,i=ar[t>>2]=l;A:do{if(0!=(0|c)&0!=(0|l)){for(f=0,l=i;;){if(!((i=c>>>0<=r>>>0)|32<r>>>0)){i=l;break A}if(r=r-(i=i?c:r)|0,-1==(0|(i=0|Ci(A,t,i,0))))break;if(A=(l=(0|A)==(0|n))?A:A+i|0,f=i+f|0,!(0!=(0|(c=c-(l?0:i)|0))&0!=(0|(i=0|ar[t>>2]))))break A;l=i}f=-1,i=(c=0)|ar[t>>2]}else f=0}while(0);A:do{if(0!=(0|i)&&0!=(0|c)&0!=(0|r)){for(l=A;!(((A=0|$c(l,0|ar[i>>2]))+1|0)>>>0<2);){if(i=4+(0|ar[t>>2])|0,ar[t>>2]=i,f=A+f|0,!(0!=(0|(c=c-A|0))&0!=(0|(r=r+-1|0))))break A;l=l+A|0}A?f=-1:ar[t>>2]=0}}while(0);return o&&(ar[e>>2]=ar[t>>2]),ur=a,0|f}function Ri(A,e,r){A|=0,r|=0;var i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;switch(0|(e|=0)){case 0:a=-149,c=24,t=4;break;case 1:case 2:a=-1074,c=53,t=4;break;default:i=0}A:do{if(4==(0|t)){for(u=A+4|0,l=A+100|0;0!=(0|mi(e=(e=0|ar[u>>2])>>>0<(0|ar[l>>2])>>>0?(ar[u>>2]=e+1,0|cr[e>>0]):0|vi(A))););e:do{switch(0|e){case 43:case 45:if(n=1-((45==(0|e)&1)<<1)|0,(e=0|ar[u>>2])>>>0<(0|ar[l>>2])>>>0){ar[u>>2]=e+1,f=0|cr[e>>0];break e}f=0|vi(A);break e;default:f=e,n=1}}while(0);e=0;do{if((32|f)!=(0|tr[52890+e>>0]))break;do{if(e>>>0<7){if((f=0|ar[u>>2])>>>0<(0|ar[l>>2])>>>0){ar[u>>2]=f+1,f=0|cr[f>>0];break}f=0|vi(A);break}}while(0);e=e+1|0}while(e>>>0<8);e:do{switch(0|e){case 8:break;case 3:t=23;break;default:if((o=0!=(0|r))&3<e>>>0){if(8==(0|e))break e;t=23;break e}r:do{if(!e){e=0;do{if((32|f)!=(0|tr[52899+e>>0]))break r;do{if(e>>>0<2){if((f=0|ar[u>>2])>>>0<(0|ar[l>>2])>>>0){ar[u>>2]=f+1,f=0|cr[f>>0];break}f=0|vi(A);break}}while(0);e=e+1|0}while(e>>>0<3)}}while(0);switch(0|e){case 3:if(40!=(0|(e=(e=0|ar[u>>2])>>>0<(0|ar[l>>2])>>>0?(ar[u>>2]=e+1,0|cr[e>>0]):0|vi(A)))){if(!(0|ar[l>>2])){i=h;break A}ar[u>>2]=(0|ar[u>>2])-1,i=h;break A}for(e=1;((f=(f=0|ar[u>>2])>>>0<(0|ar[l>>2])>>>0?(ar[u>>2]=f+1,0|cr[f>>0]):0|vi(A))+-48|0)>>>0<10|(f+-65|0)>>>0<26||95==(0|f)|(f+-97|0)>>>0<26;)e=e+1|0;if(41==(0|f)){i=h;break A}if((f=0==(0|ar[l>>2]))||(ar[u>>2]=(0|ar[u>>2])-1),!o){ar[(u=10364)>>2]=22,nl(A,0),i=0;break A}if(!e){i=h;break A}for(;;)if(e=e+-1|0,f||(ar[u>>2]=(0|ar[u>>2])-1),!e){i=h;break A}case 0:if(48==(0|f)){if(120==(32|(e=(e=0|ar[u>>2])>>>0<(0|ar[l>>2])>>>0?(ar[u>>2]=e+1,0|cr[e>>0]):0|vi(A)))){i=+Ni(A,c,a,n,r);break A}e=(0|ar[l>>2]&&(ar[u>>2]=(0|ar[u>>2])-1),48)}else e=f;i=+_i(A,e,c,a,n,r);break A;default:0|ar[l>>2]&&(ar[u>>2]=(0|ar[u>>2])-1),ar[(u=10364)>>2]=22,nl(A,0),i=0;break A}}}while(0);if(23==(0|t)&&((f=0==(0|ar[l>>2]))||(ar[u>>2]=(0|ar[u>>2])-1),0!=(0|r)&3<e>>>0))for(;f||(ar[u>>2]=(0|ar[u>>2])-1),3<(e=e+-1|0)>>>0;);i=(0|n)*w}}while(0);return+i}function Ni(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0;a=(o=(o=0|ar[(g=(A|=0)+4|0)>>2])>>>0<(0|ar[(n=A+100|0)>>2])>>>0?(ar[g>>2]=o+1,0|cr[o>>0]):0|vi(A),0);A:for(;;){switch(0|o){case 46:b=8;break A;case 48:break;default:d=1,h=a,l=u=k=a=m=t=v=w=0;break A}(o=0|ar[g>>2])>>>0<(0|ar[n>>2])>>>0?(ar[g>>2]=o+1,o=0|cr[o>>0],a=1):(o=0|vi(A),a=1)}if(8==(0|b))if(48==(0|(o=(o=0|ar[g>>2])>>>0<(0|ar[n>>2])>>>0?(ar[g>>2]=o+1,0|cr[o>>0]):0|vi(A)))){for(a=l=0;o=(o=0|ar[g>>2])>>>0<(0|ar[n>>2])>>>0?(ar[g>>2]=o+1,0|cr[o>>0]):0|vi(A),l=0|tb(0|l,0|a,-1,-1),a=D,48==(0|o););h=d=w=1,u=k=m=t=v=0}else d=w=1,h=a,l=u=k=a=m=t=v=0;for(;s=46==(0|o),!(10<=(b=o+-48|0)>>>0)||s|((32|o)-97|0)>>>0<6;){if(s){if(w){o=46;break}w=1,b=v,c=d,o=m,l=u,a=k}else{o=57<(0|o)?(32|o)-87|0:b;do{if(!((0|k)<0|0==(0|k)&u>>>0<8)){if((0|k)<0|0==(0|k)&u>>>0<14){b=v,t+=(c=d*=.0625)*(0|o),o=m;break}b=(o=0!=(0|v)|0==(0|o))?v:1,c=d,t=o?t:t+.5*d,o=m;break}b=v,c=d,o=o+(m<<4)|0}while(0);u=0|tb(0|u,0|k,1,0),h=1,k=D}o=(s=0|ar[g>>2])>>>0<(0|ar[n>>2])>>>0?(ar[g>>2]=s+1,v=b,d=c,m=o,0|cr[s>>0]):(v=b,d=c,m=o,0|vi(A))}do{if(h){if(s=(b=0==(0|w))?u:l,b=b?k:a,(0|k)<0|0==(0|k)&u>>>0<8){for(a=m,l=k;a<<=4,u=0|tb(0|u,0|l,1,0),(0|(l=D))<0|0==(0|l)&u>>>0<8;);u=a}else u=m;if(112==(32|o)){if(0==(0|(a=0|Yi(A,f)))&-2147483648==(0|(o=D))){if(!f){nl(A,0),t=0;break}o=a=(0|ar[n>>2]&&(ar[g>>2]=(0|ar[g>>2])-1),0)}}else o=a=(0|ar[n>>2]&&(ar[g>>2]=(0|ar[g>>2])-1),0);if(l=0|tb(0|(l=0|db(0|s,0|b,2)),0|D,-32,-1),l=0|tb(0|l,0|D,0|a,0|o),o=D,!u){t=0*(0|i);break}if((0|(f=((0|(g=0-r|0))<0)<<31>>31))<(0|o)|(0|o)==(0|f)&g>>>0<l>>>0){ar[(e=10364)>>2]=34,t=17976931348623157e292*(0|i)*17976931348623157e292;break}if((0|o)<(0|(f=((0|(g=r+-106|0))<0)<<31>>31))|(0|o)==(0|f)&l>>>0<g>>>0){ar[(e=10364)>>2]=34,t=22250738585072014e-324*(0|i)*22250738585072014e-324;break}if(-1<(0|u)){for(a=u;a=a<<1|1&(1^(g=!(.5<=t))),t+=g?t:t+-1,l=0|tb(0|l,0|o,-1,-1),o=D,-1<(0|a););d=t,u=a}else d=t;o=0|tb(0|(r=0|ob(32,0,0|r,((0|r)<0)<<31>>31|0)),0|D,0|l,0|o),59==(0|(b=(0|(r=D))<(0|(g=((0|e)<0)<<31>>31))|(0|g)==(0|r)&o>>>0<e>>>0?0<(0|o)?59:(a=0,o=84,61):(o=e,59)))&&((0|o)<53?(o=84-(a=o)|0,b=61):t=+((c=0)|i)),61==(0|b)&&(t=+(0|i),c=+Di(+Qi(1,o),t),o=a),0==(t=t*((i=0==(1&u|0)&0!=d&(0|o)<32)?0:d)+(c+t*(((1&i)+u|0)>>>0))-c)&&(ar[(i=10364)>>2]=34),t=+Mi(t,l)}else(a=0!=(0|(o=0|ar[n>>2])))&&(ar[g>>2]=(0|ar[g>>2])-1),f?(a&&(ar[g>>2]=(0|ar[g>>2])-1),0==(0|w)|0==(0|o)||(ar[g>>2]=(0|ar[g>>2])-1)):nl(A,0),t=0*(0|i)}while(0);return+t}function _i(A,e,r,i,f,n){e|=0,f|=0,n|=0;var t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0;t=ur=(o=ur)+31&-32,ur=ur+512|0,G=0-(C=(i|=0)+(r|=0)|0)|0,X=(A|=0)+4|0,W=A+100|0,l=0;A:for(;;){switch(0|e){case 46:B=6;break A;case 48:break;default:d=l,s=k=g=0;break A}(e=0|ar[X>>2])>>>0<(0|ar[W>>2])>>>0?(ar[X>>2]=e+1,e=0|cr[e>>0],l=1):(e=0|vi(A),l=1)}if(6==(0|B))if(48==(0|(e=(e=0|ar[X>>2])>>>0<(0|ar[W>>2])>>>0?(ar[X>>2]=e+1,0|cr[e>>0]):0|vi(A))))for(e=l=0;;){if(l=0|tb(0|l,0|e,-1,-1),s=D,48!=(0|(e=(e=0|ar[X>>2])>>>0<(0|ar[W>>2])>>>0?(ar[X>>2]=e+1,0|cr[e>>0]):0|vi(A)))){d=g=1,k=l;break}e=s}else g=1,d=l,s=k=0;b=e+-48|(ar[t>>2]=0),u=46==(0|e);A:do{if(u|b>>>0<10){E=496+t|0,p=g,y=d,B=b,b=d=m=l=Z=0;e:for(;;){do{if(u){if(p)break e;p=1,k=d,s=b}else{if(d=0|tb(0|d,0|b,1,0),b=D,g=48!=(0|e),125<=(0|l)){if(!g)break;ar[E>>2]=1|ar[E>>2];break}u=t+(l<<2)|0,e=Z?e+-48+(10*(0|ar[u>>2])|0)|0:B,ar[u>>2]=e,Z=(y=9==(0|(Z=Z+1|0)))?0:Z,l=(1&y)+l|0,m=g?d:m,y=1}}while(0);if(!((u=46==(0|(e=(e=0|ar[X>>2])>>>0<(0|ar[W>>2])>>>0?(ar[X>>2]=e+1,0|cr[e>>0]):0|vi(A))))|(B=e+-48|0)>>>0<10)){g=p,u=y,B=29;break A}}e=Z,u=0!=(0|y),B=37}else u=d,b=d=m=l=Z=0,B=29}while(0);do{if(29==(0|B)){if(k=(E=0==(0|g))?d:k,s=E?b:s,!((u=0!=(0|u))&101==(32|e))){if(-1<(0|e)){e=Z,B=37;break}e=Z,B=39;break}if(0==(0|(u=0|Yi(A,n)))&-2147483648==(0|(e=D))){if(!n){nl(A,0),a=0;break}e=u=(0|ar[W>>2]&&(ar[X>>2]=(0|ar[X>>2])-1),0)}y=0|tb(0|u,0|e,0|k,0|s),e=Z,s=D,B=41}}while(0);37==(0|B)&&(B=0|ar[W>>2]?(ar[X>>2]=(0|ar[X>>2])-1,u?(y=k,41):40):39),39==(0|B)&&(B=u?(y=k,41):40);do{if(40==(0|B))ar[(G=10364)>>2]=22,nl(A,0),a=0;else if(41==(0|B)){if(!(u=0|ar[t>>2])){a=0*(0|f);break}if((0|y)==(0|d)&(0|s)==(0|b)&((0|b)<0|0==(0|b)&d>>>0<10)&&30<(0|r)|0==(u>>>r|0)){a=(0|f)*(u>>>0);break}if((0|(W=((0|(A=(0|i)/-2|0))<0)<<31>>31))<(0|s)|(0|s)==(0|W)&A>>>0<y>>>0){ar[(G=10364)>>2]=34,a=17976931348623157e292*(0|f)*17976931348623157e292;break}if((0|s)<(0|(W=((0|(A=i+-106|0))<0)<<31>>31))|(0|s)==(0|W)&y>>>0<A>>>0){ar[(G=10364)>>2]=34,a=22250738585072014e-324*(0|f)*22250738585072014e-324;break}if(e){if((0|e)<9){for(u=0|ar[(b=t+(l<<2)|0)>>2];u=10*u|0,9!=(0|(e=e+1|0)););ar[b>>2]=u}l=l+1|0}if((0|m)<9&&(0|m)<=(0|y)&(0|y)<18){if(e=0|ar[t>>2],9==(0|y)){a=(0|f)*(e>>>0);break}if((0|y)<9){a=(0|f)*(e>>>0)/(0|ar[14012+(8-y<<2)>>2]);break}if(30<(0|(A=r+27+(0|br(y,-3))|0))|0==(e>>>A|0)){a=(0|f)*(e>>>0)*(0|ar[14012+(y+-10<<2)>>2]);break}}if(e=(0|y)%9|0){if(d=0|ar[14012+(8-(m=-1<(0|y)?e:e+9|0)<<2)>>2],l){for(k=1e9/(0|d)|0,u=y,e=s=b=0;A=(((W=0|ar[(X=t+(e<<2)|0)>>2])>>>0)/(d>>>0)|0)+b|0,ar[X>>2]=A,b=0|br(k,(W>>>0)%(d>>>0)|0),u=(A=(0|e)==(0|s)&0==(0|A))?u+-9|0:u,s=A?s+1&127:s,(0|(e=e+1|0))!=(0|l););b?(ar[t+(l<<2)>>2]=b,b=s,l=l+1|0):b=s}else l=b=0,u=y;y=9-m+u|(e=0)}else b=e=0;A:for(;;){for(m=(0|y)<18,g=18==(0|y),Z=t+(b<<2)|0;;){if(!m){if(!g){u=y;break A}if(9007199<=(0|ar[Z>>2])>>>0){u=18;break A}}for(l=(p=l)+127|(u=0);l=0|tb(0|(l=0|db(0|ar[(d=t+((s=127&l)<<2)|0)>>2],0,29)),0|D,0|u,0),0<(u=D)>>>0|0==(0|u)&1e9<l>>>0?(k=0|lb(0|l,0|u,1e9,0),l=0|ub(0|l,0|u,1e9,0)):k=0,p=0==(0|(ar[d>>2]=l))&(1^((0|s)!=(p+127&127|0)|(A=(0|s)==(0|b))))?s:p,!A;)u=k,l=s+-1|0;if(e=e+-29|0,0|k)break;l=p}l=p+127&127,u=t+((p+126&127)<<2)|0,(0|(b=b+127&127))==(0|p)?ar[u>>2]=ar[u>>2]|ar[t+(l<<2)>>2]:l=p,ar[t+(b<<2)>>2]=k,y=y+9|0}A:for(;;){for(Z=l+1&127,p=t+((l+127&127)<<2)|0;;){for(k=18==(0|u),g=27<(0|u)?9:1,y=b;;){for(b=0;;){if((0|(s=b+y&127))==(0|l)){I=2,B=88;break}if((s=0|ar[t+(s<<2)>>2])>>>0<(d=0|ar[14044+(b<<2)>>2])>>>0){I=2,B=88;break}if(d>>>0<s>>>0)break;if(2<=(0|(b=b+1|0))){I=b,B=88;break}}if(88==(0|B)&&k&2==((B=0)|I)){s=a=0;break A}if(e=g+e|0,(0|y)!=(0|l))break;y=l}for(k=(1<<g)-1|0,m=1e9>>>g,d=0,s=b=y;A=((W=0|ar[(X=t+(s<<2)|0)>>2])>>>g)+d|0,ar[X>>2]=A,d=0|br(W&k,m),u=(A=(0|s)==(0|b)&0==(0|A))?u+-9|0:u,b=A?b+1&127:b,(0|(s=s+1&127))!=(0|l););if(d){if((0|Z)!=(0|b))break;ar[p>>2]=1|ar[p>>2]}}ar[t+(l<<2)>>2]=d,l=Z}for(;u=l+1&127,(0|(b=s+y&127))==(0|l)&&(ar[t+(u+-1<<2)>>2]=0,l=u),a=1e9*a+ +((0|ar[t+(b<<2)>>2])>>>0),2!=(0|(s=s+1|0)););if(c=(v=+(0|f))*a,h=(0|(b=(k=(0|(d=(s=e+53|0)-i|0))<(0|r))?0<(0|d)?d:0:r))<53?(w=+Di(+Qi(1,105-b|0),c))+(c-(a=h=+Ji(c,+Qi(1,53-b|0)))):(a=w=0,c),(0|(u=y+2&127))!=(0|l)){u=0|ar[t+(u<<2)>>2];do{if(5e8<=u>>>0){if(5e8!=(0|u)){a=.75*v+a;break}if((y+3&127|0)==(0|l)){a=.5*v+a;break}a=.75*v+a;break}if(0==(0|u)&&(y+3&127|0)==(0|l))break;a=.25*v+a}while(0);c=1<(53-b|0)&&0==+Ji(a,1)?a+1:a}else c=a;a=h+c-w;do{if((-2-C|0)<(2147483647&s|0)){if(a=(C=!(9007199254740992<=+V(+a)))?a:.5*a,((e=(1&(1^C))+e|0)+50|0)<=(0|G)&&!(0!=c&k&((0|b)!=(0|d)|C)))break;ar[(G=10364)>>2]=34}}while(0);a=+Mi(a,e)}}while(0);return ur=o,+a}function Yi(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0;switch(0|(i=(i=0|ar[(a=(A|=0)+4|0)>>2])>>>0<(0|ar[(r=A+100|0)>>2])>>>0?(ar[a>>2]=i+1,0|cr[i>>0]):0|vi(A))){case 43:case 45:f=45==(0|i)&1,0!=(0|e)&9<((i=(i=0|ar[a>>2])>>>0<(0|ar[r>>2])>>>0?(ar[a>>2]=i+1,0|cr[i>>0]):0|vi(A))+-48|0)>>>0&&0!=(0|ar[r>>2])&&(ar[a>>2]=(0|ar[a>>2])-1);break;default:f=0}if(9<(i+-48|0)>>>0)i=(f=(0|ar[r>>2]&&(ar[a>>2]=(0|ar[a>>2])-1),-2147483648),0);else{for(n=0;n=i+-48+(10*n|0)|0,((i=(i=0|ar[a>>2])>>>0<(0|ar[r>>2])>>>0?(ar[a>>2]=i+1,0|cr[i>>0]):0|vi(A))+-48|0)>>>0<10&(0|n)<214748364;);if(e=((0|n)<0)<<31>>31,(i+-48|0)>>>0<10){for(;e=0|nb(0|n,0|e,10,0),n=D,i=0|tb(0|i,((0|i)<0)<<31>>31|0,-48,-1),n=0|tb(0|i,0|D,0|e,0|n),e=D,((i=(i=0|ar[a>>2])>>>0<(0|ar[r>>2])>>>0?(ar[a>>2]=i+1,0|cr[i>>0]):0|vi(A))+-48|0)>>>0<10&((0|e)<21474836|21474836==(0|e)&n>>>0<2061584302););t=i,o=n}else t=i,o=n;if(i=0|ar[r>>2],(t+-48|0)>>>0<10)for(;(n=0|ar[a>>2])>>>0<i>>>0?(ar[a>>2]=n+1,n=0|cr[n>>0]):(n=0|vi(A),i=0|ar[r>>2]),(n+-48|0)>>>0<10;);0|i&&(ar[a>>2]=(0|ar[a>>2])-1),i=0|ob(0,0,0|o,0|e),f=(a=0!=(0|f))?D:e,i=a?i:o}return D=f,0|i}function Qi(A,e){A=+A;var r=0,i=0;return(0|(e|=0))<=1023?(0|e)<-1022&&(A*=22250738585072014e-324,r=e+1022|0,e=e+2044|0,A=(i=(0|r)<-1022)?22250738585072014e-324*A:A,e=i?-1022<(0|e)?e:-1022:r):(A*=898846567431158e293,i=e+-1023|0,e=e+-2046|0,A=(r=1023<(0|i))?898846567431158e293*A:A,e=r?(0|e)<1023?e:1023:i),r=0|db(e+1023|0,0,52),i=D,ar[d>>2]=r,ar[d+4>>2]=i,+(A*Q[d>>3])}function Di(A,e){return+ +function(A,e){A=+A,e=+e;var r,i=0;return Q[d>>3]=A,r=0|ar[d>>2],i=0|ar[d+4>>2],Q[d>>3]=e,i=-2147483648&ar[d+4>>2]|2147483647&i,ar[d>>2]=r,ar[d+4>>2]=i,+ +Q[d>>3]}(A=+A,e=+e)}function Ji(A,e){return+ +function(A,e){A=+A,e=+e;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;Q[d>>3]=A,o=0|ar[d>>2],c=0|ar[d+4>>2],Q[d>>3]=e,u=0|ar[d>>2],b=0|ar[d+4>>2],f=2047&(f=0|sb(0|o,0|c,52)),l=2047&(l=0|sb(0|u,0|b,52)),r=-2147483648&c,t=0|db(0|u,0|b,1),a=D;A:do{if(0==(0|t)&0==(0|a)||(n=0|Ti(e),i=2147483647&D,2047==(0|f)|2146435072<i>>>0|2146435072==(0|i)&0<n>>>0))s=3;else{if(i=0|db(0|o,0|c,1),!(a>>>0<(n=D)>>>0|(0|n)==(0|a)&t>>>0<i>>>0))return+((0|i)==(0|t)&(0|n)==(0|a)?0*A:A);if(f)t=1048575&c|1048576;else{if(i=0|db(0|o,0|c,12),-1<(0|(n=D))|-1==(0|n)&4294967295<i>>>0)for(f=0;f=f+-1|0,i=0|db(0|i,0|n,1),-1<(0|(n=D))|-1==(0|n)&4294967295<i>>>0;);else f=0;o=0|db(0|o,0|c,1-f|0),t=D}if(l)c=1048575&b|1048576;else{if(n=0|db(0|u,0|b,12),-1<(0|(a=D))|-1==(0|a)&4294967295<n>>>0)for(i=0;i=i+-1|0,n=0|db(0|n,0|a,1),-1<(0|(a=D))|-1==(0|a)&4294967295<n>>>0;);else i=0;u=0|db(0|u,0|b,1-i|0),l=i,c=D}n=0|ob(0|o,0|t,0|u,0|c),a=-1<(0|(i=D))|-1==(0|i)&4294967295<n>>>0;e:do{if((0|l)<(0|f)){for(;;){if(a){if(0==(0|n)&0==(0|i))break}else n=o,i=t;if(o=0|db(0|n,0|i,1),n=0|ob(0|o,0|(t=D),0|u,0|c),a=-1<(0|(i=D))|-1==(0|i)&4294967295<n>>>0,(0|(f=f+-1|0))<=(0|l))break e}e=0*A;break A}}while(0);if(a){if(0==(0|n)&0==(0|i)){e=0*A;break}}else i=t,n=o;if(i>>>0<1048576|1048576==(0|i)&n>>>0<0)for(;n=0|db(0|n,0|i,1),f=f+-1|0,(i=D)>>>0<1048576|1048576==(0|i)&n>>>0<0;);0<(0|f)?(b=0|tb(0|n,0|i,0,-1048576),i=D,f=0|db(0|f,0,52),i|=D,f|=b):(f=0|sb(0|n,0|i,1-f|0),i=D),ar[d>>2]=f,ar[d+4>>2]=i|r,e=+Q[d>>3]}}while(0);3==(0|s)&&(e*=A,e/=e);return+e}(A=+A,e=+e)}function Mi(A,e){return+ +Qi(A=+A,e|=0)}function Ti(A){A=+A;var e;return Q[d>>3]=A,e=0|ar[d>>2],D=0|ar[d+4>>2],0|e}function Ui(A,e,r,i){A|=0,i|=0;var f,n=0;return f=0|br(r|=0,e|=0),r=0==(0|e)?0:r,-1<(0|ar[i+76>>2])?(n=0==(0|Jc()),A=0|el(A,f,i),n||Mc()):A=0|el(A,f,i),(0|A)!=(0|f)&&(r=(A>>>0)/(e>>>0)|0),0|r}function Si(A,e){A|=0;var r,i,f,n=0,t=0,o=0,a=0;r=ur=(f=ur)+31&-32,ur=ur+16|0,i=255&(e|=0),tr[r>>0]=i,(o=0|ar[(t=A+16|0)>>2])?a=4:0|rl(A)?n=-1:(o=0|ar[t>>2],a=4);do{if(4==(0|a)){if((t=0|ar[(a=A+20|0)>>2])>>>0<o>>>0&&(0|(n=255&e))!=(0|tr[A+75>>0])){ar[a>>2]=t+1,tr[t>>0]=i;break}n=1==(0|xb[63&ar[A+36>>2]](A,r,1))?0|cr[r>>0]:-1}}while(0);return ur=f,0|n}function Oi(A){A|=0;var e=0,r=0;do{if(A){if((0|ar[A+76>>2])<=-1){e=0|zi(A);break}r=0==(0|Jc()),e=0|zi(A),r||Mc()}else{if(e=0|ar[2636]?0|Oi(0|ar[2636]):0,A=0|(C(58160),58168),A=0|ar[A>>2])for(;r=-1<(0|ar[A+76>>2])?0|Jc():0,(0|ar[A+20>>2])>>>0>(0|ar[A+28>>2])>>>0&&(e=0|zi(A)|e),0|r&&Mc(),0!=(0|(A=0|ar[A+56>>2])););T(58160)}}while(0);return 0|e}function zi(A){var e,r,i=0,f=0,n=0,t=0;return r=(A|=0)+28|0,0|(A=(0|ar[(e=A+20|0)>>2])>>>0>(0|ar[r>>2])>>>0&&(xb[63&ar[A+36>>2]](A,0,0),0==(0|ar[e>>2]))?-1:((f=0|ar[(i=A+4|0)>>2])>>>0<(t=0|ar[(n=A+8|0)>>2])>>>0&&xb[63&ar[A+40>>2]](A,f-t|0,1),ar[A+16>>2]=0,ar[r>>2]=0,ar[e>>2]=0,ar[n>>2]=0,ar[i>>2]=0))}function ji(A,e,r){A|=0,e|=0,r|=0;var i,f;return f=ur=(i=ur)+31&-32,ur=ur+16|0,ar[f>>2]=r,r=0|Hi(A,e,f),ur=i,0|r}function Hi(A,e,r){A|=0,e|=0,r|=0;var i,f,n=0,t=0;for(i=ur=(f=ur)+31&-32,ur=ur+128|0,t=(n=i)+124|0;(0|(n=n+4|(ar[n>>2]=0)))<(0|t););return ar[32+i>>2]=34,ar[44+i>>2]=A,ar[76+i>>2]=-1,ar[84+i>>2]=A,t=0|function(A,e,r){e|=0,r|=0;var i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0;R=ur=(t=ur)+31&-32,ur=ur+288|0,i=R+8|0,f=R+17|0,R=(n=R)+16|0,_=-1<(0|ar[76+(A|=0)>>2])?0|Jc():0;o=0|tr[e>>0];A:do{if(o<<24>>24){y=A+4|0,B=A+100|0,E=A+108|0,X=A+8|0,W=10+f|0,I=33+f|0,p=4+i|0,C=46+f|0,G=94+f|0,F=V=1+f|0,l=e,a=c=e=v=0;e:for(;;){r:do{if(0|mi(255&o)){for(;0|mi(0|cr[(o=l+1|0)>>0]);)l=o;for(nl(A,0);0!=(0|mi(o=(o=0|ar[y>>2])>>>0<(0|ar[B>>2])>>>0?(ar[y>>2]=o+1,0|cr[o>>0]):0|vi(A))););0|ar[B>>2]?(o=(0|ar[y>>2])-1|0,ar[y>>2]=o):o=0|ar[y>>2],u=(0|ar[E>>2])+v+o-(0|ar[X>>2])|0}else{o=o<<24>>24==37;i:do{if(o){u=0|tr[(s=l+1|0)>>0];f:do{switch(u<<24>>24){case 37:break i;case 42:l=l+2|(Z=0);break;default:if((o=(255&u)-48|0)>>>0<10&&36==(0|tr[l+2>>0])){Z=0|xi(r,o),l=l+3|0;break f}l=3+(0|ar[r>>2])&-4,Z=0|ar[l>>2],ar[r>>2]=l+4,l=s}}while(0);if(o=0|tr[l>>0],((u=255&o)+-48|0)>>>0<10)for(s=0;s=(10*s|0)-48+u|0,o=0|tr[(l=l+1|0)>>0],((u=255&o)+-48|0)>>>0<10;);else s=0;switch(c=(o=o<<24>>24==109)?0:c,a=o?0:a,l=o?l+1|0:l,o&=g=0!=(0|Z),u=l+1|0,0|tr[l>>0]){case 104:m=104==(0|tr[u>>0]),d=m?-2:-1,l=m?l+2|0:u;break;case 108:m=108==(0|tr[u>>0]),d=m?3:1,l=m?l+2|0:u;break;case 106:d=3,l=u;break;case 116:case 122:d=1,l=u;break;case 76:d=2,l=u;break;case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:d=0;break;default:N=137;break e}switch(h=0|cr[l>>0],h=(w=3==(47&h|0))?32|h:h,w=w?1:d,(k=255&h)<<24>>24){case 99:s=1<(0|s)?s:1;break;case 91:break;case 110:Pi(Z,w,v,((0|v)<0)<<31>>31),u=v;break r;default:for(nl(A,0);0!=(0|mi(u=(u=0|ar[y>>2])>>>0<(0|ar[B>>2])>>>0?(ar[y>>2]=u+1,0|cr[u>>0]):0|vi(A))););0|ar[B>>2]?(u=(0|ar[y>>2])-1|0,ar[y>>2]=u):u=0|ar[y>>2],v=(0|ar[E>>2])+v+u-(0|ar[X>>2])|0}if(nl(A,s),u=0|ar[y>>2],d=0|ar[B>>2],u>>>0<d>>>0)ar[y>>2]=u+1;else{if((0|vi(A))<0){N=137;break e}d=0|ar[B>>2]}0|d&&(ar[y>>2]=(0|ar[y>>2])-1);f:do{switch(k<<24>>24){case 91:case 99:case 115:m=99==(0|h);n:do{if(115==(16|h))vb(0|V,-1,256),115==((tr[f>>0]=0)|h)&&(tr[I>>0]=0,tr[W>>0]=0,tr[W+1>>0]=0,tr[W+2>>0]=0,tr[W+3>>0]=0,tr[W+4>>0]=0);else{switch(h=94==(0|tr[(u=l+1|0)>>0]),l=h?l+2|0:u,vb(0|F,(k=1&h)|0,256),(tr[f>>0]=0)|tr[l>>0]){case 45:u=C,N=64;break;case 93:u=G,N=64;break;default:h=255&(1^k)}for(64==(0|N)&&(h=255&(1^k),tr[u>>(N=0)]=h,l=l+1|0);;){u=0|tr[l>>0];t:do{switch(u<<24>>24){case 0:N=137;break e;case 93:break n;case 45:switch((u=0|tr[(k=l+1|0)>>0])<<24>>24){case 93:case 0:u=45;break t}if((255&(l=0|tr[l+-1>>0]))<(255&u)){for(l&=255;tr[f+(l=l+1|0)>>0]=h,u=0|tr[k>>0],(0|l)<(255&u|0););l=k}else l=k}}while(0);tr[1+(255&u)+f>>0]=h,l=l+1|0}}}while(0);u=m?s+1|0:31,h=1==(0|w);n:do{if(h){if(o){if(!(a=0|yc(u<<2))){a=c=0,o=1,N=137;break e}}else a=Z;ar[i>>2]=0,ar[p>>2]=0,k=u,c=0;t:for(;;){d=0==(0|a);do{o:for(;;){if(u=(u=0|ar[y>>2])>>>0<(0|ar[B>>2])>>>0?(ar[y>>2]=u+1,0|cr[u>>0]):0|vi(A),!(0|tr[f+(u+1)>>0]))break t;switch(tr[R>>0]=u,0|Gi(n,R,1,i)){case-1:c=0,N=137;break e;case-2:break;default:break o}}d||(ar[a+(c<<2)>>2]=ar[n>>2],c=c+1|0)}while(!(o&(0|c)==(0|k)));if(!(u=0|Ec(a,(c=k<<1|1)<<2))){c=0,o=1,N=137;break e}w=k,k=c,a=u,c=w}if(!(0|(Y=i,1&(Y=(Y|=0)?0==(0|ar[Y>>2]):1)|0))){c=0,N=137;break e}u=c,c=0,k=a}else{if(o){if(!(c=0|yc(u))){a=c=0,o=1,N=137;break e}for(d=u,a=0;;){do{if(u=(u=0|ar[y>>2])>>>0<(0|ar[B>>2])>>>0?(ar[y>>2]=u+1,0|cr[u>>0]):0|vi(A),!(0|tr[f+(u+1)>>0])){u=a,a=k=0;break n}tr[c+a>>0]=u,a=a+1|0}while((0|a)!=(0|d));if(!(u=0|Ec(c,a=d<<1|1))){a=0,o=1,N=137;break e}w=d,d=a,c=u,a=w}}if(Z)for(u=0,c=d;;){if(a=(a=0|ar[y>>2])>>>0<c>>>0?(ar[y>>2]=a+1,0|cr[a>>0]):0|vi(A),!(0|tr[f+(a+1)>>0])){c=Z,a=k=0;break n}tr[Z+u>>0]=a,u=u+1|0,c=0|ar[B>>2]}else for(c=d;;){if(a=(a=0|ar[y>>2])>>>0<c>>>0?(ar[y>>2]=a+1,0|cr[a>>0]):0|vi(A),!(0|tr[f+(a+1)>>0])){a=k=c=u=0;break n}c=0|ar[B>>2]}}}while(0);if(0|ar[B>>2]?(d=(0|ar[y>>2])-1|0,ar[y>>2]=d):d=0|ar[y>>2],!(d=d-(0|ar[X>>2])+(0|ar[E>>2])|0)){N=139;break e}if(!((0|d)==(0|s)|1^m)){N=139;break e}do{if(o){if(h){ar[Z>>2]=k;break}ar[Z>>2]=c;break}}while(0);if(!m){if(0|k&&(ar[k+(u<<2)>>2]=0),!c){c=0;break f}tr[c+u>>0]=0}break;case 120:case 88:case 112:u=16,N=125;break;case 111:u=8,N=125;break;case 117:case 100:u=10,N=125;break;case 105:u=0,N=125;break;case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:if(b=+Ri(A,w,0),(0|ar[E>>2])==((0|ar[X>>2])-(0|ar[y>>2])|0)){N=139;break e}if(Z)switch(0|w){case 0:gA[Z>>2]=b;break f;case 1:case 2:Q[Z>>3]=b;break f;default:break f}}}while(0);do{if(125==(0|N)){if(u=(N=0)|wi(A,u,0,-1,-1),(0|ar[E>>2])==((0|ar[X>>2])-(0|ar[y>>2])|0)){N=139;break e}if(g&112==(0|h)){ar[Z>>2]=u;break}Pi(Z,w,u,D);break}}while(0);e=(1&g)+e|0,u=(0|ar[E>>2])+v+(0|ar[y>>2])-(0|ar[X>>2])|0;break r}}while(0);if(l=l+(1&o)|0,nl(A,0),(0|(o=(o=0|ar[y>>2])>>>0<(0|ar[B>>2])>>>0?(ar[y>>2]=o+1,0|cr[o>>0]):0|vi(A)))!=(0|cr[l>>0])){N=22;break e}u=v+1|0}}while(0);if(!((o=0|tr[(l=l+1|0)>>0])<<24>>24))break A;v=u}if(22==(0|N)){if(0|ar[B>>2]&&(ar[y>>2]=(0|ar[y>>2])-1),0!=(0|e)|-1<(0|o))break;o=0,N=138}else 137==(0|N)?(o&=1,e||(N=138)):139==(0|N)&&(o&=1);138==(0|N)&&(e=-1),o&&(Bc(c),Bc(a))}else e=0}while(0);var Y;0|_&&Mc();return ur=t,0|e}(i,e,r),ur=f,0|t}function xi(A,e){A|=0,e|=0;var r,i,f=0;for(r=ur=(i=ur)+31&-32,ur=ur+16|0,ar[r>>2]=ar[A>>2];f=3+(0|ar[r>>2])&-4,A=0|ar[f>>2],ar[r>>2]=f+4,1<e>>>0;)e=e+-1|0;return ur=i,0|A}function Pi(A,e,r,i){A|=0,e|=0,r|=0,i|=0;A:do{if(0|A)switch(0|e){case-2:tr[A>>0]=r;break A;case-1:or[A>>1]=r;break A;case 0:case 1:ar[A>>2]=r;break A;case 3:ar[(e=A)>>2]=r,ar[e+4>>2]=i;break A;default:break A}}while(0)}function Li(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t=0,o=0;for(f=ur=(n=ur)+31&-32,ur=ur+128|0,o=(t=f)+124|0;(0|(t=t+4|(ar[t>>2]=0)))<(0|o););return ar[(t=4+f|0)>>2]=A,ar[(o=8+f|0)>>2]=-1,ar[44+f>>2]=A,ar[76+f>>2]=-1,nl(f,0),i=+Ri(f,r,1),r=(0|ar[t>>2])-(0|ar[o>>2])+(0|ar[108+f>>2])|0,0|e&&(ar[e>>2]=0|r?A+r|0:A),ur=n,+i}function Ki(A,e){return r=A|=0,i=e|=0,+ + + +Li(r|=0,i|=0,0);var r,i}function qi(A,e){return r=A|=0,i=e|=0,+ + + +Li(r|=0,i|=0,1);var r,i}function $i(A,e){return r=A|=0,i=e|=0,+ + + +Li(r|=0,i|=0,2);var r,i}function Af(A,e){return+ +Qi(A=+A,e|=0)}function ef(A){return 0|~~+pb(+(A=+A))}function rf(A){A|=0;var e;return e=0|ar[2622],0|A&&(ar[2622]=-1==(0|A)?58104:A),0|(58104==(0|e)?-1:e)}function ff(A,e){A|=0,e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;b=ur=(i=ur)+31&-32,ur=ur+272|0,r=b+8|0;do{if(!(0|tr[e>>0])){if(0|(e=0|bA(52903))&&0|tr[e>>0])break;if(0|(e=0|bA(52910+(12*A|0)|0))&&0|tr[e>>0])break;if(0|(e=0|bA(52982))&&0|tr[e>>0])break;e=52987}}while(0);f=0;A:do{switch(0|tr[e+f>>0]){case 47:case 0:break A}f=f+1|0}while(f>>>0<15);15==(0|(u=(n=0|tr[e>>0])<<24>>24!=46&&0==(0|tr[e+f>>0])?n<<24>>24==67?15:(l=e,16):(e=52987,15)))&&(u=0|tr[e+1>>0]?(l=e,16):18);A:do{if(16==(0|u))if(0!=(0|Fc(l,52987))&&0!=(0|Fc(l,52995))){if(0|(e=0|ar[14543]))do{if(!(0|Fc(l,e+8|0)))break A;e=0|ar[e+24>>2]}while(0!=(0|e));C(58176),e=0|ar[14543];e:do{if(0|e){for(;0|Fc(l,e+8|0);)if(!(e=0|ar[e+24>>2]))break e;T(58176);break A}}while(0);e:do{if(0==(0|ar[14518])&&0!=(0|(t=0|bA(53001)))&&0!=(0|tr[t>>0])){for(a=254-f|0,c=f+1|0,n=t;;){if((t=(o=0|Nc(n,58))-n+(((e=0|tr[o>>0])<<24>>24!=0)<<31>>31)|0)>>>0<a>>>0){if(hb(0|r,0|n,0|t),tr[(n=r+t|0)>>0]=47,hb(n+1|0,0|l,0|f),(tr[r+(c+t)>>0]=0)|(t=0|G(0|r,0|b)))break;e=0|tr[o>>0]}if(!(0|tr[(n=o+(e<<24>>24!=0&1)|0)>>0])){u=41;break e}}if(e=0|yc(28),n=0|ar[b>>2],e){ar[e>>2]=t,ar[e+4>>2]=n,hb(0|(b=e+8|0),0|l,0|f),tr[b+f>>0]=0,ar[e+24>>2]=ar[14543],ar[14543]=e;break}Ei(t,n),u=41;break}u=41}while(0);41==(0|u)&&(e=0|yc(28))&&(ar[e>>2]=ar[2525],ar[e+4>>2]=ar[2526],hb(0|(b=e+8|0),0|l,0|f),tr[b+f>>0]=0,ar[e+24>>2]=ar[14543],ar[14543]=e),T(58176),e=0==(0|A)&0==(0|e)?10100:e}else e=l,u=18}while(0);do{if(18==(0|u)){if(0==(0|A)&&46==(0|tr[e+1>>0])){e=10100;break}e=0}}while(0);return ur=i,0|e}function nf(A){return 10148!=(0|(A|=0))&0!=(0|A)&58128!=(0|A)&1|0}function tf(A,e,r,i){return 0|(i|=0)}function of(A){0|nf(A|=0)&&Bc(A)}function af(A){return((A|=0)+-48|0)>>>0<10|0}function cf(){return-1}function lf(A){return 0|(e=A|=0,1&(((e|=0)-48|0)>>>0<10|((32|e)-97|0)>>>0<6)|0);var e}function uf(A,e){A|=0,e|=0;var r=0,i=0,f=0,n=0,t=0;do{if(-1!=(0|A)){if(f=-1<(0|ar[e+76>>2])?0|Jc():0,(r=0|ar[(n=e+4|0)>>2])?(i=r,r=0!=(0|f),t=7):(Zi(e),r=0!=(0|f),(i=0|ar[n>>2])?t=7:A=r),7==(0|t)){if(i>>>0>((0|ar[e+44>>2])-8|0)>>>0){if(t=i+-1|0,ar[n>>2]=t,tr[t>>0]=A,ar[e>>2]=-17&ar[e>>2],!r)break;Mc();break}A=r}A=(A&&Mc(),-1)}else A=-1}while(0);return 0|A}function bf(A){sf(A|=0)}function sf(A){ar[(A|=0)>>2]=14060,function(A,e){e|=0;var r,i,f=0,n=0;r=32+(A|=0)|0,i=A+36|0,f=0|ar[A+40>>2];for(;f;)n=f+-1|0,ns[127&ar[(0|ar[r>>2])+(n<<2)>>2]](e,A,0|ar[(0|ar[i>>2])+(n<<2)>>2]),f=n}(A,0),bn(A+28|0),Bc(0|ar[A+32>>2]),Bc(0|ar[A+36>>2]),Bc(0|ar[A+48>>2]),Bc(0|ar[A+60>>2])}function df(A){sf(A|=0)}function kf(A){ar[(A|=0)>>2]=14076,bn(A+4|0)}function hf(A){return 255&(A|=0)|0}function wf(A,e,r){return A|=0,e|=0,0|(r|=0)&&hb(0|A,0|e,0|r),0|A}function vf(A){return 255&(A|=0)|0}function mf(A){ar[(A|=0)>>2]=14140,bn(A+4|0)}function gf(A){return 0|(A|=0)}function Zf(A,e,r){return A|=0,e|=0,(r|=0)&&function(A,e,r){A|=0,e|=0;var i=0;if(0|(r|=0))for(i=A;r=r+-1|0,ar[i>>2]=ar[e>>2],r;)e=e+4|0,i=i+4|0}(A,e,r),0|A}function pf(A){return 0|(A|=0)}function yf(A){Ef(A|=0),bf(A+8|0)}function Bf(A){yf(A|=0),vu(A)}function Ef(){}function Xf(A){df((A|=0)+8|0)}function Wf(A){Xf(A|=0),vu(A)}function If(A){Gf(A|=0),bf(A+4|0)}function Cf(A){If(A|=0),vu(A)}function Gf(){}function Vf(A){df((A|=0)+4|0)}function Ff(A){Vf(A|=0),vu(A)}function Rf(A){_f(A|=0),bf(A+12|0)}function Nf(A){Rf(A|=0),vu(A)}function _f(){}function Yf(A){return 0|Vc(A|=0)}function Qf(A,e){e|=0,tr[(A|=0)>>0]=0|tr[e>>0]}function Df(A,e){e|=0,ar[(A|=0)+16>>2]=0==(0|ar[A+24>>2])|e}function Jf(A,e){e|=0;var r;for(ar[(A|=0)+24>>2]=e,ar[A+16>>2]=0==(0|e)&1,ar[A+20>>2]=0,ar[A+4>>2]=4098,ar[A+12>>2]=0,ar[A+8>>2]=6,r=A+28|0,A=(e=A+32|0)+40|0;(0|(e=e+4|(ar[e>>2]=0)))<(0|A););fu(r)}function Mf(A,e){return(0|(A|=0))==(0|(e|=0))|0}function Tf(A,e){ru(A|=0,(e|=0)+28|0)}function Uf(A,e){return(0|(A|=0))==(0|(e|=0))|0}function Sf(A){ar[(A|=0)>>2]=14076,fu(A+4|0),ar[(A=A+8|0)>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ar[A+12>>2]=0,ar[A+16>>2]=0,ar[A+20>>2]=0}function Of(A){ar[(A|=0)>>2]=14140,fu(A+4|0),ar[(A=A+8|0)>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ar[A+12>>2]=0,ar[A+16>>2]=0,ar[A+20>>2]=0}function zf(A,e){var r,i,f,n;e|=0,tr[(A|=0)>>0]=0,e=(ar[A+4>>2]=e)+(0|ar[(0|ar[e>>2])-12>>2])|0,0|ar[e+16>>2]||(0|(e=0|ar[e+72>>2])&&(r=e,i=ur=(f=ur)+31&-32,ur=ur+16|(n=0),0|ar[(r|=0)+(0|ar[(0|ar[r>>2])-12>>2])+24>>2]&&(zf(i,r),0|tr[i>>0]&&(n=0|ar[r+(0|ar[(0|ar[r>>2])-12>>2])+24>>2],-1==(0|jb[127&ar[24+(0|ar[n>>2])>>2]](n)))&&Df(n=r+(0|ar[(0|ar[r>>2])-12>>2])|0,1|ar[n+16>>2]),jf(i)),ur=f),tr[A>>0]=1)}function jf(A){var e=0;e=(e=0|ar[(A=(A|=0)+4|0)>>2])+(0|ar[(0|ar[e>>2])-12>>2])|0,0|ar[e+24>>2]&&0==(0|ar[e+16>>2])&&8192&ar[e+4>>2]|0&&!(0|E())&&(e=0|ar[A>>2],e=0|ar[e+(0|ar[(0|ar[e>>2])-12>>2])+24>>2],-1==(0|jb[127&ar[24+(0|ar[e>>2])>>2]](e)))&&Df(e=(e=0|ar[A>>2])+(0|ar[(0|ar[e>>2])-12>>2])|0,1|ar[e+16>>2])}function Hf(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0;return f=ur=(n=ur)+31&-32,ur=ur+16|0,r=12+f|0,i=8+f|0,zf(f,A|=0),0|tr[f>>0]&&(Tf(r,A+(0|ar[(0|ar[A>>2])-12>>2])|0),o=0|un(r,59288),bn(r),a=A+(0|ar[(0|ar[A>>2])-12>>2])|0,c=0|ar[a+24>>2],t=0|Mf(l=-1,0|ar[(t=a+76|0)>>2])?(Tf(r,a),l=0|un(r,59232),l=0|Hb[31&ar[28+(0|ar[l>>2])>>2]](l,32),bn(r),l=l<<24>>24,ar[t>>2]=l):0|ar[t>>2],l=0|ar[12+(0|ar[o>>2])>>2],ar[i>>2]=c,ar[r>>2]=ar[i>>2],0|Kb[31&l](o,r,a,255&t,e)||Df(l=A+(0|ar[(0|ar[A>>2])-12>>2])|0,5|ar[l+16>>2])),jf(f),ur=n,0|A}function xf(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0;return f=ur=(n=ur)+31&-32,ur=ur+16|0,r=12+f|0,i=8+f|0,zf(f,A|=0),0|tr[f>>0]&&(Tf(r,A+(0|ar[(0|ar[A>>2])-12>>2])|0),o=0|un(r,59288),bn(r),a=A+(0|ar[(0|ar[A>>2])-12>>2])|0,c=0|ar[a+24>>2],t=0|Mf(l=-1,0|ar[(t=a+76|0)>>2])?(Tf(r,a),l=0|un(r,59232),l=0|Hb[31&ar[28+(0|ar[l>>2])>>2]](l,32),bn(r),l=l<<24>>24,ar[t>>2]=l):0|ar[t>>2],l=0|ar[24+(0|ar[o>>2])>>2],ar[i>>2]=c,ar[r>>2]=ar[i>>2],0|Kb[31&l](o,r,a,255&t,65535&e)||Df(l=A+(0|ar[(0|ar[A>>2])-12>>2])|0,5|ar[l+16>>2])),jf(f),ur=n,0|A}function Pf(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0;return f=ur=(n=ur)+31&-32,ur=ur+16|0,r=12+f|0,i=8+f|0,zf(f,A|=0),0|tr[f>>0]&&(Tf(r,A+(0|ar[(0|ar[A>>2])-12>>2])|0),o=0|un(r,59288),bn(r),a=A+(0|ar[(0|ar[A>>2])-12>>2])|0,c=0|ar[a+24>>2],t=0|Mf(l=-1,0|ar[(t=a+76|0)>>2])?(Tf(r,a),l=0|un(r,59232),l=0|Hb[31&ar[28+(0|ar[l>>2])>>2]](l,32),bn(r),l=l<<24>>24,ar[t>>2]=l):0|ar[t>>2],l=0|ar[16+(0|ar[o>>2])>>2],ar[i>>2]=c,ar[r>>2]=ar[i>>2],0|Kb[31&l](o,r,a,255&t,e)||Df(l=A+(0|ar[(0|ar[A>>2])-12>>2])|0,5|ar[l+16>>2])),jf(f),ur=n,0|A}function Lf(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0;return f=ur=(n=ur)+31&-32,ur=ur+16|0,r=12+f|0,i=8+f|0,zf(f,A|=0),0|tr[f>>0]&&(Tf(r,A+(0|ar[(0|ar[A>>2])-12>>2])|0),o=0|un(r,59288),bn(r),a=A+(0|ar[(0|ar[A>>2])-12>>2])|0,c=0|ar[a+24>>2],t=0|Mf(l=-1,0|ar[(t=a+76|0)>>2])?(Tf(r,a),l=0|un(r,59232),l=0|Hb[31&ar[28+(0|ar[l>>2])>>2]](l,32),bn(r),l=l<<24>>24,ar[t>>2]=l):0|ar[t>>2],l=0|ar[24+(0|ar[o>>2])>>2],ar[i>>2]=c,ar[r>>2]=ar[i>>2],0|Kb[31&l](o,r,a,255&t,e)||Df(l=A+(0|ar[(0|ar[A>>2])-12>>2])|0,5|ar[l+16>>2])),jf(f),ur=n,0|A}function Kf(A,e,r){e|=0,r|=0;var i,f,n,t,o=0,a=0,c=0,l=0,u=0;return n=ur=(t=ur)+31&-32,ur=ur+16|0,i=12+n|0,f=8+n|0,zf(n,A|=0),0|tr[n>>0]&&(Tf(i,A+(0|ar[(0|ar[A>>2])-12>>2])|0),a=0|un(i,59288),bn(i),c=A+(0|ar[(0|ar[A>>2])-12>>2])|0,l=0|ar[c+24>>2],o=0|Mf(u=-1,0|ar[(o=c+76|0)>>2])?(Tf(i,c),u=0|un(i,59232),u=0|Hb[31&ar[28+(0|ar[u>>2])>>2]](u,32),bn(i),u=u<<24>>24,ar[o>>2]=u):0|ar[o>>2],u=0|ar[28+(0|ar[a>>2])>>2],ar[f>>2]=l,ar[i>>2]=ar[f>>2],0|$b[63&u](a,i,c,255&o,e,r)||Df(u=A+(0|ar[(0|ar[A>>2])-12>>2])|0,5|ar[u+16>>2])),jf(n),ur=t,0|A}function qf(A,e,r){e|=0,r|=0;var i,f;f=ur=(i=ur)+31&-32,ur=ur+16|0,Sf(A|=0),ar[A>>2]=14508,ar[A+32>>2]=e,ru(f,A+4|0),e=0|un(f,61024),bn(f),ar[A+36>>2]=e,ar[A+40>>2]=r,r=1&(0|jb[127&ar[28+(0|ar[e>>2])>>2]](e)),tr[A+44>>0]=r,ur=i}function $f(A,e,r){e|=0,r|=0;var i,f;f=ur=(i=ur)+31&-32,ur=ur+16|0,Of(A|=0),ar[A>>2]=14444,ar[A+32>>2]=e,ru(f,A+4|0),e=0|un(f,61032),bn(f),ar[A+36>>2]=e,ar[A+40>>2]=r,r=1&(0|jb[127&ar[28+(0|ar[e>>2])>>2]](e)),tr[A+44>>0]=r,ur=i}function An(A){mf(A|=0)}function en(A){kf(A|=0)}function rn(A){mf(A|=0)}function fn(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;if(i=ur=(t=ur)+31&-32,ur=ur+32|0,f=16+i|0,k=8+i|0,r=4+i|0,n=(A|=0)+48|0,0|tr[(a=A+52|0)>>0])o=0|ar[n>>2],e&&(k=-1,ar[n>>2]=k,tr[a>>0]=0);else{for(o=1<(0|(o=0|ar[A+44>>2]))?o:1,d=A+32|0,a=0;;){if((0|o)<=(0|a)){s=9;break}if(-1==(0|(c=0|Wi(0|ar[d>>2])))){s=8;break}tr[f+a>>0]=c,a=a+1|0}if(8==(0|s))o=-1;else if(9==(0|s)){do{if(0|tr[A+53>>0])ar[k>>2]=tr[f>>0],s=19;else{b=A+40|0,l=A+36|0,u=k+4|0;A:for(;;){switch(h=0|ar[b>>2],a=0|ar[(c=h)>>2],c=0|ar[c+4>>2],w=0|ar[l>>2],A=f+o|0,0|es[15&ar[16+(0|ar[w>>2])>>2]](w,h,f,A,r,k,u,i)){case 3:s=16;break A;case 2:s=18;break A;case 1:break;default:break A}if(w=0|ar[b>>2],ar[w>>2]=a,ar[w+4>>2]=c,8==(0|o)){s=18;break}if(-1==(0|(a=0|Wi(0|ar[d>>2])))){s=18;break}tr[A>>0]=a,o=o+1|0}if(16==(0|s))ar[k>>2]=tr[f>>0];else if(18==(0|s)){o=-1;break}s=19}}while(0);A:do{if(19==(0|s)){e:do{if(!e){do{if((0|o)<=0)break e;w=0|gf(0|tr[f+(o=o+-1|0)>>0])}while(-1!=(0|uf(w,0|ar[d>>2])));o=-1;break A}w=0|gf(0|ar[k>>2]),ar[n>>2]=w}while(0);o=0|gf(0|ar[k>>2])}}while(0)}}return ur=t,0|o}function nn(A){kf(A|=0)}function tn(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;if(i=ur=(t=ur)+31&-32,ur=ur+32|0,f=16+i|0,k=8+i|0,r=4+i|0,n=(A|=0)+48|0,0|tr[(a=A+52|0)>>0])o=0|ar[n>>2],e&&(k=-1,ar[n>>2]=k,tr[a>>0]=0);else{for(o=1<(0|(o=0|ar[A+44>>2]))?o:1,d=A+32|0,a=0;;){if((0|o)<=(0|a)){s=9;break}if(-1==(0|(c=0|Wi(0|ar[d>>2])))){s=8;break}tr[f+a>>0]=c,a=a+1|0}if(8==(0|s))o=-1;else if(9==(0|s)){do{if(0|tr[A+53>>0])tr[k>>0]=0|tr[f>>0],s=19;else{b=A+40|0,l=A+36|0,u=k+1|0;A:for(;;){switch(h=0|ar[b>>2],a=0|ar[(c=h)>>2],c=0|ar[c+4>>2],w=0|ar[l>>2],A=f+o|0,0|es[15&ar[16+(0|ar[w>>2])>>2]](w,h,f,A,r,k,u,i)){case 3:s=16;break A;case 2:s=18;break A;case 1:break;default:break A}if(w=0|ar[b>>2],ar[w>>2]=a,ar[w+4>>2]=c,8==(0|o)){s=18;break}if(-1==(0|(a=0|Wi(0|ar[d>>2])))){s=18;break}tr[A>>0]=a,o=o+1|0}if(16==(0|s))tr[k>>0]=0|tr[f>>0];else if(18==(0|s)){o=-1;break}s=19}}while(0);A:do{if(19==(0|s)){e:do{if(!e){do{if((0|o)<=0)break e;w=0|hf(0|tr[f+(o=o+-1|0)>>0])}while(-1!=(0|uf(w,0|ar[d>>2])));o=-1;break A}w=0|hf(0|tr[k>>0]),ar[n>>2]=w}while(0);o=0|hf(0|tr[k>>0])}}while(0)}}return ur=t,0|o}function on(A){an(A|=0)}function an(A){0}function cn(A){an()}function ln(A,e){e|=0,ar[(A|=0)>>2]=ar[e>>2]}function un(A,e){return e|=0,A=0|ar[(A|=0)>>2],0|(r=A,i=0|hn(e),i|=0,0|ar[(0|ar[8+(r|=0)>>2])+(i<<2)>>2]);var r,i}function bn(A){lu(0|ar[(A|=0)>>2])}function sn(A,e,r,i,f,n,t,o,a,c){A|=0,e|=0,r|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l,u,b=0,s=0;u=(0|(l=0|ar[(i|=0)>>2]))==(0|r);do{if(u){if(!(b=(0|tr[c+24>>0])==A<<24>>24)&&(0|tr[c+25>>0])!=A<<24>>24){s=5;break}ar[i>>2]=r+1,tr[r>>0]=b?43:45,b=ar[f>>2]=0}else s=5}while(0);A:do{if(5==(0|s)){if(s=0|tr[t+11>>0],A<<24>>24==n<<24>>24&&0!=(0|(s<<24>>24<0?0|ar[t+4>>2]:255&s))){if(160<=((b=0|ar[a>>2])-o|0)){b=0;break}i=0|ar[f>>2],ar[a>>2]=b+4,ar[b>>2]=i,b=ar[f>>2]=0;break}for(t=c+26|0,n=0;;){if(b=c+n|0,26==(0|n)){b=t;break}if((0|tr[b>>0])==A<<24>>24)break;n=n+1|0}if(23<(0|(b=b-c|0)))b=-1;else{switch(n=53648+b|0,0|e){case 10:case 8:if((0|e)<=(0|b)){b=-1;break A}break;case 16:if(22<=(0|b)){if(u){b=-1;break A}if(3<=(l-r|0)){b=-1;break A}if(48!=(0|tr[l-1>>0])){b=-1;break A}b=(ar[f>>2]=0)|tr[n>>0],ar[i>>2]=1+l,tr[l>>0]=b,b=0;break A}}b=0|tr[n>>0],ar[i>>2]=1+l,tr[l>>0]=b,ar[f>>2]=1+(0|ar[f>>2]),b=0}}}while(0);return 0|b}function dn(){var A=0;return 0==(0|tr[56624])&&0|ib(56624)&&(A=0|function(A,e,r){A|=0,e|=0,r|=0;var i,f,n=0,t=0,o=0,a=0;i=ur=(f=ur)+31&-32,ur=ur+32|0;A:do{if(0|nf(r))for(n=0;1<<n&A|0&&(a=0|ff(n,e),ar[r+(n<<2)>>2]=a),6!=(0|(n=n+1|0)););else{for(a=0==(0|r),o=t=0;t=(0!=(0|(n=a|(n=0!=(1<<o&A|0))?0|ff(o,n?e:79659):0|ar[r+(o<<2)>>2]))&1)+t|0,ar[i+(o<<2)>>2]=n,6!=(0|(o=o+1|0)););switch(0|t){case 0:r=58128;break A;case 1:if(10100!=(0|ar[i>>2]))break;r=10148;break A}}}while(0);return ur=f,0|r}(2147483647,53684,0),ar[14810]=A),0|ar[14810]}function kn(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n;return n=ur=(f=ur)+31&-32,ur=ur+16|0,ar[n>>2]=i,i=0|rf(e),e=0|Hi(A,r,n),0|i&&rf(i),ur=f,0|e}function hn(A){A|=0;var e,r,i,f,n=0;return n=ur=(f=ur)+31&-32,ur=ur+48|0,e=n+32|0,r=n+24|0,ar[(n=(i=n)+16|0)>>2]=442,ar[n+4>>2]=0,ar[e>>2]=ar[n>>2],ar[4+e>>2]=ar[n+4>>2],function(A,e,r){A|=0,r|=0;var i;i=0|ar[(e=e|0)>>2],e=0|ar[e+4>>2],ar[A>>2]=r,ar[A+4>>2]=i,ar[A+8>>2]=e}(i,e,A),-1!=(0|ar[A>>2])&&(ar[e>>2]=i,ar[r>>2]=e,function(A,e,r){A|=0,e|=0,r|=0,gb();for(;1==(0|ar[A>>2]);)hA(61100,61072);0|ar[A>>2]?Zb():(ar[A>>2]=1,Zb(),is[511&r](e),gb(),ar[A>>2]=-1,Zb(),mb())}(A,r,443)),ur=f,(0|ar[A+4>>2])-1|0}function wn(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n,t;t=ur=(n=ur)+31&-32,ur=ur+16|0,Tf(t,e|=0),e=0|un(t,59232),Pb[7&ar[32+(0|ar[e>>2])>>2]](e,53648,53680,r),r=0|un(t,59248),e=0|jb[127&ar[12+(0|ar[r>>2])>>2]](r),tr[i>>0]=e,i=0|jb[127&ar[16+(0|ar[r>>2])>>2]](r),tr[f>>0]=i,fs[63&ar[20+(0|ar[r>>2])>>2]](A,r),bn(t),ur=n}function vn(A,e,r,i,f,n,t,o,a,c,l,u){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,c|=0,l|=0,u|=0;var b,s=0,d=0;b=a|=0;A:do{if(A<<24>>24==n<<24>>24)a=0|tr[e>>0]?(r=(tr[e>>0]=0)|ar[f>>2],ar[f>>2]=r+1,tr[r>>0]=46,0!=(0|((f=0|tr[o+11>>0])<<24>>24<0?0|ar[o+4>>2]:255&f))&&((s=0|ar[c>>2])-b|0)<160&&(a=0|ar[l>>2],ar[c>>2]=s+4,ar[s>>2]=a),0):-1;else{if(A<<24>>24==t<<24>>24&&0|((t=0|tr[o+11>>0])<<24>>24<0?0|ar[o+4>>2]:255&t)){if(!(0|tr[e>>0])){a=-1;break}if(160<=((a=0|ar[c>>2])-b|0)){a=0;break}f=0|ar[l>>2],ar[c>>2]=a+4,ar[a>>2]=f,a=ar[l>>2]=0;break}for(n=u+32|0,s=0;;){if(a=u+s|0,32==(0|s)){a=n;break}if((0|tr[a>>0])==A<<24>>24)break;s=s+1|0}if(31<(0|(s=a-u|0)))a=-1;else switch(n=0|tr[53648+s>>0],0|s){case 24:case 25:if((0|(a=0|ar[f>>2]))!=(0|i)&&(95&tr[a+-1>>0])!=(127&tr[r>>0])){a=-1;break A}ar[f>>2]=a+1,tr[a>>0]=n,a=0;break A;case 23:case 22:tr[r>>0]=80,a=0|ar[f>>2],ar[f>>2]=a+1,tr[a>>0]=n,a=0;break A;default:if((0|(a=95&n))==(0|tr[r>>0])&&(tr[r>>0]=128|a,0|tr[e>>0])&&(tr[e>>0]=0)|((r=0|tr[o+11>>0])<<24>>24<0?0|ar[o+4>>2]:255&r)&&((d=0|ar[c>>2])-b|0)<160&&(r=0|ar[l>>2],ar[c>>2]=d+4,ar[d>>2]=r),c=0|ar[f>>2],ar[f>>2]=c+1,tr[c>>0]=n,21<(0|s)){a=0;break A}ar[l>>2]=1+(0|ar[l>>2]),a=0;break A}}}while(0);return 0|a}function mn(A,e,r){r|=0;var i,f,n=0,t=0,o=0;return i=ur=(f=ur)+31&-32,ur=ur+16|0,(0|(A|=0))==(0|(e|=0))?(ar[r>>2]=4,n=0):(t=0|ar[(t=10364)>>2],ar[10364>>2]=0,n=+$i(A,i,dn()),(A=0|ar[(A=10364)>>2])||(ar[10364>>2]=t),(0|ar[i>>2])==(0|e)?34==(0|A)&&(o=6):(n=0,o=6),6==(0|o)&&(ar[r>>2]=4)),ur=f,+n}function gn(A,e,r,i){e|=0,r|=0,i|=0;var f,n=0,t=0,o=0,a=0,c=0,l=0;f=(a=0|tr[(A|=0)+11>>0])<<24>>24<0,n=0|ar[(o=A+4|0)>>2],a&=255;do{if(0|(f?n:a)){if((0|e)!=(0|r)){for(n=r,t=e;!((n=n+-4|0)>>>0<=t>>>0);)l=0|ar[t>>2],ar[t>>2]=ar[n>>2],ar[n>>2]=l,t=t+4|0;n=0|ar[o>>2]}for(r=r+-4|0,A=(l=f?0|ar[A>>2]:A)+(f?n:a)|0,n=l;o=0<(t=0|tr[n>>0])<<24>>24&t<<24>>24!=127,!(r>>>0<=e>>>0);){if(o&&(t<<24>>24|0)!=(0|ar[e>>2])){c=10;break}e=e+4|0,n=1<(A-n|0)?n+1|0:n}if(10==(0|c)){ar[i>>2]=4;break}o&&((0|ar[r>>2])-1|0)>>>0>=t<<24>>24>>>0&&(ar[i>>2]=4)}}while(0)}function Zn(A,e,r){r|=0;var i,f,n=0,t=0,o=0;return i=ur=(f=ur)+31&-32,ur=ur+16|0,(0|(A|=0))==(0|(e|=0))?(ar[r>>2]=4,n=0):(t=0|ar[(t=10364)>>2],ar[10364>>2]=0,n=+qi(A,i,dn()),(A=0|ar[(A=10364)>>2])||(ar[10364>>2]=t),(0|ar[i>>2])==(0|e)?34==(0|A)&&(o=6):(n=0,o=6),6==(0|o)&&(ar[r>>2]=4)),ur=f,+n}function pn(A,e,r){r|=0;var i,f,n=0,t=0,o=0;return i=ur=(f=ur)+31&-32,ur=ur+16|0,(0|(A|=0))==(0|(e|=0))?(ar[r>>2]=4,n=0):(t=0|ar[(t=10364)>>2],ar[10364>>2]=0,n=+Ki(A,i,dn()),(A=0|ar[(A=10364)>>2])||(ar[10364>>2]=t),(0|ar[i>>2])==(0|e)?34==(0|A)&&(o=6):(n=0,o=6),6==(0|o)&&(ar[r>>2]=4)),ur=f,+n}function yn(A){switch(74&ar[(A|=0)+4>>2]){case 64:A=8;break;case 8:A=16;break;case 0:A=0;break;default:A=10}return 0|A}function Bn(A,e,r,i){A|=0,r|=0,i|=0;var f,n;n=ur=(f=ur)+31&-32,ur=ur+16|0,Tf(n,e|=0),e=0|un(n,59232),Pb[7&ar[32+(0|ar[e>>2])>>2]](e,53648,53674,r),r=0|un(n,59248),e=0|jb[127&ar[16+(0|ar[r>>2])>>2]](r),tr[i>>0]=e,fs[63&ar[20+(0|ar[r>>2])>>2]](A,r),bn(n),ur=f}function En(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t=0,o=0,a=0;f=ur=(n=ur)+31&-32,ur=ur+16|0;do{if((0|A)==(0|e))ar[r>>2]=4,A=i=0;else{if(45==(0|tr[A>>0])){ar[r>>2]=4,A=i=0;break}o=0|ar[(o=10364)>>2],A=(ar[(t=10364)>>2]=0)|il(A,f,i,dn()),i=D,(t=0|ar[(t=10364)>>2])||(ar[10364>>2]=o),(0|ar[f>>2])==(0|e)?34==(0|t)&&(i=A=-1,a=8):(i=A=0,a=8),8==(0|a)&&(ar[r>>2]=4)}}while(0);return D=i,ur=n,0|A}function Xn(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t=0,o=0;f=ur=(n=ur)+31&-32,ur=ur+16|0;do{if((0|A)==(0|e))ar[r>>2]=4,A=0;else{if(45==(0|tr[A>>0])){ar[r>>2]=4,A=0;break}o=0|ar[(o=10364)>>2],A=(ar[(t=10364)>>2]=0)|il(A,f,i,dn()),i=D,(t=0|ar[(t=10364)>>2])||(ar[10364>>2]=o);do{if((0|ar[f>>2])==(0|e)){if(0<i>>>0|0==(0|i)&4294967295<A>>>0|34==(0|t)){ar[r>>2]=4,A=-1;break}break}ar[r>>2]=4,A=0}while(0)}}while(0);return ur=n,0|A}function Wn(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t=0,o=0;f=ur=(n=ur)+31&-32,ur=ur+16|0;do{if((0|A)==(0|e))ar[r>>2]=4,A=0;else{if(45==(0|tr[A>>0])){ar[r>>2]=4,A=0;break}o=0|ar[(o=10364)>>2],A=(ar[(t=10364)>>2]=0)|il(A,f,i,dn()),i=D,(t=0|ar[(t=10364)>>2])||(ar[10364>>2]=o);do{if((0|ar[f>>2])==(0|e)){if(0<i>>>0|0==(0|i)&4294967295<A>>>0|34==(0|t)){ar[r>>2]=4,A=-1;break}break}ar[r>>2]=4,A=0}while(0)}}while(0);return ur=n,0|A}function In(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t=0,o=0;f=ur=(n=ur)+31&-32,ur=ur+16|0;do{if((0|A)==(0|e))ar[r>>2]=4,A=0;else{if(45==(0|tr[A>>0])){ar[r>>2]=4,A=0;break}o=0|ar[(o=10364)>>2],A=(ar[(t=10364)>>2]=0)|il(A,f,i,dn()),i=D,(t=0|ar[(t=10364)>>2])||(ar[10364>>2]=o);do{if((0|ar[f>>2])==(0|e)){if(0<i>>>0|0==(0|i)&65535<A>>>0|34==(0|t)){ar[r>>2]=4,A=-1;break}A&=65535;break}ar[r>>2]=4,A=0}while(0)}}while(0);return ur=n,0|A}function Cn(A,e,r,i){r|=0,i|=0;var f,n,t=0,o=0;return f=ur=(n=ur)+31&-32,ur=ur+16|0,(0|(A|=0))==(0|(e|=0))?(ar[r>>2]=4,A=i=0):(o=0|ar[(o=10364)>>2],A=(ar[(t=10364)>>2]=0)|pi(A,f,i,dn()),i=D,(t=0|ar[(t=10364)>>2])||(ar[10364>>2]=o),(0|ar[f>>2])==(0|e)?34==(0|t)&&(ar[r>>2]=4,A=(i=0<(0|i)|0==(0|i)&0<A>>>0)?-1:0,i=i?2147483647:-2147483648):(ar[r>>2]=4,i=A=0)),D=i,ur=n,0|A}function Gn(A,e,r,i){r|=0,i|=0;var f,n,t=0,o=0;if(f=ur=(n=ur)+31&-32,ur=ur+16|0,(0|(A|=0))==(0|(e|=0)))ar[r>>2]=4,A=0;else{o=0|ar[(o=10364)>>2],A=(ar[(t=10364)>>2]=0)|pi(A,f,i,dn()),i=D,(t=0|ar[(t=10364)>>2])||(ar[10364>>2]=o);A:do{if((0|ar[f>>2])==(0|e)){do{if(34!=(0|t)){if((0|i)<-1|-1==(0|i)&A>>>0<2147483648){ar[r>>2]=4;break}if(0<(0|i)|0==(0|i)&2147483647<A>>>0){ar[r>>2]=4,A=2147483647;break A}break A}if(ar[r>>2]=4,0<(0|i)|0==(0|i)&0<A>>>0){A=2147483647;break A}}while(0);A=-2147483648}else ar[r>>2]=4,A=0}while(0)}return ur=n,0|A}function Vn(A,e,r,i,f,n,t){A|=0,e|=0,f|=0,n|=0,t|=0;var o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;for(c=ur=(o=ur)+31&-32,ur=ur+112|0,100<(l=((i|=0)-(r|=0)|0)/12|0)>>>0?(c=0|yc(l))?g=a=c:gu():(a=c,g=0),b=r,s=a,c=0;(0|b)!=(0|i);)(u=0|tr[b+11>>0])<<24>>24<0?u=0|ar[b+4>>2]:u&=255,u?tr[s>>0]=1:(tr[s>>0]=2,l=l+-1|0,c=c+1|0),b=b+12|0,s=s+1|0;m=0,w=c;A:for(;;){c=0|ar[A>>2];do{if(c){if(0|Mf(c=(0|(u=0|ar[c+12>>2]))==(0|ar[c+16>>2])?0|jb[127&ar[36+(0|ar[c>>2])>>2]](c):0|hf(0|tr[u>>0]),-1)){ar[A>>2]=0,s=1;break}s=0==(0|ar[A>>2]);break}s=1}while(0);if(c=(u=0|ar[e>>2])?0|Mf(c=(0|(c=0|ar[u+12>>2]))==(0|ar[u+16>>2])?0|jb[127&ar[36+(0|ar[u>>2])>>2]](u):0|hf(0|tr[c>>0]),-1)?(u=ar[e>>2]=0,1):0:(u=0,1),b=0|ar[A>>2],!(0!=(0|l)&(s^c)))break;for(c=(0|(c=0|ar[b+12>>2]))==(0|ar[b+16>>2])?0|jb[127&ar[36+(0|ar[b>>2])>>2]](b):0|hf(0|tr[c>>0]),c&=255,t||(c=0|Hb[31&ar[12+(0|ar[f>>2])>>2]](f,c)),v=m+1|0,k=r,d=0,h=a;(0|k)!=(0|i);){do{if(1==(0|tr[h>>0])){if(u=(0|tr[(b=k+11|0)>>0])<0?0|ar[k>>2]:k,u=0|tr[u+m>>0],t||(u=0|Hb[31&ar[12+(0|ar[f>>2])>>2]](f,u)),s=l+-1|0,c<<24>>24!=u<<24>>24){tr[h>>0]=0,u=d,b=w,l=s;break}(u=0|tr[b>>0])<<24>>24<0?u=0|ar[k+4>>2]:u&=255,(0|u)==(0|v)?(tr[h>>0]=2,b=w+(u=1)|0,l=s):(u=1,b=w)}else u=d,b=w}while(0);k=k+12|0,d=u,h=h+1|0,w=b}if(d)if(c=0|ar[A>>2],(0|(b=0|ar[(u=c+12|0)>>2]))==(0|ar[c+16>>2])?jb[127&ar[40+(0|ar[c>>2])>>2]](c):(ar[u>>2]=b+1,hf(0|tr[b>>0])),1<(w+l|0)>>>0)for(b=r,s=a,c=w;;){if((0|b)==(0|i)){m=v,w=c;continue A}2==(0|tr[s>>0])&&((u=0|tr[b+11>>0])<<24>>24<0?u=0|ar[b+4>>2]:u&=255,(0|u)!=(0|v)&&(c=c+-1|(tr[s>>0]=0))),b=b+12|0,s=s+1|0}else m=v;else m=v}do{if(b){if(0|Mf(c=(0|(c=0|ar[b+12>>2]))==(0|ar[b+16>>2])?0|jb[127&ar[36+(0|ar[b>>2])>>2]](b):0|hf(0|tr[c>>0]),-1)){ar[A>>2]=0,l=1;break}l=0==(0|ar[A>>2]);break}l=1}while(0);do{if(u){if(0|Mf(c=(0|(c=0|ar[u+12>>2]))==(0|ar[u+16>>2])?0|jb[127&ar[36+(0|ar[u>>2])>>2]](u):0|hf(0|tr[c>>0]),-1)){ar[e>>2]=0,Z=41;break}if(l)break;Z=77;break}Z=41}while(0);for(41==(0|Z)&&l&&(Z=77),77==(0|Z)&&(ar[n>>2]=2|ar[n>>2]);;){if((0|r)==(0|i)){Z=81;break}if(2==(0|tr[a>>0]))break;r=r+12|0,a=a+1|0}return 81==(0|Z)&&(ar[n>>2]=4|ar[n>>2],r=i),Bc(g),ur=o,0|r}function Fn(A,e,r,i,f,n,t,o,a,c){A|=0,e|=0,r|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l,u,b=0,s=0;u=(0|(l=0|ar[(i|=0)>>2]))==(0|r);do{if(u){if(!(b=(0|ar[c+96>>2])==(0|A))&&(0|ar[c+100>>2])!=(0|A)){s=5;break}ar[i>>2]=r+1,tr[r>>0]=b?43:45,b=ar[f>>2]=0}else s=5}while(0);A:do{if(5==(0|s)){if(s=0|tr[t+11>>0],(0|A)==(0|n)&&0!=(0|(s<<24>>24<0?0|ar[t+4>>2]:255&s))){if(160<=((b=0|ar[a>>2])-o|0)){b=0;break}i=0|ar[f>>2],ar[a>>2]=b+4,ar[b>>2]=i,b=ar[f>>2]=0;break}for(t=c+104|0,n=0;;){if(b=c+(n<<2)|0,26==(0|n)){b=t;break}if((0|ar[b>>2])==(0|A))break;n=n+1|0}if(n=(b=b-c|0)>>2,92<(0|b))b=-1;else{switch(t=53648+n|0,0|e){case 10:case 8:if((0|e)<=(0|n)){b=-1;break A}break;case 16:if(88<=(0|b)){if(u){b=-1;break A}if(3<=(l-r|0)){b=-1;break A}if(48!=(0|tr[l-1>>0])){b=-1;break A}b=(ar[f>>2]=0)|tr[t>>0],ar[i>>2]=1+l,tr[l>>0]=b,b=0;break A}}b=0|tr[t>>0],ar[i>>2]=1+l,tr[l>>0]=b,ar[f>>2]=1+(0|ar[f>>2]),b=0}}}while(0);return 0|b}function Rn(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n,t;t=ur=(n=ur)+31&-32,ur=ur+16|0,Tf(t,e|=0),e=0|un(t,59264),Pb[7&ar[48+(0|ar[e>>2])>>2]](e,53648,53680,r),r=0|un(t,59272),e=0|jb[127&ar[12+(0|ar[r>>2])>>2]](r),ar[i>>2]=e,i=0|jb[127&ar[16+(0|ar[r>>2])>>2]](r),ar[f>>2]=i,fs[63&ar[20+(0|ar[r>>2])>>2]](A,r),bn(t),ur=n}function Nn(A,e,r,i,f,n,t,o,a,c,l,u){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,c|=0,l|=0,u|=0;var b,s=0,d=0;b=a|=0;A:do{if((0|A)==(0|n))a=0|tr[e>>0]?(r=(tr[e>>0]=0)|ar[f>>2],ar[f>>2]=r+1,tr[r>>0]=46,0!=(0|((f=0|tr[o+11>>0])<<24>>24<0?0|ar[o+4>>2]:255&f))&&((s=0|ar[c>>2])-b|0)<160&&(a=0|ar[l>>2],ar[c>>2]=s+4,ar[s>>2]=a),0):-1;else{if((0|A)==(0|t)&&0|((t=0|tr[o+11>>0])<<24>>24<0?0|ar[o+4>>2]:255&t)){if(!(0|tr[e>>0])){a=-1;break}if(160<=((a=0|ar[c>>2])-b|0)){a=0;break}f=0|ar[l>>2],ar[c>>2]=a+4,ar[a>>2]=f,a=ar[l>>2]=0;break}for(n=u+128|0,s=0;;){if(a=u+(s<<2)|0,32==(0|s)){a=n;break}if((0|ar[a>>2])==(0|A))break;s=s+1|0}if(a=(s=a-u|0)>>2,(0|s)<=124){switch(n=0|tr[53648+a>>0],0|a){case 24:case 25:if((0|(a=0|ar[f>>2]))!=(0|i)&&(95&tr[a+-1>>0])!=(127&tr[r>>0])){a=-1;break A}ar[f>>2]=a+1,tr[a>>0]=n,a=0;break A;case 23:case 22:tr[r>>0]=80;break;default:(0|(a=95&n))==(0|tr[r>>0])&&(tr[r>>0]=128|a,0|tr[e>>0])&&(tr[e>>0]=0)|((r=0|tr[o+11>>0])<<24>>24<0?0|ar[o+4>>2]:255&r)&&((d=0|ar[c>>2])-b|0)<160&&(r=0|ar[l>>2],ar[c>>2]=d+4,ar[d>>2]=r)}c=0|ar[f>>2],ar[f>>2]=c+1,tr[c>>0]=n,a=(84<(0|s)||(ar[l>>2]=1+(0|ar[l>>2])),0)}else a=-1}}while(0);return 0|a}function _n(A,e,r,i){A|=0,r|=0,i|=0;var f,n;n=ur=(f=ur)+31&-32,ur=ur+16|0,Tf(n,e|=0),e=0|un(n,59264),Pb[7&ar[48+(0|ar[e>>2])>>2]](e,53648,53674,r),r=0|un(n,59272),e=0|jb[127&ar[16+(0|ar[r>>2])>>2]](r),ar[i>>2]=e,fs[63&ar[20+(0|ar[r>>2])>>2]](A,r),bn(n),ur=f}function Yn(A){gb(A|=0)}function Qn(A){Zb(A|=0)}function Dn(A){ar[(A|=0)>>2]=0,pA(A+4|0,0),dA(A+32|0,0)}function Jn(A){ZA((A|=0)+4|0),sA(A+32|0)}function Mn(A,e){e|=0;var r,i=0;if(!((0|ar[(A|=0)>>2])>=(0|e))){if(gb(r=A+4|0),(0|ar[A>>2])<(0|e))for(i=A+32|0;hA(0|i,0|r),(0|ar[A>>2])<(0|e););Zb()}}function Tn(A,e){e|=0;var r;gb(r=(A|=0)+4|0),(0|ar[A>>2])>=(0|e)||(ar[A>>2]=e,mb()),Zb()}function Un(A,e){e|=0;var r;gb(r=(A|=0)+4|0),ar[A>>2]=(0|ar[A>>2])+e,mb(),Zb()}function Sn(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0;gb(n=(A|=0)+420|0),0|tr[A>>0]||(t=0|ar[(i=A+8|0)>>2],c=(0|ar[A+12>>2])-t|0,a=0|ar[(o=A+20|0)>>2],(0|(0==(0|c)?0:(c<<8)-1|0))==((r=0|ar[(f=A+24|0)>>2])+a|0)?(function(A){var e=0,r=0,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(ur=(s=ur)+32|0,c=s+4|0,a=s,1023<(r=0|ar[(e=16+(A|=0)|0)>>2])>>>0){ar[e>>2]=r+-1024,c=0|ar[(l=A+4|0)>>2],b=0|ar[c>>2],c=c+4|0,ar[l>>2]=c,o=0|ar[(u=A+8|0)>>2],t=0|ar[(a=A+12|0)>>2],e=t,n=o;do{if((0|o)==(0|t)){if(r=0|ar[A>>2],(i=r)>>>0<c>>>0){f=(e=c)+((i=(1+(e-i>>2)|0)/-2|0)<<2)|0,e=(r=(e=n-e|0)>>2)?(wb(0|f,0|c,0|e),0|ar[l>>2]):c,A=f+(r<<2)|0,ar[u>>2]=A,ar[l>>2]=e+(i<<2),e=A;break}if(1073741823<(e=0==(0|(e=e-i>>1))?1:e)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),f=0|hu(e<<2),t=i=(n=f)+(e>>>2<<2)|0,f=f+(e<<2)|0,(0|c)==(0|o))e=t;else{for(e=t,r=c;ar[i>>2]=ar[r>>2],e=i=e+4|0,(0|(r=r+4|0))!=(0|o););r=0|ar[A>>2]}ar[A>>2]=n,ar[l>>2]=t,ar[u>>2]=e,ar[a>>2]=f,r&&(vu(r),e=0|ar[u>>2])}else e=o}while(0);return ar[e>>2]=b,ar[u>>2]=4+(0|ar[u>>2]),ur=s}if(e=0|ar[(b=A+8|0)>>2],f=e-(0|ar[(u=A+4|0)>>2])|0,r=0|ar[(l=A+12|0)>>2],i=r-(0|ar[A>>2])|0,i>>>0<=f>>>0){for(e=0==(0|(e=i>>1))?1:e,ar[c+12>>2]=0,ar[c+16>>2]=A+12,1073741823<e>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),i=0|hu(e<<2),ar[c>>2]=i,t=i+(f>>2<<2)|0,ar[(o=c+8|0)>>2]=t,ar[(n=c+4|0)>>2]=t,ar[(t=c+12|0)>>2]=i+(e<<2),f=0|hu(4096),ar[a>>2]=f,function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;r=0|ar[(b=8+(A|=0)|0)>>2],u=0|ar[(i=A+12|0)>>2],t=u,a=r;do{if((0|r)==(0|u)){if(l=0|ar[(u=A+4|0)>>2],n=0|ar[A>>2],(f=n)>>>0<l>>>0){o=(n=l)+((t=(1+(n-f>>2)|0)/-2|0)<<2)|0,f=(n=(f=a-n|0)>>2)?(wb(0|o,0|l,0|f),0|ar[u>>2]):l,l=o+(n<<2)|0,ar[b>>2]=l,ar[u>>2]=f+(t<<2),f=l;break}if(1073741823<(f=0==(0|(f=t-f>>1))?1:f)>>>0&&(Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)),o=0|hu(f<<2),c=t=(a=o)+(f>>>2<<2)|0,o=o+(f<<2)|0,(0|l)==(0|r))f=c;else{for(f=c,n=l;ar[t>>2]=ar[n>>2],f=t=f+4|0,(0|(n=n+4|0))!=(0|r););n=0|ar[A>>2]}ar[A>>2]=a,ar[u>>2]=c,ar[b>>2]=f,ar[i>>2]=o,n&&(vu(n),f=0|ar[b>>2])}else f=r}while(0);ar[f>>2]=ar[e>>2],ar[b>>2]=4+(0|ar[b>>2])}(c,a),f=0|ar[b>>2];e=0|ar[u>>2],(0|f)!=(0|e);)On(c,a=f+-4|0),f=a;return r=e,i=0|ar[A>>2],ar[A>>2]=ar[c>>2],ar[c>>2]=i,ar[u>>2]=ar[n>>2],ar[n>>2]=r,e=0|ar[b>>2],ar[b>>2]=ar[o>>2],ar[o>>2]=e,A=0|ar[l>>2],ar[l>>2]=ar[t>>2],ar[t>>2]=A,(0|e)!=(0|f)&&(ar[o>>2]=e+(~((e+-4-r|0)>>>2)<<2)),0|i&&vu(i),ur=s}if((0|r)!=(0|e))return b=0|hu(4096),ar[c>>2]=b,function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;r=0|ar[(b=8+(A|=0)|0)>>2],u=0|ar[(i=A+12|0)>>2],t=u,a=r;do{if((0|r)==(0|u)){if(l=0|ar[(u=A+4|0)>>2],n=0|ar[A>>2],(f=n)>>>0<l>>>0){o=(n=l)+((t=(1+(n-f>>2)|0)/-2|0)<<2)|0,f=(n=(f=a-n|0)>>2)?(wb(0|o,0|l,0|f),0|ar[u>>2]):l,l=o+(n<<2)|0,ar[b>>2]=l,ar[u>>2]=f+(t<<2),f=l;break}if(1073741823<(f=0==(0|(f=t-f>>1))?1:f)>>>0&&(Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)),o=0|hu(f<<2),c=t=(a=o)+(f>>>2<<2)|0,o=o+(f<<2)|0,(0|l)==(0|r))f=c;else{for(f=c,n=l;ar[t>>2]=ar[n>>2],f=t=f+4|0,(0|(n=n+4|0))!=(0|r););n=0|ar[A>>2]}ar[A>>2]=a,ar[u>>2]=c,ar[b>>2]=f,ar[i>>2]=o,n&&(vu(n),f=0|ar[b>>2])}else f=r}while(0);ar[f>>2]=ar[e>>2],ar[b>>2]=4+(0|ar[b>>2])}(A,c),ur=s;a=0|hu(4096),ar[c>>2]=a,function(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;r=0|ar[(s=4+(A|=0)|0)>>2],b=0|ar[A>>2],n=b;do{if((0|r)==(0|b)){if(f=0|ar[(b=A+8|0)>>2],l=0|ar[(u=A+12|0)>>2],f>>>0<(i=l)>>>0){t=(i=(n=f)+((o=(1+(i-n>>2)|0)/2|0)<<2)|0)+(0-(u=(n=n-r|0)>>2)<<2)|0,u&&(wb(0|t,0|r,0|n),i=t,f=0|ar[b>>2]),ar[s>>2]=i,ar[b>>2]=f+(o<<2);break}if(1073741823<(n=0==(0|(n=i-n>>1))?1:n)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),a=0|hu(n<<2),l=i=(c=a)+((n+3|0)>>>2<<2)|0,a=a+(n<<2)|0,(0|r)==(0|f))n=l,f=r;else{for(o=i,n=l,t=r;ar[o>>2]=ar[t>>2],n=o=n+4|0,(0|(t=t+4|0))!=(0|f););f=0|ar[A>>2]}ar[A>>2]=c,ar[s>>2]=l,ar[b>>2]=n,ar[u>>2]=a,f&&(vu(f),i=0|ar[s>>2])}else i=r}while(0);ar[i+-4>>2]=ar[e>>2],ar[s>>2]=(0|ar[s>>2])-4}(A,c),a=0|ar[u>>2],c=0|ar[a>>2],a=a+4|0,ar[u>>2]=a,o=0|ar[b>>2],t=0|ar[l>>2],e=t,n=o;do{if((0|o)==(0|t)){if(r=0|ar[A>>2],(i=r)>>>0<a>>>0){f=(e=a)+((i=(1+(e-i>>2)|0)/-2|0)<<2)|0,e=(r=(e=n-e|0)>>2)?(wb(0|f,0|a,0|e),0|ar[u>>2]):a,A=f+(r<<2)|0,ar[b>>2]=A,ar[u>>2]=e+(i<<2),e=A;break}if(1073741823<(e=0==(0|(e=e-i>>1))?1:e)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),f=0|hu(e<<2),t=i=(n=f)+(e>>>2<<2)|0,f=f+(e<<2)|0,(0|a)==(0|o))e=t;else{for(e=t,r=a;ar[i>>2]=ar[r>>2],e=i=e+4|0,(0|(r=r+4|0))!=(0|o););r=0|ar[A>>2]}ar[A>>2]=n,ar[u>>2]=t,ar[b>>2]=e,ar[l>>2]=f,r&&(vu(r),e=0|ar[b>>2])}else e=o}while(0);ar[e>>2]=c,ar[b>>2]=4+(0|ar[b>>2]),ur=s}(A+4|0),a=0|ar[o>>2],o=0|ar[f>>2],t=0|ar[i>>2]):o=r,ar[(0|ar[t+((c=o+a|0)>>>10<<2)>>2])+((1023&c)<<2)>>2]=e,ar[f>>2]=o+1,kA(A+448|0)),Zb()}function On(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;r=0|ar[(s=(A|=0)+4|0)>>2],n=b=0|ar[A>>2];do{if((0|r)==(0|b)){if((f=0|ar[(b=A+8|0)>>2])>>>0<(i=l=0|ar[(u=A+12|0)>>2])>>>0){t=(i=(n=f)+((o=(1+(i-n>>2)|0)/2|0)<<2)|0)+(0-(u=(n=n-r|0)>>2)<<2)|0,u&&(wb(0|t,0|r,0|n),i=t,f=0|ar[b>>2]),ar[s>>2]=i,ar[b>>2]=f+(o<<2);break}if(1073741823<(n=0==(0|(n=i-n>>1))?1:n)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),l=i=(c=a=0|hu(n<<2))+((n+3|0)>>>2<<2)|0,a=a+(n<<2)|0,(0|r)==(0|f))n=l,f=r;else{for(o=i,n=l,t=r;ar[o>>2]=ar[t>>2],n=o=n+4|0,(0|(t=t+4|0))!=(0|f););f=0|ar[A>>2]}ar[A>>2]=c,ar[s>>2]=l,ar[b>>2]=n,ar[u>>2]=a,f&&(vu(f),i=0|ar[s>>2])}else i=r}while(0);ar[i+-4>>2]=ar[e>>2],ar[s>>2]=(0|ar[s>>2])-4}function zn(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0;u=5932+(o=0|ar[(a=(A|=0)+18596|0)>>2])|0,t=0|ar[(b=A+18600|0)>>2],n=(h=-1<<ar[10092+o>>2])&i,h&=f,r=A+18536|0,(0|n)==(0|ar[(e=A+18532|0)>>2])&&(0|h)==(0|ar[r>>2])||(ar[A+18540>>2]=ar[A+18528>>2],ar[e>>2]=n,ar[r>>2]=h),k=5804+o|0,l=n?0:0==((1<<ar[k>>2])-1&h|0),e=0|ar[800+t>>2],r=0|ar[5820+o>>2],c=0|ar[5812+o>>2],r=(0|br(c,(0|e)%(0|r)|0))==(0|n)?(0|br((0|e)/(0|r)|0,c))==(0|h):0,e=0!=(0|tr[5966+o>>0])&&0==((1<<(s=0|ar[k>>2]))-1&(n|h)|0)?0|Fa(u,n>>s,h>>s):0;do{if(r|e)d=14;else{if(l&&0|tr[5965+o>>0]){d=14;break}e=A+18540|0}}while(0);14==(0|d)&&(e=792+(0|ar[b>>2])|0),u=0|ar[e>>2],e=n-1|0;do{if(0|da(0|ar[a>>2],n,h,e,h)&&(d=0|ar[5864+o>>2],s=(0|br(h>>d,0|ar[5852+o>>2]))+(e>>d)|0,(ar[(0|ar[10320+o>>2])+(s<<2)>>2]>>((0|ar[k>>2])-d<<1)|0)==(0|ar[A+4>>2]))){if(l=0|ar[a>>2],e>>=r=0|ar[l+10368>>2],r=h>>r,(0|e)<=-1&&sr(48482,48519,118,48539),(0|(c=0|ar[l+10372>>2]))<=(0|e)&&sr(48482,48519,118,48539),(0|r)<=-1&&sr(48543,48519,119,48539),(0|r)<(0|ar[l+10376>>2])){w=(0|ar[l+10360>>2])+(3*((0|br(c,r))+e|0)|0)+2|0,w=0|tr[w>>0];break}sr(48543,48519,119,48539)}else w=u}while(0);e=h+-1|0;do{if(0|da(0|ar[a>>2],n,h,n,e)&&(h=0|ar[5864+o>>2],d=(0|br(e>>h,0|ar[5852+o>>2]))+(n>>h)|0,(ar[(0|ar[10320+o>>2])+(d<<2)>>2]>>((0|ar[k>>2])-h<<1)|0)==(0|ar[A+4>>2]))){if(l=0|ar[a>>2],e>>=h=0|ar[l+10368>>2],(0|(c=n>>h))<=-1&&sr(48482,48519,118,48539),(0|(r=0|ar[l+10372>>2]))<=(0|c)&&sr(48482,48519,118,48539),(0|e)<=-1&&sr(48543,48519,119,48539),(0|e)<(0|ar[l+10376>>2])){v=(0|ar[l+10360>>2])+(3*((0|br(r,e))+c|0)|0)+2|0,v=0|tr[v>>0];break}sr(48543,48519,119,48539)}else v=u}while(0);h=0|ar[5764+o>>2],h=(e=(52+(0|ar[A+18512>>2])+(w+1+v>>1)+(h<<1)|0)%(h+52|0)|0)-h|0,ar[A+18544>>2]=e,e=(0|(e=(0|ar[5952+o>>2])+h+(0|ar[744+t>>2])+(0|ar[A+18520>>2])|0))<(0|(v=0-(c=0|ar[5772+o>>2])|0))?v:(0|e)<57?e:57,r=(0|(r=(0|ar[5956+o>>2])+h+(0|ar[748+t>>2])+(0|ar[A+18524>>2])|0))<(0|v)?v:(0|r)<57?r:57;do{if(1==(0|ar[5776+o>>2])){do{if(30<=(0|e)){if(42<(0|e)){e=e+-6|0;break}e=0|ar[8020+(e+-30<<2)>>2];break}}while(0);if(30<=(0|r)){if(42<(0|r)){r=r+-6|0;break}r=0|ar[8020+(r+-30<<2)>>2];break}}}while(0);if(ar[A+18548>>2]=c+e,ar[A+18552>>2]=c+r,e=0|ar[a>>2],c=f>>(r=0|ar[e+10368>>2]),(0|(k=i>>r))<=-1&&sr(48482,48519,118,48539),(0|(d=0|ar[e+10372>>2]))<=(0|k)&&sr(48482,48519,118,48539),(0|c)<=-1&&sr(48543,48519,119,48539),(0|c)>=(0|ar[e+10376>>2])&&sr(48543,48519,119,48539),f=(s=0|ar[e+10360>>2])+(3*((0|br(d,c))+k|0)|0)|0,b=(e=1<<(f=(3<(f=7&(cr[f>>0]|cr[f+1>>0]<<8))>>>0?f:3)-r|0))+c|0,31!=(0|f)){l=e+k|0,u=255&h,e=c;do{for(c=0|br(e,d),r=k;tr[s+(3*(r+c|0)|0)+2>>0]=u,(0|(r=r+1|0))<(0|l););e=e+1|0}while((0|e)<(0|b));ar[(A=A+18528|0)>>2]=h}else ar[(A=A+18528|0)>>2]=h}function jn(A,e,r,i,f,n,t,o,a,c){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l;return l=0|ar[(A|=0)+18596>>2],8<(0|ar[(0==(0|t)?5760+l|0:5768+l|0)>>2])?void function(A,e,r,i,f,n,t,o,a,c){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l,u,b,s,d,k,h,w,v,m,g,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0;switch(ur=(g=ur)+4096|0,s=g,b=0|ar[(k=18596+(A|=0)|0)>>2],0|t){case 0:Z=A+18544|0;break;case 1:Z=A+18548|0;break;case 2:Z=A+18552|0;break;default:sr(44456,44443,367,44458)}X=0|ar[Z>>2],i=0|ar[(m=A+2112|0)>>2],h=0|ar[((d=0==(0|t))?40+b|0:44+b|0)>>2],v=(0|ar[4+b+(t<<2)>>2])+((0|br(h,r))+e<<1)|0,w=0|ar[(d?5760+b|0:5768+b|0)>>2],f=0|ar[10368+b>>2],e>>=f,f=r>>f,(0|e)<=-1&&sr(48482,48519,118,48539);Z=0|ar[10372+b>>2],(0|Z)<=(0|e)&&sr(48482,48519,118,48539);(0|f)<=-1&&sr(48543,48519,119,48539);(0|f)>=(0|ar[10376+b>>2])&&sr(48543,48519,119,48539);I=(0|ar[10360+b>>2])+(3*((0|br(Z,f))+e|0)|0)|0,I=(65535&(cr[I>>0]|cr[I+1>>0]<<8))>>>8&3,l=65535&I,I=(u=4==(0|n))&0!=(0|tr[5748+b>>0])&I<<16>>16==0;A:do{if(0|tr[A+32>>0]){if(r=d?A+14412|0:s,0<(0|or[(Z=A+14404+(t<<1)|0)>>1]))for(f=0;or[i+(or[A+8260+(t<<11)+(f<<1)>>1]<<1)>>1]=0|or[A+2116+(t<<11)+(f<<1)>>1],(0|(f=f+1|0))<(0|or[Z>>1]););I&&fs[63&ar[432+(0|ar[A+18592>>2])>>2]](i,4);do{if(c){if(f=0|ar[A+18592>>2],2==(0|c)){ns[127&ar[f+368>>2]](r,i,n);break}ns[127&ar[f+372>>2]](r,i,n);break}ns[127&ar[364+(0|ar[A+18592>>2])>>2]](r,i,n)}while(0);if(!d&&0|ar[(p=A+28|0)>>2]&&(B=0|ar[k>>2],y=0|ar[B+5768>>2],B=0|ar[B+5760>>2],0<(0|n))){f=0;do{for(e=0|br(f,n),Z=0;R=(0|br(ar[A+14412+((N=Z+e|0)<<2)>>2]<<y>>B,0|ar[p>>2]))>>3,ar[(N=r+(N<<2)|0)>>2]=R+(0|ar[N>>2]),(0|(Z=Z+1|0))!=(0|n););f=f+1|0}while((0|f)!=(0|n))}if(os[63&ar[460+(0|ar[A+18592>>2])>>2]](v,h,r,n,w),I)for(f=i+32|0;((or[i>>1]=0)|(i=i+2|0))<(0|f););}else{if(E=1<(0|n))for(Z=n,f=0;f=f+1|0,3<Z>>>0;)Z>>>=1;else f=0;if(B=(f=f+w|0)+-5|0,0|tr[1400+b>>0]){y=1<<f+-6;do{if(!a){if((0|n)<32){f=t+3|0;break}f=t+1|0;break}f=t}while(0);switch((a=n+-4|0)>>>2|a<<30|0){case 0:W=5993+b+(f<<4)|0;break;case 1:W=6089+b+(f<<6)|0;break;case 3:W=6473+b+(f<<8)|0;break;case 7:W=8009+b+(f<<10)|0;break;default:sr(44456,44443,492,44458)}if(0<(0|or[(r=A+14404+(t<<1)|0)>>1]))for(p=0|ar[8072+(((0|X)%6|0)<<2)>>2],Z=(0|X)/6|0,e=((0|y)<0)<<31>>31,f=0;X=0|or[A+8260+(t<<11)+(f<<1)>>1],R=(0|br(0|cr[W+X>>0],p))<<Z,a=0|or[A+2116+(t<<11)+(f<<1)>>1],a=0|bb(0|(a=0|tb(0|(a=0|nb(0|R,((0|R)<0)<<31>>31|0,0|a,((0|a)<0)<<31>>31|0)),0|D,0|y,0|e)),0|D,0|B),F=(0|(R=D))<-1|-1==(0|R)&a>>>0<4294934528,a=(N=(0|R)<0|0==(0|R)&a>>>0<32767)?a:32767,or[i+(X<<1)>>1]=F?-32768:65535&a,(0|(f=f+1|0))<(0|or[r>>1]););}else if(p=f+-9|0,r=1<<f+-10,Z=ar[8072+(((0|X)%6|0)<<2)>>2]<<((0|X)/6|0),0<(0|or[(e=A+14404+(t<<1)|0)>>1]))for(f=0;W=(0|br(0|or[A+2116+(t<<11)+(f<<1)>>1],Z))+r>>p,or[i+(or[A+8260+(t<<11)+(f<<1)>>1]<<1)>>1]=(0|W)<-32768?-32768:65535&((0|W)<32767?W:32767),(0|(f=f+1|0))<(0|or[e>>1]););if(p=0<(0|n),!o){if(Z=u&0==(l|t|0),0|c&&sr(44486,44443,591,44458),0|tr[10071+b>>0]){xn(A,i,n,n,1&Z,v,h,w,t);break}if(f=0|ar[A+18592>>2],Z){ts[31&ar[f+412>>2]](v,i,h,w);break}switch(0|n){case 4:ts[31&ar[f+416>>2]](v,i,h,w);break A;case 8:ts[31&ar[f+420>>2]](v,i,h,w);break A;case 16:ts[31&ar[f+424>>2]](v,i,h,w);break A;default:ts[31&ar[f+428>>2]](v,i,h,w);break A}}if(E){for(f=n,Z=0;3<f>>>0;)f>>>=1,Z=Z+1|0;Z=Z+6|0}else Z=5;e=0<(0|(e=20-w|0))?e:0,I&&fs[63&ar[432+(0|ar[A+18592>>2])>>2]](i,4),r=d?A+14412|0:s;do{if(c){if(f=0|ar[A+18592>>2],2==(0|c)){os[63&ar[f+464>>2]](r,i,n,Z,e);break}os[63&ar[f+468>>2]](r,i,n,Z,e);break}os[63&ar[472+(0|ar[A+18592>>2])>>2]](r,i,n,Z,e)}while(0);if(!d&&0|ar[(C=A+28|0)>>2]&&(V=0|ar[k>>2],G=0|ar[V+5768>>2],V=0|ar[V+5760>>2],p)){f=0;do{for(e=0|br(f,n),Z=0;R=(0|br(ar[A+14412+((N=Z+e|0)<<2)>>2]<<G>>V,0|ar[C>>2]))>>3,ar[(N=r+(N<<2)|0)>>2]=R+(0|ar[N>>2]),(0|(Z=Z+1|0))!=(0|n););f=f+1|0}while((0|f)!=(0|n))}if(os[63&ar[460+(0|ar[A+18592>>2])>>2]](v,h,r,n,w),I)for(f=i+32|0;((or[i>>1]=0)|(i=i+2|0))<(0|f););}}while(0);if((0|or[(Z=A+14404+(t<<1)|0)>>1])<=0)return ur=g;f=0|ar[m>>2],i=0;for(;or[f+(or[A+8260+(t<<11)+(i<<1)>>1]<<1)>>1]=0,i=i+1|0,(0|i)<(0|or[Z>>1]););ur=g}(A,e,r,i,f,n,t,o,a,c):void function(A,e,r,i,f,n,t,o,a,c){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l,u,b,s,d,k,h,w,v,m,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0;switch(ur=(m=ur)+4096|0,s=m,b=0|ar[(k=18596+(A|=0)|0)>>2],0|t){case 0:g=A+18544|0;break;case 1:g=A+18548|0;break;case 2:g=A+18552|0;break;default:sr(44456,44443,367,44458)}E=0|ar[g>>2],i=0|ar[(v=A+2112|0)>>2],h=0|ar[((d=0==(0|t))?40+b|0:44+b|0)>>2],w=(0|ar[4+b+(t<<2)>>2])+((0|br(h,r))+e)|0,f=0|ar[10368+b>>2],e>>=f,f=r>>f,(0|e)<=-1&&sr(48482,48519,118,48539);g=0|ar[10372+b>>2],(0|g)<=(0|e)&&sr(48482,48519,118,48539);(0|f)<=-1&&sr(48543,48519,119,48539);(0|f)>=(0|ar[10376+b>>2])&&sr(48543,48519,119,48539);W=(0|ar[10360+b>>2])+(3*((0|br(g,f))+e|0)|0)|0,W=(65535&(cr[W>>0]|cr[W+1>>0]<<8))>>>8&3,l=65535&W,W=(u=4==(0|n))&0!=(0|tr[5748+b>>0])&W<<16>>16==0;A:do{if(0|tr[A+32>>0]){if(r=d?A+14412|0:s,0<(0|or[(g=A+14404+(t<<1)|0)>>1]))for(f=0;or[i+(or[A+8260+(t<<11)+(f<<1)>>1]<<1)>>1]=0|or[A+2116+(t<<11)+(f<<1)>>1],(0|(f=f+1|0))<(0|or[g>>1]););W&&fs[63&ar[432+(0|ar[A+18592>>2])>>2]](i,4);do{if(c){if(f=0|ar[A+18592>>2],2==(0|c)){ns[127&ar[f+368>>2]](r,i,n);break}ns[127&ar[f+372>>2]](r,i,n);break}ns[127&ar[364+(0|ar[A+18592>>2])>>2]](r,i,n)}while(0);if(!d&&0|ar[(Z=A+28|0)>>2]&&(y=0|ar[k>>2],p=0|ar[y+5768>>2],y=0|ar[y+5760>>2],0<(0|n))){f=0;do{for(e=0|br(f,n),g=0;F=(0|br(ar[A+14412+((R=g+e|0)<<2)>>2]<<p>>y,0|ar[Z>>2]))>>3,ar[(R=r+(R<<2)|0)>>2]=F+(0|ar[R>>2]),(0|(g=g+1|0))!=(0|n););f=f+1|0}while((0|f)!=(0|n))}if(os[63&ar[456+(0|ar[A+18592>>2])>>2]](w,h,r,n,8),W)for(f=i+32|0;((or[i>>1]=0)|(i=i+2|0))<(0|f););}else{if(e=0|ar[(d?5760+b|0:5768+b|0)>>2],B=1<(0|n))for(g=n,f=0;f=f+1|0,3<g>>>0;)g>>>=1;else f=0;if(y=(f=f+e|0)+-5|0,0|tr[1400+b>>0]){p=1<<f+-6;do{if(!a){if((0|n)<32){f=t+3|0;break}f=t+1|0;break}f=t}while(0);switch((a=n+-4|0)>>>2|a<<30|0){case 0:X=5993+b+(f<<4)|0;break;case 1:X=6089+b+(f<<6)|0;break;case 3:X=6473+b+(f<<8)|0;break;case 7:X=8009+b+(f<<10)|0;break;default:sr(44456,44443,492,44458)}if(0<(0|or[(r=A+14404+(t<<1)|0)>>1]))for(Z=0|ar[8072+(((0|E)%6|0)<<2)>>2],g=(0|E)/6|0,e=((0|p)<0)<<31>>31,f=0;E=0|or[A+8260+(t<<11)+(f<<1)>>1],F=(0|br(0|cr[X+E>>0],Z))<<g,a=0|or[A+2116+(t<<11)+(f<<1)>>1],a=0|bb(0|(a=0|tb(0|(a=0|nb(0|F,((0|F)<0)<<31>>31|0,0|a,((0|a)<0)<<31>>31|0)),0|D,0|p,0|e)),0|D,0|y),V=(0|(F=D))<-1|-1==(0|F)&a>>>0<4294934528,a=(R=(0|F)<0|0==(0|F)&a>>>0<32767)?a:32767,or[i+(E<<1)>>1]=V?-32768:65535&a,(0|(f=f+1|0))<(0|or[r>>1]););}else if(Z=f+-9|0,r=1<<f+-10,g=ar[8072+(((0|E)%6|0)<<2)>>2]<<((0|E)/6|0),0<(0|or[(e=A+14404+(t<<1)|0)>>1]))for(f=0;X=(0|br(0|or[A+2116+(t<<11)+(f<<1)>>1],g))+r>>Z,or[i+(or[A+8260+(t<<11)+(f<<1)>>1]<<1)>>1]=(0|X)<-32768?-32768:65535&((0|X)<32767?X:32767),(0|(f=f+1|0))<(0|or[e>>1]););if(e=0<(0|n),!o){if(g=u&0==(l|t|0),0|c&&sr(44486,44443,591,44458),0|tr[10071+b>>0]){Hn(A,i,n,n,1&g,w,h,8,t);break}if(f=0|ar[A+18592>>2],g){ns[127&ar[f+388>>2]](w,i,h);break}switch(0|n){case 4:ns[127&ar[f+392>>2]](w,i,h);break A;case 8:ns[127&ar[f+396>>2]](w,i,h);break A;case 16:ns[127&ar[f+400>>2]](w,i,h);break A;default:ns[127&ar[f+404>>2]](w,i,h);break A}}if(B){for(f=n,g=0;3<f>>>0;)f>>>=1,g=g+1|0;g=g+6|0}else g=5;W&&fs[63&ar[432+(0|ar[A+18592>>2])>>2]](i,4),r=d?A+14412|0:s;do{if(c){if(f=0|ar[A+18592>>2],2==(0|c)){os[63&ar[f+464>>2]](r,i,n,g,12);break}os[63&ar[f+468>>2]](r,i,n,g,12);break}os[63&ar[472+(0|ar[A+18592>>2])>>2]](r,i,n,g,12)}while(0);if(!d&&0|ar[(I=A+28|0)>>2]&&(G=0|ar[k>>2],C=0|ar[G+5768>>2],G=0|ar[G+5760>>2],e)){f=0;do{for(e=0|br(f,n),g=0;F=(0|br(ar[A+14412+((R=g+e|0)<<2)>>2]<<C>>G,0|ar[I>>2]))>>3,ar[(R=r+(R<<2)|0)>>2]=F+(0|ar[R>>2]),(0|(g=g+1|0))!=(0|n););f=f+1|0}while((0|f)!=(0|n))}if(os[63&ar[456+(0|ar[A+18592>>2])>>2]](w,h,r,n,8),W)for(f=i+32|0;((or[i>>1]=0)|(i=i+2|0))<(0|f););}}while(0);if((0|or[(g=A+14404+(t<<1)|0)>>1])<=0)return ur=m;f=0|ar[v>>2],i=0;for(;or[f+(or[A+8260+(t<<11)+(i<<1)>>1]<<1)>>1]=0,i=i+1|0,(0|i)<(0|or[g>>1]););ur=m}(A,e,r,i,f,n,t,o,a,c)}function Hn(A,e,r,i,f,n,t,o,a){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0;var c,l,u,b=0,s=0,d=0,k=0;ur=(u=ur)+4096|0,l=0|ar[(A|=0)+18592>>2],c=(r=0==(0|a))?A+14412|0:u,a=20-o|0;A:do{if(1==(0|f))ts[31&ar[436+l>>2]](c,e,a,15);else switch(0|i){case 4:ts[31&ar[440+l>>2]](c,e,a,15);break A;case 8:ts[31&ar[444+l>>2]](c,e,a,15);break A;case 16:ts[31&ar[448+l>>2]](c,e,a,15);break A;default:ts[31&ar[452+l>>2]](c,e,a,15);break A}}while(0);if(!r&&0|ar[(b=A+28|0)>>2]&&(d=0|ar[A+18596>>2],s=0|ar[d+5768>>2],d=0|ar[d+5760>>2],0<(0|i))){r=0;do{for(e=0|br(r,i),a=0;k=(0|br(ar[A+14412+((f=a+e|0)<<2)>>2]<<s>>d,0|ar[b>>2]))>>3,ar[(f=c+(f<<2)|0)>>2]=k+(0|ar[f>>2]),(0|(a=a+1|0))!=(0|i););r=r+1|0}while((0|r)!=(0|i))}os[63&ar[456+l>>2]](n,t,c,i,o),ur=u}function xn(A,e,r,i,f,n,t,o,a){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0;var c,l,u,b=0,s=0,d=0,k=0;ur=(u=ur)+4096|0,l=0|ar[(A|=0)+18592>>2],c=(r=0==(0|a))?A+14412|0:u,a=20-o|0;A:do{if(1==(0|f))ts[31&ar[436+l>>2]](c,e,a,15);else switch(0|i){case 4:ts[31&ar[440+l>>2]](c,e,a,15);break A;case 8:ts[31&ar[444+l>>2]](c,e,a,15);break A;case 16:ts[31&ar[448+l>>2]](c,e,a,15);break A;default:ts[31&ar[452+l>>2]](c,e,a,15);break A}}while(0);if(!r&&0|ar[(b=A+28|0)>>2]&&(d=0|ar[A+18596>>2],s=0|ar[d+5768>>2],d=0|ar[d+5760>>2],0<(0|i))){r=0;do{for(e=0|br(r,i),a=0;k=(0|br(ar[A+14412+((f=a+e|0)<<2)>>2]<<s>>d,0|ar[b>>2]))>>3,ar[(f=c+(f<<2)|0)>>2]=k+(0|ar[f>>2]),(0|(a=a+1|0))!=(0|i););r=r+1|0}while((0|r)!=(0|i))}os[63&ar[460+l>>2]](n,t,c,i,o),ur=u}function Pn(A,e,r){A|=0,r|=0;var i,f,n,t;ur=(t=ur)+16|0,f=t,n=42==(0|tr[(e|=0)>>0]),i=0|ar[2543],n||Ui(44505,6,1,i),ar[f>>2]=r,Qc(A,e+(1&n)|0,f),Oi(i),ur=t}function Ln(A,e,r){e|=0,r|=0;var i,f,n=0,t=0;if(tr[(A|=0)>>0]=1,tr[A+44>>0]=1,qn(A,e),f=r+-1|0,i=1<(0|r))for(n=0;t=255&(0|At(e,1)),tr[A+52+(52*n|0)>>0]=t,t=255&(0|At(e,1)),tr[A+52+(52*n|0)+44>>0]=t,(0|(n=n+1|0))!=(0|f););if((r+-2|0)>>>0<7)for(n=f;et(e,2),(0|(n=n+1|0))<8;);if(i)for(n=0;qn(A+52+(52*n|0)|0,e),(0|(n=n+1|0))!=(0|f););}function Kn(A,e,r){r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;return ur=(o=ur)+32|0,f=o+8|0,i=o,(e|=0)>>>0<=(c=0|ar[(n=(A|=0)+4|0)>>2])>>>0?(ar[n>>2]=e,void(ur=o)):((l=(u=0|ar[(t=A+8|0)>>2])<<5)>>>0<(a=e-c|0)>>>0|(l-a|0)>>>0<c>>>0?(ar[f>>2]=0,ar[(s=4+f|0)>>2]=0,((ar[(d=8+f|0)>>2]=0)|e)<0&&zl(),c=u<<6,u=e+31&-32,function(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;if(ur=(t=ur)+32|0,o=t+16|0,r=t+8|0,i=t,ar[(n=8+(A|=0)|0)>>2]<<5>>>0>=e>>>0)return ur=t;ar[o>>2]=0,ar[(a=o+4|0)>>2]=0,ar[(f=o+8|0)>>2]=0,(0|e)<0&&zl();c=0|hu((l=1+((e+-1|0)>>>5)|0)<<2),ar[o>>2]=c,ar[a>>2]=0,ar[f>>2]=l,l=0|ar[A>>2],ar[r>>2]=l,ar[4+r>>2]=0,e=0|ar[(c=A+4|0)>>2],ar[i>>2]=l+(e>>>5<<2),ar[i+4>>2]=31&e,function(A,e,r){e|=0,r|=0;var i,f,n,t,o,a,c,l=0,u=0,b=0,s=0,d=0;if(ur=(c=ur)+32|0,f=c+24|0,n=c+16|0,t=c+8|0,a=c,d=0|ar[(u=4+(A|=0)|0)>>2],o=0|ar[e>>2],l=0|ar[e+4>>2],i=0|ar[r>>2],b=0|ar[r+4>>2],s=i-o<<3,ar[u>>2]=d-l+b+s,u=(0|ar[A>>2])+(d>>>5<<2)|0,e=u,(0|l)!=(0|(r=31&d)))return ar[f>>2]=o,ar[4+f>>2]=l,ar[n>>2]=i,ar[4+n>>2]=b,ar[t>>2]=e,ar[4+t>>2]=r,function(A,e,r,i){A|=0,r|=0,i|=0;var f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;if(l=0|ar[(e|=0)>>2],f=0|ar[(u=e+4|0)>>2],o=((0|ar[r>>2])-l<<3)+(0|ar[r+4>>2])-f|0,r=l,(0|o)<=0)return e=i+4|0,i=0|ar[i>>2],ar[A>>2]=i,i=A+4|0,A=0|ar[e>>2],ar[i>>2]=A;f?(n=-1>>>((n=32-f|0)-(l=(0|o)<(0|n)?o:n)|0)&-1<<f&ar[r>>2],f=0|ar[(c=i+4|0)>>2],r=(a=32-f|0)>>>0<l>>>0?a:l,t=0|ar[i>>2],f=ar[t>>2]&~(-1>>>(a-r|0)&-1<<f),ar[t>>2]=f,a=0|ar[c>>2],b=0|ar[u>>2],ar[t>>2]=(b>>>0<a>>>0?n<<a-b:n>>>(b-a|0))|f,f=(0|ar[c>>2])+r|0,t=t+(f>>>5<<2)|0,ar[i>>2]=t,f&=31,ar[c>>2]=f,0<(0|(a=l-r|0))&&(f=ar[t>>2]&~(-1>>>(32-a|0)),ar[t>>2]=f,ar[t>>2]=n>>>((0|ar[u>>2])+r|0)|f,ar[c>>2]=a,f=a),r=4+(0|ar[e>>2])|0,ar[e>>2]=r,o=o-l|0):f=0|ar[(c=f=i+4|0)>>2];if(a=32-f|0,n=-1<<f,31<(0|o)){for(t=~n,f=o;u=0|ar[r>>2],b=0|ar[i>>2],l=ar[b>>2]&t,ar[b>>2]=l,ar[b>>2]=u<<ar[c>>2]|l,b=b+4|0,ar[i>>2]=b,ar[b>>2]=ar[b>>2]&n|u>>>a,f=f+-32|0,r=4+(0|ar[e>>2])|0,ar[e>>2]=r,31<(0|f););o&=31}if((0|o)<=0)return e=c,b=0|ar[i>>2],ar[A>>2]=b,b=A+4|0,i=0|ar[e>>2],ar[b>>2]=i;if(t=ar[r>>2]&-1>>>(32-o|0),n=(0|a)<(0|o)?a:o,f=0|ar[i>>2],r=ar[f>>2]&~(-1<<ar[c>>2]&-1>>>(a-n|0)),ar[f>>2]=r,ar[f>>2]=r|t<<ar[c>>2],r=(0|ar[c>>2])+n|0,f=f+(r>>>5<<2)|0,ar[i>>2]=f,ar[c>>2]=31&r,(0|(r=o-n|0))<=0)return e=c,b=0|ar[i>>2],ar[A>>2]=b,b=A+4|0,i=0|ar[e>>2],ar[b>>2]=i;ar[f>>2]=ar[f>>2]&~(-1>>>(32-r|0))|t>>>n,ar[c>>2]=r,e=c,b=0|ar[i>>2],ar[A>>2]=b,b=A+4|0,i=0|ar[e>>2],ar[b>>2]=i}(a,f,n,t),ur=c;r=b-l+s|0,s=o,0<(0|r)&&(e=l?(d=-1>>>((d=32-l|0)-(e=(0|r)<(0|d)?r:d)|0)&-1<<l,ar[u>>2]=ar[u>>2]&~d|ar[s>>2]&d,r=r-e|0,u=u+((l=e+l|0)>>>5<<2)|0,l&=31,s=s+4|0):(l=0,o),wb(0|u,0|e,(b=(0|r)/32|0)<<2|0),A=r-(b<<5)|0,e=r=u+(b<<2)|0,0<(0|A)&&(l=-1>>>(32-A|0),ar[r>>2]=ar[r>>2]&~l|ar[s+(b<<2)>>2]&l,l=A));ar[a>>2]=e,ar[a+4>>2]=l,ur=c}(o,r,i),e=0|ar[A>>2],ar[A>>2]=ar[o>>2],ar[o>>2]=e,o=0|ar[c>>2],ar[c>>2]=ar[a>>2],ar[a>>2]=o,a=0|ar[n>>2],ar[n>>2]=ar[f>>2],ar[f>>2]=a,0|e&&vu(e);ur=t}(f,l>>>0<1073741823?c>>>0<u>>>0?u:c:2147483647),l=0|ar[n>>2],ar[s>>2]=l+a,u=c=0|ar[A>>2],e=0|ar[f>>2],0<(0|(l=(u+(l>>>5<<2)-c<<3)+(31&l)|0))?(wb(0|e,0|c,(b=l>>>5)<<2|0),c=l-(b<<5)|0,e=l=e+(b<<2)|0,0<(0|c)?(k=-1>>>(32-c|0),ar[l>>2]=ar[l>>2]&~k|ar[u+(b<<2)>>2]&k):c=0):c=0,ar[i>>2]=e,ar[i+4>>2]=c,e=0|ar[(l=i)>>2],l=0|ar[l+4>>2],c=0|ar[A>>2],ar[A>>2]=ar[f>>2],ar[f>>2]=c,k=0|ar[n>>2],ar[n>>2]=ar[s>>2],ar[s>>2]=k,k=0|ar[t>>2],ar[t>>2]=ar[d>>2],ar[d>>2]=k,0|c&&vu(c)):(l=(0|ar[A>>2])+(c>>>5<<2)|0,ar[n>>2]=e,e=l,l=31&c),a?(u=0==(0|l),c=e,r?(u||(e=a>>>0<(k=32-l|0)>>>0?a:k,ar[c>>2]=ar[c>>2]|-1>>>(k-e|0)&-1<<l,a=a-e|0,e=c=c+4|0),vb(0|e,-1,(k=a>>>5)<<2|0),(a=a-(k<<5)|0)&&(ar[(e=c+(k<<2)|0)>>2]=ar[e>>2]|-1>>>(32-a|0)),void(ur=o)):(u||(e=a>>>0<(k=32-l|0)>>>0?a:k,ar[c>>2]=ar[c>>2]&~(-1>>>(k-e|0)&-1<<l),a=a-e|0,e=c=c+4|0),vb(0|e,0,(k=a>>>5)<<2|0),(a=a-(k<<5)|0)&&(ar[(e=c+(k<<2)|0)>>2]=ar[e>>2]&~(-1>>>(32-a|0))),void(ur=o))):void(ur=o))}function qn(A,e){e|=0;var r=0,i=0;if(0|tr[(A|=0)>>0]){for(r=255&(0|At(e,2)),tr[A+1>>0]=r,r=255&(0|At(e,1)),tr[A+2>>0]=r,r=0|At(e,5),ar[A+4>>2]=r,i=255&((r=0)|At(e,1));tr[A+8+r>>0]=i,r=r+1|0,i=255&(0|At(e,1)),32!=(0|r););tr[A+40>>0]=i,i=255&(0|At(e,1)),tr[A+41>>0]=i,i=255&(0|At(e,1)),tr[A+42>>0]=i,i=255&(0|At(e,1)),tr[A+43>>0]=i,et(e,44)}0|tr[A+44>>0]&&(i=0|At(e,8),ar[A+48>>2]=i)}function $n(A,e,r){r|=0;var i,f,n,t,o,a,c,l,u,b,s,d,k=0,h=0;if(ur=(d=ur)+112|0,s=d+88|0,h=d+80|0,b=d+72|0,u=d+64|0,l=d+56|0,c=d+48|0,a=d+40|0,o=d+32|0,n=d+24|0,t=d+16|0,i=d+8|0,k=d,f=(e|=0)?45527:45535,0|tr[(A|=0)>>0]){switch(e=0|tr[A+1>>0],ar[k>>2]=f,ar[k+4>>2]=e,Pn(r,45545,k),k=0|tr[A+2>>0],ar[i>>2]=f,ar[4+i>>2]=k,Pn(r,45574,i),0|ar[A+4>>2]){case 1:e=45659;break;case 2:e=45652;break;case 3:e=45635;break;case 4:e=45613;break;default:e=45603}for(ar[t>>2]=f,ar[4+t>>2]=e,Pn(r,45664,t),ar[n>>2]=f,Pn(r,45693,n),e=0;0|e&&Pn(r,45884,b),ar[h>>2]=tr[A+8+e>>0],Pn(r,45887,h),32!=(0|(e=e+1|0)););Pn(r,45728,o),h=0|tr[A+40>>0],ar[a>>2]=f,ar[4+a>>2]=h,Pn(r,45731,a),h=0|tr[A+41>>0],ar[c>>2]=f,ar[4+c>>2]=h,Pn(r,45768,c),h=0|tr[A+42>>0],ar[l>>2]=f,ar[4+l>>2]=h,Pn(r,45804,l),h=0|tr[A+43>>0],ar[u>>2]=f,ar[4+u>>2]=h,Pn(r,45844,u)}ur=(0|tr[A+44>>0]&&(h=0|ar[A+48>>2],ar[s>>2]=f,ar[4+s>>2]=h,Q[8+s>>3]=(0|h)/30,Pn(r,45891,s)),d)}function At(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0;if((0|(i=0|ar[(r=(A|=0)+16|0)>>2]))<(0|e)){i=64-i|0,n=A+4|0;A:do{if(7<(0|i)){t=A+8|0,f=0|ar[n>>2];do{if(!f)break A;c=0|ar[A>>2],ar[A>>2]=c+1,c=0|cr[c>>0],f=f+-1|0,ar[n>>2]=f,c=0|db(0|c,0,0|(i=i+-8|0)),a=ar[(l=t)+4>>2]|D,ar[(o=t)>>2]=ar[l>>2]|c,ar[o+4>>2]=a}while(7<(0|i))}}while(0);i=64-i|0,ar[r>>2]=i}return l=0|sb(0|(o=0|ar[(a=c=A+8|0)>>2]),0|(a=0|ar[a+4>>2]),64-e|0),a=0|db(0|o,0|a,0|e),ar[c>>2]=a,ar[c+4>>2]=D,ar[r>>2]=i-e,0|l}function et(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0;if((0|(i=0|ar[(r=(A|=0)+16|0)>>2]))<(0|e)){i=64-i|0,n=A+4|0;A:do{if(7<(0|i)){t=A+8|0,f=0|ar[n>>2];do{if(!f)break A;c=0|ar[A>>2],ar[A>>2]=c+1,c=0|cr[c>>0],f=f+-1|0,ar[n>>2]=f,c=0|db(0|c,0,0|(i=i+-8|0)),a=ar[(l=t)+4>>2]|D,ar[(o=t)>>2]=ar[l>>2]|c,ar[o+4>>2]=a}while(7<(0|i))}}while(0);i=64-i|0,ar[r>>2]=i}c=0|db(0|ar[(c=l=A+8|0)>>2],0|ar[c+4>>2],0|e),ar[l>>2]=c,ar[l+4>>2]=D,ar[r>>2]=i-e}function rt(A){var e,r,i;i=(-8&ar[(e=(A|=0)+16|0)>>2]|0)/8|0,ar[A>>2]=(0|ar[A>>2])+(0-i),ar[(r=A+4|0)>>2]=(0|ar[r>>2])+i,ar[(A=A+8|0)>>2]=0,ar[A+4>>2]=0,ar[e>>2]=0}function it(A){var e,r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;for(a=(A|=0)+4|0,r=A+8|0,i=(c=0)|ar[(e=A+16|0)>>2];;){if((0|i)<1){i=64-i|0;A:do{if(7<(0|i)){f=0|ar[a>>2];do{if(!f)break A;l=0|ar[A>>2],ar[A>>2]=l+1,l=0|cr[l>>0],f=f+-1|0,ar[a>>2]=f,l=0|db(0|l,0,0|(i=i+-8|0)),n=ar[(u=r)+4>>2]|D,ar[(t=r)>>2]=ar[u>>2]|l,ar[t+4>>2]=n}while(7<(0|i))}}while(0);t=64-i|0,ar[e>>2]=t}else t=i;if(n=0|db(0|(u=0|ar[(l=r)>>2]),0|(l=0|ar[l+4>>2]),1),f=D,ar[(i=r)>>2]=n,ar[i+4>>2]=f,i=t+-1|0,ar[e>>2]=i,!(-1<(0|l)|-1==(0|l)&4294967295<u>>>0))break;if(19<(0|c)){i=-99999,o=20;break}c=c+1|0}if(20==(0|o))return 0|i;if(!c)return(u=0)|u;if((0|t)<=(0|c)){i=65-t|0;A:do{if(7<(0|i)){t=0|ar[a>>2];do{if(!t)break A;u=0|ar[A>>2],ar[A>>2]=u+1,u=0|cr[u>>0],t=t+-1|0,ar[a>>2]=t,n|=u=0|db(0|u,0,0|(i=i+-8|0)),f|=D,ar[(u=r)>>2]=n,ar[u+4>>2]=f}while(7<(0|i))}}while(0);i=64-i|0,ar[e>>2]=i}return u=0|sb(0|n,0|f,64-c|0),a=0|db(0|n,0|f,0|c),ar[(l=r)>>2]=a,ar[l+4>>2]=D,ar[e>>2]=i-c,(0|(i=u+(1<<c)|0))<=1&&sr(47395,47382,146,47403),0|(u=i+-1|0)}function ft(A){A=0|it(A|=0);A:do{if((0|A)<0){switch(0|A){case-99999:break;default:break A}return 0|(A=-99999)}switch(0|A){case 0:A=0;break;default:break A}return 0|A}while(0);return 0|(A=(0|(0==(1&A|0)?0-A|0:A+1|0))/2|0)}function nt(A,e,r){if(A|=0,e|=0,-1<(0|(r|=0)))return ar[A>>2]=e,ar[A+4>>2]=e,void(ar[A+8>>2]=e+r);sr(47837,47828,138,47849)}function tt(A){var e,r,i,f,n,t;f=0|ar[(i=(A|=0)+4|0)>>2],n=(0|ar[A+8>>2])-f|0,ar[A+12>>2]=510,or[(t=A+20|0)>>1]=8,((ar[(r=A+16|0)>>2]=0)|n)<=0||(A=1+f|0,ar[i>>2]=A,e=(0|cr[f>>0])<<8,ar[r>>2]=e,1!=((or[t>>1]=0)|n)&&(ar[i>>2]=2+f,ar[r>>2]=0|e|cr[A>>0],or[t>>1]=-8))}function ot(A,e){e|=0;var r=0,i=0,f=0,n=0,t=0,o=0,a=0;return i=(i=0|ar[(t=(A|=0)+12|0)>>2])-(r=0|cr[(i>>>6)-4+(47412+(((0|cr[e>>0])>>>1&255)<<2))>>0])|0,n=(ar[t>>2]=i)<<7,(f=0|ar[(a=A+16|0)>>2])>>>0<n>>>0?(o=255&(f=1&(r=0|tr[e>>0])),tr[e>>0]=tr[47764+((255&r)>>>1&255)>>0]<<1&255|f,32768<=n>>>0?0|(a=o):(ar[t>>2]=i<<1&67108862,f=ar[a>>2]<<1,ar[a>>2]=f,e=1+(0|or[(r=A+20|0)>>1])<<16>>16,(or[r>>1]=e)<<16>>16?0|(a=o):(or[r>>1]=-8,(i=0|ar[(r=A+4|0)>>2])>>>0>=(0|ar[A+8>>2])>>>0||(ar[r>>2]=i+1,ar[a>>2]=0|f|cr[i>>0]),0|(a=o)))):(o=0|cr[47668+(r>>>3)>>0],ar[a>>2]=f-n<<o,ar[t>>2]=r<<o,t=255&(i=1&(r=0|tr[e>>0])^1),(255&r)<2&&(r=i|-2&r,tr[e>>0]=r),tr[e>>0]=tr[47700+((255&r)>>>1&255)>>0]<<1&255|1&r,r=(0|lr[(n=A+20|0)>>1])+o|0,32768&(or[n>>1]=r)|0||(r=r<<16>>16,(f=0|ar[(i=A+4|0)>>2])>>>0<(0|ar[A+8>>2])>>>0&&(ar[i>>2]=f+1,ar[a>>2]=(0|cr[f>>0])<<r|ar[a>>2]),or[n>>1]=r+65528),0|(a=t))}function at(A){var e=0,r=0,i=0,f=0,n=0;return r=(0|ar[(e=(A|=0)+12|0)>>2])-2|0,(i=(ar[e>>2]=r)<<7)>>>0<=(f=0|ar[(n=A+16|0)>>2])>>>0?0|(n=1):32768<=i>>>0?(n=0)|n:(ar[e>>2]=r<<1&67108862,i=f<<1,ar[n>>2]=i,f=1+(0|or[(e=A+20|0)>>1])<<16>>16,(or[e>>1]=f)<<16>>16?(n=0)|n:(or[e>>1]=-8,(r=0|ar[(e=A+4|0)>>2])>>>0>=(0|ar[A+8>>2])>>>0||(ar[e>>2]=r+1,ar[n>>2]=i+(0|cr[r>>0])),(n=0)|n))}function ct(A){var e,r,i=0,f=0,n=0,t=0;return f=ar[(r=(A|=0)+16|0)>>2]<<1,ar[r>>2]=f,t=1+(0|or[(e=A+20|0)>>1])<<16>>16,-1<(or[e>>1]=t)<<16>>16&&(n=0|ar[(i=A+4|0)>>2],(0|ar[A+8>>2])>>>0>n>>>0)&&(or[e>>1]=-8,ar[i>>2]=n+1,f=0|f|cr[n>>0],ar[r>>2]=f),f>>>0<(i=ar[A+12>>2]<<7)>>>0?(t=0)|t:(ar[r>>2]=f-i,0|(t=1))}function lt(A,e){var r,i,f,n,t=0,o=0,a=0,c=0,l=0;if((0|(e|=0))<=0)return 0|(l=e);for(i=(A|=0)+16|0,f=A+20|0,n=A+8|0,l=A+4|0,r=A+12|0,t=(A=0)|or[f>>1],o=0|ar[i>>2];;){if(o<<=1,ar[i>>2]=o,t=t+1<<16>>16,-1<(or[f>>1]=t)<<16>>16&&(c=0|ar[l>>2],(0|ar[n>>2])>>>0>c>>>0)?(or[f>>1]=-8,ar[l>>2]=c+1,a=0|cr[c>>0]|o,ar[i>>2]=a,t=-8):a=o,a>>>0<(o=ar[r>>2]<<7)>>>0){t=8;break}if(o=a-o|0,ar[i>>2]=o,(0|e)<=(0|(A=A+1|0))){A=e,t=8;break}}return 8==(0|t)?0|A:0}function ut(A,e){A|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;if((0|(e|=0))<9)return e?(i=ar[(t=A+16|0)>>2]<<e,ar[t>>2]=i,f=(0|lr[(n=A+20|0)>>1])+e|0,0==(32768&(or[n>>1]=f)|0)&&(a=0|ar[(o=A+4|0)>>2],(0|ar[A+8>>2])>>>0>a>>>0)&&(ar[o>>2]=a+1,u=f<<16>>16,b=(0|cr[a>>0])<<u,or[n>>1]=u+65528,i|=b,ar[t>>2]=i),u=ar[A+12>>2]<<7,u=i-(0|br(b=(0|(l=(i>>>0)/(u>>>0)|0))<(0|(b=1<<e))?l:b+-1|0,u))|0,ar[t>>2]=u,0|b):(b=0)|b;if(i=ar[(l=A+16|0)>>2]<<8,ar[l>>2]=i,n=65535&(f=8+(0|lr[(u=A+20|0)>>1])|0),or[u>>1]=n,0==(32768&f|0)&&(c=0|ar[(t=A+4|0)>>2],(0|ar[A+8>>2])>>>0>c>>>0)?(ar[t>>2]=c+1,n=f<<16>>16,f=(0|cr[c>>0])<<n,n=n+65528&65535,or[u>>1]=n,f|=i,ar[l>>2]=f):f=i,r=ar[A+12>>2]<<7,t=f-(0|br(i=(0|(i=(f>>>0)/(r>>>0)|0))<255?i:255,r))|0,ar[l>>2]=t,!(f=e+-8|0))return 0|(b=i);for(e=A+8|0,c=A+4|0;f=f+-1|0,a=i<<1,i=t<<1,ar[l>>2]=i,n=n+1<<16>>16,-1<(or[u>>1]=n)<<16>>16&&(b=0|ar[c>>2],(0|ar[e>>2])>>>0>b>>>0)&&(or[u>>1]=-8,ar[c>>2]=b+1,i=0|cr[b>>0]|i,ar[l>>2]=i,n=-8),i>>>0<r>>>0?(t=0,o=i):(o=i-r|0,ar[l>>2]=o,t=1),i=t|a,f;)t=o;return 0|i}function bt(A,e){var r,i,f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0;for(r=(A|=0)+16|0,f=A+8|0,n=A+4|0,t=A+12|0,o=(e|=0)+31|0,a=(u=0)|or[(i=A+20|0)>>1],c=0|ar[r>>2];c<<=1,ar[r>>2]=c,a=a+1<<16>>16,-1<(or[i>>1]=a)<<16>>16&&(b=0|ar[n>>2],(0|ar[f>>2])>>>0>b>>>0)?(or[i>>1]=-8,ar[n>>2]=b+1,l=0|cr[b>>0]|c,ar[r>>2]=l,a=-8):l=c,!(l>>>0<(c=ar[t>>2]<<7)>>>0);){if(c=l-c|0,ar[r>>2]=c,(0|e)==(0|o)){e=0,s=8;break}u=u+(1<<e)|0,e=e+1|0}return 8==(0|s)?0|e:0|(s=(0|ut(A,e))+u|0)}function st(A){ar[(A|=0)>>2]=0,ar[A+4>>2]=0}function dt(A,e){A|=0;var r,i=0;ur=(r=ur)+16|0,i=r,0|(i=0|ar[(e|=0)+4>>2])&&(ar[i>>2]=1+(0|ar[i>>2])),ar[A+4>>2]=i,ar[A>>2]=ar[e>>2],ur=r}function kt(A){var e,r,i,f=0;ur=(r=ur)+16|0,f=r,ur=((f=0|ar[(e=(A|=0)+4|0)>>2])&&(i=(0|ar[f>>2])-1|0,ar[f>>2]=i,0|i||(0|(f=0|ar[A>>2])&&mu(f),(f=0|ar[e>>2])&&vu(f))),r)}function ht(A,e,r){e|=0,r|=0;var i,f,n=0,t=0,o=0;ur=(f=ur)+16|0,o=f+8|0,n=f,i=0|ar[(n=(A|=0)+4|0)>>2];do{if(0|i){if(1==(0|(t=0|ar[i>>2])))return wt(o=0|ar[A>>2],e,r),void(ur=f);if(1<(0|t)){ar[i>>2]=t+-1;break}sr(47917,47927,177,47943)}}while(0);o=0|wu(172),ar[A>>2]=o,A=0|hu(4),ar[n>>2]=A,ar[A>>2]=1,wt(o,e,r),ur=f}function wt(A,e,r){A|=0,e|=0,r|=0;var i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0;do{if(0<(0|e)){if(o=(0|r)<0?0:(0|r)<51?r:51,i=A+5|0,f=(255&(a=(f=63<(0|(a=(0|(a=((a=0|ar[8096+(12*(n=e+-1|0)|0)>>2])<<3&120)-16+((0|br((5*(a>>4)|0)-45|0,o))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&f,63<=(127&a)>>>0&&(t=f,tr[(a=i)>>0]=t,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+6|0,f=(255&(a=(f=63<(0|(a=(0|(a=((a=0|ar[8096+(12*n|0)+4>>2])<<3&120)-16+((0|br((5*(a>>4)|0)-45|0,o))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&f,63<=(127&a)>>>0&&(t=f,tr[(a=i)>>0]=t,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+7|0,f=(255&(a=(f=63<(0|(a=(0|(a=((a=0|ar[8096+(12*n|0)+8>>2])<<3&120)-16+((0|br((5*(a>>4)|0)-45|0,o))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&f,63<=(127&a)>>>0&&(t=f,tr[(a=i)>>0]=t,sr(47989,47927,210,48010)),vb(0|i,0|f,1),f=A+149|0,i=(255&(a=(i=63<(0|(a=(0|(a=((a=0|ar[9536+(n<<2)>>2])<<3&120)-16+((0|br((5*(a>>4)|0)-45|0,o))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&i,63<=(127&a)>>>0&&(tr[f>>0]=i,sr(47989,47927,210,48010)),vb(0|f,0|i,1),i=A+147|0,f=(255&(a=(f=63<(0|(a=(0|(a=((a=0|ar[8120+(n<<2)>>2])<<3&120)-16+((0|br((5*(a>>4)|0)-45|0,o))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&f,63<=(127&a)>>>0&&(tr[i>>0]=f,sr(47989,47927,210,48010)),vb(0|i,0|f,1),f=A+148|0,i=(255&(a=(i=63<(0|(a=(0|(a=((a=0|ar[8128+(n<<2)>>2])<<3&120)-16+((0|br((5*(a>>4)|0)-45|0,o))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&i,63<=(127&a)>>>0&&(tr[f>>0]=i,sr(47989,47927,210,48010)),vb(0|f,0|i,1),i=A+156|0,f=(255&(a=(f=63<(0|(a=(0|(a=104+((0|br(o,-20))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&f,63<=(127&a)>>>0&&(t=f,tr[(a=i)>>0]=t,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+157|0,t=(255&(a=(t=63<(0|(a=(0|(a=104+((0|br(o,-25))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&t,63<=(127&a)>>>0&&(n=t,tr[(a=i)>>0]=n,sr(47989,47927,210,48010)),vb(0|i,0|t,1),i=A+158|0,f=(255&(a=(f=63<(0|(a=(0|(a=104+((0|br(o,-30))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&f,63<=(127&a)>>>0&&(n=f,tr[(a=i)>>0]=n,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+159|0,f=(255&(a=(f=63<(0|(a=(0|(a=104+((0|br(o,-40))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&f,63<=(127&a)>>>0&&(n=f,tr[(a=i)>>0]=n,sr(47989,47927,210,48010)),vb(0|i,0|f,1),vb(A+160|0,0|f,1),tr[A+154>>0]=14,tr[A+155>>0]=14,i=A+150|0,f=(255&(a=(f=63<(0|(a=(0|(a=((a=0|ar[(n=9520+((1==(0|e)?0:2)<<2)|0)>>2])<<3&120)-16+((0|br((5*(a>>4)|0)-45|0,o))>>4)|0))<1?1:(0|a)<126?a:126)))?a+64|0:63-a|0))<<1&255|1&f,63<=(127&a)>>>0&&(l=f,tr[(a=i)>>0]=l,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+151|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+4>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,o))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(a=f,tr[(l=i)>>0]=a,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=(255&(l=(i=63<(0|(l=(0|(l=48+(5*o>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&i,f=A+152|0,63<=(127&l)>>>0&&(tr[f>>0]=i,sr(47989,47927,210,48010)),vb(0|f,0|i,1),vb(A+153|0,0|t,1),f=A+143|0,i=(255&(l=(i=63<(0|(l=(0|(l=72+((0|br(o,-5))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&i,(127&l)>>>0<63){vb(0|f,0|i,4);break}tr[f>>0]=i,sr(47989,47927,210,48010)}}while(0);a=(0|r)<0?0:(0|r)<51?r:51,i=A+2|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[8136+(12*e|0)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+3|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[8136+(12*e|0)+4>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+4|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[8136+(12*e|0)+8>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+8|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[(n=9484+((2!=(0|e)?e:5)<<2)|0)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+9|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+4>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+10|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+8>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+11|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+12>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),f=A+12|0,i=(255&(l=(i=63<(0|(l=(0|(l=((l=0|ar[9472+(e<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&i,63<=(127&l)>>>0&&(tr[f>>0]=i,sr(47989,47927,210,48010)),vb(0|f,0|i,1),i=A+13|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[8172+(e<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(tr[i>>0]=f,sr(47989,47927,210,48010)),vb(0|i,0|f,1),f=A+14|0,n=(255&(l=(n=63<(0|(l=(0|(l=((l=0|ar[(i=8184+((0==(0|e)?0:2)<<2)|0)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&n,63<=(127&l)>>>0&&(r=n,tr[(l=f)>>0]=r,sr(47989,47927,210,48010)),vb(0|f,0|n,1),l=0|ar[i+4>>2],i=A+15|0,f=(255&(l=(f=63<(0|(l=(0|(l=(l<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+16|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[(n=9424+((r=e<<2)<<2)|0)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(o=f,tr[(l=i)>>0]=o,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+17|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+4>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(o=f,tr[(l=i)>>0]=o,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+18|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+8>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(o=f,tr[(l=i)>>0]=o,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+19|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+12>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(o=f,tr[(l=i)>>0]=o,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+20|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[(n=9388+(3*e<<2)|0)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(o=f,tr[(l=i)>>0]=o,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+21|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+4>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(o=f,tr[(l=i)>>0]=o,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+22|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+8>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(o=f,tr[(l=i)>>0]=o,sr(47989,47927,210,48010)),vb(0|i,0|f,1),n=A+25|0,o=9172+(18*e<<2)|0,i=0;do{if(f=n+i|0,t=(255&(l=(t=63<(0|(l=(0|(l=((l=0|ar[o+(i<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&t,63<=(127&l)>>>0){c=35;break}vb(0|f,0|t,1),i=i+1|0}while((0|i)<18);35==(0|c)&&(tr[f>>0]=t,sr(47989,47927,210,48010)),f=A+43|0,i=0;do{if(n=f+i|0,t=(255&(l=(t=63<(0|(l=(0|(l=((l=0|ar[o+(i<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&t,63<=(127&l)>>>0){c=39;break}vb(0|n,0|t,1),i=i+1|0}while((0|i)<18);39==(0|c)&&(tr[n>>0]=t,sr(47989,47927,210,48010)),i=A+61|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[(n=8200+(r<<2)|0)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+62|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+4>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+63|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+8>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+64|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[n+12>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),n=A+65|0,i=0;do{if(f=n+i|0,t=(255&(l=(t=63<(0|(l=(0|(l=((l=0|ar[8248+(168*e|0)+(i<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&t,63<=(127&l)>>>0){c=45;break}vb(0|f,0|t,1),i=i+1|0}while((0|i)<42);45==(0|c)&&(tr[f>>0]=t,sr(47989,47927,210,48010)),i=A+107|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[8752+(e<<3)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),i=A+108|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[8752+(e<<3)+4>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(r=f,tr[(l=i)>>0]=r,sr(47989,47927,210,48010)),vb(0|i,0|f,1),t=A+109|0,f=8884+(24*e<<2)|0,i=0;do{if(n=t+i|0,o=(255&(l=(o=63<(0|(l=(0|(l=((l=0|ar[f+(i<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&o,63<=(127&l)>>>0){c=51;break}vb(0|n,0|o,1),i=i+1|0}while((0|i)<24);51==(0|c)&&(tr[n>>0]=o,sr(47989,47927,210,48010)),f=A+133|0,n=8776+(6*e<<2)|0,i=0;do{if(t=f+i|0,o=(255&(l=(o=63<(0|(l=(0|(l=((l=0|ar[n+(i<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&o,63<=(127&l)>>>0){c=55;break}vb(0|t,0|o,1),i=i+1|0}while((0|i)<6);if(55==(0|c)&&(tr[t>>0]=o,sr(47989,47927,210,48010)),i=(255&(l=(i=63<(0|(l=(0|(l=((l=0|ar[8848+(e<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&i,63<=(127&l)>>>0&&(tr[A>>0]=i,sr(47989,47927,210,48010)),vb(0|A,0|i,1),i=A+1|0,f=(255&(l=(f=63<(0|(l=(0|(l=((l=0|ar[8860+(e<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&f,63<=(127&l)>>>0&&(tr[i>>0]=f,sr(47989,47927,210,48010)),vb(0|i,0|f,1),tr[A+139>>0]=1,tr[A+140>>0]=1,f=A+141|0,i=(255&(l=(i=63<(0|(l=(0|(l=72+((0|br(a,-5))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&i,63<=(127&l)>>>0&&(tr[f>>0]=i,sr(47989,47927,210,48010)),vb(0|f,0|i,1),vb(A+142|0,0|i,1),f=A+161|0,i=(255&(l=(i=63<(0|(l=(0|(l=((l=0|ar[8872+(e<<2)>>2])<<3&120)-16+((0|br((5*(l>>4)|0)-45|0,a))>>4)|0))<1?1:(0|l)<126?l:126)))?l+64|0:63-l|0))<<1&255|1&i,(127&l)>>>0<63)return vb(0|f,0|i,1),tr[(e=l=A+162|0)>>0]=1,tr[e+1>>0]=1,tr[e+2>>0]=1,tr[e+3>>0]=1,tr[(l=l+4|0)>>0]=1,tr[l+1>>0]=1,tr[l+2>>0]=1,tr[l+3>>0]=1,tr[(l=A+170|0)>>0]=1,tr[l+1>>0]=1,tr[A+23>>0]=1,void(tr[A+24>>0]=1);tr[f>>0]=i,sr(47989,47927,210,48010)}function vt(A){var e,r,i=0;ur=(r=ur)+16|0,i=r,ur=((i=0|ar[(e=(A|=0)+4|0)>>2])&&(ar[i>>2]=(0|ar[i>>2])-1,ar[A>>2]=0,ar[e>>2]=0),r)}function mt(A){var e,r,i=0,f=0;ur=(r=ur)+16|0,i=r,(i=0|ar[(e=(A|=0)+4|0)>>2])||sr(48057,47927,95,48064),ur=((0|(f=0|ar[i>>2]))<=1||(ar[i>>2]=f+-1,f=0|ar[A>>2],i=0|wu(172),ar[A>>2]=i,A=0|hu(4),ar[e>>2]=A,ar[A>>2]=1,hb(0|i,0|f,172)),r)}function gt(A,e){A|=0;var r,i,f=0,n=0;return ur=(i=ur)+32|0,f=i,f=0|ar[(r=(e|=0)+4|0)>>2],ur=(f?(ar[f>>2]=1+(0|ar[f>>2]),0|(f=0|ar[(n=A+4|0)>>2])&&(ar[f>>2]=(0|ar[f>>2])-1,ar[A>>2]=0,ar[n>>2]=0),ar[A>>2]=ar[e>>2],ar[n>>2]=ar[r>>2]):(f=0|ar[(n=A+4|0)>>2])&&(ar[f>>2]=(0|ar[f>>2])-1,ar[A>>2]=0,ar[n>>2]=0),i),0|A}function Zt(A,e){e|=0;var r,i,f,n,t,o,a,c,l,u,b,s,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0;if(b=0|ar[(A|=0)+5808>>2],J=(1<<(s=0|ar[A+5804>>2]))-1|0,M=0|ar[A+5820>>2],d=e<<s>>(Q=0|ar[A+5800>>2]),Q=e+1<<s>>Q,(0|(Q=(0|(D=0|ar[A+5824>>2]))<(0|Q)?D:Q))<=(0|d))return(M=0)|(M&=J=1);i=A+10372|0,f=A+10360|0,n=A+10348|0,t=A+10352|0,o=A+10356|0,a=A+10340|0,c=A+48|0,l=A+52|0,u=A+5977|0,D=A+10308|0,k=(e=0)|ar[(r=A+5816|0)>>2];A:for(;;){if(0<(0|k)){G=0==(0|(F=0|br(d,b)))?0:32,R=0|br(F>>s,M),Y=0!=(0|F)&0==(F&J|0),_=0|br((N=F+-1|0)>>s,M),V=0;do{if(C=(0|br(0|ar[i>>2],d))+V|0,C=(0|ar[f>>2])+(3*C|0)|0,I=65535&(C=7&(cr[C>>0]|cr[C+1>>0]<<8)),C<<16>>16){if(y=(C=0|br(V,b))>>s,h=F>>(Z=0|ar[n>>2]),(0|(B=C>>Z))<=-1){d=8;break A}if((0|(E=0|ar[t>>2]))<=(0|B)){d=8;break A}if((0|h)<=-1){d=11;break A}if((0|(X=0|ar[o>>2]))<=(0|h)){d=11;break A}if(W=0|ar[a>>2],v=0|br(E,h),w=0|lr[W+(24*(v+B|0)|0)+2>>1],h=0|ar[c>>2],(p=(0|ar[l>>2])-h>>2)>>>0<=w>>>0){k=0,d=33;break A}g=0|ar[(m=h)+(w<<2)>>2],h=0==(0|C)?0:16;do{if(0!=(0|C)&0==(C&J|0)){if(!(0|tr[g+764>>0])){if(!(-1<(0|(w=C+-1>>Z))&(0|w)<(0|E))){d=16;break A}if((v=0|lr[W+(24*(v+w|0)|0)+2>>1])>>>0<p>>>0&&(0|ar[g+800>>2])!=(0|ar[800+(0|ar[m+(v<<2)>>2])>>2])){w=0;break}}w=0|tr[u>>0]?h:(w=0|ar[D>>2],(0|ar[w+(y+R<<2)>>2])==(0|ar[w+((C+-1>>s)+R<<2)>>2])?h:0)}else w=h}while(0);do{if(Y){if(!(0|tr[g+764>>0])){if(!(-1<(0|(h=N>>Z))&(0|h)<(0|X))){d=24;break A}if(W=W+(24*((0|br(E,h))+B|0)|0)+2|0,(W=0|lr[W>>1])>>>0<p>>>0&&(0|ar[g+800>>2])!=(0|ar[800+(0|ar[m+(W<<2)>>2])>>2])){h=0;break}}h=0|tr[u>>0]?G:(h=0|ar[D>>2],(0|ar[h+(y+R<<2)>>2])==(0|ar[h+(y+_<<2)>>2])?G:0)}else h=G}while(0);0|tr[g+754>>0]||(Wt(A,C,F,I,0,255&w,255&h),It(A,C,F,I,0,0),e=1,k=0|ar[r>>2])}V=V+1|0}while((0|V)<(0|k))}if((0|Q)<=(0|(d=d+1|0))){k=1,d=33;break}}if(8==(0|d))sr(48482,48519,118,48539);else if(11==(0|d))sr(48543,48519,119,48539);else if(16==(0|d))sr(48482,48519,118,48539);else if(24==(0|d))sr(48543,48519,119,48539);else if(33==(0|d))return 0|(M=k&e);return 0}function pt(A,e,r,i,f,n){r|=0,i|=0,f|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0,fA=0,nA=0;if(V=(e|=0)?2:1,F=e?1:2,R=1&e,N=1&(1^e),G=e?80:160,I=e?16:32,nA=(0|(n|=0))<(0|(nA=0|ar[(C=(A|=0)+10472|0)>>2]))?n:nA,!((0|(fA=(0|i)<(0|(fA=0|ar[A+10476>>2]))?i:fA))<=(0|r))){o=(0|f)<(0|nA),a=A+10460|0,c=A+10368|0,l=A+10372|0,u=A+10376|0,b=A+10360|0,s=A+10388|0,d=A+10392|0,k=A+10396|0,h=A+10380|0,w=A+10348|0,v=A+10352|0,m=A+10356|0,g=A+10340|0,Z=A+48|0,p=A+52|0,y=A+10332|0,B=A+10516|0,E=A+10448|0,X=A+10452|0,W=A+10456|0,t=A+10440|0;A:for(;;){if(o){eA=(0|(AA=r<<2))/4|0,rA=AA-N|0,$=f;do{if(iA=(0|(M=$<<2))/4|0,e=(0|br(0|ar[C>>2],eA))+iA|0,e=(0|ar[a>>2])+e|0,(D=255&(n=0|tr[e>>0]))&G){if(J=M-R|0,n=rA>>(A=0|ar[c>>2]),(0|(e=J>>A))<=-1){e=10;break A}if((0|(_=0|ar[l>>2]))<=(0|e)){e=10;break A}if((0|n)<=-1){e=13;break A}if((0|(Y=0|ar[u>>2]))<=(0|n)){e=13;break A}if(n=(Q=0|ar[b>>2])+(3*((0|br(_,n))+e|0)|0)|0,e=AA>>A,!(-1<(0|(i=M>>A))&(0|i)<(0|_))){e=15;break A}if(!(-1<(0|e)&(0|e)<(0|Y))){e=17;break A}q=Q+(3*((0|br(_,e))+i|0)|0)|0;e:do{if(0!=(768&(cr[n>>0]|cr[n+1>>0]<<8))&&0!=(768&(cr[q>>0]|cr[q+1>>0]<<8))){if(D&I|0){if(n=AA>>(i=0|ar[E>>2]),(0|(e=M>>i))<=-1){e=22;break A}if((0|(A=0|ar[X>>2]))<=(0|e)){e=22;break A}if((0|n)<=-1){e=25;break A}if((0|(_=0|ar[W>>2]))<=(0|n)){e=25;break A}if(q=(Y=0|ar[t>>2])+((0|br(A,n))+e)|0,(0|tr[q>>0])<=-1){e=1;break}if(e=rA>>i,!(-1<(0|(n=J>>i))&(0|n)<(0|A))){e=28;break A}if(!(-1<(0|e)&(0|e)<(0|_))){e=30;break A}if(q=Y+((0|br(A,e))+n)|0,(0|tr[q>>0])<=-1){e=1;break}}if(n=rA>>(i=0|ar[s>>2]),(0|(e=J>>i))<=-1){e=34;break A}if((0|(A=0|ar[d>>2]))<=(0|e)){e=34;break A}if((0|n)<=-1){e=37;break A}if((0|(_=0|ar[k>>2]))<=(0|n)){e=37;break A}if(q=0|ar[h>>2],K=(0|br(A,n))+e|0,e=AA>>i,!(-1<(0|(n=M>>i))&(0|n)<(0|A))){e=39;break A}if(!(-1<(0|e)&(0|e)<(0|_))){e=41;break A}if(L=(0|br(A,e))+n|0,n=rA>>(_=0|ar[w>>2]),(0|(e=J>>_))<=-1){e=44;break A}if((0|(Y=0|ar[v>>2]))<=(0|e)){e=44;break A}if((0|n)<=-1){e=47;break A}if((0|(Q=0|ar[m>>2]))<=(0|n)){e=47;break A}if(e=(D=0|ar[g>>2])+(24*((0|br(Y,n))+e|0)|0)+2|0,e=0|lr[e>>1],i=0|ar[Z>>2],J=e>>>0<(A=(0|ar[p>>2])-i>>2)>>>0?0|ar[i+(e<<2)>>2]:0,e=AA>>_,!(-1<(0|(n=M>>_))&(0|n)<(0|Y))){e=51;break A}if(!(-1<(0|e)&(0|e)<(0|Q))){e=53;break A}if(e=D+(24*((0|br(Y,e))+n|0)|0)+2|0,e=(e=0|lr[e>>1])>>>0<A>>>0?0|ar[i+(e<<2)>>2]:0,x=(n=(j=0|tr[q+(12*K|0)>>0])<<24>>24==0)?-1:0|ar[J+916+(tr[q+(12*K|0)+2>>0]<<2)>>2],O=(i=(H=0|tr[q+(12*K|0)+1>>0])<<24>>24==0)?-1:0|ar[J+980+(tr[q+(12*K|0)+3>>0]<<2)>>2],!((U=(0|x)==(0|(S=(A=(M=0|tr[q+(12*L|0)>>0])<<24>>24==0)?-1:0|ar[e+916+(tr[q+(12*L|0)+2>>0]<<2)>>2])))&(0|O)==(0|(J=(D=(T=0|tr[q+(12*L|0)+1>>0])<<24>>24==0)?-1:0|ar[e+980+(tr[q+(12*L|0)+3>>0]<<2)>>2])))&&!((0|O)==(0|S)&(0|x)==(0|J))){e=1;break}if(P=n?0:0|or[q+(12*K|0)+6>>1],e=n?0:0|or[q+(12*K|0)+4>>1],z=i?0:0|or[q+(12*K|0)+10>>1],Q=i?0:0|or[q+(12*K|0)+8>>1],Y=A?0:0|or[q+(12*L|0)+6>>1],A=A?0:0|or[q+(12*L|0)+4>>1],_=D?0:0|or[q+(12*L|0)+10>>1],i=D?0:0|or[q+(12*L|0)+8>>1],((255&H)+(255&j)|0)!=((255&T)+(255&M)|0)&&(er(4+(0|ar[y>>2])|0,1013,0),tr[B>>0]=3),(0|x)==(0|O)){if((0|S)!=(0|J)){e=81;break A}q=(n=e<<16>>16)-(e=A<<16>>16)|0;do{if((0|((0|q)<0?0-q|0:q))<=3){if(3<(0|((0|(q=(P<<16>>16)-(Y<<16>>16)|0))<0?0-q|0:q)))break;if(3<(0|((0|(q=(Q<<16>>16)-(i<<16>>16)|0))<0?0-q|0:q)))break;if((0|((0|(q=(z<<16>>16)-(_<<16>>16)|0))<0?0-q|0:q))<=3){e=0;break e}}}while(0);q=n-(i<<16>>16)|0;do{if((0|((0|q)<0?0-q|0:q))<=3){if(3<(0|((0|(q=(P<<16>>16)-(_<<16>>16)|0))<0?0-q|0:q)))break;if(3<(0|((0|(q=(Q<<16>>16)-e|0))<0?0-q|0:q)))break;if((0|((0|(q=(z<<16>>16)-(Y<<16>>16)|0))<0?0-q|0:q))<=3){e=0;break e}}}while(0);e=1;break}if(e=e<<16>>16,U){q=e-(A<<16>>16)|0;do{if((0|((0|q)<0?0-q|0:q))<=3){if(3<(0|((0|(q=(P<<16>>16)-(Y<<16>>16)|0))<0?0-q|0:q)))break;if(3<(0|((0|(q=(Q<<16>>16)-(i<<16>>16)|0))<0?0-q|0:q)))break;if((0|((0|(q=(z<<16>>16)-(_<<16>>16)|0))<0?0-q|0:q))<=3){e=0;break e}}}while(0);e=1;break}q=e-(i<<16>>16)|0;do{if((0|((0|q)<0?0-q|0:q))<=3){if(3<(0|((0|(q=(P<<16>>16)-(_<<16>>16)|0))<0?0-q|0:q)))break;if(3<(0|((0|(q=(Q<<16>>16)-(A<<16>>16)|0))<0?0-q|0:q)))break;if((0|((0|(q=(z<<16>>16)-(Y<<16>>16)|0))<0?0-q|0:q))<=3){e=0;break e}}}while(0);e=1;break}e=2}while(0);iA=(0|br(0|ar[C>>2],eA))+iA|0,iA=(0|ar[a>>2])+iA|0,tr[iA>>0]=-4&tr[iA>>0]|e}else tr[e>>0]=-4&n;$=$+V|0}while((0|$)<(0|nA))}if((0|fA)<=(0|(r=r+F|0))){e=5;break}}switch(0|e){case 5:return;case 10:sr(48482,48519,118,48539);break;case 13:sr(48543,48519,119,48539);break;case 15:sr(48482,48519,118,48539);break;case 17:sr(48543,48519,119,48539);break;case 22:sr(48482,48519,118,48539);break;case 25:sr(48543,48519,119,48539);break;case 28:sr(48482,48519,118,48539);break;case 30:sr(48543,48519,119,48539);break;case 34:sr(48482,48519,118,48539);break;case 37:sr(48543,48519,119,48539);break;case 39:sr(48482,48519,118,48539);break;case 41:sr(48543,48519,119,48539);break;case 44:sr(48482,48519,118,48539);break;case 47:sr(48543,48519,119,48539);break;case 51:sr(48482,48519,118,48539);break;case 53:sr(48543,48519,119,48539);break;case 81:sr(48206,48225,343,48236)}}}function yt(A,e,r,i,f,n){r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z,j,H,x,P,L,K,q,$,AA,eA,rA,iA,fA,nA,tA,oA,aA,cA,lA,uA,bA,sA,dA,kA,hA,wA,vA,mA,gA,ZA,pA,yA,BA,EA,XA,WA,IA,CA,GA,VA,FA,RA,NA,_A,YA,QA,DA,JA,MA,TA,UA,SA,OA,zA,jA,HA,xA,PA,LA,KA,qA,$A,Ae,ee,re,ie,fe,ne,te,oe,ae,ce,le,ue,be,se,de,ke,he,we,ve,me,ge,Ze,pe,ye=0,Be=0,Ee=0,Xe=0,We=0,Ie=0,Ce=0,Ge=0,Ve=0,Fe=0,Re=0,Ne=0,_e=0,Ye=0,Qe=0,De=0,Je=0,Me=0,Te=0,Ue=0,Se=0,Oe=0,ze=0,je=0,He=0,xe=0,Pe=0,Le=0,Ke=0,qe=0,$e=0,Ar=0,er=0,rr=0,ir=0,fr=0,nr=0;if(ur=(pe=ur)+80|0,me=(ve=pe)+40|0,ge=pe+32|0,Ze=(e|=0)?2:1,ke=e?1:2,de=0|ar[(he=(A|=0)+40|0)>>2],ye=0|ar[A+5760>>2],nr=(0|n)<(0|(nr=0|ar[(we=A+10472|0)>>2]))?n:nr,(0|(fr=(0|i)<(0|(fr=0|ar[A+10476>>2]))?i:fr))<=(0|r))ur=pe;else{TA=(0|f)<(0|nr),UA=A+10460|0,SA=A+4|0,OA=A+10368|0,zA=A+10372|0,jA=A+10376|0,HA=A+10360|0,xA=A+10348|0,PA=A+10352|0,LA=A+10356|0,KA=A+10340|0,qA=A+48|0,$A=ye+-8|0,Ae=4+me|0,ee=2+me|0,re=28+me|0,ie=26+me|0,fe=24+me|0,ne=ve+4|0,te=ve+2|0,oe=ve+28|0,ae=ve+26|0,ce=ve+24|0,le=6+me|0,ue=ve+6|0,be=30+me|0,se=ve+30|0,DA=A+5480|0,JA=2+ge|0,MA=4+ge|0,x=65535+(H=1<<ye)|0,YA=ve+8|0,L=de-1|0,y=8+me|0,K=de-2|0,Z=10+me|0,q=de-3|0,B=12+me|0,$=de-4|0,W=14+me|0,QA=ve+16|0,AA=de<<2,eA=(rr=P=de<<1)+-1|0,X=16+me|0,rA=rr+-2|0,p=18+me|0,iA=rr+-3|0,E=20+me|0,rr=rr+-4|0,I=22+me|0,fA=6*de|0,nA=(ir=3*de|0)+-1|0,tA=ir+-2|0,oA=ir+-3|0,ir=ir+-4|0,aA=de<<1,cA=0|br(de,-3),lA=de<<1,uA=0|br(de,-3),kA=0-de|0,hA=ve+2|0,wA=0-(sA=bA=de<<1)|0,t=2+me|0,vA=ve+4|0,mA=0-(dA=3*de|0)|0,u=4+me|0,gA=ve+6|0,ZA=0-(er=de<<2)|0,h=6+me|0,pA=ve+8|0,yA=1-de|0,l=8+me|0,BA=1+de|0,EA=ve+10|0,XA=1-sA|0,o=10+me|0,WA=1|sA,IA=ve+12|0,CA=1-dA|0,b=12+me|0,GA=1+dA|0,VA=ve+14|0,FA=1-er|0,w=14+me|0,RA=ve+16|0,NA=2-de|0,k=16+me|0,_A=2+de|0,C=ve+18|0,G=2-sA|0,a=18+me|0,V=2+sA|0,F=ve+20|0,R=2-dA|0,s=20+me|0,N=2+dA|0,_=ve+22|0,Y=2-er|0,v=22+me|0,Q=ve+24|0,D=3-de|0,g=24+me|0,J=3+de|0,M=ve+26|0,T=3-sA|0,c=26+me|0,U=3+sA|0,S=ve+28|0,O=3-dA|0,d=28+me|0,z=3+dA|0,j=ve+30|0,er=3-er|0,m=30+me|0;A:for(;;){if(TA){Le=(0|(Pe=r<<2))/4|0,Ke=Pe+-1|0,xe=e?Pe:Ke,He=f;do{if(Xe=He<<2,We=(0|br(0|ar[we>>2],Le))+((0|Xe)/4|0)|0,(We=3&tr[(0|ar[UA>>2])+We>>0])<<24>>24){if(Ar=(qe=0|ar[SA>>2])+($e=(0|br(0|ar[he>>2],Pe))+Xe<<1)|0,Ee=e?(i=lr[(i=(A=i=Ar)+4|0)>>1]|lr[i+2>>1]<<16,ar[(n=ve)>>2]=lr[A>>1]|lr[A+2>>1]<<16,ar[n+4>>2]=i,or[me>>1]=0|or[Ar+-2>>1],or[ee>>1]=0|or[Ar+-4>>1],or[Ae>>1]=0|or[Ar+-6>>1],or[le>>1]=0|or[Ar+-8>>1],n=lr[(n=(i=n=qe+($e+P)|0)+4|0)>>1]|lr[n+2>>1]<<16,ar[(A=YA)>>2]=lr[i>>1]|lr[i+2>>1]<<16,ar[A+4>>2]=n,or[y>>1]=0|or[Ar+(L<<1)>>1],or[Z>>1]=0|or[Ar+(K<<1)>>1],or[B>>1]=0|or[Ar+(q<<1)>>1],or[W>>1]=0|or[Ar+($<<1)>>1],A=lr[(A=(n=A=qe+($e+AA)|0)+4|0)>>1]|lr[A+2>>1]<<16,ar[(i=QA)>>2]=lr[n>>1]|lr[n+2>>1]<<16,ar[i+4>>2]=A,or[X>>1]=0|or[Ar+(eA<<1)>>1],or[p>>1]=0|or[Ar+(rA<<1)>>1],or[E>>1]=0|or[Ar+(iA<<1)>>1],or[I>>1]=0|or[Ar+(rr<<1)>>1],i=lr[(i=(A=i=qe+($e+fA)|0)+4|0)>>1]|lr[i+2>>1]<<16,ar[(n=ce)>>2]=lr[A>>1]|lr[A+2>>1]<<16,ar[n+4>>2]=i,or[fe>>1]=0|or[Ar+(nA<<1)>>1],n=ie,i=be,A=tA,ye=ir,Be=re,oA):(or[ve>>1]=0|or[Ar>>1],or[me>>1]=0|or[Ar+(kA<<1)>>1],or[hA>>1]=0|or[Ar+(de<<1)>>1],or[t>>1]=0|or[Ar+(wA<<1)>>1],or[vA>>1]=0|or[Ar+(sA<<1)>>1],or[u>>1]=0|or[Ar+(mA<<1)>>1],or[gA>>1]=0|or[Ar+(dA<<1)>>1],or[h>>1]=0|or[Ar+(ZA<<1)>>1],or[pA>>1]=0|or[Ar+2>>1],or[l>>1]=0|or[Ar+(yA<<1)>>1],or[EA>>1]=0|or[Ar+(BA<<1)>>1],or[o>>1]=0|or[Ar+(XA<<1)>>1],or[IA>>1]=0|or[Ar+(WA<<1)>>1],or[b>>1]=0|or[Ar+(CA<<1)>>1],or[VA>>1]=0|or[Ar+(GA<<1)>>1],or[w>>1]=0|or[Ar+(FA<<1)>>1],or[RA>>1]=0|or[Ar+4>>1],or[k>>1]=0|or[Ar+(NA<<1)>>1],or[C>>1]=0|or[Ar+(_A<<1)>>1],or[a>>1]=0|or[Ar+(G<<1)>>1],or[F>>1]=0|or[Ar+(V<<1)>>1],or[s>>1]=0|or[Ar+(R<<1)>>1],or[_>>1]=0|or[Ar+(N<<1)>>1],or[v>>1]=0|or[Ar+(Y<<1)>>1],or[Q>>1]=0|or[Ar+6>>1],or[g>>1]=0|or[Ar+(D<<1)>>1],or[M>>1]=0|or[Ar+(J<<1)>>1],or[c>>1]=0|or[Ar+(T<<1)>>1],or[S>>1]=0|or[Ar+(U<<1)>>1],n=d,i=m,A=O,ye=er,Be=j,z),or[n>>1]=0|or[Ar+(A<<1)>>1],or[Be>>1]=0|or[Ar+(Ee<<1)>>1],or[i>>1]=0|or[Ar+(ye<<1)>>1],n=Pe>>(Ve=0|ar[OA>>2]),(0|(Re=Xe>>Ve))<=-1){n=13;break A}if((0|(_e=0|ar[zA>>2]))<=(0|Re)){n=13;break A}if((0|n)<=-1){n=16;break A}if((0|(Ne=0|ar[jA>>2]))<=(0|n)){n=16;break A}if(Qe=0|ar[HA>>2],Ye=(Fe=0|br(_e,n))+Re|0,Ge=Xe+-1|0,i=xe>>Ve,!(-1<(0|(n=(e?Ge:Xe)>>Ve))&(0|n)<(0|_e))){n=18;break A}if(!(-1<(0|i)&(0|i)<(0|Ne))){n=20;break A}if(ye=Qe+(3*((0|br(_e,i))+n|0)|0)+2|0,ye=1+(0|tr[Qe+(3*Ye|0)+2>>0])+(0|tr[ye>>0])>>1,n=Xe>>(i=0|ar[xA>>2]),i=Pe>>i,(0|n)<=-1){n=23;break A}if((0|(A=0|ar[PA>>2]))<=(0|n)){n=23;break A}if((0|i)<=-1){n=26;break A}if((0|i)>=(0|ar[LA>>2])){n=26;break A}je=(0|ar[KA>>2])+(24*((0|br(A,i))+n|0)|0)+2|0,je=0|ar[(0|ar[qA>>2])+(lr[je>>1]<<2)>>2],Ce=(0|ar[je+756>>2])+ye|0,Ce=cr[48154+((0|Ce)<0?0:(0|Ce)<51?Ce:51)>>0]<<$A,je=(We<<1&255)-2+ye+(0|ar[je+760>>2])|0,je=cr[48100+((0|je)<0?0:(0|je)<53?je:53)>>0]<<$A,Je=(0|(Je=(65535&(Te=0|or[Ae>>1]))-((65535&(Ue=0|or[ee>>1]))<<1)+(n=65535&(ye=0|or[me>>1]))|0))<0?0-Je|0:Je,Be=0|lr[fe>>1],De=(0|(De=(0|lr[re>>1])-(lr[ie>>1]<<1)+Be|0))<0?0-De|0:De,Me=(0|(Me=(65535&(Ie=0|or[ne>>1]))-((65535&(Oe=0|or[te>>1]))<<1)+(i=65535&(Se=0|or[ve>>1]))|0))<0?0-Me|0:Me,Ee=0|lr[ce>>1],A=Me+Je|0,Xe=(ze=(0|(ze=(0|lr[oe>>1])-(lr[ae>>1]<<1)+Ee|0))<0?0-ze|0:ze)+De|0,Je=De+Je|0,Me=ze+Me|0;e:do{if((Xe+A|0)<(0|Ce)){We=Ce>>2;do{if((A<<1|0)<(0|We)){if(ze=(0|lr[le>>1])-n|0,(Ce>>3|0)<=(((0|(De=i-(0|lr[ue>>1])|0))<0?0-De|0:De)+((0|ze)<0?0-ze|0:ze)|0)){i=0;break}i=(0|((0|(i=n-i|0))<0?0-i|0:i))<(1+(5*je|0)>>1|0)}else i=0}while(0);do{if((Xe<<1|0)<(0|We)){if(ze=(0|lr[be>>1])-Be|0,(Ce>>3|0)<=(((0|(De=Ee-(0|lr[se>>1])|0))<0?0-De|0:De)+((0|ze)<0?0-ze|0:ze)|0)){n=0;break}n=(0|((0|(n=Be-Ee|0))<0?0-n|0:n))<(1+(5*je|0)>>1|0)}else n=0}while(0);if(ze=i&n,Ee=(Ce>>1)+Ce>>3,A=(Be=0|tr[DA>>0])<<24>>24!=0,e){if(n=-1<(0|(i=Ge>>Ve)),A){if(!(n&(0|i)<(0|_e))){n=37;break A}A=(65535&(cr[(A=Qe+(3*(Fe+i|0)|0)|0)>>0]|cr[A+1>>0]<<8))>>>10&1^1}else{if(!n){n=41;break A}A=1}if((0|_e)<=(0|i)){n=41;break A}i=Qe+(3*(Fe+i|0)|0)|0,De=(n=Be<<24>>24?0==(1024&(cr[(n=Qe+(3*Ye|0)|0)>>0]|cr[n+1>>0]<<8)):1)&0==(2048&(cr[(De=Qe+(3*Ye|0)|0)>>0]|cr[De+1>>0]<<8)),Ne=A<<24>>24?0==(2048&(cr[i>>0]|cr[i+1>>0]<<8)):0}else{if(n=-1<(0|(i=Ke>>Ve)),A){if(!(n&(0|i)<(0|Ne))){n=47;break A}A=Qe+(3*((0|br(_e,i))+Re|0)|0)|0,A=0==(1024&(cr[A>>0]|cr[A+1>>0]<<8))}else{if(!n){n=51;break A}A=1}if((0|Ne)<=(0|i)){n=51;break A}i=Qe+(3*((0|br(_e,i))+Re|0)|0)|0,De=(n=Be<<24>>24?0==(1024&(cr[(n=Qe+(3*Ye|0)|0)>>0]|cr[n+1>>0]<<8)):1)&0==(2048&(cr[(De=Qe+(3*Ye|0)|0)>>0]|cr[De+1>>0]<<8)),Ne=A&0==(2048&(cr[i>>0]|cr[i+1>>0]<<8))}for(_e=je<<1,Ye=10*je|0,Qe=0-je|0,Re=(0|Ee)<=(0|Je)|1^Ne,Fe=(0|Ee)<=(0|Me)|1^De,Ve=0-(Ge=je>>1)|0,Ce=0,Xe=Te,Ee=Ue,i=Se,A=Oe;;){We=qe+($e+(0|br(P,Ce)))|0;do{if(ze){Se=0|or[ve+(Ce<<3)+6>>1],Me=65535&Ee,Ue=65535&A,Ee=(Te=65535&ye)+_e|0,Be=65535&((0|(Be=(A=4+(Te<<1)|0)+(Me<<1)+(Oe=65535&Xe)+(n=(i&=65535)<<1)+Ue>>3))<(0|(Je=Te-_e|0))?Je:(0|Ee)<(0|Be)?Ee:Be),Xe=Me+_e|0,Ee=65535&((0|(Ee=(Te+2+Me+Oe+i|0)>>>2))<(0|(Je=Me-_e|0))?Je:(0|Xe)<(0|Ee)?Xe:Ee),Xe=(Te+4+Me+(3*Oe|0)+i+(lr[me+(Ce<<3)+6>>1]<<1)|0)>>>3,Je=Oe-_e|0,Oe=Oe+_e|0,Xe=65535&((0|Xe)<(0|Je)?Je:(0|Oe)<(0|Xe)?Oe:Xe),n=A+Me+n+(Ue<<1)+(Oe=65535&Ie)>>3,A=i+_e|0,n=65535&((0|n)<(0|(Me=i-_e|0))?Me:(0|A)<(0|n)?A:n),or[ge>>1]=n,A=i+Te+Ue|0,Te=Ue-_e|0,Ue=Ue+_e|0,i=65535&((0|(i=(Oe+2+A|0)>>>2))<(0|Te)?Te:(0|Ue)<(0|i)?Ue:i),or[JA>>1]=i,A=(A+4+(3*Oe|0)+((65535&Se)<<1)|0)>>>3,Se=Oe-_e|0,Oe=Oe+_e|0,A=65535&((0|A)<(0|Se)?Se:(0|Oe)<(0|A)?Oe:A),or[MA>>1]=A;do{if(e){if(ye=0|br(Ce,de),!Ne){if(!De)break;or[We>>1]=0|or[ge>>1],or[We+2>>1]=0|or[2+ge>>1],or[We+4>>1]=0|or[4+ge>>1];break}if(or[Ar+(ye+-1<<1)>>1]=Be,De){or[Ar+(ye<<1)>>1]=n,or[Ar+(ye+-2<<1)>>1]=Ee,or[Ar+(ye+1<<1)>>1]=i,or[Ar+(ye+-3<<1)>>1]=Xe,or[Ar+(ye+2<<1)>>1]=A;break}or[Ar+(ye+-2<<1)>>1]=Ee,or[Ar+(ye+-3<<1)>>1]=Xe;break}if(!Ne){if(!De)break;or[Ar+(Ce<<1)>>1]=n,or[Ar+(de+Ce<<1)>>1]=i,or[Ar+(bA+Ce<<1)>>1]=A;break}if(or[Ar+(Ce-de<<1)>>1]=Be,De){or[Ar+(Ce<<1)>>1]=n,or[Ar+(Ce-aA<<1)>>1]=Ee,or[Ar+(de+Ce<<1)>>1]=i,or[Ar+(Ce+cA<<1)>>1]=Xe,or[Ar+(aA+Ce<<1)>>1]=A;break}or[Ar+(Ce-lA<<1)>>1]=Ee,or[Ar+(Ce+uA<<1)>>1]=Xe;break}while(0)}else{if((0|Ye)<=(0|((0|(n=8+(9*((Be=65535&i)-(ye&=65535)|0)|0)+(0|br((A&=65535)-(i=65535&Ee)|0,-3))>>4))<0?0-n|0:n)))break;n=(0|n)<(0|Qe)?Qe:(0|je)<(0|n)?je:n;do{if(e){if(Ne&&(Se=n+ye|0,Oe=Ar+((0|br(Ce,de))-1<<1)|0,or[Oe>>1]=(0|Se)<0?0:65535&((0|Se)<(0|H)?Se:x)),!De)break;Se=Be-n|0,Oe=Ar+((0|br(Ce,de))<<1)|0,or[Oe>>1]=(0|Se)<0?0:65535&((0|Se)<(0|H)?Se:x)}else{if(Ne&&(Oe=n+ye|0,or[Ar+(Ce-de<<1)>>1]=(0|Oe)<0?0:65535&((0|Oe)<(0|H)?Oe:x)),!De)break;Oe=Be-n|0,or[Ar+(Ce<<1)>>1]=(0|Oe)<0?0:65535&((0|Oe)<(0|H)?Oe:x)}}while(0);if(Re||(Se=((0|(Oe=(Se=n+(((ye+1+(65535&Xe)|0)>>>1)-i)|0)>>1))<(0|Ve)?Ve:((0|Ge)<(0|Oe)?je:Se)>>1)+i|0,Oe=(0|br(Ce,de))-2|0,or[Ar+((e?Oe:Ce-P|0)<<1)>>1]=(0|Se)<0?0:65535&((0|Se)<(0|H)?Se:x)),Fe)break;Se=((0|(Oe=(Se=((Be+1+(65535&Ie)|0)>>>1)-A-n|0)>>1))<(0|Ve)?Ve:((0|Ge)<(0|Oe)?je:Se)>>1)+A|0,Oe=0|br(e?Ce:1,de),or[Ar+(Oe+(e?1:Ce)<<1)>>1]=(0|Se)<0?0:65535&((0|Se)<(0|H)?Se:x)}}while(0);if(4==(0|(n=Ce+1|0)))break e;Xe=0|or[me+((Ce=n)<<3)+4>>1],Ee=0|or[me+(n<<3)+2>>1],ye=0|or[me+(n<<3)>>1],i=0|or[ve+(n<<3)>>1],A=0|or[ve+(n<<3)+2>>1],Ie=0|or[ve+(n<<3)+4>>1]}}}while(0)}He=He+Ze|0}while((0|He)<(0|nr))}if((0|fr)<=(0|(r=r+ke|0))){n=5;break}}switch(0|n){case 5:return void(ur=pe);case 13:sr(48482,48519,118,48539);break;case 16:sr(48543,48519,119,48539);break;case 18:sr(48482,48519,118,48539);break;case 20:sr(48543,48519,119,48539);break;case 23:sr(48482,48519,118,48539);break;case 26:sr(48543,48519,119,48539);break;case 37:case 41:sr(48482,48519,118,48539);break;case 47:case 51:sr(48543,48519,119,48539)}}}function Bt(A,e,r,i,f,n){r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z,j,H,x,P,L,K,q,$,AA,eA,rA,iA,fA,nA,tA,oA,aA,cA,lA,uA,bA,sA,dA,kA,hA,wA,vA,mA,gA,ZA,pA,yA,BA,EA,XA,WA,IA,CA,GA,VA,FA,RA,NA,_A,YA,QA,DA,JA,MA,TA,UA=0,SA=0,OA=0,zA=0,jA=0,HA=0,xA=0,PA=0,LA=0,KA=0,qA=0,$A=0,Ae=0,ee=0,re=0,ie=0,fe=0,ne=0,te=0,oe=0,ae=0,ce=0,le=0,ue=0,be=0,se=0,de=0,ke=0,he=0,we=0,ve=0,me=0,ge=0,Ze=0,pe=0,ye=0,Be=0,Ee=0,Xe=0,We=0,Ie=0;if(ur=(TA=ur)+48|0,QA=TA+24|0,DA=TA+8|0,JA=TA,MA=(e|=0)?2:1,NA=e?1:2,RA=0|ar[(_A=(A|=0)+40|0)>>2],UA=0|ar[A+5760>>2],Ie=(0|n)<(0|(Ie=0|ar[(YA=A+10472|0)>>2]))?n:Ie,(0|(We=(0|i)<(0|(We=0|ar[A+10476>>2]))?i:We))<=(0|r))ur=TA;else{tA=(0|f)<(0|Ie),oA=A+10460|0,aA=A+4|0,cA=A+10368|0,lA=A+10372|0,uA=A+10376|0,bA=A+10360|0,sA=A+10348|0,dA=A+10352|0,kA=A+10356|0,hA=A+10340|0,wA=A+48|0,vA=UA+-8|0,mA=2+DA|0,gA=1+DA|0,ZA=14+DA|0,pA=13+DA|0,yA=12+DA|0,BA=2+QA|0,EA=1+QA|0,XA=14+QA|0,WA=13+QA|0,IA=12+QA|0,CA=3+DA|0,GA=3+QA|0,VA=15+DA|0,FA=15+QA|0,iA=A+5480|0,fA=JA+1|0,nA=JA+2|0,L=255+(P=1<<UA)|0,pe=3*RA|0,q=ye=K=RA<<1,$=0|br(RA,-3),AA=RA<<1,eA=0|br(RA,-3),Be=rA=RA<<1,Ee=3*RA|0,Xe=RA<<2,a=e?-1:0-RA|0,t=e?1:RA,c=e?-2:0-Be|0,l=e?2:Be,u=e?-3:0-Ee|0,b=e?3:Ee,s=e?-4:0-Xe|0,o=e?RA:1,d=4+QA|0,k=e?RA-1|0:1-RA|0,S=4+DA|0,h=1+RA|0,w=5+QA|0,v=e?RA-2|0:1-Be|0,T=5+DA|0,m=e?2+RA|0:1|Be,g=6+QA|0,Z=e?RA-3|0:1-Ee|0,O=6+DA|0,p=e?3+RA|0:Ee+1|0,y=7+QA|0,B=e?RA-4|0:1-Xe|0,H=7+DA|0,E=e?ye:2,X=8+QA|0,W=e?ye+-1|0:2-RA|0,j=8+DA|0,I=e?1|ye:2+RA|0,C=9+QA|0,G=e?ye+-2|0:2-Be|0,U=9+DA|0,V=(e?ye:Be)+2|0,F=10+QA|0,R=e?ye+-3|0:2-Ee|0,z=10+DA|0,N=e?ye+3|0:Ee+2|0,_=11+QA|0,ye=e?ye+-4|0:2-Xe|0,x=11+DA|0,Y=e?pe:3,Q=e?pe+-1|0:3-RA|0,D=e?pe+1|0:3+RA|0,J=e?pe+-2|0:3-Be|0,Be=e?pe+2|0:Be+3|0,M=e?pe+-3|0:3-Ee|0,Ee=(e?pe:Ee)+3|0,Xe=e?pe+-4|0:3-Xe|0;A:for(;;){if(tA){ve=(0|(we=r<<2))/4|0,me=we+-1|0,he=e?we:me,ke=f;do{if(A=ke<<2,SA=(0|br(0|ar[YA>>2],ve))+((0|A)/4|0)|0,(SA=3&tr[(0|ar[oA>>2])+SA>>0])<<24>>24){if(pe=(ge=0|ar[aA>>2])+(Ze=(0|br(0|ar[_A>>2],we))+A|0)|0,tr[QA>>0]=0|tr[pe>>0],tr[DA>>0]=0|tr[pe+a>>0],tr[EA>>0]=0|tr[pe+t>>0],tr[gA>>0]=0|tr[pe+c>>0],tr[BA>>0]=0|tr[pe+l>>0],tr[mA>>0]=0|tr[pe+u>>0],tr[GA>>0]=0|tr[pe+b>>0],tr[CA>>0]=0|tr[pe+s>>0],tr[d>>0]=0|tr[pe+o>>0],tr[S>>0]=0|tr[pe+k>>0],tr[w>>0]=0|tr[pe+h>>0],tr[T>>0]=0|tr[pe+v>>0],tr[g>>0]=0|tr[pe+m>>0],tr[O>>0]=0|tr[pe+Z>>0],tr[y>>0]=0|tr[pe+p>>0],tr[H>>0]=0|tr[pe+B>>0],tr[X>>0]=0|tr[pe+E>>0],tr[j>>0]=0|tr[pe+W>>0],tr[C>>0]=0|tr[pe+I>>0],tr[U>>0]=0|tr[pe+G>>0],tr[F>>0]=0|tr[pe+V>>0],tr[z>>0]=0|tr[pe+R>>0],tr[_>>0]=0|tr[pe+N>>0],tr[x>>0]=0|tr[pe+ye>>0],KA=0|tr[pe+Y>>0],tr[IA>>0]=KA,zA=0|tr[pe+Q>>0],tr[yA>>0]=zA,qA=0|tr[pe+D>>0],tr[WA>>0]=qA,jA=0|tr[pe+J>>0],tr[pA>>0]=jA,$A=0|tr[pe+Be>>0],tr[XA>>0]=$A,HA=0|tr[pe+M>>0],tr[ZA>>0]=HA,re=0|tr[pe+Ee>>0],tr[FA>>0]=re,ee=0|tr[pe+Xe>>0],tr[VA>>0]=ee,n=we>>(fe=0|ar[cA>>2]),(0|(te=A>>fe))<=-1){n=10;break A}if((0|(ae=0|ar[lA>>2]))<=(0|te)){n=10;break A}if((0|n)<=-1){n=13;break A}if((0|(oe=0|ar[uA>>2]))<=(0|n)){n=13;break A}if(le=0|ar[bA>>2],ce=(ne=0|br(ae,n))+te|0,ie=A+-1|0,i=he>>fe,!(-1<(0|(n=(e?ie:A)>>fe))&(0|n)<(0|ae))){n=15;break A}if(!(-1<(0|i)&(0|i)<(0|oe))){n=17;break A}if(UA=le+(3*((0|br(ae,i))+n|0)|0)+2|0,UA=1+(0|tr[le+(3*ce|0)+2>>0])+(0|tr[UA>>0])>>1,n=A>>(i=0|ar[sA>>2]),i=we>>i,(0|n)<=-1){n=20;break A}if((0|(A=0|ar[dA>>2]))<=(0|n)){n=20;break A}if((0|i)<=-1){n=23;break A}if((0|i)>=(0|ar[kA>>2])){n=23;break A}de=(0|ar[hA>>2])+(24*((0|br(A,i))+n|0)|0)+2|0,de=0|ar[(0|ar[wA>>2])+(lr[de>>1]<<2)>>2],Ae=(0|ar[de+756>>2])+UA|0,Ae=cr[48154+((0|Ae)<0?0:(0|Ae)<51?Ae:51)>>0]<<vA,de=(SA<<1&255)-2+UA+(0|ar[de+760>>2])|0,de=cr[48100+((0|de)<0?0:(0|de)<53?de:53)>>0]<<vA,SA=(0|(SA=(255&(xA=0|tr[mA>>0]))-((255&(OA=0|tr[gA>>0]))<<1)+(PA=255&(UA=0|tr[DA>>0]))|0))<0?0-SA|0:SA,HA=(0|(HA=(255&HA)-((255&jA)<<1)+(LA=255&zA)|0))<0?0-HA|0:HA,n=(se=(0|(se=(255&(jA=0|tr[BA>>0]))-((255&(be=0|tr[EA>>0]))<<1)+(i=255&(ue=0|tr[QA>>0]))|0))<0?0-se|0:se)+SA|0,A=(KA=(0|(KA=(255&$A)-((255&qA)<<1)+(zA=255&KA)|0))<0?0-KA|0:KA)+HA|0,HA=HA+SA|0,KA=KA+se|0;e:do{if((A+n|0)<(0|Ae)){SA=Ae>>2;do{if((n<<1|0)<(0|SA)){if(se=(0|cr[CA>>0])-PA|0,(Ae>>3|0)<=(((0|($A=i-(0|cr[GA>>0])|0))<0?0-$A|0:$A)+((0|se)<0?0-se|0:se)|0)){i=0;break}i=(0|((0|(i=PA-i|0))<0?0-i|0:i))<(1+(5*de|0)>>1|0)}else i=0}while(0);do{if((A<<1|0)<(0|SA)){if((Ae>>3|0)<=(((0|(re=zA-(255&re)|0))<0?0-re|0:re)+((0|(se=(255&ee)-LA|0))<0?0-se|0:se)|0)){n=0;break}n=(0|((0|(n=LA-zA|0))<0?0-n|0:n))<(1+(5*de|0)>>1|0)}else n=0}while(0);if(se=i&n,zA=(Ae>>1)+Ae>>3,A=(SA=0|tr[iA>>0])<<24>>24!=0,e){if(n=-1<(0|(i=ie>>fe)),A){if(!(n&(0|i)<(0|ae))){n=34;break A}A=(65535&(cr[(A=le+(3*(ne+i|0)|0)|0)>>0]|cr[A+1>>0]<<8))>>>10&1^1}else{if(!n){n=38;break A}A=1}if((0|ae)<=(0|i)){n=38;break A}i=le+(3*(ne+i|0)|0)|0,fe=(n=SA<<24>>24?0==(1024&(cr[(n=le+(3*ce|0)|0)>>0]|cr[n+1>>0]<<8)):1)&0==(2048&(cr[(fe=le+(3*ce|0)|0)>>0]|cr[fe+1>>0]<<8)),Ae=A<<24>>24?0==(2048&(cr[i>>0]|cr[i+1>>0]<<8)):0}else{if(n=-1<(0|(i=me>>fe)),A){if(!(n&(0|i)<(0|oe))){n=44;break A}A=le+(3*((0|br(ae,i))+te|0)|0)|0,A=0==(1024&(cr[A>>0]|cr[A+1>>0]<<8))}else{if(!n){n=48;break A}A=1}if((0|oe)<=(0|i)){n=48;break A}i=le+(3*((0|br(ae,i))+te|0)|0)|0,fe=(n=SA<<24>>24?0==(1024&(cr[(n=le+(3*ce|0)|0)>>0]|cr[n+1>>0]<<8)):1)&0==(2048&(cr[(fe=le+(3*ce|0)|0)>>0]|cr[fe+1>>0]<<8)),Ae=A&0==(2048&(cr[i>>0]|cr[i+1>>0]<<8))}for(ee=de<<1,re=10*de|0,ie=0-de|0,$A=(0|zA)<=(0|HA)|1^Ae,qA=(0|zA)<=(0|KA)|1^fe,KA=0-(LA=de>>1)|0,PA=0,i=ue,A=be;;){zA=ge+(Ze+(HA=0|br(RA,PA)))|0;do{if(se){ue=0|tr[QA+(PA<<2)+3>>0],le=255&A,SA=(ce=255&UA)+ee|0,UA=255&((0|(UA=(A=4+(ce<<1)|0)+((ae=255&OA)<<1)+(be=255&xA)+(n=(i&=255)<<1)+le>>3))<(0|(oe=ce-ee|0))?oe:(0|SA)<(0|UA)?SA:UA),OA=ae+ee|0,SA=255&((0|(SA=(ce+2+ae+be+i|0)>>>2))<(0|(oe=ae-ee|0))?oe:(0|OA)<(0|SA)?OA:SA),OA=(ce+4+ae+(3*be|0)+i+(cr[DA+(PA<<2)+3>>0]<<1)|0)>>>3,oe=be-ee|0,be=be+ee|0,OA=255&((0|OA)<(0|oe)?oe:(0|be)<(0|OA)?be:OA),n=A+ae+n+(le<<1)+(be=255&jA)>>3,A=i+ee|0,n=255&((0|n)<(0|(ae=i-ee|0))?ae:(0|A)<(0|n)?A:n),tr[JA>>0]=n,A=i+ce+le|0,ce=le-ee|0,le=le+ee|0,i=255&((0|(i=(be+2+A|0)>>>2))<(0|ce)?ce:(0|le)<(0|i)?le:i),tr[fA>>0]=i,A=(A+4+(3*be|0)+((255&ue)<<1)|0)>>>3,ue=be-ee|0,be=be+ee|0,A=255&((0|A)<(0|ue)?ue:(0|be)<(0|A)?be:A),tr[nA>>0]=A;do{if(e){if(!Ae){if(!fe)break;tr[zA>>0]=0|tr[JA>>0],tr[zA+1>>0]=0|tr[JA+1>>0],tr[zA+2>>0]=0|tr[JA+2>>0];break}if(tr[pe+(HA+-1)>>0]=UA,fe){tr[pe+HA>>0]=n,tr[pe+(HA+-2)>>0]=SA,tr[pe+(HA+1)>>0]=i,tr[pe+(HA+-3)>>0]=OA,tr[pe+(HA+2)>>0]=A;break}tr[pe+(HA+-2)>>0]=SA,tr[pe+(HA+-3)>>0]=OA;break}if(!Ae){if(!fe)break;tr[pe+PA>>0]=n,tr[pe+(RA+PA)>>0]=i,tr[pe+(rA+PA)>>0]=A;break}if(tr[pe+(PA-RA)>>0]=UA,fe){tr[pe+PA>>0]=n,tr[pe+(PA-q)>>0]=SA,tr[pe+(RA+PA)>>0]=i,tr[pe+(PA+$)>>0]=OA,tr[pe+(q+PA)>>0]=A;break}tr[pe+(PA-AA)>>0]=SA,tr[pe+(PA+eA)>>0]=OA;break}while(0)}else{if((0|re)<=(0|((0|(n=8+(9*((SA=255&i)-(UA&=255)|0)|0)+(0|br((A&=255)-(i=255&OA)|0,-3))>>4))<0?0-n|0:n)))break;n=(0|n)<(0|ie)?ie:(0|de)<(0|n)?de:n;do{if(e){if(Ae&&(be=n+UA|0,tr[pe+(HA+-1)>>0]=(0|be)<0?0:255&((0|be)<(0|P)?be:L)),!fe)break;be=SA-n|0,tr[pe+HA>>0]=(0|be)<0?0:255&((0|be)<(0|P)?be:L)}else{if(Ae&&(be=n+UA|0,tr[pe+(PA-RA)>>0]=(0|be)<0?0:255&((0|be)<(0|P)?be:L)),!fe)break;be=SA-n|0,tr[pe+PA>>0]=(0|be)<0?0:255&((0|be)<(0|P)?be:L)}}while(0);if($A||(be=((0|(ue=(be=n+(((UA+1+(255&xA)|0)>>>1)-i)|0)>>1))<(0|KA)?KA:((0|LA)<(0|ue)?de:be)>>1)+i|0,tr[pe+(e?HA+-2|0:PA-K|0)>>0]=(0|be)<0?0:255&((0|be)<(0|P)?be:L)),qA)break;ue=((0|(be=(ue=((SA+1+(255&jA)|0)>>>1)-A-n|0)>>1))<(0|KA)?KA:((0|LA)<(0|be)?de:ue)>>1)+A|0,be=0|br(e?PA:1,RA),tr[pe+(be+(e?1:PA))>>0]=(0|ue)<0?0:255&((0|ue)<(0|P)?ue:L)}}while(0);if(4==(0|(n=PA+1|0)))break e;xA=0|tr[DA+((PA=n)<<2)+2>>0],OA=0|tr[DA+(n<<2)+1>>0],UA=0|tr[DA+(n<<2)>>0],i=0|tr[QA+(n<<2)>>0],A=0|tr[QA+(n<<2)+1>>0],jA=0|tr[QA+(n<<2)+2>>0]}}}while(0)}ke=ke+MA|0}while((0|ke)<(0|Ie))}if((0|We)<=(0|(r=r+NA|0))){n=5;break}}switch(0|n){case 5:return void(ur=TA);case 10:sr(48482,48519,118,48539);break;case 13:sr(48543,48519,119,48539);break;case 15:sr(48482,48519,118,48539);break;case 17:sr(48543,48519,119,48539);break;case 20:sr(48482,48519,118,48539);break;case 23:sr(48543,48519,119,48539);break;case 34:case 38:sr(48482,48519,118,48539);break;case 44:case 48:sr(48543,48519,119,48539)}}}function Et(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z,j,H,x,P,L,K,q,$,AA,eA,rA,iA,fA,nA,tA,oA,aA,cA,lA,uA,bA,sA,dA,kA,hA,wA,vA,mA,gA,ZA,pA,yA,BA,EA,XA,WA,IA,CA,GA,VA,FA,RA,NA,_A,YA,QA,DA,JA,MA,TA=0,UA=0,SA=0,OA=0,zA=0,jA=0,HA=0,xA=0,PA=0,LA=0,KA=0,qA=0,$A=0,Ae=0,ee=0,re=0,ie=0,fe=0,ne=0,te=0,oe=0,ae=0,ce=0,le=0,ue=0;if(ur=(MA=ur)+32|0,QA=MA+16|0,DA=MA,JA=0|ar[(A|=0)+5780>>2],FA=0|ar[A+5784>>2],RA=0|br(JA,e?2:1),NA=0|br(FA,e?1:2),VA=0|ar[(_A=A+44|0)>>2],ue=(0|n)<(0|(ue=0|ar[(YA=A+10472|0)>>2]))?n:ue,s=A+5768|0,(0|(le=(0|i)<(0|(le=0|ar[A+10476>>2]))?i:le))<=(0|r))ur=MA;else{d=(0|f)<(0|ue),k=3-JA|0,h=3-FA|0,w=A+10460|0,v=A+5956|0,m=A+5952|0,g=A+10368|0,Z=A+10372|0,p=A+10376|0,y=A+10360|0,B=A+5776|0,E=A+10348|0,X=A+10352|0,W=A+10356|0,I=A+10340|0,C=A+48|0,G=A+5480|0,F=65535+(V=1<<ar[s>>2])|0,R=VA<<1,N=0|br(VA,-2),Y=VA-1|0,J=(Q=VA<<1)-1|0,U=(M=3*VA|0)-1|0,O=1+VA|0,j=VA-2|0,H=1|Q,P=Q-2|0,L=1+M|0,q=M-2|0,cA=VA<<1,dA=3*VA|0,wA=eA=_=DA+2|0,vA=rA=t=2+QA|0,mA=iA=o=10+QA|0,gA=fA=z=DA+10|0,ZA=nA=D=DA+4|0,pA=tA=c=4+QA|0,yA=oA=l=12+QA|0,BA=aA=x=DA+12|0,EA=lA=T=DA+6|0,XA=uA=u=6+QA|0,WA=bA=b=14+QA|0,IA=sA=K=DA+14|0,GA=kA=$=a=8+QA|0,CA=hA=AA=S=DA+8|0;A:for(;;){if(d){ae=(0|(oe=0|br(te=r<<h,FA)))/4|0,ce=oe+-1|0,re=e?oe:ce,Ae=f;do{if(fe=0|br(ie=Ae<<k,JA),n=(0|br(0|ar[YA>>2],ae))+((0|fe)/4|0)|0,1<(255&(n=3&tr[(0|ar[w>>2])+n>>0]))){ne=fe+-1|0,ee=e?ne:fe,qA=(n<<1&255)-2|0,KA=0;do{if(TA=0|ar[(0==(0|KA)?m:v)>>2],$A=(n=0|ar[A+4+((KA=KA+1|0)<<2)>>2])+(i=(0|br(0|ar[_A>>2],te))+ie<<1)|0,e?(or[DA>>1]=0|or[$A>>1],or[QA>>1]=0|or[$A+-2>>1],or[_>>1]=0|or[$A+(VA<<1)>>1],or[t>>1]=0|or[$A+(Y<<1)>>1],or[D>>1]=0|or[$A+(Q<<1)>>1],or[c>>1]=0|or[$A+(J<<1)>>1],or[T>>1]=0|or[$A+(M<<1)>>1],or[u>>1]=0|or[$A+(U<<1)>>1],or[S>>1]=0|or[$A+2>>1],or[a>>1]=0|or[$A+-4>>1],or[z>>1]=0|or[$A+(O<<1)>>1],or[o>>1]=0|or[$A+(j<<1)>>1],or[x>>1]=0|or[$A+(H<<1)>>1],or[l>>1]=0|or[$A+(P<<1)>>1],or[K>>1]=0|or[$A+(L<<1)>>1],or[b>>1]=0|or[$A+(q<<1)>>1]):(PA=N+i|0,xA=lr[(xA=(LA=xA=$A)+4|0)>>1]|lr[xA+2>>1]<<16,ar[(HA=DA)>>2]=lr[LA>>1]|lr[LA+2>>1]<<16,ar[HA+4>>2]=xA,HA=lr[(HA=(xA=HA=n+PA|0)+4|0)>>1]|lr[HA+2>>1]<<16,ar[(LA=QA)>>2]=lr[xA>>1]|lr[xA+2>>1]<<16,ar[LA+4>>2]=HA,LA=lr[(LA=(HA=LA=n+(i+R)|0)+4|0)>>1]|lr[LA+2>>1]<<16,ar[(xA=CA)>>2]=lr[HA>>1]|lr[HA+2>>1]<<16,ar[xA+4>>2]=LA,PA=lr[(PA=(xA=PA=n+(PA+N)|0)+4|0)>>1]|lr[PA+2>>1]<<16,ar[(LA=GA)>>2]=lr[xA>>1]|lr[xA+2>>1]<<16,ar[LA+4>>2]=PA),n=oe>>(SA=0|ar[g>>2]),(0|(zA=fe>>SA))<=-1){n=14;break A}if((0|(HA=0|ar[Z>>2]))<=(0|zA)){n=14;break A}if((0|n)<=-1){n=17;break A}if((0|(jA=0|ar[p>>2]))<=(0|n)){n=17;break A}if(PA=0|ar[y>>2],xA=(OA=0|br(HA,n))+zA|0,i=re>>SA,!(-1<(0|(n=ee>>SA))&(0|n)<(0|HA))){n=19;break A}if(!(-1<(0|i)&(0|i)<(0|jA))){n=21;break A}n=PA+(3*((0|br(HA,i))+n|0)|0)+2|0,n=(1+(0|tr[PA+(3*xA|0)+2>>0])+(0|tr[n>>0])>>1)+TA|0;do{if(1==(0|ar[B>>2])){if(30<=(0|n)){if(42<(0|n)){n=n+-6|0;break}n=0|ar[8020+(n+-30<<2)>>2];break}}else n=(0|n)<51?n:51}while(0);if(i=fe>>(TA=0|ar[E>>2]),TA=oe>>TA,(0|i)<=-1){n=30;break A}if((0|(UA=0|ar[X>>2]))<=(0|i)){n=30;break A}if((0|TA)<=-1){n=33;break A}if((0|TA)>=(0|ar[W>>2])){n=33;break A}LA=(0|ar[I>>2])+(24*((0|br(UA,TA))+i|0)|0)+2|0,LA=qA+n+(0|ar[760+(0|ar[(0|ar[C>>2])+(lr[LA>>1]<<2)>>2])>>2])|0,LA=cr[48100+((0|LA)<0?0:(0|LA)<53?LA:53)>>0]<<(0|ar[s>>2])-8,UA=0==(0|tr[G>>0]);e:do{if(e){if(n=-1<(0|(i=ne>>SA)),UA){if(!n){n=41;break A}TA=1}else{if(!(n&(0|i)<(0|HA))){n=37;break A}TA=0==(1024&(cr[(TA=PA+(3*(OA+i|0)|0)|0)>>0]|cr[TA+1>>0]<<8))}if((0|HA)<=(0|i)){n=41;break A}if(i=PA+(3*(OA+i|0)|0)|0,SA=(n=UA?1:0==(1024&(cr[(n=PA+(3*xA|0)|0)>>0]|cr[n+1>>0]<<8)))&0==(2048&(cr[(SA=PA+(3*xA|0)|0)>>0]|cr[SA+1>>0]<<8)),OA=0-LA|0,TA&0==(2048&(cr[i>>0]|cr[i+1>>0]<<8)))for(n=0;;)if(i=DA+(n<<1)|0,PA=0|lr[QA+(n<<1)>>1],PA=(TA=(0|(TA=4+(0|lr[8+QA+(n<<1)>>1])+((0|lr[i>>1])-PA<<2)-(0|lr[DA+8+(n<<1)>>1])>>3))<(0|OA)?OA:(0|LA)<(0|TA)?LA:TA)+PA|0,UA=0|br(n,VA),or[$A+(UA+-1<<1)>>1]=(0|PA)<0?0:65535&((0|PA)<(0|V)?PA:F),SA&&(PA=(0|lr[i>>1])-TA|0,or[$A+(UA<<1)>>1]=(0|PA)<0?0:65535&((0|PA)<(0|V)?PA:F)),4==(0|(n=n+1|0)))break e;if(n=0|lr[DA>>1],i=4+(0|lr[$>>1])+(n-(0|lr[QA>>1])<<2)-(0|lr[AA>>1])>>3,SA&&(PA=n-((0|i)<(0|OA)?OA:(0|LA)<(0|i)?LA:i)|0,or[$A>>1]=(0|PA)<0?0:65535&((0|PA)<(0|V)?PA:F)),n=0|lr[eA>>1],i=4+(0|lr[iA>>1])+(n-(0|lr[rA>>1])<<2)-(0|lr[fA>>1])>>3,SA&&(PA=n-((0|i)<(0|OA)?OA:(0|LA)<(0|i)?LA:i)|0,or[$A+(VA<<1)>>1]=(0|PA)<0?0:65535&((0|PA)<(0|V)?PA:F)),n=0|lr[nA>>1],i=4+(0|lr[oA>>1])+(n-(0|lr[tA>>1])<<2)-(0|lr[aA>>1])>>3,SA&&(PA=n-((0|i)<(0|OA)?OA:(0|LA)<(0|i)?LA:i)|0,or[$A+(cA<<1)>>1]=(0|PA)<0?0:65535&((0|PA)<(0|V)?PA:F)),n=0|lr[lA>>1],i=4+(0|lr[bA>>1])+(n-(0|lr[uA>>1])<<2)-(0|lr[sA>>1])>>3,!SA)break;LA=n-((0|i)<(0|OA)?OA:(0|LA)<(0|i)?LA:i)|0,or[$A+(dA<<1)>>1]=(0|LA)<0?0:65535&((0|LA)<(0|V)?LA:F)}else{if(n=-1<(0|(i=ce>>SA)),UA){if(!n){n=57;break A}TA=1}else{if(!(n&(0|i)<(0|jA))){n=53;break A}TA=PA+(3*((0|br(HA,i))+zA|0)|0)|0,TA=0==(1024&(cr[TA>>0]|cr[TA+1>>0]<<8))}if((0|jA)<=(0|i)){n=57;break A}if(i=PA+(3*((0|br(HA,i))+zA|0)|0)|0,UA=(n=UA?1:0==(1024&(cr[(n=PA+(3*xA|0)|0)>>0]|cr[n+1>>0]<<8)))&0==(2048&(cr[(UA=PA+(3*xA|0)|0)>>0]|cr[UA+1>>0]<<8)),SA=0-LA|0,!(TA&0==(2048&(cr[i>>0]|cr[i+1>>0]<<8)))){if(!UA)break;xA=(PA=0|lr[DA>>1])-((0|(xA=4+(0|lr[kA>>1])+(PA-(0|lr[QA>>1])<<2)-(0|lr[hA>>1])>>3))<(0|SA)?SA:(0|LA)<(0|xA)?LA:xA)|0,or[$A>>1]=(0|xA)<0?0:65535&((0|xA)<(0|V)?xA:F),PA=(xA=0|lr[wA>>1])-((0|(PA=4+(0|lr[mA>>1])+(xA-(0|lr[vA>>1])<<2)-(0|lr[gA>>1])>>3))<(0|SA)?SA:(0|LA)<(0|PA)?LA:PA)|0,or[$A+2>>1]=(0|PA)<0?0:65535&((0|PA)<(0|V)?PA:F),xA=(PA=0|lr[ZA>>1])-((0|(xA=4+(0|lr[yA>>1])+(PA-(0|lr[pA>>1])<<2)-(0|lr[BA>>1])>>3))<(0|SA)?SA:(0|LA)<(0|xA)?LA:xA)|0,or[$A+4>>1]=(0|xA)<0?0:65535&((0|xA)<(0|V)?xA:F),LA=(xA=0|lr[EA>>1])-((0|(PA=4+(0|lr[WA>>1])+(xA-(0|lr[XA>>1])<<2)-(0|lr[IA>>1])>>3))<(0|SA)?SA:(0|LA)<(0|PA)?LA:PA)|0,or[$A+6>>1]=(0|LA)<0?0:65535&((0|LA)<(0|V)?LA:F);break}for(n=0;i=DA+(n<<1)|0,PA=0|lr[QA+(n<<1)>>1],PA=(TA=(0|(TA=4+(0|lr[8+QA+(n<<1)>>1])+((0|lr[i>>1])-PA<<2)-(0|lr[DA+8+(n<<1)>>1])>>3))<(0|SA)?SA:(0|LA)<(0|TA)?LA:TA)+PA|0,or[$A+(n-VA<<1)>>1]=(0|PA)<0?0:65535&((0|PA)<(0|V)?PA:F),UA&&(PA=(0|lr[i>>1])-TA|0,or[$A+(n<<1)>>1]=(0|PA)<0?0:65535&((0|PA)<(0|V)?PA:F)),4!=(0|(n=n+1|0)););}}while(0)}while((0|KA)<2)}Ae=Ae+RA|0}while((0|Ae)<(0|ue))}if((0|le)<=(0|(r=r+NA|0))){n=5;break}}switch(0|n){case 5:return void(ur=MA);case 14:sr(48482,48519,118,48539);break;case 17:sr(48543,48519,119,48539);break;case 19:sr(48482,48519,118,48539);break;case 21:sr(48543,48519,119,48539);break;case 30:sr(48482,48519,118,48539);break;case 33:sr(48543,48519,119,48539);break;case 37:case 41:sr(48482,48519,118,48539);break;case 53:case 57:sr(48543,48519,119,48539)}}}function Xt(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z,j,H,x,P,L,K,q,$,AA,eA,rA,iA,fA,nA,tA,oA,aA,cA,lA,uA,bA,sA,dA,kA,hA,wA,vA,mA,gA,ZA,pA,yA,BA,EA,XA,WA,IA,CA,GA,VA,FA,RA,NA,_A,YA,QA,DA,JA,MA,TA,UA,SA,OA,zA,jA,HA,xA,PA,LA,KA,qA,$A,Ae,ee,re,ie,fe,ne,te,oe,ae,ce,le,ue,be,se,de,ke,he,we,ve,me,ge,Ze,pe=0,ye=0,Be=0,Ee=0,Xe=0,We=0,Ie=0,Ce=0,Ge=0,Ve=0,Fe=0,Re=0,Ne=0,_e=0,Ye=0,Qe=0,De=0,Je=0,Me=0,Te=0,Ue=0,Se=0,Oe=0,ze=0,je=0,He=0;if(ur=(Ze=ur)+16|0,ve=Ze+8|0,me=Ze,ge=0|ar[(A|=0)+5780>>2],se=0|ar[A+5784>>2],de=0|br(ge,e?2:1),ke=0|br(se,e?1:2),be=0|ar[(he=A+44|0)>>2],He=(0|n)<(0|(He=0|ar[(we=A+10472|0)>>2]))?n:He,O=A+5768|0,(0|(je=(0|i)<(0|(je=0|ar[A+10476>>2]))?i:je))<=(0|r))ur=Ze;else{z=(0|f)<(0|He),j=3-ge|0,H=3-se|0,x=A+10460|0,P=A+5956|0,L=A+5952|0,K=A+10368|0,q=A+10372|0,$=A+10376|0,AA=A+10360|0,eA=A+5776|0,rA=A+10348|0,iA=A+10352|0,fA=A+10356|0,nA=A+10340|0,tA=A+48|0,oA=A+5480|0,cA=255+(aA=1<<ar[O>>2])|0,lA=0-be|0,kA=(sA=be<<1)-1|0,vA=(hA=3*be|0)-1|0,gA=1+be|0,pA=be-2|0,yA=1|sA,EA=sA-2|0,XA=1+hA|0,IA=hA-2|0,_A=bA=be-1|0,TA=(MA=be<<1)-1|0,HA=(jA=3*be|0)-1|0,fe=be<<1,ce=3*be|0,m=1-be|0,B=2-be|0,C=3-be|0,F=k=LA=VA=uA=me+1|0,R=h=KA=FA=t=1+ve|0,N=w=qA=RA=o=5+ve|0,_=v=$A=NA=ZA=me+5|0,Y=g=Ae=YA=dA=me+2|0,Q=Z=ee=QA=c=2+ve|0,D=p=re=DA=l=6+ve|0,J=y=ie=JA=BA=me+6|0,M=E=ne=UA=wA=me+3|0,T=X=te=SA=u=3+ve|0,U=W=oe=OA=b=7+ve|0,S=I=ae=zA=WA=me+7|0,ue=G=s=xA=CA=a=4+ve|0,le=V=d=PA=GA=mA=me+4|0;A:for(;;){if(z){Te=(0|(Me=0|br(Je=r<<H,se)))/4|0,Ue=Me+-1|0,De=e?Me:Ue,Ye=f;do{if(Oe=0|br(Se=Ye<<j,ge),n=(0|br(0|ar[we>>2],Te))+((0|Oe)/4|0)|0,1<(255&(n=3&tr[(0|ar[x>>2])+n>>0]))){ze=Oe+-1|0,Qe=e?ze:Oe,Re=(n<<1&255)-2|0,Ne=Se-be|0,Fe=0;do{if(ye=0|ar[(0==(0|Fe)?L:P)>>2],_e=(n=0|ar[A+4+((Fe=Fe+1|0)<<2)>>2])+(pe=(i=0|br(0|ar[he>>2],Je))+Se|0)|0,e?(tr[me>>0]=0|tr[_e>>0],tr[ve>>0]=0|tr[_e+-1>>0],tr[uA>>0]=0|tr[_e+be>>0],tr[t>>0]=0|tr[_e+bA>>0],tr[dA>>0]=0|tr[_e+sA>>0],tr[c>>0]=0|tr[_e+kA>>0],tr[wA>>0]=0|tr[_e+hA>>0],tr[u>>0]=0|tr[_e+vA>>0],tr[mA>>0]=0|tr[_e+1>>0],tr[a>>0]=0|tr[_e+-2>>0],tr[ZA>>0]=0|tr[_e+gA>>0],tr[o>>0]=0|tr[_e+pA>>0],tr[BA>>0]=0|tr[_e+yA>>0],tr[l>>0]=0|tr[_e+EA>>0],tr[WA>>0]=0|tr[_e+XA>>0],tr[b>>0]=0|tr[_e+IA>>0]):(Ge=n+(Ve=Ne+i|0)|0,ar[me>>2]=cr[_e>>0]|cr[_e+1>>0]<<8|cr[_e+2>>0]<<16|cr[_e+3>>0]<<24,ar[ve>>2]=cr[Ge>>0]|cr[Ge+1>>0]<<8|cr[Ge+2>>0]<<16|cr[Ge+3>>0]<<24,Ve=n+(Ve-be)|0,Ge=n+(pe+be)|0,ar[le>>2]=cr[Ge>>0]|cr[Ge+1>>0]<<8|cr[Ge+2>>0]<<16|cr[Ge+3>>0]<<24,ar[ue>>2]=cr[Ve>>0]|cr[Ve+1>>0]<<8|cr[Ve+2>>0]<<16|cr[Ve+3>>0]<<24),n=Me>>(Be=0|ar[K>>2]),(0|(Xe=Oe>>Be))<=-1){n=14;break A}if((0|(Ie=0|ar[q>>2]))<=(0|Xe)){n=14;break A}if((0|n)<=-1){n=17;break A}if((0|(We=0|ar[$>>2]))<=(0|n)){n=17;break A}if(Ge=0|ar[AA>>2],Ce=(Ee=0|br(Ie,n))+Xe|0,i=De>>Be,!(-1<(0|(n=Qe>>Be))&(0|n)<(0|Ie))){n=19;break A}if(!(-1<(0|i)&(0|i)<(0|We))){n=21;break A}n=Ge+(3*((0|br(Ie,i))+n|0)|0)+2|0,n=(1+(0|tr[Ge+(3*Ce|0)+2>>0])+(0|tr[n>>0])>>1)+ye|0;do{if(1==(0|ar[eA>>2])){if(30<=(0|n)){if(42<(0|n)){n=n+-6|0;break}n=0|ar[8020+(n+-30<<2)>>2];break}}else n=(0|n)<51?n:51}while(0);if(i=Oe>>(pe=0|ar[rA>>2]),pe=Me>>pe,(0|i)<=-1){n=30;break A}if((0|(ye=0|ar[iA>>2]))<=(0|i)){n=30;break A}if((0|pe)<=-1){n=33;break A}if((0|pe)>=(0|ar[fA>>2])){n=33;break A}Ve=(0|ar[nA>>2])+(24*((0|br(ye,pe))+i|0)|0)+2|0,Ve=Re+n+(0|ar[760+(0|ar[(0|ar[tA>>2])+(lr[Ve>>1]<<2)>>2])>>2])|0,Ve=cr[48100+((0|Ve)<0?0:(0|Ve)<53?Ve:53)>>0]<<(0|ar[O>>2])-8,pe=0==(0|tr[oA>>0]);do{if(e){if(n=-1<(0|(i=ze>>Be)),pe){if(!n){n=41;break A}Be=1}else{if(!(n&(0|i)<(0|Ie))){n=37;break A}Be=0==(1024&(cr[(Be=Ge+(3*(Ee+i|0)|0)|0)>>0]|cr[Be+1>>0]<<8))}if((0|Ie)<=(0|i)){n=41;break A}if(ye=Ge+(3*(Ee+i|0)|0)|0,pe=(n=pe?1:0==(1024&(cr[(n=Ge+(3*Ce|0)|0)>>0]|cr[n+1>>0]<<8)))&0==(2048&(cr[(pe=Ge+(3*Ce|0)|0)>>0]|cr[pe+1>>0]<<8)),i=0-Ve|0,!(Be&0==(2048&(cr[ye>>0]|cr[ye+1>>0]<<8)))){if(!pe)break;Ce=(Ge=0|cr[me>>0])-((0|(Ce=4+(0|cr[xA>>0])+(Ge-(0|cr[ve>>0])<<2)-(0|cr[PA>>0])>>3))<(0|i)?i:(0|Ve)<(0|Ce)?Ve:Ce)|0,tr[_e>>0]=(0|Ce)<0?0:255&((0|Ce)<(0|aA)?Ce:cA),Ge=(Ce=0|cr[LA>>0])-((0|(Ge=4+(0|cr[qA>>0])+(Ce-(0|cr[KA>>0])<<2)-(0|cr[$A>>0])>>3))<(0|i)?i:(0|Ve)<(0|Ge)?Ve:Ge)|0,tr[_e+be>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA),Ce=(Ge=0|cr[Ae>>0])-((0|(Ce=4+(0|cr[re>>0])+(Ge-(0|cr[ee>>0])<<2)-(0|cr[ie>>0])>>3))<(0|i)?i:(0|Ve)<(0|Ce)?Ve:Ce)|0,tr[_e+fe>>0]=(0|Ce)<0?0:255&((0|Ce)<(0|aA)?Ce:cA),Ve=(Ce=0|cr[ne>>0])-((0|(Ge=4+(0|cr[oe>>0])+(Ce-(0|cr[te>>0])<<2)-(0|cr[ae>>0])>>3))<(0|i)?i:(0|Ve)<(0|Ge)?Ve:Ge)|0,tr[_e+ce>>0]=(0|Ve)<0?0:255&((0|Ve)<(0|aA)?Ve:cA);break}if(Ge=0|cr[ve>>0],Ge=(n=(0|(n=4+(0|cr[CA>>0])+((0|cr[me>>0])-Ge<<2)-(0|cr[GA>>0])>>3))<(0|i)?i:(0|Ve)<(0|n)?Ve:n)+Ge|0,tr[_e+-1>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA),pe&&(Ge=(0|cr[me>>0])-n|0,tr[_e>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA)),Ge=0|cr[FA>>0],Ge=(n=(0|(n=4+(0|cr[RA>>0])+((0|cr[VA>>0])-Ge<<2)-(0|cr[NA>>0])>>3))<(0|i)?i:(0|Ve)<(0|n)?Ve:n)+Ge|0,tr[_e+_A>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA),pe&&(Ge=(0|cr[VA>>0])-n|0,tr[_e+be>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA)),Ge=0|cr[QA>>0],Ge=(n=(0|(n=4+(0|cr[DA>>0])+((0|cr[YA>>0])-Ge<<2)-(0|cr[JA>>0])>>3))<(0|i)?i:(0|Ve)<(0|n)?Ve:n)+Ge|0,tr[_e+TA>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA),pe&&(Ge=(0|cr[YA>>0])-n|0,tr[_e+MA>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA)),Ge=0|cr[SA>>0],Ve=(n=(0|(n=4+(0|cr[OA>>0])+((0|cr[UA>>0])-Ge<<2)-(0|cr[zA>>0])>>3))<(0|i)?i:(0|Ve)<(0|n)?Ve:n)+Ge|0,tr[_e+HA>>0]=(0|Ve)<0?0:255&((0|Ve)<(0|aA)?Ve:cA),!pe)break;Ve=(0|cr[UA>>0])-n|0,tr[_e+jA>>0]=(0|Ve)<0?0:255&((0|Ve)<(0|aA)?Ve:cA)}else{if(n=-1<(0|(i=Ue>>Be)),pe){if(!n){n=56;break A}Be=1}else{if(!(n&(0|i)<(0|We))){n=52;break A}Be=Ge+(3*((0|br(Ie,i))+Xe|0)|0)|0,Be=0==(1024&(cr[Be>>0]|cr[Be+1>>0]<<8))}if((0|We)<=(0|i)){n=56;break A}if(ye=Ge+(3*((0|br(Ie,i))+Xe|0)|0)|0,pe=(n=pe?1:0==(1024&(cr[(n=Ge+(3*Ce|0)|0)>>0]|cr[n+1>>0]<<8)))&0==(2048&(cr[(pe=Ge+(3*Ce|0)|0)>>0]|cr[pe+1>>0]<<8)),i=0-Ve|0,!(Be&0==(2048&(cr[ye>>0]|cr[ye+1>>0]<<8)))){if(!pe)break;Ce=(Ge=0|cr[me>>0])-((0|(Ce=4+(0|cr[G>>0])+(Ge-(0|cr[ve>>0])<<2)-(0|cr[V>>0])>>3))<(0|i)?i:(0|Ve)<(0|Ce)?Ve:Ce)|0,tr[_e>>0]=(0|Ce)<0?0:255&((0|Ce)<(0|aA)?Ce:cA),Ge=(Ce=0|cr[F>>0])-((0|(Ge=4+(0|cr[N>>0])+(Ce-(0|cr[R>>0])<<2)-(0|cr[_>>0])>>3))<(0|i)?i:(0|Ve)<(0|Ge)?Ve:Ge)|0,tr[_e+1>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA),Ce=(Ge=0|cr[Y>>0])-((0|(Ce=4+(0|cr[D>>0])+(Ge-(0|cr[Q>>0])<<2)-(0|cr[J>>0])>>3))<(0|i)?i:(0|Ve)<(0|Ce)?Ve:Ce)|0,tr[_e+2>>0]=(0|Ce)<0?0:255&((0|Ce)<(0|aA)?Ce:cA),Ve=(Ce=0|cr[M>>0])-((0|(Ge=4+(0|cr[U>>0])+(Ce-(0|cr[T>>0])<<2)-(0|cr[S>>0])>>3))<(0|i)?i:(0|Ve)<(0|Ge)?Ve:Ge)|0,tr[_e+3>>0]=(0|Ve)<0?0:255&((0|Ve)<(0|aA)?Ve:cA);break}if(Ge=0|cr[ve>>0],Ge=(n=(0|(n=4+(0|cr[s>>0])+((0|cr[me>>0])-Ge<<2)-(0|cr[d>>0])>>3))<(0|i)?i:(0|Ve)<(0|n)?Ve:n)+Ge|0,tr[_e+lA>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA),pe&&(Ge=(0|cr[me>>0])-n|0,tr[_e>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA)),Ge=0|cr[h>>0],Ge=(n=(0|(n=4+(0|cr[w>>0])+((0|cr[k>>0])-Ge<<2)-(0|cr[v>>0])>>3))<(0|i)?i:(0|Ve)<(0|n)?Ve:n)+Ge|0,tr[_e+m>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA),pe&&(Ge=(0|cr[k>>0])-n|0,tr[_e+1>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA)),Ge=0|cr[Z>>0],Ge=(n=(0|(n=4+(0|cr[p>>0])+((0|cr[g>>0])-Ge<<2)-(0|cr[y>>0])>>3))<(0|i)?i:(0|Ve)<(0|n)?Ve:n)+Ge|0,tr[_e+B>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA),pe&&(Ge=(0|cr[g>>0])-n|0,tr[_e+2>>0]=(0|Ge)<0?0:255&((0|Ge)<(0|aA)?Ge:cA)),Ge=0|cr[X>>0],Ve=(n=(0|(n=4+(0|cr[W>>0])+((0|cr[E>>0])-Ge<<2)-(0|cr[I>>0])>>3))<(0|i)?i:(0|Ve)<(0|n)?Ve:n)+Ge|0,tr[_e+C>>0]=(0|Ve)<0?0:255&((0|Ve)<(0|aA)?Ve:cA),!pe)break;Ve=(0|cr[E>>0])-n|0,tr[_e+3>>0]=(0|Ve)<0?0:255&((0|Ve)<(0|aA)?Ve:cA)}}while(0)}while((0|Fe)<2)}Ye=Ye+de|0}while((0|Ye)<(0|He))}if((0|je)<=(0|(r=r+ke|0))){n=5;break}}switch(0|n){case 5:return void(ur=Ze);case 14:sr(48482,48519,118,48539);break;case 17:sr(48543,48519,119,48539);break;case 19:sr(48482,48519,118,48539);break;case 21:sr(48543,48519,119,48539);break;case 30:sr(48482,48519,118,48539);break;case 33:sr(48543,48519,119,48539);break;case 37:case 41:sr(48482,48519,118,48539);break;case 52:case 56:sr(48543,48519,119,48539)}}}function Wt(A,e,r,i,f,n,t){r|=0,i|=0,f|=0,n|=0,t|=0;var o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0;for((0|(l=(e|=0)>>(u=0|ar[(d=(A|=0)+10448|0)>>2])))<=-1&&sr(48482,48519,118,48539),o=A+10452|0,a=A+10456|0,c=A+10440|0,v=e,b=i,s=n,h=t,i=(w=r)>>u;;){if((0|(e=0|ar[o>>2]))<=(0|l)){e=4;break}if((0|i)<=-1){e=7;break}if((0|i)>=(0|ar[a>>2])){e=7;break}if(u=(0|ar[c>>2])+((0|br(e,i))+l)|0,k=1<<b,!((0|cr[u>>0])&1<<f)){e=9;break}if(i=(n=k>>1)+v|0,n=n+w|0,Wt(A,v,w,e=b+-1|0,f=f+1|0,s,h),Wt(A,i,w,e,f,16,h),Wt(A,v,n,e,f,s,32),(0|(l=i>>(t=0|ar[d>>2])))<=-1){e=4;break}v=i,b=e,s=16,h=32,i=(w=n)>>t}if(4==(0|e))sr(48482,48519,118,48539);else if(7==(0|e))sr(48543,48519,119,48539);else if(9==(0|e)){if(b=31==(0|b))return;for(i=255&s,f=(0|v)/4|0,n=A+10472|0,t=A+10476|0,l=A+10460|0,e=0;r=(e+w|0)/4|0,(0|f)<(0|(u=0|ar[n>>2]))&&(0|r)<(0|ar[t>>2])&&(d=(0|br(u,r))+f|0,d=(0|ar[l>>2])+d|0,tr[d>>0]=tr[d>>0]|i),(0|(e=e+4|0))<(0|k););if(b)return;for(u=255&h,t=(0|w)/4|0,l=A+10472|0,r=A+10476|0,i=A+10460|0,e=0;(0|(f=(e+v|0)/4|0))<(0|(n=0|ar[l>>2]))&&(0|t)<(0|ar[r>>2])&&(A=(0|br(n,t))+f|0,A=(0|ar[i>>2])+A|0,tr[A>>0]=tr[A>>0]|u),(0|(e=e+4|0))<(0|k););return}}function It(A,e,r,i,f,n){r|=0,i|=0,f|=0,n|=0;var t,o=0,a=0,c=0,l=0,u=0;switch(n=(e|=0)>>(o=0|ar[(A|=0)+10368>>2]),o=r>>o,(0|n)<=-1&&sr(48482,48519,118,48539),(0|(f=0|ar[A+10372>>2]))<=(0|n)&&sr(48482,48519,118,48539),(0|o)<=-1&&sr(48543,48519,119,48539),(0|o)>=(0|ar[A+10376>>2])&&sr(48543,48519,119,48539),u=(0|ar[A+10360>>2])+(3*((0|br(f,o))+n|0)|0)|0,t=1<<i,n=1<<i+-1,f=1<<i+-2,(65535&(cr[u>>0]|cr[u+1>>0]<<8))>>>3&7){case 3:if(31==(0|i))return;for(c=(n+e|0)/4|0,l=A+10472|0,u=A+10476|0,a=A+10460|0,i=(n+r|0)/4|0,o=0;f=(o+r|0)/4|0,(0|c)<(0|(n=0|ar[l>>2]))&&(0|f)<(0|ar[u>>2])&&(n=(0|br(n,f))+c|0,n=(0|ar[a>>2])+n|0,tr[n>>0]=64|tr[n>>0],n=0|ar[l>>2]),(0|(f=(o+e|0)/4|0))<(0|n)&&(0|i)<(0|ar[u>>2])&&(A=(0|br(n,i))+f|0,A=(0|ar[a>>2])+A|0,tr[A>>0]=-128|tr[A>>0]),(0|(o=o+1|0))<(0|t););return;case 2:if(31==(0|i))return;for(a=(n+e|0)/4|0,c=A+10472|0,l=A+10476|0,i=A+10460|0,f=0;n=(f+r|0)/4|0,(0|a)<(0|(o=0|ar[c>>2]))&&(0|n)<(0|ar[l>>2])&&(e=(0|br(o,n))+a|0,e=(0|ar[i>>2])+e|0,tr[e>>0]=64|tr[e>>0]),(0|(f=f+1|0))<(0|t););return;case 1:if(31==(0|i))return;for(a=(n+r|0)/4|0,c=A+10472|0,l=A+10476|0,i=A+10460|0,f=0;(0|(n=(f+e|0)/4|0))<(0|(o=0|ar[c>>2]))&&(0|a)<(0|ar[l>>2])&&(r=(0|br(o,a))+n|0,r=(0|ar[i>>2])+r|0,tr[r>>0]=-128|tr[r>>0]),(0|(f=f+1|0))<(0|t););return;case 6:if(31==(0|i))return;for(a=(f+e|0)/4|0,c=A+10472|0,l=A+10476|0,i=A+10460|0,f=0;n=(f+r|0)/4|0,(0|a)<(0|(o=0|ar[c>>2]))&&(0|n)<(0|ar[l>>2])&&(e=(0|br(o,n))+a|0,e=(0|ar[i>>2])+e|0,tr[e>>0]=64|tr[e>>0]),(0|(f=f+1|0))<(0|t););return;case 7:if(31==(0|i))return;for(a=(n+e+f|0)/4|0,c=A+10472|0,l=A+10476|0,i=A+10460|0,f=0;n=(f+r|0)/4|0,(0|a)<(0|(o=0|ar[c>>2]))&&(0|n)<(0|ar[l>>2])&&(e=(0|br(o,n))+a|0,e=(0|ar[i>>2])+e|0,tr[e>>0]=64|tr[e>>0]),(0|(f=f+1|0))<(0|t););return;case 4:if(31==(0|i))return;for(a=(f+r|0)/4|0,c=A+10472|0,l=A+10476|0,i=A+10460|0,f=0;(0|(n=(f+e|0)/4|0))<(0|(o=0|ar[c>>2]))&&(0|a)<(0|ar[l>>2])&&(r=(0|br(o,a))+n|0,r=(0|ar[i>>2])+r|0,tr[r>>0]=-128|tr[r>>0]),(0|(f=f+1|0))<(0|t););return;case 5:if(31==(0|i))return;for(a=(n+r+f|0)/4|0,c=A+10472|0,l=A+10476|0,i=A+10460|0,f=0;(0|(n=(f+e|0)/4|0))<(0|(o=0|ar[c>>2]))&&(0|a)<(0|ar[l>>2])&&(r=(0|br(o,a))+n|0,r=(0|ar[i>>2])+r|0,tr[r>>0]=-128|tr[r>>0]),(0|(f=f+1|0))<(0|t););return;default:return}}function Ct(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,n|=0,t|=0;var o=0,a=0,c=0;return t=(0|(c=(f|=0)?(f=e+-1>>(o=0|ar[t+10368>>2]),o=r>>o,(0|f)<=-1&&sr(48482,48519,118,48539),(0|(a=0|ar[t+10372>>2]))<=(0|f)&&sr(48482,48519,118,48539),(0|o)<=-1&&sr(48543,48519,119,48539),(0|o)>=(0|ar[t+10376>>2])&&sr(48543,48519,119,48539),c=(0|ar[t+10360>>2])+(3*((0|br(a,o))+f|0)|0)|0,1792&(cr[c>>0]|cr[c+1>>0]<<8)?1:0|cr[(0|ar[t+10400>>2])+(i+-1)>>0]):1))!=(0|(f=n?(f=e>>(o=0|ar[t+10368>>2]),o=r+-1>>o,(0|f)<=-1&&sr(48482,48519,118,48539),(0|(a=0|ar[t+10372>>2]))<=(0|f)&&sr(48482,48519,118,48539),(0|o)<=-1&&sr(48543,48519,119,48539),(0|o)>=(0|ar[t+10376>>2])&&sr(48543,48519,119,48539),n=(0|ar[t+10360>>2])+(3*((0|br(a,o))+f|0)|0)|0,0==(1792&(cr[n>>0]|cr[n+1>>0]<<8))&&(r>>(n=0|ar[t+5804>>2])<<n|0)<(0|r)?0|cr[(0|ar[t+10400>>2])+(i-(0|ar[t+5876>>2]))>>0]:1):1))?0!=(0|(ar[A>>2]=c))&0!=(0|(ar[A+4>>2]=f))?0:1!=(0|c)&1!=(0|f)?1:26:c>>>0<2?(ar[A>>2]=0,ar[A+4>>2]=1,26):(ar[A>>2]=c,ar[A+4>>2]=2+(c+29&31),2+((c+-1|0)%32|0)|0),void(ar[(A=A+8|0)>>2]=t)}function Gt(A,e,r,i,f,n){return A|=0,e|=0,r|=0,i|=0,f|=0,8<(0|ar[(0==(0|(n|=0))?A+5760|0:A+5768|0)>>2])?void function(A,e,r,i,f,n){i|=0;var t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;ur=(o=ur)+272|0,function(A,e,r,i,f,n){e|=0,r|=0,i|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0;ur=(m=ur)+144|0,v=(h=m)+64|0,w=0|ar[4+(A|=0)+((f|=0)<<2)>>2],c=0|ar[((f=0==(0|f))?A+40|0:A+44|0)>>2],L=f?q=1:(q=0|ar[A+5780>>2],0|ar[A+5784>>2]);k=0|ar[(f?A+5760|0:A+5768|0)>>2],Q=0|br(q,e),Y=0|br(L,r),C=0|ar[A+5804>>2],W=0|ar[A+5820>>2],F=(M=0!=(0|Q))&(V=1^(y=0==(0|Y))),I=Q+(0|br(q,i))|0,D=0|ar[A+1248>>2],N=(0|I)<(0|D)&V,B=Q>>C,p=Y>>C,E=Q+-1>>C,I>>=C,C=Y+-1>>C,g=0|ar[A+10352>>2],f=0|br(g,p),Z=0|ar[A+10340>>2],o=0|lr[Z+(24*(f+B|0)|0)>>1],J=M?0|lr[Z+(24*(f+E|0)|0)>>1]:-1;G=y?-1:(G=Z+(24*((0|br(g,C))+B|0)|0)|0,0|lr[G>>1]);R=N?(R=Z+(24*((0|br(g,C))+I|0)|0)|0,0|lr[R>>1]):-1;X=F?(X=Z+(24*((0|br(g,C))+E|0)|0)|0,0|lr[X>>1]):-1;f=0|br(p,W),p=0|ar[A+10308>>2],t=0|ar[p+(f+B<<2)>>2],_=M?0|ar[p+(f+E<<2)>>2]:-1;g=y?-1:(g=p+((0|br(C,W))+B<<2)|0,0|ar[g>>2]);Z=F?(Z=p+((0|br(C,W))+E<<2)|0,0|ar[Z>>2]):-1;f=N?(f=p+((0|br(C,W))+I<<2)|0,0|ar[f>>2]):-1;d=(0|G)==(0|o)&(0|g)==(0|t)&V,F=F&(0|X)==(0|o)&(0|Z)==(0|t),l=N&(0|R)==(0|o)&(0|f)==(0|t),u=0|ar[A+5864>>2],a=0|ar[A+5852>>2],K=(0|br(Y>>u,a))+(Q>>u)|0,b=0|ar[A+10320>>2],K=0|ar[b+(K<<2)>>2],f=(L+-1-Y+(0|ar[A+1252>>2])|0)/(0|L)|0,Y=(0|f)>(0|(s=i<<1))?s:f,Q=(0|(Q=(q+-1-Q+D|0)/(0|q)|0))>(0|s)?s:Q,vb(0-s+v|0,0,0|(D=i<<2|1)),g=Y+-1|0;A:do{if(0<(0|Y)&&(T=e+-1|0,U=0|br(q,T),S=A+10368|0,O=A+10372|0,z=A+10376|0,j=A+10360|0,M&(0|J)==(0|o)&(0|_)==(0|t))){for(C=64-((0|f)<(0|s)?f:s)|0,G=U>>u,V=0==(0|tr[A+5944>>0]),W=g,I=g=f=0;;){if(X=h+(C+(I<<2))|0,Z=0|br(E=W+r|0,L),y=b+((0|br(Z>>u,a))+G<<2)|0,y=(0|ar[y>>2])<=(0|K),V)y&&(H=29);else{if(M=0|ar[S>>2],Z>>=M,(0|(B=U>>M))<=-1){H=34;break}if((0|(p=0|ar[O>>2]))<=(0|B)){H=34;break}if((0|Z)<=-1){H=35;break}if((0|Z)>=(0|ar[z>>2])){H=35;break}M=(0|ar[j>>2])+(3*((0|br(p,Z))+B|0)|0)|0,y&0==(768&(cr[M>>0]|cr[M+1>>0]<<8))&&(H=29)}if(29==(0|H)&&(Z=w+(((H=0)|br(E,c))+T<<1)|0,g||(f=0|or[Z>>1]),tr[X>>0]=1,tr[X+1>>0]=1,tr[X+2>>0]=1,tr[X+3>>0]=1,or[n+(~W<<1)>>1]=0|or[Z>>1],M=w+((0|br(E+-1|0,c))+T<<1)|0,or[n+(1-W-1<<1)>>1]=0|or[M>>1],M=w+((0|br(E+-2|0,c))+T<<1)|0,or[n+(2-W-1<<1)>>1]=0|or[M>>1],M=w+((0|br(E+-3|0,c))+T<<1)|0,or[n+(3-W-1<<1)>>1]=0|or[M>>1],g=g+4|0),(0|(W=W+-4|0))<=-1){x=f,P=g;break A}I=I+1|0}34==(0|H)?sr(48482,48519,118,48539):35==(0|H)&&sr(48543,48519,119,48539)}else P=x=0}while(0);A:do{if(F){f=0|br(q,p=e+-1|0),g=0|br(L,y=r+-1|0),B=b+((0|br(g>>u,a))+(f>>u)<<2)|0,B=(0|ar[B>>2])<=(0|K);do{if(0|tr[A+5944>>0]){if(H=0|ar[A+10368>>2],Z=f>>H,f=g>>H,(0|Z)<=-1&&sr(48482,48519,118,48539),(0|(g=0|ar[A+10372>>2]))<=(0|Z)&&sr(48482,48519,118,48539),(0|f)<=-1&&sr(48543,48519,119,48539),(0|f)<(0|ar[A+10376>>2])){if(H=(0|ar[A+10360>>2])+(3*((0|br(g,f))+Z|0)|0)|0,B&0==(768&(cr[H>>0]|cr[H+1>>0]<<8)))break;g=P,f=x;break A}sr(48543,48519,119,48539)}else if(!B){g=P,f=x;break A}}while(0);g=w+((0|br(c,y))+p<<1)|0,f=P?x:0|or[g>>1],or[n>>1]=0|or[g>>1],tr[v>>0]=1,g=P+1|0}else g=P,f=x}while(0);A:do{if(0<(0|Q)){_=0|br(L,V=r+-1|0),Y=A+5944|0,V=0|br(c,V),F=A+10368|0,R=A+10372|0,N=A+10376|0,G=A+10360|0,C=0|br(_>>u,a),W=I=0;e:for(;;){X=h+(65+(W<<2))|0;do{if((0|I)<(0|i)?d:l){if(Z=0|br(B=I+e|0,q),E=(0|ar[b+(C+(Z>>u)<<2)>>2])<=(0|K),0|tr[Y>>0]){if(p=0|ar[F>>2],Z>>=p,p=_>>p,(0|Z)<=-1){H=55;break e}if((0|(y=0|ar[R>>2]))<=(0|Z)){H=55;break e}if((0|p)<=-1){H=58;break e}if((0|p)>=(0|ar[N>>2])){H=58;break e}if(A=(0|ar[G>>2])+(3*((0|br(y,p))+Z|0)|0)|0,!(E&0==(768&(cr[A>>0]|cr[A+1>>0]<<8))))break}else if(!E)break;p=w+((Z=B+V|0)<<1)|0,g||(f=0|or[p>>1]),A=1|I,tr[X>>0]=1,tr[X+1>>0]=1,tr[X+2>>0]=1,tr[X+3>>0]=1,or[n+(A<<1)>>1]=0|or[p>>1],or[n+(A+1<<1)>>1]=0|or[w+(Z+1<<1)>>1],or[n+((3|I)<<1)>>1]=0|or[w+(Z+2<<1)>>1],or[n+(A+3<<1)>>1]=0|or[w+(Z+3<<1)>>1],g=g+4|0}}while(0);if((0|Q)<=(0|(I=I+4|0))){$=g,AA=f;break A}W=W+1|0}55==(0|H)?sr(48482,48519,118,48539):58==(0|H)&&sr(48543,48519,119,48539)}else $=g,AA=f}while(0);if((0|$)==(0|D))return ur=m;if(f=0|br(i,-2),!$){if((0|s)<(0|f))return ur=m;for(g=1<<k-1&65535;or[n+(f<<1)>>1]=g,(0|f)<(0|s);)f=f+1|0;return ur=m}0|tr[v+f>>0]||(or[n+(f<<1)>>1]=AA);if((0|(f|=1))>(0|s))return ur=m;for(;0|tr[v+f>>0]||(or[n+(f<<1)>>1]=0|or[n+(f+-1<<1)>>1]),(0|f)<(0|s);)f=f+1|0;ur=m}(A|=0,e|=0,r|=0,f|=0,n|=0,t=o+128|0);do{if(!(0|tr[A+5753>>0])){if(0|n&&3!=(0|ar[A+5776>>2]))break;tc(A,t,f,n,i)}}while(0);switch(0|i){case 0:if(s=0|ar[(0==(0|n)?A+40|0:A+44|0)>>2],b=(0|ar[A+4+(n<<2)>>2])+((0|br(s,r))+e<<1)|0,1<(0|f)){for(i=f,A=0;3<i>>>0;)i>>>=1,A=A+1|0;i=A+2|0}else i=1;if((0|f)<=0)return ur=o;r=f+-1|0,n=t+(f+1<<1)|0,a=t+(~f<<1)|0,e=0;do{for(c=t+(~e<<1)|0,l=r-e|0,u=0|br(e,s),e=e+1|0,A=0;w=0|br(0|lr[c>>1],r-A|0),A=(d=A)+1|0,h=0|br(0|lr[n>>1],A),k=0|br(0|lr[t+(A<<1)>>1],l),k=w+f+h+k+(0|br(0|lr[a>>1],e))>>i&65535,or[b+(d+u<<1)>>1]=k,(0|A)!=(0|f););}while((0|e)!=(0|f));return ur=o;case 1:return function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,n|=0;var t,o,a,c,l=0;if(c=0|ar[((o=0==(0|(f|=0)))?A+40|0:A+44|0)>>2],a=(0|ar[A+4+(f<<2)>>2])+((0|br(c,r))+e<<1)|0,t=1<(0|i)){for(A=i,e=0;3<A>>>0;)A>>>=1,e=e+1|0;r=e+2|0}else r=1;if(f=0<(0|i))for(A=e=0;A=(0|lr[n+((e=(l=e)+1|0)<<1)>>1])+A+(0|lr[n+(~l<<1)>>1])|0,(0|e)!=(0|i););else A=0;if(r=A+i>>r,!((0|i)<32&o)){if(!f)return;r&=65535,e=0;do{for(f=0|br(e,c),A=0;or[a+(A+f<<1)>>1]=r,(0|(A=A+1|0))!=(0|i););e=e+1|0}while((0|e)!=(0|i));return}if(or[a>>1]=(2+(r<<1)+(0|lr[n+-2>>1])+(0|lr[n+2>>1])|0)>>>2,!t)return;e=2+(3*r|0)|0,A=1;for(;A=(l=A)+1|0,or[a+(l<<1)>>1]=(e+(0|lr[n+(A<<1)>>1])|0)>>>2,(0|A)!=(0|i););if(!t)return;e=2+(3*r|0)|0,A=1;for(;l=a+((0|br(A,c))<<1)|0,or[l>>1]=(e+(0|lr[n+(~A<<1)>>1])|0)>>>2,A=A+1|0,(0|A)!=(0|i););if(!t)return;r&=65535,A=1;do{for(f=0|br(A,c),e=1;or[a+(e+f<<1)>>1]=r,(0|(e=e+1|0))!=(0|i););A=A+1|0}while((0|A)!=(0|i))}(A,e,r,f,n,t),ur=o;default:(function(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,t|=0;var o,a,c,l,u,b,s,d,k,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0;ur=(k=ur)+272|0,l=(w=k)+128|0,s=0|ar[((u=0==(0|(n|=0)))?A+40|0:A+44|0)>>2],o=0|ar[A+4+(n<<2)>>2],a=(0|br(s,r))+e<<1,d=o+a|0,b=0|ar[(u?A+5760|0:A+5768|0)>>2],35<=(0|i)&&sr(48302,48289,596,48319);(0|i)<=1&&sr(48344,48289,597,48319);c=0|ar[9568+(i<<2)>>2];do{if(0|tr[A+5750>>0]){if(n=0|ar[A+10368>>2],h=e>>n,n=r>>n,(0|h)<=-1&&sr(48482,48519,118,48539),(0|(e=0|ar[A+10372>>2]))<=(0|h)&&sr(48482,48519,118,48539),(0|n)<=-1&&sr(48543,48519,119,48539),(0|n)<(0|ar[A+10376>>2])){p=(0|ar[A+10360>>2])+(3*((0|br(e,n))+h|0)|0)|0,p=0==(2048&(cr[p>>0]|cr[p+1>>0]<<8));break}sr(48543,48519,119,48539)}else p=1}while(0);{if(n=(0|f)<0,17<(0|i)){if(n||hb(0|l,0|t,2+(f<<1)|0),(n=i+-11|0)>>>0<15){if(e=0|ar[9708+(n<<2)>>2],(0|(n=(0|br(c,f))>>5))<-1)for(;Z=t+(0-(128+(0|br(n,e))>>8)<<1)|0,or[l+(n<<1)>>1]=0|or[Z>>1],(0|n)<-1;)n=n+1|0}else(0|f)<(0|(n=f<<1))&&hb(w+(f+65<<1)|0,t+(f+1<<1)|0,0|n);if(!(g=0<(0|f)))return ur=k;Z=s<<1,m=w+130|0,r=f<<1,e=0;do{if(A=0|br(e=(n=e)+1|0,c),h=A>>5,A&=31,w=0|br(n,s),v=32-A|0,A)for(n=0;y=((B=0|br(0|lr[l+((y=n+h|0)+1<<1)>>1],v))+16+(0|br(0|lr[l+(y+2<<1)>>1],A))|0)>>>5&65535,or[d+(n+w<<1)>>1]=y,(0|(n=n+1|0))!=(0|f););else hb(o+(a+(0|br(Z,n)))|0,m+(h<<1)|0,0|r)}while((0|e)!=(0|f));if(!((0|f)<32&26==(0|i)&u&p&g))return ur=k;for(h=t+2|0,r=(e=1<<b)+65535|0,n=0;y=((0|lr[t+(~n<<1)>>1])-(0|lr[t>>1])>>1)+(0|lr[h>>1])|0,B=d+((0|br(n,s))<<1)|0,or[B>>1]=(0|y)<0?0:65535&((0|y)<(0|e)?y:r),(0|(n=n+1|0))!=(0|f););return ur=k}if(!n)for(n=0;or[l+(n<<1)>>1]=0|or[t+(0-n<<1)>>1],(0|n)!=(0|f);)n=n+1|0;if((n=i+-11|0)>>>0<15){if(e=0|ar[9708+(n<<2)>>2],(0|(n=(0|br(c,f))>>5))<-1)for(;B=t+(128+(0|br(n,e))>>8<<1)|0,or[l+(n<<1)>>1]=0|or[B>>1],(0|n)<-1;)n=n+1|0}else if((0|f)<(0|(e=f<<1)))for(n=f;or[l+((n=(B=n)+1|0)<<1)>>1]=0|or[t+(~B<<1)>>1],(0|n)!=(0|e););if(!(v=0<(0|f)))return ur=k;w=0;do{for(m=0|br(w,s),h=0;r=0|br(h=(A=h)+1|0,c),e=31&r,n=0|or[l+((r=(r>>5)+w|0)+1<<1)>>1],e&&(n=((n=0|br(65535&n,32-e|0))+16+(0|br(0|lr[l+(r+2<<1)>>1],e))|0)>>>5&65535),or[d+(A+m<<1)>>1]=n,(0|h)!=(0|f););w=w+1|0}while((0|w)!=(0|f));if(!((0|f)<32&10==(0|i)&u&p&v))return ur=k;for(h=t+-2|0,r=(e=1<<b)+65535|0,n=0;y=((0|lr[t+((n=(B=n)+1|0)<<1)>>1])-(0|lr[t>>1])>>1)+(0|lr[h>>1])|0,or[d+(B<<1)>>1]=(0|y)<0?0:65535&((0|y)<(0|e)?y:r),(0|n)!=(0|f););ur=k}})(A,e,r,i,f,n,t),ur=o}}(A,e,r,i,f,n):void function(A,e,r,i,f,n){i|=0;var t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;ur=(o=ur)+144|0,function(A,e,r,i,f,n){e|=0,r|=0,i|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0;ur=(g=ur)+144|0,m=(w=g)+64|0,v=0|ar[4+(A|=0)+((f|=0)<<2)>>2],s=0|ar[((f=0==(0|f))?A+40|0:A+44|0)>>2],q=f?AA=1:(AA=0|ar[A+5780>>2],0|ar[A+5784>>2]);h=0|ar[(f?A+5760|0:A+5768|0)>>2],D=0|br(AA,e),Y=0|br(q,r),G=0|ar[A+5804>>2],I=0|ar[A+5820>>2],R=(T=0!=(0|D))&(F=1^(B=0==(0|Y))),C=D+(0|br(AA,i))|0,J=0|ar[A+1248>>2],_=(0|C)<(0|J)&F,E=D>>G,y=Y>>G,X=D+-1>>G,C>>=G,G=Y+-1>>G,Z=0|ar[A+10352>>2],f=0|br(Z,y),p=0|ar[A+10340>>2],o=0|lr[p+(24*(f+E|0)|0)>>1],M=T?0|lr[p+(24*(f+X|0)|0)>>1]:-1;V=B?-1:(V=p+(24*((0|br(Z,G))+E|0)|0)|0,0|lr[V>>1]);N=_?(N=p+(24*((0|br(Z,G))+C|0)|0)|0,0|lr[N>>1]):-1;W=R?(W=p+(24*((0|br(Z,G))+X|0)|0)|0,0|lr[W>>1]):-1;f=0|br(y,I),y=0|ar[A+10308>>2],t=0|ar[y+(f+E<<2)>>2],Q=T?0|ar[y+(f+X<<2)>>2]:-1;Z=B?-1:(Z=y+((0|br(G,I))+E<<2)|0,0|ar[Z>>2]);p=R?(p=y+((0|br(G,I))+X<<2)|0,0|ar[p>>2]):-1;f=_?(f=y+((0|br(G,I))+C<<2)|0,0|ar[f>>2]):-1;k=(0|V)==(0|o)&(0|Z)==(0|t)&F,F=R&(0|W)==(0|o)&(0|p)==(0|t),c=_&(0|N)==(0|o)&(0|f)==(0|t),E=0|ar[(l=A+5864|0)>>2],B=0|ar[(u=A+5852|0)>>2],$=(0|br(Y>>E,B))+(D>>E)|0,y=0|ar[(b=A+10320|0)>>2],$=0|ar[y+($<<2)>>2],Z=(q+-1-Y+(0|ar[A+1252>>2])|0)/(0|q)|0,Y=(0|Z)>(0|(d=i<<1))?d:Z,D=(0|(D=(AA+-1-D+J|0)/(0|AA)|0))>(0|d)?d:D,vb(m+(J=0-d|0)|0,0,0|(a=i<<2|1)),f=Y+-1|0;A:do{if(0<(0|Y)&&(U=e+-1|0,S=0|br(AA,U),O=A+5944|0,z=A+10368|0,j=A+10372|0,H=A+10376|0,x=A+10360|0,T&(0|M)==(0|o)&(0|Q)==(0|t))){for(V=64-((0|Z)<(0|d)?Z:d)|0,G=p=Z=0;;){if(C=w+(V+(G<<2))|0,W=0|br(I=f+r|0,q),E=y+((0|br(W>>E,B))+(S>>E)<<2)|0,E=(0|ar[E>>2])<=(0|$),0|tr[O>>0]){if(y=0|ar[z>>2],X=S>>y,y=W>>y,(0|X)<=-1){P=35;break}if((0|(B=0|ar[j>>2]))<=(0|X)){P=35;break}if((0|y)<=-1){P=36;break}if((0|y)>=(0|ar[H>>2])){P=36;break}T=(0|ar[x>>2])+(3*((0|br(B,y))+X|0)|0)|0,E&0==(768&(cr[T>>0]|cr[T+1>>0]<<8))&&(P=29)}else E&&(P=29);if(29==(0|P)&&(y=v+(((P=0)|br(I,s))+U)|0,p||(Z=0|tr[y>>0]),tr[C>>0]=1,tr[C+1>>0]=1,tr[C+2>>0]=1,tr[C+3>>0]=1,tr[n+~f>>0]=0|tr[y>>0],T=v+((0|br(I+-1|0,s))+U)|0,tr[n+(1-f-1)>>0]=0|tr[T>>0],T=v+((0|br(I+-2|0,s))+U)|0,tr[n+(2-f-1)>>0]=0|tr[T>>0],T=v+((0|br(I+-3|0,s))+U)|0,tr[n+(3-f-1)>>0]=0|tr[T>>0],p=p+4|0),(0|(f=f+-4|0))<=-1){L=Z,K=p;break A}E=0|ar[l>>2],B=0|ar[u>>2],y=0|ar[b>>2],G=G+1|0}35==(0|P)?sr(48482,48519,118,48539):36==(0|P)&&sr(48543,48519,119,48539)}else K=L=0}while(0);A:do{if(F){f=0|br(AA,y=e+-1|0),E=0|ar[l>>2],Z=0|br(q,B=r+-1|0),E=(0|br(Z>>E,0|ar[u>>2]))+(f>>E)|0,E=(0|ar[(0|ar[b>>2])+(E<<2)>>2])<=(0|$);do{if(0|tr[A+5944>>0]){if(P=0|ar[A+10368>>2],p=f>>P,f=Z>>P,(0|p)<=-1&&sr(48482,48519,118,48539),(0|(Z=0|ar[A+10372>>2]))<=(0|p)&&sr(48482,48519,118,48539),(0|f)<=-1&&sr(48543,48519,119,48539),(0|f)<(0|ar[A+10376>>2])){if(P=(0|ar[A+10360>>2])+(3*((0|br(Z,f))+p|0)|0)|0,E&0==(768&(cr[P>>0]|cr[P+1>>0]<<8)))break;Z=K,f=L;break A}sr(48543,48519,119,48539)}else if(!E){Z=K,f=L;break A}}while(0);Z=v+((0|br(s,B))+y)|0,f=K?L:0|tr[Z>>0],tr[n>>0]=0|tr[Z>>0],tr[m>>0]=1,Z=K+1|0}else Z=K,f=L}while(0);A:do{if(0<(0|D)){_=0|br(q,V=r+-1|0),Y=A+5944|0,V=0|br(s,V),F=A+10368|0,R=A+10372|0,N=A+10376|0,G=A+10360|0,I=C=0;e:for(;;){W=w+(65+(I<<2))|0;do{if((0|C)<(0|i)?k:c){if(p=0|br(E=C+e|0,AA),X=0|ar[l>>2],X=(0|br(_>>X,0|ar[u>>2]))+(p>>X)|0,X=(0|ar[(0|ar[b>>2])+(X<<2)>>2])<=(0|$),0|tr[Y>>0]){if(y=0|ar[F>>2],p>>=y,y=_>>y,(0|p)<=-1){P=56;break e}if((0|(B=0|ar[R>>2]))<=(0|p)){P=56;break e}if((0|y)<=-1){P=59;break e}if((0|y)>=(0|ar[N>>2])){P=59;break e}if(A=(0|ar[G>>2])+(3*((0|br(B,y))+p|0)|0)|0,!(X&0==(768&(cr[A>>0]|cr[A+1>>0]<<8))))break}else if(!X)break;y=v+(p=E+V|0)|0,Z||(f=0|tr[y>>0]),A=1|C,tr[W>>0]=1,tr[W+1>>0]=1,tr[W+2>>0]=1,tr[W+3>>0]=1,tr[n+A>>0]=0|tr[y>>0],tr[n+(A+1)>>0]=0|tr[v+(p+1)>>0],tr[n+(3|C)>>0]=0|tr[v+(p+2)>>0],tr[n+(A+3)>>0]=0|tr[v+(p+3)>>0],Z=Z+4|0}}while(0);if((0|D)<=(0|(C=C+4|0))){eA=Z,rA=f;break A}I=I+1|0}56==(0|P)?sr(48482,48519,118,48539):59==(0|P)&&sr(48543,48519,119,48539)}else eA=Z,rA=f}while(0);if((0|eA)==(0|a))return ur=g;if(!eA)return vb(n+J|0,1<<h-1&255|0,0|a),ur=g;f=0|br(i,-2),0|tr[m+f>>0]||(tr[n+f>>0]=rA);if((0|(f|=1))>(0|d))return ur=g;for(;0|tr[m+f>>0]||(tr[n+f>>0]=0|tr[n+(f+-1)>>0]),(0|f)<(0|d);)f=f+1|0;ur=g}(A|=0,e|=0,r|=0,f|=0,n|=0,t=o+64|0);do{if(!(0|tr[A+5753>>0])){if(0|n&&3!=(0|ar[A+5776>>2]))break;nc(A,t,f,n,i)}}while(0);switch(0|i){case 0:if(s=0|ar[(0==(0|n)?A+40|0:A+44|0)>>2],b=(0|ar[A+4+(n<<2)>>2])+((0|br(s,r))+e)|0,1<(0|f)){for(i=f,A=0;3<i>>>0;)i>>>=1,A=A+1|0;i=A+2|0}else i=1;if((0|f)<=0)return ur=o;r=f+-1|0,n=t+(f+1)|0,a=t+~f|0,e=0;do{for(c=t+~e|0,l=r-e|0,u=0|br(e,s),e=e+1|0,A=0;w=0|br(0|cr[c>>0],r-A|0),A=(d=A)+1|0,h=0|br(0|cr[n>>0],A),k=0|br(0|cr[t+A>>0],l),k=w+f+h+k+(0|br(0|cr[a>>0],e))>>i&255,tr[b+(d+u)>>0]=k,(0|A)!=(0|f););}while((0|e)!=(0|f));return ur=o;case 1:return function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,n|=0;var t,o,a,c,l,u,b=0,s=0,d=0;if(u=0|ar[((o=0==(0|(f|=0)))?A+40|0:A+44|0)>>2],l=0|ar[A+4+(f<<2)>>2],t=(0|br(u,r))+e|0,a=l+t|0,c=1<(0|i)){for(A=i,f=0;3<A>>>0;)A>>>=1,f=f+1|0;b=f+2|0}else b=1;if(s=0<(0|i))for(A=f=0;A=(0|cr[n+(f=(d=f)+1|0)>>0])+A+(0|cr[n+~d>>0])|0,(0|f)!=(0|i););else A=0;if(b=A+i>>b,!((0|i)<32&o)){if(!s)return;for(f=255&b,A=0;vb(l+(t+(0|br(u,A)))|0,0|f,0|i),(0|(A=A+1|0))!=(0|i););return}if(tr[a>>0]=(2+(b<<1)+(0|cr[n+-1>>0])+(0|cr[n+1>>0])|0)>>>2,!c)return;f=2+(3*b|0)|0,A=1;for(;A=(d=A)+1|0,tr[a+d>>0]=(f+(0|cr[n+A>>0])|0)>>>2,(0|A)!=(0|i););if(!c)return;f=2+(3*b|0)|0,A=1;for(;d=a+(0|br(A,u))|0,tr[d>>0]=(f+(0|cr[n+~A>>0])|0)>>>2,A=A+1|0,(0|A)!=(0|i););if(!c)return;s=255&b,b=(0|br(u,r+1|0))+e+1|0,A=i+-1|0,f=0;for(;vb(l+(b+(0|br(u,f)))|0,0|s,0|A),f=f+1|0,(0|f)!=(0|A););}(A,e,r,f,n,t),ur=o;default:(function(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,t|=0;var o,a,c,l,u,b,s,d,k,h=0,w=0,v=0,m=0,g=0,Z=0,p=0;ur=(k=ur)+144|0,l=(w=k)+64|0,s=0|ar[((u=0==(0|(n|=0)))?A+40|0:A+44|0)>>2],o=0|ar[A+4+(n<<2)>>2],a=(0|br(s,r))+e|0,d=o+a|0,b=0|ar[(u?A+5760|0:A+5768|0)>>2],35<=(0|i)&&sr(48302,48289,596,48319);(0|i)<=1&&sr(48344,48289,597,48319);c=0|ar[9568+(i<<2)>>2];do{if(0|tr[A+5750>>0]){if(n=0|ar[A+10368>>2],h=e>>n,n=r>>n,(0|h)<=-1&&sr(48482,48519,118,48539),(0|(e=0|ar[A+10372>>2]))<=(0|h)&&sr(48482,48519,118,48539),(0|n)<=-1&&sr(48543,48519,119,48539),(0|n)<(0|ar[A+10376>>2])){g=(0|ar[A+10360>>2])+(3*((0|br(e,n))+h|0)|0)|0,g=0==(2048&(cr[g>>0]|cr[g+1>>0]<<8));break}sr(48543,48519,119,48539)}else g=1}while(0);{if(n=(0|f)<0,17<(0|i)){if(n||hb(0|l,0|t,f+1|0),(n=i+-11|0)>>>0<15){if(e=0|ar[9708+(n<<2)>>2],(0|(n=(0|br(c,f))>>5))<-1)for(;m=t+(0-(128+(0|br(n,e))>>8))|0,tr[l+n>>0]=0|tr[m>>0],(0|n)<-1;)n=n+1|0}else(0|f)<(f<<1|0)&&hb(w+(f+65)|0,t+(f+1)|0,0|f);if(!(m=0<(0|f)))return ur=k;v=w+65|0,n=0;do{if(r=0|br(s,n),A=0|br(n=n+1|0,c),h=A>>5,w=32-(A&=31)|0,A)for(e=0;Z=((p=0|br(0|cr[l+((Z=e+h|0)+1)>>0],w))+16+(0|br(0|cr[l+(Z+2)>>0],A))|0)>>>5&255,tr[d+(e+r)>>0]=Z,(0|(e=e+1|0))!=(0|f););else hb(o+(a+r)|0,v+h|0,0|f)}while((0|n)!=(0|f));if(!((0|f)<32&26==(0|i)&u&g&m))return ur=k;for(h=t+1|0,e=(r=1<<b)+255|0,n=0;Z=((0|cr[t+~n>>0])-(0|cr[t>>0])>>1)+(0|cr[h>>0])|0,p=d+(0|br(n,s))|0,tr[p>>0]=(0|Z)<0?0:255&((0|Z)<(0|r)?Z:e),(0|(n=n+1|0))!=(0|f););return ur=k}if(!n)for(n=0;tr[l+n>>0]=0|tr[t+(0-n)>>0],(0|n)!=(0|f);)n=n+1|0;if((n=i+-11|0)>>>0<15){if(e=0|ar[9708+(n<<2)>>2],(0|(n=(0|br(c,f))>>5))<-1)for(;p=t+(128+(0|br(n,e))>>8)|0,tr[l+n>>0]=0|tr[p>>0],(0|n)<-1;)n=n+1|0}else if((0|f)<(0|(e=f<<1)))for(n=f;tr[l+(n=(p=n)+1|0)>>0]=0|tr[t+~p>>0],(0|n)!=(0|e););if(!(v=0<(0|f)))return ur=k;w=0;do{for(m=0|br(w,s),h=0;r=0|br(h=(A=h)+1|0,c),e=31&r,n=0|tr[l+((r=(r>>5)+w|0)+1)>>0],e&&(n=((n=0|br(255&n,32-e|0))+16+(0|br(0|cr[l+(r+2)>>0],e))|0)>>>5&255),tr[d+(A+m)>>0]=n,(0|h)!=(0|f););w=w+1|0}while((0|w)!=(0|f));if(!((0|f)<32&10==(0|i)&u&g&v))return ur=k;for(h=t+-1|0,r=(e=1<<b)+255|0,n=0;Z=((0|cr[t+(n=(p=n)+1|0)>>0])-(0|cr[t>>0])>>1)+(0|cr[h>>0])|0,tr[d+p>>0]=(0|Z)<0?0:255&((0|Z)<(0|e)?Z:r),(0|n)!=(0|f););ur=k}})(A,e,r,i,f,n,t),ur=o}}(A,e,r,i,f,n)}function Vt(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5196,ar[(r=A+16|0)>>2]=5224,0|(i=0|ar[A+84>>2])&&((0|ar[(f=A+88|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),(0|tr[(i=A+72|0)+11>>0])<0&&vu(0|ar[i>>2]),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()}function Ft(A){var e=0,r=0,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5104,0|(e=0|ar[(n=A+56|0)>>2])){if((0|(r=0|ar[(t=A+60|0)>>2]))!=(0|e)){for(i=r;r=i+-16|0,ar[t>>2]=r,(f=0|ar[i+-12>>2])&&((0|(i=0|ar[(r=i+-8|0)>>2]))!=(0|f)&&(ar[r>>2]=i+(~((i+-4-f|0)>>>2)<<2)),vu(f),r=0|ar[t>>2]),(0|r)!=(0|e);)i=r;e=0|ar[n>>2]}vu(e)}if(ar[A>>2]=4404,0|(e=0|ar[(f=A+44|0)>>2])){if((0|(r=0|ar[(n=A+48|0)>>2]))!=(0|e)){for(;i=r+-8|0,ar[n>>2]=i,(0|(r=(r=0|ar[r+-4>>2])?(du(r),0|ar[n>>2]):i))!=(0|e););e=0|ar[f>>2]}vu(e)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(e=A+28|0)>>2])!=(0|r)&&(ar[e>>2]=r),vu(r))}function Rt(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;r=(A|=0)+4|0,i=0|ar[A>>2],268435455<(f=(o=(0|ar[r>>2])-i>>4)+1|0)>>>0&&zl(),i=(a=(0|ar[(c=A+8|0)>>2])-i|0)>>3,i=a>>4>>>0<134217727?i>>>0<f>>>0?f:i:268435455;do{if(i){if(!(268435455<i>>>0)){t=0|hu(i<<4);break}Zu(c=0|X(8),44519),ar[c>>2]=17660,I(0|c,4016,428)}else t=0}while(0);if(a=t+(i<<4)|0,ar[(n=f=t+(o<<4)|0)>>2]=ar[e>>2],function(A,e){e|=0;var r,i,f,n,t=0;if(ar[(A|=0)>>2]=0,ar[(n=A+4|0)>>2]=0,ar[A+8>>2]=0,t=(0|ar[(f=e+4|0)>>2])-(0|ar[e>>2])|0,!(r=t>>2))return;1073741823<r>>>0&&zl();if(i=0|hu(t),ar[n>>2]=i,ar[A>>2]=i,ar[A+8>>2]=i+(r<<2),A=0|ar[e>>2],(0|(t=(0|ar[f>>2])-A|0))<=0)return;hb(0|i,0|A,0|t),ar[n>>2]=i+(t>>>2<<2)}(t+(o<<4)+4|0,e+4|0),e=f+16|0,t=0|ar[A>>2],(0|(i=0|ar[r>>2]))==(0|t))f=n,i=o=t;else{for(;i=(u=i)+-16|0,ar[f+-16>>2]=ar[i>>2],o=u+-12|0,ar[(l=f+-12|0)>>2]=0,ar[(b=f+-8|0)>>2]=0,ar[f+-4>>2]=0,ar[l>>2]=ar[o>>2],l=u+-8|0,ar[b>>2]=ar[l>>2],u=u+-4|0,ar[f+-4>>2]=ar[u>>2],ar[u>>2]=0,ar[l>>2]=0,n=f=n+-16|(ar[o>>2]=0),(0|i)!=(0|t););f=n,o=0|ar[A>>2],i=0|ar[r>>2]}if(ar[A>>2]=f,ar[r>>2]=e,ar[c>>2]=a,(0|i)!=(0|(e=o)))for(;0|(f=0|ar[i+-12>>2])&&((0|(t=0|ar[(n=i+-8|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(~((t+-4-f|0)>>>2)<<2)),vu(f)),(0|(i=i+-16|0))!=(0|e););o&&vu(o)}function Nt(A,e){e|=0;var r,i,f,n,t,o,a=0,c=0,l=0,u=0;n=(A|=0)+4|0,u=t=0|ar[A>>2],1073741823<(a=1+(i=(o=(0|ar[n>>2])-t|0)>>2)|0)>>>0&&zl(),c=(l=(0|ar[(f=A+8|0)>>2])-t|0)>>1,c=l>>2>>>0<536870911?c>>>0<a>>>0?a:c:1073741823;do{if(c){if(!(1073741823<c>>>0)){l=0|hu(c<<2);break}Zu(u=0|X(8),44519),ar[u>>2]=17660,I(0|u,4016,428)}else l=0}while(0);r=l+(i<<2)|0,a=lr[e>>1]|lr[e+2>>1]<<16,or[r>>1]=a,or[2+r>>1]=a>>>16,a=r+(0-i<<2)|0,0<(0|o)&&hb(0|a,0|u,0|o),ar[A>>2]=a,ar[n>>2]=4+r,ar[f>>2]=l+(c<<2),t&&vu(u)}function _t(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4924,(0|tr[(r=A+112|0)+11>>0])<0&&vu(0|ar[r>>2]),(0|tr[(r=A+100|0)+11>>0])<0&&vu(0|ar[r>>2]),(0|tr[(r=A+88|0)+11>>0])<0&&vu(0|ar[r>>2]),(0|tr[(r=A+76|0)+11>>0])<0&&vu(0|ar[r>>2]),(0|tr[(r=A+64|0)+11>>0])<0&&vu(0|ar[r>>2]),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))}function Yt(A){var e,r=0,i=0,f=0,n=0,t=0,o=0,a=0,c=0;if(ar[(A|=0)>>2]=4804,0|(r=0|ar[(e=A+56|0)>>2])){if((0|(i=0|ar[(c=A+60|0)>>2]))!=(0|r)){for(f=i;;){if(i=f+-32|0,ar[c>>2]=i,o=0|ar[(a=f+-16|0)>>2]){if((0|(i=0|ar[(t=f+-12|0)>>2]))==(0|o))i=o;else{for(;f=i+-40|0,ar[t>>2]=f,(0|(i=(n=0|ar[i+-16>>2])?((0|ar[(i=i+-12|0)>>2])!=(0|n)&&(ar[i>>2]=n),vu(n),0|ar[t>>2]):f))!=(0|o););i=0|ar[a>>2]}vu(i),i=0|ar[c>>2]}if((0|i)==(0|r))break;f=i}r=0|ar[e>>2]}vu(r)}if(ar[A>>2]=4404,0|(r=0|ar[(n=A+44|0)>>2])){if((0|(i=0|ar[(t=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[t>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[t>>2]):f))!=(0|r););r=0|ar[n>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))}function Qt(A,e){e|=0;var r,i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0;b=0|ar[(d=(A|=0)+4|0)>>2],n=t=0|ar[A>>2],107374182<(o=(u=((a=b)-t|0)/40|0)+1|0)>>>0&&zl(),c=(s=((0|ar[(f=A+8|0)>>2])-t|0)/40|0)<<1,c=s>>>0<53687091?c>>>0<o>>>0?o:c:107374182;do{if(c){if(!(107374182<c>>>0)){l=0|hu(40*c|0);break}Zu(d=0|X(8),44519),ar[d>>2]=17660,I(0|d,4016,428)}else l=0}while(0);s=l+(40*c|0)|0,ar[(o=t=l+(40*u|0)|0)>>2]=ar[e>>2],ar[t+4>>2]=ar[e+4>>2],ar[t+8>>2]=ar[e+8>>2],ar[t+12>>2]=ar[e+12>>2],ar[t+16>>2]=ar[e+16>>2],ar[t+20>>2]=ar[e+20>>2],ar[(r=l+(40*u|0)+24|0)>>2]=0,ar[(i=l+(40*u|0)+28|0)>>2]=0,k=(ar[l+(40*u|0)+32>>2]=0)|ar[e+24>>2],c=(0|ar[e+28>>2])-k|0,e=k;do{if(0|c){if(!((0|c)<0)){h=0|hu(c),ar[i>>2]=h,k=(ar[r>>2]=h)+c|0,ar[l+(40*u|0)+32>>2]=k,hb(0|h,0|e,0|c),ar[i>>2]=k;break}zl()}}while(0);if(e=t+40|0,(0|a)==(0|n))c=b;else{for(;a=(b=a)+-40|0,ar[(k=t+-40|0)>>2]=ar[a>>2],ar[k+4>>2]=ar[a+4>>2],ar[k+8>>2]=ar[a+8>>2],ar[k+12>>2]=ar[a+12>>2],ar[k+16>>2]=ar[a+16>>2],ar[k+20>>2]=ar[a+20>>2],h=b+-16|0,ar[(k=t+-16|0)>>2]=0,ar[(u=t+-12|0)>>2]=0,ar[t+-8>>2]=0,ar[k>>2]=ar[h>>2],k=b+-12|0,ar[u>>2]=ar[k>>2],b=b+-8|0,ar[t+-8>>2]=ar[b>>2],ar[b>>2]=0,ar[k>>2]=0,o=t=o+-40|(ar[h>>2]=0),(0|a)!=(0|n););c=0|ar[A>>2],n=0|ar[d>>2]}if(ar[A>>2]=o,ar[d>>2]=e,ar[f>>2]=s,(0|n)!=(0|(a=c)))for(;0|(t=0|ar[n+-16>>2])&&((0|ar[(o=n+-12|0)>>2])!=(0|t)&&(ar[o>>2]=t),vu(t)),(0|(n=n+-40|0))!=(0|a););c&&vu(c)}function Dt(A,e){e|=0;var r,i,f,n=0;ar[(A|=0)>>2]=0,ar[(r=A+4|0)>>2]=0,f=((ar[A+8>>2]=0)|(n=(0|ar[(i=e+4|0)>>2])-(0|ar[e>>2])|0))/40|0,n&&(107374182<f>>>0&&zl(),n=0|hu(n),ar[r>>2]=n,ar[A>>2]=n,ar[A+8>>2]=n+(40*f|0),function(A,e,r,i){i|=0;var f,n=0,t=0,o=0,a=0,c=0;if(f=4+(A|=0)|0,(0|(e|=0))==(0|(r|=0)))return;i=0|ar[f>>2];for(;;){if(ar[i>>2]=ar[e>>2],ar[i+4>>2]=ar[e+4>>2],ar[i+8>>2]=ar[e+8>>2],ar[i+12>>2]=ar[e+12>>2],ar[i+16>>2]=ar[e+16>>2],ar[i+20>>2]=ar[e+20>>2],n=e+24|0,ar[(o=i+24|0)>>2]=0,ar[(c=i+28|0)>>2]=0,(ar[i+32>>2]=0)|(A=(0|ar[(t=e+28|0)>>2])-(0|ar[n>>2])|0)){if((0|A)<0){A=5;break}a=0|hu(A),ar[c>>2]=a,ar[o>>2]=a,ar[i+32>>2]=a+A,i=0|ar[n>>2],0<(0|(A=(0|ar[t>>2])-i|0))&&(hb(0|a,0|i,0|A),ar[c>>2]=a+A)}if(e=e+40|0,i=40+(0|ar[f>>2])|0,ar[f>>2]=i,(0|e)==(0|r)){A=9;break}}if(5==(0|A))zl();else if(9==(0|A));}(A,0|ar[e>>2],0|ar[i>>2],f))}function Jt(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;r=(A|=0)+4|0,i=0|ar[A>>2],134217727<(f=(o=(0|ar[r>>2])-i>>5)+1|0)>>>0&&zl(),i=(c=(0|ar[(l=A+8|0)>>2])-i|0)>>4,i=c>>5>>>0<67108863?i>>>0<f>>>0?f:i:134217727;do{if(i){if(!(134217727<i>>>0)){t=0|hu(i<<5);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else t=0}while(0);if(a=t+(i<<5)|0,ar[(n=f=t+(o<<5)|0)>>2]=ar[e>>2],ar[f+4>>2]=ar[e+4>>2],ar[f+8>>2]=ar[e+8>>2],ar[f+12>>2]=ar[e+12>>2],Dt(t+(o<<5)+16|0,e+16|0),e=f+32|0,t=0|ar[A>>2],(0|(i=0|ar[r>>2]))==(0|t))i=n,f=c=t;else{for(;i=(u=i)+-32|0,ar[(o=f+-32|0)>>2]=ar[i>>2],ar[o+4>>2]=ar[i+4>>2],ar[o+8>>2]=ar[i+8>>2],ar[o+12>>2]=ar[i+12>>2],c=u+-16|0,ar[(o=f+-16|0)>>2]=0,ar[(b=f+-12|0)>>2]=0,ar[f+-8>>2]=0,ar[o>>2]=ar[c>>2],o=u+-12|0,ar[b>>2]=ar[o>>2],u=u+-8|0,ar[f+-8>>2]=ar[u>>2],ar[u>>2]=0,ar[o>>2]=0,n=f=n+-32|(ar[c>>2]=0),(0|i)!=(0|t););i=n,c=0|ar[A>>2],f=0|ar[r>>2]}if(ar[A>>2]=i,ar[r>>2]=e,ar[l>>2]=a,(0|f)!=(0|(A=c))){a=f;do{if(0|(i=0|ar[(e=a+-16|0)>>2])){if((0|(f=0|ar[(o=a+-12|0)>>2]))!=(0|i)){for(;n=f+-40|0,ar[o>>2]=n,(0|(f=(t=0|ar[f+-16>>2])?((0|ar[(f=f+-12|0)>>2])!=(0|t)&&(ar[f>>2]=t),vu(t),0|ar[o>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}a=a+-32|0}while((0|a)!=(0|A))}c&&vu(c)}function Mt(A){var e;ar[(A|=0)>>2]=4264,e=A+8|0,ar[A+40>>2]=0,ar[e>>2]=0,ar[4+e>>2]=0,ar[8+e>>2]=0,ar[12+e>>2]=0,ar[16+e>>2]=0,ar[20+e>>2]=0,ar[24+e>>2]=0,or[28+e>>1]=0}function Tt(A,e,r){A|=0,r|=0;var i,f=0;f=0|ar[(e|=0)+44>>2],i=0|ar[e+48>>2];A:do{if((0|f)!=(0|i)){for(e=f;f=0|ar[e>>2],(0|ar[f+20>>2])!=(0|r);)if((0|(e=e+8|0))==(0|i))break A;return(ar[A>>2]=f,e=0|ar[e+4>>2],ar[A+4>>2]=e)?void bu(e):void 0}}while(0);ar[A>>2]=0,ar[A+4>>2]=0}function Ut(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;f=0|ar[(u=(A|=0)+4|0)>>2],c=n=0|ar[A>>2],536870911<(t=1+(r=f-n>>3)|0)>>>0&&zl(),o=(l=(0|ar[(i=A+8|0)>>2])-n|0)>>2,o=l>>3>>>0<268435455?o>>>0<t>>>0?t:o:536870911;do{if(o){if(!(536870911<o>>>0)){a=0|hu(o<<3);break}Zu(u=0|X(8),44519),ar[u>>2]=17660,I(0|u,4016,428)}else a=0}while(0);if(l=a+(o<<3)|0,ar[(t=n=a+(r<<3)|0)>>2]=ar[e>>2],o=0|ar[e+4>>2],o=(ar[a+(r<<3)+4>>2]=o)?(bu(o),f=0|ar[u>>2],0|ar[A>>2]):c,a=n+8|0,(0|f)!=(0|o)){for(;f=(c=f)+-8|0,ar[n+-8>>2]=ar[f>>2],c=c+-4|0,ar[n+-4>>2]=ar[c>>2],ar[f>>2]=0,t=n=t+-8|(ar[c>>2]=0),(0|f)!=(0|o););o=0|ar[A>>2],f=0|ar[u>>2]}if(ar[A>>2]=t,ar[u>>2]=a,ar[i>>2]=l,(0|f)!=(0|(t=o)))for(;n=0|ar[f+-4>>2],f=f+-8|0,0|n&&du(n),(0|f)!=(0|t););o&&vu(o)}function St(A,e){e|=0;var r=0;if((0|(r=0|ar[(A|=0)+64>>2]))==(0|(A=0|ar[A+68>>2])))return(e=0)|e;for(;;){if((0|ar[r>>2])==(0|e)){r=1,A=4;break}if((0|(r=r+4|0))==(0|A)){r=0,A=4;break}}return 4==(0|A)?0|r:0}function Ot(A,e,r,i,f,n){A|=0,e|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0;ur=(w=ur)+272|0,k=w+252|0,h=w+72|0,b=w+240|0,s=w+228|0,d=w+216|0,c=w+56|0,l=w+44|0,t=w+24|0,o=w+16|0,u=w,e=0|ar[(r|=0)+16>>2],a=0|ar[r+20>>2];A:do{if((0|e)!=(0|a)){F=r+4|0,V=n+4|0,R=r+8|0,E=4+o|0,X=i+4|0,I=(W=8+t|0)+11|0;e:for(;;){switch(0|tr[F>>0]){case 0:if(C=(0|ar[V>>2])-(0|ar[n>>2])|0,m=0|ar[(g=B=e+16|0)>>2],0<(g=0|ar[g+4>>2])>>>0|0==(0|g)&(536870912-C|0)>>>0<m>>>0){e=5;break e}if(Z=0|ar[(p=y=e+8|0)>>2],8388607<(p=0|ar[p+4>>2])>>>0|8388607==(0|p)&4294967295<Z>>>0){e=14;break e}if(r=0|ar[(v=R)>>2],8388607<(N=(v=0|ar[v+4>>2])|g)>>>0|8388607==(0|N)&4294967295<(r|m)>>>0){e=14;break e}switch(_=0|ar[i>>2],Y=0|ar[12+(0|ar[_>>2])>>2],N=0|tb(0|tb(0|Z,0|p,0|m,0|g),0|D,0|r,0|v),0|xb[63&Y](_,N,D)){case 2:e=17;break e;case 1:e=26;break e}if(_=0|ar[i>>2],N=0|ar[20+(0|ar[_>>2])>>2],Y=y,Y=0|tb(0|ar[(y=R)>>2],0|ar[y+4>>2],0|ar[Y>>2],0|ar[Y+4>>2]),!(0|xb[63&N](_,Y,D))){e=29;break e}if((m=0|tb(0|(v=0|ar[(m=B)>>2]),0|ar[m+4>>2],0|C,0))>>>0<=(g=(Z=0|ar[V>>2])-(r=0|ar[n>>2])|0)>>>0?m>>>0<g>>>0&&(0|Z)!=(0|(G=r+m|0))&&(ar[V>>2]=G):(TA(n,m-g|0),v=0|ar[B>>2],r=0|ar[n>>2]),Y=0|ar[i>>2],0|xb[63&ar[16+(0|ar[Y>>2])>>2]](Y,r+C|0,v))break;e=36;break e;case 1:if(!(r=0|ar[f>>2])){e=38;break e}ar[o>>2]=ar[i>>2],v=0|ar[X>>2],(m=0==(0|(ar[E>>2]=v)))||bu(v),_=e+8|0,Y=e+16|0,zt(t,r,o,0|tb(0|ar[(N=R)>>2],0|ar[N+4>>2],0|ar[_>>2],0|ar[_+4>>2]),D,0|ar[Y>>2],0|ar[Y+4>>2],n),(0|tr[I>>0])<0&&vu(0|ar[W>>2]),m||du(v);break;default:e=46;break e}if((0|(e=e+40|0))==(0|a))break A}if(5==(0|e))return r=64+h|0,ar[(m=8+h|0)>>2]=4524,v=12+h|0,ar[h>>2]=188,ar[r>>2]=208,Jf(64+h|(ar[4+h>>2]=0),v),ar[136+h>>2]=0,ar[140+h>>2]=-1,ar[h>>2]=4504,ar[r>>2]=4544,ar[m>>2]=4524,Sf(v),ar[v>>2]=4340,ar[(m=44+h|0)>>2]=0,ar[m+4>>2]=0,ar[m+8>>2]=0,ar[m+12>>2]=0,ar[60+h>>2]=24,ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,Xe(v,k),(0|tr[11+k>>0])<0&&vu(0|ar[k>>2]),Y=0|We(e=8+h|0,23479,19),_=0|We(0|Kf(Y,0|ar[(_=B)>>2],0|ar[_+4>>2]),23499,35),We(0|Pf(0|We(0|Kf(_,Y=0|tb(0|ar[(Y=B)>>2],0|ar[Y+4>>2],0|C,0),D),23535,40),536870912),23576,6),Ie(b,v),oo(A,6,1e3,b),(0|tr[11+b>>0])<0&&vu(0|ar[b>>2]),ar[h>>2]=4504,ar[r>>2]=4544,ar[e>>2]=4524,ar[v>>2]=4340,(0|tr[m+11>>0])<0&&vu(0|ar[m>>2]),kf(v),bf(r),void(ur=w);if(14==(0|e)){for(e=0|hu(48),ar[s>>2]=e,ar[8+s>>2]=-2147483600,v=23583,m=(r=e)+(ar[4+s>>2]=39)|0;tr[r>>0]=0|tr[v>>0],v=v+1|0,(0|(r=r+1|0))<(0|m););return(tr[e+39>>0]=0,oo(A,2,1e3,s),0<=(0|tr[11+s>>0]))?void(ur=w):(vu(0|ar[s>>2]),void(ur=w))}if(17==(0|e))return e=0|ar[n>>2],(0|ar[V>>2])!=(0|e)&&(ar[V>>2]=e),r=64+h|0,ar[(m=8+h|0)>>2]=4524,v=12+h|0,ar[h>>2]=188,ar[r>>2]=208,Jf(64+h|(ar[4+h>>2]=0),v),ar[136+h>>2]=0,ar[140+h>>2]=-1,ar[h>>2]=4504,ar[r>>2]=4544,ar[m>>2]=4524,Sf(v),ar[v>>2]=4340,ar[(m=44+h|0)>>2]=0,ar[m+4>>2]=0,ar[m+8>>2]=0,ar[m+12>>2]=0,ar[60+h>>2]=24,ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,Xe(v,k),(0|tr[11+k>>0])<0&&vu(0|ar[k>>2]),_=0|We(0|We(e=8+h|0,23623,58),23682,25),Y=y,We(0|Kf(_,Y=0|tb(0|ar[(N=R)>>2],0|ar[N+4>>2],0|ar[Y>>2],0|ar[Y+4>>2]),D),18904,2),Ie(d,v),oo(A,2,100,d),(0|tr[11+d>>0])<0&&vu(0|ar[d>>2]),ar[h>>2]=4504,ar[r>>2]=4544,ar[e>>2]=4524,ar[v>>2]=4340,(0|tr[m+11>>0])<0&&vu(0|ar[m>>2]),kf(v),bf(r),void(ur=w);if(26==(0|e))return ar[c>>2]=0,ar[4+c>>2]=0,ar[8+c>>2]=0,oo(A,2,100,c),0<=(0|tr[11+c>>0])||vu(0|ar[c>>2]),void(ur=w);if(29==(0|e))sr(23708,19104,1114,23716);else if(36==(0|e))sr(23708,19104,1122,23716);else{if(38==(0|e)){for(e=0|hu(64),ar[l>>2]=e,ar[8+l>>2]=-2147483584,v=23726,m=(r=e)+(ar[4+l>>2]=54)|0;tr[r>>0]=0|tr[v>>0],v=v+1|0,(0|(r=r+1|0))<(0|m););return(tr[e+54>>0]=0,oo(A,2,103,l),0<=(0|tr[11+l>>0]))?void(ur=w):(vu(0|ar[l>>2]),void(ur=w))}if(46==(0|e))return e=64+h|0,ar[(v=8+h|0)>>2]=4524,r=12+h|0,ar[h>>2]=188,ar[e>>2]=208,Jf(64+h|(ar[4+h>>2]=0),r),ar[136+h>>2]=0,ar[140+h>>2]=-1,ar[h>>2]=4504,ar[e>>2]=4544,ar[v>>2]=4524,Sf(r),ar[r>>2]=4340,ar[(v=44+h|0)>>2]=0,ar[v+4>>2]=0,ar[v+8>>2]=0,ar[v+12>>2]=0,ar[60+h>>2]=24,ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,Xe(r,k),(0|tr[11+k>>0])<0&&vu(0|ar[k>>2]),Y=0|We(m=8+h|0,23781,25),tr[k>>0]=0|tr[F>>0],We(0|We(Y,k,1),23807,16),Ie(u,r),oo(A,4,103,u),(0|tr[u+11>>0])<0&&vu(0|ar[u>>2]),ar[h>>2]=4504,ar[e>>2]=4544,ar[m>>2]=4524,ar[r>>2]=4340,(0|tr[v+11>>0])<0&&vu(0|ar[v>>2]),kf(r),bf(e),void(ur=w)}}}while(0);_=0|ar[(N=56592)+4>>2],ar[(Y=A)>>2]=ar[N>>2],ar[Y+4>>2]=_,yu(A+8|0,56600),ur=w}function zt(A,e,r,i,f,n,t,o){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0;return ur=(c=ur)+208|0,s=c+192|0,k=c+48|0,d=c+36|0,l=c+24|0,h=c+12|0,w=c,0<(t|=0)>>>0|0==(0|t)&(536870912-(m=(0|ar[(a=(o|=0)+4|0)>>2])-(0|ar[o>>2])|0)|0)>>>0<n>>>0?(l=k+64|0,ar[(b=k+8|0)>>2]=4524,u=k+12|0,ar[k>>2]=188,ar[l>>2]=208,Jf(k+64|(ar[k+4>>2]=0),u),ar[k+136>>2]=0,ar[k+140>>2]=-1,ar[k>>2]=4504,ar[l>>2]=4544,ar[b>>2]=4524,Sf(u),ar[u>>2]=4340,ar[(b=k+44|0)>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,ar[b+12>>2]=0,ar[k+60>>2]=24,ar[s>>2]=0,ar[s+4>>2]=0,ar[s+8>>2]=0,Xe(u,s),(0|tr[s+11>>0])<0&&vu(0|ar[s>>2]),r=0|We(0|Kf(0|We(e=k+8|0,23824,19),n,t),23499,35),We(0|Pf(0|We(0|Kf(r,n=0|tb(0|m,0,0|n,0|t),D),23535,40),536870912),23576,6),Ie(d,u),oo(A,6,1e3,d),(0|tr[d+11>>0])<0&&vu(0|ar[d>>2]),ar[k>>2]=4504,ar[l>>2]=4544,ar[e>>2]=4524,ar[u>>2]=4340,(0|tr[b+11>>0])<0&&vu(0|ar[b>>2]),kf(u),bf(l),void(ur=c)):(d=0|ar[(k=s=e+64|0)>>2],k=0|ar[k+4>>2],e=0|tb(0|(u=0|ar[(b=e+8|0)>>2]),0|(b=0|ar[b+4>>2]),0|d,0|k),(g=D)>>>0<f>>>0|(0|g)==(0|f)&e>>>0<i>>>0?(ar[l>>2]=0,ar[l+4>>2]=0,ar[l+8>>2]=0,oo(A,2,100,l),0<=(0|tr[l+11>>0])||vu(0|ar[l>>2]),void(ur=c)):(e=0|tb(0|n,0|t,0|i,0|f),b>>>0<t>>>0|(0|b)==(0|t)&u>>>0<n>>>0|b>>>0<(l=D)>>>0|(0|l)==(0|b)&u>>>0<e>>>0?(ar[h>>2]=0,ar[h+4>>2]=0,ar[h+8>>2]=0,oo(A,2,100,h),0<=(0|tr[h+11>>0])||vu(0|ar[h>>2]),void(ur=c)):(h=0|ar[r>>2],b=0|ar[12+(0|ar[h>>2])>>2],g=0|tb(0|e,0|l,0|d,0|k),((0|xb[63&b](h,g,D))-1|0)>>>0<2?(ar[w>>2]=0,ar[w+4>>2]=0,ar[w+8>>2]=0,oo(A,2,100,w),0<=(0|tr[w+11>>0])||vu(0|ar[w>>2]),void(ur=c)):(w=0|ar[r>>2],h=0|ar[20+(0|ar[w>>2])>>2],g=0|tb(0|ar[(g=s)>>2],0|ar[g+4>>2],0|i,0|f),0|xb[63&h](w,g,D)||sr(23708,19104,3031,23716),0==(0|n)&0==(0|t)||((l=0|tb(0|m,0,0|n,0|t))>>>0<=(u=(b=0|ar[a>>2])-(e=0|ar[o>>2])|0)>>>0?l>>>0<u>>>0&&(0|b)!=(0|(v=e+l|0))&&(ar[a>>2]=v):(TA(o,l-u|0),e=0|ar[o>>2]),g=0|ar[r>>2],0|xb[63&ar[16+(0|ar[g>>2])>>2]](g,e+m|0,n)||sr(23708,19104,3040,23716)),n=0|ar[(m=56592)+4>>2],ar[(g=A)>>2]=ar[m>>2],ar[g+4>>2]=n,yu(A+8|0,56600),void(ur=c)))))}function jt(A){or[(A|=0)+4>>1]=2,or[A+6>>1]=2,or[A+8>>1]=6,tr[A+10>>0]=1}function Ht(A,e,r,i,f){A|=0,e|=0,r|=0,f|=0;var n,t,o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;ur=(c=ur)+336|0,o=c+316|0,a=c+160|0,b=c+304|0,t=(n=c)+144|0,u=0|ar[(i|=0)>>2],i=0|ar[u+56>>2],u=0|ar[u+60>>2];A:do{if((0|i)!=(0|u)){for(;l=i+16|0,(0|ar[i>>2])!=(0|r);){if((0|l)==(0|u))break A;i=l}xt(a,e+44|0),l=0|ar[i+4>>2],s=0|ar[i+8>>2];e:do{if((0|l)==(0|s))g=34;else{for(d=4+a|0,h=8+o|0,w=k=4+o|0,v=f+4|0,m=f+8|0;u=65535&(i=0|or[(b=l+2|0)>>1]),e=Z=0|ar[a>>2],!(u>>>0>(0|ar[d>>2])-Z>>3>>>0);){ar[k>>2]=0,ar[h>>2]=0,tr[o>>0]=0|tr[l>>0];do{if(i<<16>>16){if(b=0|ar[e+((i=u+-1|0)<<3)>>2],(u=i=0|ar[e+(i<<3)+4>>2])?(bu(i),i=0|ar[h>>2],ar[w>>2]=b,ar[h>>2]=u,0|i&&du(i)):(ar[w>>2]=b,ar[h>>2]=u),(0|(i=0|ar[v>>2]))==(0|ar[m>>2])){Pt(f,o);break}tr[i>>0]=0|tr[o>>0],ar[i+4>>2]=ar[w>>2],u=0|ar[h>>2],(ar[i+8>>2]=u)&&(bu(u),i=0|ar[v>>2]),ar[v>>2]=i+12}}while(0);if(0|(i=0|ar[h>>2])&&du(i),(0|(l=l+4|0))==(0|s)){g=34;break e}}l=n+64|0,ar[(e=n+8|0)>>2]=4524,u=n+12|0,ar[n>>2]=188,ar[l>>2]=208,Jf(n+64|(ar[n+4>>2]=0),u),ar[n+136>>2]=0,ar[n+140>>2]=-1,ar[n>>2]=4504,ar[l>>2]=4544,ar[e>>2]=4524,Sf(u),ar[u>>2]=4340,ar[(e=n+44|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[n+60>>2]=24,ar[o>>2]=0,ar[4+o>>2]=0,ar[8+o>>2]=0,Xe(u,o),(0|tr[11+o>>0])<0&&vu(0|ar[o>>2]),Z=0|We(i=n+8|0,23901,28),We(0|Lf(0|We(0|We(0|xf(Z,0|or[b>>1]),23930,11),23942,4),r),23947,23),Ie(t,u),oo(A,2,115,t),(0|tr[11+t>>0])<0&&vu(0|ar[t>>2]),ar[n>>2]=4504,ar[l>>2]=4544,ar[i>>2]=4524,ar[u>>2]=4340,(0|tr[e+11>>0])<0&&vu(0|ar[e>>2]),kf(u),bf(l),i=a}}while(0);if(34==(0|g)&&(Z=0|ar[(r=56592)+4>>2],ar[(i=A)>>2]=ar[r>>2],ar[i+4>>2]=Z,yu(A+8|0,56600),i=a),0|(i=0|ar[i>>2])){if((0|(l=0|ar[(e=4+a|0)>>2]))!=(0|i)){for(;u=l+-8|0,ar[e>>2]=u,(0|(l=(l=0|ar[l+-4>>2])?(du(l),0|ar[e>>2]):u))!=(0|i););i=0|ar[a>>2]}vu(i)}return void(ur=c)}}while(0);l=64+a|0,ar[(e=8+a|0)>>2]=4524,u=12+a|0,ar[a>>2]=188,ar[l>>2]=208,Jf(64+a|(ar[4+a>>2]=0),u),ar[136+a>>2]=0,ar[140+a>>2]=-1,ar[a>>2]=4504,ar[l>>2]=4544,ar[e>>2]=4524,Sf(u),ar[u>>2]=4340,ar[(e=44+a|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[60+a>>2]=24,ar[o>>2]=0,ar[4+o>>2]=0,ar[8+o>>2]=0,Xe(u,o),(0|tr[11+o>>0])<0&&vu(0|ar[o>>2]),We(0|Lf(0|We(i=8+a|0,23844,9),r),23854,46),Ie(b,u),oo(A,2,116,b),(0|tr[b+11>>0])<0&&vu(0|ar[b>>2]),ar[a>>2]=4504,ar[l>>2]=4544,ar[i>>2]=4524,ar[u>>2]=4340,(0|tr[e+11>>0])<0&&vu(0|ar[e>>2]),kf(u),bf(l),ur=c}function xt(A,e){e|=0;var r,i,f,n=0,t=0;if(ar[(A|=0)>>2]=0,ar[(f=A+4|0)>>2]=0,(r=(n=((ar[A+8>>2]=0)|ar[(i=e+4|0)>>2])-(0|ar[e>>2])|0)>>3)&&(536870911<r>>>0&&zl(),t=0|hu(n),ar[f>>2]=t,ar[A>>2]=t,ar[A+8>>2]=t+(r<<3),(0|(n=0|ar[e>>2]))!=(0|(e=0|ar[i>>2]))))for(;ar[t>>2]=ar[n>>2],A=0|ar[n+4>>2],0|(ar[t+4>>2]=A)&&bu(A),n=n+8|0,t=8+(0|ar[f>>2])|0,ar[f>>2]=t,(0|n)!=(0|e););}function Pt(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;n=0|ar[(u=(A|=0)+4|0)>>2],c=i=0|ar[A>>2],357913941<(f=(a=(n-i|0)/12|0)+1|0)>>>0&&zl(),t=(l=((0|ar[(r=A+8|0)>>2])-i|0)/12|0)<<1,t=l>>>0<178956970?t>>>0<f>>>0?f:t:357913941;do{if(t){if(!(357913941<t>>>0)){o=0|hu(12*t|0);break}Zu(u=0|X(8),44519),ar[u>>2]=17660,I(0|u,4016,428)}else o=0}while(0);if(l=o+(12*t|0)|0,tr[(f=i=o+(12*a|0)|0)>>0]=0|tr[e>>0],ar[o+(12*a|0)+4>>2]=ar[e+4>>2],t=0|ar[e+8>>2],t=(ar[o+(12*a|0)+8>>2]=t)?(bu(t),n=0|ar[u>>2],0|ar[A>>2]):c,o=i+12|0,(0|n)==(0|t))i=t=n;else{for(;n=(c=n)+-12|0,tr[i+-12>>0]=0|tr[n>>0],a=c+-8|0,ar[i+-8>>2]=ar[a>>2],c=c+-4|0,ar[i+-4>>2]=ar[c>>2],ar[a>>2]=0,f=i=f+-12|(ar[c>>2]=0),(0|n)!=(0|t););t=0|ar[A>>2],i=0|ar[u>>2]}if(ar[A>>2]=f,ar[u>>2]=o,ar[r>>2]=l,(0|i)!=(0|(n=t)))for(;f=0|ar[i+-4>>2],i=i+-12|0,0|f&&du(f),(0|i)!=(0|n););t&&vu(n)}function Lt(A,e,r,i,f){A|=0,e|=0,r|=0,f|=0;var n,t,o=0,a=0,c=0,l=0,u=0,b=0;ur=(t=ur)+16|0,n=t,a=0|ar[(i|=0)>>2],i=0|ar[a+56>>2],a=0|ar[a+60>>2];A:do{if((0|i)!=(0|a)){for(;o=i+16|0,(0|ar[i>>2])!=(0|r);){if((0|o)==(0|a))break A;i=o}xt(n,e+44|0),a=0|ar[i+4>>2],c=0|ar[i+8>>2];e:do{if((0|a)==(0|c))o=A+4|0,i=n,u=15;else{for(l=n+4|0,o=A+4|0;;){if(i=65535&(b=0|or[a+2>>1]),e=r=0|ar[n>>2],b<<16>>16==0||i>>>0>(0|ar[l>>2])-r>>3>>>0){i=n,u=15;break e}if(r=0|ar[e+((i=i+-1|0)<<3)>>2],0|(i=0|ar[e+(i<<3)+4>>2])&&bu(i),(0|ar[r+20>>2])==(0|f))break;if(0|i&&du(i),(0|(a=a+4|0))==(0|c)){i=n,u=15;break e}}ar[A>>2]=r,ar[o>>2]=i,i=n}}while(0);if(15==(0|u)&&(ar[A>>2]=0,ar[o>>2]=0),0|(i=0|ar[i>>2])){if((0|(o=0|ar[(e=n+4|0)>>2]))!=(0|i)){for(;a=o+-8|0,ar[e>>2]=a,(0|(o=(o=0|ar[o+-4>>2])?(du(o),0|ar[e>>2]):a))!=(0|i););i=0|ar[n>>2]}vu(i)}return void(ur=t)}}while(0);ar[A>>2]=0,ar[A+4>>2]=0,ur=t}function Kt(A,e){A|=0;var r=0,i=0,f=0;if(r=(e|=0)+-1|0,131072<(e+65535|0)>>>0)for(e=2;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);else e=2;if(f=0|ar[A+76>>2],i=0|ar[A+72>>2],(0|f)==(0|e)){if(r=i+r|0,131072<(e+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if(131072<(r+65536|0)>>>0)for(;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);}else{if(r=(0|br(i,e))+(0|br(f,r))|0,131072<((e=0|br(f,e))+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if(131072<(r+65536|0)>>>0)for(;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);}if(i=0|ar[A+60>>2],f=(0|ar[A+56>>2])-i|0,131072<(i+65536|0)>>>0)for(;f=(0|f)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);if(131072<(f+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((f=(0|f)/2|0)+65536|0)>>>0;);if(131072<((i<<=1)+65536|0)>>>0)for(;f=(0|f)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);if(131072<(f+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((f=(0|f)/2|0)+65536|0)>>>0;);if((0|e)==(0|i)){if(r=r-f|0,131072<(e+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if((r+65536|0)>>>0<=131072)return 0|(A=(0|(f=r))/(0|(A=e))|0);for(;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);return 0|(A=(0|r)/(0|e)|0)}if(r=(0|br(i,r))-(0|br(f,e))|0,131072<((e=0|br(i,e))+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if((r+65536|0)>>>0<=131072)return 0|(A=(0|(f=r))/(0|(A=e))|0);for(;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);return 0|(A=(0|r)/(0|e)|0)}function qt(A,e){e|=0;var r=0,i=0;if(r=0|ar[(A|=0)+60>>2],i=(0|ar[A+56>>2])-r|0,131072<(r+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);if(131072<(i+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);if(i=(0|br(0|Kt(A,e),r))+i|0,131072<(r+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);if((i+65536|0)>>>0<=131072)return A=i,0|(e=(0|(A=(i=(0|(e=r))/2|0)+A|0))/(0|e)|0);for(;r=(0|r)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);return 0|(e=(0|(e=(e=(0|r)/2|0)+i|0))/(0|r)|0)}function $t(A,e){A|=0;var r=0,i=0,f=0;if(r=(e|=0)+-1|0,131072<(e+65535|0)>>>0)for(e=2;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);else e=2;if(f=0|ar[A+84>>2],i=0|ar[A+80>>2],(0|f)==(0|e)){if(r=i+r|0,131072<(e+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if(131072<(r+65536|0)>>>0)for(;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);}else{if(r=(0|br(i,e))+(0|br(f,r))|0,131072<((e=0|br(f,e))+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if(131072<(r+65536|0)>>>0)for(;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);}if(i=0|ar[A+68>>2],f=(0|ar[A+64>>2])-i|0,131072<(i+65536|0)>>>0)for(;f=(0|f)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);if(131072<(f+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((f=(0|f)/2|0)+65536|0)>>>0;);if(131072<((i<<=1)+65536|0)>>>0)for(;f=(0|f)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);if(131072<(f+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((f=(0|f)/2|0)+65536|0)>>>0;);if((0|e)==(0|i)){if(r=r-f|0,131072<(e+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if((r+65536|0)>>>0<=131072)return 0|(A=(0|(f=(i=(0|(A=e))/2|0)+(f=r)|0))/(0|A)|0);for(;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);return 0|(A=(0|(A=(A=(0|e)/2|0)+r|0))/(0|e)|0)}if(r=(0|br(i,r))-(0|br(f,e))|0,131072<((e=0|br(i,e))+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if((r+65536|0)>>>0<=131072)return 0|(A=(0|(f=(i=(0|(A=e))/2|0)+(f=r)|0))/(0|A)|0);for(;e=(0|e)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);return 0|(A=(0|(A=(A=(0|e)/2|0)+r|0))/(0|e)|0)}function Ao(A,e){e|=0;var r=0,i=0;if(r=0|ar[(A|=0)+68>>2],i=(0|ar[A+64>>2])-r|0,131072<(r+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);if(131072<(i+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);if(i=(0|br(0|$t(A,e),r))+i|0,131072<(r+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);if((i+65536|0)>>>0<=131072)return A=i,0|(e=(0|(A=(i=(0|(e=r))/2|0)+A|0))/(0|e)|0);for(;r=(0|r)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);return 0|(e=(0|(e=(e=(0|r)/2|0)+i|0))/(0|r)|0)}function eo(A){var e=0,r=0,i=0,f=0,n=0;if(n=0|ar[(A|=0)+60>>2],e=(0|ar[A+56>>2])-n|0,f=131072<(n+65536|0)>>>0)for(r=e,A=n;r=(0|r)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);else r=e,A=n;if(131072<(r+65536|0)>>>0)for(;A=(0|A)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);if(131072<((A<<=1)+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);if(131072<(r+65536|0)>>>0)for(;A=(0|A)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);if(i=0-r|0,1==(0|A))if(131072<(65536-r|0)>>>0)for(A=1;A=(0|A)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);else A=1;else{if(131072<(A+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);if(131072<(i+65536|0)>>>0)for(;A=(0|A)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);}if(r=(((0|A)/2|0)+i|0)/(0|A)|0,f)for(A=n;e=(0|e)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);else A=n;if(131072<(e+65536|0)>>>0)for(;A=(0|A)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if(131072<((A<<=1)+65536|0)>>>0)for(;e=(0|e)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);if((e+65536|0)>>>0<=131072)return n=(0|(f=(i=(0|(n=A))/2|0)+(f=e)|0))/(0|n)|0,0|(n=(f=1-r|0)+n|0);for(;A=(0|A)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);return 0|(n=(f=1-r|0)+(n=(0|(n=(n=(0|A)/2|0)+e|0))/(0|A)|0)|0)}function ro(A){var e=0,r=0,i=0,f=0,n=0;if(n=0|ar[(A|=0)+68>>2],e=(0|ar[A+64>>2])-n|0,f=131072<(n+65536|0)>>>0)for(r=e,A=n;r=(0|r)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);else r=e,A=n;if(131072<(r+65536|0)>>>0)for(;A=(0|A)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);if(131072<((A<<=1)+65536|0)>>>0)for(;r=(0|r)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);if(131072<(r+65536|0)>>>0)for(;A=(0|A)/2|0,131072<((r=(0|r)/2|0)+65536|0)>>>0;);if(i=0-r|0,1==(0|A))if(131072<(65536-r|0)>>>0)for(A=1;A=(0|A)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);else A=1;else{if(131072<(A+65536|0)>>>0)for(;i=(0|i)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);if(131072<(i+65536|0)>>>0)for(;A=(0|A)/2|0,131072<((i=(0|i)/2|0)+65536|0)>>>0;);}if(r=(((0|A)/2|0)+i|0)/(0|A)|0,f)for(A=n;e=(0|e)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);else A=n;if(131072<(e+65536|0)>>>0)for(;A=(0|A)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);if(131072<((A<<=1)+65536|0)>>>0)for(;e=(0|e)/2|0,131072<((A=(0|A)/2|0)+65536|0)>>>0;);if((e+65536|0)>>>0<=131072)return n=(0|(f=(i=(0|(n=A))/2|0)+(f=e)|0))/(0|n)|0,0|(n=(f=1-r|0)+n|0);for(;A=(0|A)/2|0,131072<((e=(0|e)/2|0)+65536|0)>>>0;);return 0|(n=(f=1-r|0)+(n=(0|(n=(n=(0|A)/2|0)+e|0))/(0|A)|0)|0)}function io(A,e,r){e|=0,r|=0;var i,f,n,t=0;if(ar[(A|=0)>>2]=0,ar[(n=A+4|0)>>2]=0,((ar[A+8>>2]=0)|(t=0|ar[e+56>>2]))!=(0|(f=0|ar[e+60>>2]))){i=A+8|0,e=t;do{do{if((0|ar[e+48>>2])==(0|r)){if((0|(t=0|ar[n>>2]))==(0|ar[i>>2])){de(A,e);break}se(t,e),ar[n>>2]=64+(0|ar[n>>2]);break}}while(0);e=e+64|0}while((0|e)!=(0|f))}}function fo(A,e,r,i){A|=0,r|=0,i|=0;var f=0;f=0|ar[(e|=0)+56>>2],e=0|ar[e+60>>2];A:do{if((0|f)!=(0|e)){for(;(0|ar[f+48>>2])!=(0|r)||(0|ar[f+20>>2])!=(0|i);)if((0|(f=f+64|0))==(0|e))break A;return void Ge(A,f+52|0)}}while(0);ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0}function no(A,e){e|=0;var r,i,f,n,t,o,a,c,l,u,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0;if(ur=(u=ur)+32|0,o=u+20|0,t=u+16|0,n=u+12|0,a=u+8|0,c=u+4|0,l=u,(0|(b=0|ar[(A|=0)+92>>2]))==(0|(f=0|ar[A+96>>2])))return ur=u,1;r=e+4|0,i=e+8|0;A:for(;;){if((0|(A=0|ar[b+4>>2]))!=(0|(p=0|ar[b+8>>2])))do{if(w=((0|ar[(Z=A+4|0)>>2])-(0|ar[A>>2])|0)>>>24&255,s=0|ar[r>>2],(d=g=0|ar[i>>2])>>>0<=s>>>0){if(m=g=0|ar[e>>2],(0|(s=(v=s-g|0)+1|0))<0){A=9;break A}k=(h=d-g|0)<<1,h=(k=h>>>0<1073741823?k>>>0<s>>>0?s:k:2147483647)?0|hu(k):0,tr[(d=h+v|0)>>0]=w,s=d+1|0,d=d+(0-v)|0,0<(0|v)&&hb(0|d,0|m,0|v),ar[e>>2]=d,ar[r>>2]=s,ar[i>>2]=h+k,g&&(vu(m),s=0|ar[r>>2])}else tr[s>>0]=w,s=1+(0|ar[r>>2])|0,ar[r>>2]=s;if(w=((0|ar[Z>>2])-(0|ar[A>>2])|0)>>>16&255,(d=g=0|ar[i>>2])>>>0<=s>>>0){if(m=g=0|ar[e>>2],(0|(s=(v=s-g|0)+1|0))<0){A=19;break A}k=(h=d-g|0)<<1,h=(k=h>>>0<1073741823?k>>>0<s>>>0?s:k:2147483647)?0|hu(k):0,tr[(d=h+v|0)>>0]=w,s=d+1|0,d=d+(0-v)|0,0<(0|v)&&hb(0|d,0|m,0|v),ar[e>>2]=d,ar[r>>2]=s,ar[i>>2]=h+k,g&&(vu(m),s=0|ar[r>>2])}else tr[s>>0]=w,s=1+(0|ar[r>>2])|0,ar[r>>2]=s;if(w=((0|ar[Z>>2])-(0|ar[A>>2])|0)>>>8&255,(d=g=0|ar[i>>2])>>>0<=s>>>0){if(m=g=0|ar[e>>2],(0|(s=(v=s-g|0)+1|0))<0){A=29;break A}k=(h=d-g|0)<<1,h=(k=h>>>0<1073741823?k>>>0<s>>>0?s:k:2147483647)?0|hu(k):0,tr[(d=h+v|0)>>0]=w,s=d+1|0,d=d+(0-v)|0,0<(0|v)&&hb(0|d,0|m,0|v),ar[e>>2]=d,ar[r>>2]=s,ar[i>>2]=h+k,g&&(vu(m),s=0|ar[r>>2])}else tr[s>>0]=w,s=1+(0|ar[r>>2])|0,ar[r>>2]=s;if(w=(0|ar[Z>>2])-(0|ar[A>>2])&255,(d=g=0|ar[i>>2])>>>0<=s>>>0){if(m=g=0|ar[e>>2],(0|(s=(v=s-g|0)+1|0))<0){A=39;break A}k=(h=d-g|0)<<1,h=(k=h>>>0<1073741823?k>>>0<s>>>0?s:k:2147483647)?0|hu(k):0,tr[(d=h+v|0)>>0]=w,s=d+1|0,d=d+(0-v)|0,0<(0|v)&&hb(0|d,0|m,0|v),ar[e>>2]=d,ar[r>>2]=s,ar[i>>2]=h+k,g&&(vu(m),s=0|ar[r>>2])}else tr[s>>0]=w,s=1+(0|ar[r>>2])|0,ar[r>>2]=s;ar[a>>2]=s,ar[c>>2]=ar[A>>2],ar[l>>2]=ar[Z>>2],ar[n>>2]=ar[a>>2],ar[t>>2]=ar[c>>2],ar[o>>2]=ar[l>>2],to(e,n,t,o),A=A+12|0}while((0|A)!=(0|p));if((0|(b=b+16|0))==(0|f)){A=3;break}}return 3==(0|A)?(ur=u,1):(9!=(0|A)&&19!=(0|A)&&29!=(0|A)&&39!=(0|A)||zl(),0)}function to(A,e,r,i){e|=0,r|=0,i|=0;var f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0;if(e=(u=f=0|ar[(A|=0)>>2])+(b=(0|ar[e>>2])-u|0)|0,a=0|ar[r>>2],t=c=0|ar[i>>2],(0|(s=c-a|0))<=0)return 0|(d=e);if((0|s)<=((l=0|ar[(o=A+8|0)>>2])-(i=n=0|ar[(d=A+4|0)>>2])|0)){if((0|(l=i-e|0))<(0|s)){if((0|(c=i=a+l|0))==(0|t))i=n;else{for(a=n;tr[a>>0]=0|tr[i>>0],i=i+1|0,a=1+(0|ar[d>>2])|0,ar[d>>2]=a,(0|i)!=(0|t););i=a}if(!(0<(0|l)))return 0|(d=e);u=i}else u=n;if((i=e+(l=u-(e+s)|0)|0)>>>0<n>>>0)for(a=u;tr[a>>0]=0|tr[i>>0],i=i+1|0,a=1+(0|ar[d>>2])|0,ar[d>>2]=a,(0|i)!=(0|n););if(0|l&&wb(u+(0-l)|0,0|e,0|l),(0|(i=0|ar[r>>2]))==(0|c))return 0|(d=e);for(a=e;tr[a>>0]=0|tr[i>>0],(0|(i=i+1|0))!=(0|c);)a=a+1|0;return 0|e}if((0|(i=i-u+s|0))<0&&zl(),c=(u=l-u|0)<<1,c=u>>>0<1073741823?c>>>0<i>>>0?i:c:2147483647,u=e,i=s=(l=c?0|hu(c):0)+b|0,b=l+c|0,(0|a)==(0|t))c=f;else{for(c=s;tr[c>>0]=0|tr[a>>0],i=c=i+1|0,(0|(a=a+1|0))!=(0|t););c=0|ar[A>>2]}return l=s+(0-(a=u-c|0))|0,0<(0|a)&&hb(0|l,0|c,0|a),e=0<(0|(a=(0|ar[d>>2])-u|0))?(hb(0|i,0|e,0|a),i=i+a|0,0|ar[A>>2]):c,ar[A>>2]=l,ar[d>>2]=i,ar[o>>2]=b,e&&vu(e),0|(d=s)}function oo(A,e,r,i){e|=0,r|=0,i|=0,ar[(A|=0)>>2]=e,ar[A+4>>2]=r,yu(A+8|0,i)}function ao(A,e,r){A|=0,r|=0;var i,f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0;if(ur=(n=ur)+176|0,o=n+160|0,i=n+16|0,f=n,t=0|ar[(e|=0)>>2],!r)return ar[A>>2]=t,ar[A+4>>2]=ar[e+4>>2],e=0|ar[(e=6168)>>2],ar[(A=A+8|0)>>2]=e,void(ur=n);if(t){switch(u=64+i|0,ar[(s=8+i|0)>>2]=4524,b=12+i|0,ar[i>>2]=188,ar[u>>2]=208,Jf(64+i|(ar[4+i>>2]=0),b),ar[136+i>>2]=0,ar[140+i>>2]=-1,ar[i>>2]=4504,ar[u>>2]=4544,ar[s>>2]=4524,Sf(b),ar[b>>2]=4340,ar[(s=44+i|0)>>2]=0,ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s+12>>2]=0,ar[60+i>>2]=24,ar[o>>2]=0,ar[o+4>>2]=0,ar[o+8>>2]=0,Xe(b,o),(0|tr[o+11>>0])<0&&vu(0|ar[o>>2]),l=8+i|0,0|ar[e>>2]){case 0:a=32215;break;case 1:a=24245;break;case 2:a=24231;break;case 3:a=24209;break;case 4:a=24189;break;case 5:a=24177;break;case 6:a=24153;break;case 7:a=24119;break;case 8:a=24085;break;case 9:a=24040;break;case 10:a=24011;break;default:sr(55739,23985,74,23994)}c=0|We(0|We(l,a,0|Vc(a)),25392,2),We(c,a=0|function(A){var e=0;switch(0|(A|=0)){case 0:e=25380;break;case 100:e=25357;break;case 101:e=25340;break;case 118:e=25322;break;case 119:e=25302;break;case 102:e=25288;break;case 103:e=25274;break;case 104:e=25260;break;case 105:e=25246;break;case 106:e=25232;break;case 131:e=25218;break;case 107:e=25204;break;case 108:e=25190;break;case 109:e=25176;break;case 110:e=25162;break;case 111:e=25148;break;case 112:e=25134;break;case 113:e=25120;break;case 125:e=25106;break;case 114:e=25085;break;case 115:e=25039;break;case 116:e=25008;break;case 117:e=24991;break;case 120:e=24954;break;case 121:e=24933;break;case 122:e=24896;break;case 123:e=24860;break;case 124:e=24833;break;case 126:e=24806;break;case 127:e=24775;break;case 128:e=24749;break;case 129:e=24730;break;case 130:e=24713;break;case 1e3:e=24689;break;case 2e3:e=24657;break;case 2001:e=24634;break;case 2002:e=24596;break;case 2003:e=24546;break;case 2004:e=24496;break;case 2005:e=24474;break;case 2006:e=24450;break;case 3e3:e=24432;break;case 3001:e=24409;break;case 3002:e=24384;break;case 3003:e=24355;break;case 3004:e=24318;break;case 4e3:e=24296;break;case 5e3:e=24271;break;default:sr(55739,23985,198,23994)}return 0|e}(0|ar[(o=e+4|0)>>2]),0|Vc(a)),(t=0|tr[(c=(a=e+8|0)+11|0)>>0])<<24>>24<0?t=0|ar[e+12>>2]:t&=255,0|t&&(d=0|We(l,25392,2),We(d,(t=(c=0|tr[c>>0])<<24>>24<0)?0|ar[a>>2]:a,t?0|ar[e+12>>2]:255&c)),Ie(f,b),Eu(r,f),t=(0|tr[r+11>>0])<0?0|ar[r>>2]:r,ar[(a=r+12|0)>>2]=t,(0|tr[f+11>>0])<0&&vu(0|ar[f>>2]),ar[i>>2]=4504,ar[u>>2]=4544,ar[l>>2]=4524,ar[b>>2]=4340,(0|tr[s+11>>0])<0&&vu(0|ar[s>>2]),kf(b),bf(u),t=0|ar[e>>2]}else ar[(a=r+12|0)>>2]=32215,o=e+4|0,t=0;ar[A>>2]=t,ar[A+4>>2]=ar[o>>2],e=0|ar[(e=a)>>2],ar[(d=A+8|0)>>2]=e,ur=n}function co(A){var e,r,i;for(ar[(A|=0)+112>>2]=0,r=A+112|(ar[A+116>>2]=0),e=i=A+108|0;(0|(A=A+4|(ar[A>>2]=0)))<(0|e););ar[i>>2]=r}function lo(A){var e,r=0,i=0,f=0,n=0;if(uo((A|=0)+108|0,0|ar[A+112>>2]),0|(r=0|ar[A+104>>2])&&du(r),0|(r=0|ar[A+96>>2])&&du(r),0|(r=0|ar[A+88>>2])&&du(r),0|(r=0|ar[A+80>>2])&&du(r),0|(r=0|ar[A+72>>2])&&du(r),0|(r=0|ar[A+64>>2])&&du(r),0|(r=0|ar[A+56>>2])&&du(r),0|(r=0|ar[A+48>>2])&&du(r),0|(r=0|ar[A+40>>2])&&du(r),0|(r=0|ar[A+32>>2])&&du(r),0|(r=0|ar[A+24>>2])&&du(r),0|(r=0|ar[(e=A+8|0)>>2])){if((0|(i=0|ar[(n=A+12|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}(r=0|ar[A+4>>2])&&du(r)}function uo(A,e){A|=0,(e|=0)&&(uo(A,0|ar[e>>2]),uo(A,0|ar[e+4>>2]),0|(A=0|ar[e+24>>2])&&du(A),vu(e))}function bo(A,e,r){A|=0,e|=0;var i,f,n,t,o,a=0;ur=(o=ur)+48|0,n=(t=o)+32|0,f=0|ar[(r|=0)>>2],0|(a=0|ar[r+4>>2])&&bu(a),ar[e>>2]=f,r=0|ar[(i=e+4|0)>>2],ar[i>>2]=a,r?(du(r),r=0|ar[e>>2],a=0|ar[i>>2]):r=f,ar[n>>2]=r,0|(ar[(r=4+n|0)>>2]=a)&&bu(a),WA(t,n,-1,2147483647,0),0|(r=0|ar[r>>2])&&du(r),function(A,e,r){A|=0;var i,f,n,t,o,a,c,l,u,b,s,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0;ur=(s=ur)+288|0,t=s+264|0,C=s+108|0,o=s+96|0,c=s+84|0,l=s+72|0,u=s+60|0,R=s+48|0,N=s+36|0,_=s+24|0,Q=s+12|0,i=4+(b=(D=s)+276|0)|0,w=24+(r|=0)|0,v=r+16|0,m=12+(e|=0)|0,g=e+16|0,Z=e+8|0,p=e+36|0,y=e+40|0,B=e+20|0,E=e+24|0,n=11+(f=8+(a=s+120|0)|0)|0;for(;;){if(ar[b>>2]=0,ar[i>>2]=0,Ae(a,r,b),(0|ar[a>>2])!=(0|ar[14148])){Y=40;break}if(0|tr[w>>0]){Y=35;break}if(0==(0|ar[(Y=v)>>2])&0==(0|ar[Y+4>>2])){Y=30;break}(0|(d=0|ar[m>>2]))==(0|ar[g>>2])?Ut(Z,b):(ar[d>>2]=ar[b>>2],k=0|ar[i>>2],(ar[d+4>>2]=k)&&(bu(k),d=0|ar[m>>2]),ar[m>>2]=d+8),k=0|ar[b>>2],1835365473==(0|(d=0|ar[k+20>>2]))&&(0!=(0|k)&&0!=(0|(X=0|qu(k,128,160,0)))?(d=X,h=0|ar[i>>2],(k=h)&&bu(h)):k=d=0,ar[p>>2]=d,d=0|ar[y>>2],ar[y>>2]=k,0|d&&du(d),k=0|ar[b>>2],d=0|ar[k+20>>2]),1718909296==(0|d)&&(0!=(0|k)&&0!=(0|(W=0|qu(k,128,144,0)))?(d=W,h=0|ar[i>>2],(k=h)&&bu(h)):k=d=0,ar[B>>2]=d,d=0|ar[E>>2],ar[E>>2]=k,0|d&&du(d)),(0|tr[n>>0])<0&&vu(0|ar[f>>2]),0|(d=0|ar[i>>2])&&du(d)}30!=(0|Y)&&35!=(0|Y)&&40!=(0|Y)||((0|tr[n>>0])<0&&vu(0|ar[f>>2]),0|(d=0|ar[i>>2])&&du(d));if(!(k=0|ar[(d=e+20|0)>>2]))return ar[t>>2]=0,ar[4+t>>2]=0,ar[8+t>>2]=0,oo(A,2,102,t),0<=(0|tr[11+t>>0])||vu(0|ar[t>>2]),ur=s;if(!(0|St(k,1751476579)||0|St(0|ar[d>>2],1751476600)||0|St(0|ar[d>>2],1835623985))&&!(0|St(0|ar[d>>2],1635150182)))return k=64+a|0,ar[(w=8+a|0)>>2]=4524,h=12+a|0,ar[a>>2]=188,ar[k>>2]=208,ar[4+a>>2]=0,Jf(64+a|0,h),ar[136+a>>2]=0,ar[140+a>>2]=-1,ar[a>>2]=4504,ar[k>>2]=4544,ar[w>>2]=4524,Sf(h),ar[h>>2]=4340,ar[(w=44+a|0)>>2]=0,ar[w+4>>2]=0,ar[w+8>>2]=0,ar[w+12>>2]=0,ar[60+a>>2]=24,ar[b>>2]=0,ar[4+b>>2]=0,ar[8+b>>2]=0,Xe(h,b),(0|tr[11+b>>0])<0&&vu(0|ar[b>>2]),We(d=8+a|0,25395,44),Ie(C,h),oo(A,3,0,C),(0|tr[C+11>>0])<0&&vu(0|ar[C>>2]),ar[a>>2]=4504,ar[k>>2]=4544,ar[d>>2]=4524,ar[h>>2]=4340,(0|tr[w+11>>0])<0&&vu(0|ar[w>>2]),kf(h),bf(k),ur=s;if(!(d=0|ar[(v=e+36|0)>>2]))return ar[o>>2]=0,ar[4+o>>2]=0,ar[8+o>>2]=0,oo(A,2,104,o),0<=(0|tr[11+o>>0])||vu(0|ar[o>>2]),ur=s;Tt(b,d,1751411826),k=0!=(0|(d=0|ar[b>>2]))&&0!=(0|(I=0|qu(d,128,1128,0)))?(d=I,k=0|ar[4+b>>2],(h=k)&&bu(k),h):d=0;ar[(h=e+28|0)>>2]=d,d=0|ar[(C=e+32|0)>>2],ar[C>>2]=k,0|d&&du(d);0|(d=0|ar[4+b>>2])&&du(d);if(0|(C=0|ar[h>>2])&&1885954932!=(0|ar[C+60>>2]))return ar[c>>2]=0,ar[4+c>>2]=0,ar[8+c>>2]=0,oo(A,2,114,c),0<=(0|tr[11+c>>0])||vu(0|ar[c>>2]),ur=s;Tt(b,0|ar[v>>2],1885959277),k=0!=(0|(d=0|ar[b>>2]))&&0!=(0|(G=0|qu(d,128,1096,0)))?(d=G,k=0|ar[4+b>>2],(h=k)&&bu(k),h):d=0;ar[(h=e+84|0)>>2]=d,d=0|ar[(G=e+88|0)>>2],ar[G>>2]=k,0|d&&du(d);0|(d=0|ar[4+b>>2])&&du(d);if(!(0|ar[h>>2]))return ar[l>>2]=0,ar[4+l>>2]=0,ar[8+l>>2]=0,oo(A,2,107,l),0<=(0|tr[11+l>>0])||vu(0|ar[l>>2]),ur=s;Tt(b,0|ar[v>>2],1768977008),k=0!=(0|(d=0|ar[b>>2]))&&0!=(0|(V=0|qu(d,128,968,0)))?(d=V,k=0|ar[4+b>>2],(h=k)&&bu(k),h):d=0;ar[(w=e+100|0)>>2]=d,d=0|ar[(V=e+104|0)>>2],ar[V>>2]=k,0|d&&du(d);0|(d=0|ar[4+b>>2])&&du(d);if(!(d=0|ar[w>>2]))return ar[u>>2]=0,ar[4+u>>2]=0,ar[8+u>>2]=0,oo(A,2,112,u),0<=(0|tr[11+u>>0])||vu(0|ar[u>>2]),ur=s;Tt(b,d,1768973167),k=0!=(0|(d=0|ar[b>>2]))&&0!=(0|(F=0|qu(d,128,936,0)))?(d=F,k=0|ar[4+b>>2],(h=k)&&bu(k),h):d=0;ar[(h=e+44|0)>>2]=d,d=0|ar[(F=e+48|0)>>2],ar[F>>2]=k,0|d&&du(d);0|(d=0|ar[4+b>>2])&&du(d);if(!(0|ar[h>>2]))return ar[R>>2]=0,ar[R+4>>2]=0,ar[R+8>>2]=0,oo(A,2,108,R),0<=(0|tr[R+11>>0])||vu(0|ar[R>>2]),ur=s;Tt(b,0|ar[w>>2],1768975713),d=0|ar[b>>2];do{if(d){if(!(d=0|qu(d,128,904,0))){k=d=0;break}if(k=0|ar[4+b>>2],!(h=k)){k=h;break}bu(k),k=h}else k=d=0}while(0);ar[(h=e+52|0)>>2]=d,d=0|ar[(R=e+56|0)>>2],ar[R>>2]=k,0|d&&du(d);0|(d=0|ar[4+b>>2])&&du(d);if(!(0|ar[h>>2]))return ar[N>>2]=0,ar[N+4>>2]=0,ar[N+8>>2]=0,oo(A,2,109,N),0<=(0|tr[N+11>>0])||vu(0|ar[N>>2]),ur=s;Tt(b,0|ar[v>>2],1768714083),d=0|ar[b>>2];do{if(d){if(!(d=0|qu(d,128,1064,0))){k=d=0;break}if(k=0|ar[4+b>>2],!(h=k)){k=h;break}bu(k),k=h}else k=d=0}while(0);ar[(h=e+60|0)>>2]=d,d=0|ar[(N=e+64|0)>>2],ar[N>>2]=k,0|d&&du(d);0|(d=0|ar[4+b>>2])&&du(d);if(!(0|ar[h>>2]))return ar[_>>2]=0,ar[_+4>>2]=0,ar[_+8>>2]=0,oo(A,2,110,_),0<=(0|tr[_+11>>0])||vu(0|ar[_>>2]),ur=s;Tt(b,0|ar[v>>2],1768186228),d=0|ar[b>>2];do{if(d){if(!(d=0|qu(d,128,616,0))){k=d=0;break}if(h=0|ar[4+b>>2],!(k=h))break;bu(h)}else k=d=0}while(0);ar[e+68>>2]=d,d=0|ar[(_=e+72|0)>>2],ar[_>>2]=k,0|d&&du(d);0|(d=0|ar[4+b>>2])&&du(d);Tt(b,0|ar[v>>2],1769104742),d=0|ar[b>>2];do{if(d){if(!(d=0|qu(d,128,712,0))){k=d=0;break}if(h=0|ar[4+b>>2],!(k=h))break;bu(h)}else k=d=0}while(0);ar[e+76>>2]=d,d=0|ar[(_=e+80|0)>>2],ar[_>>2]=k,0|d&&du(d);0|(d=0|ar[4+b>>2])&&du(d);Tt(b,0|ar[v>>2],1768517222),d=0|ar[b>>2];do{if(d){if(!(d=0|qu(d,128,1032,0))){k=d=0;break}if(k=0|ar[4+b>>2],!(h=k)){k=h;break}bu(k),k=h}else k=d=0}while(0);ar[(h=e+92|0)>>2]=d,d=0|ar[(_=e+96|0)>>2],ar[_>>2]=k,0|d&&du(d);0|(d=0|ar[4+b>>2])&&du(d);if(!(d=0|ar[h>>2]))return ar[Q>>2]=0,ar[Q+4>>2]=0,ar[Q+8>>2]=0,oo(A,2,111,Q),0<=(0|tr[Q+11>>0])||vu(0|ar[Q>>2]),ur=s;(function(A,e,r){e|=0,r|=0;var i,f,n,t=0,o=0;if(ar[(A|=0)>>2]=0,ar[(n=A+4|0)>>2]=0,((ar[A+8>>2]=0)|(t=0|ar[e+44>>2]))!=(0|(f=0|ar[e+48>>2]))){i=A+8|0;do{o=e=0|ar[t>>2];do{if((0|ar[e+20>>2])==(0|r)){if((0|(e=0|ar[n>>2]))==(0|ar[i>>2])){Ut(A,t);break}ar[e>>2]=o,o=0|ar[t+4>>2],(ar[e+4>>2]=o)&&(bu(o),e=0|ar[n>>2]),ar[n>>2]=e+8}}while(0);t=t+8|0}while((0|t)!=(0|f))}})(b,d,1768842853),d=0|ar[b>>2],p=0|ar[(W=4+b|0)>>2];A:do{if((0|d)==(0|p))Y=186;else for(y=D+11|0,B=e+108|0,X=E=e+112|0,Z=e+116|0;;){k=0|ar[d>>2];do{if(k){if(!(h=0|qu(k,128,1e3,0))){k=0,Y=164;break}if(g=h,(k=0|ar[d+4>>2])?bu(k):k=0,!h){Y=164;break}m=0|ar[h+56>>2],0|(r=k)&&bu(k),h=0|ar[E>>2];do{if(h){for(v=X;;)if(w=0|ar[h+16>>2],m>>>0<w>>>0){if(!(w=0|ar[h>>2])){Y=172;break}v=h,h=w}else{if(m>>>0<=w>>>0){Y=176;break}if(!(w=0|ar[(v=h+4|0)>>2])){Y=175;break}h=w}if(172==(0|Y)){Y=0,v=w=h;break}if(175==(0|Y)){Y=0,w=h;break}if(176==(0|Y)){Y=0,w=h;break}}else v=w=E}while(0);if(0|ar[v>>2]){if(!k){h=0;break}du(k),h=0;break}h=0|hu(28),ar[h+16>>2]=m,ar[h+20>>2]=g,ar[h+24>>2]=r,ar[h>>2]=0,ar[h+4>>2]=0,ar[h+8>>2]=w,ar[v>>2]=h,(w=0|ar[ar[B>>2]>>2])&&(ar[B>>2]=w,h=0|ar[v>>2]),so(0|ar[X>>2],h),ar[Z>>2]=1+(0|ar[Z>>2]),h=0}else k=0,Y=164}while(0);do{if(164==(0|Y)){if(Y=0,ar[D>>2]=0,ar[D+4>>2]=0,ar[D+8>>2]=0,oo(A,2,125,D),0<=(0|tr[y>>0])){h=1;break}vu(0|ar[D>>2]),h=1}}while(0);if(0|k&&du(k),d=d+8|0,0|h)break A;if((0|d)==(0|p)){Y=186;break}}}while(0);186==(0|Y)&&(e=0|ar[(Q=56592)+4>>2],ar[(D=A)>>2]=ar[Q>>2],ar[D+4>>2]=e,yu(A+8|0,56600));if(0|(d=0|ar[b>>2])){if((0|(k=0|ar[W>>2]))!=(0|d)){for(;h=k+-8|0,ar[W>>2]=h,(0|(k=(k=0|ar[k+-4>>2])?(du(k),0|ar[W>>2]):h))!=(0|d););d=0|ar[b>>2]}vu(d)}ur=s}(A,e,t),ur=((r=0|ar[t+4>>2])&&du(r),o)}function so(A,e){var r=0,i=0,f=0,n=0,t=0;if(t=(0|(e|=0))==(0|(A|=0)),tr[e+12>>0]=1&t,!t){for(;;){if(t=0|ar[e+8>>2],0|tr[(f=t+12|0)>>0]){r=23;break}if(i=0|ar[(n=t+8|0)>>2],(0|(r=0|ar[i>>2]))==(0|t)){if(!(r=0|ar[i+4>>2])){r=7;break}if(0|tr[(r=r+12|0)>>0]){r=7;break}e=r}else{if(!r){r=16;break}if(0|tr[(r=r+12|0)>>0]){r=16;break}e=r}if(tr[f>>0]=1,t=(0|i)==(0|A),tr[i+12>>0]=1&t,tr[e>>0]=1,t){r=23;break}e=i}if(7==(0|r))return f=(0|ar[t>>2])==(0|e)?(e=t,i):(r=0|ar[(A=t+4|0)>>2],e=0|ar[r>>2],e=(ar[A>>2]=e)?(ar[e+8>>2]=t,0|ar[n>>2]):i,ar[r+8>>2]=e,e=0|ar[n>>2],ar[((0|ar[e>>2])==(0|t)?e:e+4|0)>>2]=r,ar[r>>2]=t,ar[n>>2]=r,0|ar[(e=r)+8>>2]),tr[e+12>>0]=1,e=(tr[f+12>>0]=0)|ar[f>>2],i=0|ar[(r=e+4|0)>>2],0|(ar[f>>2]=i)&&(ar[i+8>>2]=f),t=f+8|0,ar[e+8>>2]=ar[t>>2],n=0|ar[t>>2],ar[((0|ar[n>>2])==(0|f)?n:n+4|0)>>2]=e,ar[r>>2]=f,void(ar[t>>2]=e);if(16==(0|r))return(0|ar[t>>2])==(0|e)?(f=0|ar[t>>2],e=0|ar[(r=f+4|0)>>2],(ar[t>>2]=e)&&(ar[e+8>>2]=t,i=0|ar[n>>2]),ar[f+8>>2]=i,e=0|ar[n>>2],ar[((0|ar[e>>2])==(0|t)?e:e+4|0)>>2]=f,ar[r>>2]=t,ar[n>>2]=f,i=0|ar[(e=f)+8>>2]):e=t,tr[e+12>>0]=1,e=(tr[i+12>>0]=0)|ar[(t=i+4|0)>>2],r=0|ar[e>>2],0|(ar[t>>2]=r)&&(ar[r+8>>2]=i),t=i+8|0,ar[e+8>>2]=ar[t>>2],n=0|ar[t>>2],ar[((0|ar[n>>2])==(0|i)?n:n+4|0)>>2]=e,ar[e>>2]=i,void(ar[t>>2]=e)}}function ko(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a;ur=(n=ur)+16|0,o=n,t=0|hu(48),ar[4+t>>2]=0,ar[8+t>>2]=0,ar[t>>2]=6180,function(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n=0;if(ar[(A|=0)>>2]=4232,ar[(n=A+8|0)>>2]=r,ar[n+4>>2]=i,ar[(n=A+16|0)>>2]=0,ar[n+4>>2]=0,ar[(n=A+24|0)>>2]=0,!f)return i=e,ar[(f=A+4|0)>>2]=i;i=0|wu(f=i>>>0<0|0==(0|i)&r>>>0<4294967295?r:-1),hb(0|(ar[n>>2]=i),0|e,0|r),ar[(f=A+4|0)>>2]=i}(a=16+t|0,r,i,0,f),ar[o>>2]=a,bu(ar[o+4>>2]=t),bo(A,e,o),du(t),du(t),ur=n}function ho(A,e,r){A|=0,r|=0;var i,f=0,n=0,t=0;if(f=0|ar[(i=(e|=0)+112|0)>>2]){e=i,n=f;A:for(;;){for(f=n;!((0|ar[f+16>>2])>>>0>=r>>>0);)if(!(f=0|ar[f+4>>2]))break A;if(!(n=0|ar[f>>2])){e=f;break}e=f}(0|e)!=(0|i)&&(0|ar[e+16>>2])>>>0<=r>>>0?(f=0|ar[e+20>>2],(e=0|ar[e+24>>2])?bu(e):e=0,f?yu(A,f+64|0):t=11):(e=0,t=11)}else e=0,t=11;11==(0|t)&&(ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0),e&&du(e)}function wo(A,e,r){A|=0,r|=0;var i,f=0,n=0,t=0;if(f=0|ar[(i=(e|=0)+112|0)>>2]){e=i,n=f;A:for(;;){for(f=n;!((0|ar[f+16>>2])>>>0>=r>>>0);)if(!(f=0|ar[f+4>>2]))break A;if(!(n=0|ar[f>>2])){e=f;break}e=f}(0|e)!=(0|i)&&(0|ar[e+16>>2])>>>0<=r>>>0?(f=0|ar[e+20>>2],(e=0|ar[e+24>>2])?bu(e):e=0,f?yu(A,f+88|0):t=11):(e=0,t=11)}else e=0,t=11;11==(0|t)&&(ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0),e&&du(e)}function vo(A,e,r,i){A|=0,r|=0,i|=0;var f,n,t,o;return ur=(o=ur)+32|0,f=o+12|0,n=o,(t=0|ar[(e|=0)+44>>2])?0|ar[(e=e+52|0)>>2]?(Ht(A,t,r,e,i),void(ur=o)):(ar[n>>2]=0,ar[n+4>>2]=0,ar[n+8>>2]=0,oo(A,2,109,n),void(ur=(0<=(0|tr[n+11>>0])||vu(0|ar[n>>2]),o))):(ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,oo(A,2,108,f),0<=(0|tr[11+f>>0])||vu(0|ar[f>>2]),void(ur=o))}function mo(A,e,r,i){A|=0,r|=0,i|=0;var f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0;if(ur=(d=ur)+352|0,l=d+192|0,C=d+328|0,V=d+304|0,b=d+340|0,s=d+316|0,u=d+292|0,T=d+48|0,R=d+280|0,F=d+268|0,M=d+24|0,n=d+256|0,t=(c=d)+248|0,o=d+232|0,a=d+224|0,f=d+216|0,0|(W=0|ar[(G=(e|=0)+112|0)>>2])){E=G,I=W;A:for(;;){for(X=I;!((0|ar[X+16>>2])>>>0>=r>>>0);)if(!(X=0|ar[X+4>>2]))break A;if(!(I=0|ar[X>>2])){E=X;break}E=X}if((0|E)!=(0|G)&&(0|ar[E+16>>2])>>>0<=r>>>0){E=G;A:for(;;){for(X=W;!((0|ar[X+16>>2])>>>0>=r>>>0);)if(!(X=0|ar[X+4>>2]))break A;if(!(W=0|ar[X>>2])){E=X;break}E=X}if((0|E)!=(0|G)&&(0|ar[E+16>>2])>>>0<=r>>>0)if(W=0|ar[E+20>>2],(E=0|ar[E+24>>2])?bu(E):E=0,X=W){if(yu(b,X+64|0),yu(s,X+88|0),function(A,e){e|=0;var r,i,f,n=0;if(ar[(A|=0)>>2]=0,ar[(f=A+4|0)>>2]=0,ar[A+8>>2]=0,n=(0|ar[(i=e+4|0)>>2])-(0|ar[e>>2])|0,!(r=n>>5))return;134217727<r>>>0&&zl();if(n=0|hu(n),ar[f>>2]=n,ar[A>>2]=n,ar[A+8>>2]=n+(r<<5),A=0|ar[e>>2],e=0|ar[i>>2],(0|A)==(0|e))return;for(;ar[n>>2]=ar[A>>2],ar[n+4>>2]=ar[A+4>>2],ar[n+8>>2]=ar[A+8>>2],ar[n+12>>2]=ar[A+12>>2],Dt(n+16|0,A+16|0),A=A+32|0,n=32+(0|ar[f>>2])|0,ar[f>>2]=n,(0|A)!=(0|e););}(u,56+(0|ar[(Q=e+60|0)>>2])|0),(0|(X=0|ar[u>>2]))!=(0|(W=0|ar[(U=4+u|0)>>2]))){for(J=0;J=(V=(0|ar[X>>2])==(0|r))?X:J,!(V|(0|(X=X+32|0))==(0|W)););if(J){ar[F>>2]=0,ar[F+4>>2]=0,ar[F+8>>2]=0,oo(l,4,3e3,F),(0|tr[F+11>>0])<0&&vu(0|ar[F>>2]),W=0|tr[(I=11+b|0)>>0],X=0|ar[(C=4+b|0)>>2];do{if(4==(0|(W<<24>>24<0?X:255&W))){if(0|Yu(b,0,-1,30298,4)){W=0|tr[I>>0],X=0|ar[C>>2],S=72;break}ar[T>>2]=0,ar[(G=T+4|0)>>2]=0,Ht(M,(ar[T+8>>2]=0)|ar[e+44>>2],r,e+52|0,T);do{if(0|ar[M>>2])C=0|ar[(e=M)+4>>2],ar[(i=A)>>2]=ar[e>>2],ar[i+4>>2]=C,C=M+8|0,ar[(i=A+8|0)>>2]=ar[C>>2],ar[i+4>>2]=ar[C+4>>2],ar[i+8>>2]=ar[C+8>>2],ar[C>>2]=0,ar[C+4>>2]=0,ar[C+8>>2]=0,C=1;else{for((0|(X=0|ar[T>>2]))==(0|(C=0|ar[G>>2]))?sr(55739,25520,565,25571):(Y=X,_=0);;){if(X=0|ar[Y+4>>2],1752589123==(0|ar[X+20>>2])){do{if(X){if(!(X=0|qu(X,128,680,0))){D=N=0;break}if(!(I=W=0|ar[Y+8>>2])){N=X,D=I;break}bu(W),N=X,D=I}else D=N=0}while(0);if(0|_&&du(_),N)break;X=D}else X=_;if((0|(Y=Y+12|0))==(0|C)){S=48;break}_=X}48==(0|S)&&sr(55739,25520,565,25571);do{if(0|no(N,i))X=0|ar[Q>>2],ar[t>>2]=ar[e>>2],C=4+t|0,W=0|ar[e+4>>2],0|(ar[C>>2]=W)&&bu(W),Ot(c,X,J,t,e+68|0,i),X=0|ar[(W=c)+4>>2],ar[(I=l)>>2]=ar[W>>2],ar[I+4>>2]=X,X=c+8|0,(0|tr[(W=(I=8+l|0)+11|0)>>0])<0?(tr[ar[I>>2]>>0]=0,ar[12+l>>2]=0):(tr[I>>0]=0,tr[W>>0]=0),Cu(I,0),ar[I>>2]=ar[X>>2],ar[I+4>>2]=ar[X+4>>2],ar[I+8>>2]=ar[X+8>>2],ar[X>>2]=0,ar[X+4>>2]=0,(ar[X+8>>2]=0)|(X=0|ar[C>>2])&&du(X),X=0;else{if(ar[n>>2]=0,ar[4+n>>2]=0,ar[8+n>>2]=0,oo(A,2,117,n),0<=(0|tr[11+n>>0])){X=1;break}vu(0|ar[n>>2]),X=1}}while(0);if(!D){C=X;break}du(D),C=X}}while(0);if((0|tr[(X=M+8|0)+11>>0])<0&&vu(0|ar[X>>2]),0|(X=0|ar[T>>2])){if((0|(W=0|ar[G>>2]))!=(0|X)){for(;I=W+-12|0,ar[G>>2]=I,(0|(W=(W=0|ar[W+-4>>2])?(du(W),0|ar[G>>2]):I))!=(0|X););X=0|ar[T>>2]}vu(X)}C||(S=118)}else S=72}while(0);do{if(72==(0|S)){if(4==(0|(W<<24>>24<0?X:255&W))&&0==(0|Yu(b,0,-1,30318,4))){ar[T>>2]=0,ar[(R=T+4|0)>>2]=0,Ht(M,(ar[T+8>>2]=0)|ar[e+44>>2],r,e+52|0,T);do{if(0|ar[M>>2])C=0|ar[(e=M)+4>>2],ar[(i=A)>>2]=ar[e>>2],ar[i+4>>2]=C,C=M+8|0,ar[(i=A+8|0)>>2]=ar[C>>2],ar[i+4>>2]=ar[C+4>>2],ar[i+8>>2]=ar[C+8>>2],ar[C>>2]=0,ar[C+4>>2]=0,ar[C+8>>2]=0,C=1;else{X=0|ar[T>>2],V=0|ar[R>>2];A:do{if((0|X)==(0|V))X=0,S=86;else{for(G=X,X=0;;){if(W=0|ar[G+4>>2],1635135811==(0|ar[W+20>>2])){do{if(W){if(!(W=0|qu(W,128,648,0))){F=W=0;break}if(!(C=I=0|ar[G+8>>2])){F=C;break}bu(I),F=C}else F=W=0}while(0);if(0|X&&du(X),W)break;X=F}if((0|(G=G+12|0))==(0|V)){S=86;break A}}(0|(W=(X=W)+68|0))!=(0|i)&&(k=i,h=0|ar[W>>2],w=0|ar[X+72>>2],B=y=p=Z=g=m=v=void 0,m=(B=w|=B=y=p=Z=g=0)-(v=h|=0)|0,((g=0|ar[(p=8+(k|=0)|0)>>2])-(y=Z=0|ar[k>>2])|0)>>>0<m>>>0?(Z&&((0|ar[(g=k+4|0)>>2])!=(0|y)&&(ar[g>>2]=y),vu(y),ar[p>>2]=0,ar[g>>2]=0,g=ar[k>>2]=0),(0|m)<0&&zl(),B=g<<1,(0|(g=g>>>0<1073741823?B>>>0<m>>>0?m:B:2147483647))<0&&zl(),y=0|hu(g),ar[(B=k+4|0)>>2]=y,ar[k>>2]=y,ar[p>>2]=y+g,hb(0|y,0|h,0|m),ar[B>>2]=y+m):(0|(g=(Z=w=(k=(Z=(0|ar[(p=k+4|0)>>2])-Z|0)>>>0<m>>>0)?h+Z|0:w)-v|0)&&wb(0|y,0|h,0|g),g=y+g|0,k?(0|(g=B-Z|0))<=0||(hb(0|ar[p>>2],0|w,0|g),ar[p>>2]=(0|ar[p>>2])+g):(0|ar[p>>2])!=(0|g)&&(ar[p>>2]=g))),X=0|ar[Q>>2],ar[a>>2]=ar[e>>2],C=4+a|0,W=0|ar[e+4>>2],0|(ar[C>>2]=W)&&bu(W),Ot(c,X,J,a,e+68|0,i),X=0|ar[(W=c)+4>>2],ar[(I=l)>>2]=ar[W>>2],ar[I+4>>2]=X,X=c+8|0,(0|tr[(W=(I=8+l|0)+11|0)>>0])<0?(tr[ar[I>>2]>>0]=0,ar[12+l>>2]=0):(tr[I>>0]=0,tr[W>>0]=0),Cu(I,0),ar[I>>2]=ar[X>>2],ar[I+4>>2]=ar[X+4>>2],ar[I+8>>2]=ar[X+8>>2],ar[X>>2]=0,ar[X+4>>2]=0,(ar[X+8>>2]=0)|(X=0|ar[C>>2])&&du(X),W=0,X=F}}while(0);do{if(86==(0|S)){if(ar[o>>2]=0,ar[4+o>>2]=0,ar[8+o>>2]=0,oo(A,2,131,o),0<=(0|tr[11+o>>0])){W=1;break}vu(0|ar[o>>2]),W=1}}while(0);if(!X){C=W;break}du(X),C=W}}while(0);if((0|tr[(X=M+8|0)+11>>0])<0&&vu(0|ar[X>>2]),0|(X=0|ar[T>>2])){if((0|(W=0|ar[R>>2]))!=(0|X)){for(;I=W+-12|0,ar[R>>2]=I,(0|(W=(W=0|ar[W+-4>>2])?(du(W),0|ar[R>>2]):I))!=(0|X););X=0|ar[T>>2]}vu(X)}if(C)break;S=118;break}X=0|ar[Q>>2],ar[f>>2]=ar[e>>2],C=4+f|0,W=0|ar[e+4>>2],0|(ar[C>>2]=W)&&bu(W),Ot(T,X,J,f,e+68|0,i),X=0|ar[(W=T)+4>>2],ar[(I=l)>>2]=ar[W>>2],ar[I+4>>2]=X,X=T+8|0,(0|tr[(W=(I=8+l|0)+11|0)>>0])<0?(tr[ar[I>>2]>>0]=0,ar[12+l>>2]=0):(tr[I>>0]=0,tr[W>>0]=0),Cu(I,0),ar[I>>2]=ar[X>>2],ar[I+4>>2]=ar[X+4>>2],ar[I+8>>2]=ar[X+8>>2],ar[X>>2]=0,ar[X+4>>2]=0,(ar[X+8>>2]=0)|(X=0|ar[C>>2])&&du(X),S=118}}while(0);do{if(118==(0|S)){if((0|ar[l>>2])==(0|ar[14148])){M=0|ar[(i=56592)+4>>2],ar[(T=A)>>2]=ar[i>>2],ar[T+4>>2]=M,yu(A+8|0,56600);break}M=0|ar[(i=l)+4>>2],ar[(T=A)>>2]=ar[i>>2],ar[T+4>>2]=M,T=A+8|0,A=8+l|0,ar[T>>2]=ar[A>>2],ar[T+4>>2]=ar[A+4>>2],ar[T+8>>2]=ar[A+8>>2],ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0;break}}while(0);(0|tr[(X=8+l|0)+11>>0])<0&&vu(0|ar[X>>2])}else S=24}else S=24;if(24==(0|S)&&(W=T+64|0,ar[(C=T+8|0)>>2]=4524,I=T+12|0,ar[T>>2]=188,ar[W>>2]=208,Jf(T+64|(ar[T+4>>2]=0),I),ar[T+136>>2]=0,ar[T+140>>2]=-1,ar[T>>2]=4504,ar[W>>2]=4544,ar[C>>2]=4524,Sf(I),ar[I>>2]=4340,ar[(C=T+44|0)>>2]=0,ar[C+4>>2]=0,ar[C+8>>2]=0,ar[C+12>>2]=0,ar[T+60>>2]=24,ar[l>>2]=0,ar[4+l>>2]=0,ar[8+l>>2]=0,Xe(I,l),(0|tr[11+l>>0])<0&&vu(0|ar[l>>2]),We(0|Lf(0|We(X=T+8|0,25533,13),r),25547,23),Ie(R,I),oo(A,2,117,R),(0|tr[R+11>>0])<0&&vu(0|ar[R>>2]),ar[T>>2]=4504,ar[W>>2]=4544,ar[X>>2]=4524,ar[I>>2]=4340,(0|tr[C+11>>0])<0&&vu(0|ar[C>>2]),kf(I),bf(W)),0|(X=0|ar[u>>2])){if((0|(W=0|ar[U>>2]))!=(0|X)){do{if(I=W+-32|0,ar[U>>2]=I,F=0|ar[(V=W+-16|0)>>2]){if((0|(W=0|ar[(G=W+-12|0)>>2]))==(0|F))W=F;else{for(;I=W+-40|0,ar[G>>2]=I,(0|(W=(C=0|ar[W+-16>>2])?((0|ar[(W=W+-12|0)>>2])!=(0|C)&&(ar[W>>2]=C),vu(C),0|ar[G>>2]):I))!=(0|F););W=0|ar[V>>2]}vu(W),W=0|ar[U>>2]}else W=I}while((0|W)!=(0|X));X=0|ar[u>>2]}vu(X)}(0|tr[11+s>>0])<0&&vu(0|ar[s>>2]),(0|tr[11+b>>0])<0&&vu(0|ar[b>>2])}else S=19;else E=0,S=19;return(19==(0|S)&&(ar[V>>2]=0,ar[V+4>>2]=0,ar[V+8>>2]=0,oo(A,5,2e3,V),(0|tr[V+11>>0])<0&&vu(0|ar[V>>2])),E)?(du(E),void(ur=d)):void(ur=d)}}ar[C>>2]=0,ar[C+4>>2]=0,ar[C+8>>2]=0,oo(A,5,2e3,C),ur=(0<=(0|tr[C+11>>0])||vu(0|ar[C>>2]),d)}function go(A){return(A|=0)>>>0<4?16908801>>>(A<<3)&255|0:(sr(55739,25597,47,25611),0)}function Zo(A){return(A|=0)>>>0<4?16843265>>>(A<<3)&255|0:(sr(55739,25597,66,25632),0)}function po(A){var e,r,i=0,f=0,n=0;if((0|(i=0|ar[(e=(A|=0)+56|0)>>2]))!=(0|(r=A+60|0)))for(n=i;;){if(0|(i=0|ar[n+44>>2])&&mu(i),i=0|ar[n+4>>2])for(;f=0|ar[i>>2];)i=f;else if(i=0|ar[(f=n+8|0)>>2],(0|ar[i>>2])!=(0|n))for(;n=0|ar[f>>2],i=0|ar[(f=n+8|0)>>2],(0|ar[i>>2])!=(0|n););if((0|i)==(0|r))break;n=i}!function A(e,r){e|=0;r|=0;return r?(A(e,0|ar[r>>2]),A(e,0|ar[r+4>>2]),void vu(r)):void 0}(e,0|ar[r>>2]),0|(i=0|ar[A+52>>2])&&du(i),0|(i=0|ar[A+44>>2])&&du(i),(0|tr[(i=A+8|0)+11>>0])<0&&vu(0|ar[i>>2]),(i=0|ar[A+4>>2])&&ku(i)}function yo(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0,ar[(A|=0)+24>>2]=e,ar[A+28>>2]=r,ar[A+32>>2]=i,ar[A+36>>2]=f}function Bo(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o=0,a=0;if(ur=(t=ur)+64|0,tr[(o=(n=t)+32|0)>>0]=0,ar[(a=o+4|0)>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,ar[a+12>>2]=0,ar[a+16>>2]=0,ar[a+20>>2]=0,!((ar[a+24>>2]=0)|function(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n=0,t=0;(0|(e|=0))<=-1&&sr(25686,25597,157,25697);(0|r)<=-1&&sr(25703,25597,158,25697);(0|i)<=0&&sr(25715,25597,159,25697);33<=(0|i)&&sr(25730,25597,160,25697);ar[A+4>>2]=e,ar[A+8>>2]=r,n=64<(n=e+1&-2)>>>0?n:64,ar[A+12>>2]=n,r=64<(r=r+1&-2)>>>0?r:64,ar[A+16>>2]=r,e=11==(0|f)&32==(0|(e=24==(0|i)&10==(0|f)?8:i))?8:e,17<=(0|cr[A>>0])&&sr(25746,25597,181,25697);switch(e=(7+(255&(tr[A>>0]=e))|0)>>>3,0|f){case 3:case 2:case 1:case 0:case 99:t=1;break;case 14:case 12:case 10:t=3;break;case 15:case 13:case 11:t=4;break;default:sr(55739,25597,118,25653)}return t=15+(0|br(0|br(t,e),n))&-16,ar[A+28>>2]=t,t=0|wu(15|br(t,r)),ar[A+24>>2]=t,f=15&t,ar[A+20>>2]=0==(0|f)?t:t+(16-f)|0,1}(o,r,i,f,0|ar[A+36>>2])))return ur=t,(A=0)|A;a=A+56|0,ar[n>>2]=ar[o>>2],ar[n+4>>2]=ar[o+4>>2],ar[n+8>>2]=ar[o+8>>2],ar[n+12>>2]=ar[o+12>>2],ar[n+16>>2]=ar[o+16>>2],ar[n+20>>2]=ar[o+20>>2],ar[n+24>>2]=ar[o+24>>2],ar[n+28>>2]=ar[o+28>>2],r=0|ar[(i=A+60|0)>>2];do{if(r){for(f=A+60|0;;)if((0|e)<(0|(i=0|ar[r+16>>2]))){if(!(i=0|ar[r>>2])){i=7;break}f=r,r=i}else{if((0|e)<=(0|i)){i=11;break}if(!(i=0|ar[(f=r+4|0)>>2])){i=10;break}r=i}if(7==(0|i)){f=o=r;break}if(10==(0|i)){o=r;break}if(11==(0|i)){o=r;break}}else f=o=i}while(0);return 0|ar[f>>2]||(r=0|hu(52),ar[r+16>>2]=e,ar[(i=r+20|0)>>2]=ar[n>>2],ar[i+4>>2]=ar[n+4>>2],ar[i+8>>2]=ar[n+8>>2],ar[i+12>>2]=ar[n+12>>2],ar[i+16>>2]=ar[n+16>>2],ar[i+20>>2]=ar[n+20>>2],ar[i+24>>2]=ar[n+24>>2],ar[i+28>>2]=ar[n+28>>2],ar[r>>2]=0,ar[r+4>>2]=0,ar[r+8>>2]=o,ar[f>>2]=r,(i=0|ar[ar[a>>2]>>2])&&(ar[a>>2]=i,r=0|ar[f>>2]),so(0|ar[A+60>>2],r),ar[(A=A+64|0)>>2]=1+(0|ar[A>>2])),ur=t,0|(A=1)}function Eo(A,e){e|=0;var r,i=0,f=0;if(0|(i=0|ar[(r=(A|=0)+60|0)>>2])){A=r,f=i;A:for(;;){for(i=f;!((0|ar[i+16>>2])>=(0|e));)if(!(i=0|ar[i+4>>2]))break A;if(!(f=0|ar[i>>2])){A=i;break}A=i}if((0|A)!=(0|r)&&(0|ar[A+16>>2])<=(0|e))return 0|(e=(0|(e=A))!=(0|r))}return 0|(e=(0|(e=r))!=(0|r))}function Xo(A,e){e|=0;var r,i=0,f=0;if(!(i=0|ar[(r=(A|=0)+60|0)>>2]))return 0|(e=-1);A=r,f=i;A:for(;;){for(i=f;!((0|ar[i+16>>2])>=(0|e));)if(!(i=0|ar[i+4>>2]))break A;if(!(f=0|ar[i>>2])){A=i;break}A=i}return(0|A)==(0|r)||(0|ar[A+16>>2])>(0|e)?0|(e=-1):0|(e=0|ar[A+24>>2])}function Wo(A,e){e|=0;var r,i=0,f=0;if(!(i=0|ar[(r=(A|=0)+60|0)>>2]))return 0|(e=-1);A=r,f=i;A:for(;;){for(i=f;!((0|ar[i+16>>2])>=(0|e));)if(!(i=0|ar[i+4>>2]))break A;if(!(f=0|ar[i>>2])){A=i;break}A=i}return(0|A)==(0|r)||(0|ar[A+16>>2])>(0|e)?0|(e=-1):0|(e=0|ar[A+28>>2])}function Io(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0;if(ar[(i=(A|=0)+4|0)>>2]=0,n=A+4|(ar[(f=A+8|0)>>2]=0),ar[A>>2]=n,(0|(t=0|ar[e+56>>2]))!=(0|(r=e+60|0)))for(l=t,e=0;;){c=l+16|0;do{if(e){for(a=0|ar[c>>2],o=i;;){if((0|a)<(0|(t=0|ar[e+16>>2]))){if(!(t=0|ar[e>>2])){t=9;break}}else{if((0|a)<=(0|t)){t=13;break}if(!(t=0|ar[(o=e+4|0)>>2])){t=12;break}e=o}o=e,e=t}if(9==(0|t)){o=a=e;break}if(12==(0|t)){a=e;break}if(13==(0|t)){a=e;break}}else o=a=n}while(0);if(0|ar[o>>2]||(e=0|hu(20),ar[e+16>>2]=ar[c>>2],ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=a,ar[o>>2]=e,(t=0|ar[ar[A>>2]>>2])&&(ar[A>>2]=t,e=0|ar[o>>2]),so(0|ar[i>>2],e),ar[f>>2]=1+(0|ar[f>>2])),e=0|ar[l+4>>2])for(;t=0|ar[e>>2];)e=t;else if(e=0|ar[(t=l+8|0)>>2],(0|ar[e>>2])!=(0|l))for(;l=0|ar[t>>2],e=0|ar[(t=l+8|0)>>2],(0|ar[e>>2])!=(0|l););if((0|e)==(0|r))break;l=e,e=0|ar[n>>2]}}function Co(A,e){return A|=0,(e|=0)&&(Co(A,0|ar[e>>2]),Co(A,0|ar[e+4>>2]),void vu(e))}function Go(A,e){A|=0;var r,i=0,f=0;if(10==(0|(e|=0)))switch(0|ar[A+36>>2]){case 11:return 0|(e=32);case 14:case 12:return 0|(e=48);case 15:case 13:return 0|(e=64);case 10:return 0|(e=24);default:return 0|(e=-1)}if(i=0|ar[(r=A+60|0)>>2]){A=r,f=i;A:for(;;){for(i=f;!((0|ar[i+16>>2])>=(0|e));)if(!(i=0|ar[i+4>>2]))break A;if(!(f=0|ar[i>>2])){A=i;break}A=i}A=(0|A)!=(0|r)&&(0|ar[A+16>>2])<=(0|e)?0|tr[A+20>>0]:-1}else A=-1;return 256<=(A=7+(255&A)&504)>>>0&&sr(25764,25597,362,25775),0|(e=255&A)}function Vo(A,e){e|=0;var r,i=0,f=0;if(!(i=0|ar[(r=(A|=0)+60|0)>>2]))return 0|(e=-1);A=r,f=i;A:for(;;){for(i=f;!((0|ar[i+16>>2])>=(0|e));)if(!(i=0|ar[i+4>>2]))break A;if(!(f=0|ar[i>>2])){A=i;break}A=i}return(0|A)==(0|r)||(0|ar[A+16>>2])>(0|e)?0|(e=-1):0|(e=0|tr[A+20>>0])}function Fo(A,e,r){e|=0,r|=0;var i,f=0,n=0;if(!(f=0|ar[(i=(A|=0)+60|0)>>2]))return(r=0)|r;A=i,n=f;A:for(;;){for(f=n;!((0|ar[f+16>>2])>=(0|e));)if(!(f=0|ar[f+4>>2]))break A;if(!(n=0|ar[f>>2])){A=f;break}A=f}return(0|A)==(0|i)||(0|ar[A+16>>2])>(0|e)?(r=0)|r:(0|r&&(ar[r>>2]=ar[A+48>>2]),0|(r=0|ar[A+40>>2]))}function Ro(A,e,r){e|=0,r|=0;var i,f=0,n=0;if(!(f=0|ar[(i=(A|=0)+60|0)>>2]))return(r=0)|r;A=i,n=f;A:for(;;){for(f=n;!((0|ar[f+16>>2])>=(0|e));)if(!(f=0|ar[f+4>>2]))break A;if(!(n=0|ar[f>>2])){A=f;break}A=f}return(0|A)==(0|i)||(0|ar[A+16>>2])>(0|e)?(r=0)|r:(0|r&&(ar[r>>2]=ar[A+48>>2]),0|(r=0|ar[A+40>>2]))}function No(A,e,r,i){A|=0,r|=0,i|=0;var f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;if(b=60+(0|ar[(e|=0)>>2])|0,l=0==(0|(u=0|ar[b>>2])))d=n=s=-1;else{n=b,o=u;A:for(;;){for(t=o;!((0|ar[t+16>>2])>=(0|r));)if(!(t=0|ar[t+4>>2]))break A;if(!(o=0|ar[t>>2])){n=t;break}n=t}if(c=(0|n)!=(0|b)&&(0|ar[n+16>>2])<=(0|r)?0|ar[n+24>>2]:-1,l)s=c,d=n=-1;else{n=b,o=u;A:for(;;){for(t=o;!((0|ar[t+16>>2])>=(0|r));)if(!(t=0|ar[t+4>>2]))break A;if(!(o=0|ar[t>>2])){n=t;break}n=t}if(a=(0|n)!=(0|b)&&(0|ar[n+16>>2])<=(0|r)?0|ar[n+28>>2]:-1,l)s=c,n=-1,d=a;else{n=b,o=u;A:for(;;){for(t=o;!((0|ar[t+16>>2])>=(0|r));)if(!(t=0|ar[t+4>>2]))break A;if(!(o=0|ar[t>>2])){n=t;break}n=t}d=(n=(0|n)!=(0|b)&&(0|ar[n+16>>2])<=(0|r)?(s=c,0|tr[n+20>>0]):(s=c,-1),a)}}}if(Bo(A,i,s,d,255&n),l=0|ar[e>>2],u=0==(0|(o=0|ar[(f=l+60|0)>>2])))b=e=0;else{n=f,a=o;A:for(;;){for(t=a;!((0|ar[t+16>>2])>=(0|r));)if(!(t=0|ar[t+4>>2]))break A;if(!(a=0|ar[t>>2])){n=t;break}n=t}b=(0|n)!=(0|f)&&(0|ar[n+16>>2])<=(0|r)?(e=0|ar[n+40>>2],0|ar[n+48>>2]):e=0}if(t=0|ar[(c=A+60|0)>>2]){n=c;A:for(;;){for(a=t;!((0|ar[a+16>>2])>=(0|i));){if(!(t=0|ar[a+4>>2]))break A;a=t}if(!(t=0|ar[a>>2])){n=a;break}n=a}a=(0|n)!=(0|c)&&(0|ar[n+16>>2])<=(0|i)?(c=0|ar[n+40>>2],0|ar[n+48>>2]):c=0}else a=c=0;A:do{if(10!=(0|r)){if(u)n=-1;else{n=f;e:for(;;){for(t=o;!((0|ar[t+16>>2])>=(0|r));)if(!(t=0|ar[t+4>>2]))break e;if(!(o=0|ar[t>>2])){n=t;break}n=t}n=(0|n)!=(0|f)&&(0|ar[n+16>>2])<=(0|r)?0|tr[n+20>>0]:-1}if((n=7+(255&n)|0)>>>0<256){k=(255&n)>>>3;break}sr(25764,25597,362,25775)}else switch(0|ar[l+36>>2]){case 10:k=3;break A;case 11:k=4;break A;case 14:case 12:k=6;break A;case 15:case 13:k=8;break A;default:k=31;break A}}while(0);if(t=0|br(255&k,s),0<(0|d))for(n=0;hb(c+(0|br(n,a))|0,e+(0|br(n,b))|0,0|t),(0|(n=n+1|0))!=(0|d););}function _o(A,e,r,i){A|=0,r|=0,i|=0;var f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0;ur=(t=ur)+64|0,f=t+32|0,n=t,u=(s=0|ar[(e|=0)>>2])+56|0,b=0|ar[(o=s+60|0)>>2];do{if(b){for(c=s+60|0,o=b;;)if((0|r)<(0|(a=0|ar[o+16>>2]))){if(!(a=0|ar[o>>2])){a=6;break}c=o,o=a}else{if((0|r)<=(0|a)){a=10;break}if(!(a=0|ar[(c=o+4|0)>>2])){a=9;break}o=a}if(6==(0|a)){c=l=o;break}if(9==(0|a)){l=o;break}if(10==(0|a)){l=o;break}}else c=l=o}while(0);if((o=0|ar[c>>2])||(a=0|hu(52),ar[a+16>>2]=r,ar[(o=a+20|0)>>2]=0,ar[o+4>>2]=0,ar[o+8>>2]=0,ar[o+12>>2]=0,ar[o+16>>2]=0,ar[o+20>>2]=0,ar[o+24>>2]=0,ar[o+28>>2]=0,ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=l,ar[c>>2]=a,o=(o=0|ar[ar[u>>2]>>2])?(ar[u>>2]=o,0|ar[c>>2]):a,so(0|ar[s+60>>2],o),ar[(b=s+64|0)>>2]=1+(0|ar[b>>2]),b=0|ar[e>>2],o=a,b=0|ar[(s=b)+60>>2]),u=o+20|0,ar[f>>2]=ar[u>>2],ar[4+f>>2]=ar[u+4>>2],ar[8+f>>2]=ar[u+8>>2],ar[12+f>>2]=ar[u+12>>2],ar[16+f>>2]=ar[u+16>>2],ar[20+f>>2]=ar[u+20>>2],ar[24+f>>2]=ar[u+24>>2],ar[28+f>>2]=ar[u+28>>2],u=s+56|0,l=s+60|0,0|b){c=l,a=b;A:for(;;){for(o=a;!((0|ar[o+16>>2])>=(0|r));)if(!(o=0|ar[o+4>>2]))break A;if(!(a=0|ar[o>>2])){c=o;break}c=o}if((0|c)!=(0|l)&&(0|ar[c+16>>2])<=(0|r)){if(o=0|ar[c+4>>2])for(;a=0|ar[o>>2];)o=a;else if(o=0|ar[(a=c+8|0)>>2],(0|ar[o>>2])!=(0|c))for(;r=0|ar[a>>2],o=0|ar[(a=r+8|0)>>2],(0|ar[o>>2])!=(0|r););(0|ar[u>>2])==(0|c)&&(ar[u>>2]=o),ar[(r=s+64|0)>>2]=(0|ar[r>>2])-1,function(A,e){A|=0;var r,i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0;if(t=0|ar[(e|=0)>>2])if(n=0|ar[e+4>>2])for(;;){if(!(t=0|ar[n>>2])){t=0;break}n=t}else n=e;else n=e,t=0;r=n+4|0,i=0|ar[(0|t?n:r)>>2],l=n+8|0,(f=0!=(0|i))&&(ar[8+i>>2]=ar[l>>2]);t=0|ar[l>>2],(0|ar[t>>2])==(0|n)?(ar[t>>2]=i,(0|n)==(0|A)?(A=i,c=0):(t=t+4|0,u=10)):(ar[t+4>>2]=i,u=10);10==(0|u)&&(c=0|ar[t>>2]);a=0!=(0|tr[(o=n+12|0)>>0]),(0|n)!=(0|e)&&(t=0|ar[(u=e+8|0)>>2],ar[l>>2]=t,ar[((0|ar[ar[u>>2]>>2])==(0|e)?t:t+4|0)>>2]=n,t=0|ar[e>>2],ar[n>>2]=t,ar[t+8>>2]=n,t=0|ar[e+4>>2],0|(ar[r>>2]=t)&&(ar[t+8>>2]=n),tr[o>>0]=0|tr[e+12>>0],A=(0|A)==(0|e)?n:A);if(!(a&0!=(0|A)))return;if(f)return tr[12+i>>0]=1;for(;;){if(a=0|ar[c+8>>2],t=0!=(0|tr[(n=c+12|0)>>0]),(0|ar[a>>2])==(0|c)){if(t?l=c:(tr[n>>0]=1,tr[a+12>>0]=0,n=0|ar[a>>2],o=0|ar[(t=n+4|0)>>2],0|(ar[a>>2]=o)&&(ar[o+8>>2]=a),u=a+8|0,ar[n+8>>2]=ar[u>>2],l=0|ar[u>>2],ar[((0|ar[l>>2])==(0|a)?l:l+4|0)>>2]=n,ar[t>>2]=a,ar[u>>2]=n,u=0|ar[c+4>>2],l=0|ar[u>>2],A=(0|A)==(0|u)?c:A),n=0|ar[l>>2],!(o=0==(0|n))&&0==(0|tr[n+12>>0])){A=l,u=55;break}if(0|(a=0|ar[(t=l+4|0)>>2])&&0==(0|tr[a+12>>0])){u=49;break}if(((tr[l+12>>0]=0)|(n=0|ar[l+8>>2]))==(0|A)|0==(0|tr[(t=n+12|0)>>0])){u=48;break}}else{if(t?o=c:(tr[n>>0]=1,tr[a+12>>0]=0,n=0|ar[(u=a+4|0)>>2],t=0|ar[n>>2],0|(ar[u>>2]=t)&&(ar[t+8>>2]=a),u=a+8|0,ar[n+8>>2]=ar[u>>2],o=0|ar[u>>2],ar[((0|ar[o>>2])==(0|a)?o:o+4|0)>>2]=n,ar[n>>2]=a,ar[u>>2]=n,u=0|ar[c>>2],o=0|ar[u+4>>2],A=(0|A)==(0|u)?c:A),0|(t=0|ar[o>>2])&&0==(0|tr[t+12>>0])){u=31;break}if(0|(n=0|ar[o+4>>2])&&0==(0|tr[n+12>>0])){A=n,u=32;break}if(((tr[o+12>>0]=0)|(n=0|ar[o+8>>2]))==(0|A)){u=30;break}if(!(0|tr[n+12>>0])){A=n,u=30;break}}c=0|ar[n+8>>2],c=0|ar[((0|ar[c>>2])==(0|n)?c+4|0:c)>>2]}do{if(30==(0|u))return tr[A+12>>0]=1;if(31==(0|u))A=0|ar[o+4>>2],u=A?32:33;else{if(48==(0|u))return tr[t>>0]=1;if(49==(0|u)){if(o)A=a;else{if(!(0|tr[n+12>>0])){A=l,u=55;break}A=0|ar[(t=A=l+4|0)>>2]}tr[A+12>>0]=1,tr[l+12>>0]=0,n=0|ar[A>>2],0|(ar[t>>2]=n)&&(ar[n+8>>2]=l),n=l+8|0,ar[A+8>>2]=ar[n>>2],u=0|ar[n>>2],ar[((0|ar[u>>2])==(0|l)?u:u+4|0)>>2]=A,ar[A>>2]=l,ar[n>>2]=A,n=l,u=55}}}while(0);if(32==(0|u))0|tr[A+12>>0]?u=33:n=o;else if(55==(0|u))return o=0|ar[A+8>>2],t=o+12|0,tr[A+12>>0]=0|tr[t>>0],tr[t>>0]=1,tr[n+12>>0]=1,A=0|ar[o>>2],t=0|ar[(n=A+4|0)>>2],0|(ar[o>>2]=t)&&(ar[t+8>>2]=o),u=o+8|0,ar[A+8>>2]=ar[u>>2],e=0|ar[u>>2],ar[((0|ar[e>>2])==(0|o)?e:e+4|0)>>2]=A,ar[n>>2]=o,ar[u>>2]=A;33==(0|u)&&(tr[t+12>>0]=1,tr[o+12>>0]=0,n=0|ar[(A=t+4|0)>>2],0|(ar[o>>2]=n)&&(ar[n+8>>2]=o),n=o+8|0,ar[t+8>>2]=ar[n>>2],u=0|ar[n>>2],ar[((0|ar[u>>2])==(0|o)?u:u+4|0)>>2]=t,ar[A>>2]=o,ar[n>>2]=t,n=t,A=o);t=0|ar[n+8>>2],u=t+12|0,tr[n+12>>0]=0|tr[u>>0],tr[u>>0]=1,tr[A+12>>0]=1,A=0|ar[(u=t+4|0)>>2],n=0|ar[A>>2],0|(ar[u>>2]=n)&&(ar[n+8>>2]=t);u=t+8|0,ar[A+8>>2]=ar[u>>2],e=0|ar[u>>2],ar[((0|ar[e>>2])==(0|t)?e:e+4|0)>>2]=A,ar[A>>2]=t,ar[u>>2]=A}(b,c),vu(c)}}u=A+56|0,ar[n>>2]=ar[f>>2],ar[n+4>>2]=ar[4+f>>2],ar[n+8>>2]=ar[8+f>>2],ar[n+12>>2]=ar[12+f>>2],ar[n+16>>2]=ar[16+f>>2],ar[n+20>>2]=ar[20+f>>2],ar[n+24>>2]=ar[24+f>>2],ar[n+28>>2]=ar[28+f>>2],o=0|ar[(a=A+60|0)>>2];do{if(o){for(c=A+60|0;;)if((0|i)<(0|(a=0|ar[o+16>>2]))){if(!(a=0|ar[o>>2])){a=36;break}c=o,o=a}else{if((0|i)<=(0|a)){a=40;break}if(!(a=0|ar[(c=o+4|0)>>2])){a=39;break}o=a}if(36==(0|a)){c=l=o;break}if(39==(0|a)){l=o;break}if(40==(0|a)){l=o;break}}else c=l=a}while(0);ur=(0|ar[c>>2]||(o=0|hu(52),ar[o+16>>2]=i,ar[(a=o+20|0)>>2]=ar[n>>2],ar[a+4>>2]=ar[n+4>>2],ar[a+8>>2]=ar[n+8>>2],ar[a+12>>2]=ar[n+12>>2],ar[a+16>>2]=ar[n+16>>2],ar[a+20>>2]=ar[n+20>>2],ar[a+24>>2]=ar[n+24>>2],ar[a+28>>2]=ar[n+28>>2],ar[o>>2]=0,ar[o+4>>2]=0,ar[o+8>>2]=l,ar[c>>2]=o,(a=0|ar[ar[u>>2]>>2])&&(ar[u>>2]=a,o=0|ar[c>>2]),so(0|ar[A+60>>2],o),ar[(A=A+64|0)>>2]=1+(0|ar[A>>2])),t)}function Yo(A,e){A|=0;var r,i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0;if(ur=(f=ur)+16|0,r=f,((tr[(e|=0)>>0]=0)|(t=n=0|ar[(i=A+377216|0)>>2]))==(0|(o=b=0|ar[(d=A+377220|0)>>2])))return ur=f,(d=0)|d;u=0|ar[n>>2],a=0|ar[u+10636>>2],b=c=0|ar[u+10632>>2];A:do{if((0|a)!=(0|c)){for(c=a-c>>2,a=0;l=0|ar[b+(a<<2)>>2],a=a+1|0,0|ar[l+40>>2];)if(c>>>0<=a>>>0)break A;if(l){if(0|tr[l+36>>0]&&ra(A+376148|0),tr[e>>0]=1,n=0|Qo(A,u,l))return ur=f,0|(d=n);t=n=0|ar[i>>2],o=0|ar[d>>2];break}}}while(0);if(1<o-t>>2>>>0?(u=0|ar[n>>2],(0|(b=0|ar[u+10636>>2]))!=(0|ar[u+10632>>2])&&0==(0|ar[40+(0|ar[b+-4>>2])>>2])&&(s=14)):s=14,14==(0|s)){if((0|o)==(0|(n=s=0|ar[i>>2])))return ur=f,(d=0)|d;if(b=0|ar[n>>2],(0|(s=0|ar[b+10636>>2]))!=(0|ar[b+10632>>2])&&0==(0|ar[40+(0|ar[s+-4>>2])>>2]))return ur=f,(d=0)|d;if((0!=(0|ar[A+556>>2])|0)!=(0-(0|ar[A+580>>2])|0))return ur=f,(d=0)|d;if(0==(0|tr[A+548>>0])&&0==(0|tr[A+549>>0]))return ur=f,(d=0)|d}if(c=0|ar[n>>2],tr[e>>0]=1,n=0|ar[c>>2],0<(0|ar[(o=n+10344|0)>>2])){for(t=n+10524|0,n=0;Tn((0|ar[t>>2])+(80*n|0)|0,1),(0|(n=n+1|0))<(0|ar[o>>2]););a=0|ar[c>>2]}else a=n;n=0|ar[(o=a+10332|0)>>2],t=0==(0|tr[n+532>>0]),0|ar[375892+(0|ar[10332+(0|ar[A+376224>>2])>>2])>>2]?(t?(function(A){var e,r,i,f,n,t,o,a=0,c=0,l=0;if(ur=(o=ur)+16|0,r=o,i=0|ar[(A|=0)>>2],l=0|ar[10332+i>>2],ca(i,ar[(f=5828+i|0)>>2]<<1),n=A+10668|0,t=A+10672|0,l=l+375396|0,e=A+10664|0,0<(0|ar[f>>2])){for(c=0;A=0|hu(20),ar[A+4>>2]=0,ar[A>>2]=9552,ar[A+8>>2]=i,ar[A+12>>2]=c,tr[A+16>>0]=1,ar[r>>2]=A,(a=0|ar[n>>2])>>>0<(0|ar[t>>2])>>>0?(ar[a>>2]=A,ar[n>>2]=4+(0|ar[n>>2])):Oe(e,r),Sn(l,A),(0|(c=c+1|0))<(0|(A=0|ar[f>>2])););if(0<(0|A)){for(A=0;a=0|hu(20),ar[a+4>>2]=0,ar[a>>2]=9552,ar[a+8>>2]=i,ar[a+12>>2]=A,tr[a+16>>0]=0,ar[r>>2]=a,(c=0|ar[n>>2])>>>0<(0|ar[t>>2])>>>0?(ar[c>>2]=a,ar[n>>2]=4+(0|ar[n>>2])):Oe(e,r),Sn(l,a),(0|(A=A+1|0))<(0|ar[f>>2]););ur=o}else ur=o}else ur=o}(c),t=3,n=0|ar[o>>2]):t=1,0|tr[n+533>>0]||function(A,e){e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0;if(ur=(n=ur)+16|0,f=n,b=0|ar[(A|=0)>>2],!(0|tr[b+5467>>0]))return ur=n,b=0;if(o=0|ar[(t=b+10332|0)>>2],u=b+10480|0,0|ta(i=A+8|0,0|ar[b+24>>2],0|ar[b+28>>2],0|ar[b+20>>2],b+764|0,0,o,0|ar[b+10336>>2],0|ar[u>>2],0|ar[u+4>>2],0|ar[b+10488>>2],1))return er(4+(0|ar[t>>2])|0,1024,0),ur=n,b=0;if(r=0|ar[b+5828>>2],ca(b,r),0<(0|r))for(l=A+10668|0,u=A+10672|0,c=o+375396|0,o=A+10664|0,t=0;A=0|hu(28),ar[A+4>>2]=0,ar[A>>2]=7752,ar[A+16>>2]=b,ar[A+20>>2]=i,ar[A+12>>2]=b,ar[A+8>>2]=t,ar[A+24>>2]=e,ar[f>>2]=A,(a=0|ar[l>>2])>>>0<(0|ar[u>>2])>>>0?(ar[a>>2]=A,ar[l>>2]=4+(0|ar[l>>2])):Oe(o,f),Sn(c,A),(0|(t=t+1|0))!=(0|r););sa(b),function(A,e){var r,i=0,f=0,n=0;n=(e=e|0)+4|0,f=0|ar[(i=(A=A|0)+4|0)>>2],ar[i>>2]=ar[n>>2],ar[n>>2]=f,f=e+60|0,i=0|ar[(n=A+60|0)>>2],ar[n>>2]=ar[f>>2],ar[f>>2]=i,i=e+10492|0,n=0|ar[(f=A+10492|0)>>2],ar[f>>2]=ar[i>>2],ar[i>>2]=n,n=e+8|0,f=0|ar[(i=A+8|0)>>2],ar[i>>2]=ar[n>>2],ar[n>>2]=f,f=e+64|0,i=0|ar[(n=A+64|0)>>2],ar[n>>2]=ar[f>>2],ar[f>>2]=i,i=e+10496|0,n=0|ar[(f=A+10496|0)>>2],ar[f>>2]=ar[i>>2],ar[i>>2]=n,n=e+12|0,f=0|ar[(i=A+12|0)>>2],ar[i>>2]=ar[n>>2],ar[n>>2]=f,f=e+68|0,i=0|ar[(n=A+68|0)>>2],ar[n>>2]=ar[f>>2],ar[f>>2]=i,i=e+10500|0,n=0|ar[(f=A+10500|0)>>2],ar[f>>2]=ar[i>>2],ar[i>>2]=n,n=e+40|0,f=0|ar[(i=A+40|0)>>2],ar[i>>2]=ar[n>>2],ar[n>>2]=f,f=e+44|0,i=0|ar[(n=A+44|0)>>2],ar[n>>2]=ar[f>>2],ar[f>>2]=i,e=e+10504|0,i=0|ar[(A=f=A+10504|0)>>2],A=0|ar[A+4>>2],r=0|ar[(n=e)+4>>2],ar[f>>2]=ar[n>>2],ar[f+4>>2]=r,ar[e>>2]=i,ar[e+4>>2]=A}(b,i),ur=n,b=1}(c,t),sa(a)):(t&&(function(A){var e,r,i,f=0,n=0,t=0;if(0<(0|ar[(t=(A|=0)+5828|0)>>2])){for(n=f=0;f=0|f|Zt(A,n),(0|(n=n+1|0))<(0|ar[t>>2]););if(f){i=A+10472|0,pt(A,1,0,0|ar[(r=A+10476|0)>>2],0,0|ar[i>>2]),f=0|ar[r>>2],n=0|ar[i>>2],(8<(0|ar[(e=A+5760|0)>>2])?yt:Bt)(A,1,0,f,0,n),t=A+5776|0;do{if(0|ar[t>>2]){if(f=0|ar[r>>2],n=0|ar[i>>2],8<(0|ar[A+5768>>2])){Et(A,1,0,f,0,n);break}Xt(A,1,0,f,0,n);break}}while(0);if(pt(A,0,0,0|ar[r>>2],0,0|ar[i>>2]),f=0|ar[r>>2],n=0|ar[i>>2],(8<(0|ar[e>>2])?yt:Bt)(A,0,0,f,0,n),0|ar[t>>2])n=0|ar[r>>2],f=0|ar[i>>2],8<(0|ar[A+5768>>2])?Et(A,0,0,n,0,f):Xt(A,0,0,n,0,f)}}}(a),n=0|ar[o>>2]),0|tr[n+533>>0]||function(A){var e,r,i,f,n,t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0;if(!(0|tr[5467+(A|=0)>>0]))return;d=A+40|0,C=0|br(0|ar[(k=A+28|0)>>2],0|ar[d>>2]),C=0|br(C,(7+(0|ar[(h=A+5760|0)>>2])|0)/8|0),e=A+44|0,V=0|br(0|ar[(r=A+36|0)>>2],0|ar[e>>2]),V=0|br(V,(7+(0|ar[(i=A+5768|0)>>2])|0)/8|0),V=0|wu(-1<(0|(V=(0|V)<(0|C)?C:V))?V:-1),C=0==(0|ar[A+5776>>2])?1:3,n=A+5820|0,t=A+10352|0,o=A+10340|0,a=A+48|0,c=A+52|0,l=A+5804|0,u=A+4|0,b=A+5780|0,s=A+5784|0,w=0|ar[(f=A+5828|(G=0))>>2];A:for(;;){if(B=0|ar[(X=(W=0==(0|G))?d:e)>>2],I=A+4+(G<<2)|0,y=0|br(0|ar[(W?k:r)>>2],B),E=W?h:i,hb(0|V,0|ar[I>>2],0|br(y,(7+(0|ar[E>>2])|0)/8|0)),0<(0|w))for(w=(y=0)|ar[n>>2];;){if(0<(0|w))for(p=0;;){if(w=(0|br(0|ar[t>>2],y))+p|0,w=0|lr[(0|ar[o>>2])+(24*w|0)+2>>1],v=0|ar[a>>2],w>>>0>=(0|ar[c>>2])-v>>2>>>0){w=21;break A}if(!(Z=0|ar[v+(w<<2)>>2])){w=21;break A}do{if(W){if(0|tr[Z+325>>0]){if(v=1<<ar[l>>2],m=0|ar[u>>2],w=0|ar[d>>2],8<(0|ar[h>>2])){Ra(A,p,y,Z,0,v,v,V,B,m,w);break}Na(A,p,y,Z,0,v,v,V,B,m,w);break}}else if(0|tr[Z+326>>0]){if(m=1<<ar[l>>2],v=(0|m)/(0|ar[b>>2])|0,m=(0|m)/(0|ar[s>>2])|0,g=0|ar[I>>2],w=0|ar[X>>2],8<(0|ar[E>>2])){Ra(A,p,y,Z,G,v,m,V,B,g,w);break}Na(A,p,y,Z,G,v,m,V,B,g,w);break}}while(0);if(p=p+1|0,(0|(w=0|ar[n>>2]))<=(0|p)){v=w;break}}else v=w;if(y=y+1|0,(0|(w=0|ar[f>>2]))<=(0|y))break;w=v}if((0|C)<=(0|(G=G+1|0))){w=20;break}}{if(20==(0|w))return mu(V);if(21==(0|w));}}(a)),a=c+10648|0,n=0|ar[(o=c+10644|0)>>2];A:do{if((0|ar[a>>2])==(0|n))a=0;else for(t=0;;){if(n=0|Qa(n+(80*t|0)|0,0|ar[c>>2]),t=t+1|0,0|n){a=n;break A}if(n=0|ar[o>>2],t>>>0>=(((0|ar[a>>2])-n|0)/80|0)>>>0){a=0;break}}}while(0);if(0|(n=0|ar[c>>2])){do{if(0|tr[n+100>>0]){if(0|tr[n+10516>>0]&&0|tr[A+514>>0])break;ar[r>>2]=n,(0|(o=0|ar[(t=A+376172|0)>>2]))==(0|ar[A+376176>>2])?Do(A+376168|0,r):(ar[o>>2]=n,ar[t>>2]=4+(0|ar[t>>2]))}}while(0);((0|ar[A+376172>>2])-(0|ar[A+376168>>2])>>2|0)>(0|ar[n+596+(12*((0|ar[n+116>>2])-1|0)|0)+4>>2])&&Aa(A+376148|0)}if(Te(c),vu(c),1<(n=0|ar[d>>2])-(t=0|ar[i>>2])>>2>>>0)for(o=1;ar[(n=t)+(o+-1<<2)>>2]=ar[n+(o<<2)>>2],(o=o+1|0)>>>0<(n=0|ar[d>>2])-(t=0|ar[i>>2])>>2>>>0;);return ar[d>>2]=n+-4,ur=f,0|(d=a)}function Qo(A,e,r){A|=0,e|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0;if(l=(u=0|ar[(f=(r|=0)+4|0)>>2])+1344|0,u=u+1348|0,t=0|ar[l>>2],(0|ar[u>>2])!=(0|t))for(a=A+376148|0,c=A+376156|0,o=0;-1<(0|(t=0|$o(a,0|ar[t+(o<<2)>>2])))&&(ar[96+(0|ar[(0|ar[c>>2])+(t<<2)>>2])>>2]=0),o=o+1|0,t=0|ar[l>>2],o>>>0<(0|ar[u>>2])-t>>2>>>0;);u=0|ar[e>>2],ar[(i=r+40|0)>>2]=1,c=0|ar[u+10332>>2];A:do{if(0<(0|ar[c+375892>>2]))if(l=(k=0|tr[u+5965>>0])<<24>>24!=0,t=(h=0|tr[u+5966>>0])<<24>>24!=0,(k|h)<<24>>24)d=t;else{if(0<(0|(a=0|ar[(o=c+168|0)>>2]))){t=0;do{if(1e3==(0|ar[c+88+(t<<2)>>2])){d=0;break A}t=t+1|0}while((0|t)<(0|a));(0|a)<20&&(v=12)}else v=12;12==(0|v)&&(ar[o>>2]=a+1,ar[c+88+(a<<2)>>2]=1e3),20==(0|(t=0|ar[(o=c+84|0)>>2]))?(o=1001,t=19):(ar[o>>2]=t+1,o=1e3),ar[c+4+(t<<2)>>2]=o,d=0}else l=d=0}while(0);if(k=e+10632|0,(0|(t=0|ar[(h=e+10636|0)>>2]))!=(0|(o=0|ar[k>>2]))){if((0|ar[o>>2])==(0|r)&&0<(0|(b=0|ar[16+(0|ar[f>>2])>>2]))){for(o=u+10524|0,t=0;Tn((0|ar[o>>2])+(80*t|0)|0,1),(0|(t=t+1|0))!=(0|b););o=0|ar[k>>2],t=0|ar[h>>2]}}else o=t;a=t-o>>2;A:do{if(1<a>>>0){for(t=1;(0|ar[o+(t<<2)>>2])!=(0|r);)if(a>>>0<=(t=t+1|0)>>>0)break A;if(0|(c=0|ar[o+(t+-1<<2)>>2])&&2==(0|ar[c+40>>2])){a=a+-1|0,t=0;do{if(a>>>0<=t>>>0)break A;t=(b=t)+1|0}while((0|ar[o+(b<<2)>>2])!=(0|c));if(0|(t=0|ar[o+(t<<2)>>2])&&(0|(n=0|ar[16+(0|ar[c+4>>2])>>2]))<(0|ar[16+(0|ar[(s=t+4|0)>>2])>>2]))do{if(t=0|ar[e>>2],(0|n)>=(0|ar[t+10344>>2]))break A;Tn((0|ar[t+10524>>2])+(80*n|0)|0,1),n=n+1|0}while((0|n)<(0|ar[16+(0|ar[s>>2])>>2]))}}}while(0);if(!(l|d)){a=0|function(A,e,r){A|=0,e|=0;var i,f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(ur=(n=ur)+18624|0,f=n,t=0|ar[(i=4+(r|=0)|0)>>2],b=t+1348|0,o=0|ar[(u=t+1344|0)>>2],(0|ar[b>>2])!=(0|o)){for(c=A+376148|0,l=A+376156|0,a=0,t=o;-1<(0|(t=0|$o(c,0|ar[t+(a<<2)>>2])))&&(ar[96+(0|ar[(0|ar[l>>2])+(t<<2)>>2])>>2]=0),a=a+1|0,t=0|ar[u>>2],a>>>0<(0|ar[b>>2])-t>>2>>>0;);t=0|ar[i>>2]}if(b=0|ar[e>>2],(0|ar[t+16>>2])>>>0>=(0|ar[b+10276>>2])-(0|ar[b+10272>>2])>>2>>>0)return ur=n,0|(s=6);if(st(b=f+18580|0),t=f+48|0,ar[(u=f+18508|0)>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u+12>>2]=0,ar[u+16>>2]=0,vb(0|(ar[f+2112>>2]=t),0,2048),t=0|ar[i>>2],ar[f+18600>>2]=t,u=0|ar[e>>2],ar[f+18596>>2]=u,ar[f+18592>>2]=A,ar[f+18604>>2]=e,ar[f+18608>>2]=r,ar[f+4>>2]=ar[(0|ar[u+10272>>2])+(ar[t+16>>2]<<2)>>2],Se(ar[f+18612>>2]=0,f),(0|(t=0|ar[r+12>>2]))<1)t=17;else{nt(f+18556|0,0|ar[r+8>>2],t);do{if(0|tr[A+93817>>0]&&0|tr[4+(0|ar[i>>2])>>0]){if(u=e+10676|0,c=(0|ar[5828+(0|ar[A+376224>>2])>>2])-1|0,t=0|ar[(l=e+10680|0)>>2],o=0|ar[u>>2],(a=t-o>>3)>>>0<c>>>0){Jo(u,c-a|0);break}if(c>>>0<a>>>0&&(0|t)!=(0|(s=o+(c<<3)|0)))for(;e=t+-8|0,kt(ar[l>>2]=e),(0|(t=0|ar[l>>2]))!=(0|s););}}while(0);ar[r+124>>2]=1,t=0|function(A){var e,r,i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0;l=0|ar[18596+(A|=0)>>2],a=0|ar[A+4>>2],o=0|ar[l+5836>>2],c=0|ar[l+5820>>2],(0|a)<(0|o)&&(o=0|ar[(0|ar[l+10284>>2])+(a<<2)>>2]);if(ar[A>>2]=o,ar[A+8>>2]=(0|o)%(0|c)|0,ar[A+12>>2]=(0|o)/(0|c)|0,a=0|ar[(i=A+18600|0)>>2],!(0|Da(A)))return 0|(A=18);tt(f=A+18556|0),n=A+18560|0,t=A+18592|0,l=l+5966|0,e=A+18580|0,r=A+18588|0,a=0==(0|tr[a+12>>(o=0)]);for(;;){do{if(0<(0|o)){if(c=o+-1|0,b=0|ar[i>>2],u=0|ar[b+776>>2],c>>>0<(0|ar[b+780>>2])-u>>2>>>0&&((0|ar[n>>2])-2-(0|ar[f>>2])|0)==(0|ar[u+(c<<2)>>2]))break;er(4+(0|ar[t>>2])|0,1003,1)}}while(0);if(o=o+1|0,2==(2|Ja(A,0,a))){o=0,a=14;break}if(0|tr[l>>0]){if(a=0|ar[i>>2],3<=(c=0|ar[a+796>>2])>>>0){a=12;break}ht(e,c,0|ar[a+792>>2]),tr[r>>0]=0,tr[1+r>>0]=0,tr[2+r>>0]=0,tr[3+r>>0]=0,a=0}else a=0}if(12==(0|a))sr(39211,39242,1508,39251);else if(14==(0|a))return 0|o;return 0}(f),Tn(r+44|0,1)}return kt(b),ur=n,0|(s=t)}(A,e,r),ar[i>>2]=2,o=0|ar[k>>2],t=((0|ar[h>>2])-o>>2)-1|0,n=0;do{if(t>>>0<=n>>>0){w=a,v=60;break}n=(s=n)+1|0}while((0|ar[o+(s<<2)>>2])!=(0|r));if(60==(0|v))return 0|w;if(!(n=0|ar[o+(n<<2)>>2]))return 0|(e=a);if(!((0|(t=0|ar[16+(0|ar[f>>2])>>2]))<(0|ar[16+(0|ar[(o=n+4|0)>>2])>>2])))return 0|(e=a);for(n=t;;){if(t=0|ar[e>>2],(0|n)>=(0|ar[t+10344>>2])){w=a,v=60;break}if(Tn((0|ar[t+10524>>2])+(80*n|0)|0,1),(0|(n=n+1|0))>=(0|ar[16+(0|ar[o>>2])>>2])){w=a,v=60;break}}if(60==(0|v))return 0|w}if(l&d)return 0|(e=1006);if(l){!function(A,e,r){A|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0;ur=(a=ur)+16|0,t=a,o=0|ar[(e|=0)>>2],n=0|ar[r+4>>2],f=0|ar[768+n>>2],h=1+f|0,i=0|ar[5820+o>>2],(0|ar[10536+o>>2])!=(0-(0|ar[10532+o>>2])|0)&&sr(34762,34700,989,34867);do{if(0|tr[4+n>>0]){if(l=e+10676|0,u=(0|ar[5828+o>>2])-1|0,c=0|ar[(d=e+10680|0)>>2],b=0|ar[l>>2],(s=c-b>>3)>>>0<u>>>0){Jo(l,u-s|0);break}if(u>>>0<s>>>0&&(0|c)!=(0|(k=b+(u<<3)|0)))for(;X=c+-8|0,kt(ar[d>>2]=X),(0|(c=0|ar[d>>2]))!=(0|k););}}while(0);Ue(r,h),c=0|ar[16+n>>2],s=(0|c)/(0|i)|0;A:do{if(0<=(0|f)){if(m=r+140|0,g=r+136|0,Z=10332+o|0,p=10272+o|0,y=r+12|0,B=r+8|0,E=r+124|0,X=A+375396|0,v=776+n|0,!f){if((0|ar[m>>2])<=0&&sr(34817,34837,170,34848),u=0|ar[g>>2],ar[u+18600>>2]=n,ar[u+18592>>2]=ar[Z>>2],ar[u+18596>>2]=o,ar[(l=u+18604|0)>>2]=e,ar[u+18608>>2]=r,ar[u+4>>2]=ar[(0|ar[p>>2])+(c<<2)>>2],Se(0,u),(0|(c=0|ar[y>>2]))<=0)break;nt(u+18556|0,0|ar[B>>2],c),ca(o,1),ar[E>>2]=1+(0|ar[E>>2]),b=0|hu(20),ar[b+4>>2]=0,ar[b>>2]=7972,tr[b+8>>0]=1,ar[b+16>>2]=u,ar[b+12>>2]=s,ar[u+18612>>2]=b,Sn(X,b),c=0|ar[l>>2],ar[t>>2]=b,(u=0|ar[(l=c+10668|0)>>2])>>>0<(0|ar[c+10672>>2])>>>0?(ar[u>>2]=b,ar[l>>2]=4+(0|ar[l>>2])):Oe(c+10664|0,t);break}for(l=s,w=0;;){if((0|w)<=0){if((0|c)%(0|i)|0)break A}else c=0|br(l=c=l+1|0,i);if((0|ar[m>>2])<=(0|w))break;if(s=0|ar[g>>2],d=s+(18624*w|0)|0,ar[s+(18624*w|0)+18600>>2]=n,ar[s+(18624*w|0)+18592>>2]=ar[Z>>2],ar[s+(18624*w|0)+18596>>2]=o,ar[(k=s+(18624*w|0)+18604|0)>>2]=e,ar[s+(18624*w|0)+18608>>2]=r,ar[s+(18624*w|0)+4>>2]=ar[(0|ar[p>>2])+(c<<2)>>2],Se(0,d),b=(h=0==(0|w))?0:0|ar[(0|ar[v>>2])+(w+-1<<2)>>2],u=(0|w)==(0|f)?y:(0|ar[v>>2])+(w<<2)|0,u=0|ar[u>>2],(0|b)<0)break A;if(!((0|b)<(0|u)&&(0|u)<=(0|ar[y>>2])))break A;if(nt(s+(18624*w|0)+18556|0,(0|ar[B>>2])+b|0,u-b|0),ca(o,1),ar[E>>2]=1+(0|ar[E>>2]),A=0|hu(20),ar[A+4>>2]=0,ar[A>>2]=7972,tr[A+8>>0]=1&h,ar[A+16>>2]=d,ar[A+12>>2]=l,ar[s+(18624*w|0)+18612>>2]=A,Sn(X,A),s=0|ar[k>>2],ar[t>>2]=A,(b=0|ar[(u=s+10668|0)>>2])>>>0<(0|ar[s+10672>>2])>>>0?(ar[b>>2]=A,ar[u>>2]=4+(0|ar[u>>2])):Oe(s+10664|0,t),!((0|w)<(0|f)))break A;w=w+1|0}sr(34817,34837,170,34848)}}while(0);if(sa(o),d=e+10664|0,l=0|ar[(k=e+10668|0)>>2],b=0|ar[d>>2],(0|(c=l))!=(0|(u=b))){for(s=0;(u=0|ar[u+(s<<2)>>2])&&(is[511&ar[4+(0|ar[u>>2])>>2]](u),c=0|ar[k>>2],b=0|ar[d>>2],l=c),(s=s+1|0)>>>0<l-(u=b)>>2>>>0;);l=b}ur=((0|c)!=(0|u)&&(ar[k>>2]=c+(~((c+-4-l|0)>>>2)<<2)),a)}(A,e,r),ar[i>>2]=2,o=0|ar[k>>2],t=((0|ar[h>>2])-o>>2)-1|0,n=0;do{if(t>>>0<=n>>>0){w=0,v=60;break}n=(s=n)+1|0}while((0|ar[o+(s<<2)>>2])!=(0|r));if(60==(0|v))return 0|w;if(!(n=0|ar[o+(n<<2)>>2]))return(e=0)|e;if(!((0|(t=0|ar[16+(0|ar[f>>2])>>2]))<(0|ar[16+(0|ar[(o=n+4|0)>>2])>>2])))return(e=0)|e;for(n=t;;){if(t=0|ar[e>>2],(0|n)>=(0|ar[t+10344>>2])){w=0,v=60;break}if(Tn((0|ar[t+10524>>2])+(80*n|0)|0,1),(0|(n=n+1|0))>=(0|ar[16+(0|ar[o>>2])>>2])){w=0,v=60;break}}if(60==(0|v))return 0|w}d||sr(55739,34700,971,34735),a=0|function(A,e,r){A|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0;ur=(a=ur)+16|0,f=a,n=0|ar[(e|=0)>>2],t=0|ar[r+4>>2],o=0|ar[768+t>>2],i=0|ar[5820+n>>2],(0|ar[10536+n>>2])!=(0-(0|ar[10532+n>>2])|0)&&sr(34762,34700,1103,34793);Ue(r,1+o|0),c=0|ar[16+t>>2];A:do{if((0|o)<0)C=0;else{for(g=5968+n|0,Z=5972+n|0,p=r+140|0,y=r+136|0,B=10332+n|0,E=10272+n|0,X=r+12|0,W=r+8|0,I=r+124|0,v=A+375396|0,m=776+t|0,l=c,A=0|ar[(0|ar[10308+n>>2])+(c<<2)>>2],w=0;;){if(0<(0|w)){if(c=A+1|0,A=0|ar[g>>2],(0|c)>=(0|br(0|ar[Z>>2],A))){C=1007;break A}l=(0|br(0|ar[10228+n+(((0|c)/(0|A)|0)<<2)>>2],i))+(0|ar[10184+n+(((0|c)%(0|A)|0)<<2)>>2])|0,A=c}if((0|ar[p>>2])<=(0|w))break;if(b=0|ar[y>>2],s=b+(18624*w|0)|0,ar[b+(18624*w|0)+18600>>2]=t,ar[b+(18624*w|0)+18592>>2]=ar[B>>2],ar[b+(18624*w|0)+18596>>2]=n,ar[(d=b+(18624*w|0)+18604|0)>>2]=e,ar[b+(18624*w|0)+18608>>2]=r,ar[b+(18624*w|0)+4>>2]=ar[(0|ar[E>>2])+(l<<2)>>2],Se(0,s),u=(k=0==(0|w))?0:0|ar[(0|ar[m>>2])+(w+-1<<2)>>2],c=(0|w)==(0|o)?X:(0|ar[m>>2])+(w<<2)|0,c=0|ar[c>>2],(0|u)<0){C=17;break A}if(!((0|u)<(0|c)&&(0|c)<=(0|ar[X>>2]))){C=17;break A}if(nt(b+(18624*w|0)+18556|0,(0|ar[W>>2])+u|0,c-u|0),ca(n,1),ar[I>>2]=1+(0|ar[I>>2]),h=0|hu(24),ar[h+4>>2]=0,ar[h>>2]=7932,tr[h+8>>0]=1&k,ar[h+20>>2]=s,ar[h+12>>2]=(0|l)%(0|i)|0,ar[h+16>>2]=(0|l)/(0|i)|0,ar[b+(18624*w|0)+18612>>2]=h,Sn(v,h),c=0|ar[d>>2],ar[f>>2]=h,(b=0|ar[(u=c+10668|0)>>2])>>>0<(0|ar[c+10672>>2])>>>0?(ar[b>>2]=h,ar[u>>2]=4+(0|ar[u>>2])):Oe(c+10664|0,f),!((0|w)<(0|o))){C=0;break A}w=w+1|0}sr(34817,34837,170,34848)}}while(0);if(sa(n),s=e+10664|0,c=0|ar[(d=e+10668|0)>>2],u=0|ar[s>>2],(0|(A=c))!=(0|(l=u))){for(b=0;(l=0|ar[l+(b<<2)>>2])&&(is[511&ar[4+(0|ar[l>>2])>>2]](l),A=0|ar[d>>2],u=0|ar[s>>2],c=A),(b=b+1|0)>>>0<c-(l=u)>>2>>>0;);c=u}return ur=((0|A)!=(0|l)&&(ar[d>>2]=A+(~((A+-4-c|0)>>>2)<<2)),a),0|C}(A,e,r),ar[i>>2]=2,o=0|ar[k>>2],t=((0|ar[h>>2])-o>>2)-1|0,n=0;do{if(t>>>0<=n>>>0){w=a,v=60;break}n=(A=n)+1|0}while((0|ar[o+(A<<2)>>2])!=(0|r));if(60==(0|v))return 0|w;if(!(t=0|ar[o+(n<<2)>>2]))return 0|(e=a);if((0|(n=0|ar[16+(0|ar[f>>2])>>2]))>=(0|ar[16+(0|ar[(o=t+4|0)>>2])>>2]))return 0|(e=a);for(;;){if(t=0|ar[e>>2],(0|n)>=(0|ar[t+10344>>2])){w=a,v=60;break}if(Tn((0|ar[t+10524>>2])+(80*n|0)|0,1),(0|(n=n+1|0))>=(0|ar[16+(0|ar[o>>2])>>2])){w=a,v=60;break}}return 60==(0|v)?0|w:0}function Do(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=(A|=0)+4|0,n=0|ar[A>>2],1073741823<(o=1+(i=(t=(0|ar[f>>2])-n|0)>>2)|0)>>>0&&zl(),a=(c=(0|ar[(l=A+8|0)>>2])-n|0)>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t),ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),n&&vu(n)}function Jo(A,e){var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0;if((e|=0)>>>0<=(t=0|ar[(i=(A|=0)+8|0)>>2])-(f=0|ar[(l=A+4|0)>>2])>>3>>>0)for(;st(f),f=8+(0|ar[l>>2])|0,ar[l>>2]=f,0!=(0|(e=e+-1|0)););else{536870911<(f=(o=f-(n=0|ar[A>>2])>>3)+e|0)>>>0&&zl(),c=(a=t-n|0)>>2,f=a>>3>>>0<268435455?c>>>0<f>>>0?f:c:536870911;do{if(f){if(!(536870911<f>>>0)){n=0|hu(f<<3);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else n=0}while(0);for(c=n+(f<<3)|0,a=o=r=n+(o<<3)|0,f=r;st(f),a=f=a+8|0,0!=(0|(e=e+-1|0)););if(t=0|ar[A>>2],(0|(f=0|ar[l>>2]))==(0|t))e=o,f=n=t;else{for(n=o,e=r;dt(e+-8|0,f=f+-8|0),n=e=n+-8|0,(0|f)!=(0|t););e=n,n=0|ar[A>>2],f=0|ar[l>>2]}if(ar[A>>2]=e,ar[l>>2]=a,ar[i>>2]=c,(0|f)!=(0|(e=n)))for(;kt(f=f+-8|0),(0|f)!=(0|e););n&&vu(n)}}function Mo(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=(A|=0)+4|0,n=0|ar[A>>2],1073741823<(o=1+(i=(t=(0|ar[f>>2])-n|0)>>2)|0)>>>0&&zl(),a=(c=(0|ar[(l=A+8|0)>>2])-n|0)>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t),ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),n&&vu(n)}function To(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n,t=0,o=0,a=0,c=0;if(0|Lo(t=(e|=0)+376148|0,1)||sr(35044,34700,1433,35080),(0|(n=0|ia(t,0|ar[e+375388>>2],A,0,0,0,0)))<=-1&&sr(35119,34700,1436,35080),A=0|ar[e+376156>>2],A=(0|ar[e+376160>>2])-A>>2>>>0>n>>>0?0|ar[A+(n<<2)>>2]:0,e=1<<(0|ar[r+5004>>2])-1,function(A,e,r,i){A|=0,r|=0,i|=0,-1<(0|(e|=0))&&vb(0|ar[A+4>>2],255&e|0,0|br(0|ar[A+28>>2],0|ar[A+40>>2]));-1<(0|r)&&vb(0|ar[A+8>>2],255&r|0,0|br(0|ar[A+36>>2],0|ar[A+44>>2]));if((0|i)<=-1)return;vb(0|ar[A+12>>2],255&i|0,0|br(0|ar[A+36>>2],0|ar[A+44>>2]))}(A,1<<(0|ar[r+4996>>2])-1,e,e),0<(0|ar[(e=A+10364|0)>>2]))for(o=A+10360|0,t=0;a=(0|ar[o>>2])+(3*t|0)|0,c=-769&(cr[a>>0]|cr[a+1>>0]<<8),tr[a>>0]=c,tr[a+1>>0]=c>>8,(0|(t=t+1|0))<(0|ar[e>>2]););return ar[A+92>>2]=i,ar[A+88>>2]=(0|ar[r+5032>>2])-1&i,tr[A+100>>0]=0,ar[A+96>>2]=f?2:1,tr[A+10516>>0]=1,0|n}function Uo(A,e){A|=0;var r,i,f=0,n=0,t=0,o=0,a=0;if(ur=(i=ur)+112|0,r=i+24|0,t=(o=i)+104|0,function(A,e,r){e|=0,r|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0,l=0;ar[(A|=0)>>2]=e,ar[(i=A+4|0)>>2]=r,ar[(c=a=A+8|0)>>2]=0,ar[c+4>>2]=0,ar[(c=A+16|0)>>2]=0,r?(f=e+1|0,ar[A>>2]=f,n=0|cr[e>>0],o=r+-1|0,ar[i>>2]=o,n=0|db(0|n,0,56),t=D,ar[(l=a)>>2]=n,ar[l+4>>2]=t,o?(o=e+2|0,ar[A>>2]=o,f=0|cr[f>>0],l=r+-2|0,ar[i>>2]=l,f=0|db(0|f,0,48),f|=n,n=t|D,ar[(t=a)>>2]=f,ar[t+4>>2]=n,l?(t=e+3|0,ar[A>>2]=t,o=0|cr[o>>0],l=r+-3|0,ar[i>>2]=l,o=0|db(0|o,0,40),o|=f,f=n|D,ar[(n=a)>>2]=o,ar[n+4>>2]=f,l?(n=e+4|0,ar[A>>2]=n,t=0|cr[t>>0],l=r+-4|0,ar[i>>2]=l,f|=t,ar[(t=a)>>2]=o,ar[t+4>>2]=f,l?(t=e+5|0,ar[A>>2]=t,n=0|cr[n>>0],l=r+-5|0,ar[i>>2]=l,n=0|db(0|n,0,24),n|=o,f|=D,ar[(o=a)>>2]=n,ar[o+4>>2]=f,l?(o=e+6|0,ar[A>>2]=o,t=0|cr[t>>0],l=r+-6|0,ar[i>>2]=l,n|=t=0|db(0|t,0,16),f|=D,ar[(t=a)>>2]=n,ar[t+4>>2]=f,l?(t=e+7|0,ar[A>>2]=t,o=0|cr[o>>0],l=r+-7|0,ar[i>>2]=l,n|=o=0|db(0|o,0,8),f|=D,ar[(o=a)>>2]=n,ar[o+4>>2]=f,l=l?(ar[A>>2]=e+8,e=0|cr[t>>0],ar[i>>2]=r+-8,ar[(l=a)>>2]=n|e,ar[l+4>>2]=f,64-(l=0)|0):64-(l=8)|0,ar[c>>2]=l):(l=64-(l=16)|0,ar[c>>2]=l)):(l=64-(l=24)|0,ar[c>>2]=l)):(l=64-(l=32)|0,ar[c>>2]=l)):(l=64-(l=40)|0,ar[c>>2]=l)):(l=64-(l=48)|0,ar[c>>2]=l)):(l=64-(l=56)|0,ar[c>>2]=l)):(a=(a=64)-a|0,ar[c>>2]=a)}(o,0|ar[(e|=0)+20>>2],0|ar[e+24>>2]),tr[t>>0]=0,tr[(a=t+1|0)>>0]=0,tr[(f=t+2|0)>>0]=0,function(A,e){A|=0;var r=0;et(e=e|0,1),r=255&(0|At(e,6)),tr[A>>0]=r,r=255&(0|At(e,6)),tr[A+1>>0]=r,e=255+(0|At(e,3))&255,tr[A+2>>0]=e}(t,o),n=0|tr[t>>0],tr[A+377212>>0]=n,tr[A+377213>>0]=(n+-19&255)<2&1,tr[A+377214>>0]=(-8&n)<<24>>24==16&1,0|tr[a>>0])return Ba(A+548|0,e),ur=i,(e=0)|e;if((0|cr[f>>0])>(0|ar[A+375912>>2]))return Ba(A+548|0,e),ur=i,(e=0)|e;if((255&n)<32)return e=0|rr(A,o,e,t),ur=i,0|e;switch(n<<24>>24){case 32:return a=0|ze(A,o),Ba(A+548|0,e),ur=i,0|(e=a);case 33:return a=0|Le(A,o),Ba(A+548|0,e),ur=i,0|(e=a);case 34:return a=0|qe(A,o),Ba(A+548|0,e),ur=i,0|(e=a);case 40:case 39:a=0|function(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f=0,n=0;r=0;for(;n=0|At(A,8),r=n+r|0,255==(0|n););f=0;for(;n=0|At(A,8),f=n+f|0,255==(0|n););if(ar[e>>2]=r,ar[e+4>>2]=f,132!=(0|r))return(e=0)|e;if(f=0|At(A,8),ar[(n=e+8|0)>>2]=f,!i)return 0|(e=1025);i=0==(0|ar[i+476>>2])?1:3,r=0;for(;;){switch(0|f){case 0:f=255&(0|At(A,8)),tr[e+12+(r<<4)>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+1>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+2>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+3>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+4>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+5>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+6>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+7>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+8>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+9>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+10>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+11>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+12>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+13>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+14>>0]=f,f=255&(0|At(A,8)),tr[e+12+(r<<4)+15>>0]=f;break;case 1:f=65535&(0|At(A,16)),or[e+60+(r<<1)>>1]=f;break;case 2:f=0|At(A,32),ar[e+68+(r<<2)>>2]=f}if((0|i)<=(0|(r=r+1|0))){r=0;break}f=0|ar[n>>2]}return 0|r}(o,r,n=n<<24>>24==40,0|ar[A+375388>>2]);do{if(a)20==(0|(f=0|ar[(n=A+84|0)>>2]))?(n=1001,f=19):(ar[n>>2]=f+1,n=a),ar[A+4+(f<<2)>>2]=n;else if(f=0|ar[A+377220>>2],!((0|ar[A+377216>>2])==(0|f)|1^n)){if(f=0|ar[f+-4>>2],(0|(n=0|ar[(o=f+10648|0)>>2]))==(0|ar[f+10652>>2])){Ar(f+10644|0,r);break}for(f=r,t=n+80|0;ar[n>>2]=ar[f>>2],f=f+4|0,(0|(n=n+4|0))<(0|t););ar[o>>2]=80+(0|ar[o>>2]);break}}while(0);return Ba(A+548|0,e),ur=i,0|(e=a);case 36:return tr[A+376211>>0]=1,Ba(A+548|0,e),ur=i,(e=0)|e;default:return Ba(A+548|0,e),ur=i,(e=0)|e}return 0}function So(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b=0,s=0,d=0,k=0,h=0,w=0,v=0;if(ur=(u=ur)+2048|0,l=u,1<(0|(e|=0)))for(s=e,b=0;b=b+1|0,3<s>>>0;)s>>>=1;else b=0;if(a=5-b|0,c=1<<i+-1,n=(w=1<<f)+65535|0,t=0-w|0,o=0<(0|e)){h=65535&(31==(0|f)?t:31!=(0|f)?0:n),k=0;do{for(d=e;;){if(b=d+-1|0,(0|d)<=0){b=0,s=8;break}if(f=r+((0|br(b,e))+k<<1)|0,0|or[f>>1]){f=0,s=10;break}d=b}if(8==(0|s))for(;d=l+((0|br(b,e))+k<<1)|0,or[d>>1]=h,(0|(b=b+1|0))!=(0|e);)s=8;else if(10==(0|s))for(;;){for(s=b=0;v=r+((0|br(b,e))+k<<1)|0,s=(0|br(0|or[v>>1],0|tr[35206+(b<<a<<5)+f>>0]))+s|0,(0|(b=b+1|0))!=(0|d););if(s=s+64>>7,v=l+((0|br(f,e))+k<<1)|0,or[v>>1]=(0|s)<(0|t)?t:(0|s)<(0|w)?s:n,(0|(f=f+1|0))==(0|e))break;s=10}k=k+1|0}while((0|k)!=(0|e));if(o){h=c>>i,k=0;do{for(w=0|br(k,e),d=e;;){if(b=d+-1|0,(0|d)<=0){b=0,s=18;break}if(0|or[l+(b+w<<1)>>1]){f=0,s=20;break}d=b}if(18==(0|s))for(;ar[A+(b+w<<2)>>2]=h,(0|(b=b+1|0))!=(0|e);)s=18;else if(20==(0|s))for(;;){for(s=b=0;s=(0|br(0|or[l+(b+w<<1)>>1],0|tr[35206+(b<<a<<5)+f>>0]))+s|0,(0|(b=b+1|0))!=(0|d););if(ar[A+(f+w<<2)>>2]=s+c>>i,(0|(f=f+1|0))==(0|e))break;s=20}k=k+1|0}while((0|k)!=(0|e));ur=u}else ur=u}else ur=u}function Oo(A,e,r,i,f){A|=0,e|=0,i|=0;var n,t,o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;if(ur=(c=ur)+2048|0,t=c,a=1<<(o=20-(f|=0)|0)-1,1<(0|(r|=0)))for(u=r,l=0;l=l+1|0,3<u>>>0;)u>>>=1;else l=0;if(n=5-l|0,k=0<(0|r)){d=0;do{for(s=r;;){if(l=s+-1|0,(0|s)<=0){l=0,u=7;break}if(w=i+((0|br(l,r))+d<<1)|0,0|or[w>>1]){b=0,u=9;break}s=l}if(7==(0|u))for(;w=t+((0|br(l,r))+d<<1)|0,((or[w>>1]=0)|(l=l+1|0))!=(0|r);)u=7;else if(9==(0|u))for(;;){for(u=l=0;w=i+((0|br(l,r))+d<<1)|0,u=(0|br(0|or[w>>1],0|tr[35206+(l<<n<<5)+b>>0]))+u|0,(0|(l=l+1|0))!=(0|s););if(h=u+64>>7,w=t+((0|br(b,r))+d<<1)|0,or[w>>1]=(0|h)<-32768?-32768:65535&((0|h)<32767?h:32767),(0|(b=b+1|0))==(0|r))break;u=9}d=d+1|0}while((0|d)!=(0|r));if(k){h=(f=1<<f)+255|0,w=a>>o,i=0;do{for(k=0|br(i,r),d=r;;){if(l=d+-1|0,(0|d)<=0){u=18;break}if(0|or[t+(l+k<<1)>>1]){u=19;break}d=l}if(18==(0|u))for(u=0|br(i,e),l=0;d=(0|cr[(k=A+(l+u)|0)>>0])+w|0,tr[k>>0]=(0|d)<0?0:255&((0|d)<(0|f)?d:h),(0|(l=l+1|0))!=(0|r););else if(19==(0|u)){s=0|br(i,e),b=0;do{for(u=l=0;u=(0|br(0|or[t+(l+k<<1)>>1],0|tr[35206+(l<<n<<5)+b>>0]))+u|0,(0|(l=l+1|0))!=(0|d););u=(0|cr[(l=A+(b+s)|0)>>0])+(u+a>>o)|0,tr[l>>0]=(0|u)<0?0:255&((0|u)<(0|f)?u:h),b=b+1|0}while((0|b)!=(0|r))}i=i+1|0}while((0|i)!=(0|r));ur=c}else ur=c}else ur=c}function zo(A,e,r,i,f){A|=0,e|=0,i|=0;var n,t,o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;if(ur=(c=ur)+2048|0,t=c,a=1<<(o=20-(f|=0)|0)-1,1<(0|(r|=0)))for(u=r,l=0;l=l+1|0,3<u>>>0;)u>>>=1;else l=0;if(n=5-l|0,k=0<(0|r)){d=0;do{for(s=r;;){if(l=s+-1|0,(0|s)<=0){l=0,u=7;break}if(w=i+((0|br(l,r))+d<<1)|0,0|or[w>>1]){b=0,u=9;break}s=l}if(7==(0|u))for(;w=t+((0|br(l,r))+d<<1)|0,((or[w>>1]=0)|(l=l+1|0))!=(0|r);)u=7;else if(9==(0|u))for(;;){for(u=l=0;w=i+((0|br(l,r))+d<<1)|0,u=(0|br(0|or[w>>1],0|tr[35206+(l<<n<<5)+b>>0]))+u|0,(0|(l=l+1|0))!=(0|s););if(h=u+64>>7,w=t+((0|br(b,r))+d<<1)|0,or[w>>1]=(0|h)<-32768?-32768:65535&((0|h)<32767?h:32767),(0|(b=b+1|0))==(0|r))break;u=9}d=d+1|0}while((0|d)!=(0|r));if(k){h=(f=1<<f)+65535|0,w=a>>o,i=0;do{for(k=0|br(i,r),d=r;;){if(l=d+-1|0,(0|d)<=0){u=18;break}if(0|or[t+(l+k<<1)>>1]){u=19;break}d=l}if(18==(0|u))for(u=0|br(i,e),l=0;d=(0|lr[(k=A+(l+u<<1)|0)>>1])+w|0,or[k>>1]=(0|d)<0?0:65535&((0|d)<(0|f)?d:h),(0|(l=l+1|0))!=(0|r););else if(19==(0|u)){s=0|br(i,e),b=0;do{for(u=l=0;u=(0|br(0|or[t+(l+k<<1)>>1],0|tr[35206+(l<<n<<5)+b>>0]))+u|0,(0|(l=l+1|0))!=(0|d););u=(0|lr[(l=A+(b+s<<1)|0)>>1])+(u+a>>o)|0,or[l>>1]=(0|u)<0?0:65535&((0|u)<(0|f)?u:h),b=b+1|0}while((0|b)!=(0|r))}i=i+1|0}while((0|i)!=(0|r));ur=c}else ur=c}else ur=c}function jo(A,e,r,i){A|=0,r|=0,i|=0;var f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;if(ur=(t=ur)+2048|0,n=t,1<(0|(e|=0))){for(o=e,u=0;;){if(!(3<o>>>0)){o=e,a=0;break}o>>>=1,u=u+1|0}for(;3<o>>>0;)o>>>=1,a=a+1|0;for(b=a+7|0,c=1<<u+-1,l=1<<a+6,a=e,o=0;;){if(o=o+1|0,!(3<a>>>0)){d=u,h=l,k=b;break}a>>>=1}}else c=o=0,d=-1,h=32,k=6;if(f=5-o|0,b=0<(0|e)){o=0;do{u=0;do{for(s=u<<f,l=a=0;w=r+((0|br(a,i))+o<<1)|0,l=(0|br(0|or[w>>1],0|tr[35206+(s<<5)+a>>0]))+l|0,(0|(a=a+1|0))!=(0|e););w=n+((0|br(u,e))+o<<1)|0,or[w>>1]=l+c>>d,u=u+1|0}while((0|u)!=(0|e));o=o+1|0}while((0|o)!=(0|e));if(b){l=0;do{u=0|br(l,e),c=0;do{for(b=c<<f,a=o=0;a=(0|br(0|or[n+(o+u<<1)>>1],0|tr[35206+(b<<5)+o>>0]))+a|0,(0|(o=o+1|0))!=(0|e););or[A+(c+u<<1)>>1]=a+h>>k,c=c+1|0}while((0|c)!=(0|e));l=l+1|0}while((0|l)!=(0|e));ur=t}else ur=t}else ur=t}function Ho(A,e,r,i){A|=0,r|=0,i|=0;var f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0;if(ur=(t=ur)+2176|0,n=t+128|0,f=0<(0|(e|=0))){for(w=0==(0|(h=e>>>1)),v=e>>>2,m=7<e>>>0,b=(l=t)+64|(k=0);;){if(a=0|br(k,i),!w)for(c=b,o=0;u=r+(o+a<<1)|0,s=r+((d=o+h|0)+a<<1)|0,or[c+(o<<1)>>1]=(0|lr[s>>1])+(0|lr[u>>1]),or[c+(d<<1)>>1]=(0|lr[u>>1])-(0|lr[s>>1]),(0|(o=o+1|0))!=(0|h););if(m)for(s=v,d=h,u=l,l=b;;){c=l,b=u,a=0;do{for(o=0;p=c+((y=o+a|0)<<1)|0,Z=c+((g=y+s|0)<<1)|0,or[b+(y<<1)>>1]=(0|lr[Z>>1])+(0|lr[p>>1]),or[b+(g<<1)>>1]=(0|lr[p>>1])-(0|lr[Z>>1]),(0|(o=o+1|0))!=(0|s););a=a+d|0}while((0|a)<(0|e));if((0|(s>>=1))<=1)break;y=l,d>>=1,l=u,u=y}else u=b;for(a=u,c=0|br(k,e),o=0;Z=0|or[a+(o<<1)>>1],p=0|or[a+((y=1|o)<<1)>>1],or[n+(o+c<<1)>>1]=p+Z,or[n+(y+c<<1)>>1]=Z-p,(0|(o=o+2|0))<(0|e););if((0|(k=k+1|0))==(0|e))break;b=u}if(f){for(w=0==(0|(h=e>>>1)),v=e>>>2,m=7<e>>>0,k=0;;){if(!w)for(a=u,o=0;Z=n+((0|br(o,e))+k<<1)|0,Z=0|or[Z>>1],p=n+((0|br(y=o+h|0,e))+k<<1)|0,p=0|or[p>>1],or[a+(o<<1)>>1]=p+Z,or[a+(y<<1)>>1]=Z-p,(0|(o=o+1|0))!=(0|h););if(m)for(s=v,d=h,c=l,l=u;;){u=l,b=c,a=0;do{for(o=0;Z=u+((g=o+a|0)<<1)|0,p=u+((y=g+s|0)<<1)|0,or[b+(g<<1)>>1]=(0|lr[p>>1])+(0|lr[Z>>1]),or[b+(y<<1)>>1]=(0|lr[Z>>1])-(0|lr[p>>1]),(0|(o=o+1|0))!=(0|s););a=a+d|0}while((0|a)<(0|e));if((0|(s>>=1))<=1)break;y=l,d>>=1,l=c,c=y}else c=u;for(a=c,o=0;Z=a+(o<<1)|0,p=a+((y=1|o)<<1)|0,g=A+((0|br(o,e))+k<<1)|0,or[g>>1]=(0|lr[p>>1])+(0|lr[Z>>1]),y=A+((0|br(y,e))+k<<1)|0,or[y>>1]=(0|lr[Z>>1])-(0|lr[p>>1]),(0|(o=o+2|0))<(0|e););if((0|(k=k+1|0))==(0|e))break;u=c}ur=t}else ur=t}else ur=t}function xo(A,e,r,i,f,n,t,o,a,c){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,a|=0,c|=0;var l,u,b,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0;switch(d=0|ar[9768+((o|=0)<<2)>>2],b=(u=0|ar[9768+(a<<2)>>2])+n+(s=0|ar[9784+(a<<2)>>2])|0,l=c+-8|0,0|o){case 0:if((0|(c=0-u|0))<(0|(h=s+n|0))&&(v=0-d|0,0<(0|f)))do{for(d=t+(c+u<<1)|(s=0),k=r+(0|br(c,i))+v|0;or[d>>1]=0|cr[k>>0],(0|(s=s+1|0))!=(0|f);)d=d+(b<<1)|0,k=k+1|0;c=c+1|0}while((0|c)!=(0|h));break;case 1:if((0|(c=0-u|0))<(0|(h=s+n|0))&&(m=0-d|0,0<(0|f)))do{for(d=t+(c+u<<1)|(s=0),k=r+(0|br(c,i))+m|0;v=(v=(cr[(k=(g=k)+1|0)>>0]<<2)-(0|cr[g>>0])+(0|br(0|cr[g+2>>0],-10))|0)+(58*(0|cr[g+3>>0])|0)+(17*(0|cr[g+4>>0])|0)+(0|br(0|cr[g+5>>0],-5))|0,or[d>>1]=v+(0|cr[g+6>>0])>>l,(0|(s=s+1|0))!=(0|f);)d=d+(b<<1)|0;c=c+1|0}while((0|c)!=(0|h));break;case 2:if((0|(c=0-u|0))<(0|(h=s+n|0))&&(g=0-d|0,0<(0|f)))do{for(d=t+(c+u<<1)|(s=0),k=r+(0|br(c,i))+g|0;m=(cr[(k=(m=k)+1|0)>>0]<<2)-(0|cr[m>>0])+(40*((0|cr[m+4>>0])+(0|cr[m+3>>0])|0)|0)+(cr[m+6>>0]<<2)-(0|cr[m+7>>0])+(0|br((0|cr[m+5>>0])+(0|cr[m+2>>0])|0,-11))>>l&65535,or[d>>1]=m,(0|(s=s+1|0))!=(0|f);)d=d+(b<<1)|0;c=c+1|0}while((0|c)!=(0|h));break;case 3:if((0|(c=0-u|0))<(0|(h=s+n|0))&&(w=0-d|0,0<(0|f)))do{for(d=t+(c+u<<1)|(s=0),k=r+(0|br(c,i))+w|0;m=(m=(0|br(0|cr[(k=(g=k)+1|0)>>0],-5))+(0|cr[g>>0])|0)+(17*(0|cr[g+2>>0])|0)+(58*(0|cr[g+3>>0])|0)+(0|br(0|cr[g+4>>0],-10))|0,or[d>>1]=m+(cr[g+5>>0]<<2)-(0|cr[g+6>>0])>>l,(0|(s=s+1|0))!=(0|f);)d=d+(b<<1)|0;c=c+1|0}while((0|c)!=(0|h))}switch(h=0==(0|o)?l:6,0|a){case 0:if(!(0<(0|f)&0<(0|n)))return;k=0;do{for(s=A+(k<<1)|(c=0),d=t+((0|br(k,b))<<1)|0;or[s>>1]=0|or[d>>1],(0|(c=c+1|0))!=(0|n);)s=s+(e<<1)|0,d=d+2|0;k=k+1|0}while((0|k)!=(0|f));return;case 1:if(!(0<(0|f)&0<(0|n)))return;k=0;do{for(s=A+(k<<1)|(c=0),d=t+((0|br(k,b))<<1)|0;o=(o=(or[(d=(a=d)+2|0)>>1]<<2)-(0|or[a>>1])+(0|br(0|or[a+4>>1],-10))|0)+(58*(0|or[a+6>>1])|0)+(17*(0|or[a+8>>1])|0)+(0|br(0|or[a+10>>1],-5))|0,or[s>>1]=o+(0|or[a+12>>1])>>h,(0|(c=c+1|0))!=(0|n);)s=s+(e<<1)|0;k=k+1|0}while((0|k)!=(0|f));return;case 2:if(!(0<(0|f)&0<(0|n)))return;k=0;do{for(s=A+(k<<1)|(c=0),d=t+((0|br(k,b))<<1)|0;a=(or[(d=(a=d)+2|0)>>1]<<2)-(0|or[a>>1])+(40*((0|or[a+8>>1])+(0|or[a+6>>1])|0)|0)+(or[a+12>>1]<<2)-(0|or[a+14>>1])+(0|br((0|or[a+10>>1])+(0|or[a+4>>1])|0,-11))>>h&65535,or[s>>1]=a,(0|(c=c+1|0))!=(0|n);)s=s+(e<<1)|0;k=k+1|0}while((0|k)!=(0|f));return;case 3:if(!(0<(0|f)&0<(0|n)))return;k=0;do{for(s=A+(k<<1)|(c=0),d=t+((0|br(k,b))<<1)|0;o=(o=(0|br(0|or[(d=(a=d)+2|0)>>1],-5))+(0|or[a>>1])|0)+(17*(0|or[a+4>>1])|0)+(58*(0|or[a+6>>1])|0)+(0|br(0|or[a+8>>1],-10))|0,or[s>>1]=o+(or[a+10>>1]<<2)-(0|or[a+12>>1])>>h,(0|(c=c+1|0))!=(0|n);)s=s+(e<<1)|0;k=k+1|0}while((0|k)!=(0|f));return;default:return}}function Po(A,e,r,i,f,n,t,o,a,c){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,a|=0,c|=0;var l,u,b,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0;switch(d=0|ar[9768+((o|=0)<<2)>>2],b=(u=0|ar[9768+(a<<2)>>2])+n+(s=0|ar[9784+(a<<2)>>2])|0,l=c+-8|0,0|o){case 0:if((0|(c=0-u|0))<(0|(h=s+n|0))&&(v=0-d|0,0<(0|f)))do{for(d=t+(c+u<<1)|(s=0),k=r+((0|br(c,i))<<1)+(v<<1)|0;or[d>>1]=0|or[k>>1],(0|(s=s+1|0))!=(0|f);)d=d+(b<<1)|0,k=k+2|0;c=c+1|0}while((0|c)!=(0|h));break;case 1:if((0|(c=0-u|0))<(0|(h=s+n|0))&&(m=0-d|0,0<(0|f)))do{for(d=t+(c+u<<1)|(s=0),k=r+((0|br(c,i))<<1)+(m<<1)|0;v=(v=(lr[(k=(g=k)+2|0)>>1]<<2)-(0|lr[g>>1])+(0|br(0|lr[g+4>>1],-10))|0)+(58*(0|lr[g+6>>1])|0)+(17*(0|lr[g+8>>1])|0)+(0|br(0|lr[g+10>>1],-5))|0,or[d>>1]=v+(0|lr[g+12>>1])>>l,(0|(s=s+1|0))!=(0|f);)d=d+(b<<1)|0;c=c+1|0}while((0|c)!=(0|h));break;case 2:if((0|(c=0-u|0))<(0|(h=s+n|0))&&(g=0-d|0,0<(0|f)))do{for(d=t+(c+u<<1)|(s=0),k=r+((0|br(c,i))<<1)+(g<<1)|0;m=(lr[(k=(m=k)+2|0)>>1]<<2)-(0|lr[m>>1])+(40*((0|lr[m+8>>1])+(0|lr[m+6>>1])|0)|0)+(lr[m+12>>1]<<2)-(0|lr[m+14>>1])+(0|br((0|lr[m+10>>1])+(0|lr[m+4>>1])|0,-11))>>l&65535,or[d>>1]=m,(0|(s=s+1|0))!=(0|f);)d=d+(b<<1)|0;c=c+1|0}while((0|c)!=(0|h));break;case 3:if((0|(c=0-u|0))<(0|(h=s+n|0))&&(w=0-d|0,0<(0|f)))do{for(d=t+(c+u<<1)|(s=0),k=r+((0|br(c,i))<<1)+(w<<1)|0;m=(m=(0|br(0|lr[(k=(g=k)+2|0)>>1],-5))+(0|lr[g>>1])|0)+(17*(0|lr[g+4>>1])|0)+(58*(0|lr[g+6>>1])|0)+(0|br(0|lr[g+8>>1],-10))|0,or[d>>1]=m+(lr[g+10>>1]<<2)-(0|lr[g+12>>1])>>l,(0|(s=s+1|0))!=(0|f);)d=d+(b<<1)|0;c=c+1|0}while((0|c)!=(0|h))}switch(h=0==(0|o)?l:6,0|a){case 0:if(!(0<(0|f)&0<(0|n)))return;k=0;do{for(s=A+(k<<1)|(c=0),d=t+((0|br(k,b))<<1)|0;or[s>>1]=0|or[d>>1],(0|(c=c+1|0))!=(0|n);)s=s+(e<<1)|0,d=d+2|0;k=k+1|0}while((0|k)!=(0|f));return;case 1:if(!(0<(0|f)&0<(0|n)))return;k=0;do{for(s=A+(k<<1)|(c=0),d=t+((0|br(k,b))<<1)|0;o=(o=(or[(d=(a=d)+2|0)>>1]<<2)-(0|or[a>>1])+(0|br(0|or[a+4>>1],-10))|0)+(58*(0|or[a+6>>1])|0)+(17*(0|or[a+8>>1])|0)+(0|br(0|or[a+10>>1],-5))|0,or[s>>1]=o+(0|or[a+12>>1])>>h,(0|(c=c+1|0))!=(0|n);)s=s+(e<<1)|0;k=k+1|0}while((0|k)!=(0|f));return;case 2:if(!(0<(0|f)&0<(0|n)))return;k=0;do{for(s=A+(k<<1)|(c=0),d=t+((0|br(k,b))<<1)|0;a=(or[(d=(a=d)+2|0)>>1]<<2)-(0|or[a>>1])+(40*((0|or[a+8>>1])+(0|or[a+6>>1])|0)|0)+(or[a+12>>1]<<2)-(0|or[a+14>>1])+(0|br((0|or[a+10>>1])+(0|or[a+4>>1])|0,-11))>>h&65535,or[s>>1]=a,(0|(c=c+1|0))!=(0|n);)s=s+(e<<1)|0;k=k+1|0}while((0|k)!=(0|f));return;case 3:if(!(0<(0|f)&0<(0|n)))return;k=0;do{for(s=A+(k<<1)|(c=0),d=t+((0|br(k,b))<<1)|0;o=(o=(0|br(0|or[(d=(a=d)+2|0)>>1],-5))+(0|or[a>>1])|0)+(17*(0|or[a+4>>1])|0)+(58*(0|or[a+6>>1])|0)+(0|br(0|or[a+8>>1],-10))|0,or[s>>1]=o+(or[a+10>>1]<<2)-(0|or[a+12>>1])>>h,(0|(c=c+1|0))!=(0|n);)s=s+(e<<1)|0;k=k+1|0}while((0|k)!=(0|f));return;default:return}}function Lo(A,e){var r,i=0,f=0;if(e|=0)return 0|(f=1);if(e=0|ar[(A|=0)+12>>2],r=i=0|ar[A+8>>2],(f=e-i>>2)>>>0<(0|ar[A>>2])>>>0)return 0|(f=1);if((0|e)==(0|i))return(f=0)|f;for(e=0;;){if(A=0|ar[r+(e<<2)>>2],0==(0|tr[A+100>>0])&&0==(0|ar[A+96>>2])){e=1,i=7;break}if(f>>>0<=(e=e+1|0)>>>0){e=0,i=7;break}}return 7==(0|i)?0|e:0}function Ko(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f=0,n=0,t=0,o=0,a=0;A:do{if(i){if(n=A+8|0,(0|(t=0|ar[A+12>>2]))==(0|(A=o=0|ar[n>>2])))return 0|(r=-1);for(f=t-o>>2,i=0;a=0|ar[A+(i<<2)>>2],!((0|ar[a+92>>2])==(0|e)&&(0|ar[a+104>>2])>(0|r)&&2==(0|ar[a+96>>2]));)if(f>>>0<=(i=i+1|0)>>>0){f=t,i=o;break A}return 0|i}a=0|ar[(n=A+8|0)>>2],f=0|ar[A+12>>2],A=i=a}while(0);if((0|f)==(0|i))return 0|(a=-1);for(i=0;;){if(a=0|ar[A+(i<<2)>>2],(0|ar[a+92>>2])==(0|e)&&(0|ar[a+104>>2])>(0|r)&&0|ar[a+96>>2]){A=14;break}if((i=i+1|0)>>>0>=f-(0|ar[n>>2])>>2>>>0){i=-1,A=14;break}}return 14==(0|A)?0|i:0}function qo(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f=0,n=0,t=0,o=0,a=0;A:do{if(i){if(n=A+8|0,(0|(t=0|ar[A+12>>2]))==(0|(A=o=0|ar[n>>2])))return 0|(r=-1);for(f=t-o>>2,i=0;a=0|ar[A+(i<<2)>>2],!((0|ar[a+88>>2])==(0|e)&&(0|ar[a+104>>2])>(0|r)&&2==(0|ar[a+96>>2]));)if(f>>>0<=(i=i+1|0)>>>0){f=t,i=o;break A}return 0|i}a=0|ar[(n=A+8|0)>>2],f=0|ar[A+12>>2],A=i=a}while(0);if((0|f)==(0|i))return 0|(a=-1);for(i=0;;){if(a=0|ar[A+(i<<2)>>2],(0|ar[a+88>>2])==(0|e)&&(0|ar[a+104>>2])>(0|r)&&0|ar[a+96>>2]){A=14;break}if((i=i+1|0)>>>0>=f-(0|ar[n>>2])>>2>>>0){i=-1,A=14;break}}return 14==(0|A)?0|i:0}function $o(A,e){e|=0;var r,i=0;if((0|(i=0|ar[(A|=0)+12>>2]))==(0|(r=A=0|ar[A+8>>2])))return 0|(e=-1);for(i=i-A>>2,A=0;;){if((0|ar[ar[r+(A<<2)>>2]>>2])==(0|e)){i=5;break}if(i>>>0<=(A=A+1|0)>>>0){A=-1,i=5;break}}return 5==(0|i)?0|A:0}function Aa(A){var e,r,i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0;if((0|(i=0|ar[(r=(A|=0)+20|0)>>2]))==(0|(n=0|ar[(f=A+24|0)>>2]))&&sr(36524,36554,147,36561),1<(l=n-i>>2)>>>0)for(t=(n=0)|ar[92+(0|ar[i>>2])>>2],o=1;;){if(n=(c=(0|(a=0|ar[92+(0|ar[i+(o<<2)>>2])>>2]))<(0|t))?o:n,l>>>0<=(o=o+1|0)>>>0){l=n;break}t=c?a:t}else l=0;n=0|ar[(c=A+36|0)>>2],u=(0|ar[A+40>>2])-n|0,a=0|ar[(o=A+48|0)>>2],(0|(0==(0|u)?0:(u<<8)-1|0))==((t=0|ar[(e=A+52|0)>>2])+a|0)&&(function(A){var e=0,r=0,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(ur=(s=ur)+32|0,c=s+4|0,a=s,1023<(r=0|ar[(e=16+(A|=0)|0)>>2])>>>0){ar[e>>2]=r+-1024,c=0|ar[(l=A+4|0)>>2],b=0|ar[c>>2],c=c+4|0,ar[l>>2]=c,o=0|ar[(u=A+8|0)>>2],t=0|ar[(a=A+12|0)>>2],e=t,n=o;do{if((0|o)==(0|t)){if(r=0|ar[A>>2],(i=r)>>>0<c>>>0){f=(e=c)+((i=(1+(e-i>>2)|0)/-2|0)<<2)|0,e=(r=(e=n-e|0)>>2)?(wb(0|f,0|c,0|e),0|ar[l>>2]):c,A=f+(r<<2)|0,ar[u>>2]=A,ar[l>>2]=e+(i<<2),e=A;break}if(1073741823<(e=0==(0|(e=e-i>>1))?1:e)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),f=0|hu(e<<2),t=i=(n=f)+(e>>>2<<2)|0,f=f+(e<<2)|0,(0|c)==(0|o))e=t;else{for(e=t,r=c;ar[i>>2]=ar[r>>2],e=i=e+4|0,(0|(r=r+4|0))!=(0|o););r=0|ar[A>>2]}ar[A>>2]=n,ar[l>>2]=t,ar[u>>2]=e,ar[a>>2]=f,r&&(vu(r),e=0|ar[u>>2])}else e=o}while(0);return ar[e>>2]=b,ar[u>>2]=4+(0|ar[u>>2]),ur=s}if(e=0|ar[(b=A+8|0)>>2],f=e-(0|ar[(u=A+4|0)>>2])|0,r=0|ar[(l=A+12|0)>>2],i=r-(0|ar[A>>2])|0,i>>>0<=f>>>0){for(e=0==(0|(e=i>>1))?1:e,ar[c+12>>2]=0,ar[c+16>>2]=A+12,1073741823<e>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),i=0|hu(e<<2),ar[c>>2]=i,t=i+(f>>2<<2)|0,ar[(o=c+8|0)>>2]=t,ar[(n=c+4|0)>>2]=t,ar[(t=c+12|0)>>2]=i+(e<<2),f=0|hu(4096),ar[a>>2]=f,function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;r=0|ar[(b=8+(A|=0)|0)>>2],u=0|ar[(i=A+12|0)>>2],t=u,a=r;do{if((0|r)==(0|u)){if(l=0|ar[(u=A+4|0)>>2],n=0|ar[A>>2],(f=n)>>>0<l>>>0){o=(n=l)+((t=(1+(n-f>>2)|0)/-2|0)<<2)|0,f=(n=(f=a-n|0)>>2)?(wb(0|o,0|l,0|f),0|ar[u>>2]):l,l=o+(n<<2)|0,ar[b>>2]=l,ar[u>>2]=f+(t<<2),f=l;break}if(1073741823<(f=0==(0|(f=t-f>>1))?1:f)>>>0&&(Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)),o=0|hu(f<<2),c=t=(a=o)+(f>>>2<<2)|0,o=o+(f<<2)|0,(0|l)==(0|r))f=c;else{for(f=c,n=l;ar[t>>2]=ar[n>>2],f=t=f+4|0,(0|(n=n+4|0))!=(0|r););n=0|ar[A>>2]}ar[A>>2]=a,ar[u>>2]=c,ar[b>>2]=f,ar[i>>2]=o,n&&(vu(n),f=0|ar[b>>2])}else f=r}while(0);ar[f>>2]=ar[e>>2],ar[b>>2]=4+(0|ar[b>>2])}(c,a),f=0|ar[b>>2];e=0|ar[u>>2],(0|f)!=(0|e);)ea(c,a=f+-4|0),f=a;return r=e,i=0|ar[A>>2],ar[A>>2]=ar[c>>2],ar[c>>2]=i,ar[u>>2]=ar[n>>2],ar[n>>2]=r,e=0|ar[b>>2],ar[b>>2]=ar[o>>2],ar[o>>2]=e,A=0|ar[l>>2],ar[l>>2]=ar[t>>2],ar[t>>2]=A,(0|e)!=(0|f)&&(ar[o>>2]=e+(~((e+-4-r|0)>>>2)<<2)),0|i&&vu(i),ur=s}if((0|r)!=(0|e))return b=0|hu(4096),ar[c>>2]=b,function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;r=0|ar[(b=8+(A|=0)|0)>>2],u=0|ar[(i=A+12|0)>>2],t=u,a=r;do{if((0|r)==(0|u)){if(l=0|ar[(u=A+4|0)>>2],n=0|ar[A>>2],(f=n)>>>0<l>>>0){o=(n=l)+((t=(1+(n-f>>2)|0)/-2|0)<<2)|0,f=(n=(f=a-n|0)>>2)?(wb(0|o,0|l,0|f),0|ar[u>>2]):l,l=o+(n<<2)|0,ar[b>>2]=l,ar[u>>2]=f+(t<<2),f=l;break}if(1073741823<(f=0==(0|(f=t-f>>1))?1:f)>>>0&&(Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)),o=0|hu(f<<2),c=t=(a=o)+(f>>>2<<2)|0,o=o+(f<<2)|0,(0|l)==(0|r))f=c;else{for(f=c,n=l;ar[t>>2]=ar[n>>2],f=t=f+4|0,(0|(n=n+4|0))!=(0|r););n=0|ar[A>>2]}ar[A>>2]=a,ar[u>>2]=c,ar[b>>2]=f,ar[i>>2]=o,n&&(vu(n),f=0|ar[b>>2])}else f=r}while(0);ar[f>>2]=ar[e>>2],ar[b>>2]=4+(0|ar[b>>2])}(A,c),ur=s;a=0|hu(4096),ar[c>>2]=a,function(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;r=0|ar[(s=4+(A|=0)|0)>>2],b=0|ar[A>>2],n=b;do{if((0|r)==(0|b)){if(f=0|ar[(b=A+8|0)>>2],l=0|ar[(u=A+12|0)>>2],f>>>0<(i=l)>>>0){t=(i=(n=f)+((o=(1+(i-n>>2)|0)/2|0)<<2)|0)+(0-(u=(n=n-r|0)>>2)<<2)|0,u&&(wb(0|t,0|r,0|n),i=t,f=0|ar[b>>2]),ar[s>>2]=i,ar[b>>2]=f+(o<<2);break}if(1073741823<(n=0==(0|(n=i-n>>1))?1:n)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),a=0|hu(n<<2),l=i=(c=a)+((n+3|0)>>>2<<2)|0,a=a+(n<<2)|0,(0|r)==(0|f))n=l,f=r;else{for(o=i,n=l,t=r;ar[o>>2]=ar[t>>2],n=o=n+4|0,(0|(t=t+4|0))!=(0|f););f=0|ar[A>>2]}ar[A>>2]=c,ar[s>>2]=l,ar[b>>2]=n,ar[u>>2]=a,f&&(vu(f),i=0|ar[s>>2])}else i=r}while(0);ar[i+-4>>2]=ar[e>>2],ar[s>>2]=(0|ar[s>>2])-4}(A,c),a=0|ar[u>>2],c=0|ar[a>>2],a=a+4|0,ar[u>>2]=a,o=0|ar[b>>2],t=0|ar[l>>2],e=t,n=o;do{if((0|o)==(0|t)){if(r=0|ar[A>>2],(i=r)>>>0<a>>>0){f=(e=a)+((i=(1+(e-i>>2)|0)/-2|0)<<2)|0,e=(r=(e=n-e|0)>>2)?(wb(0|f,0|a,0|e),0|ar[u>>2]):a,A=f+(r<<2)|0,ar[b>>2]=A,ar[u>>2]=e+(i<<2),e=A;break}if(1073741823<(e=0==(0|(e=e-i>>1))?1:e)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),f=0|hu(e<<2),t=i=(n=f)+(e>>>2<<2)|0,f=f+(e<<2)|0,(0|a)==(0|o))e=t;else{for(e=t,r=a;ar[i>>2]=ar[r>>2],e=i=e+4|0,(0|(r=r+4|0))!=(0|o););r=0|ar[A>>2]}ar[A>>2]=n,ar[u>>2]=t,ar[b>>2]=e,ar[l>>2]=f,r&&(vu(r),e=0|ar[b>>2])}else e=o}while(0);ar[e>>2]=c,ar[b>>2]=4+(0|ar[b>>2]),ur=s}(A+32|0),a=0|ar[o>>2],t=0|ar[e>>2],n=0|ar[c>>2]),ar[(0|ar[n+((u=t+a|0)>>>10<<2)>>2])+((1023&u)<<2)>>2]=ar[i+(l<<2)>>2],ar[e>>2]=t+1,ar[(0|ar[r>>2])+(l<<2)>>2]=ar[(0|ar[f>>2])-4>>2],ar[f>>2]=(0|ar[f>>2])-4}function ea(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;r=0|ar[(s=(A|=0)+4|0)>>2],n=b=0|ar[A>>2];do{if((0|r)==(0|b)){if((f=0|ar[(b=A+8|0)>>2])>>>0<(i=l=0|ar[(u=A+12|0)>>2])>>>0){t=(i=(n=f)+((o=(1+(i-n>>2)|0)/2|0)<<2)|0)+(0-(u=(n=n-r|0)>>2)<<2)|0,u&&(wb(0|t,0|r,0|n),i=t,f=0|ar[b>>2]),ar[s>>2]=i,ar[b>>2]=f+(o<<2);break}if(1073741823<(n=0==(0|(n=i-n>>1))?1:n)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),l=i=(c=a=0|hu(n<<2))+((n+3|0)>>>2<<2)|0,a=a+(n<<2)|0,(0|r)==(0|f))n=l,f=r;else{for(o=i,n=l,t=r;ar[o>>2]=ar[t>>2],n=o=n+4|0,(0|(t=t+4|0))!=(0|f););f=0|ar[A>>2]}ar[A>>2]=c,ar[s>>2]=l,ar[b>>2]=n,ar[u>>2]=a,f&&(vu(f),i=0|ar[s>>2])}else i=r}while(0);ar[i+-4>>2]=ar[e>>2],ar[s>>2]=(0|ar[s>>2])-4}function ra(A){var e,r=0;if(r=(A|=0)+24|0,(0|ar[(e=A+20|0)>>2])==(0|ar[r>>2]))return(r=0)|r;for(;Aa(A),(0|ar[e>>2])!=(0|ar[r>>2]););return 0|(A=1)}function ia(A,e,r,i,f,n,t){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0;var o,a,c,l,u,b=0,s=0,d=0,k=0,h=0,w=0,v=0;ur=(u=ur)+16|0,a=u,l=(A|=0)+8|0,s=0|ar[(c=A+12|0)>>2],o=k=0|ar[l>>2],b=s;A:do{if((0|s)==(0|k))d=-1,k=s;else{for(w=s-k>>2,d=0;h=0|ar[o+(d<<2)>>2],0!=(0|tr[h+100>>0])||0!=(0|ar[h+96>>2]);)if(w>>>0<=(d=d+1|0)>>>0){d=-1;break A}oa(h),b=0|ar[c>>2],k=0|ar[l>>2],s=b}}while(0);return(0|d)==((w=s-k>>2)+-1|0)||w>>>0<=(0|ar[A+4>>2])>>>0||(v=0|ar[b+-4>>2],0!=(0|tr[v+100>>0]))||0!=(0|ar[v+96>>2])?b=s:((s=0|ar[b+-4>>2])&&(aa(s),vu(s),b=0|ar[c>>2]),b=b+-4|0,ar[c>>2]=b),-1==(0|d)&&(d=b-(0|ar[l>>2])>>2,na(b=0|hu(10624)),ar[a>>2]=b,(s=0|ar[c>>2])>>>0<(0|ar[A+16>>2])>>>0?(ar[s>>2]=b,ar[c>>2]=4+(0|ar[c>>2])):function(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=4+(A|=0)|0,n=0|ar[A>>2],t=(0|ar[f>>2])-n|0,1073741823<(o=1+(i=t>>2)|0)>>>0&&zl();c=(0|ar[(l=A+8|0)>>2])-n|0,a=c>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t);if(ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),!n)return;vu(n)}(l,a)),b=0|ar[(0|ar[l>>2])+(d<<2)>>2],(s=0|ar[e+476>>2])>>>0<4?(ta(b,0|ar[e+484>>2],0|ar[e+488>>2],s,e,1,r,0,i,f,n,t),tr[b+10516>>0]=0,ur=u,0|d):(sr(44456,36554,259,36599),0)}function fa(A){var e,r;e=(A|=0)+36|0,r=A+48|0,ar[(A=A+52|0)>>2]=(0|ar[A>>2])-1,A=1+(0|ar[r>>2])|0,(ar[r>>2]=A)>>>0<=2047||(vu(0|ar[ar[e>>2]>>2]),ar[e>>2]=4+(0|ar[e>>2]),ar[r>>2]=(0|ar[r>>2])-1024)}function na(A){var e,r,i=0;ar[(A|=0)+48>>2]=0,ar[A+52>>2]=0,ar[A+56>>2]=0,ar[A+700>>2]=0,ar[A+704>>2]=0,ar[A+708>>2]=0,ar[(i=A+736|0)>>2]=0,ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i+12>>2]=0,ar[i+16>>2]=0,$a(A+764|(ar[i+20>>2]=0)),Ia(A+5932|0),tr[A+10518>>0]=0,tr[A+10519>>0]=0,vb(A+10340|(tr[A+10520>>0]=0),0,140),ar[A>>2]=-1,ar[A+104>>2]=0,ar[A+10332>>2]=0,ar[A+10336>>2]=0,ar[A+10512>>2]=0,ar[A+4>>2]=0,ar[A+60>>2]=0,ar[A+8>>2]=0,ar[A+64>>2]=0,ar[A+12>>2]=0,ar[A+68>>2]=0,ar[A+28>>2]=0,i=A+10480|(ar[A+24>>2]=0),ar[A+10524>>2]=0,ar[i>>2]=0,ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i+12>>2]=0,ar[i+16>>2]=0,ar[i+20>>2]=0,tr[A+10516>>0]=2,ar[A+88>>2]=-1,ar[A+92>>2]=-1,ar[A+96>>2]=0,tr[A+100>>0]=0,ar[(i=A+10528|0)>>2]=0,ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i+12>>2]=0,ar[i+16>>2]=0,e=A+10548|0,pA(0|(e|=0),0),r=A+10576|0,dA(0|(r|=0),0)}function ta(A,e,r,i,f,n,t,o,a,c,l,u){A|=0,e|=0,r|=0,i|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0;var b,s,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0;switch(ur=(s=ur)+48|0,b=s,(f|=0)||sr(36749,36663,240,36753),hb(0|(h=A+764|0),0|f,4717),(0|h)!=(0|f)&&Ke(A+5484|0,0|ar[f+4720>>2],0|ar[f+4724>>2]),hb(A+5496|0,f+4732|0,436),oa(A),k=0|ar[14326],ar[14326]=k+1,ar[A>>2]=k,ar[A+104>>2]=2147483647,ar[A+10332>>2]=t,ar[A+10336>>2]=o,ar[A+20>>2]=i,ar[A+24>>2]=e,ar[A+28>>2]=r,ar[(k=A+32|0)>>2]=e,ar[(h=A+36|0)>>2]=r,ar[A+10488>>2]=l,ar[(l=A+10480|0)>>2]=a,ar[l+4>>2]=c,0|i){case 3:case 0:d=m=1;break;case 1:d=2,p=8;break;case 2:d=1,p=8;break;default:sr(44456,36663,276,36753)}switch(8==(0|p)&&(m=2),0|i){case 1:w=(e+1|0)/(ar[b>>2]=2)|0,ar[k>>2]=w,v=(r+1|0)/2|0,ar[h>>2]=v;break;case 2:ar[b>>2]=3,w=(e+1|0)/2|0,ar[k>>2]=w,v=r;break;case 3:ar[b>>2]=4,w=e,v=r;break;case 0:ar[b>>2]=1,ar[k>>2]=0,v=w=ar[h>>2]=0;break;default:sr(55739,36663,302,36753)}ar[b+4>>2]=e,ar[b+8>>2]=r,ar[b+12>>2]=16,i=0|ar[f+496>>2],a=0|ar[f+500>>2],k=0|ar[f+504>>2],h=0|ar[f+508>>2],e=e-(0|br(y=a+i|0,m))|0,ar[A+72>>2]=e,l=r-(0|br(c=h+k|0,d))|0,ar[A+76>>2]=l,ar[A+80>>2]=w-y,ar[A+84>>2]=v-c,c=0|br(i,m),ar[b+16>>2]=c,a=0|br(a,m),ar[b+20>>2]=a,a=0|br(k,d),ar[b+24>>2]=a,m=0|br(h,d),ar[b+28>>2]=m,ar[b+32>>2]=e,ar[b+36>>2]=l,tr[A+16>>0]=8<(0|ar[f+4996>>2])&1,l=8<(0|ar[f+5004>>2])&1,tr[A+17>>0]=l,tr[A+18>>0]=l,d=(l=0==(0|t))?0:0|ar[t+544>>2];do{if(o){if(d=0|ar[o+3060>>2],u){if(y=0|ar[o+3064>>2],l=A+10504|0,ar[A+10512>>2]=y){ar[l>>2]=0,ar[A+10508>>2]=0;break}Z=0|ar[(p=7736)>>2],p=0|ar[p+4>>2],ar[(g=l)>>2]=Z,ar[g+4>>2]=p,g=d,p=25;break}p=24}else p=l|1^u?24:(Z=0|ar[(p=t+536|0)>>2],p=0|ar[p+4>>2],ar[(g=A+10504|0)>>2]=Z,ar[g+4>>2]=p,g=d,25)}while(0);if(24==(0|p)&&(Z=0|ar[(y=7736)>>2],y=0|ar[y+4>>2],ar[(g=A+10504|0)>>2]=Z,ar[g+4>>2]=y,g=d,p=25),25==(0|p)&&0|Z&&(y=0==(0|Pb[7&Z](t,b,A,g)),t=(0|ar[A+4>>2])+c+(0|br(0|ar[A+40>>2],a))|0,ar[A+60>>2]=t,t=0|br(0|ar[A+44>>2],k),ar[A+64>>2]=(0|ar[A+8>>2])+i+t,ar[A+68>>2]=(0|ar[A+12>>2])+i+t,y))return ur=s,0|(y=7);do{if(n){i=0|ar[(e=f+5112|0)>>2],k=0|ar[(w=f+5116|0)>>2],h=0|ar[(v=f+5108|0)>>2],a=0|br(k,i),c=A+10404|0,d=0|ar[(l=A+10400|0)>>2];do{if((0|a)!=(0|ar[c>>2])){if(Bc(d),d=0|yc(a),ar[l>>2]=d){ar[c>>2]=a,p=32;break}r=ar[c>>2]=0;break}p=32}while(0);32==(0|p)&&(ar[A+10412>>2]=i,ar[A+10416>>2]=k,ar[A+10408>>2]=h,r=0!=(0|d)),h=0|ar[e>>2],k=0|ar[w>>2],i=0|ar[v>>2],a=0|br(k,h),c=A+10424|0,d=0|ar[(l=A+10420|0)>>2];do{if((0|a)!=(0|ar[c>>2])){if(Bc(d),d=0|yc(a),ar[l>>2]=d){ar[c>>2]=a,p=37;break}d=ar[c>>2]=0;break}p=37}while(0);37==(0|p)&&(ar[A+10432>>2]=h,ar[A+10436>>2]=k,ar[A+10428>>2]=i,d=0!=(0|d)),e=r&d,l=A+10360|0,i=0|ar[(r=f+5052|0)>>2],k=0|ar[(v=f+5060|0)>>2],h=0|ar[(w=f+5036|0)>>2],a=0|br(k,i),c=A+10364|0;do{if((0|a)!=(0|ar[c>>2])){if(Bc(0|ar[l>>2]),d=0|yc(3*a|0),ar[l>>2]=d){ar[c>>2]=a,p=43;break}d=ar[c>>2]=0;break}d=0|ar[l>>2],p=43}while(0);43==(0|p)&&(ar[A+10372>>2]=i,ar[A+10376>>2]=k,ar[A+10368>>2]=h,d=0!=(0|d)),h=e&d,i=(0|ar[w>>2])-2|0,k=ar[r>>2]<<i,i=ar[v>>2]<<i,l=A+10380|0,a=0|br(i,k),c=A+10384|0;do{if((0|a)!=(0|ar[c>>2])){if(Bc(0|ar[l>>2]),d=0|yc(12*a|0),ar[l>>2]=d){ar[c>>2]=a,p=49;break}d=ar[c>>2]=0;break}d=0|ar[l>>2],p=49}while(0);49==(0|p)&&(ar[A+10392>>2]=k,ar[A+10396>>2]=i,ar[A+10388>>2]=2,d=0!=(0|d)),e=h&d,i=0|ar[f+5088>>2],k=0|ar[f+5092>>2],h=0|ar[f+5100>>2],a=0|br(k,i),c=A+10444|0,d=0|ar[(l=A+10440|0)>>2];do{if((0|a)!=(0|ar[c>>2])){if(Bc(d),d=0|yc(a),ar[l>>2]=d){ar[c>>2]=a,p=54;break}d=ar[c>>2]=0;break}p=54}while(0);54==(0|p)&&(ar[A+10452>>2]=i,ar[A+10456>>2]=k,ar[A+10448>>2]=h,d=0!=(0|d)),h=e&d,i=(3+(0|ar[f+484>>2])|0)/4|0,k=(3+(0|ar[f+488>>2])|0)/4|0,a=0|br(k,i),c=A+10464|0,d=0|ar[(l=A+10460|0)>>2];do{if((0|a)!=(0|ar[c>>2])){if(Bc(d),d=0|yc(a),ar[l>>2]=d){ar[c>>2]=a,p=59;break}d=ar[c>>2]=0;break}p=59}while(0);if(59==(0|p)&&(ar[A+10472>>2]=i,ar[A+10476>>2]=k,ar[A+10468>>2]=2,d=0!=(0|d)),r=h&d,h=A+10340|0,(0|(d=0|ar[(e=A+10344|0)>>2]))==(0|ar[f+5072>>2])){if(r)break;return ur=s,0|(d=7)}if(a=0|ar[(w=A+10524|0)>>2]){if(0|(d=0|ar[(l=a+-4|0)>>2]))for(d=a+(80*d|0)|0;Jn(d=d+-80|0),(0|d)!=(0|a););mu(l),d=0|ar[e>>2]}i=0|ar[f+5056>>2],k=0|ar[f+5064>>2],c=0|ar[f+5040>>2],l=0|br(k,i);do{if((0|l)!=(0|d)){if(Bc(0|ar[h>>2]),d=0|yc(24*l|0),ar[h>>2]=d){ar[e>>2]=l,a=d,p=71;break}l=d=ar[e>>2]=0;break}a=0|ar[h>>2],l=d,p=71}while(0);if(71==(0|p)&&(ar[A+10352>>2]=i,ar[A+10356>>2]=k,ar[A+10348>>2]=c,d=0!=(0|a)),a=r&d,c=0|wu(53687091<l>>>0|4294967291<(c=80*l|0)>>>0?-1:c+4|0),ar[c>>2]=l,c=c+4|0,0|l)for(d=c+(80*l|0)|0,l=c;Dn(l),(0|(l=l+80|0))!=(0|d););if(ar[w>>2]=c,!a)return ur=s,0|(y=7)}}while(0);return ur=s,(y=0)|y}function oa(A){var e,r=0,i=0,f=0,n=0,t=0,o=0;if(0|ar[(f=(A|=0)+4|0)>>2]&&((r=0|ar[A+10512>>2])?(o=0|ar[A+10336>>2],ns[127&r](o,A,0|ar[o+3060>>2])):(i=(r=0|ar[A+10332>>2])?0|ar[r+544>>2]:0,ns[127&ar[A+10508>>2]](r,A,i)),ar[f>>2]=0,ar[A+60>>2]=0,ar[A+8>>2]=0,ar[A+64>>2]=0,ar[A+12>>2]=0,ar[A+68>>2]=0),e=A+48|0,(0|(r=i=0|ar[(o=A+52|0)>>2]))!=(0|(f=A=0|ar[e>>2]))){for(t=0;(n=0|ar[f+(t<<2)>>2])&&(0|(r=0|ar[n+1344>>2])&&((0|(f=0|ar[(i=n+1348|0)>>2]))!=(0|r)&&(ar[i>>2]=f+(~((f+-4-r|0)>>>2)<<2)),vu(r)),kt(n+1332|0),0|(r=0|ar[n+776>>2])&&((0|(f=0|ar[(i=n+780|0)>>2]))!=(0|r)&&(ar[i>>2]=f+(~((f+-4-r|0)>>>2)<<2)),vu(r)),vu(n),r=0|ar[o>>2],A=0|ar[e>>2],i=r),(t=t+1|0)>>>0<i-(f=A)>>2>>>0;);i=A}(0|r)!=(0|f)&&(ar[o>>2]=r+(~((r+-4-i|0)>>>2)<<2))}function aa(A){var e,r,i,f=0,n=0,t=0,o=0;if(oa(A|=0),0|(n=0|ar[A+10524>>2])){if(0|(f=0|ar[(t=n+-4|0)>>2]))for(f=n+(80*f|0)|0;Jn(f=f+-80|0),(0|f)!=(0|n););mu(t)}if(r=A+10576|0,sA(0|(r|=0)),i=A+10548|0,ZA(0|(i|=0)),Bc(0|ar[A+10460>>2]),Bc(0|ar[A+10440>>2]),Bc(0|ar[A+10420>>2]),Bc(0|ar[A+10400>>2]),Bc(0|ar[A+10380>>2]),Bc(0|ar[A+10360>>2]),Bc(0|ar[A+10340>>2]),Ga(A+5932|0),Ac(A+764|0),0|(f=0|ar[A+748>>2])&&((0|ar[(n=A+752|0)>>2])!=(0|f)&&(ar[n>>2]=f),vu(f)),0|(f=0|ar[A+736>>2])&&((0|(t=0|ar[(n=A+740|0)>>2]))!=(0|f)&&(ar[n>>2]=t+(~((t+-2-f|0)>>>1)<<1)),vu(f)),0|(f=0|ar[(e=A+700|0)>>2])){if((0|(n=0|ar[(o=A+704|0)>>2]))!=(0|f)){for(;n=n+-12|0,ar[o>>2]=n,(t=0|ar[n>>2])&&(vu(t),n=0|ar[o>>2]),(0|n)!=(0|f););f=0|ar[e>>2]}vu(f)}(t=0|ar[A+48>>2])&&((0|(n=0|ar[(f=A+52|0)>>2]))!=(0|t)&&(ar[f>>2]=n+(~((n+-4-t|0)>>>2)<<2)),vu(t))}function ca(A,e){e|=0;var r,i;Yn(r=(A|=0)+10548|0),ar[(i=A+10528|0)>>2]=(0|ar[i>>2])+e,ar[(A=A+10544|0)>>2]=(0|ar[A>>2])+e,Qn(r)}function la(A,e){e|=0;var r;Yn(e=(A|=0)+10548|0),ar[(r=A+10528|0)>>2]=(0|ar[r>>2])-1,ar[(A=A+10532|0)>>2]=1+(0|ar[A>>2]),Qn(e)}function ua(A,e){e|=0;var r,i,f,n=0;(Yn(e=(A|=0)+10548|0),i=0|ar[(n=A+10532|0)>>2],ar[n>>2]=i-1,r=1+(0|ar[(n=A+10540|0)>>2])|0,ar[n>>2]=r,(0|i)<=0&&sr(36809,36663,642,36830),(0|r)==(0|ar[A+10544>>2]))?(f=A+10576|0,mb(f|=0),Qn(e)):Qn(e)}function ba(A,e,r,i,f){r|=0,i|=0,f|=0,function(A,e,r,i){A|=0,r|=0,i|=0;var f,n;if(!(e|=0))return;if((0|function(A){return 0|ar[(A|=0)>>2]}(r=(0|ar[A+10524>>2])+(80*r|0)|0))>=(0|i))return;Yn(f=A+10548|0),ar[(n=A+10532|0)>>2]=(0|ar[n>>2])-1,ar[(A=A+10536|0)>>2]=1+(0|ar[A>>2]),Qn(f),ar[(e=e+4|0)>>2]=2,Mn(r,i),ar[e>>2]=1,Yn(f),ar[A>>2]=(0|ar[A>>2])-1,ar[n>>2]=1+(0|ar[n>>2]),Qn(f)}(A|=0,e|=0,(0|br(0|ar[A+5820>>2],i))+r|0,f)}function sa(A){var e,r,i;if(Yn(e=(A|=0)+10548|0),i=A+10544|0,(0|ar[(r=A+10540|0)>>2])!=(0|ar[i>>2])){for(A=A+10576|0;f=A,n=e,hA(0|(f|=0),0|(n|=0)),(0|ar[r>>2])!=(0|ar[i>>2]););var f,n;Qn(e)}else Qn(e)}function da(A,e,r,i,f){A|=0,e|=0,r|=0;var n=0,t=0,o=0,a=0;return((f|=0)|(i|=0)|0)<0||(0|ar[A+1248>>2])<=(0|i)||(0|ar[A+1252>>2])<=(0|f)?(A=0)|A:(t=0|ar[A+5864>>2],a=0|ar[A+5852>>2],n=(0|br(f>>t,a))+(i>>t)|0,t=(o=0|ar[A+10320>>2])+((0|br(r>>t,a))+(e>>t)<<2)|0,(0|ar[o+(n<<2)>>2])>(0|ar[t>>2])?(a=0)|a:(t=e>>(a=0|ar[A+5804>>2]),n=r>>a,r=i>>a,e=f>>a,a=0|ar[A+10352>>2],o=(0|br(a,n))+t|0,a=(f=0|ar[A+10340>>2])+(24*((0|br(a,e))+r|0)|0)|0,(0|or[f+(24*o|0)>>1])!=(0|or[a>>1])?(a=0)|a:(a=0|ar[A+5820>>2],o=(0|br(a,n))+t|0,a=(A=0|ar[A+10308>>2])+((0|br(a,e))+r<<2)|0,0|(a=(0|ar[A+(o<<2)>>2])==(0|ar[a>>2])))))}function ka(A,e,r,i,f,n,t,o,a,c,l){if(A|=0,f|=0,n|=0,t|=0,o|=0,a|=0,(0|(l|=0))<((i|=0)+(r|=0)|0)&(1^((i+(e|=0)|0)<=(0|(c|=0))|(0|c)<(0|e)|(0|l)<(0|r)))){if((t<<1|0)==(0|i)&&!((t+e|0)<=(0|c)|1!=(0|a)|(o<<1|0)!=(0|i)|(0|l)<(o+r|0)))return 0}else{if((l|c|0)<0)return 0;if((0|ar[A+1248>>2])<=(0|c))return 0;if((0|ar[A+1252>>2])<=(0|l))return 0;if(a=0|ar[A+5864>>2],i=0|ar[A+5852>>2],o=(0|br(l>>a,i))+(c>>a)|0,a=(t=0|ar[A+10320>>2])+((0|br(n>>a,i))+(f>>a)<<2)|0,(0|ar[t+(o<<2)>>2])>(0|ar[a>>2]))return 0;if(f>>=i=0|ar[A+5804>>2],e=n>>i,r=c>>i,i=l>>i,n=0|ar[A+10352>>2],a=(0|br(n,e))+f|0,n=(o=0|ar[A+10340>>2])+(24*((0|br(n,i))+r|0)|0)|0,(0|or[o+(24*a|0)>>1])!=(0|or[n>>1]))return 0;if(n=0|ar[A+5820>>2],a=(0|br(n,e))+f|0,n=(o=0|ar[A+10308>>2])+((0|br(n,i))+r<<2)|0,(0|ar[o+(a<<2)>>2])!=(0|ar[n>>2]))return 0}return i=c>>(e=0|ar[A+10368>>2]),e=l>>e,(0|i)<=-1&&sr(48482,36846,118,48539),(0|(r=0|ar[A+10372>>2]))<=(0|i)&&sr(48482,36846,118,48539),(0|e)<=-1&&sr(48543,36846,119,48539),(0|e)<(0|ar[A+10376>>2])?(A=(0|ar[A+10360>>2])+(3*((0|br(r,e))+i|0)|0)|0,0!=(768&(cr[A>>0]|cr[A+1>>0]<<8))|0):(sr(48543,36846,119,48539),0)}function ha(A){return((A|=0)+-19&255)<2|0}function wa(A){return((A|=0)+-16&255)<3|0}function va(A){return(1|(A|=0))<<24>>24==9|0}function ma(A){return(-8&(A|=0))<<24>>24==16|0}function ga(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=(A|=0)+4|0,n=0|ar[A>>2],1073741823<(o=1+(i=(t=(0|ar[f>>2])-n|0)>>2)|0)>>>0&&zl(),a=(c=(0|ar[(l=A+8|0)>>2])-n|0)>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t),ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),n&&vu(n)}function Za(A,e,r){e|=0,r|=0;var i,f=0;for(i=f=0|ar[(A|=0)+32>>2],A=(0|ar[A+36>>2])-f>>2;;){if(f=A+-1|0,(0|A)<=0){A=0,f=4;break}if(!(((0|ar[i+(f<<2)>>2])-r|0)>(0|e))){f=4;break}A=f}return 4==(0|f)?0|A:0}function pa(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0,l=0;f=(A|=0)+4|0,n=0|ar[A>>2],1073741823<(o=1+(i=(t=(0|ar[f>>2])-n|0)>>2)|0)>>>0&&zl(),a=(c=(0|ar[(l=A+8|0)>>2])-n|0)>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);ar[(r=c+(i<<2)|0)>>2]=ar[e>>2],o=r+(0-i<<2)|0,0<(0|t)&&hb(0|o,0|n,0|t),ar[A>>2]=o,ar[f>>2]=4+r,ar[l>>2]=c+(a<<2),n&&vu(n)}function ya(A){var e,r,i,f,n=0,t=0,o=0;return(n=0|ar[(e=(A|=0)+32|0)>>2])?(f=0|ar[(i=A+16|0)>>2],o=0|ar[(t=A+28|0)>>2],r=0|ar[(0|ar[f+(o>>>10<<2)>>2])+((1023&o)<<2)>>2],ar[e>>2]=n+-1,n=o+1|0,2047<(ar[t>>2]=n)>>>0&&(vu(0|ar[f>>2]),ar[i>>2]=4+(0|ar[i>>2]),ar[t>>2]=(0|ar[t>>2])-1024),ar[(o=A+36|0)>>2]=(0|ar[o>>2])-(0|ar[24+r>>2]),0|(o=r)):(t=0)|t}function Ba(A,e){A|=0,e|=0;var r,i,f,n,t=0,o=0;if(ur=(n=ur)+16|0,o=ar[(t=n)>>2]=e){if(r=A+40|0,(f=0|ar[(i=A+44|0)>>2])-(0|ar[r>>2])>>2>>>0<16)return(0|f)==(0|ar[A+48>>2])?pa(r,t):(ar[f>>2]=o,ar[i>>2]=4+(0|ar[i>>2])),void(ur=n);Bc(0|ar[e+20>>2]),0|(A=0|ar[e+32>>2])&&((0|(o=0|ar[(t=e+36|0)>>2]))!=(0|A)&&(ar[t>>2]=o+(~((o+-4-A|0)>>>2)<<2)),vu(A)),vu(e),ur=n}else ur=n}function Ea(A){var e=0,r=0,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(ur=(s=ur)+32|0,c=s+4|0,a=s,1023<(r=0|ar[(e=(A|=0)+16|0)>>2])>>>0){ar[e>>2]=r+-1024,c=0|ar[(l=A+4|0)>>2],b=0|ar[c>>2],c=c+4|0,ar[l>>2]=c,o=0|ar[(u=A+8|0)>>2],e=t=0|ar[(a=A+12|0)>>2],n=o;do{if((0|o)==(0|t)){if((i=r=0|ar[A>>2])>>>0<c>>>0){f=(e=c)+((i=(1+(e-i>>2)|0)/-2|0)<<2)|0,e=(r=(e=n-e|0)>>2)?(wb(0|f,0|c,0|e),0|ar[l>>2]):c,A=f+(r<<2)|0,ar[u>>2]=A,ar[l>>2]=e+(i<<2),e=A;break}if(1073741823<(e=0==(0|(e=e-i>>1))?1:e)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),t=i=(n=f=0|hu(e<<2))+(e>>>2<<2)|0,f=f+(e<<2)|0,(0|c)==(0|o))e=t;else{for(e=t,r=c;ar[i>>2]=ar[r>>2],e=i=e+4|0,(0|(r=r+4|0))!=(0|o););r=0|ar[A>>2]}ar[A>>2]=n,ar[l>>2]=t,ar[u>>2]=e,ar[a>>2]=f,r&&(vu(r),e=0|ar[u>>2])}else e=o}while(0);return ar[e>>2]=b,ar[u>>2]=4+(0|ar[u>>2]),void(ur=s)}if(f=(e=0|ar[(b=A+8|0)>>2])-(0|ar[(u=A+4|0)>>2])|0,(i=(r=0|ar[(l=A+12|0)>>2])-(0|ar[A>>2])|0)>>>0<=f>>>0){for(e=0==(0|(e=i>>1))?1:e,ar[c+12>>2]=0,ar[c+16>>2]=A+12,1073741823<e>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),i=0|hu(e<<2),t=(ar[c>>2]=i)+(f>>2<<2)|0,ar[(o=c+8|0)>>2]=t,ar[(n=c+4|0)>>2]=t,ar[(t=c+12|0)>>2]=i+(e<<2),f=0|hu(4096),ar[a>>2]=f,function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;r=0|ar[(b=8+(A|=0)|0)>>2],u=0|ar[(i=A+12|0)>>2],t=u,a=r;do{if((0|r)==(0|u)){if(l=0|ar[(u=A+4|0)>>2],n=0|ar[A>>2],(f=n)>>>0<l>>>0){o=(n=l)+((t=(1+(n-f>>2)|0)/-2|0)<<2)|0,f=(n=(f=a-n|0)>>2)?(wb(0|o,0|l,0|f),0|ar[u>>2]):l,l=o+(n<<2)|0,ar[b>>2]=l,ar[u>>2]=f+(t<<2),f=l;break}if(1073741823<(f=0==(0|(f=t-f>>1))?1:f)>>>0&&(Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)),o=0|hu(f<<2),c=t=(a=o)+(f>>>2<<2)|0,o=o+(f<<2)|0,(0|l)==(0|r))f=c;else{for(f=c,n=l;ar[t>>2]=ar[n>>2],f=t=f+4|0,(0|(n=n+4|0))!=(0|r););n=0|ar[A>>2]}ar[A>>2]=a,ar[u>>2]=c,ar[b>>2]=f,ar[i>>2]=o,n&&(vu(n),f=0|ar[b>>2])}else f=r}while(0);ar[f>>2]=ar[e>>2],ar[b>>2]=4+(0|ar[b>>2])}(c,a),f=0|ar[b>>2];(0|f)!=(0|(e=0|ar[u>>2]));)Xa(c,a=f+-4|0),f=a;return r=e,i=0|ar[A>>2],ar[A>>2]=ar[c>>2],ar[c>>2]=i,ar[u>>2]=ar[n>>2],ar[n>>2]=r,e=0|ar[b>>2],ar[b>>2]=ar[o>>2],ar[o>>2]=e,A=0|ar[l>>2],ar[l>>2]=ar[t>>2],ar[t>>2]=A,(0|e)!=(0|f)&&(ar[o>>2]=e+(~((e+-4-r|0)>>>2)<<2)),0|i&&vu(i),void(ur=s)}if((0|r)!=(0|e))return b=0|hu(4096),ar[c>>2]=b,function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;r=0|ar[(b=8+(A|=0)|0)>>2],u=0|ar[(i=A+12|0)>>2],t=u,a=r;do{if((0|r)==(0|u)){if(l=0|ar[(u=A+4|0)>>2],n=0|ar[A>>2],(f=n)>>>0<l>>>0){o=(n=l)+((t=(1+(n-f>>2)|0)/-2|0)<<2)|0,f=(n=(f=a-n|0)>>2)?(wb(0|o,0|l,0|f),0|ar[u>>2]):l,l=o+(n<<2)|0,ar[b>>2]=l,ar[u>>2]=f+(t<<2),f=l;break}if(1073741823<(f=0==(0|(f=t-f>>1))?1:f)>>>0&&(Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)),o=0|hu(f<<2),c=t=(a=o)+(f>>>2<<2)|0,o=o+(f<<2)|0,(0|l)==(0|r))f=c;else{for(f=c,n=l;ar[t>>2]=ar[n>>2],f=t=f+4|0,(0|(n=n+4|0))!=(0|r););n=0|ar[A>>2]}ar[A>>2]=a,ar[u>>2]=c,ar[b>>2]=f,ar[i>>2]=o,n&&(vu(n),f=0|ar[b>>2])}else f=r}while(0);ar[f>>2]=ar[e>>2],ar[b>>2]=4+(0|ar[b>>2])}(A,c),void(ur=s);a=0|hu(4096),ar[c>>2]=a,function(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;r=0|ar[(s=4+(A|=0)|0)>>2],b=0|ar[A>>2],n=b;do{if((0|r)==(0|b)){if(f=0|ar[(b=A+8|0)>>2],l=0|ar[(u=A+12|0)>>2],f>>>0<(i=l)>>>0){t=(i=(n=f)+((o=(1+(i-n>>2)|0)/2|0)<<2)|0)+(0-(u=(n=n-r|0)>>2)<<2)|0,u&&(wb(0|t,0|r,0|n),i=t,f=0|ar[b>>2]),ar[s>>2]=i,ar[b>>2]=f+(o<<2);break}if(1073741823<(n=0==(0|(n=i-n>>1))?1:n)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),a=0|hu(n<<2),l=i=(c=a)+((n+3|0)>>>2<<2)|0,a=a+(n<<2)|0,(0|r)==(0|f))n=l,f=r;else{for(o=i,n=l,t=r;ar[o>>2]=ar[t>>2],n=o=n+4|0,(0|(t=t+4|0))!=(0|f););f=0|ar[A>>2]}ar[A>>2]=c,ar[s>>2]=l,ar[b>>2]=n,ar[u>>2]=a,f&&(vu(f),i=0|ar[s>>2])}else i=r}while(0);ar[i+-4>>2]=ar[e>>2],ar[s>>2]=(0|ar[s>>2])-4}(A,c),a=0|ar[u>>2],c=0|ar[a>>2],a=a+4|0,ar[u>>2]=a,o=0|ar[b>>2],e=t=0|ar[l>>2],n=o;do{if((0|o)==(0|t)){if((i=r=0|ar[A>>2])>>>0<a>>>0){f=(e=a)+((i=(1+(e-i>>2)|0)/-2|0)<<2)|0,e=(r=(e=n-e|0)>>2)?(wb(0|f,0|a,0|e),0|ar[u>>2]):a,A=f+(r<<2)|0,ar[b>>2]=A,ar[u>>2]=e+(i<<2),e=A;break}if(1073741823<(e=0==(0|(e=e-i>>1))?1:e)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),t=i=(n=f=0|hu(e<<2))+(e>>>2<<2)|0,f=f+(e<<2)|0,(0|a)==(0|o))e=t;else{for(e=t,r=a;ar[i>>2]=ar[r>>2],e=i=e+4|0,(0|(r=r+4|0))!=(0|o););r=0|ar[A>>2]}ar[A>>2]=n,ar[u>>2]=t,ar[b>>2]=e,ar[l>>2]=f,r&&(vu(r),e=0|ar[b>>2])}else e=o}while(0);ar[e>>2]=c,ar[b>>2]=4+(0|ar[b>>2]),ur=s}function Xa(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;r=0|ar[(s=(A|=0)+4|0)>>2],n=b=0|ar[A>>2];do{if((0|r)==(0|b)){if((f=0|ar[(b=A+8|0)>>2])>>>0<(i=l=0|ar[(u=A+12|0)>>2])>>>0){t=(i=(n=f)+((o=(1+(i-n>>2)|0)/2|0)<<2)|0)+(0-(u=(n=n-r|0)>>2)<<2)|0,u&&(wb(0|t,0|r,0|n),i=t,f=0|ar[b>>2]),ar[s>>2]=i,ar[b>>2]=f+(o<<2);break}if(1073741823<(n=0==(0|(n=i-n>>1))?1:n)>>>0&&(Zu(s=0|X(8),44519),ar[s>>2]=17660,I(0|s,4016,428)),l=i=(c=a=0|hu(n<<2))+((n+3|0)>>>2<<2)|0,a=a+(n<<2)|0,(0|r)==(0|f))n=l,f=r;else{for(o=i,n=l,t=r;ar[o>>2]=ar[t>>2],n=o=n+4|0,(0|(t=t+4|0))!=(0|f););f=0|ar[A>>2]}ar[A>>2]=c,ar[s>>2]=l,ar[b>>2]=n,ar[u>>2]=a,f&&(vu(f),i=0|ar[s>>2])}else i=r}while(0);ar[i+-4>>2]=ar[e>>2],ar[s>>2]=(0|ar[s>>2])-4}function Wa(A){var e,r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0;if(!(r=0|ar[(e=(A|=0)+8|0)>>2]))return(l=0)|l;if(6==(0|(i=0|ar[(l=A+4|0)>>2]))){if(a=(i=0|ar[(c=24+r|0)>>2])+1|0,(0|ar[(t=28+r|0)>>2])>(0|i))f=0|ar[20+r>>2];else{if(!(f=0|yc(a)))return 0|(l=7);(n=0|ar[(o=20+r|0)>>2])&&(hb(0|f,0|n,0|i),Bc(n),i=0|ar[c>>2]),ar[o>>2]=f,ar[t>>2]=a}tr[f+i>>0]=0,ar[c>>2]=1+(0|ar[c>>2]),i=0|ar[l>>2]}if(7==(0|i)){if(t=(i=0|ar[(c=24+r|0)>>2])+2|0,(0|ar[(o=28+r|0)>>2])<(0|t)){if(!(f=0|yc(t)))return 0|(l=7);(n=0|ar[(a=20+r|0)>>2])&&(hb(0|f,0|n,0|i),Bc(n),i=0|ar[c>>2]),ar[a>>2]=f,ar[o>>2]=t}else f=0|ar[20+r>>2];tr[(i=f+i|0)>>0]=0,tr[i+1>>0]=0,ar[c>>2]=2+(0|ar[c>>2]),i=0|ar[l>>2]}return 4<(0|i)&&(i=0|ar[(o=A+16|0)>>2],c=(0|ar[A+20>>2])-i|0,n=0|ar[(f=A+28|0)>>2],(0|(0==(0|c)?0:(c<<8)-1|0))==((t=0|ar[(a=A+32|0)>>2])+n|0)?(Ea(A+12|0),n=0|ar[f>>2],f=0|ar[a>>2],i=0|ar[o>>2]):f=t,ar[(0|ar[i+((c=f+n|0)>>>10<<2)>>2])+((1023&c)<<2)>>2]=r,ar[a>>2]=f+1,ar[(A=A+36|0)>>2]=(0|ar[A>>2])+(0|ar[24+r>>2]),ar[e>>2]=0),(l=ar[l>>2]=0)|l}function Ia(A){var e,r=0;for(tr[(A|=0)+4138>>0]=2,r=A+4139|0,tr[A+4155>>0]=0,tr[A+4156>>0]=0,tr[r>>0]=0,tr[r+1>>0]=0,tr[r+2>>0]=0,e=(r=A+4340|(tr[r+3>>0]=0))+60|0;(0|(r=r+4|(ar[r>>2]=0)))<(0|e););Ca(A,0)}function Ca(A,e){e|=0;var r=0,i=0;if(ar[(A|=0)>>2]=0,or[A+4>>1]=0,tr[A+6>>0]=1,tr[A+7>>0]=1,ar[A+8>>2]=27,tr[A+12>>0]=0,tr[A+13>>0]=0,tr[A+14>>0]=0,ar[(e=A+16|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,or[e+16>>1]=0,tr[e+18>>0]=0,ar[A+36>>2]=1,ar[A+40>>2]=1,tr[A+44>>0]=1,tr[A+45>>0]=1,tr[A+46>>0]=1,vb(A+4172|0,0,168),e=0|ar[A+4340>>2],(0|(i=0|ar[(r=A+4344|0)>>2]))!=(0|e)&&(ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2)),e=0|ar[A+4352>>2],(0|(i=0|ar[(r=A+4356|0)>>2]))!=(0|e)&&(ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2)),e=0|ar[A+4364>>2],(0|(i=0|ar[(r=A+4368|0)>>2]))!=(0|e)&&(ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2)),e=0|ar[A+4376>>2],(0|(i=0|ar[(r=A+4380|0)>>2]))!=(0|e)&&(ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2)),e=0|ar[A+4388>>2],(0|(i=0|ar[(r=A+4392|0)>>2]))==(0|e))return ar[(i=A+4160|0)>>2]=0,tr[(i=A+47|0)>>0]=0,tr[(i=A+48|0)>>0]=0,tr[(i=A+49|0)>>0]=0,ar[(i=A+52|0)>>2]=0,ar[(i=A+56|0)>>2]=0,tr[(i=A+60|0)>>0]=0,tr[(i=A+4125|0)>>0]=0,ar[(i=A+4128|0)>>2]=2,ar[(A=A+4132|0)>>2]=0,void(or[A+4>>1]=0);ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2),ar[(i=A+4160|0)>>2]=0,tr[(i=A+47|0)>>0]=0,tr[(i=A+48|0)>>0]=0,tr[(i=A+49|0)>>0]=0,ar[(i=A+52|0)>>2]=0,ar[(i=A+56|0)>>2]=0,tr[(i=A+60|0)>>0]=0,tr[(i=A+4125|0)>>0]=0,ar[(i=A+4128|0)>>2]=2,ar[(A=A+4132|0)>>2]=0,or[A+4>>1]=0}function Ga(A){var e=0,r=0,i=0;0|(e=0|ar[(A|=0)+4388>>2])&&((0|(i=0|ar[(r=A+4392|0)>>2]))!=(0|e)&&(ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2)),vu(e)),0|(e=0|ar[A+4376>>2])&&((0|(i=0|ar[(r=A+4380|0)>>2]))!=(0|e)&&(ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2)),vu(e)),0|(e=0|ar[A+4364>>2])&&((0|(i=0|ar[(r=A+4368|0)>>2]))!=(0|e)&&(ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2)),vu(e)),0|(e=0|ar[A+4352>>2])&&((0|(i=0|ar[(r=A+4356|0)>>2]))!=(0|e)&&(ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2)),vu(e)),(i=0|ar[A+4340>>2])&&((0|(r=0|ar[(e=A+4344|0)>>2]))!=(0|i)&&(ar[e>>2]=r+(~((r+-4-i|0)>>>2)<<2)),vu(i))}function Va(A,e){var r,i,f,n,t,o=0,a=0,c=0,l=0;if((e|=0)>>>0<=(a=0|ar[(t=(A|=0)+8|0)>>2])-(o=0|ar[(l=A+4|0)>>2])>>2>>>0)return vb(0|o,0,e<<2|0),void(ar[l>>2]=o+(e<<2));1073741823<(o=(i=(f=o-(n=0|ar[A>>2])|0)>>2)+e|0)>>>0&&zl(),a=(c=a-n|0)>>1,a=c>>2>>>0<536870911?a>>>0<o>>>0?o:a:1073741823;do{if(a){if(!(1073741823<a>>>0)){c=0|hu(a<<2);break}Zu(l=0|X(8),44519),ar[l>>2]=17660,I(0|l,4016,428)}else c=0}while(0);vb(0|(r=c+(i<<2)|0),0,e<<2|0),o=r+(0-i<<2)|0,0<(0|f)&&hb(0|o,0|n,0|f),ar[A>>2]=o,ar[l>>2]=r+(e<<2),ar[t>>2]=c+(a<<2),n&&vu(n)}function Fa(A,e,r){e|=0,r|=0;var i,f=0;if(!(0|tr[(A|=0)+34>>0]))return 0==(r|e|0)|0;i=0|ar[A+36>>2];A:do{if(0<(0|i)){for(f=0;(0|ar[A+4252+(f<<2)>>2])!=(0|e);)if((0|i)<=(0|(f=f+1|0))){e=f=0;break A}if(0<(0|(e=0|ar[A+40>>2])))for(f=0;;){if((0|ar[A+4296+(f<<2)>>2])==(0|r)){e=f=1;break A}if((0|e)<=(0|(f=f+1|0))){f=1,e=0;break}}else f=1,e=0}else e=f=0}while(0);return e&f|0}function Ra(A,e,r,i,f,n,t,o,a,c,l){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0;var u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0,fA=0,nA=0,tA=0,oA=0,aA=0,cA=0,lA=0;if(ur=(U=ur)+144|0,D=U+8|0,F=(V=U)+136|0,S=0|ar[(R=(A|=0)+10352|0)>>2],iA=(0|br(S,r))+e|0,J=0|ar[A+10340>>2],z=f<<1,j=(0|cr[J+(24*iA|0)+4>>0])>>>z&3)if(T=(M=1<<(P=0|ar[((O=0==(0|f))?A+5760|0:A+5768|0)>>2]))-1|0,Q=0|br(n,e),Y=0|br(t,r),W=0|ar[(O?A+24|0:A+32|0)>>2],I=0|ar[(O?A+28|0:A+36|0)>>2],e=Y>>(C=0|ar[A+10348>>2]),-1<(0|(i=Q>>C))&(0|i)<(0|S)||sr(48482,48519,118,48539),(0|e)<=-1&&sr(48543,48519,119,48539),(0|(G=0|ar[A+10356>>2]))<=(0|e)&&sr(48543,48519,119,48539),nA=J+(24*((0|br(e,S))+i|0)|0)+2|0,p=A+52|0,y=0|ar[A+48>>2],nA=0|ar[800+(0|ar[y+(lr[nA>>1]<<2)>>2])>>2],B=0|ar[A+5820>>2],E=y,cA=O?aA=0:(aA=(0|ar[A+5780>>2])-1|0,(0|ar[A+5784>>2])-1|0),Z=(fA=0|ar[A+5804>>2])-aA|0,fA=fA-cA|0,_=(0|W)<(Q+n|0)?W-Q|0:n,N=(0|I)<(Y+t|0)?I-Y|0:t,X=0!=(0|tr[J+(24*iA|0)+22>>0]),2==(0|j)){switch((0|cr[J+(24*iA|0)+5>>0])>>>z&3){case 0:H=x=0,tA=-1,oA=1;break;case 1:H=-(x=1),oA=tA=0;break;case 2:tA=H=-(x=1),oA=1;break;case 3:H=-(x=1),oA=-(tA=1)}if(ar[D>>2]=tA,ar[4+D>>2]=oA,ar[V>>2]=H,ar[V+4>>2]=x,g=0|br(H,a),m=0-x&a,tr[F>>0]=0|tr[J+(24*iA|0)+9+(f<<2)>>0],tr[1+F>>0]=0|tr[J+(24*iA|0)+9+(f<<2)+1>>0],tr[2+F>>0]=0,tr[3+F>>0]=0|tr[J+(24*iA|0)+9+(f<<2)+2>>0],tr[4+F>>0]=0|tr[J+(24*iA|0)+9+(f<<2)+3>>0],(0|N)<=0)ur=U;else{f=0<(0|_),u=A+5480|0,b=A+10368|0,s=A+10372|0,d=A+10376|0,k=A+10360|0,h=_+-1|0,w=N+-1|0,v=A+5977|0,P=A+10308|0,L=(0|br(Y>>fA,B))+(Q>>Z)|0,H=0;A:for(;;){if(K=o+((0|br(A=H+Y|0,a))+Q<<1)|0,q=c+((0|br(A,l))+Q<<1)|0,f){AA=0==(0|H),eA=(0|H)==(0|w),iA=(0|(rA=($=A<<cA)>>C))<0|(0|G)<=(0|rA),x=0;do{if(X&&0!=(0|tr[u>>0])){if(i=x+Q<<aA>>(e=0|ar[b>>2]),e=$>>e,(0|i)<=-1){lA=23;break A}if((0|(r=0|ar[s>>2]))<=(0|i)){lA=23;break A}if((0|e)<=-1){lA=26;break A}if((0|e)>=(0|ar[d>>2])){lA=26;break A}j=(0|ar[k>>2])+(3*((0|br(r,e))+i|0)|0)|0,1024&(cr[j>>0]|cr[j+1>>0]<<8)||(lA=28)}else lA=28;e:do{if(28==(0|lA)){if(e=(i=(j=x+Q|(lA=0))<<aA)>>(r=0|ar[b>>2]),r=$>>r,(0|e)<=-1){lA=30;break A}if((0|(S=0|ar[s>>2]))<=(0|e)){lA=30;break A}if((0|r)<=-1){lA=33;break A}if((0|r)>=(0|ar[d>>2])){lA=33;break A}if(z=(0|ar[k>>2])+(3*((0|br(S,r))+e|0)|0)|0,!(2048&(cr[z>>0]|cr[z+1>>0]<<8))){if(eA|(0|x)==(0|h)|AA|0==(0|x)){O=-1<(0|(S=i>>C)),r=0;do{if(n=(0|ar[D+(r<<2)>>2])+j|0,!((0|(t=(0|ar[V+(r<<2)>>2])+A|0))<(0|I)&(0|n)<(0|W)&-1<(t|n|0)))break e;if(e=t<<cA>>C,(0|(i=n<<aA>>C))<=-1){lA=40;break A}if((0|(z=0|ar[R>>2]))<=(0|i)){lA=40;break A}if(!(-1<(0|e)&(0|e)<(0|G))){lA=42;break A}if(e=J+(24*((0|br(z,e))+i|0)|0)+2|0,(e=0|lr[e>>1])>>>0>=(0|ar[p>>2])-E>>2>>>0){lA=59;break A}if(!(i=0|ar[y+(e<<2)>>2])){lA=59;break A}if((0|(i=0|ar[i+800>>2]))<(0|nA)){if(!(O&(0|S)<(0|z))){lA=47;break A}if(iA){lA=49;break A}if(z=J+(24*((0|br(z,rA))+S|0)|0)+2|0,!(0|tr[764+(0|ar[y+(lr[z>>1]<<2)>>2])>>0]))break e}if((0|nA)<(0|i)&&0==(0|tr[764+(0|ar[y+(e<<2)>>2])>>0]))break e;if(0==(0|tr[v>>0])&&(t=(0|br(t>>fA,B))+(n>>Z)|0,z=0|ar[P>>2],(0|ar[z+(t<<2)>>2])!=(0|ar[z+(L<<2)>>2])))break e;r=r+1|0}while((0|r)<2)}t=(j=0|lr[K+(x<<1)>>1])-(0|lr[K+(x+g+tA<<1)>>1])|0,z=j-(0|lr[K+(x+m+oA<<1)>>1])|0,j=(0|tr[((0|t)<0?1:0|t?3:2)+((0|z)<0?-1:0!=(0|z)&1)+F>>0])+j|0,or[q+(x<<1)>>1]=(0|j)<0?0:65535&((0|j)<(0|M)?j:T)}}}while(0);x=x+1|0}while((0|x)<(0|_))}if((0|N)<=(0|(H=H+1|0))){lA=59;break}}if(23==(0|lA))sr(48482,48519,118,48539);else if(26==(0|lA))sr(48543,48519,119,48539);else if(30==(0|lA))sr(48482,48519,118,48539);else if(33==(0|lA))sr(48543,48519,119,48539);else if(40==(0|lA))sr(48482,48519,118,48539);else if(42==(0|lA))sr(48543,48519,119,48539);else if(47==(0|lA))sr(48482,48519,118,48539);else if(49==(0|lA))sr(48543,48519,119,48539);else if(59==(0|lA))return void(ur=U)}}else{for(i=0|cr[J+(24*iA|0)+6+f>>0],r=(e=D)+128|0;(0|(e=e+4|(ar[e>>2]=0)))<(0|r););ar[D+((31&i)<<2)>>2]=1,ar[D+((i+1&31)<<2)>>2]=2,ar[D+((i+2&31)<<2)>>2]=3,ar[D+((i+3&31)<<2)>>2]=4,rA=P+-5|0,i=0<(0|N);A:do{if(X){if(i){K=0<(0|_),q=A+5480|0,$=A+10368|0,AA=A+10372|0,eA=A+10376|0,P=A+10360|0,L=7<(0|rA),x=0;e:for(;;){r:do{if(K){if(H=(z=x+Y|0)<<cA,t=0|br(z,a),z=0|br(z,l),A=0==(0|tr[q>>0]),L)for(j=-1<(0|(z=H>>(t=0|ar[$>>2]))),n=-1<(0|(O=H>>t)),S=0;;){if(i=S+Q<<aA,A)lA=79;else{if((0|(e=i>>t))<=-1){lA=88;break e}if((0|(r=0|ar[AA>>2]))<=(0|e)){lA=88;break e}if(!n){lA=91;break e}if((0|O)>=(0|ar[eA>>2])){lA=91;break e}oA=(0|ar[P>>2])+(3*((0|br(r,O))+e|0)|0)|0,1024&(cr[oA>>0]|cr[oA+1>>0]<<8)||(lA=79)}if(79==(0|lA)){if(((lA=0)|(i>>=t))<=-1){lA=95;break e}if((0|i)>=(0|ar[AA>>2])){lA=95;break e}if(!j){lA=98;break e}if((0|z)>=(0|ar[eA>>2])){lA=98;break e}}if((0|_)<=(0|(S=S+1|0)))break r}else n=0;do{if(i=(j=n+Q|0)<<aA,O=0|ar[$>>2],A)lA=93;else{if(r=H>>O,(0|(e=i>>O))<=-1){lA=88;break e}if((0|(S=0|ar[AA>>2]))<=(0|e)){lA=88;break e}if((0|r)<=-1){lA=91;break e}if((0|r)>=(0|ar[eA>>2])){lA=91;break e}oA=(0|ar[P>>2])+(3*((0|br(S,r))+e|0)|0)|0,1024&(cr[oA>>0]|cr[oA+1>>0]<<8)||(lA=93)}do{if(93==(0|lA)){if(r=i>>O,i=H>>O,((lA=0)|r)<=-1){lA=95;break e}if((0|(e=0|ar[AA>>2]))<=(0|r)){lA=95;break e}if((0|i)<=-1){lA=98;break e}if((0|i)>=(0|ar[eA>>2])){lA=98;break e}if(oA=(0|ar[P>>2])+(3*((0|br(e,i))+r|0)|0)|0,2048&(cr[oA>>0]|cr[oA+1>>0]<<8))break;if(i=0|lr[o+(j+t<<1)>>1],(0|(e=0|ar[D+(i>>>rA<<2)>>2]))<=0)break;oA=(0|tr[e+-1+(J+(24*iA|0)+9+(f<<2))>>0])+i|0,or[c+(j+z<<1)>>1]=(0|oA)<0?0:65535&((0|oA)<(0|M)?oA:T)}}while(0);n=n+1|0}while((0|n)<(0|_))}}while(0);if((0|N)<=(0|(x=x+1|0)))break A}88==(0|lA)?sr(48482,48519,118,48539):91==(0|lA)?sr(48543,48519,119,48539):95==(0|lA)?sr(48482,48519,118,48539):98==(0|lA)&&sr(48543,48519,119,48539)}}else if(i&&(L=7<(0|rA),0<(0|_))){e=0;do{if(r=0|br(S=e+Y|0,a),S=0|br(S,l),!L)for(i=0;n=0|lr[o+((O=i+Q|0)+r<<1)>>1],0<(0|(t=0|ar[D+(n>>>rA<<2)>>2]))&&(lA=(0|tr[t+-1+(J+(24*iA|0)+9+(f<<2))>>0])+n|0,or[c+(O+S<<1)>>1]=(0|lA)<0?0:65535&((0|lA)<(0|M)?lA:T)),(0|(i=i+1|0))<(0|_););e=e+1|0}while((0|e)<(0|N))}}while(0);ur=U}else ur=U}function Na(A,e,r,i,f,n,t,o,a,c,l){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0;var u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0,fA=0,nA=0,tA=0,oA=0,aA=0,cA=0,lA=0,uA=0,bA=0;if(ur=(U=ur)+144|0,J=U+8|0,F=(V=U)+136|0,S=0|ar[(R=(A|=0)+10352|0)>>2],iA=(0|br(S,r))+e|0,fA=0|ar[(N=A+10340|0)>>2],z=f<<1,j=(0|cr[fA+(24*iA|0)+4>>0])>>>z&3)if(T=(M=1<<(P=0|ar[((O=0==(0|f))?A+5760|0:A+5768|0)>>2]))-1|0,D=0|br(n,e),Q=0|br(t,r),W=0|ar[(O?A+24|0:A+32|0)>>2],I=0|ar[(O?A+28|0:A+36|0)>>2],i=D>>(e=0|ar[(C=A+10348|0)>>2]),e=Q>>e,-1<(0|i)&(0|i)<(0|S)||sr(48482,48519,118,48539),(0|e)<=-1&&sr(48543,48519,119,48539),(0|e)>=(0|ar[(G=A+10356|0)>>2])&&sr(48543,48519,119,48539),oA=fA+(24*((0|br(e,S))+i|0)|0)+2|0,B=A+52|0,oA=0|ar[800+(0|ar[(0|ar[(y=A+48|0)>>2])+(lr[oA>>1]<<2)>>2])>>2],E=0|ar[A+5820>>2],uA=O?lA=0:(lA=(0|ar[A+5780>>2])-1|0,(0|ar[A+5784>>2])-1|0),p=(tA=0|ar[A+5804>>2])-lA|0,tA=tA-uA|0,Y=(0|W)<(D+n|0)?W-D|0:n,_=(0|I)<(Q+t|0)?I-Q|0:t,X=0!=(0|tr[fA+(24*iA|0)+22>>0]),2==(0|j)){switch((0|cr[fA+(24*iA|0)+5>>0])>>>z&3){case 0:H=x=0,aA=-1,cA=1;break;case 1:H=-(x=1),cA=aA=0;break;case 2:aA=H=-(x=1),cA=1;break;case 3:H=-(x=1),cA=-(aA=1)}if(ar[J>>2]=aA,ar[4+J>>2]=cA,ar[V>>2]=H,ar[V+4>>2]=x,Z=0|br(H,a),g=0-x&a,tr[F>>0]=0|tr[fA+(24*iA|0)+9+(f<<2)>>0],tr[1+F>>0]=0|tr[fA+(24*iA|0)+9+(f<<2)+1>>0],tr[2+F>>0]=0,tr[3+F>>0]=0|tr[fA+(24*iA|0)+9+(f<<2)+2>>0],tr[4+F>>0]=0|tr[fA+(24*iA|0)+9+(f<<2)+3>>0],(0|_)<=0)ur=U;else{u=0<(0|Y),b=A+5480|0,s=A+10368|0,d=A+10372|0,k=A+10376|0,h=A+10360|0,w=Y+-1|0,v=_+-1|0,m=A+5977|0,$=A+10308|0,AA=(0|br(Q>>tA,E))+(D>>p)|0,K=0;A:for(;;){if(rA=o+((0|br(eA=K+Q|0,a))+D)|0,iA=c+((0|br(eA,l))+D)|0,u){fA=eA<<uA,f=0==(0|K),nA=(0|K)==(0|v),q=0;do{if(X&&0!=(0|tr[b>>0])){if(i=q+D<<lA>>(e=0|ar[s>>2]),e=fA>>e,(0|i)<=-1){bA=23;break A}if((0|(r=0|ar[d>>2]))<=(0|i)){bA=23;break A}if((0|e)<=-1){bA=26;break A}if((0|e)>=(0|ar[k>>2])){bA=26;break A}A=(0|ar[h>>2])+(3*((0|br(r,e))+i|0)|0)|0,1024&(cr[A>>0]|cr[A+1>>0]<<8)||(bA=28)}else bA=28;e:do{if(28==(0|bA)){if(i=(A=(L=q+D|(bA=0))<<lA)>>(e=0|ar[s>>2]),e=fA>>e,(0|i)<=-1){bA=30;break A}if((0|(r=0|ar[d>>2]))<=(0|i)){bA=30;break A}if((0|e)<=-1){bA=33;break A}if((0|e)>=(0|ar[k>>2])){bA=33;break A}if(P=(0|ar[h>>2])+(3*((0|br(r,e))+i|0)|0)|0,!(2048&(cr[P>>0]|cr[P+1>>0]<<8))){if(nA|(0|q)==(0|w)|f|0==(0|q)){t=0;do{if(z=(0|ar[J+(t<<2)>>2])+L|0,!((0|(j=(0|ar[V+(t<<2)>>2])+eA|0))<(0|I)&(0|z)<(0|W)&-1<(j|z|0)))break e;if(e=j<<uA>>(n=0|ar[C>>2]),(0|(i=z<<lA>>n))<=-1){bA=39;break A}if((0|(H=0|ar[R>>2]))<=(0|i)){bA=39;break A}if((0|e)<=-1){bA=42;break A}if((0|(x=0|ar[G>>2]))<=(0|e)){bA=42;break A}if(i=(P=0|ar[N>>2])+(24*((0|br(H,e))+i|0)|0)+2|0,i=0|lr[i>>1],O=S=0|ar[y>>2],i>>>0>=(0|ar[B>>2])-S>>2>>>0){bA=59;break A}if(!(e=0|ar[O+(i<<2)>>2])){bA=59;break A}if((0|(r=0|ar[e+800>>2]))<(0|oA)){if(i=fA>>n,!(-1<(0|(S=A>>n))&(0|S)<(0|H))){bA=47;break A}if(!(-1<(0|i)&(0|i)<(0|x))){bA=49;break A}if(P=P+(24*((0|br(H,i))+S|0)|0)+2|0,!(0|tr[764+(0|ar[O+(lr[P>>1]<<2)>>2])>>0]))break e}if((0|oA)<(0|r)&&0==(0|tr[e+764>>0]))break e;if(0==(0|tr[m>>0])&&(x=(0|br(j>>tA,E))+(z>>p)|0,P=0|ar[$>>2],(0|ar[P+(x<<2)>>2])!=(0|ar[P+(AA<<2)>>2])))break e;t=t+1|0}while((0|t)<2)}P=(A=0|cr[rA+q>>0])-(0|cr[rA+(q+Z+aA)>>0])|0,L=A-(0|cr[rA+(q+g+cA)>>0])|0,A=(0|tr[((0|P)<0?1:0|P?3:2)+((0|L)<0?-1:0!=(0|L)&1)+F>>0])+A|0,tr[iA+q>>0]=(0|A)<0?0:255&((0|A)<(0|M)?A:T)}}}while(0);q=q+1|0}while((0|q)<(0|Y))}if((0|_)<=(0|(K=K+1|0))){bA=59;break}}if(23==(0|bA))sr(48482,48519,118,48539);else if(26==(0|bA))sr(48543,48519,119,48539);else if(30==(0|bA))sr(48482,48519,118,48539);else if(33==(0|bA))sr(48543,48519,119,48539);else if(39==(0|bA))sr(48482,48519,118,48539);else if(42==(0|bA))sr(48543,48519,119,48539);else if(47==(0|bA))sr(48482,48519,118,48539);else if(49==(0|bA))sr(48543,48519,119,48539);else if(59==(0|bA))return void(ur=U)}}else{for(i=0|cr[fA+(24*iA|0)+6+f>>0],r=(e=J)+128|0;(0|(e=e+4|(ar[e>>2]=0)))<(0|r););ar[J+((31&i)<<2)>>2]=1,ar[J+((i+1&31)<<2)>>2]=2,ar[J+((i+2&31)<<2)>>2]=3,ar[J+((i+3&31)<<2)>>2]=4,rA=P+-5|0,i=0<(0|_);A:do{if(X){if(i){K=0<(0|Y),q=A+5480|0,$=A+10368|0,AA=A+10372|0,eA=A+10376|0,L=A+10360|0,A=7<(0|rA),P=0;e:for(;;){r:do{if(K){if(x=(z=P+Q|0)<<uA,t=0|br(z,a),z=0|br(z,l),A)for(z=0==(0|tr[q>>0]),H=-1<(0|(j=x>>(t=0|ar[$>>2]))),n=-1<(0|(O=x>>t)),S=0;;){if(i=S+D<<lA,z)bA=79;else{if((0|(e=i>>t))<=-1){bA=88;break e}if((0|(r=0|ar[AA>>2]))<=(0|e)){bA=88;break e}if(!n){bA=91;break e}if((0|O)>=(0|ar[eA>>2])){bA=91;break e}cA=(0|ar[L>>2])+(3*((0|br(r,O))+e|0)|0)|0,1024&(cr[cA>>0]|cr[cA+1>>0]<<8)||(bA=79)}if(79==(0|bA)){if(((bA=0)|(i>>=t))<=-1){bA=95;break e}if((0|i)>=(0|ar[AA>>2])){bA=95;break e}if(!H){bA=98;break e}if((0|j)>=(0|ar[eA>>2])){bA=98;break e}}if((0|Y)<=(0|(S=S+1|0)))break r}else n=0;do{if(i=(j=n+D|0)<<lA,O=0|ar[$>>2],0|tr[q>>0]){if(r=x>>O,(0|(e=i>>O))<=-1){bA=88;break e}if((0|(S=0|ar[AA>>2]))<=(0|e)){bA=88;break e}if((0|r)<=-1){bA=91;break e}if((0|r)>=(0|ar[eA>>2])){bA=91;break e}cA=(0|ar[L>>2])+(3*((0|br(S,r))+e|0)|0)|0,1024&(cr[cA>>0]|cr[cA+1>>0]<<8)||(bA=93)}else bA=93;do{if(93==(0|bA)){if(r=i>>O,i=x>>O,((bA=0)|r)<=-1){bA=95;break e}if((0|(e=0|ar[AA>>2]))<=(0|r)){bA=95;break e}if((0|i)<=-1){bA=98;break e}if((0|i)>=(0|ar[eA>>2])){bA=98;break e}if(cA=(0|ar[L>>2])+(3*((0|br(e,i))+r|0)|0)|0,2048&(cr[cA>>0]|cr[cA+1>>0]<<8))break;if(i=0|cr[o+(j+t)>>0],(0|(e=0|ar[J+(i>>>rA<<2)>>2]))<=0)break;cA=(0|tr[e+-1+(fA+(24*iA|0)+9+(f<<2))>>0])+i|0,tr[c+(j+z)>>0]=(0|cA)<0?0:255&((0|cA)<(0|M)?cA:T)}}while(0);n=n+1|0}while((0|n)<(0|Y))}}while(0);if((0|_)<=(0|(P=P+1|0)))break A}88==(0|bA)?sr(48482,48519,118,48539):91==(0|bA)?sr(48543,48519,119,48539):95==(0|bA)?sr(48482,48519,118,48539):98==(0|bA)&&sr(48543,48519,119,48539)}}else if(i&&(L=7<(0|rA),0<(0|Y))){e=0;do{if(r=0|br(S=e+Q|0,a),S=0|br(S,l),!L)for(i=0;n=0|cr[o+((O=i+D|0)+r)>>0],0<(0|(t=0|ar[J+(n>>>rA<<2)>>2]))&&(bA=(0|tr[t+-1+(fA+(24*iA|0)+9+(f<<2))>>0])+n|0,tr[c+(O+S)>>0]=(0|bA)<0?0:255&((0|bA)<(0|M)?bA:T)),(0|(i=i+1|0))<(0|Y););e=e+1|0}while((0|e)<(0|_))}}while(0);ur=U}else ur=U}function _a(A,e){A|=0;var r=0;switch(0|(e|=0)){case 0:e=7796,r=4;break;case 1:e=7824,r=4;break;case 2:e=7768,r=4;break;default:e=0}return 4==(0|r)&&(e=0|ar[e+(A<<2)>>2]),0|e}function Ya(){var A=0,e=0,r=0,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;t=1;do{for(f=0|ar[7824+(t<<2)>>2],o=1<<t,e=A=0;;){for(n=255&A,r=0,i=e;tr[f+(i<<1)>>0]=r,tr[f+(i<<1)+1>>0]=n,(0|(r=r+1|0))!=(0|o);)i=i+1|0;if((0|(A=A+1|0))==(0|o))break;e=e+o|0}for(f=0|ar[7768+(t<<2)>>2],e=A=0;;){for(n=255&A,r=0,i=e;tr[f+(i<<1)>>0]=n,(0|(r=(tr[f+(i<<1)+1>>0]=r)+1|0))!=(0|o);)i=i+1|0;if((0|(A=A+1|0))==(0|o))break;e=e+o|0}f=0|ar[7796+(t<<2)>>2],n=o<<t,A=e=0;do{if(-1<(0|e))for(i=0,r=e;(0|r)<(0|o)&(0|i)<(0|o)&&(tr[f+(A<<1)>>0]=i,tr[f+(A<<1)+1>>0]=r,A=A+1|0),e=i+1|0,0<(0|r);)i=e,r=r+-1|0;else e=0}while((0|A)<(0|n));t=t+1|0}while(6!=(0|t));a=2;do{c=1<<a,l=(1<<(s=a+-2|0)<<s)-1|0,u=7768+(s<<2)|0,b=7796+(s<<2)|0,s=7824+(s<<2)|0,o=0;do{d=0|ar[7852+(24*o|0)+(a<<2)>>2],n=(h=2==(0|o))?66707:0,t=0;do{switch(k=t<<a,0|o){case 0:i=0|ar[b>>2],r=0;do{for(A=16,e=l;A=(f=0==(0|A))?15:A+-1|0,(((0|cr[i+((e=(f<<31>>31)+e|0)<<1)>>0])<<2)+(0|cr[63979+(A<<1)>>0])|0)!=(0|r)||(((0|cr[i+(e<<1)+1>>0])<<2)+(0|cr[63979+(A<<1)+1>>0])|0)!=(0|t););tr[d+((f=r+k|0)<<1)>>0]=e,tr[d+(f<<1)+1>>0]=A,r=r+1|0}while((0|r)<(0|c));break;case 1:i=0|ar[s>>2],r=0;do{for(A=16,e=l;A=(f=0==(0|A))?15:A+-1|0,(((0|cr[i+((e=(f<<31>>31)+e|0)<<1)>>0])<<2)+(0|cr[61251+(A<<1)>>0])|0)!=(0|r)||(((0|cr[i+(e<<1)+1>>0])<<2)+(0|cr[61251+(A<<1)+1>>0])|0)!=(0|t););tr[d+((f=r+k|0)<<1)>>0]=e,tr[d+(f<<1)+1>>0]=A,r=r+1|0}while((0|r)<(0|c));break;default:i=0;do{for(f=i+k|0,e=h?0|ar[u>>2]:0,A=16,r=l;A=(w=0==(0|A))?15:A+-1|0,(((0|cr[e+((r=(w<<31>>31)+r|0)<<1)>>0])<<2)+(0|cr[n+(A<<1)>>0])|0)!=(0|i)||(((0|cr[e+(r<<1)+1>>0])<<2)+(0|cr[n+(A<<1)+1>>0])|0)!=(0|t););tr[d+(f<<1)>>0]=r,tr[d+(f<<1)+1>>0]=A,i=i+1|0}while((0|i)<(0|c))}t=t+1|0}while((0|t)<(0|c));o=o+1|0}while(3!=(0|o));a=a+1|0}while(6!=(0|a))}function Qa(A,e){e|=0;var r,i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0;if(ur=(V=ur)+208|0,H=V+24|0,G=V+8|0,t=(C=V)+40|0,w=V+192|0,132!=(0|ar[(A|=0)>>2]))return ur=V,(H=0)|H;if(!(0|tr[512+(0|ar[e+10332>>2])>>0]))return ur=V,(H=0)|H;if(!(0|tr[e+100>>0]))return ur=V,(H=0)|H;r=0==(0|ar[e+1240>>2])?1:3,i=e+32|0,f=e+24|0,n=e+36|0,o=e+28|0,a=e+40|0,c=e+44|0,l=A+8|0,u=e+5760|0,b=e+5768|0,s=1+w|0,d=2+w|0,k=3+w|0,h=4+w|0,v=5+w|0,m=6+w|0,g=7+w|0,Z=8+w|0,p=9+w|0,y=10+w|0,B=11+w|0,E=12+w|0,X=13+w|0,W=14+w|0,I=15+w|0,j=0;A:for(;;){switch(U=0|ar[((R=0==(0|j))?f:i)>>2],O=0|ar[(R?o:n)>>2],S=0|ar[e+4+(j<<2)>>2],T=0|ar[(R?a:c)>>2],0|ar[l>>2]){case 0:F=0|ar[(R?u:b)>>2],oc(t);e:do{if(0<(0|O)){if(D=U<<1,J=(0|U)<0?-1:D,(0|F)<=8)for(F=0;;)if(ac(t,S+(0|br(F,T))|0,U),(0|O)<=(0|(F=F+1|0))){F=0;break e}if(0<(0|U))F=Q=0;else for(F=R=0;;)if(ac(t,N=F||(F=0|wu(J)),D),(0|O)<=(0|(R=R+1|0)))break e;do{for(N=F||(F=0|wu(J)),_=0|br(Q,T),Y=F,R=0;x=S+(R+_<<1)|0,tr[N+(M=R<<1)>>0]=or[x>>1],tr[Y+(1|M)>>0]=(0|lr[x>>1])>>>8,(0|(R=R+1|0))!=(0|U);)N=Y;ac(t,Y,D),Q=Q+1|0}while((0|Q)<(0|O))}else F=0}while(0);if(lc(w,t),0|F&&mu(F),(0|tr[w>>0])!=(0|tr[A+12+(j<<4)>>0])){z=22;break A}if((0|tr[s>>0])!=(0|tr[A+12+(j<<4)+1>>0])){z=22;break A}if((0|tr[d>>0])!=(0|tr[A+12+(j<<4)+2>>0])){z=22;break A}if((0|tr[k>>0])!=(0|tr[A+12+(j<<4)+3>>0])){z=22;break A}if((0|tr[h>>0])!=(0|tr[A+12+(j<<4)+4>>0])){z=22;break A}if((0|tr[v>>0])!=(0|tr[A+12+(j<<4)+5>>0])){z=22;break A}if((0|tr[m>>0])!=(0|tr[A+12+(j<<4)+6>>0])){z=22;break A}if((0|tr[g>>0])!=(0|tr[A+12+(j<<4)+7>>0])){z=22;break A}if((0|tr[Z>>0])!=(0|tr[A+12+(j<<4)+8>>0])){z=22;break A}if((0|tr[p>>0])!=(0|tr[A+12+(j<<4)+9>>0])){z=22;break A}if((0|tr[y>>0])!=(0|tr[A+12+(j<<4)+10>>0])){z=22;break A}if((0|tr[B>>0])!=(0|tr[A+12+(j<<4)+11>>0])){z=22;break A}if((0|tr[E>>0])!=(0|tr[A+12+(j<<4)+12>>0])){z=22;break A}if((0|tr[X>>0])!=(0|tr[A+12+(j<<4)+13>>0])){z=22;break A}if((0|tr[W>>0])!=(0|tr[A+12+(j<<4)+14>>0])){z=22;break A}if((0|tr[I>>0])==(0|tr[A+12+(j<<4)+15>>0]))break;z=22;break A;case 1:e:do{if(0<(0|O)){if(J=U<<1,M=(0|U)<0?-1:J,F=0<(0|U),(0|ar[(R?u:b)>>2])<=8){if(!F){F=7439,z=39;break}for(R=0,F=7439;;){for(_=S+(0|br(R,T))|0,N=0;z=65535&F,x=cr[_+N>>0]^z>>>8,F=((x^=x>>>4)|z<<8)^x<<5^x<<12,(0|(N=N+1|0))!=(0|U););if((0|(R=R+1|0))==(0|O)){z=39;break e}}}if(F){F=7439,R=D=0;do{for(_=R||(R=0|wu(M)),Y=0|br(D,T),Q=R,N=0;;){if(P=S+(N+Y<<1)|0,tr[_+(x=N<<1)>>0]=or[P>>1],tr[Q+(1|x)>>0]=(0|lr[P>>1])>>>8,(0|(N=N+1|0))==(0|U)){N=0;break}_=Q}for(;x=65535&F,P=cr[Q+N>>0]^x>>>8,F=((P^=P>>>4)|x<<8)^P<<5^P<<12,(0|(N=N+1|0))<(0|J););D=D+1|0}while((0|D)!=(0|O))}else{for(R=F=0;R=R||0|wu(M),(0|(F=F+1|0))!=(0|O););F=7439}F&=65535,R&&mu(R)}else F=7439,z=39}while(0);if(39==(0|z)&&(z=0,F&=65535),(0|F)==(0|(R=0|lr[A+60+(j<<1)>>1])))break;z=43;break A;case 2:if(F=0<(0|U)&0<(0|O),(0|ar[(R?u:b)>>2])<9)if(F){F=R=0;do{for(_=R>>>8^R,Y=0|br(R,T),N=0;F=(255&(_^N^N>>>8)^cr[S+(N+Y)>>0])+F|0,(0|(N=N+1|0))!=(0|U););R=R+1|0}while((0|R)!=(0|O))}else F=0;else if(F){F=N=0;do{for(_=N>>>8^N,Y=0|br(N,T),R=0;F=(P=255&(_^R^R>>>8))+F+(P^cr[S+(R+Y)>>0])|0,(0|(R=R+1|0))!=(0|U););N=N+1|0}while((0|N)!=(0|O))}else F=0;if((0|F)==(0|(R=0|ar[A+68+(j<<2)>>2])))break;z=54;break A}if((0|r)<=(0|(j=j+1|0))){F=0,z=71;break}}return 22==(0|z)?(P=0|ar[2669],ar[C>>2]=ar[e+92>>2],Ii(P,39084,C),ur=V,0|(P=5)):43==(0|z)?(P=0|ar[2669],x=0|ar[e+92>>2],ar[G>>2]=R,ar[4+G>>2]=F,ar[8+G>>2]=x,Ii(P,39127,G),ur=V,0|(P=5)):54==(0|z)?(P=0|ar[2669],x=0|ar[e+92>>2],ar[H>>2]=R,ar[H+4>>2]=F,ar[H+8>>2]=x,Ii(P,39127,H),ur=V,0|(P=5)):71==(0|z)?(ur=V,0|F):0}function Da(A){var e,r,i,f=0,n=0,t=0,o=0,a=0;if(e=(o=0|ar[(A|=0)+18596>>2])+5932|0,n=0|ar[(r=A+18600|0)>>2],!(0|tr[n+12>>0]))return 3<=(f=0|ar[n+796>>2])>>>0&&sr(39211,39242,1508,39251),ht(A+18580|0,f,0|ar[n+792>>2]),tr[(A=A+18588|0)>>0]=0,tr[A+1>>0]=0,tr[A+2>>0]=0,(tr[A+3>>0]=0)|(A=1);if(t=0|ar[n+16>>2],f=0|lr[(0|ar[o+10340>>2])+(24*(0|ar[(0|ar[o+10284>>2])+((0|ar[(0|ar[o+10272>>2])+(t<<2)>>2])-1<<2)>>2])|0)+2>>1],n=0|ar[o+48>>2],f>>>0>=(0|ar[o+52>>2])-n>>2>>>0)return(A=0)|A;if(i=0|ar[n+(f<<2)>>2],0|Fa(e,(0|t)%(0|(o=0|ar[o+5820>>2]))|0,(0|t)/(0|o)|0))return f=0|ar[r>>2],3<=(n=0|ar[f+796>>2])>>>0&&sr(39211,39242,1508,39251),ht(A+18580|0,n,0|ar[f+792>>2]),tr[(A=A+18588|0)>>0]=0,tr[A+1>>0]=0,tr[A+2>>0]=0,(tr[A+3>>0]=0)|(A=1);if(t=0|ar[A+18604>>2],n=0|ar[A+18608>>2],o=0|ar[t+10632>>2],!(1<(t=(0|ar[t+10636>>2])-o>>2)>>>0))return(A=0)|A;for(f=1;(0|ar[o+(f<<2)>>2])!=(0|n);)if(t>>>0<=(f=f+1|0)>>>0){f=0,a=16;break}return 16==(0|a)?0|f:(f=0|ar[o+(f+-1<<2)>>2])?(Mn(f+44|0,0|ar[f+124>>2]),0|tr[1340+i>>0]?(gt(A+18580|0,a=1332+i|0),vt(a),0|(A=1)):(A=0)|A):(A=0)|A}function Ja(A,e,r){e|=0,r|=0;var i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0;m=0|ar[(C=(A|=0)+18596|0)>>2],h=0|ar[m+5820>>2],v=0|ar[(w=A+12|0)>>2],k=m+5965|0;do{if(!r&&0<(0|v)&0!=(0|tr[k>>0])&&0==(0|ar[A+8>>2])){if(r=v+-1|0,1<(0|h)){if(I=0|ar[(v=A+18604|0)>>2],r>>>0<(0|ar[I+10680>>2])-(0|ar[I+10676>>2])>>3>>>0){ba(m,0|ar[A+18612>>2],1,r,1),gt(A+18580|0,(0|ar[10676+(0|ar[v>>2])>>2])+((0|ar[w>>2])-1<<3)|0),vt((0|ar[10676+(0|ar[v>>2])>>2])+((0|ar[w>>2])-1<<3)|0);break}return 0|(C=2)}if(ba(m,0|ar[A+18612>>2],0,r,1),r=0|ar[A+18600>>2],(v=0|ar[r+796>>2])>>>0<3){ht(A+18580|0,v,0|ar[r+792>>2]),tr[(I=A+18588|0)>>0]=0,tr[I+1>>0]=0,tr[I+2>>0]=0,tr[I+3>>0]=0;break}sr(39211,39242,1508,39251)}}while(0);for(f=A+8|0,n=h-1|0,t=A+18612|0,o=A+18580|0,a=A+18584|0,c=m+5828|0,l=A+18604|0,I=A+18556|0,u=m+5935|0,b=A+18600|0,s=A+4|0,d=m+5966|0,i=m+10296|0,X=0|ar[w>>2],p=0|ar[f>>2],W=0|ar[C>>2];;){if((v=(0|br(X,h))+p|0)>>>0>=(0|ar[W+10276>>2])-(0|ar[W+10272>>2])>>2>>>0){r=2,v=35;break}if((0|p)>=(0|ar[W+5820>>2])){r=2,v=35;break}if((0|X)>=(0|ar[W+5828>>2])){r=2,v=35;break}if((0|p)<(0|n)&0<(0|X)&e&&ba(W,0|ar[t>>2],p+1|0,X+-1|0,1),!(0|ar[a>>2])){r=2,v=35;break}if(Ma(A),1==(0|p)&0!=(0|tr[k>>0])&&(0|X)<((0|ar[c>>2])-1|0)){if(W=0|ar[l>>2],r=0|ar[W+10676>>2],(0|ar[W+10680>>2])-r>>3>>>0<=X>>>0){r=2,v=35;break}gt(r+(X<<3)|0,o),mt((0|ar[10676+(0|ar[l>>2])>>2])+(X<<3)|0)}if((B=0!=(0|(y=0|at(I))))&&0|tr[u>>0]&&(gt(1332+(0|ar[b>>2])|0,o),mt(1332+(0|ar[b>>2])|0),tr[1340+(0|ar[b>>2])>>0]=1),Tn((0|ar[10524+(0|ar[C>>2])>>2])+(80*v|0)|0,1),E=0|ar[w>>2],Z=(g=0|ar[s>>2])+1|0,ar[s>>2]=Z,W=0|ar[C>>2],r=0|ar[W+5836>>2],v=0|ar[W+5820>>2],(0|Z)<(0|r)?r=(m=0)|ar[(0|ar[W+10284>>2])+(Z<<2)>>2]:m=1,X=(0|r)/(0|v)|0,p=(0|r)%(0|v)|0,ar[A>>2]=r,ar[f>>2]=p,ar[w>>2]=X,0==(0|y)&m){v=27;break}if(B){r=0,v=35;break}if((r=0|tr[d>>0]?(r=0|ar[i>>2],(0|ar[r+(Z<<2)>>2])!=(0|ar[r+(g<<2)>>2])):0)|(0|E)!=(0|X)&0!=(0|tr[k>>0])){v=32;break}}return 27==(0|v)?(er(4+(0|ar[A+18592>>2])|0,1004,0),tr[10516+(0|ar[C>>2])>>0]=3,0|(C=2)):32==(0|v)?0|at(I)?(tt(I),0|(C=1)):(er(4+(0|ar[A+18592>>2])|0,1017,0),tr[10516+(0|ar[C>>2])>>0]=3,0|(C=2)):35==(0|v)?0|r:0}function Ma(A){var e,r,i,f,n,t,o,a,c=0,l=0,u=0,b=0,s=0;n=0|ar[(A|=0)+18600>>2],b=0|ar[A+18596>>2],a=(0|(c=0|ar[A>>2]))%(0|(s=0|ar[b+5820>>2]))|0,s=(0|c)/(0|s)|0,r=a<<(e=0|ar[(c=b+5804|0)>>2]),i=s<<e,f=0|ar[b+10352>>2],l=(0|br(f,s))+a|0,t=0|ar[b+10340>>2],or[t+(24*l|0)>>1]=ar[800+n>>2],l=65535&ar[n>>2],o=r>>(u=0|ar[b+10348>>2]),u=i>>u,-1<(0|o)&(0|o)<(0|f)||sr(48482,48519,128,48539),(0|u)<=-1&&sr(48543,48519,129,48539),(0|u)>=(0|ar[b+10356>>2])&&sr(48543,48519,129,48539),b=t+(24*((0|br(f,u))+o|0)|0)+2|0,or[b>>1]=l,0!=(0|tr[325+n>>0])||0!=(0|tr[326+n>>0])?(function(A,e,r,i){e|=0,r|=0,i|=0;var f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0;ur=(n=ur)+32|0,i=n,a=0|ar[18600+(A|=0)>>2],f=0|ar[A+18596>>2],o=(t=i)+17|0;for(;tr[t>>0]=0,t=t+1|0,(0|t)<(0|o););t=0<(0|e)&&(C=0|br(0|ar[5820+f>>2],r),I=0|ar[10308+f>>2],(0|ar[A>>2])>(0|ar[a+800>>2])&&(0|ar[I+(C+e<<2)>>2])==(0|ar[I+(e+-1+C<<2)>>2]))?255&(0|ot(A+18556|0,0|ar[A+18580>>2])):0;o=0<(0|r)&(I=t<<24>>24==0)&&(E=0|ar[5820+f>>2],W=(0|br(E,r))+e|0,X=0|ar[10308+f>>2],C=X+((0|br(E,r+-1|0))+e<<2)|0,((0|ar[A>>2])-E|0)>=(0|ar[a+800>>2])&&(0|ar[X+(W<<2)>>2])==(0|ar[C>>2]))?255&(0|ot(A+18556|0,0|ar[A+18580>>2])):0;if(C=o<<24>>24==0,!((o|t)<<24>>24)){E=0==(0|ar[5776+f>>2])?1:3,X=a+325|0,W=A+18556|0,m=A+18580|0,g=5760+f|0,Z=5768+f|0,p=10087+f|0,y=10088+f|0,B=i+1|0,v=a+326|0,t=o=w=0;do{if((b=0==(0|w))&0!=(0|tr[X>>0])||0<(0|w)&0!=(0|tr[v>>0])){do{if(b)o=0|ot(W,1+(0|ar[m>>2])|0)?(o=0==(0|ct(W)))?1:2:0,a=o,o&=255;else{if(1!=(0|w)){a=(255&o)>>>(w<<1)&3;break}A=0|ot(W,1+(0|ar[m>>2])|0)?(A=0==(0|ct(W)))?1:2:0,o=255&((a=A)<<4|A<<2|255&o)}}while(0);if(A=255&a){a=0|ar[(u=b?g:Z)>>2],a=255&(0|lt(W,(1<<((0|a)<10?a:10)+-5)-1|0)),tr[(s=i+5+(w<<2)|0)>>0]=a,c=0|ar[u>>2],c=255&(0|lt(W,(1<<((0|c)<10?c:10)+-5)-1|0)),tr[(d=i+5+(w<<2)+1|0)>>0]=c,l=0|ar[u>>2],l=255&(0|lt(W,(1<<((0|l)<10?l:10)+-5)-1|0)),tr[(k=i+5+(w<<2)+2|0)>>0]=l,u=0|ar[u>>2],u=255&(0|lt(W,(1<<((0|u)<10?u:10)+-5)-1|0)),tr[(h=i+5+(w<<2)+3|0)>>0]=u;do{if(1==(0|A))A=a<<24>>24?(A=0!=(0|ct(W)))?-1:1:0,c=c<<24>>24?(c=0!=(0|ct(W)))?-1:1:0,l=l<<24>>24?(l=0!=(0|ct(W)))?-1:1:0,a=u<<24>>24?(a=0!=(0|ct(W)))?-1:1:0,u=255&(0|ut(W,5)),tr[i+2+w>>0]=u,b?u=p:G=30;else{if(b){u=p,a=l=-(c=A=1),t=255&(0|ut(W,2));break}G=(1==(0|w)?(G=255&(0|ut(W,2)),l=a=-1,A=c=1,t=255&(255&t|G<<2|G<<4)):(l=a=-1,A=c=1),30)}}while(0);30==(0|G)&&(G=0,u=y),b=0|cr[u>>0],u=255&(0|br(tr[s>>0]<<b,A)),tr[s>>0]=u,s=255&(0|br(tr[d>>0]<<b,c)),tr[d>>0]=s,d=255&(0|br(tr[k>>0]<<b,l)),tr[k>>0]=d,k=255&(0|br(tr[h>>0]<<b,a)),tr[h>>0]=k}}w=w+1|0}while((0|w)<(0|E));for(tr[i>>0]=o,tr[B>>0]=t,t=(0|br(0|ar[10352+f>>2],r))+e|0,t=(0|ar[10340+f>>2])+(24*t|0)+4|0,o=t+17|0;tr[t>>0]=0|tr[i>>0],i=i+1|0,(0|(t=t+1|0))<(0|o););}if(!I)for(i=0|br(0|ar[10352+f>>2],r),o=0|ar[10340+f>>2],t=o+(24*(i+e|0)|0)+4|0,i=o+(24*(e+-1+i|0)|0)+4|0,o=t+17|0;tr[t>>0]=0|tr[i>>0],i=i+1|0,(0|(t=t+1|0))<(0|o););if(C)return ur=n;t=0|ar[10352+f>>2],i=(0|br(t,r+-1|0))+e|0,o=0|ar[10340+f>>2],t=o+(24*((0|br(t,r))+e|0)|0)+4|0,i=o+(24*i|0)+4|0,o=t+17|0;for(;tr[t>>0]=0|tr[i>>0],t=t+1|0,i=i+1|0,(0|t)<(0|o););ur=n}(A,a,s,0),Ta(A,r,i,s=0|ar[c>>2],0)):Ta(A,r,i,s=e,0)}function Ta(A,e,r,i,f){var n,t,o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0;for(t=(A|=0)+18596|0,o=A+18600|0,a=A+18516|0,c=A+18508|0,m=A+18512|0,s=A+18556|0,n=A+18580|0,B=e|=0,y=r|=0,Z=i|=0,p=f|=0;;){if(g=0|ar[t>>2],((e=1<<Z)+B|0)<=(0|(r=0|ar[(b=g+1248|0)>>2]))&&(e+y|0)<=(0|(d=0|ar[g+1252>>2]))&&(0|ar[g+5800>>2])<(0|Z)){if(e=-1<((i=B+-1|0)|y|0)&(0|B)<=(0|r)&(0|y)<(0|d)&&(h=0|ar[g+5804>>2],k=(u=0|br(y>>h,0|ar[g+5820>>2]))+(B>>h)|0,h=u+(i>>h)|0,u=0|ar[g+10340>>2],(0|or[u+(24*k|0)>>1])==(0|or[u+(24*h|0)>>1]))?(e=0|ar[g+10308>>2],(0|ar[e+(k<<2)>>2])==(0|ar[e+(h<<2)>>2])&1):0,l=(0|r)<=(0|B)|((u=y+-1|0)|B|0)<0|(0|d)<(0|y)||(f=0|ar[g+5804>>2],l=0|ar[g+5820>>2],v=B>>f,w=(0|br(y>>f,l))+v|0,v=(0|br(u>>f,l))+v|0,l=0|ar[g+10340>>2],(0|or[l+(24*w|0)>>1])!=(0|or[l+(24*v|0)>>1]))?0:(l=0|ar[g+10308>>2],(0|ar[l+(w<<2)>>2])==(0|ar[l+(v<<2)>>2])&1),e){if(e=i>>(r=0|ar[g+10368>>2]),r=y>>r,(0|e)<=-1){e=14;break}if((0|(i=0|ar[g+10372>>2]))<=(0|e)){e=14;break}if((0|r)<=-1){e=17;break}if((0|r)>=(0|ar[g+10376>>2])){e=17;break}f=(0|ar[g+10360>>2])+(3*((0|br(i,r))+e|0)|0)|0,f=((65535&(cr[f>>0]|cr[f+1>>0]<<8))>>>6&3|0)>(0|p)?3:2}else f=2;if(l){if(i=B>>(r=0|ar[g+10368>>2]),r=u>>r,(0|i)<=-1){e=22;break}if((0|(e=0|ar[g+10372>>2]))<=(0|i)){e=22;break}if((0|r)<=-1){e=25;break}if((0|r)>=(0|ar[g+10376>>2])){e=25;break}e=(0|ar[g+10360>>2])+(3*((0|br(e,r))+i|0)|0)|0,e=((65535&(cr[e>>0]|cr[e+1>>0]<<8))>>>6&3|0)>(0|p)&1}else e=0;e=0|ot(s,(0|ar[n>>2])+(e+f)|0)}else e=(0|ar[g+5800>>2])<(0|Z)&1;if(0|tr[g+5946>>0]&&(0|ar[g+10092>>2])<=(0|Z)&&(ar[c>>2]=0,ar[m>>2]=0),0|tr[752+(0|ar[o>>2])>>0]&&(0|ar[g+10096>>2])<=(0|Z)&&(ar[a>>2]=0),!e){e=42;break}if(i=(f=1<<(r=Z+-1|0))+B|0,f=f+y|0,Ta(A,B,y,r,l=p+1|0),(0|i)<(0|ar[b>>2])&&Ta(A,i,y,r,l),(0|f)<(0|ar[(e=g+1252|0)>>2])&&Ta(A,B,f,r,l),(0|i)>=(0|ar[b>>2])){e=48;break}if(!((0|f)<(0|ar[e>>2]))){e=48;break}B=i,y=f,Z=r,p=l}if(14==(0|e))sr(48482,48519,118,48539);else if(17==(0|e))sr(48543,48519,119,48539);else if(22==(0|e))sr(48482,48519,118,48539);else if(25==(0|e))sr(48543,48519,119,48539);else{if(42==(0|e)){if(b=B>>(m=0|ar[g+10368>>2]),r=y>>m,s=(e=1<<(m=Z-m|0))+r|0,31!=(0|m)){l=e+b|0,u=g+10372|0,i=g+10360|0,f=(65535&p)<<6&192,e=r;do{for(r=b;g=(0|br(0|ar[u>>2],e))+r|0,g=(0|ar[i>>2])+(3*g|0)|0,m=-193&(cr[g>>0]|cr[g+1>>0]<<8)|f,tr[g>>0]=m,tr[g+1>>0]=m>>8,(0|(r=r+1|0))<(0|l););e=e+1|0}while((0|e)<(0|s))}return void function(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0;if(ur=(c=ur)+80|0,n=(D=c)+56|0,t=c+40|0,o=c+24|0,a=0|ar[(C=18596+(A|=0)|0)>>2],v=0|ar[(E=A+18600|0)>>2],function(A,e,r,i,f){e|=0,r|=0,i|=0;var n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(n=10368+(A|=0)|0,(f|=0)&&(c=0|ar[n>>2],b=e>>c,l=r>>c,u=(t=1<<(c=i-c|0))+l|0,31!=(0|c))){o=t+b|0,a=A+10372|0,c=A+10360|0,t=l;do{for(f=b;l=(0|br(0|ar[a>>2],t))+f|0,l=(0|ar[c>>2])+(3*l|0)|0,s=-8&(cr[l>>0]|cr[l+1>>0]<<8),tr[l>>0]=s,tr[l+1>>0]=s>>8,(0|(f=f+1|0))<(0|o););t=t+1|0}while((0|t)<(0|u))}t=0|ar[n>>2],o=e>>t,t=r>>t,(0|o)<=-1&&sr(48482,48519,128,48539);f=0|ar[A+10372>>2],(0|f)<=(0|o)&&sr(48482,48519,128,48539);(0|t)<=-1&&sr(48543,48519,129,48539);{if((0|t)<(0|ar[A+10376>>2]))return s=(0|ar[A+10360>>2])+(3*((0|br(f,t))+o|0)|0)|0,i=-8&(cr[s>>0]|cr[s+1>>0]<<8)|7&i,tr[s>>0]=i,tr[s+1>>0]=i>>8;sr(48543,48519,129,48539)}}(a,e,r,i,1),J=0|ar[10448+a>>2],h=e>>J,u=r>>J,w=(l=1<<(J=i-J|0))+u|0,31!=(0|J)){b=l+h|0,d=10452+a|0,k=10440+a|0,l=u;do{for(u=h;J=(0|br(0|ar[d>>2],l))+u|0,((tr[(0|ar[k>>2])+J>>0]=0)|(u=u+1|0))<(0|b););l=l+1|0}while((0|l)<(0|w))}J=1<<i,zn(A,e,r,e,r),0|tr[5964+a>>0]?(Q=0|ot(A+18556|0,161+(0|ar[A+18580>>2])|0),0|(tr[A+32>>0]=Q)&&function(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0,l=0,u=0,b=0;if(l=0|ar[10368+(A|=0)>>2],t=e>>l,u=r>>l,n=(i=1<<(l=i-l|0))+u|0,31!=(0|l)){a=i+t|0,c=A+10372|0,l=A+10360|0,o=(1&f)<<11&65535,i=u;do{for(f=t;u=(0|br(0|ar[c>>2],i))+f|0,u=(0|ar[l>>2])+(3*u|0)|0,b=-2049&(cr[u>>0]|cr[u+1>>0]<<8)|o,tr[u>>0]=b,tr[u+1>>0]=b>>8,(0|(f=f+1|0))<(0|a););i=i+1|0}while((0|i)<(0|n))}i=0|ar[A+10348>>2],o=e>>i,i=r>>i,(0|o)<=-1&&sr(48482,48519,128,48539);f=0|ar[A+10352>>2],(0|f)<=(0|o)&&sr(48482,48519,128,48539);(0|i)<=-1&&sr(48543,48519,129,48539);{if((0|i)<(0|ar[A+10356>>2]))return b=(0|ar[A+10340>>2])+(24*((0|br(f,i))+o|0)|0)+22|0,tr[b>>0]=1;sr(48543,48519,129,48539)}}(a,e,r,i,1)):tr[A+32>>0]=0;w=v+20|0;do{if(2!=(0|ar[w>>2])){h=0|ar[C>>2],l=0<=((u=e+-1|0)|r|0)&&(0|ar[h+1248>>2])>=(0|e)&&(0|ar[h+1252>>2])>(0|r)&&(g=0|ar[h+5804>>2],Q=0|br(r>>g,0|ar[h+5820>>2]),m=Q+(e>>g)|0,g=Q+(u>>g)|0,Q=0|ar[h+10340>>2],(0|or[Q+(24*m|0)>>1])==(0|or[Q+(24*g|0)>>1]))?(l=0|ar[h+10308>>2],(0|ar[l+(m<<2)>>2])==(0|ar[l+(g<<2)>>2])&1):0,d=0<=((k=r+-1|0)|e|0)&&(0|ar[h+1248>>2])>(0|e)&&(0|ar[h+1252>>2])>=(0|r)&&(Y=0|ar[h+5804>>2],Q=0|ar[h+5820>>2],p=e>>Y,Z=(0|br(r>>Y,Q))+p|0,p=(0|br(k>>Y,Q))+p|0,Q=0|ar[h+10340>>2],(0|or[Q+(24*Z|0)>>1])==(0|or[Q+(24*p|0)>>1]))?(d=0|ar[h+10308>>2],(0|ar[d+(Z<<2)>>2])==(0|ar[d+(p<<2)>>2])&1):0;do{if(l){if(Q=0|ar[h+10368>>2],l=u>>Q,u=r>>Q,(0|l)<=-1&&sr(48482,48519,118,48539),(0|(b=0|ar[h+10372>>2]))<=(0|l)&&sr(48482,48519,118,48539),(0|u)<=-1&&sr(48543,48519,119,48539),(0|u)<(0|ar[h+10376>>2])){y=(0|ar[h+10360>>2])+(3*((0|br(b,u))+l|0)|0)|0,y=512==(768&(cr[y>>0]|cr[y+1>>0]<<8))?6:5;break}sr(48543,48519,119,48539)}else y=5}while(0);do{if(d){if(l=0|ar[h+10368>>2],b=e>>l,l=k>>l,(0|b)<=-1&&sr(48482,48519,118,48539),(0|(u=0|ar[h+10372>>2]))<=(0|b)&&sr(48482,48519,118,48539),(0|l)<=-1&&sr(48543,48519,119,48539),(0|l)<(0|ar[h+10376>>2])){B=(0|ar[h+10360>>2])+(3*((0|br(u,l))+b|0)|0)|0,B=512==(768&(cr[B>>0]|cr[B+1>>0]<<8))&1;break}sr(48543,48519,119,48539)}else B=0}while(0);if(!((255&(0|ot(u=A+18556|0,(0|ar[(l=A+18580|0)>>2])+(B+y)|0)))<<24>>24)){if(2==(0|ar[w>>2])){Q=0;break}Q=0==(0|ot(u,149+(0|ar[l>>2])|0))&1;break}A:do{if(2<=(0|ar[804+(0|ar[E>>2])>>2])&&0!=(0|ot(u,148+(0|ar[l>>2])|0)))if(1<((0|ar[804+(0|ar[E>>2])>>2])-1|0)){l=1;do{if(!(0|ct(u)))break A;l=l+1|0}while((0|l)<((0|ar[804+(0|ar[E>>2])>>2])-1|0))}else l=1;else l=0}while(0);if(tr[(b=A+26|0)>>0]=15&tr[b>>0]|(255&l)<<5&255|16,b=0|ar[(l=10368+a|0)>>2],u=e>>b,b=r>>b,(0|u)<=-1&&sr(48482,48519,128,48539),(0|(s=0|ar[(h=10372+a|0)>>2]))<=(0|u)&&sr(48482,48519,128,48539),(0|b)<=-1&&sr(48543,48519,129,48539),(0|b)>=(0|ar[10376+a>>2])&&sr(48543,48519,129,48539),D=(0|ar[(k=10360+a|0)>>2])+(3*((0|br(s,b))+u|0)|0)|0,d=-57&(cr[D>>0]|cr[D+1>>0]<<8),tr[D>>0]=d,tr[D+1>>0]=d>>8,D=0|ar[l>>2],d=e>>D,u=r>>D,s=(l=1<<(D=i-D|0))+u|0,31!=(0|D)){b=l+d|0,l=u;do{for(u=d;D=(0|br(0|ar[h>>2],l))+u|0,D=(0|ar[k>>2])+(3*D|0)|0,i=-769&(cr[D>>0]|cr[D+1>>0]<<8)|512,tr[D>>0]=i,tr[D+1>>0]=i>>8,(0|(u=u+1|0))<(0|b););l=l+1|0}while((0|l)<(0|s))}return mc(0|ar[A+18592>>2],0|ar[E>>2],0|ar[C>>2],A+16|0,e,r,0,0,J,J,J,0),ur=c}Q=0}while(0);if(Y=0|ar[(m=10368+a|0)>>2],w=e>>Y,u=r>>Y,v=(l=1<<(Y=i-Y|0))+u|0,31!=(0|Y)){b=l+w|0,d=10372+a|0,k=10360+a|0,h=(65535&Q)<<8&65535,l=u;do{for(u=w;Y=(0|br(0|ar[d>>2],l))+u|0,Y=(0|ar[k>>2])+(3*Y|0)|0,_=-769&(cr[Y>>0]|cr[Y+1>>0]<<8)|h,tr[Y>>0]=_,tr[Y+1>>0]=_>>8,(0|(u=u+1|0))<(0|b););l=l+1|0}while((0|l)<(0|v))}if((Y=0!=(0|Q))||(0|ar[5800+a>>2])==(0|i)){u=0|ar[C>>2],h=0==(0|Q),l=0|ot(b=A+18556|0,8+(0|ar[(d=A+18580|0)>>2])|0);do{if(h)s=0|l?0:3;else if(l)s=0;else{if(k=0|ot(b,9+(0|ar[d>>2])|0),(0|ar[u+5800>>2])>=(0|i)){if(0|k){s=1;break}if(3==(0|i)){s=2;break}s=3-(0|ot(b,10+(0|ar[d>>2])|0))|0;break}if(!(0|tr[u+5466>>0])){s=0|k?1:2;break}if(0|ot(b,11+(0|ar[d>>2])|0)){s=0|k?1:2;break}l=0|ct(b),0!=(0|k)&(u=0!=(0|l))?s=5:(b=0==(0|k))|u?l|k?b&u?s=7:sr(55739,39242,1760,39275):s=6:s=4}}while(0);_=h&3==(0|s)&1}else s=_=0;u=0|ar[m>>2],l=e>>u,u=r>>u,(0|l)<=-1&&sr(48482,48519,128,48539);b=0|ar[10372+a>>2],(0|b)<=(0|l)&&sr(48482,48519,128,48539);(0|u)<=-1&&sr(48543,48519,129,48539);(0|u)>=(0|ar[10376+a>>2])&&sr(48543,48519,129,48539);R=(0|ar[10360+a>>2])+(3*((0|br(b,u))+l|0)|0)|0,N=-57&(cr[R>>0]|cr[R+1>>0]<<8)|(65535&s)<<3&56,tr[R>>0]=N,tr[R+1>>0]=N>>8,R=0==(0|Q),N=0==(0|s);A:do{if(R){if(N&&0|tr[5468+a>>0]&&(0|ar[5884+a>>2])<=(0|i)&&(0|ar[5888+a>>2])>=(0|i)&&0|at(G=A+18556|0)){if(Ua(a,e,r,i,1),l=0|ar[(Z=A+18560|0)>>2],ar[D>>2]=l,ar[D+4>>2]=(0|ar[A+18564>>2])-l,ar[(l=D+8|0)>>2]=0,ar[l+4>>2]=0,ar[D+16>>2]=0,l=0|ar[C>>2],b=0|ar[l+5760>>2],h=0|tr[l+5469>>0],k=0|ar[l+40>>2],l=0|ar[l+4>>2],u=(0|br(k,r))+e|0,8<(0|b)){if(d=l+(u<<1)|0,s=b-h|0,31!=(0|i)){u=0;do{for(b=0|br(u,k),l=0;i=(0|At(D,h))<<s&65535,or[d+(l+b<<1)>>1]=i,(0|(l=l+1|0))!=(0|J););u=u+1|0}while((0|u)!=(0|J))}}else if(d=l+u|0,s=b-h|0,31!=(0|i)){u=0;do{for(b=0|br(u,k),l=0;i=(0|At(D,h))<<s&255,tr[d+(l+b)>>0]=i,(0|(l=l+1|0))!=(0|J););u=u+1|0}while((0|u)!=(0|J))}u=0|ar[C>>2];do{if(0|ar[u+5776>>2])if(w=0|ar[u+5768>>2],k=0|ar[u+5780>>2],h=(0|J)/(0|k)|0,b=0|ar[u+5784>>2],v=(0|J)/(0|b)|0,l=0|tr[u+5470>>0],g=l<<24>>24,m=0|ar[u+44>>2],s=0|ar[u+8>>2],d=(0|br(m,(0|r)/(0|b)|0))+((0|e)/(0|k)|0)|0,8<(0|w)){if(s=s+(d<<1)|0,d=w-g|0,0<(0|h)&0<(0|v)){u=0;do{for(b=0|br(u,m),l=0;i=(0|At(D,g))<<d&65535,or[s+(l+b<<1)>>1]=i,(0|(l=l+1|0))!=(0|h););u=u+1|0}while((0|u)!=(0|v));u=0|ar[C>>2],m=0|ar[u+44>>2],w=0|ar[u+5768>>2],s=0|ar[u+5780>>2],b=0|ar[u+5784>>2],l=0|tr[u+5470>>0]}else s=k;if(v=(0|J)/(0|s)|0,h=(0|J)/(0|b)|0,k=l<<24>>24,d=(0|ar[u+12>>2])+((0|br((0|r)/(0|b)|0,m))+((0|e)/(0|s)|0)<<1)|0,b=w-k|0,!(0<(0|v)&0<(0|h)))break;u=0;do{for(s=0|br(u,m),l=0;r=(0|At(D,k))<<b&65535,or[d+(l+s<<1)>>1]=r,(0|(l=l+1|0))!=(0|v););u=u+1|0}while((0|u)!=(0|h))}else{if(s=s+d|0,d=w-g|0,0<(0|h)&0<(0|v)){u=0;do{for(b=0|br(u,m),l=0;i=(0|At(D,g))<<d&255,tr[s+(l+b)>>0]=i,(0|(l=l+1|0))!=(0|h););u=u+1|0}while((0|u)!=(0|v));u=0|ar[C>>2],m=0|ar[u+44>>2],w=0|ar[u+5768>>2],s=0|ar[u+5780>>2],b=0|ar[u+5784>>2],l=0|tr[u+5470>>0]}else s=k;if(v=(0|J)/(0|s)|0,h=(0|J)/(0|b)|0,k=l<<24>>24,d=(0|ar[u+12>>2])+((0|br((0|r)/(0|b)|0,m))+((0|e)/(0|s)|0))|0,b=w-k|0,!(0<(0|v)&0<(0|h)))break;u=0;do{for(s=0|br(u,m),l=0;r=(0|At(D,k))<<b&255,tr[d+(l+s)>>0]=r,(0|(l=l+1|0))!=(0|v););u=u+1|0}while((0|u)!=(0|h))}}while(0);return rt(D),ar[Z>>2]=ar[D>>2],tt(G),ur=c}if(G=(V=3==(0|s))?(0|J)/2|0:J,V=(V<<31>>31)+i|0,!(C=31==(0|i))){s=A+18556|0,d=A+18580|0,u=l=0;do{for(b=0;E=0|ot(s,12+(0|ar[d>>2])|0),l=(f=l)+1|0,ar[D+(f<<2)>>2]=E,(0|(b=b+G|0))<(0|J););u=u+G|0}while((0|u)<(0|J))}if(u=0<=((l=e+-1|0)|r|0)&&(0|ar[1248+a>>2])>=(0|e)&&(0|ar[1252+a>>2])>(0|r)&&(W=0|ar[5804+a>>2],f=0|br(r>>W,0|ar[5820+a>>2]),X=f+(e>>W)|0,W=f+(l>>W)|0,f=0|ar[10340+a>>2],(0|or[f+(24*X|0)>>1])==(0|or[f+(24*W|0)>>1]))?(u=0|ar[10308+a>>2],(0|ar[u+(X<<2)>>2])==(0|ar[u+(W<<2)>>2])&1):0,l=0<=((l=r+-1|0)|e|0)&&(0|ar[1248+a>>2])>(0|e)&&(0|ar[1252+a>>2])>=(0|r)&&(X=0|ar[5804+a>>2],W=0|ar[5820+a>>2],F=e>>X,I=(0|br(r>>X,W))+F|0,F=(0|br(l>>X,W))+F|0,W=0|ar[10340+a>>2],(0|or[W+(24*I|0)>>1])==(0|or[W+(24*F|0)>>1]))?(l=0|ar[10308+a>>2],(0|ar[l+(I<<2)>>2])==(0|ar[l+(F<<2)>>2])&1):0,!C){I=A+18556|0,W=0!=(0|u),v=0!=(0|l),m=5872+a|0,g=5876+a|0,Z=10408+a|0,p=10412+a|0,y=10400+a|0,B=4+o|0,E=8+o|0,l=h=0;do{f=h+r|0,X=v|0<(0|h),w=0;do{if(s=0|ar[D+(l<<2)>>2],b=s?(u=n,0|lt(I,2)):(u=t,0|ut(I,5)),ar[u+(l<<2)>>2]=b,F=w+e|0,k=0|ar[m>>2],k=(0|br(f>>k,0|ar[g>>2]))+(F>>k)|0,Ct(o,F,f,k,W|0<(0|w),X,a),u=1==(0|s)?0|ar[o+(ar[n+(l<<2)>>2]<<2)>>2]:(u=0|ar[o>>2],(0|(b=0|ar[B>>2]))<(0|u)?(ar[o>>2]=b,ar[B>>2]=u,s=b):(s=u,u=b),(0|(b=0|ar[E>>2]))<(0|s)?(ar[o>>2]=b,ar[E>>2]=s,d=s):(d=b,b=s),(0|d)<(0|u)?(ar[B>>2]=d,ar[E>>2]=u,s=d):(s=u,u=d),F=0|ar[t+(l<<2)>>2],((0|u)<=(0|(F=((0|s)<=(0|(F=((0|b)<=(0|F)&1)+F|0))&1)+F|0))&1)+F|0),F=V-(0|ar[Z>>2])|0,d=1<<F,31!=(0|F)){s=255&u,u=0;do{for(b=0;F=b+k+(0|br(0|ar[p>>2],u))|0,tr[(0|ar[y>>2])+F>>0]=s,(0|(b=b+1|0))<(0|d););u=u+1|0}while((0|u)<(0|d))}l=l+1|0,w=w+G|0}while((0|w)<(0|J));h=h+G|0}while((0|h)<(0|J))}d=5776+a|0;e:do{switch(0|ar[d>>2]){case 3:if(!C){h=A+18556|0,w=A+18580|0,v=10408+a|0,m=10412+a|0,g=10416+a|0,Z=10400+a|0,k=0;r:for(;;){p=k+r|0,d=0;do{if(y=d+e|0,s=0|ot(h,13+(0|ar[w>>2])|0)?0|ut(h,2):4,u=0|ar[v>>2],l=y>>u,u=p>>u,(0|l)<=-1){l=174;break r}if((0|(b=0|ar[m>>2]))<=(0|l)){l=174;break r}if((0|u)<=-1){l=175;break r}if((0|u)>=(0|ar[g>>2])){l=175;break r}l=(0|ar[Z>>2])+((0|br(b,u))+l)|0,l=0|cr[l>>0],(u=4==(0|s))||(D=0|ar[7948+(s<<2)>>2],l=(0|D)==(0|l)?34:D),Sa(a,y,p,V,l,u),d=d+G|0}while((0|d)<(0|J));if((0|J)<=(0|(k=k+G|0)))break e}174==(0|l)?sr(48482,48519,118,48539):175==(0|l)&&sr(48543,48519,119,48539)}break;case 0:break;default:s=0|ot(l=A+18556|0,13+(0|ar[A+18580>>2])|0)?0|ut(l,2):4,u=0|ar[10408+a>>2],l=e>>u,u=r>>u,(0|l)<=-1&&sr(48482,48519,118,48539),(0|(b=0|ar[10412+a>>2]))<=(0|l)&&sr(48482,48519,118,48539),(0|u)<=-1&&sr(48543,48519,119,48539),(0|u)>=(0|ar[10416+a>>2])&&sr(48543,48519,119,48539),l=(0|ar[10400+a>>2])+((0|br(b,u))+l)|0,l=0|cr[l>>0],(u=4==(0|s))||(J=0|ar[7948+(s<<2)>>2],l=(0|J)==(0|l)?34:J),2==(0|ar[d>>2])&&(l=0|cr[39292+l>>0]),Sa(a,e,r,i,l,u)}}while(0)}else{if(N){Oa(A,e,r,0,0,J,J,f,J,0);break}switch(0|s){case 1:Oa(A,e,r,0,0,J,D=(0|J)/2|0,f,J,0),Oa(A,e,r,0,D,J,D,f,J,1);break A;case 2:Oa(A,e,r,0,0,D=(0|J)/2|0,J,f,J,0),Oa(A,e,r,D,0,D,J,f,J,1);break A;case 4:Oa(A,e,r,0,0,J,D=(0|J)/4|0,f,J,0),Oa(A,e,r,0,D,J,(3<<i|0)/4|0,f,J,1);break A;case 5:Oa(A,e,r,0,0,J,D=(3<<i|0)/4|0,f,J,0),Oa(A,e,r,0,D,J,(0|J)/4|0,f,J,1);break A;case 6:Oa(A,e,r,0,0,D=(0|J)/4|0,J,f,J,0),Oa(A,e,r,D,0,(3<<i|0)/4|0,J,f,J,1);break A;case 7:Oa(A,e,r,0,0,D=(3<<i|0)/4|0,J,f,J,0),Oa(A,e,r,D,0,(0|J)/4|0,J,f,J,1);break A;case 3:Oa(A,e,r,0,0,D=(0|J)/2|0,D,f,J,0),Oa(A,e,r,D,0,D,D,f,J,1),Oa(A,e,r,0,D,D,D,f,J,2),Oa(A,e,r,D,D,D,D,f,J,3);break A;default:sr(44456,39242,4511,39327)}}}while(0);if(Y&&!(N&0!=(16&tr[A+26>>0]))&&0==(0|ot(A+18556|0,153+(0|ar[A+18580>>2])|0)))return ur=c;l=R?(0|ar[1396+a>>2])+_|0:0|ar[1392+a>>2];J=0!=(0|ar[5776+a>>2])&1,function A(e,r,i,f,n,t,o,a,c,l,u,b,s,d,k){e|=0;r|=0;i|=0;f|=0;n|=0;t|=0;o|=0;a|=0;c|=0;l|=0;u|=0;b|=0;s|=0;d|=0;k|=0;var h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0;X=e+18596|0;w=0|ar[X>>2];h=0|ar[w+10368>>2];v=r>>h;(0|v)<=-1&&sr(48482,48519,118,48539);W=1==(0|b);I=e+18556|0;C=e+18580|0;G=0!=(0|b);E=i;y=f;p=n;B=a;Z=l;g=w;m=v;f=i>>h;for(;;){if((0|(l=0|ar[g+10372>>2]))<=(0|m)){V=4;break}if((0|f)<=-1){V=7;break}if((0|(w=0|ar[g+10376>>2]))<=(0|f)){V=7;break}if(v=0|ar[g+10360>>2],i=v+(3*((0|br(l,f))+m|0)|0)|0,(65535&(i=(65535&(cr[i>>0]|cr[i+1>>0]<<8))>>>8&3)|0)!=(0|s)){V=9;break}if((n=(0|ar[g+5868>>2])<(0|B))||((0|u)<=(0|c)?1:(0|ar[g+5864>>2])>=(0|B))|G&0==(0|c)){if(f=E>>h,!(-1<(0|(a=r>>h))&(0|a)<(0|l))){V=16;break}if(!(-1<(0|f)&(0|f)<(0|w))){V=18;break}l=v+(3*((0|br(l,f))+a|0)|0)|0,l=1&(W&0==(0|c)|n|0!=(56&(cr[l>>0]|cr[l+1>>0]<<8))&(i<<16>>16==1?0==(ar[g+1392>>2]|c|0):0))}else{if(3<=(f=5-B|0)>>>0){V=13;break}l=0|ot(I,(0|ar[C>>2])+(f+20)|0)}if(w=0!=(0|l)){if(n=0|ar[g+10448>>2],f=r>>n,n=E>>n,(0|f)<=-1){V=23;break}if((0|(h=0|ar[g+10452>>2]))<=(0|f)){V=23;break}if((0|n)<=-1){V=26;break}if((0|n)>=(0|ar[g+10456>>2])){V=26;break}m=(0|ar[g+10440>>2])+((0|br(h,n))+f)|0,tr[m>>0]=0|cr[m>>0]|1<<c}if(3==(0|(g=0|ar[(a=g+5776|0)>>2]))|2<(0|B)&0!=(0|g)?(d<<24>>24?(f=c+16|0,n=0|ot(I,(0|ar[C>>2])+f|0),2==(0|ar[a>>2])&&3==(0|B)|0==(0|l)&&(n=(0|ot(I,(0|ar[C>>2])+f|0))<<1|n)):n=-1,k<<24>>24?(h=c+16|0,f=0|ot(I,(0|ar[C>>2])+h|0),2==(0|ar[a>>2])&&3==(0|B)|0==(0|l)&&(f=(0|ot(I,(0|ar[C>>2])+h|0))<<1|f)):f=-1,(0|n)<0?V=38:l=n):(f=-1,V=38),38==(0|V)){if((n=2==((V=0)|B))&0==(0|c)){V=39;break}l=n&0<(0|c)?255&d:0}if(h=(0|f)<0?2==(0|B)&0<(0|c)?255&k:0:f,!w){V=43;break}if(n=(a=1<<(f=B+-1|0))+r|0,a=a+E|0,A(e,r,E,r,E,t,o,f,c=c+1|0,0,u,b,s,d=255&l,k=255&h),A(e,n,E,r,E,t,o,f,c,1,u,b,s,d,k),A(e,r,a,r,E,t,o,f,c,2,u,b,s,d,k),g=0|ar[X>>2],h=0|ar[g+10368>>2],(0|(m=n>>h))<=-1){V=4;break}p=E,y=r,r=n,B=f,Z=3,f=(E=a)>>h}switch(0|V){case 4:sr(48482,48519,118,48539);break;case 7:sr(48543,48519,119,48539);break;case 9:sr(39344,39242,3827,39367);break;case 13:sr(39387,39242,1820,39416);break;case 16:sr(48482,48519,118,48539);break;case 18:sr(48543,48519,119,48539);break;case 23:sr(48482,48519,128,48539);break;case 26:sr(48543,48519,129,48539);break;case 39:sr(39444,39242,3894,39367);break;case 43:return i<<16>>16==0|0!=(l|c|h|0)?(V=0|ot(I,(0|ar[C>>2])+(0==(0|c)?15:14)|0),void za(e,r,E,y,p,t,o,B,0,Z,V,l,h)):void za(e,r,E,y,p,t,o,B,0,Z,V=1,l,h)}}(A,e,r,e,r,e,r,i,0,0,l,_,Q,J,J),ur=c}(A,B,y,Z,p)}if(48==(0|e))return}}function Ua(A,e,r,i,f){r|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0,l=0,u=0,b=0;if(t=(e|=0)>>(l=0|ar[(A|=0)+10368>>2]),u=r>>l,n=(i=1<<(l=i-l|0))+u|0,31!=(0|l)){a=i+t|0,c=A+10372|0,l=A+10360|0,o=(1&f)<<10&65535,i=u;do{for(f=t;u=(0|br(0|ar[c>>2],i))+f|0,u=(0|ar[l>>2])+(3*u|0)|0,b=-1025&(cr[u>>0]|cr[u+1>>0]<<8)|o,tr[u>>0]=b,tr[u+1>>0]=b>>8,(0|(f=f+1|0))<(0|a););i=i+1|0}while((0|i)<(0|n))}if(o=e>>(i=0|ar[A+10348>>2]),i=r>>i,(0|o)<=-1&&sr(48482,48519,128,48539),(0|(f=0|ar[A+10352>>2]))<=(0|o)&&sr(48482,48519,128,48539),(0|i)<=-1&&sr(48543,48519,129,48539),(0|i)<(0|ar[A+10356>>2]))return b=(0|ar[A+10340>>2])+(24*((0|br(f,i))+o|0)|0)+22|0,void(tr[b>>0]=1);sr(48543,48519,129,48539)}function Sa(A,e,r,i,f,n){e|=0,r|=0,f|=0;var t,o,a,c,l=0,u=0;if(c=255&((n|=0)?128|f:f),o=1<<(u=(i|=0)-(0|ar[(A|=0)+10408>>2])|0),l=0|ar[A+5872>>2],r=(0|br(r>>l,0|ar[(a=A+5876|0)>>2]))+(e>>l)|0,31!=(0|u)){t=A+5880|0,l=A+10432|0,u=A+10424|0,i=A+10420|0,n=0;A:for(;;){f=0;do{if((0|f)>=(0|ar[a>>2])){f=10;break A}if((0|n)>=(0|ar[t>>2])){f=11;break A}if((0|(e=r+f+(0|br(0|ar[l>>2],n))|0))>=(0|ar[u>>2])){f=12;break A}tr[(0|ar[i>>2])+e>>0]=c,f=f+1|0}while((0|f)<(0|o));if((0|o)<=(0|(n=n+1|0))){f=9;break}}9!=(0|f)&&(10==(0|f)?sr(39542,48519,659,39565):11==(0|f)?sr(39584,48519,660,39565):12==(0|f)&&sr(39608,48519,663,39565))}}function Oa(A,e,r,i,f,n,t,o,a,c){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l,u,b,s=0,d=0,k=0,h=0,w=0,v=0;if(l=0|ar[(w=(A|=0)+18600|0)>>2],k=0|ot(h=A+18556|0,147+(0|ar[(u=A+18580|0)>>2])|0),b=A+16|0,tr[(v=A+26|0)>>0]=(255&k)<<4&16|-17&tr[v>>0],k){A:do{if(2<=(0|ar[804+(0|ar[w>>2])>>2])&&0!=(0|ot(h,148+(0|ar[u>>2])|0)))if(1<((0|ar[804+(0|ar[w>>2])>>2])-1|0)){s=1;do{if(!(0|ct(h)))break A;s=s+1|0}while((0|s)<((0|ar[804+(0|ar[w>>2])>>2])-1|0))}else s=1;else s=0}while(0);o=31&tr[v>>0],s=(255&s)<<5&255}else{do{if(0|ar[20+l>>2])k=1;else{if(s=0|ar[u>>2],12!=(t+n|0)&&0|ot(h,s+156+o|0)){k=3;break}k=1+(0|ot(h,s+160|0))|0}}while(0);if(tr[v>>0]=-4&tr[v>>0]|3&k,2!=(0|k)){s=(0|ar[328+l>>2])-1|0;A:do{if(0!=(0|s)&&0!=(0|ot(h,154+(0|ar[u>>2])|0)))for(o=0;;){if((0|(d=o+1|0))==(0|s))break A;if(!(o=o?0|ct(h):0|ot(h,155+(0|ar[u>>2])|0))){s=d;break}o=d}else s=0}while(0);if(tr[b>>0]=s,xa(A,0,0,0),d=255&(0|ot(h,152+(0|ar[u>>2])|0)),tr[v>>0]=d<<2&4|-5&tr[v>>0],1==(0|k))return void mc(h=0|ar[(h=A+18592|0)>>2],w=0|ar[w>>2],v=0|ar[(v=A+18596|0)>>2],b,e,r,i,f,a,n,t,c)}d=(0|ar[332+l>>2])-1|0;A:do{if(0!=(0|d)&&0!=(0|ot(h,154+(0|ar[u>>2])|0)))for(o=0;;){if((0|(s=o+1|0))==(0|d)){s=d;break A}if(!(o=o?0|ct(h):0|ot(h,155+(0|ar[u>>2])|0)))break;o=s}else s=0}while(0);tr[A+17>>0]=s,3==(0|k)&0!=(0|tr[370+l>>0])?(or[A+22>>1]=0,or[A+24>>1]=0):xa(A,0,0,1),s=255&(0|ot(h,152+(0|ar[u>>2])|0)),o=-9&tr[v>>0],s=s<<3&8}tr[v>>0]=o|s,mc(h=0|ar[(h=A+18592|0)>>2],w=0|ar[w>>2],v=0|ar[(v=A+18596|0)>>2],b,e,r,i,f,a,n,t,c)}function za(A,e,r,i,f,n,t,o,a,c,l,u,b){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,b|=0;var s,d,k,h,w,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0;-1==(0|(u|=0))&&sr(39481,39242,3547,39494),-1==(0|b)&&sr(39514,39242,3548,39494),-1==(0|l)&&sr(39527,39242,3549,39494),g=0|ar[(w=A+18596|0)>>2],X=2<(0|(X=((1^(d=3==(0|(k=0|ar[g+5776>>2]))))<<31>>31)+o|0))?X:2,Z=b|u,tr[(v=A+33|0)>>0]=0,tr[v+1>>0]=0,tr[v+2>>0]=0,a=e>>(v=(tr[v+3>>0]=0)|ar[g+10368>>2]),v=r>>v,(0|a)<=-1&&sr(48482,48519,118,48539),(0|(m=0|ar[g+10372>>2]))<=(0|a)&&sr(48482,48519,118,48539),(0|v)<=-1&&sr(48543,48519,119,48539),(0|v)>=(0|ar[g+10376>>2])&&sr(48543,48519,119,48539),E=(0|ar[g+10360>>2])+(3*((0|br(m,v))+a|0)|0)|0,h=65535&(E=(65535&(cr[E>>0]|cr[E+1>>0]<<8))>>>8&3),s=0!=(0|l),m=0!=(0|Z);do{if(Z|l|0){if(0!=(0|tr[g+5946>>0])&&0==(0|ar[(p=A+18508|0)>>2])){v=A+18556|0,a=A+18580|0;do{if(0|ot(v,139+(0|ar[a>>2])|0)){if(0|ot(v,140+(0|ar[a>>2])|0))if(0|ot(v,140+(0|ar[a>>2])|0))if(0|ot(v,140+(0|ar[a>>2])|0))if(0|ot(v,140+(0|ar[a>>2])|0)){if(!(a=5+(0|bt(v,0))|0)){a=v=0;break}}else a=4;else a=3;else a=2;else a=1;v=0|ct(v)}else a=v=0}while(0);ar[p>>2]=1,g=0|br(1-(v<<1)|0,a),ar[A+18512>>2]=g,g=1}else g=0;if(m&0!=(0|tr[752+(0|ar[A+18600>>2])>>0])&&0==(0|tr[A+32>>0])&&0==(0|ar[(y=A+18516|0)>>2])?(p=0|ot(v=A+18556|0,23+(0|ar[(a=A+18580|0)>>2])|0),m=0|ar[w>>2],a=p?(a=1<(0|cr[m+10074>>0])?0|ot(v,24+(0|ar[a>>2])|0):0,ar[y>>2]=1,ar[A+18520>>2]=tr[m+10075+a>>0],0|tr[m+10081+a>>0]):(ar[y>>2]=1,ar[A+18520>>2]=0),ar[A+18524>>2]=a):B=33,33==(0|B)&&!g)break;zn(A,e,r,n,t)}}while(0);if(m=1<<o,p=1<<X,B=0|ar[w>>2],y=0|ar[B+5780>>2],B=0|ar[B+5784>>2],ar[(l=A+28|0)>>2]=0,s&&ja(A,e,r,o,0),Ha(A,e,r,n,t,m,0,h,s),!(2<(0|o)|d))return 3!=(0|c)?0:((a=0!=(1&u|0))&&ja(A,i,f,o,1),0|ar[5776+(0|ar[w>>2])>>2]&&Ha(A,(0|i)/(0|y)|0,(0|f)/(0|B)|0,(0|n)/(0|y)|0,(0|t)/(0|B)|0,m,1,h,a),(a=0!=(2&u|0))&&ja(A,i,m+f|0,o,1),(v=2==(0|k))&&Ha(A,(0|i)/(0|y)|0,((0|f)/(0|B)|0)+m|0,(0|n)/(0|y)|0,(0|t)/(0|B)|0,m,1,h,a),(a=0!=(1&b|0))&&ja(A,i,f,o,2),0|ar[5776+(0|ar[w>>2])>>2]&&Ha(A,(0|i)/(0|y)|0,(0|f)/(0|B)|0,(0|n)/(0|y)|0,(0|t)/(0|B)|0,m,2,h,a),(a=0!=(2&b|0))&&ja(A,i,p+f|0,o,2),v&&Ha(A,(0|i)/(0|y)|0,((0|f)/(0|B)|0)+m|0,(0|n)/(0|y)|0,(0|t)/(0|B)|0,m,2,h,a),0);g=0|ar[w>>2];A:do{if(s&0!=(0|tr[g+10071>>0])){do{if(E<<16>>16!=1){if(a=e>>(v=0|ar[g+10428>>2]),v=r>>v,(0|a)<=-1&&sr(48482,48519,118,48539),(0|(m=0|ar[g+10432>>2]))<=(0|a)&&sr(48482,48519,118,48539),(0|v)<=-1&&sr(48543,48519,119,48539),(0|v)<(0|ar[g+10436>>2])){if(o=(0|ar[g+10420>>2])+((0|br(m,v))+a)|0,(0|tr[o>>0])<0)break;v=a=0;break A}sr(48543,48519,119,48539)}}while(0);for(m=A+18556|0,g=A+18580|0,v=a=0;v=(1&(o=0!=(0|ot(m,(0|ar[g>>2])+(a+162)|0))))+v|0,(0|(a=a+1|0))<4&o;);v=(a=v?1-((0|ot(m,170+(0|ar[g>>2])|0))<<1)<<v+-1:0,1)}else v=a=0}while(0);if(ar[l>>2]=a,(a=0!=(1&u|0))&&ja(A,e,r,X,1),0|ar[5776+(0|ar[w>>2])>>2]&&Ha(A,(0|e)/(0|y)|0,(0|r)/(0|B)|0,(0|n)/(0|y)|0,(0|t)/(0|B)|0,p,1,h,a),(Z=2==(0|k))&&((a=0!=(2&u|0))&&ja(A,e,(B<<X)+r|0,X,1),Ha(A,(0|e)/(0|y)|0,((0|r)/(0|B)|0)+p|0,(0|n)/(0|y)|0,((0|t)/(0|B)|0)+p|0,p,1,h,a)),v){for(m=A+18556|0,g=A+18580|0,v=a=0;v=(1&(u=0!=(0|ot(m,(0|ar[g>>2])+(a+166)|0))))+v|0,(0|(a=a+1|0))<4&u;);a=v?1-((0|ot(m,171+(0|ar[g>>2])|0))<<1)<<v+-1:0}else a=0;return ar[l>>2]=a,(a=0!=(1&b|0))&&ja(A,e,r,X,2),0|ar[5776+(0|ar[w>>2])>>2]&&Ha(A,(0|e)/(0|y)|0,(0|r)/(0|B)|0,(0|n)/(0|y)|0,(0|t)/(0|B)|0,p,2,h,a),Z&&((a=0!=(2&b|0))&&ja(A,e,(B<<X)+r|0,X,2),Ha(A,(0|e)/(0|y)|0,((0|r)/(0|B)|0)+p|0,(0|n)/(0|y)|0,((0|t)/(0|B)|0)+p|0,p,2,h,a)),0}function ja(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0,fA=0,nA=0,tA=0,oA=0,aA=0,cA=0,lA=0,uA=0,bA=0;if(ur=(J=ur)+160|0,iA=J+144|0,_=J+80|0,Q=(Y=J)+64|0,D=J+48|0,N=J+32|0,rA=(fA=0|ar[(A|=0)+18596>>2])+764|0,z=e>>(j=0|ar[fA+10368>>2]),j=r>>j,(0|z)<=-1&&sr(48482,48519,118,48539),(0|(H=0|ar[fA+10372>>2]))<=(0|z)&&sr(48482,48519,118,48539),(0|j)<=-1&&sr(48543,48519,119,48539),(0|j)>=(0|ar[fA+10376>>2])&&sr(48543,48519,119,48539),AA=(0|ar[fA+10360>>2])+(3*((0|br(H,j))+z|0)|0)|0,AA=(65535&(cr[AA>>0]|cr[AA+1>>0]<<8))>>>8&3,(R=0==(0|f))&&(K=e>>(uA=0|ar[fA+10448>>2]),L=r>>uA,q=(x=1<<(uA=i-uA|0))+L|0,31!=(0|uA))){H=x+K|0,x=fA+10452|0,P=fA+10440|0,z=L;do{for(j=K;uA=(0|br(0|ar[x>>2],z))+j|0,uA=(0|ar[P>>2])+uA|0,tr[uA>>0]=-128|tr[uA>>0],(0|(j=j+1|0))<(0|H););z=z+1|0}while((0|z)<(0|q))}z=0!=(0|tr[fA+5945>>0])&&0==(0|tr[A+32>>0])&&(0|ar[fA+10100>>2])>=(0|i)?255&(0|ot(A+18556|0,(0|ar[A+18580>>2])+(0|f?142:141)|0)):0,tr[(uA=A+33+f|0)>>0]=z,tr[(F=A+36|0)>>0]=0;do{if(AA<<16>>16==1&&0!=(0|tr[fA+5751>>0])){if(0==(0|tr[uA>>0])&&0==(0|tr[A+32>>0])){bA=23;break}H=0!=(0|f)&1,lA=255&(0|ot(j=A+18556|0,143+(0|ar[(z=A+18580|0)>>2])+H|0)),(tr[F>>0]=lA)<<24>>24&&(lA=255&(0|ot(j,145+(0|ar[z>>2])+H|0)),tr[A+37>>0]=lA)}else bA=23}while(0);if(23==(0|bA)&&(tr[F>>0]=0),z=R?2:0,0==(0|tr[uA>>0])&&0==(0|tr[A+32>>0])||(z|=1),x=25+(0|ar[(V=A+18580|0)>>2])|0,$=(cA=i<<1)+-1|0,lA=i+-2|0,L=R?i+1>>2:lA,K=R?(3*lA|0)+(i+-1>>2)|0:15,1<(0|cA)){for(q=A+18556|0,j=$,H=0;j=(cA=0==(0|ot(q,x+((H>>L)+K)|0)))?H:j,(0|(H=H+1|0))<(0|$)&(1^cA););for(P=43+(0|ar[V>>2])|0,x=$,H=0;x=(cA=0==(0|ot(q,P+((H>>L)+K)|0)))?H:x,(0|(H=H+1|0))<(0|$)&(1^cA););}else j=x=$;if(H=(j>>1)-1|0,3<(0|j)&&(j=(0|ut(A+18556|0,H))+((1&j|2)<<H)|0),H=(x>>1)-1|0,L=3<(0|x)?(0|ut(A+18556|0,H))+((1&x|2)<<H)|0:x,cA=AA<<16>>16==0){do{if(R){if(H=e>>(x=0|ar[fA+10408>>2]),x=r>>x,(0|H)<=-1&&sr(48482,48519,118,48539),(0|(P=0|ar[fA+10412>>2]))<=(0|H)&&sr(48482,48519,118,48539),(0|x)<=-1&&sr(48543,48519,119,48539),(0|x)<(0|ar[fA+10416>>2])){eA=(0|ar[fA+10400>>2])+((0|br(P,x))+H)|0,eA=0|tr[eA>>0];break}sr(48543,48519,119,48539)}else{if(H=e>>(x=0|ar[fA+10428>>2]),x=r>>x,(0|H)<=-1&&sr(48482,48519,118,48539),(0|(P=0|ar[fA+10432>>2]))<=(0|H)&&sr(48482,48519,118,48539),(0|x)<=-1&&sr(48543,48519,119,48539),(0|x)<(0|ar[fA+10436>>2])){eA=(0|ar[fA+10420>>2])+((0|br(P,x))+H)|0,eA=63&tr[eA>>0];break}sr(48543,48519,119,48539)}}while(0);H=(aA=2==(0|(x=0|function(A,e,r,i){e|=0,r|=0,i|=0;var f=0;switch(0|(A|=0)){case 2:break;case 3:f=2;break;default:return 0}return 2==(0|f)&&0|r&&3!=(0|ar[i+5012>>2])?0:0|((e+-6|0)>>>0<9?2:(e+-22|0)>>>0<9&1)}(i,255&eA,f,rA))))?j:L,j=aA?L:j}else x=0,H=L;G=0|_a(lA,x),aA=0|_a(2,x),M=iA,T=j,U=H,S=x,O=i,M|=0,T|=0,U|=0,O=(0|ar[7852+(24*(S|=0)|0)+((O|=0)<<2)>>2])+((U<<O)+T<<1)|0,O=cr[O>>0]|cr[O+1>>0]<<8,tr[M>>0]=O,tr[M+1>>0]=O>>8,C=0|tr[iA+1>>0],E=0|cr[iA>>0],vb(0|_,0,1<<lA<<lA|0),W=A+18556|(or[(X=A+14404+(f<<1)|0)>>1]=0),I=0!=(0|f)&1,u=0!=(0|x)&1,b=(255&C)-1|0,s=fA+5749|0,d=A+32|0,k=R?42:43,h=C<<24>>24!=0,w=0<(0|f),v=fA+10408|0,m=fA+10412|0,g=fA+10416|0,Z=fA+10400|0,p=fA+5750|0,y=fA+5936|0,B=fA+5755|0,o=A+18588+z|0,a=fA+10428|0,c=fA+10432|0,l=fA+10436|0,n=fA+10420|0,t=1<(255&C),z=1,oA=E,j=AA=0;A:for(;;){K=0|tr[G+(oA<<1)>>0],q=0|tr[G+(oA<<1)+1>>0],(0|oA)<(0|E)&0!=(0|oA)?(tA=1&(tA=0|cr[_+((x=(H=255&q)<<lA)+(P=255&K))>>0])|tA>>>1,0|ot(W,(0|ar[V>>2])+((R?tA:tA+2|0)+61)|0)?(L=1,bA=59):(x=1,H=0)):0==(0|oA)|(0|oA)==(0|E)?(L=0,H=x=255&q,x<<=lA,P=255&K,bA=59):H=x=0,59==(0|bA)&&(x=_+(P+-1+x)|(bA=0),K<<24>>24&&(tr[x>>0]=1|tr[x>>0]),H=_+((H+-1<<lA)+P)|0,H=(x=(q<<24>>24&&(tr[H>>0]=2|tr[H>>0]),L),1));do{if(H){if(tA=($=255&K)<<2,nA=(q&=255)<<2,q=0|ar[57308+(lA<<6)+(I<<5)+(u<<4)+(cr[_+((q<<lA)+$)>>0]<<2)>>2],($=(0|oA)==(0|E))?(or[Y>>1]=1,tr[N>>0]=1,tr[Q>>0]=C,t?(K=b,H=x,x=1,bA=67):(H=x,x=1)):(K=15,H=x,x=0,bA=67),67==(0|bA))for(;;){P=((bA=0)|cr[aA+(K<<1)>>0])+tA|0,L=(0|cr[aA+(K<<1)+1>>0])+nA|0;do{if(0|tr[s>>0]){if(0|tr[d>>0]){P=k;break}0|tr[uA>>0]?P=k:bA=70}else bA=70}while(0);if(70==(0|bA)&&(P=(bA=0)|cr[q+(P+(L<<i))>>0]),0|ot(W,(0|ar[V>>2])+(P+65)|0)&&(or[Y+(x<<1)>>1]=1,tr[N+x>>0]=1,tr[Q+x>>0]=K,x=x+1|(H=0)),!(1<(0|K)))break;K=K+-1|0,bA=67}do{if(h|1^$){if(0|H){or[Y+(x<<1)>>1]=1,fA=x+(tr[N+x>>0]=1)|(tr[Q+x>>0]=0);break}do{if(0|tr[s>>0]){if(0|tr[d>>0]){H=k;break}0|tr[uA>>0]?H=k:bA=78}else bA=78}while(0);if(78==(0|bA)&&(H=(bA=0)|cr[q+((nA<<i)+tA)>>0]),!(0|ot(W,(0|ar[V>>2])+(H+65)|0))){fA=x;break}or[Y+(x<<1)>>1]=1,fA=x+(tr[N+x>>0]=1)|(tr[Q+x>>0]=0)}else fA=x}while(0);if(fA){q=0==(0|z)|(w|0==(0|oA)?0:2),L=(0|fA)<8?fA:8,$=0<(0|fA);do{if($){if(K=q<<2,w)for(P=0,x=-1,z=1,H=AA;j=P?0<(0|j)?1==(0|H)?0:j+1|0:j:1,z=(H=0|ot(W,(0|ar[V>>2])+(((0|j)<3?j:3)+K+125)|0))?(or[(z=Y+(P<<1)|0)>>1]=1+(0|or[z>>1])<<16>>16,x=-1==(0|x)?P:x,0):((z+-1|(tr[N+P>>0]=0))>>>0<2&1)+z|0,(0|(P=P+1|0))<(0|L););else for(P=0,x=-1,z=1,H=AA;j=P?0<(0|j)?1==(0|H)?0:j+1|0:j:1,z=(H=0|ot(W,(0|ar[V>>2])+(((0|j)<3?j:3)+K+109)|0))?(or[(z=Y+(P<<1)|0)>>1]=1+(0|or[z>>1])<<16>>16,x=-1==(0|x)?P:x,0):((z+-1|(tr[N+P>>0]=0))>>>0<2&1)+z|0,(0|(P=P+1|0))<(0|L););if(-1==(0|x))break;iA=0|ot(W,(0|ar[V>>2])+((w?4|q:q)+133)|0),or[(rA=Y+(x<<1)|0)>>1]=(0|lr[rA>>1])+iA,tr[N+x>>0]=iA}else z=1,H=AA}while(0);if(R){if(x=e>>(P=0|ar[v>>2]),P=r>>P,(0|x)<=-1){bA=102;break A}if((0|(L=0|ar[m>>2]))<=(0|x)){bA=102;break A}if((0|P)<=-1){bA=105;break A}if((0|P)>=(0|ar[g>>2])){bA=105;break A}x=(0|ar[Z>>2])+((0|br(L,P))+x)|0,x=0|tr[x>>0]}else{if(x=e>>(P=0|ar[a>>2]),P=r>>P,(0|x)<=-1){bA=109;break A}if((0|(L=0|ar[c>>2]))<=(0|x)){bA=109;break A}if((0|P)<=-1){bA=112;break A}if((0|P)>=(0|ar[l>>2])){bA=112;break A}x=(0|ar[n>>2])+((0|br(L,P))+x)|0,x=63&tr[x>>0]}e:do{if(0|tr[d>>0])P=0;else{do{if(cA){if(!(0|tr[p>>0]))break;if((16|x)<<24>>24==26&0!=(0|tr[uA>>0])){P=0;break e}}}while(0);if(0|tr[F>>0]){P=0;break}P=3<((0|tr[Q>>0])-(0|tr[Q+(fA+-1)>>0])|0)&1}}while(0);if(iA=fA+-1|0,1<(0|fA))for(x=0;rA=255&(0|ct(W)),tr[D+x>>0]=rA,(0|(x=x+1|0))!=(0|iA););if(x=(rA=0!=(0|P))&0!=(0|tr[y>>0])?0:255&(0|ct(W)),tr[D+iA>>0]=x,x=0|tr[B>>0]?(0|cr[o>>0])>>>2&255:0,!$)break;$=1,P=eA=0;do{AA=0|or[Y+(eA<<1)>>1];do{if(0|tr[N+eA>>0]){for(K=-1;;){if(L=K+1|0,q=0|ct(W),63<(0|K)){q=0;break}if(!q){bA=130;break}K=L}if(130==(0|bA)&&(((bA=0)|L)<4?K=0|ut(W,x):(K=0|ut(W,(L=K+-2|0)+x|0),L=2+(1<<L)|0),q=(L<<x)+K|0),K=0==(0|tr[B>>0]),L=x+1|0,x=(3<<x|0)<(q+AA|0)?!K||(0|L)<4?L:4:x,K|1^$){$=0;break}if((3<<(K=(255&(L=0|tr[o>>0]))>>>2&255)|0)<=(0|q)){tr[o>>0]=L+1<<24>>24,$=0;break}if(L<<24>>24==0|(1<<K|0)<=(q<<1|0)){$=0;break}tr[o>>0]=L+-1<<24>>24,$=0}else q=0}while(0);K=q+AA|0,L=65535&(q=0==(0|tr[D+eA>>0])?K:0-(65535&K)|0);do{if(rA&0!=(0|tr[y>>0])){if((0|eA)!=(0|iA)|0==(1&(P=K+P|0)|0))break;L=0-q&65535}}while(0);AA=0|tr[Q+eA>>0],q=(0|cr[aA+(AA<<1)>>0])+tA|0,AA=(0|cr[aA+(AA<<1)+1>>0])+nA|0,or[A+2116+(f<<11)+(or[X>>1]<<1)>>1]=L,or[A+8260+(f<<11)+(or[X>>1]<<1)>>1]=q+(AA<<i),or[X>>1]=1+(0|or[X>>1])<<16>>16,eA=eA+1|0}while((0|eA)!=(0|fA))}else H=AA}else H=AA}while(0);if(!(0<(0|oA))){bA=54;break}oA=oA+-1|0,AA=H}return 54==(0|bA)?ur=J:102==(0|bA)?sr(48482,48519,118,48539):105==(0|bA)?sr(48543,48519,119,48539):109==(0|bA)?sr(48482,48519,118,48539):112==(0|bA)&&sr(48543,48519,119,48539),0}function Ha(A,e,r,i,f,n,t,o,a){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0;var c,l,u,b=0,s=0,d=0;if(c=0|ar[(l=(A|=0)+18596|0)>>2],u=0==(0|o)){do{if(t){if(o=0|br(0|ar[5780+c>>2],e),s=0|br(0|ar[5784+c>>2],r),o>>=b=0|ar[10428+c>>2],b=s>>b,(0|o)<=-1&&sr(48482,48519,118,48539),(0|(s=0|ar[10432+c>>2]))<=(0|o)&&sr(48482,48519,118,48539),(0|b)<=-1&&sr(48543,48519,119,48539),(0|b)<(0|ar[10436+c>>2])){d=(0|ar[10420+c>>2])+((0|br(s,b))+o)|0,d=63&tr[d>>0];break}sr(48543,48519,119,48539)}else{if(o=e>>(b=0|ar[10408+c>>2]),b=r>>b,(0|o)<=-1&&sr(48482,48519,118,48539),(0|(s=0|ar[10412+c>>2]))<=(0|o)&&sr(48482,48519,118,48539),(0|b)<=-1&&sr(48543,48519,119,48539),(0|b)<(0|ar[10416+c>>2])){d=(0|ar[10400+c>>2])+((0|br(s,b))+o)|0,d=0|tr[d>>0];break}sr(48543,48519,119,48539)}}while(0);Gt(c,e,r,b=34<(255&d)?1:255&d,n,t);do{if(0|tr[5750+(0|ar[l>>2])>>0]){if(0==(0|tr[A+32>>0])&&0==(0|tr[A+33+t>>0])){o=0;break}o=26==(16|b)}else o=0}while(0);o=26==(0|b)&o?2:1&o}else o=0|tr[A+36>>0]?0|tr[A+37>>0]?2:1:0;a?jn(A,e,r,i,f,n,t,0!=(0|tr[A+33+t>>0]),u,o):t&&0|ar[A+28>>2]&&jn(A,e,r,i,f,n,t,(or[A+14404+(t<<1)>>1]=0)!=(0|tr[A+33+t>>0]),u,0)}function xa(A,e,r,i){e|=0,r|=0,i|=0;var f,n,t=0,o=0,a=0,c=0,l=0,u=0;ur=(n=ur)+16|0,l=n,t=0|ot(c=(A|=0)+18556|0,150+(0|ar[(r=A+18580|0)>>2])|0),e=0|ot(c,150+(0|ar[r>>2])|0),o=(t=0==(0|t))?0:0|ot(c,151+(0|ar[r>>2])|0),a=(f=0==(0|e))?0:0|ot(c,151+(0|ar[r>>2])|0),t?(r=l,e=0,u=11):(t=o?0|bt(c,1):-1,o=0|ct(c),e=t+2|0,ar[l>>2]=e,o?(r=l,e=-2-t|0,u=11):o=e),11==(0|u)&&(o=ar[r>>2]=e);do{if(!f){if(t=a?0|bt(c,1):-1,u=0|ct(c),e=t+2|0,ar[(r=l+4|0)>>2]=e,u){e=-2-t|0;break}return u=e,c=65535&o,or[(l=A+18+(i<<2)|0)>>1]=c,u&=65535,or[(i=A+18+(i<<2)+2|0)>>1]=u,void(ur=n)}r=l+4|0,e=0}while(0);u=ar[r>>2]=e,c=65535&o,or[(l=A+18+(i<<2)|0)>>1]=c,u&=65535,or[(i=A+18+(i<<2)+2|0)>>1]=u,ur=n}function Pa(A,e,r){A|=0;var i,f,n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;if(l=0|tr[(r|=0)+93784+(4400*(0|ar[(e|=0)+8>>2])|0)+2>>0],d=0|it(A),7<(tr[(a=e+380|0)>>0]=d)>>>0)return(w=0)|w;d=r+11096+(5168*l|0)+476|0;do{if(0|ar[d>>2]){if(c=0|ft(A),7<(c=(0|cr[a>>0])+c|0)>>>0)return(w=0)|w;tr[(s=e+381|0)>>0]=c;break}s=e+381|0}while(0);n=e+332|0,t=e+328|0,o=r+11096+(5168*l|0)+5164|0,i=r+11096+(5168*l|0)+5160|0,f=e+20|0,b=0;A:for(;;){if(c=0==(0|b))w=10;else if(1==(0|b)){if(0|ar[f>>2]){c=1,w=27;break}w=10}if(10==(0|w)&&(h=(w=0)<(0|(k=0|ar[(c?t:n)>>2])))){for(c=0;u=255&(0|At(A,1)),tr[e+382+(b<<4)+c>>0]=u,(0|(c=c+1|0))!=(0|k););if(0!=(0|ar[d>>2])&h)for(c=0;u=255&(0|At(A,1)),tr[e+414+(b<<4)+c>>0]=u,(0|(c=c+1|0))!=(0|k););if(h){u=0;do{if(0|tr[e+382+(b<<4)+u>>0]){if(255<((c=0|ft(A))+128|0)>>>0){c=0,w=27;break A}if(or[e+446+(b<<5)+(u<<1)>>1]=(1<<cr[a>>0])+c,c=0|ft(A),!((0-(l=0|ar[i>>2])|0)<=(0|c)&(0|c)<(0|l))){c=0,w=27;break A}c&=255}else or[e+446+(b<<5)+(u<<1)>>1]=1<<cr[a>>0],c=0;if(tr[e+510+(b<<4)+u>>0]=c,0|tr[e+414+(b<<4)+u>>0]){if(255<((c=0|ft(A))+128|0)>>>0){c=0,w=27;break A}if(or[(l=e+542+(b<<6)+(u<<2)|0)>>1]=(1<<cr[s>>0])+c,c=0|ft(A),r=0|ar[o>>2],!((0|c)>=(0|br(r,-4))&(0|c)<(r<<2|0))){c=0,w=27;break A}if(c=r+c-((l=0|br(0|or[l>>1],r))>>cr[s>>0])|0,l=0-r|0,tr[e+670+(b<<5)+(u<<1)>>0]=(0|c)<(0|l)?l:(0|c)<(0|r)?c:r+255|0,255<((c=0|ft(A))+128|0)>>>0){c=0,w=27;break A}if(or[(l=e+542+(b<<6)+(u<<2)+2|0)>>1]=(1<<cr[s>>0])+c,c=0|ft(A),r=0|ar[o>>2],!((0|c)>=(0|br(r,-4))&(0|c)<(r<<2|0))){c=0,w=27;break A}c=255&((0|(c=r+c-((l=0|br(0|or[l>>1],r))>>cr[s>>0])|0))<(0|(l=0-r|0))?l:(0|c)<(0|r)?c:r+255|0)}else c=1<<cr[s>>0]&65535,or[e+542+(b<<6)+(u<<2)>>1]=c,tr[e+670+(b<<5)+(u<<1)>>0]=0,or[e+542+(b<<6)+(u<<2)+2>>1]=c,c=0;tr[e+670+(b<<5)+(u<<1)+1>>0]=c,u=u+1|0}while((0|u)<(0|k))}}if(2<=(0|(b=b+1|0))){c=1,w=27;break}}return 27==(0|w)?0|c:0}function La(A){var e=0,r=0,i=0;for(ar[(A|=0)>>2]=0,tr[A+4>>0]=0,tr[A+5>>0]=0,ar[A+8>>2]=0,e=A+16|(tr[A+12>>0]=0),ar[A+28>>2]=0,tr[A+32>>0]=0,ar[e>>2]=0,ar[e+4>>2]=0,gc(A+34|(or[e+8>>1]=0)),ar[A+136>>2]=0,ar[A+140>>2]=0,e=ar[A+144>>2]=0;tr[A+148+e>>0]=0,ar[A+164+(e<<2)>>2]=0,tr[A+228+e>>0]=0,16!=((tr[A+244+e>>0]=0)|(e=e+1|(ar[A+260+(e<<2)>>2]=0))););for(e=A+324|0,ar[A+376>>2]=0,tr[A+380>>0]=0,i=(r=e)+48|(tr[A+381>>0]=0);(0|(r=r+4|(ar[r>>2]=0)))<(0|i););for(e=tr[e+48>>0]=0;tr[A+382+e>>0]=0,tr[A+414+e>>0]=0,or[A+446+(e<<1)>>1]=0,tr[A+510+e>>0]=0,or[A+542+(e<<2)+2>>1]=0,or[A+542+(e<<2)>>1]=0,16!=((tr[A+670+(e<<1)+1>>0]=0)|(e=e+1|(tr[A+670+(e<<1)>>0]=0))););for(e=0;tr[A+398+e>>0]=0,tr[A+430+e>>0]=0,or[A+478+(e<<1)>>1]=0,tr[A+526+e>>0]=0,or[A+606+(e<<2)+2>>1]=0,or[A+606+(e<<2)>>1]=0,16!=((tr[A+702+(e<<1)+1>>0]=0)|(e=e+1|(tr[A+702+(e<<1)>>0]=0))););for(r=A+736|0,ar[A+756>>2]=0,ar[A+760>>2]=0,tr[A+764>>0]=0,ar[A+768>>2]=0,ar[A+772>>2]=0,ar[r>>2]=0,ar[r+4>>2]=0,ar[r+8>>2]=0,ar[r+12>>2]=0,or[r+16>>1]=0,r=(tr[r+18>>0]=0)|ar[A+776>>2],(0|(e=0|ar[(i=A+780|0)>>2]))!=(0|r)&&(ar[i>>2]=e+(~((e+-4-r|0)>>>2)<<2)),ar[(e=A+788|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,gc(A+812|(ar[e+20>>2]=0)),e=ar[A+912>>2]=0;ar[A+916+(e<<6)>>2]=0,ar[A+1044+(e<<6)>>2]=0,ar[A+1172+(e<<6)>>2]=0,tr[A+1300+(e<<4)>>0]=0,ar[A+916+(e<<6)+4>>2]=0,ar[A+1044+(e<<6)+4>>2]=0,ar[A+1172+(e<<6)+4>>2]=0,tr[A+1300+(e<<4)+1>>0]=0,ar[A+916+(e<<6)+8>>2]=0,ar[A+1044+(e<<6)+8>>2]=0,ar[A+1172+(e<<6)+8>>2]=0,tr[A+1300+(e<<4)+2>>0]=0,ar[A+916+(e<<6)+12>>2]=0,ar[A+1044+(e<<6)+12>>2]=0,ar[A+1172+(e<<6)+12>>2]=0,tr[A+1300+(e<<4)+3>>0]=0,ar[A+916+(e<<6)+16>>2]=0,ar[A+1044+(e<<6)+16>>2]=0,ar[A+1172+(e<<6)+16>>2]=0,tr[A+1300+(e<<4)+4>>0]=0,ar[A+916+(e<<6)+20>>2]=0,ar[A+1044+(e<<6)+20>>2]=0,ar[A+1172+(e<<6)+20>>2]=0,tr[A+1300+(e<<4)+5>>0]=0,ar[A+916+(e<<6)+24>>2]=0,ar[A+1044+(e<<6)+24>>2]=0,ar[A+1172+(e<<6)+24>>2]=0,tr[A+1300+(e<<4)+6>>0]=0,ar[A+916+(e<<6)+28>>2]=0,ar[A+1044+(e<<6)+28>>2]=0,ar[A+1172+(e<<6)+28>>2]=0,tr[A+1300+(e<<4)+7>>0]=0,ar[A+916+(e<<6)+32>>2]=0,ar[A+1044+(e<<6)+32>>2]=0,ar[A+1172+(e<<6)+32>>2]=0,tr[A+1300+(e<<4)+8>>0]=0,ar[A+916+(e<<6)+36>>2]=0,ar[A+1044+(e<<6)+36>>2]=0,ar[A+1172+(e<<6)+36>>2]=0,tr[A+1300+(e<<4)+9>>0]=0,ar[A+916+(e<<6)+40>>2]=0,ar[A+1044+(e<<6)+40>>2]=0,ar[A+1172+(e<<6)+40>>2]=0,tr[A+1300+(e<<4)+10>>0]=0,ar[A+916+(e<<6)+44>>2]=0,ar[A+1044+(e<<6)+44>>2]=0,ar[A+1172+(e<<6)+44>>2]=0,tr[A+1300+(e<<4)+11>>0]=0,ar[A+916+(e<<6)+48>>2]=0,ar[A+1044+(e<<6)+48>>2]=0,ar[A+1172+(e<<6)+48>>2]=0,tr[A+1300+(e<<4)+12>>0]=0,ar[A+916+(e<<6)+52>>2]=0,ar[A+1044+(e<<6)+52>>2]=0,ar[A+1172+(e<<6)+52>>2]=0,tr[A+1300+(e<<4)+13>>0]=0,ar[A+916+(e<<6)+56>>2]=0,ar[A+1044+(e<<6)+56>>2]=0,ar[A+1172+(e<<6)+56>>2]=0,tr[A+1300+(e<<4)+14>>0]=0,ar[A+916+(e<<6)+60>>2]=0,ar[A+1044+(e<<6)+60>>2]=0,2!=((ar[A+1172+(e<<6)+60>>2]=0)|(e=e+1|(tr[A+1300+(e<<4)+15>>0]=0))););e=0|ar[A+1344>>2],(0|(i=0|ar[(r=A+1348|0)>>2]))!=(0|e)&&(ar[r>>2]=i+(~((i+-4-e|0)>>>2)<<2)),tr[(A=A+1340|0)>>0]=0}function Ka(){var A=0,e=0,r=0,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0;if(!(A=0|yc(11296)))return(g=0)|g;vb(0|A,-1,11296),ar[14327]=A,ar[14328]=A,ar[14329]=A,ar[14330]=A,ar[14331]=A,ar[14332]=A,ar[14333]=A,b=(ar[14334]=A)+16|0,ar[14335]=b,ar[14336]=b,ar[14337]=b,ar[14338]=b,ar[14339]=b,ar[14340]=b,ar[14341]=b,ar[14342]=b,ar[14343]=A+32,ar[14344]=A+96,ar[14345]=A+160,ar[14346]=A+224,ar[14347]=A+288,ar[14348]=A+352,ar[14349]=A+416,ar[14350]=A+480,ar[14351]=A+544,ar[14352]=A+608,ar[14353]=A+672,ar[14354]=A+736,ar[14355]=A+800,ar[14356]=A+864,ar[14357]=A+928,ar[14358]=A+992,b=A+1056|0,ar[14359]=b,ar[14363]=b,b=A+1312|0,ar[14360]=b,ar[14364]=b,b=A+1568|0,ar[14361]=b,ar[14365]=b,b=A+1824|0,ar[14362]=b,ar[14366]=b,b=A+2080|0,ar[14367]=b,ar[14371]=b,b=A+2336|0,ar[14368]=b,ar[14372]=b,b=A+2592|0,ar[14369]=b,ar[14373]=b,b=A+2848|0,ar[14370]=b,ar[14374]=b,b=A+3104|0,ar[14375]=b,ar[14379]=b,b=A+4128|0,ar[14376]=b,ar[14380]=b,b=A+5152|0,ar[14377]=b,ar[14381]=b,b=A+6176|0,ar[14378]=b,ar[14382]=b,b=A+7200|0,ar[14383]=b,ar[14387]=b,b=A+8224|0,ar[14384]=b,ar[14388]=b,b=A+9248|0,ar[14385]=b,ar[14389]=b,b=A+10272|0,ar[14386]=b,ar[14390]=b,b=2;A:for(;;){d=1==(0|(h=(s=1<<b)>>2)),k=b+-2|0,h=2==(0|h),u=0;do{w=0==(0|u),l=0;do{v=0==(0|l)?9:15,c=0;do{m=57308+(k<<6)+(u<<5)+(l<<4)+(c<<2)|0,a=0;do{if(i=a<<2,g=a<<b,f=0-a|0,n=a>>2,o=0==(0|(t=3&a))?2:1==(0|t)&1,d){e=0;do{if(A=0|cr[41489+(e+i)>>0],A=w?A:A+27|0,r=(0|ar[m>>2])+(e+g)|0,!((o=0|tr[r>>0])<<24>>24==-1|(255&o|0)==(0|A))){e=28;break A}tr[r>>0]=A,e=e+1|0}while((0|e)<(0|s))}else{r=0;do{do{if((0|r)!=(0|f)){switch(e=r>>2,A=3&r,0|c){case 0:A=2<(A=A+t|0)>>>0?0:0|A?1:2;break;case 1:A=o;break;case 2:A=0==(0|A)?2:1==(0|A)&1;break;default:A=2}if(w){if(A=0<(e+n|0)?A+3|0:A,h){A=A+v|0;break}A=A+21|0;break}if(h){A=A+9|0;break}A=A+12|0;break}A=0}while(0);if(A=w?A:A+27|0,e=(0|ar[m>>2])+(r+g)|0,!((i=0|tr[e>>0])<<24>>24==-1|(255&i|0)==(0|A))){e=28;break A}tr[e>>0]=A,r=r+1|0}while((0|r)<(0|s))}a=a+1|0}while((0|a)<(0|s));c=c+1|0}while((0|c)<4);l=l+1|0}while((0|l)<2);u=u+1|0}while((0|u)<2);if(6<=(0|(b=b+1|0))){A=1,e=30;break}}if(28==(0|e))sr(41505,39242,2100,41581);else if(30==(0|e))return 0|A;return 0}function qa(){Bc(0|ar[14327]),ar[14327]=0}function $a(A){var e,r=0;for(ar[(A|=0)+4720>>2]=0,ar[A+4724>>2]=0,function(A){var e,r=0,i=0;for(tr[(A|=0)>>0]=0,or[(r=A+2|0)>>1]=0,or[r+2>>1]=0,or[r+4>>1]=0,tr[r+6>>0]=0,ar[A+12>>2]=5,tr[A+16>>0]=0,tr[A+17>>0]=0,tr[A+18>>0]=2,tr[A+19>>0]=2,tr[A+20>>0]=2,ar[A+48>>2]=0,ar[A+52>>2]=0,r=A+60|(tr[A+56>>0]=0),e=(i=A+21|0)+24|0;(0|(i=i+1|(tr[i>>0]=0)))<(0|e););ar[r>>2]=1,tr[A+64>>0]=0,tr[A+65>>0]=0,tr[A+66>>0]=0,tr[A+67>>0]=1,tr[A+68>>0]=0,or[A+70>>1]=0,tr[A+72>>0]=2,tr[A+73>>0]=1,tr[A+74>>0]=15,tr[A+75>>0]=15}(A+4904|(ar[A+4728>>2]=0)),e=(r=A+4984|0)+9|0;(0|(r=r+1|(tr[r>>0]=0)))<(0|e););tr[A>>0]=0}function Ac(A){var e,r;(r=0|ar[(A|=0)+4720>>2])&&((0|(e=0|ar[(A=A+4724|0)>>2]))!=(0|r)&&(ar[A>>2]=e+(100*~(((e-100-r|0)>>>0)/100|0)|0)),vu(r))}function ec(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0;ur=(t=ur)+6240|0,n=(f=t)+96|0,l=0;A:for(;;){k=(d=3==(0|l))?2:6,w=3!=(0|l),b=(h=0==(0|l))?16:64,s=1<(0|l),u=0;do{c=n+(u<<10)|0,o=d&1==(0|u);do{if(!((255&(0|At(A,1)))<<24>>24)){if(-99999==(0|(e=0|it(A)))|(0|u)<(0|e)){a=31;break A}if(ar[(i=f+(24*l|0)+(u<<2)|0)>>2]=16,0|e){if(!(w|1==(0|e))){a=13;break A}hb(0|c,n+((o=u-e|0)<<10)|0,0|b),o=0|ar[f+(24*l|0)+(o<<2)>>2],ar[i>>2]=o,a=21;break}if(h){for(i=41646,o=(e=c)+16|0;tr[e>>0]=0|tr[i>>0],i=i+1|0,(0|(e=e+1|0))<(0|o););a=22;break}if((0|u)<3&(1^o)){for(i=41662,o=(e=c)+64|0;tr[e>>0]=0|tr[i>>0],i=i+1|0,(0|(e=e+1|0))<(0|o););o=16,a=21;break}for(i=41726,o=(e=c)+64|0;tr[e>>0]=0|tr[i>>0],i=i+1|0,(0|(e=e+1|0))<(0|o););o=16,a=21;break}if(s){if(254<((e=0|ft(A))+7|0)>>>0){a=31;break A}o=e+8|0,e=ar[f+(24*l|0)+(u<<2)>>2]=o}else e=8,o=16;for(a=0;;){if(255<((i=0|ft(A))+128|0)>>>0){a=31;break A}if(e=(e+256+i|0)%256|0,tr[n+(u<<10)+a>>0]=e,(0|b)<=(0|(a=a+1|0))){a=21;break}}}while(0);e:do{if(21==(0|a))switch((a=0)|l){case 0:a=22;break e;case 1:for(i=0|_a(3,0),e=0;tr[((0|cr[i+(e<<1)+1>>0])<<3)+(0|cr[i+(e<<1)>>0])+(r+96+(u<<6))>>0]=0|tr[n+(u<<10)+e>>0],64!=(0|(e=e+1|0)););break;case 2:for(i=0|_a(3,0),e=0;c=i+(e<<1)|0,v=i+(e<<1)+1|0,m=0|tr[n+(u<<10)+e>>0],tr[((0|cr[v>>0])<<5)+((0|cr[c>>0])<<1)+(r+480+(u<<8))>>0]=m,tr[((0|cr[c>>0])<<1|1)+((0|cr[v>>0])<<5)+(r+480+(u<<8))>>0]=m,tr[((0|cr[v>>0])<<5|16)+((0|cr[c>>0])<<1)+(r+480+(u<<8))>>0]=m,tr[((0|cr[v>>0])<<5|16)+((0|cr[c>>0])<<1|1)+(r+480+(u<<8))>>0]=m,64!=(0|(e=e+1|0)););tr[r+480+(u<<8)>>0]=o;break e;case 3:fc(m=r+2016+(u<<10)|0,c,3),tr[m>>0]=o;break e;default:break e}}while(0);if(22==(0|a))for(i=0|_a(2,0),e=0;tr[((0|cr[i+(e<<1)+1>>0])<<2)+(0|cr[i+(e<<1)>>0])+(r+(u<<4))>>0]=0|tr[n+(u<<10)+e>>0],16!=(0|(e=e+1|0)););u=u+1|0}while((0|u)<(0|k));if(4<=(0|(l=l+1|0))){e=0,a=32;break}}if(13==(0|a))sr(41810,41639,873,41847);else{if(31==(0|a))return ur=t,0|(m=8);if(32==(0|a))return ur=t,0|e}return 0}function rc(A){A|=0;var e=0,r=0,i=0,f=0,n=0,t=0,o=0;for(r=0|_a(2,0),e=0;tr[A+(((0|cr[r+(e<<1)+1>>0])<<2)+(0|cr[r+(e<<1)>>0]))>>0]=0|tr[41646+e>>0],16!=(0|(e=e+1|0)););for(r=0|_a(2,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<2)+(0|cr[r+(e<<1)>>0])+(A+16)>>0]=0|tr[41646+e>>0],16!=(0|(e=e+1|0)););for(r=0|_a(2,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<2)+(0|cr[r+(e<<1)>>0])+(A+32)>>0]=0|tr[41646+e>>0],16!=(0|(e=e+1|0)););for(r=0|_a(2,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<2)+(0|cr[r+(e<<1)>>0])+(A+48)>>0]=0|tr[41646+e>>0],16!=(0|(e=e+1|0)););for(r=0|_a(2,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<2)+(0|cr[r+(e<<1)>>0])+(A+64)>>0]=0|tr[41646+e>>0],16!=(0|(e=e+1|0)););for(r=0|_a(2,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<2)+(0|cr[r+(e<<1)>>0])+(A+80)>>0]=0|tr[41646+e>>0],16!=(0|(e=e+1|0)););for(r=0|_a(3,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<3)+(0|cr[r+(e<<1)>>0])+(A+96)>>0]=0|tr[41662+e>>0],64!=(0|(e=e+1|0)););for(r=0|_a(3,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<3)+(0|cr[r+(e<<1)>>0])+(A+288)>>0]=0|tr[41726+e>>0],64!=(0|(e=e+1|0)););for(r=0|_a(3,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<3)+(0|cr[r+(e<<1)>>0])+(A+160)>>0]=0|tr[41662+e>>0],64!=(0|(e=e+1|0)););for(r=0|_a(3,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<3)+(0|cr[r+(e<<1)>>0])+(A+352)>>0]=0|tr[41726+e>>0],64!=(0|(e=e+1|0)););for(r=0|_a(3,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<3)+(0|cr[r+(e<<1)>>0])+(A+224)>>0]=0|tr[41662+e>>0],64!=(0|(e=e+1|0)););for(r=0|_a(3,0),e=0;tr[((0|cr[r+(e<<1)+1>>0])<<3)+(0|cr[r+(e<<1)>>0])+(A+416)>>0]=0|tr[41726+e>>0],64!=(0|(e=e+1|0)););f=0;do{for(r=0|_a(3,0),e=0;i=r+(e<<1)|0,t=41662+e|0,tr[((0|cr[(n=r+(e<<1)+1|0)>>0])<<5)+((0|cr[i>>0])<<1)+(A+480+(f<<8))>>0]=0|tr[t>>0],tr[((0|cr[i>>0])<<1|1)+((0|cr[n>>0])<<5)+(A+480+(f<<8))>>0]=0|tr[t>>0],tr[((0|cr[n>>0])<<5|16)+((0|cr[i>>0])<<1)+(A+480+(f<<8))>>0]=0|tr[t>>0],tr[((0|cr[n>>0])<<5|16)+((0|cr[i>>0])<<1|1)+(A+480+(f<<8))>>0]=0|tr[t>>0],64!=(0|(e=e+1|0)););for(r=f+3|0,i=0|_a(3,0),e=0;t=i+(e<<1)|0,o=41726+e|0,tr[((0|cr[(n=i+(e<<1)+1|0)>>0])<<5)+((0|cr[t>>0])<<1)+(A+480+(r<<8))>>0]=0|tr[o>>0],tr[((0|cr[t>>0])<<1|1)+((0|cr[n>>0])<<5)+(A+480+(r<<8))>>0]=0|tr[o>>0],tr[((0|cr[n>>0])<<5|16)+((0|cr[t>>0])<<1)+(A+480+(r<<8))>>0]=0|tr[o>>0],tr[((0|cr[n>>0])<<5|16)+((0|cr[t>>0])<<1|1)+(A+480+(r<<8))>>0]=0|tr[o>>0],64!=(0|(e=e+1|0)););f=f+1|0}while(3!=(0|f));fc(A+2016|0,41662,3),fc(A+3040|0,41726,3)}function ic(A,e,r){return A|=0,e|=0,e=255&(0|At(r|=0,1)),tr[A>>0]=e,e=255&(0|At(r,1)),tr[A+1>>0]=e,e=255&(0|At(r,1)),tr[A+2>>0]=e,e=255&(0|At(r,1)),tr[A+3>>0]=e,e=255&(0|At(r,1)),tr[A+4>>0]=e,e=255&(0|At(r,1)),tr[A+5>>0]=e,e=255&(0|At(r,1)),tr[A+6>>0]=e,e=255&(0|At(r,1)),tr[A+7>>0]=e,r=255&(0|At(r,1)),tr[A+8>>0]=r,0}function fc(A,e,r){A|=0,e|=0;var i=0,f=0,n=0,t=0,o=0;switch(0|(r|=0)){case 0:for(i=0|_a(2,0),r=0;tr[A+(((0|cr[i+(r<<1)+1>>0])<<2)+(0|cr[i+(r<<1)>>0]))>>0]=0|tr[e+r>>0],16!=(0|(r=r+1|0)););return;case 1:for(i=0|_a(3,0),r=0;tr[A+(((0|cr[i+(r<<1)+1>>0])<<3)+(0|cr[i+(r<<1)>>0]))>>0]=0|tr[e+r>>0],64!=(0|(r=r+1|0)););return;case 2:for(i=0|_a(3,0),r=0;o=i+(r<<1)+1|0,n=e+r|0,tr[A+(((0|cr[(t=i+(r<<1)|0)>>0])<<1)+((0|cr[o>>0])<<5))>>0]=0|tr[n>>0],tr[A+(((0|cr[t>>0])<<1|1)+((0|cr[o>>0])<<5))>>0]=0|tr[n>>0],tr[A+(((0|cr[t>>0])<<1)+((0|cr[o>>0])<<5|16))>>0]=0|tr[n>>0],tr[A+(((0|cr[t>>0])<<1|1)+((0|cr[o>>0])<<5|16))>>0]=0|tr[n>>0],64!=(0|(r=r+1|0)););return;case 3:f=0|_a(3,0),i=0;do{for(n=f+(i<<1)|0,t=f+(i<<1)+1|0,o=e+i|0,r=0;tr[A+(((0|cr[n>>0])<<2)+(((0|cr[t>>0])<<2)+r<<5))>>0]=0|tr[o>>0],tr[A+(((0|cr[n>>0])<<2|1)+(((0|cr[t>>0])<<2)+r<<5))>>0]=0|tr[o>>0],tr[A+(((0|cr[n>>0])<<2|2)+(((0|cr[t>>0])<<2)+r<<5))>>0]=0|tr[o>>0],tr[A+(((0|cr[n>>0])<<2|3)+(((0|cr[t>>0])<<2)+r<<5))>>0]=0|tr[o>>0],4!=(0|(r=r+1|0)););i=i+1|0}while(64!=(0|i));return;default:sr(44456,41639,810,41790)}}function nc(A,e,r,i,f){A|=0,e|=0,i|=0;var n,t=0,o=0,a=0,c=0,l=0;if(ur=(n=ur)+144|0,c=n,4==(0|(r|=0))|1==(0|(f|=0)))ur=n;else{switch(f=(0|(l=(0|f)<26?26-f|0:f+-26|0))<(0|(f=(0|f)<10?10-f|0:f+-10|0))?l:f,0|r){case 8:t=7;break;case 16:t=1;break;case 32:t=0;break;default:sr(55739,48289,518,48361)}if((0|f)<=(0|t))ur=n;else{if(f=32==(0|r)&(0==(0|i)&0!=(0|tr[A+5665>>0]))&&(o=0|cr[e>>0],(0|((0|(l=(0|cr[e+64>>0])+o-(cr[e+32>>0]<<1)|0))<0?0-l|0:l))<(0|(a=1<<(0|ar[A+1276>>2])-5)))?(0|((0|(f=(0|cr[e+-64>>0])+o-(cr[e+-32>>0]<<1)|0))<0?0-f|0:f))<(0|a):0,i=c+64|0,a=0|br(r,-2),tr[i+a>>0]=0|tr[e+a>>0],tr[i+(a=r<<1)>>0]=0|tr[e+a>>0],f)for(t=0|tr[e>>0],tr[i>>0]=t,t&=255,A=(0|cr[e+-64>>0])-t|0,o=(0|cr[e+64>>0])-t|0,f=1;l=((32+(0|br(A,f))|0)>>>6)+t&255,tr[i+(0-f)>>0]=l,l=((32+(0|br(o,f))|0)>>>6)+t&255,tr[i+f>>0]=l,64!=(0|(f=f+1|0)););else if((0|(f=1-a|0))<(0|a))for(f=0|tr[e+(t=f)>>0];c=f,f=0|tr[e+(t=(l=t)+1|0)>>0],tr[i+l>>0]=(2+(255&f)+((255&c)<<1)+(0|cr[e+(l+-1)>>0])|0)>>>2,(0|t)!=(0|a););hb(e+(l=0-a|0)|0,i+l|0,r<<2|1),ur=n}}}function tc(A,e,r,i,f){A|=0,e|=0,i|=0;var n,t=0,o=0,a=0,c=0,l=0;if(ur=(n=ur)+272|0,c=n,4==(0|(r|=0))|1==(0|(f|=0)))ur=n;else{switch(f=(0|(l=(0|f)<26?26-f|0:f+-26|0))<(0|(f=(0|f)<10?10-f|0:f+-10|0))?l:f,0|r){case 8:t=7;break;case 16:t=1;break;case 32:t=0;break;default:sr(55739,48289,518,48361)}if((0|f)<=(0|t))ur=n;else{if(f=32==(0|r)&(0==(0|i)&0!=(0|tr[A+5665>>0]))&&(o=0|lr[e>>1],(0|((0|(l=(0|lr[e+128>>1])+o-(lr[e+64>>1]<<1)|0))<0?0-l|0:l))<(0|(a=1<<(0|ar[A+1276>>2])-5)))?(0|((0|(f=(0|lr[e+-128>>1])+o-(lr[e+-64>>1]<<1)|0))<0?0-f|0:f))<(0|a):0,i=c+128|0,a=0|br(r,-2),or[i+(a<<1)>>1]=0|or[e+(a<<1)>>1],or[i+((a=r<<1)<<1)>>1]=0|or[e+(a<<1)>>1],f)for(t=0|or[e>>1],or[i>>1]=t,t&=65535,A=(0|lr[e+-128>>1])-t|0,o=(0|lr[e+128>>1])-t|0,f=1;l=((32+(0|br(A,f))|0)>>>6)+t&65535,or[i+(0-f<<1)>>1]=l,l=((32+(0|br(o,f))|0)>>>6)+t&65535,or[i+(f<<1)>>1]=l,64!=(0|(f=f+1|0)););else if((0|(f=1-a|0))<(0|a))for(f=0|or[e+((t=f)<<1)>>1];c=f,f=0|or[e+((t=(l=t)+1|0)<<1)>>1],or[i+(l<<1)>>1]=(2+(65535&f)+((65535&c)<<1)+(0|lr[e+(l+-1<<1)>>1])|0)>>>2,(0|t)!=(0|a););hb(e+((l=0-a|0)<<1)|0,i+(l<<1)|0,r<<3|2),ur=n}}}function oc(A){ar[(A|=0)+8>>2]=1732584193,ar[A+12>>2]=-271733879,ar[A+16>>2]=-1732584194,ar[A+20>>2]=271733878,ar[A>>2]=0,ar[A+4>>2]=0}function ac(A,e,r){e|=0,r|=0;var i,f,n=0,t=0;f=(t=0|ar[(A|=0)>>2])+r&536870911,ar[A>>2]=f,n=0|ar[(i=A+4|0)>>2],f>>>0<t>>>0&&(n=n+1|0,ar[i>>2]=n),ar[i>>2]=n+(r>>>29),n=63&t;do{if(n){if(t=64-n|0,n=A+24+n|0,t>>>0<=r>>>0){hb(0|n,0|e,0|t),cc(A,A+24|0,64),e=e+t|0,r=r-t|0;break}return void hb(0|n,0|e,0|r)}}while(0);63<r>>>0&&(e=0|cc(A,e,-64&r),r&=63),hb(A+24|0,0|e,0|r)}function cc(A,e,r){e|=0,r|=0;var i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0;for(g=(A|=0)+12|0,Z=A+16|0,p=A+20|0,f=A+88|0,n=A+92|0,t=A+96|0,o=A+100|0,a=A+104|0,c=A+108|0,l=A+112|0,u=A+116|0,b=A+120|0,s=A+124|0,d=A+128|0,k=A+132|0,h=A+136|0,w=A+140|0,v=A+144|0,i=A+148|0,A=0|ar[(m=A+8|0)>>2],y=0|ar[g>>2],B=0|ar[p>>2],E=0|ar[Z>>2];X=(0|cr[e+1>>0])<<8|0|cr[e>>0]|(0|cr[e+2>>0])<<16|(0|cr[e+3>>0])<<24,X=((X=A+-680876936+(y&(B^E)^B)+(ar[f>>2]=X)|0)<<7|X>>>25)+y|0,W=(0|cr[e+5>>0])<<8|0|cr[e+4>>0]|(0|cr[e+6>>0])<<16|(0|cr[e+7>>0])<<24,W=((W=B+-389564586+(ar[n>>2]=W)+(X&(y^E)^E)|0)<<12|W>>>20)+X|0,I=(0|cr[e+9>>0])<<8|0|cr[e+8>>0]|(0|cr[e+10>>0])<<16|(0|cr[e+11>>0])<<24,I=((I=E+606105819+(ar[t>>2]=I)+(W&(X^y)^y)|0)<<17|I>>>15)+W|0,j=(0|cr[e+13>>0])<<8|0|cr[e+12>>0]|(0|cr[e+14>>0])<<16|(0|cr[e+15>>0])<<24,j=((j=y+-1044525330+(ar[o>>2]=j)+(I&(W^X)^X)|0)<<22|j>>>10)+I|0,Y=(0|cr[e+17>>0])<<8|0|cr[e+16>>0]|(0|cr[e+18>>0])<<16|(0|cr[e+19>>0])<<24,Y=((Y=X+-176418897+(ar[a>>2]=Y)+(j&(I^W)^W)|0)<<7|Y>>>25)+j|0,X=(0|cr[e+21>>0])<<8|0|cr[e+20>>0]|(0|cr[e+22>>0])<<16|(0|cr[e+23>>0])<<24,X=((X=W+1200080426+(ar[c>>2]=X)+(Y&(j^I)^I)|0)<<12|X>>>20)+Y|0,W=(0|cr[e+25>>0])<<8|0|cr[e+24>>0]|(0|cr[e+26>>0])<<16|(0|cr[e+27>>0])<<24,W=((W=I+-1473231341+(ar[l>>2]=W)+(X&(Y^j)^j)|0)<<17|W>>>15)+X|0,I=(0|cr[e+29>>0])<<8|0|cr[e+28>>0]|(0|cr[e+30>>0])<<16|(0|cr[e+31>>0])<<24,I=((I=j+-45705983+(ar[u>>2]=I)+(W&(X^Y)^Y)|0)<<22|I>>>10)+W|0,j=(0|cr[e+33>>0])<<8|0|cr[e+32>>0]|(0|cr[e+34>>0])<<16|(0|cr[e+35>>0])<<24,j=((j=Y+1770035416+(ar[b>>2]=j)+(I&(W^X)^X)|0)<<7|j>>>25)+I|0,Y=(0|cr[e+37>>0])<<8|0|cr[e+36>>0]|(0|cr[e+38>>0])<<16|(0|cr[e+39>>0])<<24,X=((X=(ar[s>>2]=Y)+-1958414417+X+(j&(I^W)^W)|0)<<12|X>>>20)+j|0,Y=(0|cr[e+41>>0])<<8|0|cr[e+40>>0]|(0|cr[e+42>>0])<<16|(0|cr[e+43>>0])<<24,W=((W=(ar[d>>2]=Y)+-42063+W+(X&(j^I)^I)|0)<<17|W>>>15)+X|0,Y=(0|cr[e+45>>0])<<8|0|cr[e+44>>0]|(0|cr[e+46>>0])<<16|(0|cr[e+47>>0])<<24,I=((I=(ar[k>>2]=Y)+-1990404162+I+(W&(X^j)^j)|0)<<22|I>>>10)+W|0,Y=(0|cr[e+49>>0])<<8|0|cr[e+48>>0]|(0|cr[e+50>>0])<<16|(0|cr[e+51>>0])<<24,j=((j=(ar[h>>2]=Y)+1804603682+j+(I&(W^X)^X)|0)<<7|j>>>25)+I|0,Y=(0|cr[e+53>>0])<<8|0|cr[e+52>>0]|(0|cr[e+54>>0])<<16|(0|cr[e+55>>0])<<24,X=((X=(ar[w>>2]=Y)+-40341101+X+(j&(I^W)^W)|0)<<12|X>>>20)+j|0,Y=(0|cr[e+57>>0])<<8|0|cr[e+56>>0]|(0|cr[e+58>>0])<<16|(0|cr[e+59>>0])<<24,W=((W=(ar[v>>2]=Y)+-1502002290+W+(X&(j^I)^I)|0)<<17|W>>>15)+X|0,Y=(0|cr[e+61>>0])<<8|0|cr[e+60>>0]|(0|cr[e+62>>0])<<16|(0|cr[e+63>>0])<<24,I=((I=(ar[i>>2]=Y)+1236535329+I+(W&(X^j)^j)|0)<<22|I>>>10)+W|0,j=((j=(D=0|ar[n>>2])+-165796510+j+((I^W)&X^W)|0)<<5|j>>>27)+I|0,X=((X=(_=0|ar[l>>2])+-1069501632+X+((j^I)&W^I)|0)<<9|X>>>23)+j|0,W=((W=(F=0|ar[k>>2])+643717713+W+((X^j)&I^j)|0)<<14|W>>>18)+X|0,I=((I=(z=0|ar[f>>2])+-373897302+I+((W^X)&j^X)|0)<<20|I>>>12)+W|0,j=((j=(U=0|ar[c>>2])+-701558691+j+((I^W)&X^W)|0)<<5|j>>>27)+I|0,W=((W=Y+-660478335+W+(((X=((X=(J=0|ar[d>>2])+38016083+X+((j^I)&W^I)|0)<<9|X>>>23)+j|0)^j)&I^j)|0)<<14|W>>>18)+X|0,I=((I=(R=0|ar[a>>2])+-405537848+I+((W^X)&j^X)|0)<<20|I>>>12)+W|0,j=((j=(G=0|ar[s>>2])+568446438+j+((I^W)&X^W)|0)<<5|j>>>27)+I|0,X=((X=(S=0|ar[v>>2])+-1019803690+X+((j^I)&W^I)|0)<<9|X>>>23)+j|0,W=((W=(M=0|ar[o>>2])+-187363961+W+((X^j)&I^j)|0)<<14|W>>>18)+X|0,I=((I=(Q=0|ar[b>>2])+1163531501+I+((W^X)&j^X)|0)<<20|I>>>12)+W|0,j=((j=(N=0|ar[w>>2])+-1444681467+j+((I^W)&X^W)|0)<<5|j>>>27)+I|0,X=((X=(V=0|ar[t>>2])+-51403784+X+((j^I)&W^I)|0)<<9|X>>>23)+j|0,C=(W=((W=(O=0|ar[u>>2])+1735328473+W+((X^j)&I^j)|0)<<14|W>>>18)+X|0)^X,A=(C=((C=R+-145523070+(C=((C=Q+1873313359+(C=((C=(T=0|ar[h>>2])+1700485571+(C=((C=z+-198630844+(C=((C=G+-640364487+(C=((C=N+681279174+(C=((C=D+-1530992060+(C=((C=U+-378558+j+(C^(I=((I=T+-1926607734+I+(C&j^X)|0)<<20|I>>>12)+W|0))|0)<<4|C>>>28)+I|0)+((W=((W=F+1839030562+W+(C^I^(X=((X=Q+-2022574463+X+(I^W^C)|0)<<11|X>>>21)+C|0))|0)<<16|W>>>16)+X|0)^X^(I=((I=S+-35309556+I+(X^C^W)|0)<<23|I>>>9)+W|0))|0)<<4|C>>>28)+I|0)+((W=((W=O+-155497632+W+(C^I^(X=((X=R+1272893353+X+(I^W^C)|0)<<11|X>>>21)+C|0))|0)<<16|W>>>16)+X|0)^X^(I=((I=J+-1094730640+I+(X^C^W)|0)<<23|I>>>9)+W|0))|0)<<4|C>>>28)+I|0)+((W=((W=M+-722521979+W+(C^I^(X=((X=z+-358537222+X+(I^W^C)|0)<<11|X>>>21)+C|0))|0)<<16|W>>>16)+X|0)^X^(I=((I=_+76029189+I+(X^C^W)|0)<<23|I>>>9)+W|0))|0)<<4|C>>>28)+I|0)+(((I=((I=V+-995338651+I+((X=((X=T+-421815835+X+(I^W^C)|0)<<11|X>>>21)+C|0)^C^(W=((W=Y+530742520+W+(C^I^X)|0)<<16|W>>>16)+X|0))|0)<<23|I>>>9)+W|0)|~X)^W)|0)<<6|C>>>26)+I|0)+(((I=((I=U+-57434055+I+(((W=((W=S+-1416354905+W+(((X=((X=O+1126891415+X+((C|~W)^I)|0)<<10|X>>>22)+C|0)|~I)^C)|0)<<15|W>>>17)+X|0)|~C)^X)|0)<<21|I>>>11)+W|0)|~X)^W)|0)<<6|C>>>26)+I|0)+(((I=((I=D+-2054922799+I+(((W=((W=J+-1051523+W+(((X=((X=M+-1894986606+X+((C|~W)^I)|0)<<10|X>>>22)+C|0)|~I)^C)|0)<<15|W>>>17)+X|0)|~C)^X)|0)<<21|I>>>11)+W|0)|~X)^W)|0)<<6|C>>>26)+I|0)+(((I=((I=N+1309151649+I+(((W=((W=_+-1560198380+W+(((X=((X=Y+-30611744+X+((C|~W)^I)|0)<<10|X>>>22)+C|0)|~I)^C)|0)<<15|W>>>17)+X|0)|~C)^X)|0)<<21|I>>>11)+W|0)|~X)^W)|0)<<6|C>>>26)+I|0)+A|0,y=(W=((W=V+718787259+W+(((X=((X=F+-1120210379+X+((C|~W)^I)|0)<<10|X>>>22)+C|0)|~I)^C)|0)<<15|W>>>17)+X|0)+y+((I=G+-343485551+I+((W|~C)^X)|0)<<21|I>>>11)|0,E=W+E|0,B=X+B|0,e=e+64|0,0!=(0|(r=r+-64|0)););return ar[m>>2]=A,ar[g>>2]=y,ar[Z>>2]=E,ar[p>>2]=B,0|e}function lc(A,e){A|=0;var r=0,i=0,f=0;r=(i=63&ar[(e|=0)>>2])+1|0,tr[e+24+i>>0]=-128,f=e+24|0,(i^=63)>>>0<8?(vb(e+24+r|0,0,0|i),cc(e,f,64),i=56,r=0):i=i+-8|0,vb(e+24+r|0,0,0|i),r=(i=0|ar[e>>2])<<3,ar[e>>2]=r,tr[e+80>>0]=r,tr[e+81>>0]=i>>>5,tr[e+82>>0]=i>>>13,tr[e+83>>0]=i>>>21,i=0|ar[e+4>>2],tr[e+84>>0]=i,tr[e+85>>0]=i>>>8,tr[e+86>>0]=i>>>16,tr[e+87>>0]=i>>>24,cc(e,f,64),f=e+8|0,tr[A>>0]=ar[f>>2],tr[A+1>>0]=(0|ar[f>>2])>>>8,tr[A+2>>0]=(0|ar[f>>2])>>>16,tr[A+3>>0]=(0|ar[f>>2])>>>24,f=e+12|0,tr[A+4>>0]=ar[f>>2],tr[A+5>>0]=(0|ar[f>>2])>>>8,tr[A+6>>0]=(0|ar[f>>2])>>>16,tr[A+7>>0]=(0|ar[f>>2])>>>24,f=e+16|0,tr[A+8>>0]=ar[f>>2],tr[A+9>>0]=(0|ar[f>>2])>>>8,tr[A+10>>0]=(0|ar[f>>2])>>>16,tr[A+11>>0]=(0|ar[f>>2])>>>24,f=e+20|0,tr[A+12>>0]=ar[f>>2],tr[A+13>>0]=(0|ar[f>>2])>>>8,tr[A+14>>0]=(0|ar[f>>2])>>>16,tr[A+15>>0]=(0|ar[f>>2])>>>24,vb(0|e,0,152)}function uc(A,e,r,i,f,n,t,o,a,c,l,u,b){A|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0;var s,d,k,h,w,v,m,g,Z,p=0,y=0,B=0,E=0,X=0,W=0,I=0;if(ur=(Z=ur)+20448|0,d=(W=Z)+9088|0,k=3&(r|=0),h=3&(i|=0),g=(r>>2)+(f|=0)|0,m=(i>>2)+(n|=0)|0,y=14-(0|ar[(e|=0)+4996>>2])|0,v=0|ar[e+484>>2],w=0|ar[e+488>>2],3&(i|r)){if(y=0|ar[9768+(k<<2)>>2],n=0|ar[9784+(k<<2)>>2],s=0|ar[9768+(h<<2)>>2],f=0|ar[9784+(h<<2)>>2],p=0-y|0,-1<(m-s|g-y|0)&&(g+l+n|0)<(0|v)&&(m+u+f|0)<(0|w))f=a+((0|br(m,n=c))+g<<1)|0;else{if((0|(e=0-s|0))<(0|(i=f+u|0))&&(E=v-1|0,X=w-1|0,(0|p)<(0|(B=n+l|0))))do{for(n=0|br((0|(n=e+m|0))<0?0:(0|n)<(0|w)?n:X,c),r=(80*(e+s|0)|0)+y|0,f=p;I=f+g|0,or[d+(r+f<<1)>>1]=0|or[a+(((0|I)<0?0:(0|I)<(0|v)?I:E)+n<<1)>>1],(0|(f=f+1|0))!=(0|B););e=e+1|0}while((0|e)!=(0|i));f=d+(((n=80)*s|0)+y<<1)|0}(0|b)<9?cs[31&ar[A+220+(k<<4)+(h<<2)>>2]](t,o,f,n,l,u,W):ls[31&ar[A+300+(k<<4)+(h<<2)>>2]](t,o,f,n,l,u,W,b),ur=Z}else{if(!((m|g|0)<0|(0|v)<(g+l|0)|(0|w)<(m+u|0)))return f=a+((0|br(m,c))+g<<1)|0,(0|b)<9?cs[31&ar[A+220>>2]](t,o,f,c,l,u,W):ls[31&ar[A+300>>2]](t,o,f,c,l,u,W,b),void(ur=Z);if((0|u)<=0)return void(ur=Z);if(e=v-1|0,r=w-1|0,!(0<(0|l)))return void(ur=Z);f=0;do{for(i=0|br((0|(i=f+m|0))<0?0:(0|i)<(0|w)?i:r,c),p=0|br(f,o),n=0;W=n+g|0,or[t+(n+p<<1)>>1]=(0|lr[a+(((0|W)<0?0:(0|W)<(0|v)?W:e)+i<<1)>>1])<<y,(0|(n=n+1|0))!=(0|l););f=f+1|0}while((0|f)!=(0|u));ur=Z}}function bc(A,e,r,i,f,n,t,o,a,c,l,u,b){A|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0;var s,d,k,h,w,v,m,g,Z,p=0,y=0,B=0,E=0,X=0,W=0,I=0;if(ur=(Z=ur)+14768|0,d=(W=Z)+9088|0,k=3&(r|=0),h=3&(i|=0),g=(r>>2)+(f|=0)|0,m=(i>>2)+(n|=0)|0,y=14-(0|ar[(e|=0)+4996>>2])|0,v=0|ar[e+484>>2],w=0|ar[e+488>>2],3&(i|r)){if(y=0|ar[9768+(k<<2)>>2],n=0|ar[9784+(k<<2)>>2],s=0|ar[9768+(h<<2)>>2],f=0|ar[9784+(h<<2)>>2],p=0-y|0,-1<(m-s|g-y|0)&&(g+l+n|0)<(0|v)&&(m+u+f|0)<(0|w))f=a+((0|br(m,n=c))+g)|0;else{if((0|(e=0-s|0))<(0|(i=f+u|0))&&(E=v-1|0,X=w-1|0,(0|p)<(0|(B=n+l|0))))do{for(n=0|br((0|(n=e+m|0))<0?0:(0|n)<(0|w)?n:X,c),r=(80*(e+s|0)|0)+y|0,f=p;I=f+g|0,tr[d+(r+f)>>0]=0|tr[a+(((0|I)<0?0:(0|I)<(0|v)?I:E)+n)>>0],(0|(f=f+1|0))!=(0|B););e=e+1|0}while((0|e)!=(0|i));f=d+(((n=80)*s|0)+y)|0}(0|b)<9?cs[31&ar[A+220+(k<<4)+(h<<2)>>2]](t,o,f,n,l,u,W):ls[31&ar[A+300+(k<<4)+(h<<2)>>2]](t,o,f,n,l,u,W,b),ur=Z}else{if(!((m|g|0)<0|(0|v)<(g+l|0)|(0|w)<(m+u|0)))return f=a+((0|br(m,c))+g)|0,(0|b)<9?cs[31&ar[A+220>>2]](t,o,f,c,l,u,W):ls[31&ar[A+300>>2]](t,o,f,c,l,u,W,b),void(ur=Z);if((0|u)<=0)return void(ur=Z);if(e=v-1|0,r=w-1|0,!(0<(0|l)))return void(ur=Z);f=0;do{for(i=0|br((0|(i=f+m|0))<0?0:(0|i)<(0|w)?i:r,c),p=0|br(f,o),n=0;W=n+g|0,or[t+(n+p<<1)>>1]=(0|cr[a+(((0|W)<0?0:(0|W)<(0|v)?W:e)+i)>>0])<<y,(0|(n=n+1|0))!=(0|l););f=f+1|0}while((0|f)!=(0|u));ur=Z}}function sc(A,e,r,i,f,n,t,o,a,c,l,u,b){A|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0;var s,d,k,h,w,v,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;if(m=ur=(v=ur)+31&-32,ur=ur+19808|0,m=(k=m)+9088|0,y=14-(0|ar[(e|=0)+5004>>2])|0,E=0|ar[e+5016>>2],w=(0|ar[e+484>>2])/(0|E)|0,B=0|ar[e+5020>>2],h=(0|ar[e+488>>2])/(0|B)|0,s=7&(r=0|br(2/(0|E)|0,r)),d=7&(i=0|br(2/(0|B)|0,i)),E=((0|f)/(0|E)|0)+(r>>3)|0,B=((0|n)/(0|B)|0)+(i>>3)|0,7&(i|r)){if(0<(0|E)&&(E+l|0)<=(w-2|0)&0<(0|B)&&(B+u|0)<=(h-2|0))f=a+((0|br(B,c))+E<<1)|0,e=c;else{if(-1<(0|(i=u+2|0))&&(Z=w-1|0,p=h-1|0,-1<(0|(g=l+2|0)))){r=-1;do{for(f=0|br((0|(f=r+B|0))<0?0:(0|f)<(0|h)?f:p,c),n=80+(80*r|0)|0,e=-1;y=e+E|0,or[m+(n+(e=e+1|0)<<1)>>1]=0|or[a+(((0|y)<0?0:(0|y)<(0|w)?y:Z)+f<<1)>>1],(0|e)!=(0|g););r=r+1|0}while((0|r)!=(0|i))}f=m+162|0,e=80}r=0!=(0|s),i=0!=(0|d);do{if(r&i){if((0|b)<9){bs[7&ar[A+216>>2]](t,o,f,e,l,u,s,d,k,b);break}bs[7&ar[A+296>>2]](t,o,f,e,l,u,s,d,k,b);break}if(r){if((0|b)<9){bs[7&ar[A+208>>2]](t,o,f,e,l,u,s,d,k,b);break}bs[7&ar[A+288>>2]](t,o,f,e,l,u,s,d,k,b);break}if(i||sr(55739,48428,268,48472),(0|b)<9){bs[7&ar[A+212>>2]](t,o,f,e,l,u,0,d,k,b);break}bs[7&ar[A+292>>2]](t,o,f,e,l,u,0,d,k,b);break}while(0);ur=v}else{if(-1<(0|E)&&!((0|B)<0|(0|w)<(E+l|0)|(0|h)<(B+u|0)))return e=a+((0|br(B,c))+E<<1)|0,(0|b)<9?us[3&ar[A+204>>2]](t,o,e,c,l,u,0,0,0):bs[7&ar[A+284>>2]](t,o,e,c,l,u,0,0,0,b),void(ur=v);if((0|u)<=0)return void(ur=v);if(i=w-1|0,f=h-1|0,!(0<(0|l)))return void(ur=v);r=0;do{for(n=0|br((0|(n=r+B|0))<0?0:(0|n)<(0|h)?n:f,c),m=0|br(r,o),e=0;b=e+E|0,or[t+(e+m<<1)>>1]=(0|lr[a+(((0|b)<0?0:(0|b)<(0|w)?b:i)+n<<1)>>1])<<y,(0|(e=e+1|0))!=(0|l););r=r+1|0}while((0|r)!=(0|u));ur=v}}function dc(A,e,r,i,f,n,t,o,a,c,l,u,b){A|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0;var s,d,k,h,w,v,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;if(m=ur=(v=ur)+31&-32,ur=ur+14448|0,m=(k=m)+9088|0,y=14-(0|ar[(e|=0)+5004>>2])|0,E=0|ar[e+5016>>2],w=(0|ar[e+484>>2])/(0|E)|0,B=0|ar[e+5020>>2],h=(0|ar[e+488>>2])/(0|B)|0,s=7&(r=0|br(2/(0|E)|0,r)),d=7&(i=0|br(2/(0|B)|0,i)),E=((0|f)/(0|E)|0)+(r>>3)|0,B=((0|n)/(0|B)|0)+(i>>3)|0,7&(i|r)){if(0<(0|E)&&(E+l|0)<=(w-2|0)&0<(0|B)&&(B+u|0)<=(h-2|0))f=a+((0|br(B,c))+E)|0,e=c;else{if(-1<(0|(i=u+2|0))&&(Z=w-1|0,p=h-1|0,-1<(0|(g=l+2|0)))){r=-1;do{for(f=0|br((0|(f=r+B|0))<0?0:(0|f)<(0|h)?f:p,c),n=80+(80*r|0)|0,e=-1;y=e+E|0,tr[m+(n+(e=e+1|0))>>0]=0|tr[a+(((0|y)<0?0:(0|y)<(0|w)?y:Z)+f)>>0],(0|e)!=(0|g););r=r+1|0}while((0|r)!=(0|i))}f=m+81|0,e=80}r=0!=(0|s),i=0!=(0|d);do{if(r&i){if((0|b)<9){bs[7&ar[A+216>>2]](t,o,f,e,l,u,s,d,k,b);break}bs[7&ar[A+296>>2]](t,o,f,e,l,u,s,d,k,b);break}if(r){if((0|b)<9){bs[7&ar[A+208>>2]](t,o,f,e,l,u,s,d,k,b);break}bs[7&ar[A+288>>2]](t,o,f,e,l,u,s,d,k,b);break}if(i||sr(55739,48428,268,48472),(0|b)<9){bs[7&ar[A+212>>2]](t,o,f,e,l,u,0,d,k,b);break}bs[7&ar[A+292>>2]](t,o,f,e,l,u,0,d,k,b);break}while(0);ur=v}else{if(-1<(0|E)&&!((0|B)<0|(0|w)<(E+l|0)|(0|h)<(B+u|0)))return e=a+((0|br(B,c))+E)|0,(0|b)<9?us[3&ar[A+204>>2]](t,o,e,c,l,u,0,0,0):bs[7&ar[A+284>>2]](t,o,e,c,l,u,0,0,0,b),void(ur=v);if((0|u)<=0)return void(ur=v);if(i=w-1|0,f=h-1|0,!(0<(0|l)))return void(ur=v);r=0;do{for(n=0|br((0|(n=r+B|0))<0?0:(0|n)<(0|h)?n:f,c),m=0|br(r,o),e=0;b=e+E|0,or[t+(e+m<<1)>>1]=(0|cr[a+(((0|b)<0?0:(0|b)<(0|w)?b:i)+n)>>0])<<y,(0|(e=e+1|0))!=(0|l););r=r+1|0}while((0|r)!=(0|u));ur=v}}function kc(A,e,r,i,f,n,t,o,a,c,l,u){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0;var b,s=0,d=0,k=0,h=0,w=0;if(0|Hb[31&ar[12+(0|ar[(A|=0)>>2])>>2]](A,n)||sr(48581,48428,1074,48604),b=0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,n),(0|ar[24+b>>2])>(0|t)&&(0|ar[28+b>>2])>(0|o)){if(i=t>>(f=0|ar[10368+b>>2]),f=o>>f,(0|i)<=-1&&sr(48482,48519,118,48539),(0|(n=0|ar[10372+b>>2]))<=(0|i)&&sr(48482,48519,118,48539),(0|f)<=-1&&sr(48543,48519,119,48539),(0|f)>=(0|ar[10376+b>>2])&&sr(48543,48519,119,48539),w=(0|ar[10360+b>>2])+(3*((0|br(n,f))+i|0)|0)|0,!(768&(cr[w>>0]|cr[w+1>>0]<<8)))return or[l>>1]=0,or[l+2>>1]=0,void(tr[u>>0]=0);if(1==(0|tr[10516+b>>0]))return or[l>>1]=0,or[l+2>>1]=0,void(tr[u>>0]=0);if(i=t>>(f=0|ar[10388+b>>2]),f=o>>f,(0|i)<=-1&&sr(48482,48519,118,48539),(0|(n=0|ar[10392+b>>2]))<=(0|i)&&sr(48482,48519,118,48539),(0|f)<=-1&&sr(48543,48519,119,48539),(0|f)>=(0|ar[10396+b>>2])&&sr(48543,48519,119,48539),w=0|ar[10380+b>>2],h=(0|br(n,f))+i|0,0|tr[w+(12*h|0)>>0])if(0|tr[w+(12*h|0)+1>>0]){if(s=0|ar[e+92>>2],0<(0|ar[(n=r+332|0)>>2]))for(f=0;i=92+(0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[r+980+(f<<2)>>2]))|0,(i=(0|ar[i>>2])<=(0|s))&(0|(f=f+1|0))<(0|ar[n>>2]););else i=1;if(i&0<(0|ar[(n=r+328|0)>>2]))for(f=0;i=92+(0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[r+916+(f<<2)>>2]))|0,(i=(0|ar[i>>2])<=(0|s))&(0|(f=f+1|0))<(0|ar[n>>2]););d=i?c:0|tr[r+372>>0]}else d=0;else d=1;return(k=lr[(k=w+(12*h|0)+4+(d<<2)|0)>>1]|lr[k+2>>1]<<16,s=0|tr[w+(12*h|0)+2+d>>0],n=t>>(i=0|ar[10348+b>>2]),i=o>>i,(0|n)<=-1&&sr(48482,48519,118,48539),(0|(f=0|ar[10352+b>>2]))<=(0|n)&&sr(48482,48519,118,48539),(0|i)<=-1&&sr(48543,48519,119,48539),(0|i)>=(0|ar[10356+b>>2])&&sr(48543,48519,119,48539),i=(0|ar[10340+b>>2])+(24*((0|br(f,i))+n|0)|0)+2|0,i=0|ar[(0|ar[48+b>>2])+(lr[i>>1]<<2)>>2],(0|tr[(n=r+1300+(c<<4)+a|0)>>0])!=(0|tr[i+1300+(d<<4)+s>>0]))?(tr[u>>0]=0,or[l>>1]=0,void(or[l+2>>1]=0)):(tr[u>>0]=1,i=(0|ar[92+b>>2])-(0|ar[i+1044+(d<<6)+(s<<2)>>2])|0,f=(0|ar[e+92>>2])-(0|ar[r+1044+(c<<6)+(a<<2)>>2])|0,0!=(0|tr[n>>0])|(0|i)==(0|f)?(or[l>>1]=k,void(or[l+2>>1]=k>>>16)):(i=(0|i)<-128?-128:(0|i)<127?i:127)?(e=32+(0|br((16384+(((0|i)<0?0-i|0:i)>>1)|0)/(0|i)|0,(0|f)<-128?-128:(0|f)<127?f:127))>>6,A=0|br(e=(0|e)<-4096?-4096:(0|e)<4095?e:4095,k<<16>>16),A=0|br(((c=(0|A)<0)?0-A|0:A)+127>>8,c?-1:0!=(0|A)&1),or[l>>1]=(0|A)<-32768?-32768:65535&((0|A)<32767?A:32767),e=0|br(e,k>>16),e=0|br(((A=(0|e)<0)?0-e|0:e)+127>>8,A?-1:0!=(0|e)&1),void(or[l+2>>1]=(0|e)<-32768?-32768:65535&((0|e)<32767?e:32767))):(or[l>>1]=k,or[l+2>>1]=k>>>16,er(A+4|0,1008,0),void(tr[e+10516>>0]=3)))}er(A+4|0,1026,0),tr[u>>0]=0}function hc(A,e,r,i,f,n,t,o,a,c,l){A|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0;var u,b,s,d=0;if(!(0|tr[(r|=0)+324>>0]))return or[c>>1]=0,or[c+2>>1]=0,void(tr[l>>0]=0);if(s=0|ar[e+5804>>2],d=0|ar[r+20>>2]?0:0==(0|tr[r+372>>0])&1,d=0|ar[r+916+(d<<6)+(ar[r+376>>2]<<2)>>2],!(0|Hb[31&ar[12+(0|ar[A>>2])>>2]](A,d)))return or[c>>1]=0,or[c+2>>1]=0,void er(A+4|(tr[l>>0]=0),1012,0);if(b=n+i|0,(f>>s|0)==((u=t+f|0)>>s|0)&&(0|b)<(0|ar[e+1248>>2])&&(0|u)<(0|ar[e+1252>>2])){if(kc(A,e,r,0,0,d,-16&b,-16&u,o,a,c,l),0|tr[l>>0])return}else or[c>>1]=0,or[c+2>>1]=0,tr[l>>0]=0;kc(A,e,r,0,0,d,(n>>1)+i&-16,(t>>1)+f&-16,o,a,c,l)}function wc(A,e,r,i,f,n,t,o,a,c,l,u,b){A|=0,e|=0,n|=0,t|=0,a|=0,c|=0,l|=0,u|=0,b|=0;var s,d,k,h,w,v,m=0,g=0,Z=0;if(g=ur=(v=ur)+31&-32,ur=ur+16|0,w=g+8|0,g=(m=g)+12|0,t=0|function(A,e,r,i,f,n,t,o,a,c,l,u){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0;var b,s,d,k,h,w,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;w=0|ar[(A|=0)+10060>>2],t=e>>(m=0|ar[A+10368>>2]),m=r>>m,(0|t)<=-1&&sr(48482,48519,118,48539),(0|(g=0|ar[A+10372>>2]))<=(0|t)&&sr(48482,48519,118,48539),(0|m)<=-1&&sr(48543,48519,119,48539),(0|m)>=(0|ar[A+10376>>2])&&sr(48543,48519,119,48539),Z=(0|ar[A+10360>>2])+(3*((0|br(g,m))+t|0)|0)|0,Z=(65535&(cr[Z>>0]|cr[Z+1>>0]<<8))>>>3,t=(d=a+n|0)-1|0,(h=(0|(s=f>>w))==((k=f+-1|0)>>w|0))&&(n>>w|0)==(t>>w|0)?v=I=0:E=9;A:do{if(9==(0|E)){if(1==(0|c))switch(7&Z){case 2:case 6:case 7:v=I=0;break A}if(0|ka(A,e,r,i,f,n,o,a,c,k,t)){if(t>>=X=0|ar[A+10388>>2],(0|(g=k>>X))<=-1&&sr(48482,48519,118,48539),(0|(m=0|ar[A+10392>>2]))<=(0|g)&&sr(48482,48519,118,48539),(0|t)<=-1&&sr(48543,48519,119,48539),(0|t)<(0|ar[A+10396>>2])){I=(0|ar[A+10380>>2])+(12*((0|br(m,t))+g|0)|0)|0,or[l>>1]=0|or[I>>1],or[l+2>>1]=0|or[I+2>>1],or[l+4>>1]=0|or[I+4>>1],or[l+6>>1]=0|or[I+6>>1],or[l+8>>1]=0|or[I+8>>1],or[l+10>>1]=0|or[I+10>>1],v=I=1;break}sr(48543,48519,119,48539)}else v=I=0}}while(0);if((0|u)<=(0|v))return 0|(l=v);X=n+-1|0,(0|s)==((t=(b=o+f|0)-1|0)>>w|0)&&(n>>w|0)==(X>>w|0)?B=p=0:E=22;A:do{if(22==(0|E)){if(1==(0|c))switch(7&Z){case 1:case 4:case 5:B=p=0;break A}if(0|ka(A,e,r,i,f,n,o,a,c,t,X)){t>>=m=0|ar[A+10388>>2],m=X>>m,(0|t)<=-1&&sr(48482,48519,118,48539),(0|(g=0|ar[A+10392>>2]))<=(0|t)&&sr(48482,48519,118,48539),(0|m)<=-1&&sr(48543,48519,119,48539),(0|m)>=(0|ar[A+10396>>2])&&sr(48543,48519,119,48539),t=(Z=0|ar[A+10380>>2])+(12*(g=(0|br(g,m))+t|0)|0)|0;do{if(I&&(p=0|tr[l>>0])<<24>>24==(0|tr[t>>0])){if(p<<24>>24){if((0|or[l+4>>1])!=(0|or[Z+(12*g|0)+4>>1]))break;if((0|or[l+6>>1])!=(0|or[Z+(12*g|0)+6>>1]))break;if((0|tr[l+2>>0])!=(0|tr[Z+(12*g|0)+2>>0]))break}if((m=0|tr[l+1>>0])<<24>>24==(0|tr[Z+(12*g|0)+1>>0])){if(!(m<<24>>24)){p=1,B=0;break A}if((0|or[l+8>>1])!=(0|or[Z+(12*g|0)+8>>1]))break;if((0|or[l+10>>1])!=(0|or[Z+(12*g|0)+10>>1]))break;if((0|tr[l+3>>0])==(0|tr[Z+(12*g|0)+3>>0])){p=1,B=0;break A}}}}while(0);or[(p=l+(12*v|0)|0)>>1]=0|or[t>>1],or[p+2>>1]=0|or[t+2>>1],or[p+4>>1]=0|or[t+4>>1],or[p+6>>1]=0|or[t+6>>1],or[p+8>>1]=0|or[t+8>>1],or[p+10>>1]=0|or[t+10>>1],v=(B=v)+(p=1)|0}else B=p=0}}while(0);if((0|u)<=(0|v))return 0|(l=v);(0|s)==(b>>w|0)&&(n>>w|0)==(X>>w|0)||(E=47);A:do{if(47==(0|E)&&0|ka(A,e,r,i,f,n,o,a,c,b,X)){t=b>>(m=0|ar[A+10388>>2]),m=X>>m,(0|t)<=-1&&sr(48482,48519,118,48539),(0|(g=0|ar[A+10392>>2]))<=(0|t)&&sr(48482,48519,118,48539),(0|m)<=-1&&sr(48543,48519,119,48539),(0|m)>=(0|ar[A+10396>>2])&&sr(48543,48519,119,48539),t=(Z=0|ar[A+10380>>2])+(12*(g=(0|br(g,m))+t|0)|0)|0;do{if(p&&(y=0|tr[l+(12*B|0)>>0])<<24>>24==(0|tr[t>>0])){if(y<<24>>24){if((0|or[l+(12*B|0)+4>>1])!=(0|or[Z+(12*g|0)+4>>1]))break;if((0|or[l+(12*B|0)+6>>1])!=(0|or[Z+(12*g|0)+6>>1]))break;if((0|tr[l+(12*B|0)+2>>0])!=(0|tr[Z+(12*g|0)+2>>0]))break}if((m=0|tr[l+(12*B|0)+1>>0])<<24>>24==(0|tr[Z+(12*g|0)+1>>0])){if(!(m<<24>>24))break A;if((0|or[l+(12*B|0)+8>>1])!=(0|or[Z+(12*g|0)+8>>1]))break;if((0|or[l+(12*B|0)+10>>1])!=(0|or[Z+(12*g|0)+10>>1]))break;if((0|tr[l+(12*B|0)+3>>0])==(0|tr[Z+(12*g|0)+3>>0]))break A}}}while(0);or[(y=l+(12*v|0)|0)>>1]=0|or[t>>1],or[y+2>>1]=0|or[t+2>>1],or[y+4>>1]=0|or[t+4>>1],or[y+6>>1]=0|or[t+6>>1],or[y+8>>1]=0|or[t+8>>1],or[y+10>>1]=0|or[t+10>>1],v=v+1|0}}while(0);if((0|u)<=(0|v))return 0|(l=v);h&&(n>>w|0)==(d>>w|0)||(E=70);A:do{if(70==(0|E)&&0|ka(A,e,r,i,f,n,o,a,c,k,d)){g=k>>(t=0|ar[A+10388>>2]),t=d>>t,(0|g)<=-1&&sr(48482,48519,118,48539),(0|(m=0|ar[A+10392>>2]))<=(0|g)&&sr(48482,48519,118,48539),(0|t)<=-1&&sr(48543,48519,119,48539),(0|t)>=(0|ar[A+10396>>2])&&sr(48543,48519,119,48539),t=(Z=0|ar[A+10380>>2])+(12*(g=(0|br(m,t))+g|0)|0)|0;do{if(I&&(W=0|tr[l>>0])<<24>>24==(0|tr[t>>0])){if(W<<24>>24){if((0|or[l+4>>1])!=(0|or[Z+(12*g|0)+4>>1]))break;if((0|or[l+6>>1])!=(0|or[Z+(12*g|0)+6>>1]))break;if((0|tr[l+2>>0])!=(0|tr[Z+(12*g|0)+2>>0]))break}if((m=0|tr[l+1>>0])<<24>>24!=(0|tr[Z+(12*g|0)+1>>0]))break;if(!(m<<24>>24))break A;if((0|or[l+8>>1])!=(0|or[Z+(12*g|0)+8>>1]))break;if((0|or[l+10>>1])!=(0|or[Z+(12*g|0)+10>>1]))break;if((0|tr[l+3>>0])==(0|tr[Z+(12*g|0)+3>>0]))break A}}while(0);or[(W=l+(12*v|0)|0)>>1]=0|or[t>>1],or[W+2>>1]=0|or[t+2>>1],or[W+4>>1]=0|or[t+4>>1],or[W+6>>1]=0|or[t+6>>1],or[W+8>>1]=0|or[t+8>>1],or[W+10>>1]=0|or[t+10>>1],v=v+1|0}}while(0);if((0|u)<=(0|v)|4==(0|v))return 0|(l=v);if(h&&(n>>w|0)==(X>>w|0))return 0|(l=v);if(!(0|ka(A,e,r,i,f,n,o,a,c,k,X)))return 0|(l=v);g=k>>(t=0|ar[A+10388>>2]),t=X>>t,(0|g)<=-1&&sr(48482,48519,118,48539),(0|(m=0|ar[A+10392>>2]))<=(0|g)&&sr(48482,48519,118,48539),(0|t)<=-1&&sr(48543,48519,119,48539),(0|t)>=(0|ar[A+10396>>2])&&sr(48543,48519,119,48539),t=(Z=0|ar[A+10380>>2])+(12*(g=(0|br(m,t))+g|0)|0)|0;do{if(p){if((m=0|tr[l+(12*B|0)>>0])<<24>>24!=(0|tr[t>>0]))break;if(m<<24>>24){if((0|or[l+(12*B|0)+4>>1])!=(0|or[Z+(12*g|0)+4>>1]))break;if((0|or[l+(12*B|0)+6>>1])!=(0|or[Z+(12*g|0)+6>>1]))break;if((0|tr[l+(12*B|0)+2>>0])!=(0|tr[Z+(12*g|0)+2>>0]))break}if((m=0|tr[l+(12*B|0)+1>>0])<<24>>24!=(0|tr[Z+(12*g|0)+1>>0]))break;if(!(m<<24>>24))return 0|(l=v);if((0|or[l+(12*B|0)+8>>1])!=(0|or[Z+(12*g|0)+8>>1]))break;if((0|or[l+(12*B|0)+10>>1])!=(0|or[Z+(12*g|0)+10>>1]))break;if((0|tr[l+(12*B|0)+3>>0])!=(0|tr[Z+(12*g|0)+3>>0]))break;return 0|v}}while(0);do{if(I){if((m=0|tr[l>>0])<<24>>24!=(0|tr[t>>0]))break;if(m<<24>>24){if((0|or[l+4>>1])!=(0|or[Z+(12*g|0)+4>>1]))break;if((0|or[l+6>>1])!=(0|or[Z+(12*g|0)+6>>1]))break;if((0|tr[l+2>>0])!=(0|tr[Z+(12*g|0)+2>>0]))break}if((m=0|tr[l+1>>0])<<24>>24!=(0|tr[Z+(12*g|0)+1>>0]))break;if(!(m<<24>>24))return 0|(l=v);if((0|or[l+8>>1])!=(0|or[Z+(12*g|0)+8>>1]))break;if((0|or[l+10>>1])!=(0|or[Z+(12*g|0)+10>>1]))break;if((0|tr[l+3>>0])!=(0|tr[Z+(12*g|0)+3>>0]))break;return 0|v}}while(0);return or[(l=l+(12*v|0)|0)>>1]=0|or[t>>1],or[l+2>>1]=0|or[t+2>>1],or[l+4>>1]=0|or[t+4>>1],or[l+6>>1]=0|or[t+6>>1],or[l+8>>1]=0|or[t+8>>1],or[l+10>>1]=0|or[t+10>>1],0|(l=v+1|0)}(r|=0,i|=0,f|=0,o|=0,n=(Z=8==(0|o)?2<(0|ar[r+10060>>2]):0)?i:n,s=Z?f:t,0,d=Z?o:a,k=Z?o:c,Z?0:l,b,h=u+1|0),(0|u)<(0|(ar[w>>2]=t))?i=e+20|0:(hc(A,r,e,n,s,d,k,0,0,m,g),c=0|tr[g>>0],(tr[(a=g+1|0)>>0]=0)|ar[(i=e+20|0)>>2]?a=0:(hc(A,r,e,n,s,d,k,0,1,m+4|0,a),c|=a=0|tr[a>>0]),c<<24>>24&&(ar[w>>2]=t+1,Z=b+(12*t|0)+4|0,r=0|ar[m>>2],or[Z>>1]=r,or[Z+2>>1]=r>>>16,Z=b+(12*t|0)+8|0,m=0|ar[m+4>>2],or[Z>>1]=m,or[Z+2>>1]=m>>>16,tr[b+(12*t|0)>>0]=0|tr[g>>0],tr[b+(12*t|0)+1>>0]=a,tr[b+(12*t|0)+2>>0]=0,tr[b+(12*t|0)+3>>0]=0)),(c=0|ar[i>>2])||(function(A,e,r,i,f){A|=0,e|=0,r|=0,f|=0;var n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;if(1<(0|(n=0|ar[(i|=0)>>2]))&(0|n)<(0|f)){for(t=0|br(n-1|0,n),u=0;;){if(!((0|(b=0|ar[9800+(u<<2)>>2]))<(0|n)&(0|(s=0|ar[9848+(u<<2)>>2]))<(0|n))){o=4;break}if(d=0|tr[(o=r+(12*b|0)|0)>>0]?0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[e+916+(tr[r+(12*b|0)+2>>0]<<2)>>2]):0,k=0|tr[(a=r+(12*s|0)+1|0)>>0]?0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[e+980+(tr[r+(12*s|0)+3>>0]<<2)>>2]):0,!(0!=(0|d)|(l=(c=0|tr[o>>0])<<24>>24==0))){o=18;break}if(!(0!=(0|k)|(a=(o=0|tr[a>>0])<<24>>24==0))){o=18;break}do{if(!(l|a)){if((0|ar[d+92>>2])==(0|ar[k+92>>2])&&(0|or[r+(12*b|0)+4>>1])==(0|or[r+(12*s|0)+8>>1])&&(0|or[r+(12*b|0)+6>>1])==(0|or[r+(12*s|0)+10>>1]))break;k=0|ar[i>>2],tr[r+(12*k|0)+2>>0]=0|tr[r+(12*b|0)+2>>0],tr[r+(12*k|0)+3>>0]=0|tr[r+(12*s|0)+3>>0],tr[r+(12*k|0)>>0]=c,tr[r+(12*k|0)+1>>0]=o,d=r+(12*k|0)+4|0,b=lr[(b=r+(12*b|0)+4|0)>>1]|lr[b+2>>1]<<16,or[d>>1]=b,or[d+2>>1]=b>>>16,k=r+(12*k|0)+8|0,d=lr[(d=r+(12*s|0)+8|0)>>1]|lr[d+2>>1]<<16,or[k>>1]=d,or[k+2>>1]=d>>>16,ar[i>>2]=1+(0|ar[i>>2])}}while(0);if((0|(u=u+1|0))==(0|t)){o=18;break}if((0|ar[i>>2])==(0|f)){o=18;break}}if(4==(0|o))sr(55739,48428,1360,48637);else if(18==(0|o));}}(A,e,b,w,h),c=0|ar[i>>2]),t=0|ar[(a=e+328|0)>>2],1!=(0|c)&&(t=0|ar[((0|t)<(0|ar[(Z=e+332|0)>>2])?a:Z)>>2]),(0|u)<(0|(a=0|ar[w>>2])))ur=v;else{for(l=0;n=1==(0|c),Z=(0|l)<(0|t)?255&l:0,tr[b+(12*a|0)+2>>0]=Z,tr[b+(12*a|0)+3>>0]=n?-1:Z,tr[b+(12*a|0)>>0]=1,tr[b+(12*a|0)+1>>0]=1&(1^n),or[(Z=n=b+(12*a|0)+4|0)>>1]=0,or[Z+2>>1]=0,or[(n=n+4|0)>>1]=0,n=a+1|(or[n+2>>1]=0),!((0|u)<=(0|a));)l=l+1|0,c=0|ar[i>>2],a=n;ar[w>>2]=n,ur=v}}function vc(A,e,r,i,f,n,t,o,a,c,l,u,b,s){s|=0;var d,k=0,h=0,w=0,v=0,m=0;if(m=ur=(d=ur)+31&-32,ur=ur+32|0,v=m+16|0,function(A,e,r,i,f,n,t,o,a,c,l,u,b,s,d){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0,d|=0;var k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0;if(P=ur=(V=ur)+31&-32,ur=ur+48|0,v=P+32|0,m=P+24|0,g=P+44|0,I=P+12|0,P=(C=P)+40|0,Z=(t|=0)+-1|(tr[(G=(s|=0)+1|0)>>0]=0),ar[v>>2]=Z,x=c+o|0,ar[m>>2]=x,ar[4+v>>2]=Z,L=x+-1|0,ar[4+m>>2]=L,tr[s>>0]=0,or[d>>1]=0,R=1&(x=(or[(S=d+2|0)>>1]=0)|ka(e,i,f,n,t,o,a,c,b,Z,x)),tr[g>>0]=R,L=0|ka(e,i,f,n,t,o,a,c,b,Z,L),tr[1+g>>0]=1&L,x|=L,L=r+916+(l<<6)+(u<<2)|0,F=0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[L>>2])){p=0|ar[F+92>>2],M=e+10368|0,k=e+10372|0,h=e+10376|0,w=e+10360|0,y=1-l|0,B=e+10388|0,E=e+10392|0,X=e+10396|0,W=e+10380|0,D=-1,J=0,F=R;A:for(;;){do{if(F<<24>>24!=0&&0==(0|tr[s>>0])){if(F=0|ar[v+(J<<2)>>2],Y=0|ar[m+(J<<2)>>2],R=F>>(N=0|ar[M>>2]),N=Y>>N,(0|R)<=-1){F=8;break A}if((0|(_=0|ar[k>>2]))<=(0|R)){F=8;break A}if((0|N)<=-1){F=11;break A}if((0|N)>=(0|ar[h>>2])){F=11;break A}if(H=(0|ar[w>>2])+(3*((0|br(_,N))+R|0)|0)|0,768&(cr[H>>0]|cr[H+1>>0]<<8)){if(N=F>>(H=0|ar[B>>2]),F=Y>>H,(0|N)<=-1){F=15;break A}if((0|(R=0|ar[E>>2]))<=(0|N)){F=15;break A}if((0|F)<=-1){F=18;break A}if((0|F)>=(0|ar[X>>2])){F=18;break A}if(Q=0|ar[W>>2],_=(0|br(R,F))+N|0,F=0|tr[(Y=Q+(12*_|0)+l|0)>>0]?0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[r+916+(l<<6)+(tr[Q+(12*_|0)+2+l>>0]<<2)>>2]):0,R=0|tr[(N=Q+(12*_|0)+y|0)>>0]?0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[r+916+(y<<6)+(tr[Q+(12*_|0)+2+y>>0]<<2)>>2]):0,0!=(0|F)&0!=(0|tr[Y>>0])&&(0|ar[F+92>>2])==(0|p)){tr[s>>0]=1,R=lr[(R=Q+(12*_|0)+4+(l<<2)|0)>>1]|lr[R+2>>1]<<16,or[d>>1]=R,or[d+2>>1]=R>>>16,R=0|tr[Q+(12*_|0)+2+l>>0];break}R=0!=(0|R)&0!=(0|tr[N>>0])&&(0|ar[R+92>>2])==(0|p)?(tr[s>>0]=1,R=lr[(R=Q+(12*_|0)+4+(y<<2)|0)>>1]|lr[R+2>>1]<<16,or[d>>1]=R,or[d+2>>1]=R>>>16,0|tr[Q+(12*_|0)+2+y>>0]):D}else R=D}else R=D}while(0);if(2<=(0|(F=J+1|0))){F=3;break}D=R,F=0|tr[g+(J=F)>>0]}if(3==(0|F)){O=r+1300+(l<<4)+u|0,z=e+92|0,j=A+4|0,H=e+10516|0,D=0,_=R;A:for(;;){if(0|tr[s>>0]){F=62;break}do{if(0|tr[g+D>>0]){if(F=0|ar[v+(D<<2)>>2],Q=0|ar[m+(D<<2)>>2],R=F>>(N=0|ar[M>>2]),N=Q>>N,(0|R)<=-1){F=35;break A}if((0|(Y=0|ar[k>>2]))<=(0|R)){F=35;break A}if((0|N)<=-1){F=38;break A}if((0|N)>=(0|ar[h>>2])){F=38;break A}if(u=(0|ar[w>>2])+(3*((0|br(Y,N))+R|0)|0)|0,768&(cr[u>>0]|cr[u+1>>0]<<8)){if(N=F>>(u=0|ar[B>>2]),F=Q>>u,(0|N)<=-1){F=42;break A}if((0|(R=0|ar[E>>2]))<=(0|N)){F=42;break A}if((0|F)<=-1){F=45;break A}if((0|F)>=(0|ar[X>>2])){F=45;break A}if(Y=0|ar[W>>2],F=(0|br(R,F))+N|0,1==(0|tr[Y+(12*F|0)+l>>0])&&(T=Y+(12*F|0)+2+l|0,(0|tr[O>>0])==(0|tr[(0|tr[T>>0])+(r+1300+(l<<4))>>0]))){tr[s>>0]=1,R=lr[(R=Y+(12*F|0)+4+(l<<2)|0)>>1]|lr[R+2>>1]<<16,or[d>>1]=R,or[d+2>>1]=R>>>16,R=l,_=0|tr[T>>0];break}1==(0|tr[Y+(12*F|0)+y>>0])&&(U=Y+(12*F|0)+2+y|0,(0|tr[O>>0])==(0|tr[(0|tr[U>>0])+(r+1300+(y<<4))>>0]))?(tr[s>>0]=1,R=lr[(R=Y+(12*F|0)+4+(y<<2)|0)>>1]|lr[R+2>>1]<<16,or[d>>1]=R,or[d+2>>1]=R>>>16,R=y,_=0|tr[U>>0]):R=-1}else R=-1}else R=-1}while(0);do{if(1==(0|tr[s>>0])){if((0|_)<0){F=61;break A}if((0|R)<=-1){F=55;break A}if(F=0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[r+916+(R<<6)+(_<<2)>>2]),Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[L>>2]),!((tr[O>>0]|tr[r+1300+(R<<4)+_>>0])<<24>>24)){if(N=(R=0|ar[z>>2])-(0|ar[F+92>>2])|0,F=R-p|0,R=lr[d>>1]|lr[d+2>>1]<<16,N=(0|N)<-128?-128:(0|N)<127?N:127){u=32+(0|br((16384+(((0|N)<0?0-N|0:N)>>1)|0)/(0|N)|0,(0|F)<-128?-128:(0|F)<127?F:127))>>6,J=0|br(u=(0|u)<-4096?-4096:(0|u)<4095?u:4095,R<<16>>16),J=0|br(((Q=(0|J)<0)?0-J|0:J)+127>>8,Q?-1:0!=(0|J)&1),or[d>>1]=(0|J)<-32768?-32768:65535&((0|J)<32767?J:32767),u=0|br(u,R>>16),u=0|br(((J=(0|u)<0)?0-u|0:u)+127>>8,J?-1:0!=(0|u)&1),or[S>>1]=(0|u)<-32768?-32768:65535&((0|u)<32767?u:32767);break}er(j,1008,0),tr[H>>0]=3;break}}}while(0);if(2<=(0|(D=D+1|0))){F=62;break}}if(35==(0|F))sr(48482,48519,118,48539);else if(38==(0|F))sr(48543,48519,119,48539);else if(42==(0|F))sr(48482,48519,118,48539);else if(45==(0|F))sr(48543,48519,119,48539);else if(55==(0|F))sr(48685,48428,1698,48699);else{if(61==(0|F))return tr[G>>0]=0,tr[s>>0]=0,ur=V;if(62==(0|F)){F=a+t|0,ar[I>>2]=F,R=o+-1|0,ar[C>>2]=R,ar[4+I>>2]=F+-1,ar[C+4>>2]=R,ar[8+I>>2]=Z,ar[C+8>>2]=R,tr[G>>0]=0,or[(u=d+4|0)>>1]=0,Y=-1,J=or[(M=d+6|0)>>1]=0;A:for(;;){S=0|ka(e,i,f,n,t,o,a,c,b,F,R),tr[P+J>>0]=1&S;do{if(S&&0==(0|tr[G>>0])){if(N=F>>(S=0|ar[B>>2]),F=R>>S,(0|N)<=-1){F=68;break A}if((0|(R=0|ar[E>>2]))<=(0|N)){F=68;break A}if((0|F)<=-1){F=71;break A}if((0|F)>=(0|ar[X>>2])){F=71;break A}if(D=0|ar[W>>2],N=(0|br(R,F))+N|0,R=0|tr[(_=D+(12*N|0)+l|0)>>0]?0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[r+916+(l<<6)+(tr[D+(12*N|0)+2+l>>0]<<2)>>2]):0,F=0|tr[(Q=D+(12*N|0)+y|0)>>0]?0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[r+916+(y<<6)+(tr[D+(12*N|0)+2+y>>0]<<2)>>2]):0,0!=(0|R)&0!=(0|tr[_>>0])&&(0|ar[R+92>>2])==(0|p)){tr[G>>0]=1,Y=lr[(Y=D+(12*N|0)+4+(l<<2)|0)>>1]|lr[Y+2>>1]<<16,or[u>>1]=Y,or[u+2>>1]=Y>>>16,Y=0|tr[D+(12*N|0)+2+l>>0];break}0!=(0|F)&0!=(0|tr[Q>>0])&&(0|ar[F+92>>2])==(0|p)&&(tr[G>>0]=1,Y=lr[(Y=D+(12*N|0)+4+(y<<2)|0)>>1]|lr[Y+2>>1]<<16,or[u>>1]=Y,or[u+2>>1]=Y>>>16,Y=0|tr[D+(12*N|0)+2+y>>0])}}while(0);if(3<=(0|(R=J+1|0))){F=63;break}F=0|ar[I+((J=R)<<2)>>2],R=0|ar[C+(R<<2)>>2]}if(63==(0|F)){A:do{if(!x){0|tr[G>>0]&&(tr[s>>0]=1,x=lr[u>>1]|lr[u+2>>1]<<16,or[d>>1]=x,or[d+2>>1]=x>>>16),D=e+10332|(tr[G>>0]=0),Q=0;e:for(;;){do{if(0|tr[P+Q>>0]){if(R=0|ar[B>>2],F=ar[I+(Q<<2)>>2]>>R,R=ar[C+(Q<<2)>>2]>>R,(0|F)<=-1){F=90;break e}if((0|(N=0|ar[E>>2]))<=(0|F)){F=90;break e}if((0|R)<=-1){F=93;break e}if((0|R)>=(0|ar[X>>2])){F=93;break e}if(_=0|ar[W>>2],F=(0|br(N,R))+F|0,1==(0|tr[_+(12*F|0)+l>>0])&&(K=_+(12*F|0)+2+l|0,(0|tr[O>>0])==(0|tr[(0|tr[K>>0])+(r+1300+(l<<4))>>0]))){tr[G>>0]=1,N=lr[(N=_+(12*F|0)+4+(l<<2)|0)>>1]|lr[N+2>>1]<<16,or[u>>1]=N,or[u+2>>1]=N>>>16,N=l,Y=0|tr[K>>0];break}1==(0|tr[_+(12*F|0)+y>>0])&&(q=_+(12*F|0)+2+y|0,(0|tr[O>>0])==(0|tr[(0|tr[q>>0])+(r+1300+(y<<4))>>0]))?(tr[G>>0]=1,N=lr[(N=_+(12*F|0)+4+(y<<2)|0)>>1]|lr[N+2>>1]<<16,or[u>>1]=N,or[u+2>>1]=N>>>16,N=y,Y=0|tr[q>>0]):N=-1}else N=-1}while(0);do{if(1==(0|tr[G>>0])){if((0|Y)<0){F=110;break e}if((0|N)<=-1){F=103;break e}if(0==(0|(F=0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[r+916+(N<<6)+(Y<<2)>>2])))|0==(0|(R=0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[L>>2])))){er(4+(0|ar[D>>2])|0,1012,0),tr[H>>0]=3;break}if((0|(F=0|ar[F+92>>2]))!=(0|ar[R+92>>2])&&(tr[r+1300+(N<<4)+Y>>0]|tr[O>>0])<<24>>24==0){if(N=(R=0|ar[z>>2])-F|0,F=R-p|0,R=lr[u>>1]|lr[u+2>>1]<<16,N=(0|N)<-128?-128:(0|N)<127?N:127){x=32+(0|br((16384+(((0|N)<0?0-N|0:N)>>1)|0)/(0|N)|0,(0|F)<-128?-128:(0|F)<127?F:127))>>6,c=0|br(x=(0|x)<-4096?-4096:(0|x)<4095?x:4095,R<<16>>16),c=0|br(((a=(0|c)<0)?0-c|0:c)+127>>8,a?-1:0!=(0|c)&1),or[u>>1]=(0|c)<-32768?-32768:65535&((0|c)<32767?c:32767),x=0|br(x,R>>16),x=0|br(((c=(0|x)<0)?0-x|0:x)+127>>8,c?-1:0!=(0|x)&1),or[M>>1]=(0|x)<-32768?-32768:65535&((0|x)<32767?x:32767);break}er(j,1008,0),tr[H>>0]=3;break}}}while(0);if(3<=(0|(Q=Q+1|0)))break A;if(0|tr[G>>0])break A}if(90==(0|F))sr(48482,48519,118,48539);else if(93==(0|F))sr(48543,48519,119,48539);else if(103==(0|F))sr(48685,48428,1839,48699);else if(110==(0|F)){tr[G>>0]=0,tr[s>>0]=0;break}}}while(0);return ur=V}68==(0|F)?sr(48482,48519,118,48539):71==(0|F)&&sr(48543,48519,119,48539)}}}else 8==(0|F)?sr(48482,48519,118,48539):11==(0|F)?sr(48543,48519,119,48539):15==(0|F)?sr(48482,48519,118,48539):18==(0|F)&&sr(48543,48519,119,48539)}else ur=V}(A|=0,r|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0,h=m+18|0,w=m+8|0),0|tr[h>>0]){do{if(0|tr[h+1>>0]){if((0|or[w>>1])==(0|or[w+4>>1])&&(0|or[w+2>>1])==(0|or[w+6>>1])){k=6;break}tr[v>>0]=0}else k=6}while(0);6==(0|k)&&hc(A,r,e,t,o,a,c,u,l,m,v),A=0|ar[w>>2],or[s>>1]=A,or[s+2>>1]=A>>>16,e=A=1}else hc(A,r,e,t,o,a,c,u,l,m,v),e=A=0;do{if(0|tr[h+1>>0]){if(e&&(0|or[w>>1])==(0|or[w+4>>1])&&(0|or[w+2>>1])==(0|or[w+6>>1]))break;h=s+(A<<2)|0,w=0|ar[w+4>>2],or[h>>1]=w,or[h+2>>1]=w>>>16,A=A+1|0}}while(0);if(0|tr[v>>0]&&(v=s+(A<<2)|0,m=0|ar[m>>2],or[v>>1]=m,or[v+2>>1]=m>>>16,A=A+1|0),(0|A)<2)return vb(s+(A<<2)|0,0,8-(A<<2)|0),void(ur=d);2!=(0|A)?sr(48737,48428,1943,48753):ur=d}function mc(A,e,r,i,f,n,t,o,a,c,l,u){var b,s;s=ur=(b=ur)+31&-32,ur=ur+16|0,function(A,e,r,i,f,n,t,o,a,c,l,u,b){A|=0,e|=0,i|=0,a|=0,c|=0,l|=0,u|=0,b|=0;var s,d,k,h,w,v=0,m=0,g=0;switch(d=ur=(w=ur)+31&-32,ur=ur+80|0,h=8+d|0,k=(t|=0)+(f|=0)|0,s=(o|=0)+(n|=0)|0,t=f>>(o=0|ar[(r|=0)+10368>>2]),o=n>>o,(0|t)<=-1&&sr(48482,48519,118,48539),(0|(v=0|ar[r+10372>>2]))<=(0|t)&&sr(48482,48519,118,48539),(0|o)<=-1&&sr(48543,48519,119,48539),(0|o)>=(0|ar[r+10376>>2])&&sr(48543,48519,119,48539),v=(0|ar[r+10360>>2])+(3*((0|br(v,o))+t|0)|0)|0,(65535&(cr[v>>0]|cr[v+1>>0]<<8))>>>8&3){case 2:t=0|tr[i+10>>0],g=11;break;case 1:16&(t=0|tr[(o=i+10|0)>>0])?g=11:t=o;break;default:t=i+10|0}if(11==(0|g))return wc(A,e,r,f,n,k,s,a,c,l,u,g=(255&t)>>>5&255,h),g=h+(12*g|0)|0,or[b>>1]=0|or[g>>1],or[b+2>>1]=0|or[g+2>>1],or[b+4>>1]=0|or[g+4>>1],or[b+6>>1]=0|or[g+6>>1],or[b+8>>1]=0|or[g+8>>1],or[b+10>>1]=0|or[g+10>>1],0|tr[b>>0]&&12==(l+c|0)&0!=(0|tr[(m=b+1|0)>>0])&&(tr[b+3>>0]=-1,tr[m>>0]=0),ur=w;switch(3&tr[t>>0]){case 1:case 3:v=0|tr[i>>0],tr[b+2>>0]=v,tr[b>>0]=1,g=0|lr[i+4>>1],m=0|lr[i+2>>1],vc(A,e,r,f,n,a,k,s,c,l,0,v<<24>>24,u,h),v=h+(((0|cr[t>>0])>>>2&1)<<2)|0,v=lr[v>>1]|lr[v+2>>1]<<16,ar[d>>2]=v,g=(0|lr[2+d>>1])+g|0,or[b+4>>1]=v+m,or[b+6>>1]=g;break;default:tr[b+2>>0]=-1,tr[b>>0]=0}((3&tr[t>>0])-2&255)<2?(v=0|tr[i+1>>0],tr[b+3>>0]=v,tr[b+1>>0]=1,g=0|lr[i+8>>1],m=0|lr[i+6>>1],vc(A,e,r,f,n,a,k,s,c,l,1,v<<24>>24,u,h),c=h+(((0|cr[t>>0])>>>3&1)<<2)|0,c=lr[c>>1]|lr[c+2>>1]<<16,ar[4+d>>2]=c,g=(0|lr[6+d>>1])+g|0,or[b+8>>1]=c+m,or[b+10>>1]=g):(tr[b+3>>0]=-1,tr[b+1>>0]=0),ur=w}(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,s),function(A,e,r,i,f,n,t,o,a,c,l){A|=0,e|=0,o|=0,a|=0,c|=0,l|=0;var u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0;ur=(B=ur)+49168|0,w=B+32768|0,Y=(y=B)+49152|0,N=(n|=0)+(i|=0)|0,V=(t|=0)+(f|=0)|0,F=(r|=0)+764|0,v=0|ar[r+5780>>2],m=0|ar[r+5784>>2],k=0|ar[r+40>>2],J=(0|br(k,V))+N|0,J=(0|ar[r+4>>2])+(J<<cr[r+16>>0])|0,g=0|ar[r+44>>2],M=(0|br(g,(0|V)/(0|m)|0))+((0|N)/(0|v)|0)|0,Z=(0|ar[r+8>>2])+(M<<cr[r+17>>0])|0,M=(0|ar[r+12>>2])+(M<<cr[r+18>>0])|0,f=255&(u=0|tr[l>>0]),ar[Y>>2]=f,i=255&(D=0|tr[l+1>>0]),ar[(n=Y+4|0)>>2]=i,h=0|ar[(R=r+5760|0)>>2],p=0|ar[(_=r+5768|0)>>2],d=u<<24>>24==0,D<<24>>24==0|0!=(0|tr[(b=r+5961|0)>>0])|d||(0|or[l+4>>1])!=(0|or[l+8>>1])||(0|or[l+6>>1])!=(0|or[l+10>>1])||(0|ar[e+916+(tr[l+2>>0]<<2)>>2])!=(0|ar[e+980+(tr[l+3>>0]<<2)>>2])||(i=ar[n>>2]=0),s=r+10516|0,D=A+4|0,G=0,n=f;A:for(;;){do{if(0|n){if(15<(n=0|tr[l+2+G>>0])<<24>>24){Q=9;break A}if(C=0|Hb[31&ar[8+(0|ar[A>>2])>>2]](A,0|ar[e+916+(G<<6)+(n<<24>>24<<2)>>2]),!(0|ar[C+96>>2])){tr[s>>0]=3,er(D,1012,0);break}if(n=0|or[(W=l+4+(G<<2)|0)>>1],f=0|or[(I=l+4+(G<<2)+2|0)>>1],t=w+(G<<13)|0,E=0|ar[C+4>>2],X=0|ar[C+40>>2],(8<(0|ar[R>>2])?uc:bc)(A,F,n,f,N,V,t,o,E,X,a,c,h),n=0|or[W>>1],f=0|or[I>>1],t=y+(G<<13)|0,E=0|ar[C+8>>2],8<(0|ar[R>>2])){T=(0|a)/(0|v)|0,X=(0|c)/(0|m)|0,sc(A,F,n,f,N,V,t,o,E,0|ar[(U=C+44|0)>>2],T,X,p),sc(A,F,0|or[W>>1],0|or[I>>1],N,V,y+16384+(G<<13)|0,o,0|ar[C+12>>2],0|ar[U>>2],T,X,p);break}T=(0|a)/(0|v)|0,U=(0|c)/(0|m)|0,dc(A,F,n,f,N,V,t,o,E,0|ar[(X=C+44|0)>>2],T,U,p),dc(A,F,0|or[W>>1],0|or[I>>1],N,V,y+16384+(G<<13)|0,o,0|ar[C+12>>2],0|ar[X>>2],T,U,p);break}}while(0);if(2<=(0|(n=G+1|0)))break;n=0|ar[Y+((G=n)<<2)>>2]}if(9==(0|Q))return tr[s>>0]=3,er(D,1012,0),ur=B;switch(f=2<(0|(f=14-(0|ar[R>>2])|0))?f:2,V=0|cr[r+5920>>0],W=2<(0|(W=14-(0|ar[_>>2])|0))?W:2,Y=0|cr[r+5921>>0],0|ar[e+20>>2]){case 1:return i=u<<24>>24==1&0==(0|i),0|tr[b>>0]?i?(U=0|tr[l+2>>0],t=(0|cr[e+380>>0])+f|0,I=(0|cr[e+381>>0])+W|0,n=0|or[e+446+(U<<1)>>1],i=tr[e+510+U>>0]<<V,E=0|or[e+542+(U<<2)>>1],X=tr[e+670+(U<<1)>>0]<<Y,W=0|or[e+542+(U<<2)+2>>1],f=tr[e+670+(U<<1)+1>>0]<<Y,(0|h)<9?us[3&ar[A+180>>2]](J,k,w,o,a,c,n,i,t):bs[7&ar[A+196>>2]](J,k,w,o,a,c,n,i,t,h),n=(0|a)/(0|v)|0,i=(0|c)/(0|m)|0,(0|p)<9?(us[3&ar[(U=A+180|0)>>2]](Z,g,y,o,n,i,E,X,I),us[3&ar[U>>2]](M,g,y+16384|0,o,n,i,W,f,I)):(bs[7&ar[(U=A+196|0)>>2]](Z,g,y,o,n,i,E,X,I,p),bs[7&ar[U>>2]](M,g,y+16384|0,o,n,i,W,f,I,p))):(er(D,1011,0),tr[s>>0]=3):i?((0|h)<9?as[15&ar[A+176>>2]](J,k,w,o,a,c):cs[31&ar[A+192>>2]](J,k,w,o,a,c,h),n=(0|a)/(0|v)|0,i=(0|c)/(0|m)|0,(0|p)<9?(as[15&ar[(U=A+176|0)>>2]](Z,g,y,o,n,i),as[15&ar[U>>2]](M,g,y+16384|0,o,n,i)):(cs[31&ar[(U=A+192|0)>>2]](Z,g,y,o,n,i,p),cs[31&ar[U>>2]](M,g,y+16384|0,o,n,i,p))):(er(D,1011,0),tr[s>>0]=3),ur=B;case 0:return(n=u<<24>>24==1)&(i=1==(0|i))?0|tr[r+5962>>0]?(F=0|tr[l+2>>0],i=0|tr[l+3>>0],X=(0|cr[e+380>>0])+f|0,_=(0|cr[e+381>>0])+W|0,f=0|or[e+446+(F<<1)>>1],t=tr[e+510+F>>0]<<V,E=0|or[e+478+(i<<1)>>1],n=tr[e+526+i>>0]<<V,I=0|or[e+542+(F<<2)>>1],C=tr[e+670+(F<<1)>>0]<<Y,G=0|or[e+542+(F<<2)+2>>1],V=tr[e+670+(F<<1)+1>>0]<<Y,F=0|or[e+606+(i<<2)>>1],R=tr[e+702+(i<<1)>>0]<<Y,N=0|or[e+606+(i<<2)+2>>1],W=tr[e+702+(i<<1)+1>>0]<<Y,i=8192+w|0,(0|h)<9?ss[1&ar[A+184>>2]](J,k,w,i,o,a,c,f,t,E,n,X):ds[1&ar[A+200>>2]](J,k,w,i,o,a,c,f,t,E,n,X,h),f=y+8192|0,t=y+16384|0,E=y+24576|0,n=(0|a)/(0|v)|0,i=(0|c)/(0|m)|0,(0|p)<9?(ss[1&ar[(U=A+184|0)>>2]](Z,g,y,f,o,n,i,I,C,F,R,_),ss[1&ar[U>>2]](M,g,t,E,o,n,i,G,V,N,W,_)):(ds[1&ar[(U=A+200|0)>>2]](Z,g,y,f,o,n,i,I,C,F,R,_,p),ds[1&ar[U>>2]](M,g,t,E,o,n,i,G,V,N,W,_,p))):(i=8192+w|0,X=A+172|0,(0|h)<9?cs[31&ar[X>>2]](J,k,w,i,o,a,c):ls[31&ar[A+188>>2]](J,k,w,i,o,a,c,h),f=y+8192|0,t=y+16384|0,E=y+24576|0,n=(0|a)/(0|v)|0,i=(0|c)/(0|m)|0,(0|p)<9?(cs[31&ar[X>>2]](Z,g,y,f,o,n,i),cs[31&ar[X>>2]](M,g,t,E,o,n,i)):(ls[31&ar[(U=A+188|0)>>2]](Z,g,y,f,o,n,i,p),ls[31&ar[U>>2]](M,g,t,E,o,n,i,p))):n|i?(G=1&d,0|tr[r+5962>>0]?(t=0|tr[l+2+G>>0],E=(0|cr[e+380>>0])+f|0,C=(0|cr[e+381>>0])+W|0,f=0|or[e+446+(G<<5)+(t<<1)>>1],n=tr[e+510+(G<<4)+t>>0]<<V,X=0|or[e+542+(G<<6)+(t<<2)>>1],W=tr[e+670+(G<<5)+(t<<1)>>0]<<Y,I=0|or[e+542+(G<<6)+(t<<2)+2>>1],t=tr[e+670+(G<<5)+(t<<1)+1>>0]<<Y,i=w+(G<<13)|0,(0|h)<9?us[3&ar[A+180>>2]](J,k,i,o,a,c,f,n,E):bs[7&ar[A+196>>2]](J,k,i,o,a,c,f,n,E,h),f=y+(G<<13)|0,n=(0|a)/(0|v)|0,i=(0|c)/(0|m)|0,(0|p)<9?(us[3&ar[(U=A+180|0)>>2]](Z,g,f,o,n,i,X,W,C),us[3&ar[U>>2]](M,g,y+16384+(G<<13)|0,o,n,i,I,t,C)):(bs[7&ar[(U=A+196|0)>>2]](Z,g,f,o,n,i,X,W,C,p),bs[7&ar[U>>2]](M,g,y+16384+(G<<13)|0,o,n,i,I,t,C,p))):(i=w+(G<<13)|0,(0|h)<9?as[15&ar[A+176>>2]](J,k,i,o,a,c):cs[31&ar[A+192>>2]](J,k,i,o,a,c,h),f=y+(G<<13)|0,n=(0|a)/(0|v)|0,i=(0|c)/(0|m)|0,(0|p)<9?(as[15&ar[(U=A+176|0)>>2]](Z,g,f,o,n,i),as[15&ar[U>>2]](M,g,y+16384+(G<<13)|0,o,n,i)):(cs[31&ar[(U=A+192|0)>>2]](Z,g,f,o,n,i,p),cs[31&ar[U>>2]](M,g,y+16384+(G<<13)|0,o,n,i,p)))):(er(D,1011,0),tr[s>>0]=3),ur=B;default:sr(48395,48428,489,48438)}}(A,e,r,f,n,t,o,a,c,l,s),function(A,e,r,i,f,n){var t,o,a,c,l;if(n|=0,l=(e|=0)>>2,c=(r|=0)>>2,a=(i|=0)>>2,o=(f|=0)>>2,t=0|ar[(A|=0)+10392>>2],!((0|o)<=0)&&(i=A+10380|0,0<(0|a))){e=0;do{for(f=(0|br(e+c|0,t))+l|0,r=0;A=(0|ar[i>>2])+(12*(f+r|0)|0)|0,or[A>>1]=0|or[n>>1],or[A+2>>1]=0|or[n+2>>1],or[A+4>>1]=0|or[n+4>>1],or[A+6>>1]=0|or[n+6>>1],or[A+8>>1]=0|or[n+8>>1],or[A+10>>1]=0|or[n+10>>1],(0|(r=r+1|0))!=(0|a););e=e+1|0}while((0|e)!=(0|o))}}(r,t+f|0,o+n|0,c,l,s),ur=b}function gc(A){var e;for(e=(A|=0)+100|0;(0|(A=A+2|(or[A>>1]=0)))<(0|e););}function Zc(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,n|=0,t|=0;var o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;if(o=ur,0!=(0|(f|=0))&&(255&(0|At(r,1)))<<24>>24!=0){do{if(t){if(-99999!=(0|(t=0|it(r)))&(0|t)<(0|f)){t=t+1|0;break}return ur=o,(i=0)|i}t=1}while(0);if((0|(X=f-t|0))<=-1&&sr(48788,48796,129,48806),l=0|At(r,1),-99999==(0|(t=0|it(r))))return ur=o,(i=0)|i;for(u=t+1|0,a=~t,y=0|cr[(0|ar[n>>2])+(100*X|0)+98>>0],ur=(E=ur=(B=ur)+(15+(0|+(c=y+1|0))&-16)|0)+(15+(0|+c)&-16)|0,t=0;p=255&(0|At(r,1)),f=(tr[B+t>>0]=p)<<24>>24?1:255&(0|At(r,1)),tr[E+t>>0]=f,(0|(t=t+1|0))!=(0|c););g=0|l?a:u,t=0|ar[n>>2],Z=255&(u=0|tr[t+(100*X|0)+96>>0]),p=255&(w=0|tr[t+(100*X|0)+97>>0]),w=w<<24>>24==0;A:do{if(w)d=0;else{X>>>0<(((0|ar[(l=n+4|0)>>2])-t|0)/100|0)>>>0?(b=p,k=0,s=t):sr(48834,48796,174,48806);e:for(;;){for(t=b;;){if(a=t+-1|0,17<=(0|t)){I=18;break e}if((0|(f=(0|or[s+(100*X|0)+32+(a<<1)>>1])+g|0))<0&&0|tr[E+(h=a+Z|0)>>0])break;if(!(1<(0|t))){d=k;break A}t=a}if(15<(0|k)){v=0,I=74;break}if(c=k+1|0,or[i+(k<<1)>>1]=f,tr[i+64+k>>0]=0|tr[B+h>>0],(0|t)<=1){d=c;break A}if(t=0|ar[n>>2],!(X>>>0<(((0|ar[l>>2])-t|0)/100|0)>>>0)){I=17;break}b=a,k=c,s=t}if(17==(0|I))sr(48834,48796,174,48806);else if(18==(0|I))sr(48866,48796,175,48806);else if(74==(0|I))return ur=o,0|v}}while(0);do{if((0|g)<0&&0!=(0|tr[E+y>>0])){if(15<(0|d))return ur=o,(i=0)|i;or[i+(d<<1)>>1]=g,tr[i+64+d>>0]=0|tr[B+y>>0],t=d+1|0;break}t=d}while(0);c=u<<24>>24==0;A:do{if(c)tr[(u=i+96|0)>>0]=t,t=0;else{for(a=0;;){if((0|(f=(0|or[(0|ar[n>>2])+(100*X|0)+(a<<1)>>1])+g|0))<0&&0!=(0|tr[E+a>>0])){if(15<(0|t)){v=0,I=74;break}or[i+(t<<1)>>1]=f,tr[i+64+t>>0]=0|tr[B+a>>0],m=t+1|0}else m=t;if((0|Z)<=(0|(a=a+1|0)))break;t=m}if(74==(0|I))return ur=o,0|v;if(tr[(u=i+96|0)>>0]=m,!c){for(f=Z,t=0;;){for(c=0|ar[n>>2],a=f;!(0<(0|(l=(0|or[c+(100*X|0)+((f=a+-1|0)<<1)>>1])+g|0))&&0|tr[E+f>>0]);){if(!(1<(0|a)))break A;a=f}if(15<(0|t)){v=0;break}if(c=t+1|0,or[i+32+(t<<1)>>1]=l,tr[i+80+t>>0]=0|tr[B+f>>0],!(1<(0|a))){t=c;break A}t=c}return ur=o,0|v}t=0}}while(0);do{if(0<(0|g)&&0!=(0|tr[E+y>>0])){if(15<(0|t))return ur=o,(i=0)|i;or[i+32+(t<<1)>>1]=g,tr[i+80+t>>0]=0|tr[B+y>>0],t=t+1|0;break}}while(0);A:do{if(!w){for(a=0;;){if(0<(0|(f=(0|or[(0|ar[n>>2])+(100*X|0)+32+(a<<1)>>1])+g|0))&&0!=(0|tr[E+(W=a+Z|0)>>0])){if(15<(0|t)){v=0;break}or[i+32+(t<<1)>>1]=f,tr[i+80+t>>0]=0|tr[B+W>>0],t=t+1|0}if((0|p)<=(0|(a=a+1|0)))break A}return ur=o,0|v}}while(0);tr[i+97>>0]=t}else I=54;A:do{if(54==(0|I)){if(l=0|it(r),((b=0|it(r))+l|0)>(0|ar[e+528+((0|tr[e+2>>0])-1<<2)>>2]))return or[(i=i+96|0)>>1]=0,er(A,1018,or[i+2>>1]=0),ur=o,(i=0)|i;if(16<(0|l)|16<(0|b))return er(A,1018,0),ur=o,(i=0)|i;tr[(u=i+96|0)>>0]=l,tr[i+97>>0]=b;e:do{if(0<(0|l)){for(f=t=0;;){if(-99999==(0|(a=0|it(r)))){v=0;break}if(e=255&(0|At(r,1)),or[(c=i+(t<<1)|0)>>1]=f+65535-a,tr[i+64+t>>0]=e,(0|l)<=(0|(t=t+1|0)))break e;f=0|or[c>>1]}return ur=o,0|v}}while(0);if(0<(0|b)){for(f=t=0;;){if(-99999==(0|(a=0|it(r)))){v=0;break}if(e=255&(0|At(r,1)),or[(c=i+32+(t<<1)|0)>>1]=f+1+a,tr[i+80+t>>0]=e,(0|b)<=(0|(t=t+1|0)))break A;f=0|or[c>>1]}return ur=o,0|v}}}while(0);if((l=(tr[(b=i+99|0)>>0]=0)|tr[u>>0])<<24>>24)for(c=255&l,f=a=0;t=f+1<<24>>24,0|tr[i+64+a>>0]?tr[b>>0]=t:t=f,(0|(a=a+1|0))!=(0|c);)f=t;else t=0;if(c=255&(r=0|tr[i+97>>0]),r<<24>>24)for(a=0;f=t+1<<24>>24,0|tr[i+80+a>>0]&&(t=tr[b>>0]=f),(0|(a=a+1|0))!=(0|c););return tr[i+98>>0]=c+(255&l),ur=o,0|(i=1)}function pc(A,e,r){A|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0,b=0;if(t=16+(i=ur=(o=ur)+31&-32)|0,n=8+i|0,ur=(f=ur=ur+32|0)+(15+((a=(e|=0)<<1)+2|0)&-16)|0,(tr[f+(a|=1)>>0]=0)<(0|a)&&vb(0|f,46,0|a),tr[f+e>>0]=124,(a=0|tr[A+96>>0])<<24>>24)for(b=0-e|0,a&=255;u=0|or[A+((a=(c=a)+-1|0)<<1)>>1],l=0|tr[A+64+a>>0]?88:111,(0|u)<(0|b)?(ar[i>>2]=u,ar[4+i>>2]=255&l,Pn(r,48895,i)):tr[f+(u+e)>>0]=l,1<(0|c););if(!((a=0|tr[A+97>>0])<<24>>24))return ar[n>>2]=f,Pn(r,48902,n),void(ur=o);for(a&=255;u=0|or[A+32+((a=(c=a)+-1|0)<<1)>>1],l=0|tr[A+80+a>>0]?88:111,(0|e)<(0|u)?(ar[t>>2]=u,ar[4+t>>2]=255&l,Pn(r,48895,t)):tr[f+(u+e)>>0]=l,1<(0|c););ar[n>>2]=f,Pn(r,48902,n),ur=o}function yc(A){A|=0;var e,r=0,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;s=ur=(e=ur)+31&-32,ur=ur+16|0;do{if(A>>>0<245){if(A=(l=A>>>0<11?16:A+11&-8)>>>3,3&(i=(b=0|ar[14392])>>>A)|0)return f=0|ar[(i=(A=57608+((r=(1&i^1)+A|0)<<1<<2)|0)+8|0)>>2],(0|A)==(0|(t=0|ar[(n=f+8|0)>>2]))?ar[14392]=b&~(1<<r):(ar[t+12>>2]=A,ar[i>>2]=t),Z=r<<3,ar[f+4>>2]=3|Z,ar[(Z=f+Z+4|0)>>2]=1|ar[Z>>2],ur=e,0|(Z=n);if((u=0|ar[14394])>>>0<l>>>0){if(0|i)return r=((r=i<<A&((r=2<<A)|0-r))&0-r)-1|0,n=0|ar[(A=(r=57608+((f=((i=(r>>>=o=r>>>12&16)>>>5&8)|o|(n=(r>>>=i)>>>2&4)|(A=(r>>>=n)>>>1&2)|(f=(r>>>=A)>>>1&1))+(r>>>f)|0)<<1<<2)|0)+8|0)>>2],(0|r)==(0|(i=0|ar[(o=n+8|0)>>2]))?(A=b&~(1<<f),ar[14392]=A):(ar[i+12>>2]=r,ar[A>>2]=i,A=b),t=(f<<3)-l|0,ar[n+4>>2]=3|l,ar[(f=n+l|0)+4>>2]=1|t,ar[f+t>>2]=t,0|u&&(n=0|ar[14397],i=57608+((r=u>>>3)<<1<<2)|0,A&(r=1<<r)?r=0|ar[(A=i+8|0)>>2]:(ar[14392]=A|r,A=(r=i)+8|0),ar[A>>2]=n,ar[r+12>>2]=n,ar[n+8>>2]=r,ar[n+12>>2]=i),ar[14394]=t,ar[14397]=f,ur=e,0|(Z=o);if(a=0|ar[14393]){if(i=(a&0-a)-1|0,A=0|ar[57872+(((t=(i>>>=o=i>>>12&16)>>>5&8)|o|(c=(i>>>=t)>>>2&4)|(f=(i>>>=c)>>>1&2)|(A=(i>>>=f)>>>1&1))+(i>>>A)<<2)>>2],i=(-8&ar[A+4>>2])-l|0,f=0|ar[A+16+((0==(0|ar[A+16>>2])&1)<<2)>>2]){for(;i=(c=(o=(-8&ar[f+4>>2])-l|0)>>>0<i>>>0)?o:i,A=c?f:A,0!=(0|(f=0|ar[f+16+((0==(0|ar[f+16>>2])&1)<<2)>>2])););c=A,t=i}else c=A,t=i;if(c>>>0<(o=c+l|0)>>>0){n=0|ar[c+24>>2],r=0|ar[c+12>>2];do{if((0|r)==(0|c)){if(!(r=0|ar[(A=c+20|0)>>2])&&!(r=0|ar[(A=c+16|0)>>2])){i=0;break}for(;;)if(0|(f=0|ar[(i=r+20|0)>>2]))r=f,A=i;else{if(!(f=0|ar[(i=r+16|0)>>2]))break;r=f,A=i}ar[A>>2]=0,i=r}else i=0|ar[c+8>>2],ar[i+12>>2]=r,ar[r+8>>2]=i,i=r}while(0);do{if(0|n){if(r=0|ar[c+28>>2],(0|c)==(0|ar[(A=57872+(r<<2)|0)>>2])){if(!(ar[A>>2]=i)){ar[14393]=a&~(1<<r);break}}else if(!(ar[n+16+(((0|ar[n+16>>2])!=(0|c)&1)<<2)>>2]=i))break;ar[i+24>>2]=n,0|(r=0|ar[c+16>>2])&&(ar[i+16>>2]=r,ar[r+24>>2]=i),0|(r=0|ar[c+20>>2])&&(ar[i+20>>2]=r,ar[r+24>>2]=i)}}while(0);return t>>>0<16?(Z=t+l|0,ar[c+4>>2]=3|Z,ar[(Z=c+Z+4|0)>>2]=1|ar[Z>>2]):(ar[c+4>>2]=3|l,ar[o+4>>2]=1|t,ar[o+t>>2]=t,0|u&&(f=0|ar[14397],i=57608+((r=u>>>3)<<1<<2)|0,b&(r=1<<r)?r=0|ar[(A=i+8|0)>>2]:(ar[14392]=b|r,A=(r=i)+8|0),ar[A>>2]=f,ar[r+12>>2]=f,ar[f+8>>2]=r,ar[f+12>>2]=i),ar[14394]=t,ar[14397]=o),ur=e,0|(Z=c+8|0)}b=l}else b=l}else b=l}else if(A>>>0<=4294967231)if(l=-8&(A=A+11|0),c=0|ar[14393]){f=0-l|0,a=(A>>>=8)?16777215<l>>>0?31:l>>>((a=14-((u=((g=A<<(b=(A+1048320|0)>>>16&8))+520192|0)>>>16&4)|b|(a=((g<<=u)+245760|0)>>>16&2))+(g<<a>>>15)|0)+7|0)&1|a<<1:0,i=0|ar[57872+(a<<2)>>2];A:do{if(i)for(o=l<<(31==((A=0)|a)?0:25-(a>>>1)|0),t=0;;){if((n=(-8&ar[i+4>>2])-l|0)>>>0<f>>>0){if(!n){f=0,n=A=i,g=61;break A}A=i,f=n}if(t=0==(0|(n=0|ar[i+20>>2]))|(0|n)==(0|(i=0|ar[i+16+(o>>>31<<2)>>2]))?t:n,n=0==(0|i)){i=t,g=57;break}o<<=1&(1^n)}else A=i=0,g=57}while(0);if(57==(0|g)){if(0==(0|i)&0==(0|A)){if(!(A=c&((A=2<<a)|0-A))){b=l;break}b=(A&0-A)-1|0,i=(A=0)|ar[57872+(((t=(b>>>=o=b>>>12&16)>>>5&8)|o|(a=(b>>>=t)>>>2&4)|(u=(b>>>=a)>>>1&2)|(i=(b>>>=u)>>>1&1))+(b>>>i)<<2)>>2]}i?(n=i,g=61):(a=A,o=f)}if(61==(0|g))for(;;){if(g=0,i=(b=(i=(-8&ar[n+4>>2])-l|0)>>>0<f>>>0)?i:f,A=b?n:A,!(n=0|ar[n+16+((0==(0|ar[n+16>>2])&1)<<2)>>2])){a=A,o=i;break}f=i,g=61}if(0!=(0|a)&&o>>>0<((0|ar[14394])-l|0)>>>0){if((t=a+l|0)>>>0<=a>>>0)return ur=e,(Z=0)|Z;n=0|ar[a+24>>2],r=0|ar[a+12>>2];do{if((0|r)==(0|a)){if(!(r=0|ar[(A=a+20|0)>>2])&&!(r=0|ar[(A=a+16|0)>>2])){r=0;break}for(;;)if(0|(f=0|ar[(i=r+20|0)>>2]))r=f,A=i;else{if(!(f=0|ar[(i=r+16|0)>>2]))break;r=f,A=i}ar[A>>2]=0}else Z=0|ar[a+8>>2],ar[Z+12>>2]=r,ar[r+8>>2]=Z}while(0);do{if(n){if(A=0|ar[a+28>>2],(0|a)==(0|ar[(i=57872+(A<<2)|0)>>2])){if(!(ar[i>>2]=r)){f=c&~(1<<A),ar[14393]=f;break}}else if(!(ar[n+16+(((0|ar[n+16>>2])!=(0|a)&1)<<2)>>2]=r)){f=c;break}ar[r+24>>2]=n,0|(A=0|ar[a+16>>2])&&(ar[r+16>>2]=A,ar[A+24>>2]=r),f=((A=0|ar[a+20>>2])&&(ar[r+20>>2]=A,ar[A+24>>2]=r),c)}else f=c}while(0);do{if(16<=o>>>0){if(ar[a+4>>2]=3|l,ar[t+4>>2]=1|o,r=(ar[t+o>>2]=o)>>>3,o>>>0<256){i=57608+(r<<1<<2)|0,(A=0|ar[14392])&(r=1<<r)?r=0|ar[(A=i+8|0)>>2]:(ar[14392]=A|r,A=(r=i)+8|0),ar[A>>2]=t,ar[r+12>>2]=t,ar[t+8>>2]=r,ar[t+12>>2]=i;break}if(i=57872+((r=(r=o>>>8)?16777215<o>>>0?31:o>>>((r=14-((m=((Z=r<<(g=(r+1048320|0)>>>16&8))+520192|0)>>>16&4)|g|(r=((Z<<=m)+245760|0)>>>16&2))+(Z<<r>>>15)|0)+7|0)&1|r<<1:0)<<2)|0,ar[t+28>>2]=r,ar[(A=t+16|0)+4>>2]=0,ar[A>>2]=0,!(f&(A=1<<r))){ar[14393]=f|A,ar[i>>2]=t,ar[t+24>>2]=i,ar[t+12>>2]=t,ar[t+8>>2]=t;break}for(A=o<<(31==(0|r)?0:25-(r>>>1)|0),i=0|ar[i>>2];;){if((-8&ar[i+4>>2]|0)==(0|o)){g=97;break}if(!(r=0|ar[(f=i+16+(A>>>31<<2)|0)>>2])){g=96;break}A<<=1,i=r}if(96==(0|g)){ar[f>>2]=t,ar[t+24>>2]=i,ar[t+12>>2]=t,ar[t+8>>2]=t;break}if(97==(0|g)){Z=0|ar[(g=i+8|0)>>2],ar[Z+12>>2]=t,ar[g>>2]=t,ar[t+8>>2]=Z,ar[t+12>>2]=i,ar[t+24>>2]=0;break}}else Z=o+l|0,ar[a+4>>2]=3|Z,ar[(Z=a+Z+4|0)>>2]=1|ar[Z>>2]}while(0);return ur=e,0|(Z=a+8|0)}b=l}else b=l;else b=-1}while(0);if(b>>>0<=(i=0|ar[14394])>>>0)return r=i-b|0,A=0|ar[14397],15<r>>>0?(Z=A+b|0,ar[14397]=Z,ar[14394]=r,ar[Z+4>>2]=1|r,ar[Z+r>>2]=r,ar[A+4>>2]=3|b):(ar[14394]=0,ar[14397]=0,ar[A+4>>2]=3|i,ar[(Z=A+i+4|0)>>2]=1|ar[Z>>2]),ur=e,0|(Z=A+8|0);if(b>>>0<(o=0|ar[14395])>>>0)return m=o-b|0,ar[14395]=m,g=(Z=0|ar[14398])+b|0,ar[14398]=g,ar[g+4>>2]=1|m,ar[Z+4>>2]=3|b,ur=e,0|(Z=Z+8|0);if(a=b+48|0,(l=(t=(A=0|ar[14510]?0|ar[14512]:(ar[14512]=4096,ar[14511]=4096,ar[14513]=-1,ar[14514]=-1,ar[14515]=0,ar[14503]=0,A=-16&s^1431655768,ar[s>>2]=A,ar[14510]=A,4096))+(c=b+47|0)|0)&(n=0-A|0))>>>0<=b>>>0)return ur=e,(Z=0)|Z;if(0|(A=0|ar[14502])&&(s=(u=0|ar[14500])+l|0)>>>0<=u>>>0|A>>>0<s>>>0)return ur=e,(Z=0)|Z;A:do{if(4&ar[14503])r=0,g=133;else{i=0|ar[14398];e:do{if(i){for(f=58016;!((A=0|ar[f>>2])>>>0<=i>>>0&&(A+(0|ar[(h=f+4|0)>>2])|0)>>>0>i>>>0);){if(!(A=0|ar[f+8>>2])){g=118;break e}f=A}if((r=t-o&n)>>>0<2147483647)if((0|(A=0|yb(0|r)))==((0|ar[f>>2])+(0|ar[h>>2])|0)){if(-1!=(0|A)){o=r,t=A,g=135;break A}}else f=A,g=126;else r=0}else g=118}while(0);do{if(118==(0|g))if(-1!=(0|(i=0|yb(0)))&&(r=i,k=(r=(0==((k=(d=0|ar[14511])+-1|0)&r|0)?0:(k+r&0-d)-r|0)+l|0)+(d=0|ar[14500])|0,b>>>0<r>>>0&r>>>0<2147483647)){if(0|(h=0|ar[14502])&&k>>>0<=d>>>0|h>>>0<k>>>0){r=0;break}if((0|(A=0|yb(0|r)))==(0|i)){o=r,t=i,g=135;break A}f=A,g=126}else r=0}while(0);do{if(126==(0|g)){if(i=0-r|0,!(r>>>0<a>>>0&r>>>0<2147483647&-1!=(0|f))){if(-1==(0|f)){r=0;break}o=r,t=f,g=135;break A}if(2147483647<=(A=c-r+(A=0|ar[14512])&0-A)>>>0){o=r,t=f,g=135;break A}if(-1==(0|yb(0|A))){yb(0|i),r=0;break}o=A+r|0,t=f,g=135;break A}}while(0);ar[14503]=4|ar[14503],g=133}}while(0);if(133==(0|g)&&l>>>0<2147483647&&!(-1==(0|(m=0|yb(0|l)))|1^(v=(b+40|0)>>>0<(w=(h=0|yb(0))-m|0)>>>0)|m>>>0<h>>>0&-1!=(0|m)&-1!=(0|h)^1)&&(o=v?w:r,t=m,g=135),135==(0|g)){r=(0|ar[14500])+o|0,(ar[14500]=r)>>>0>(0|ar[14501])>>>0&&(ar[14501]=r),c=0|ar[14398];do{if(c){for(r=58016;;){if((0|t)==((A=0|ar[r>>2])+(f=0|ar[(i=r+4|0)>>2])|0)){g=145;break}if(!(n=0|ar[r+8>>2]))break;r=n}if(145==(0|g)&&0==(8&ar[r+12>>2]|0)&&c>>>0<t>>>0&A>>>0<=c>>>0){ar[i>>2]=f+o,g=c+(Z=0==(7&(Z=c+8|0)|0)?0:0-Z&7)|0,Z=(0|ar[14395])+(o-Z)|0,ar[14398]=g,ar[14395]=Z,ar[g+4>>2]=1|Z,ar[g+Z+4>>2]=40,ar[14399]=ar[14514];break}for(t>>>0<(0|ar[14396])>>>0&&(ar[14396]=t),i=t+o|0,r=58016;;){if((0|ar[r>>2])==(0|i)){g=153;break}if(!(A=0|ar[r+8>>2]))break;r=A}if(153==(0|g)&&0==(8&ar[r+12>>2]|0)){ar[r>>2]=t,ar[(u=r+4|0)>>2]=(0|ar[u>>2])+o,l=(u=t+(0==(7&(u=t+8|0)|0)?0:0-u&7)|0)+b|0,a=(r=i+(0==(7&(r=i+8|0)|0)?0:0-r&7)|0)-u-b|0,ar[u+4>>2]=3|b;do{if((0|r)!=(0|c)){if((0|r)==(0|ar[14397])){Z=(0|ar[14394])+a|0,ar[14394]=Z,ar[14397]=l,ar[l+4>>2]=1|Z,ar[l+Z>>2]=Z;break}if(1==(3&(A=0|ar[r+4>>2])|0)){o=-8&A,f=A>>>3;A:do{if(A>>>0<256){if(A=0|ar[r+8>>2],(0|(i=0|ar[r+12>>2]))==(0|A)){ar[14392]=ar[14392]&~(1<<f);break}ar[A+12>>2]=i,ar[i+8>>2]=A;break}t=0|ar[r+24>>2],A=0|ar[r+12>>2];do{if((0|A)==(0|r)){if(!(A=0|ar[(i=(f=r+16|0)+4|0)>>2])){if(!(A=0|ar[f>>2])){A=0;break}i=f}for(;;)if(0|(n=0|ar[(f=A+20|0)>>2]))A=n,i=f;else{if(!(n=0|ar[(f=A+16|0)>>2]))break;A=n,i=f}ar[i>>2]=0}else Z=0|ar[r+8>>2],ar[Z+12>>2]=A,ar[A+8>>2]=Z}while(0);if(!t)break;f=57872+((i=0|ar[r+28>>2])<<2)|0;do{if((0|r)==(0|ar[f>>2])){if(0|(ar[f>>2]=A))break;ar[14393]=ar[14393]&~(1<<i);break A}if(!(ar[t+16+(((0|ar[t+16>>2])!=(0|r)&1)<<2)>>2]=A))break A}while(0);if(ar[A+24>>2]=t,0|(f=0|ar[(i=r+16|0)>>2])&&(ar[A+16>>2]=f,ar[f+24>>2]=A),!(i=0|ar[i+4>>2]))break;ar[A+20>>2]=i,ar[i+24>>2]=A}while(0);r=r+o|0,n=o+a|0}else n=a;if(ar[(r=r+4|0)>>2]=-2&ar[r>>2],ar[l+4>>2]=1|n,r=(ar[l+n>>2]=n)>>>3,n>>>0<256){i=57608+(r<<1<<2)|0,(A=0|ar[14392])&(r=1<<r)?r=0|ar[(A=i+8|0)>>2]:(ar[14392]=A|r,A=(r=i)+8|0),ar[A>>2]=l,ar[r+12>>2]=l,ar[l+8>>2]=r,ar[l+12>>2]=i;break}r=n>>>8;do{if(r){if(16777215<n>>>0){r=31;break}r=n>>>((r=14-((m=((Z=r<<(g=(r+1048320|0)>>>16&8))+520192|0)>>>16&4)|g|(r=((Z<<=m)+245760|0)>>>16&2))+(Z<<r>>>15)|0)+7|0)&1|r<<1}else r=0}while(0);if(f=57872+(r<<2)|0,ar[l+28>>2]=r,ar[(A=l+16|0)+4>>2]=0,!((A=(ar[A>>2]=0)|ar[14393])&(i=1<<r))){ar[14393]=A|i,ar[f>>2]=l,ar[l+24>>2]=f,ar[l+12>>2]=l,ar[l+8>>2]=l;break}for(A=n<<(31==(0|r)?0:25-(r>>>1)|0),i=0|ar[f>>2];;){if((-8&ar[i+4>>2]|0)==(0|n)){g=194;break}if(!(r=0|ar[(f=i+16+(A>>>31<<2)|0)>>2])){g=193;break}A<<=1,i=r}if(193==(0|g)){ar[f>>2]=l,ar[l+24>>2]=i,ar[l+12>>2]=l,ar[l+8>>2]=l;break}if(194==(0|g)){Z=0|ar[(g=i+8|0)>>2],ar[Z+12>>2]=l,ar[g>>2]=l,ar[l+8>>2]=Z,ar[l+12>>2]=i,ar[l+24>>2]=0;break}}else Z=(0|ar[14395])+a|0,ar[14395]=Z,ar[14398]=l,ar[l+4>>2]=1|Z}while(0);return ur=e,0|(Z=u+8|0)}for(r=58016;!((A=0|ar[r>>2])>>>0<=c>>>0&&c>>>0<(Z=A+(0|ar[r+4>>2])|0)>>>0);)r=0|ar[r+8>>2];for(r=(A=(A=(n=Z+-47|0)+(0==(7&(A=n+8|0)|0)?0:0-A&7)|0)>>>0<(n=c+16|0)>>>0?c:A)+8|0,g=t+(i=0==(7&(i=t+8|0)|0)?0:0-i&7)|0,i=o+-40-i|0,ar[14398]=g,ar[14395]=i,ar[g+4>>2]=1|i,ar[g+i+4>>2]=40,ar[14399]=ar[14514],ar[(i=A+4|0)>>2]=27,ar[r>>2]=ar[14504],ar[r+4>>2]=ar[14505],ar[r+8>>2]=ar[14506],ar[r+12>>2]=ar[14507],ar[14504]=t,ar[14505]=o,ar[14507]=0,ar[14506]=r,r=A+24|0;ar[(r=(g=r)+4|0)>>2]=7,(g+8|0)>>>0<Z>>>0;);if((0|A)!=(0|c)){if(t=A-c|0,ar[i>>2]=-2&ar[i>>2],ar[c+4>>2]=1|t,r=(ar[A>>2]=t)>>>3,t>>>0<256){i=57608+(r<<1<<2)|0,(A=0|ar[14392])&(r=1<<r)?r=0|ar[(A=i+8|0)>>2]:(ar[14392]=A|r,A=(r=i)+8|0),ar[A>>2]=c,ar[r+12>>2]=c,ar[c+8>>2]=r,ar[c+12>>2]=i;break}if(f=57872+((i=(r=t>>>8)?16777215<t>>>0?31:t>>>((i=14-((m=((Z=r<<(g=(r+1048320|0)>>>16&8))+520192|0)>>>16&4)|g|(i=((Z<<=m)+245760|0)>>>16&2))+(Z<<i>>>15)|0)+7|0)&1|i<<1:0)<<2)|0,ar[c+28>>2]=i,ar[c+20>>2]=0,!((r=(ar[n>>2]=0)|ar[14393])&(A=1<<i))){ar[14393]=r|A,ar[f>>2]=c,ar[c+24>>2]=f,ar[c+12>>2]=c,ar[c+8>>2]=c;break}for(A=t<<(31==(0|i)?0:25-(i>>>1)|0),i=0|ar[f>>2];;){if((-8&ar[i+4>>2]|0)==(0|t)){g=216;break}if(!(r=0|ar[(f=i+16+(A>>>31<<2)|0)>>2])){g=215;break}A<<=1,i=r}if(215==(0|g)){ar[f>>2]=c,ar[c+24>>2]=i,ar[c+12>>2]=c,ar[c+8>>2]=c;break}if(216==(0|g)){Z=0|ar[(g=i+8|0)>>2],ar[Z+12>>2]=c,ar[g>>2]=c,ar[c+8>>2]=Z,ar[c+12>>2]=i,ar[c+24>>2]=0;break}}}else{for(0==(0|(Z=0|ar[14396]))|t>>>0<Z>>>0&&(ar[14396]=t),ar[14504]=t,ar[14505]=o,ar[14507]=0,ar[14401]=ar[14510],ar[14400]=-1,r=0;ar[(Z=57608+(r<<1<<2)|0)+12>>2]=Z,ar[Z+8>>2]=Z,32!=(0|(r=r+1|0)););g=t+(Z=0==(7&(Z=t+8|0)|0)?0:0-Z&7)|0,Z=o+-40-Z|0,ar[14398]=g,ar[14395]=Z,ar[g+4>>2]=1|Z,ar[g+Z+4>>2]=40,ar[14399]=ar[14514]}}while(0);if(b>>>0<(r=0|ar[14395])>>>0)return m=r-b|0,ar[14395]=m,g=(Z=0|ar[14398])+b|0,ar[14398]=g,ar[g+4>>2]=1|m,ar[Z+4>>2]=3|b,ur=e,0|(Z=Z+8|0)}return ar[(Z=10364)>>2]=12,ur=e,(Z=0)|Z}function Bc(A){var e=0,r=0,i=0,f=0,n=0,t=0,o=0,a=0;if(A|=0){r=A+-8|0,f=0|ar[14396],a=r+(e=-8&(A=0|ar[A+-4>>2]))|0;do{if(1&A)t=o=r;else{if(i=0|ar[r>>2],!(3&A))return;if(n=i+e|0,(t=r+(0-i)|0)>>>0<f>>>0)return;if((0|t)==(0|ar[14397])){if(3==(3&(e=0|ar[(A=a+4|0)>>2])|0))return ar[14394]=n,ar[A>>2]=-2&e,ar[t+4>>2]=1|n,void(ar[t+n>>2]=n);o=t,e=n;break}if(r=i>>>3,i>>>0<256){if(A=0|ar[t+8>>2],(0|(e=0|ar[t+12>>2]))==(0|A)){ar[14392]=ar[14392]&~(1<<r),o=t,e=n;break}ar[A+12>>2]=e,ar[e+8>>2]=A,o=t,e=n;break}f=0|ar[t+24>>2],A=0|ar[t+12>>2];do{if((0|A)==(0|t)){if(!(A=0|ar[(e=(r=t+16|0)+4|0)>>2])){if(!(A=0|ar[r>>2])){A=0;break}e=r}for(;;)if(0|(i=0|ar[(r=A+20|0)>>2]))A=i,e=r;else{if(!(i=0|ar[(r=A+16|0)>>2]))break;A=i,e=r}ar[e>>2]=0}else o=0|ar[t+8>>2],ar[o+12>>2]=A,ar[A+8>>2]=o}while(0);if(f){if(e=0|ar[t+28>>2],(0|t)==(0|ar[(r=57872+(e<<2)|0)>>2])){if(!(ar[r>>2]=A)){ar[14393]=ar[14393]&~(1<<e),o=t,e=n;break}}else if(!(ar[f+16+(((0|ar[f+16>>2])!=(0|t)&1)<<2)>>2]=A)){o=t,e=n;break}ar[A+24>>2]=f,0|(r=0|ar[(e=t+16|0)>>2])&&(ar[A+16>>2]=r,ar[r+24>>2]=A),e=(o=((e=0|ar[e+4>>2])&&(ar[A+20>>2]=e,ar[e+24>>2]=A),t),n)}else o=t,e=n}}while(0);if(!(a>>>0<=t>>>0)&&1&(i=0|ar[(A=a+4|0)>>2])){if(2&i)ar[A>>2]=-2&i,ar[o+4>>2]=1|e,f=ar[t+e>>2]=e;else{if(A=0|ar[14397],(0|a)==(0|ar[14398])){if(a=(0|ar[14395])+e|0,ar[14395]=a,ar[14398]=o,ar[o+4>>2]=1|a,(0|o)!=(0|A))return;return ar[14397]=0,void(ar[14394]=0)}if((0|a)==(0|A))return a=(0|ar[14394])+e|0,ar[14394]=a,ar[14397]=t,ar[o+4>>2]=1|a,void(ar[t+a>>2]=a);f=(-8&i)+e|0,r=i>>>3;do{if(i>>>0<256){if(e=0|ar[a+8>>2],(0|(A=0|ar[a+12>>2]))==(0|e)){ar[14392]=ar[14392]&~(1<<r);break}ar[e+12>>2]=A,ar[A+8>>2]=e;break}n=0|ar[a+24>>2],A=0|ar[a+12>>2];do{if((0|A)==(0|a)){if(!(A=0|ar[(e=(r=a+16|0)+4|0)>>2])){if(!(A=0|ar[r>>2])){r=0;break}e=r}for(;;)if(0|(i=0|ar[(r=A+20|0)>>2]))A=i,e=r;else{if(!(i=0|ar[(r=A+16|0)>>2]))break;A=i,e=r}ar[e>>2]=0,r=A}else r=0|ar[a+8>>2],ar[r+12>>2]=A,ar[A+8>>2]=r,r=A}while(0);if(0|n){if(A=0|ar[a+28>>2],(0|a)==(0|ar[(e=57872+(A<<2)|0)>>2])){if(!(ar[e>>2]=r)){ar[14393]=ar[14393]&~(1<<A);break}}else if(!(ar[n+16+(((0|ar[n+16>>2])!=(0|a)&1)<<2)>>2]=r))break;ar[r+24>>2]=n,0|(e=0|ar[(A=a+16|0)>>2])&&(ar[r+16>>2]=e,ar[e+24>>2]=r),0|(A=0|ar[A+4>>2])&&(ar[r+20>>2]=A,ar[A+24>>2]=r)}}while(0);if(ar[o+4>>2]=1|f,ar[t+f>>2]=f,(0|o)==(0|ar[14397]))return void(ar[14394]=f)}if(A=f>>>3,f>>>0<256)return r=57608+(A<<1<<2)|0,(e=0|ar[14392])&(A=1<<A)?A=0|ar[(e=r+8|0)>>2]:(ar[14392]=e|A,e=(A=r)+8|0),ar[e>>2]=o,ar[A+12>>2]=o,ar[o+8>>2]=A,void(ar[o+12>>2]=r);i=57872+((A=(A=f>>>8)?16777215<f>>>0?31:f>>>((A=14-((n=((a=A<<(t=(A+1048320|0)>>>16&8))+520192|0)>>>16&4)|t|(A=((a<<=n)+245760|0)>>>16&2))+(a<<A>>>15)|0)+7|0)&1|A<<1:0)<<2)|0,ar[o+28>>2]=A,ar[o+20>>2]=0,e=(ar[o+16>>2]=0)|ar[14393],r=1<<A;do{if(e&r){for(e=f<<(31==(0|A)?0:25-(A>>>1)|0),r=0|ar[i>>2];;){if((-8&ar[r+4>>2]|0)==(0|f)){A=73;break}if(!(A=0|ar[(i=r+16+(e>>>31<<2)|0)>>2])){A=72;break}e<<=1,r=A}if(72==(0|A)){ar[i>>2]=o,ar[o+24>>2]=r,ar[o+12>>2]=o,ar[o+8>>2]=o;break}if(73==(0|A)){a=0|ar[(t=r+8|0)>>2],ar[a+12>>2]=o,ar[t>>2]=o,ar[o+8>>2]=a,ar[o+12>>2]=r,ar[o+24>>2]=0;break}}else ar[14393]=e|r,ar[i>>2]=o,ar[o+24>>2]=i,ar[o+12>>2]=o,ar[o+8>>2]=o}while(0);if(a=(0|ar[14400])-1|0,!(ar[14400]=a)){for(A=58024;A=0|ar[A>>2];)A=A+8|0;ar[14400]=-1}}}}function Ec(A,e){e|=0;var r=0,i=0;return(A|=0)?4294967231<e>>>0?(ar[(e=10364)>>2]=12,(e=0)|e):0|(r=0|function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;if(l=0|ar[(u=4+(A|=0)|0)>>2],r=A+(f=-8&l)|0,!(3&l))return!(e>>>0<256)&&(e+4|0)>>>0<=f>>>0&&(f-e|0)>>>0<=ar[14512]<<1>>>0?0|A:(A=0)|A;if(e>>>0<=f>>>0)return(f=f-e|0)>>>0<=15||(c=A+e|0,ar[u>>2]=1&l|e|2,ar[c+4>>2]=3|f,ar[(u=c+f+4|0)>>2]=1|ar[u>>2],Xc(c,f)),0|A;if((0|r)==(0|ar[14398]))return c=(0|ar[14395])+f|0,f=c-e|0,n=A+e|0,c>>>0<=e>>>0?(A=0)|A:(ar[u>>2]=1&l|e|2,ar[n+4>>2]=1|f,ar[14398]=n,ar[14395]=f,0|A);if((0|r)==(0|ar[14397]))return(t=(0|ar[14394])+f|0)>>>0<e>>>0?(A=0)|A:(n=1&l,15<(f=t-e|0)>>>0?(c=(l=A+e|0)+f|0,ar[u>>2]=n|e|2,ar[l+4>>2]=1|f,ar[c>>2]=f,ar[(n=c+4|0)>>2]=-2&ar[n>>2],n=l):(ar[u>>2]=n|t|2,ar[(n=A+t+4|0)>>2]=1|ar[n>>2],f=n=0),ar[14394]=f,ar[14397]=n,0|A);if(2&(n=0|ar[4+r>>2])|0)return(A=0)|A;if((i=(-8&n)+f|0)>>>0<e>>>0)return(A=0)|A;c=i-e|0,t=n>>>3;do{if(n>>>0<256){if(n=0|ar[8+r>>2],(0|(f=0|ar[12+r>>2]))==(0|n)){ar[14392]=ar[14392]&~(1<<t);break}ar[n+12>>2]=f,ar[f+8>>2]=n;break}a=0|ar[24+r>>2],f=0|ar[12+r>>2];do{if((0|f)==(0|r)){if(f=0|ar[(n=(t=16+r|0)+4|0)>>2])o=n;else{if(!(f=0|ar[t>>2])){t=0;break}o=t}for(;;)if(0|(n=0|ar[(t=f+20|0)>>2]))f=n,o=t;else{if(!(t=0|ar[(n=f+16|0)>>2]))break;f=t,o=n}ar[o>>2]=0,t=f}else t=0|ar[8+r>>2],ar[t+12>>2]=f,ar[f+8>>2]=t,t=f}while(0);if(0|a){if(f=0|ar[28+r>>2],(0|r)==(0|ar[(n=57872+(f<<2)|0)>>2])){if(!(ar[n>>2]=t)){ar[14393]=ar[14393]&~(1<<f);break}}else if(!(ar[a+16+(((0|ar[a+16>>2])!=(0|r)&1)<<2)>>2]=t))break;ar[t+24>>2]=a,0|(n=0|ar[(f=16+r|0)>>2])&&(ar[t+16>>2]=n,ar[n+24>>2]=t),0|(f=0|ar[f+4>>2])&&(ar[t+20>>2]=f,ar[f+24>>2]=t)}}while(0);return f=1&l,c>>>0<16?(ar[u>>2]=i|f|2,ar[(u=A+i+4|0)>>2]=1|ar[u>>2]):(l=A+e|0,ar[u>>2]=f|e|2,ar[l+4>>2]=3|c,ar[(u=l+c+4|0)>>2]=1|ar[u>>2],Xc(l,c)),0|A}(A+-8|0,e>>>0<11?16:e+11&-8))?0|(e=r+8|0):(r=0|yc(e))?(hb(0|r,0|A,0|((i=(-8&(i=0|ar[A+-4>>2]))-(0==(3&i|0)?8:4)|0)>>>0<e>>>0?i:e)),Bc(A),0|(e=r)):(e=0)|e:0|(e=0|yc(e))}function Xc(A,e){var r=0,i=0,f=0,n=0,t=0,o=0,a=0;a=(A|=0)+(e|=0)|0,r=0|ar[A+4>>2];do{if(1&r)o=A,r=e;else{if(i=0|ar[A>>2],!(3&r))return;if(t=i+e|0,(0|(n=A+(0-i)|0))==(0|ar[14397])){if(3==(3&(r=0|ar[(A=a+4|0)>>2])|0))return ar[14394]=t,ar[A>>2]=-2&r,ar[n+4>>2]=1|t,void(ar[n+t>>2]=t);o=n,r=t;break}if(e=i>>>3,i>>>0<256){if(A=0|ar[n+8>>2],(0|(r=0|ar[n+12>>2]))==(0|A)){ar[14392]=ar[14392]&~(1<<e),o=n,r=t;break}ar[A+12>>2]=r,ar[r+8>>2]=A,o=n,r=t;break}f=0|ar[n+24>>2],A=0|ar[n+12>>2];do{if((0|A)==(0|n)){if(!(A=0|ar[(r=(e=n+16|0)+4|0)>>2])){if(!(A=0|ar[e>>2])){A=0;break}r=e}for(;;)if(0|(i=0|ar[(e=A+20|0)>>2]))A=i,r=e;else{if(!(i=0|ar[(e=A+16|0)>>2]))break;A=i,r=e}ar[r>>2]=0}else o=0|ar[n+8>>2],ar[o+12>>2]=A,ar[A+8>>2]=o}while(0);if(f){if(r=0|ar[n+28>>2],(0|n)==(0|ar[(e=57872+(r<<2)|0)>>2])){if(!(ar[e>>2]=A)){ar[14393]=ar[14393]&~(1<<r),o=n,r=t;break}}else if(!(ar[f+16+(((0|ar[f+16>>2])!=(0|n)&1)<<2)>>2]=A)){o=n,r=t;break}ar[A+24>>2]=f,0|(e=0|ar[(r=n+16|0)>>2])&&(ar[A+16>>2]=e,ar[e+24>>2]=A),r=(o=((r=0|ar[r+4>>2])&&(ar[A+20>>2]=r,ar[r+24>>2]=A),n),t)}else o=n,r=t}}while(0);if(2&(i=0|ar[(A=a+4|0)>>2]))ar[A>>2]=-2&i,ar[o+4>>2]=1|r,ar[o+r>>2]=r;else{if(A=0|ar[14397],(0|a)==(0|ar[14398]))return a=(0|ar[14395])+r|0,ar[14395]=a,ar[14398]=o,ar[o+4>>2]=1|a,(0|o)==(0|A)&&(ar[14397]=0,void(ar[14394]=0));if((0|a)==(0|A))return a=(0|ar[14394])+r|0,ar[14394]=a,ar[14397]=o,ar[o+4>>2]=1|a,void(ar[o+a>>2]=a);n=(-8&i)+r|0,e=i>>>3;do{if(i>>>0<256){if(r=0|ar[a+8>>2],(0|(A=0|ar[a+12>>2]))==(0|r)){ar[14392]=ar[14392]&~(1<<e);break}ar[r+12>>2]=A,ar[A+8>>2]=r;break}f=0|ar[a+24>>2],A=0|ar[a+12>>2];do{if((0|A)==(0|a)){if(!(A=0|ar[(r=(e=a+16|0)+4|0)>>2])){if(!(A=0|ar[e>>2])){e=0;break}r=e}for(;;)if(0|(i=0|ar[(e=A+20|0)>>2]))A=i,r=e;else{if(!(i=0|ar[(e=A+16|0)>>2]))break;A=i,r=e}ar[r>>2]=0,e=A}else e=0|ar[a+8>>2],ar[e+12>>2]=A,ar[A+8>>2]=e,e=A}while(0);if(0|f){if(A=0|ar[a+28>>2],(0|a)==(0|ar[(r=57872+(A<<2)|0)>>2])){if(!(ar[r>>2]=e)){ar[14393]=ar[14393]&~(1<<A);break}}else if(!(ar[f+16+(((0|ar[f+16>>2])!=(0|a)&1)<<2)>>2]=e))break;ar[e+24>>2]=f,0|(r=0|ar[(A=a+16|0)>>2])&&(ar[e+16>>2]=r,ar[r+24>>2]=e),0|(A=0|ar[A+4>>2])&&(ar[e+20>>2]=A,ar[A+24>>2]=e)}}while(0);if(ar[o+4>>2]=1|n,ar[o+n>>2]=n,(0|o)==(0|ar[14397]))return void(ar[14394]=n);r=n}if(A=r>>>3,r>>>0<256)return e=57608+(A<<1<<2)|0,(r=0|ar[14392])&(A=1<<A)?A=0|ar[(r=e+8|0)>>2]:(ar[14392]=r|A,r=(A=e)+8|0),ar[r>>2]=o,ar[A+12>>2]=o,ar[o+8>>2]=A,void(ar[o+12>>2]=e);if(f=57872+((A=(A=r>>>8)?16777215<r>>>0?31:r>>>((A=14-((n=((a=A<<(t=(A+1048320|0)>>>16&8))+520192|0)>>>16&4)|t|(A=((a<<=n)+245760|0)>>>16&2))+(a<<A>>>15)|0)+7|0)&1|A<<1:0)<<2)|0,ar[o+28>>2]=A,ar[o+20>>2]=0,!((e=(ar[o+16>>2]=0)|ar[14393])&(i=1<<A)))return ar[14393]=e|i,ar[f>>2]=o,ar[o+24>>2]=f,ar[o+12>>2]=o,void(ar[o+8>>2]=o);for(e=r<<(31==(0|A)?0:25-(A>>>1)|0),i=0|ar[f>>2];;){if((-8&ar[i+4>>2]|0)==(0|r)){A=69;break}if(!(A=0|ar[(f=i+16+(e>>>31<<2)|0)>>2])){A=68;break}e<<=1,i=A}return 68==(0|A)?(ar[f>>2]=o,ar[o+24>>2]=i,ar[o+12>>2]=o,void(ar[o+8>>2]=o)):69==(0|A)&&(a=0|ar[(t=i+8|0)>>2],ar[a+12>>2]=o,ar[t>>2]=o,ar[o+8>>2]=a,ar[o+12>>2]=i,void(ar[o+24>>2]=0))}function Wc(A,e){return e|=0,(A|=0)>>>0<9?0|(e=0|yc(e)):0|(e=0|function(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0;if((A=16<(A|=0)>>>0?A:16)+-1&A)for(i=16;;){if(!(i>>>0<A>>>0)){A=i;break}i<<=1}if((-64-A|0)>>>0<=e>>>0)return ar[(t=10364)>>2]=12,(t=0)|t;if(!(i=0|yc(12+(n=e>>>0<11?16:e+11&-8)+A|0)))return(t=0)|t;r=i+-8|0;do{if(i&A+-1){if(e=(f=15<((f=(i+A+-1&0-A)-8|0)-(e=r)|0)>>>0?f:f+A|0)-e|0,o=0|ar[(A=i+-4|0)>>2],i=(-8&o)-e|0,3&o){ar[(o=f+4|0)>>2]=i|1&ar[o>>2]|2,ar[(i=f+i+4|0)>>2]=1|ar[i>>2],ar[A>>2]=e|1&ar[A>>2]|2,ar[o>>2]=1|ar[o>>2],Xc(r,e),e=A=f;break}ar[f>>2]=(0|ar[r>>2])+e,ar[f+4>>2]=i,e=A=f;break}e=A=r}while(0);3&(i=0|ar[(A=A+4|0)>>2])|0&&(t=-8&i)>>>0>(n+16|0)>>>0&&(o=t-n|0,t=e+n|0,ar[A>>2]=n|1&i|2,ar[t+4>>2]=3|o,ar[(n=t+o+4|0)>>2]=1|ar[n>>2],Xc(t,o));return 0|(o=e+8|0)}(A,e))}function Ic(A){return 4294963200<(A|=0)>>>0&&(ar[10364>>2]=0-A,A=-1),0|A}function Cc(){return 10364}function Gc(A,e,r){e|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0;c=ur=(o=ur)+31&-32,ur=ur+48|0,t=c+16|0,c=(l=c)+32|0,a=0|ar[(f=(A|=0)+28|0)>>2],ar[c>>2]=a,a=(0|ar[(n=A+20|0)>>2])-a|0,ar[c+4>>2]=a,ar[c+8>>2]=e,a=a+(ar[c+12>>2]=r)|0,i=A+60|0,ar[l>>2]=ar[i>>2],ar[l+4>>2]=c,ar[l+8>>2]=2,l=0|Ic(0|_(146,0|l));A:do{if((0|a)!=(0|l)){for(e=2;!((0|l)<0);)if(a=a-l|0,e=((b=(s=0|ar[c+4>>2])>>>0<l>>>0)<<31>>31)+e|0,s=l-(b?s:0)|0,ar[(c=b?c+8|0:c)>>2]=(0|ar[c>>2])+s,ar[(b=c+4|0)>>2]=(0|ar[b>>2])-s,ar[t>>2]=ar[i>>2],ar[4+t>>2]=c,ar[8+t>>2]=e,(0|a)==(0|(l=0|Ic(0|_(146,0|t))))){u=3;break A}ar[A+16>>2]=0,ar[f>>2]=0,ar[n>>2]=0,ar[A>>2]=32|ar[A>>2],r=2==(0|e)?0:r-(0|ar[c+4>>2])|0}else u=3}while(0);return 3==(0|u)&&(s=0|ar[A+44>>2],ar[A+16>>2]=s+(0|ar[A+48>>2]),ar[f>>2]=s,ar[n>>2]=s),ur=o,0|r}function Vc(A){var e,r=0,i=0;e=A|=0;A:do{if(3&e)for(r=e;;){if(!(0|tr[A>>0])){A=r;break A}if(!(3&(r=A=A+1|0))){i=4;break}}else i=4}while(0);if(4==(0|i)){for(;!((-2139062144&(r=0|ar[A>>2])^-2139062144)&r+-16843009);)A=A+4|0;if((255&r)<<24>>24)for(;0!=(0|tr[(A=A+1|0)>>0]););}return A-e|0}function Fc(A,e){e|=0;var r=0,i=0;if(r=0|tr[(A|=0)>>0],i=0|tr[e>>0],r<<24>>24==0||r<<24>>24!=i<<24>>24)A=i;else{for(;e=e+1|0,r=0|tr[(A=A+1|0)>>0],i=0|tr[e>>0],r<<24>>24!=0&&r<<24>>24==i<<24>>24;);A=i}return(255&r)-(255&A)|0}function Rc(A,e,r){A|=0;var i=0,f=0,n=0,t=0;n=255&(e|=0),i=0!=(0|(r|=0));A:do{if(i&0!=(3&A|0))for(f=255&e;;){if((0|tr[A>>0])==f<<24>>24){t=6;break A}if(!((i=0!=(0|(r=r+-1|0)))&0!=(3&(A=A+1|0)|0))){t=5;break}}else t=5}while(0);5==(0|t)&&(i?t=6:r=0);A:do{if(6==(0|t)&&(f=255&e,(0|tr[A>>0])!=f<<24>>24)){i=0|br(n,16843009);e:do{if(3<r>>>0){for(;!((-2139062144&(n=ar[A>>2]^i)^-2139062144)&n+-16843009|0);)if(A=A+4|0,(r=r+-4|0)>>>0<=3){t=11;break e}}else t=11}while(0);if(11==(0|t)&&!r){r=0;break}for(;;){if((0|tr[A>>0])==f<<24>>24)break A;if(A=A+1|0,!(r=r+-1|0)){r=0;break}}}}while(0);return 0|(0|r?A:0)}function Nc(A,e){A|=0;var r=0,i=0,f=0;i=255&(e|=0);A:do{if(i){if(3&A){r=255&e;do{if((f=0|tr[A>>0])<<24>>24==0||f<<24>>24==r<<24>>24)break A;A=A+1|0}while(0!=(3&A|0))}i=0|br(i,16843009),r=0|ar[A>>2];e:do{if(!((-2139062144&r^-2139062144)&r+-16843009))do{if((-2139062144&(f=r^i)^-2139062144)&f+-16843009|0)break e;r=0|ar[(A=A+4|0)>>2]}while(!((-2139062144&r^-2139062144)&r+-16843009|0))}while(0);for(r=255&e;(f=0|tr[A>>0])<<24>>24!=0&&f<<24>>24!=r<<24>>24;)A=A+1|0}else A=A+(0|Vc(A))|0}while(0);return 0|A}function _c(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n;return n=ur=(f=ur)+31&-32,ur=ur+16|0,ar[n>>2]=i,i=0|Yc(A,e,r,n),ur=f,0|i}function Yc(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t=0,o=0,a=0,c=0,l=0;for(l=ur=(n=ur)+31&-32,ur=ur+128|0,t=l+124|0,a=10804,f=(o=l)+124|0;ar[o>>2]=ar[a>>2],a=a+4|0,(0|(o=o+4|0))<(0|f););return 2147483646<(e+-1|0)>>>0?e?(ar[(e=10364)>>2]=75,e=-1):(A=t,e=1,c=4):c=4,4==(0|c)&&(c=(c=-2-A|0)>>>0<e>>>0?c:e,ar[l+48>>2]=c,ar[(t=l+20|0)>>2]=A,e=(ar[l+44>>2]=A)+c|0,ar[(A=l+16|0)>>2]=e,ar[l+28>>2]=e,e=0|Qc(l,r,i),c&&(l=0|ar[t>>2],tr[l+(((0|l)==(0|ar[A>>2]))<<31>>31)>>0]=0)),ur=n,0|e}function Qc(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;for(k=ur=(t=ur)+31&-32,ur=ur+224|0,i=k+120|0,f=k+80|0,k=(n=k)+136|0,a=(o=f)+40|0;(0|(o=o+4|(ar[o>>2]=0)))<(0|a););return ar[i>>2]=ar[r>>2],r=(0|Dc(0,e,i,n,f))<0?-1:(d=-1<(0|ar[A+76>>2])?0|Jc():0,s=32&(r=0|ar[A>>2]),(0|tr[A+74>>0])<1&&(ar[A>>2]=-33&r),0|ar[(o=A+48|0)>>2]?r=0|Dc(A,e,i,n,f):(c=0|ar[(a=A+44|0)>>2],ar[a>>2]=k,ar[(l=A+28|0)>>2]=k,ar[(u=A+20|0)>>2]=k,ar[o>>2]=80,ar[(b=A+16|0)>>2]=k+80,r=0|Dc(A,e,i,n,f),c&&(xb[63&ar[A+36>>2]](A,0,0),r=0==(0|ar[u>>2])?-1:r,ar[a>>2]=c,ar[o>>2]=0,ar[b>>2]=0,ar[l>>2]=0,ar[u>>2]=0)),o=0|ar[A>>2],ar[A>>2]=o|s,0|d&&Mc(),0==(32&o|0)?r:-1),ur=t,0|r}function Dc(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0;W=ur=(b=ur)+31&-32,ur=ur+64|0,c=W+16|0,X=(l=W)+24|0,u=W+8|0,W=W+20|0,ar[c>>2]=e,n=0!=(0|A),o=t=X+40|0,X=X+39|0,a=4+u|0,v=s=d=0;A:for(;;){do{if(-1<(0|s)){if((2147483647-s|0)<(0|d)){ar[(s=10364)>>2]=75,s=-1;break}s=d+s|0;break}}while(0);if(!((d=0|tr[e>>0])<<24>>24)){E=87;break}k=e;e:for(;;){switch(d<<24>>24){case 37:d=k,E=9;break e;case 0:d=k;break e}B=k+1|0,ar[c>>2]=B,d=0|tr[B>>0],k=B}e:do{if(9==(0|E))for(;;){if(37!=((E=0)|tr[k+1>>0]))break e;if(d=d+1|0,k=k+2|0,ar[c>>2]=k,37!=(0|tr[k>>0]))break;E=9}}while(0);if(d=d-e|0,n&&Tc(A,e,d),0|d)e=k;else{(d=(0|tr[(h=k+1|0)>>0])-48|0)>>>0<10?(y=(B=36==(0|tr[k+2>>0]))?d:-1,v=B?1:v,h=B?k+3|0:h):y=-1,ar[c>>2]=h,k=((d=0|tr[h>>0])<<24>>24)-32|0;e:do{if(k>>>0<32)for(w=0,m=d;;){if(!(75913&(d=1<<k))){d=m;break e}if(w|=d,h=h+1|0,ar[c>>2]=h,32<=(k=((d=0|tr[h>>0])<<24>>24)-32|0)>>>0)break;m=d}else w=0}while(0);if(d<<24>>24==42){if((d=(0|tr[(k=h+1|0)>>0])-48|0)>>>0<10&&36==(0|tr[h+2>>0]))ar[f+(d<<2)>>2]=10,d=0|ar[i+((0|tr[k>>0])-48<<3)>>2],v=1,h=h+3|0;else{if(0|v){s=-1;break}h=(v=n?(v=3+(0|ar[r>>2])&-4,d=0|ar[v>>2],ar[r>>2]=v+4,0):d=0,k)}ar[c>>2]=h,d=(B=(0|d)<0)?0-d|0:d,w=B?8192|w:w}else{if((0|(d=0|Uc(c)))<0){s=-1;break}h=0|ar[c>>2]}do{if(46==(0|tr[h>>0])){if(42!=(0|tr[h+1>>0])){ar[c>>2]=h+1,k=0|Uc(c),h=0|ar[c>>2];break}if((k=(0|tr[(m=h+2|0)>>0])-48|0)>>>0<10&&36==(0|tr[h+3>>0])){ar[f+(k<<2)>>2]=10,k=0|ar[i+((0|tr[m>>0])-48<<3)>>2],h=h+4|0,ar[c>>2]=h;break}if(0|v){s=-1;break A}n?(B=3+(0|ar[r>>2])&-4,k=0|ar[B>>2],ar[r>>2]=B+4):k=0,h=ar[c>>2]=m}else k=-1}while(0);for(p=0;;){if(57<((0|tr[h>>0])-65|0)>>>0){s=-1;break A}if(B=h+1|0,ar[c>>2]=B,!(((g=255&(m=0|tr[(0|tr[h>>0])-65+(50202+(58*p|0))>>0]))+-1|0)>>>0<8))break;p=g,h=B}if(!(m<<24>>24)){s=-1;break}Z=-1<(0|y);do{if(m<<24>>24==19){if(Z){s=-1;break A}E=49}else{if(Z){ar[f+(y<<2)>>2]=g,y=0|ar[(Z=i+(y<<3)|0)+4>>2],ar[(E=l)>>2]=ar[Z>>2],ar[E+4>>2]=y,E=49;break}if(!n){s=0;break A}Sc(l,g,r)}}while(0);if(49!=(0|E)||(E=0,n)){h=0!=(0|p)&3==(15&(h=0|tr[h>>0])|0)?-33&h:h,Z=-65537&w,y=0==(8192&w|0)?w:Z;e:do{switch(0|h){case 110:switch((255&p)<<24>>24){case 0:case 1:ar[ar[l>>2]>>2]=s,d=0,e=B;continue A;case 2:d=0|ar[l>>2],ar[d>>2]=s,ar[d+4>>2]=((0|s)<0)<<31>>31,d=0,e=B;continue A;case 3:or[ar[l>>2]>>1]=s,d=0,e=B;continue A;case 4:tr[ar[l>>2]>>0]=s,d=0,e=B;continue A;case 6:ar[ar[l>>2]>>2]=s,d=0,e=B;continue A;case 7:d=0|ar[l>>2],ar[d>>2]=s,ar[d+4>>2]=((0|s)<0)<<31>>31,d=0,e=B;continue A;default:d=0,e=B;continue A}case 112:h=120,k=8<k>>>0?k:8,e=8|y,E=61;break;case 88:case 120:e=y,E=61;break;case 111:m=50666,k=(w=0)==(8&y|0)|(0|(Z=o-(g=0|zc(e=0|ar[(h=l)>>2],h=0|ar[h+4>>2],t))|0))<(0|k)?k:Z+1|0,Z=y,E=67;break;case 105:case 100:if(e=0|ar[(h=l)>>2],(0|(h=0|ar[h+4>>2]))<0){e=0|ob(0,0,0|e,0|h),h=D,ar[(w=l)>>2]=e,ar[w+4>>2]=h,w=1,m=50666,E=66;break e}w=0!=(2049&y|0)&1,m=0==(2048&y|0)?0==(1&y|0)?50666:50668:50667,E=66;break e;case 117:m=50666,e=(w=0)|ar[(h=l)>>2],h=0|ar[h+4>>2],E=66;break;case 99:tr[X>>0]=ar[l>>2],e=X,w=0,m=50666,g=t,h=1,k=Z;break;case 109:h=0|Hc(0|ar[(h=10364)>>2]),E=71;break;case 115:h=0|(h=0|ar[l>>2])?h:50676,E=71;break;case 67:ar[u>>2]=ar[l>>2],ar[a>>2]=0,g=-1,h=ar[l>>2]=u,E=75;break;case 83:e=0|ar[l>>2],E=k?(g=k,h=e,75):(xc(A,32,d,0,y),e=0,84);break;case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:d=0|Lc(A,+Q[l>>3],d,k,y,h),e=B;continue A;default:w=0,m=50666,g=t,h=k,k=y}}while(0);e:do{if(61==(0|E))g=0|Oc(p=0|ar[(y=l)>>2],y=0|ar[y+4>>2],t,32&h),w=(m=0==(8&e|0)|0==(0|p)&0==(0|y))?0:2,m=m?50666:50666+(h>>4)|0,Z=e,e=p,h=y,E=67;else if(66==(0|E))g=0|jc(e,h,t),Z=y,E=67;else if(71==(0|E))w=E=0,m=50666,g=(p=0==(0|(y=0|Rc(e=h,0,k))))?h+k|0:y,h=p?k:y-h|0,k=Z;else if(75==(0|E)){for(m=h,k=e=E=0;(w=0|ar[m>>2])&&!((0|(k=0|Pc(W,w)))<0|(g-e|0)>>>0<k>>>0)&&(e=k+e|0)>>>0<g>>>0;)m=m+4|0;if((0|k)<0){s=-1;break A}if(xc(A,32,d,e,y),e)for(w=0;;){if(!(k=0|ar[h>>2])){E=84;break e}if((0|e)<(0|(w=(k=0|Pc(W,k))+w|0))){E=84;break e}if(Tc(A,W,k),e>>>0<=w>>>0){E=84;break}h=h+4|0}else e=0,E=84}}while(0);if(67==(0|E))y=(E=0)!=(0|k)|(h=0!=(0|e)|0!=(0|h)),h=o-g+(1&(1^h))|0,e=y?g:t,g=t,h=!y||(0|h)<(0|k)?k:h,k=-1<(0|k)?-65537&Z:Z;else if(84==(0|E)){E=0,xc(A,32,d,e,8192^y),d=(0|e)<(0|d)?d:e,e=B;continue}xc(A,32,d=(0|d)<(0|(y=(Z=(0|h)<(0|(p=g-e|0))?p:h)+w|0))?y:d,y,k),Tc(A,m,w),xc(A,48,d,y,65536^k),xc(A,48,Z,p,0),Tc(A,e,p),xc(A,32,d,y,8192^k),e=B}else d=0,e=B}}A:do{if(87==(0|E)&&!A)if(v){for(s=1;e=0|ar[f+(s<<2)>>2];)if(Sc(i+(s<<3)|0,e,r),10<=(0|(s=s+1|0))){s=1;break A}for(;;){if(0|ar[f+(s<<2)>>2]){s=-1;break A}if(10<=(0|(s=s+1|0))){s=1;break}}}else s=0}while(0);return ur=b,0|s}function Jc(){return 0}function Mc(){0}function Tc(A,e,r){e|=0,r|=0,32&ar[(A|=0)>>2]||el(e,r,A)}function Uc(A){var e=0,r=0,i=0;if(r=0|ar[(A|=0)>>2],(i=(0|tr[r>>0])-48|0)>>>0<10)for(e=0;e=i+(10*e|0)|0,r=r+1|0,ar[A>>2]=r,(i=(0|tr[r>>0])-48|0)>>>0<10;);else e=0;return 0|e}function Sc(A,e,r){A|=0,e|=0,r|=0;var i=0,f=0,n=0;A:do{if(e>>>0<=20){switch(0|e){case 9:i=3+(0|ar[r>>2])&-4,e=0|ar[i>>2],ar[r>>2]=i+4,ar[A>>2]=e;break A;case 10:i=3+(0|ar[r>>2])&-4,e=0|ar[i>>2],ar[r>>2]=i+4,ar[(i=A)>>2]=e,ar[i+4>>2]=((0|e)<0)<<31>>31;break A;case 11:i=3+(0|ar[r>>2])&-4,e=0|ar[i>>2],ar[r>>2]=i+4,ar[(i=A)>>2]=e,ar[i+4>>2]=0;break A;case 12:i=7+(0|ar[r>>2])&-8,f=0|ar[(e=i)>>2],e=0|ar[e+4>>2],ar[r>>2]=i+8,ar[(i=A)>>2]=f,ar[i+4>>2]=e;break A;case 13:f=3+(0|ar[r>>2])&-4,i=0|ar[f>>2],ar[r>>2]=f+4,i=(65535&i)<<16>>16,ar[(f=A)>>2]=i,ar[f+4>>2]=((0|i)<0)<<31>>31;break A;case 14:f=3+(0|ar[r>>2])&-4,i=0|ar[f>>2],ar[r>>2]=f+4,ar[(f=A)>>2]=65535&i,ar[f+4>>2]=0;break A;case 15:f=3+(0|ar[r>>2])&-4,i=0|ar[f>>2],ar[r>>2]=f+4,i=(255&i)<<24>>24,ar[(f=A)>>2]=i,ar[f+4>>2]=((0|i)<0)<<31>>31;break A;case 16:f=3+(0|ar[r>>2])&-4,i=0|ar[f>>2],ar[r>>2]=f+4,ar[(f=A)>>2]=255&i,ar[f+4>>2]=0;break A;case 17:case 18:f=7+(0|ar[r>>2])&-8,n=+Q[f>>3],ar[r>>2]=f+8,Q[A>>3]=n;break A;default:break A}}}while(0)}function Oc(A,e,r,i){if(r|=0,i|=0,!(0==(0|(A|=0))&0==(0|(e|=0))))for(;tr[(r=r+-1|0)>>0]=0|cr[50714+(15&A)>>0]|i,!(0==(0|(A=0|sb(0|A,0|e,4)))&0==(0|(e=D))););return 0|r}function zc(A,e,r){if(r|=0,!(0==(0|(A|=0))&0==(0|(e|=0))))for(;tr[(r=r+-1|0)>>0]=7&A|48,!(0==(0|(A=0|sb(0|A,0|e,3)))&0==(0|(e=D))););return 0|r}function jc(A,e,r){r|=0;var i=0;if(0<(e|=0)>>>0|0==(0|e)&4294967295<(A|=0)>>>0){for(;i=0|ub(0|A,0|e,10,0),tr[(r=r+-1|0)>>0]=255&i|48,A=0|lb(0|(i=A),0|e,10,0),9<e>>>0|9==(0|e)&4294967295<i>>>0;)e=D;e=A}else e=A;if(e)for(;tr[(r=r+-1|0)>>0]=(e>>>0)%10|48,!(e>>>0<10);)e=(e>>>0)/10|0;return 0|r}function Hc(A){return 0|function(A,e){A|=0,e|=0;var r=0,i=0;i=0;for(;;){if((0|cr[50732+i>>0])==(0|A)){A=2;break}if(87==(0|(r=i+1|0))){r=50820,i=87,A=5;break}i=r}2==(0|A)&&(i?(r=50820,A=5):r=50820);if(5==(0|A))for(;;){for(;r=(A=r)+1|0,0!=(0|tr[A>>0]););if(!(i=i+-1|0))break;A=5}return 0|function(A,e){return 0|function(A,e){A|=0,e=(e|=0)?0|function(A,e,r){e|=0,r|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;i=1794895138+(0|ar[(A|=0)>>2])|0,t=0|Al(0|ar[A+8>>2],i),f=0|Al(0|ar[A+12>>2],i),n=0|Al(0|ar[A+16>>2],i);A:do{if(t>>>0<e>>>2>>>0&&(b=e-(t<<2)|0,f>>>0<b>>>0&n>>>0<b>>>0)&&0==(3&(n|f)|0)){for(b=f>>>2,u=n>>>2,l=0;;){if(f=0|Al(0|ar[A+((n=(o=(c=l+(a=t>>>1)|0)<<1)+b|0)<<2)>>2],i),!((n=0|Al(0|ar[A+(n+1<<2)>>2],i))>>>0<e>>>0&f>>>0<(e-n|0)>>>0)){f=0;break A}if(0|tr[A+(n+f)>>0]){f=0;break A}if(!(f=0|Fc(r,A+n|0)))break;if(f=(0|f)<0,1==(0|t)){f=0;break A}l=f?l:c,t=f?a:t-a|0}n=0|Al(0|ar[A+((f=o+u|0)<<2)>>2],i),f=(f=0|Al(0|ar[A+(f+1<<2)>>2],i))>>>0<e>>>0&n>>>0<(e-f|0)>>>0&&0==(0|tr[A+(f+n)>>0])?A+f|0:0}else f=0}while(0);return 0|f}(0|ar[e>>2],0|ar[e+4>>2],A):0;return 0|(0|e?e:A)}(A|=0,e|=0)}(r,0|ar[e+20>>2])}(A|=0,0|ar[2622])}function xc(A,e,r,i,f){A|=0,e|=0;var n,t;if(n=ur=(t=ur)+31&-32,ur=ur+256|0,(0|(i|=0))<(0|(r|=0))&0==(73728&(f|=0)|0)){if(vb(0|n,0|e,0|((f=r-i|0)>>>0<256?f:256)),255<f>>>0){for(e=r-i|0;Tc(A,n,256),255<(f=f+-256|0)>>>0;);f=255&e}Tc(A,n,f)}ur=t}function Pc(A,e){return e|=0,0|(A=(A|=0)?0|$c(A,e):0)}function Lc(A,e,r,i,f,n){A|=0,e=+e,r|=0,i|=0,f|=0,n|=0;var t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;l=ur=(t=ur)+31&-32,ur=ur+560|0,c=l+8|0,W=I=(w=l)+524|0,X=(l=l+512|0)+12|(ar[w>>2]=0),Kc(e),y=(0|D)<0?(e=-e,B=1,50683):(B=0!=(2049&f|0)&1,0==(2048&f|0)?0==(1&f|0)?50684:50689:50686),Kc(e),E=2146435072&D;do{if(E>>>0<2146435072|2146435072==(0|E)&!1){if((o=0!=(d=2*qc(e,w)))&&(ar[w>>2]=(0|ar[w>>2])-1),97==(0|(m=32|n))){s=0==(0|(k=32&n))?y:y+9|0,b=2|B,o=12-i|0;do{if(!(11<i>>>0|0==(0|o))){for(e=8;e*=16,0!=(0|(o=o+-1|0)););if(45==(0|tr[s>>0])){e=-(e+(-d-e));break}e=d+e-e;break}e=d}while(0);for((0|(o=0|jc(o=(0|(a=0|ar[w>>2]))<0?0-a|0:a,((0|o)<0)<<31>>31,X)))==(0|X)&&(tr[(o=l+11|0)>>0]=48),tr[o+-1>>0]=43+(a>>31&2),tr[(u=o+-2|0)>>0]=n+15,l=(0|i)<1,c=0==(8&f|0),o=I;E=~~e,a=o+1|0,tr[o>>0]=cr[50714+E>>0]|k,e=16*(e-(0|E)),o=1!=(a-W|0)||c&l&0==e?a:(tr[a>>0]=46,o+2|0),0!=e;);E=o-W|0,xc(A,32,r,o=(W=X-u|0)+b+(X=0!=(0|i)&(E+-2|0)<(0|i)?i+2|0:E)|0,f),Tc(A,s,b),xc(A,48,r,o,65536^f),Tc(A,I,E),xc(A,48,X-E|0,0,0),Tc(A,u,W),xc(A,32,r,o,8192^f);break}for(a=(0|i)<0?6:i,o?(o=(0|ar[w>>2])-28|0,ar[w>>2]=o,e=268435456*d):(e=d,o=0|ar[w>>2]),c=E=(0|o)<0?c:c+288|0;Z=~~e>>>0,ar[c>>2]=Z,c=c+4|0,0!=(e=1e9*(e-(Z>>>0))););if(0<(0|o))for(l=E,b=c;;){if(u=(0|o)<29?o:29,l>>>0<=(o=b+-4|0)>>>0){for(c=0;v=0|ub(0|(g=0|tb(0|(g=0|db(0|ar[o>>2],0,0|u)),0|D,0|c,0)),0|(Z=D),1e9,0),ar[o>>2]=v,c=0|lb(0|g,0|Z,1e9,0),l>>>0<=(o=o+-4|0)>>>0;);c&&(ar[(l=l+-4|0)>>2]=c)}for(c=b;!(c>>>0<=l>>>0||0|ar[(o=c+-4|0)>>2]);)c=o;if(o=(0|ar[w>>2])-u|0,!(0<(0|(ar[w>>2]=o))))break;b=c}else l=E;if((0|o)<0){i=1+((a+25|0)/9|0)|0,h=102==(0|m);do{if(k=(0|(k=0-o|0))<9?k:9,l>>>0<c>>>0){for(u=(1<<k)-1|0,b=1e9>>>k,s=0,o=l;Z=0|ar[o>>2],ar[o>>2]=(Z>>>k)+s,s=0|br(Z&u,b),(o=o+4|0)>>>0<c>>>0;);o=0==(0|ar[l>>2])?l+4|0:l,o=s?(ar[c>>2]=s,l=o,c+4|0):(l=o,c)}else l=0==(0|ar[l>>2])?l+4|0:l,o=c;c=(0|i)<(o-(c=h?E:l)>>2|0)?c+(i<<2)|0:o,o=(0|ar[w>>2])+k|0,ar[w>>2]=o}while((0|o)<0);o=l,i=c}else o=l,i=c;if(Z=E,o>>>0<i>>>0){if(c=9*(Z-o>>2)|0,10<=(u=0|ar[o>>2])>>>0)for(l=10;c=c+1|0,(l=10*l|0)>>>0<=u>>>0;);}else c=0;if((0|(l=a-(102!=(0|m)?c:0)+(((v=0!=(0|a))&(h=103==(0|m)))<<31>>31)|0))<((9*(i-Z>>2)|0)-9|0)){if(k=E+4+(((0|(l=l+9216|0))/9|0)-1024<<2)|0,(0|(l=1+((0|l)%9|0)|0))<9)for(u=10;u=10*u|0,9!=(0|(l=l+1|0)););else u=10;if((l=(k+4|0)==(0|i))&0==(0|(s=((b=0|ar[k>>2])>>>0)%(u>>>0)|0)))l=k;else if(d=0==(1&((b>>>0)/(u>>>0)|0)|0)?9007199254740992:9007199254740994,e=s>>>0<(g=(0|u)/2|0)>>>0?.5:l&(0|s)==(0|g)?1:1.5,B&&(e=(g=45==(0|tr[y>>0]))?-e:e,d=g?-d:d),l=b-s|0,ar[k>>2]=l,d+e!=d){if(g=l+u|0,999999999<(ar[k>>2]=g)>>>0)for(c=k;(l=c+-4|0)>>>(ar[c>>2]=0)<o>>>0&&(ar[(o=o+-4|0)>>2]=0),g=1+(0|ar[l>>2])|0,999999999<(ar[l>>2]=g)>>>0;)c=l;else l=k;if(c=9*(Z-o>>2)|0,10<=(b=0|ar[o>>2])>>>0)for(u=10;c=c+1|0,(u=10*u|0)>>>0<=b>>>0;);}else l=k;l=(l=l+4|0)>>>0<i>>>0?l:i,g=o}else l=i,g=o;for(m=l;;){if(m>>>0<=g>>>0){w=0;break}if(0|ar[(o=m+-4|0)>>2]){w=1;break}m=o}i=0-c|0;do{if(h){if(a=(0|c)<(0|(o=(1&(1^v))+a|0))&-5<(0|c)?(u=n+-1|0,o+-1-c|0):(u=n+-2|0,o+-1|0),!(o=8&f)){if(w&&0!=(0|(p=0|ar[m+-4>>2])))if((p>>>0)%10|0)l=0;else for(l=0,o=10;l=l+1|0,!((p>>>0)%((o=10*o|0)>>>0)|0););else l=9;if(o=(9*(m-Z>>2)|0)-9|0,102==(32|u)){a=(0|a)<(0|(k=0<(0|(k=o-l|0))?k:0))?a:k,k=0;break}a=(0|a)<(0|(k=0<(0|(k=o+c-l|0))?k:0))?a:k,k=0;break}k=o}else u=n,k=8&f}while(0);if(b=0!=(0|(h=a|k))&1,s=102==(32|u))o=(v=0)<(0|c)?c:0;else{if(((l=X)-(o=0|jc(o=(0|c)<0?i:c,((0|o)<0)<<31>>31,X))|0)<2)for(;tr[(o=o+-1|0)>>0]=48,(l-o|0)<2;);tr[o+-1>>0]=43+(c>>31&2),tr[(o=o+-2|0)>>0]=u,o=l-(v=o)|0}if(xc(A,32,r,o=B+1+a+b+o|0,f),Tc(A,y,B),xc(A,48,r,o,65536^f),s){b=k=I+9|0,s=I+8|0,l=u=E>>>0<g>>>0?E:g;do{if(c=0|jc(0|ar[l>>2],0,k),(0|l)==(0|u))(0|c)==(0|k)&&(tr[s>>0]=48,c=s);else if(I>>>0<c>>>0)for(vb(0|I,48,c-W|0);I>>>0<(c=c+-1|0)>>>0;);Tc(A,c,b-c|0),l=l+4|0}while(l>>>0<=E>>>0);if(0|h&&Tc(A,50730,1),l>>>0<m>>>0&0<(0|a))for(;;){if(I>>>0<(c=0|jc(0|ar[l>>2],0,k))>>>0)for(vb(0|I,48,c-W|0);I>>>0<(c=c+-1|0)>>>0;);if(Tc(A,c,(0|a)<9?a:9),c=a+-9|0,!((l=l+4|0)>>>0<m>>>0&9<(0|a))){a=c;break}a=c}xc(A,48,a+9|0,9,0)}else{if(h=w?m:g+4|0,-1<(0|a)){k=0==(0|k),i=w=I+9|0,b=0-W|0,s=I+8|0,u=g;do{(0|(c=0|jc(0|ar[u>>2],0,w)))==(0|w)&&(tr[s>>0]=48,c=s);do{if((0|u)==(0|g)){if(l=c+1|0,Tc(A,c,1),k&(0|a)<1){c=l;break}Tc(A,50730,1),c=l}else{if(c>>>0<=I>>>0)break;for(vb(0|I,48,c+b|0);I>>>0<(c=c+-1|0)>>>0;);}}while(0);Tc(A,c,(0|(W=i-c|0))<(0|a)?W:a),a=a-W|0,u=u+4|0}while(u>>>0<h>>>0&-1<(0|a))}xc(A,48,a+18|0,18,0),Tc(A,v,X-v|0)}xc(A,32,r,o,8192^f)}else I=0!=(32&n|0),xc(A,32,r,o=B+3|0,-65537&f),Tc(A,y,B),Tc(A,e!=e|!1?I?52899:50710:I?50702:50706,3),xc(A,32,r,o,8192^f)}while(0);return ur=t,0|((0|o)<(0|r)?r:o)}function Kc(A){A=+A;var e;return Q[d>>3]=A,e=0|ar[d>>2],D=0|ar[d+4>>2],0|e}function qc(A,e){return+ +function A(e,r){e=+e;r|=0;var i=0,f=0,n=0;Q[d>>3]=e;i=0|ar[d>>2];f=0|ar[d+4>>2];n=0|sb(0|i,0|f,52);switch(2047&n){case 0:i=0!=e?(e=+A(0x10000000000000000*e,r),(0|ar[r>>2])-64|0):0,ar[r>>2]=i;break;case 2047:break;default:ar[r>>2]=(2047&n)-1022,ar[d>>2]=i,ar[d+4>>2]=-2146435073&f|1071644672,e=+Q[d>>3]}return+e}(A=+A,e|=0)}function $c(A,e){A|=0,e|=0;do{if(A){if(e>>>0<128){tr[A>>0]=e,A=1;break}if(!(0|ar[ar[10488>>2]>>2])){if(57216==(-128&e|0)){tr[A>>0]=e,A=1;break}ar[(A=10364)>>2]=84,A=-1;break}if(e>>>0<2048){tr[A>>0]=e>>>6|192,tr[A+1>>0]=63&e|128,A=2;break}if(e>>>0<55296|57344==(-8192&e|0)){tr[A>>0]=e>>>12|224,tr[A+1>>0]=e>>>6&63|128,tr[A+2>>0]=63&e|128,A=3;break}if((e+-65536|0)>>>0<1048576){tr[A>>0]=e>>>18|240,tr[A+1>>0]=e>>>12&63|128,tr[A+2>>0]=e>>>6&63|128,tr[A+3>>0]=63&e|128,A=4;break}ar[(A=10364)>>2]=84,A=-1;break}A=1}while(0);return 0|A}function Al(A,e){var r;return r=0|kb(0|(A|=0)),0|(0==(0|(e|=0))?A:r)}function el(A,e,r){A|=0,e|=0;var i=0,f=0,n=0,t=0,o=0;(f=0|ar[(i=(r|=0)+16|0)>>2])?n=5:0|rl(r)?i=0:(f=0|ar[i>>2],n=5);A:do{if(5==(0|n)){if((f-(i=t=0|ar[(o=r+20|0)>>2])|0)>>>0<e>>>0){i=0|xb[63&ar[r+36>>2]](r,A,e);break}e:do{if(-1<(0|tr[r+75>>0])){for(t=e;;){if(!t){n=0,f=A;break e}if(10==(0|tr[A+(f=t+-1|0)>>0]))break;t=f}if((i=0|xb[63&ar[r+36>>2]](r,A,t))>>>0<t>>>0)break A;f=A+(n=t)|0,e=e-t|0,i=0|ar[o>>2]}else n=0,f=A}while(0);hb(0|i,0|f,0|e),ar[o>>2]=(0|ar[o>>2])+e,i=n+e|0}}while(0);return 0|i}function rl(A){var e=0,r=0;return r=0|tr[(e=(A|=0)+74|0)>>0],tr[e>>0]=r+255|r,0|(A=8&(e=0|ar[A>>2])?(ar[A>>2]=32|e,-1):(ar[A+8>>2]=0,r=(ar[A+4>>2]=0)|ar[A+44>>2],ar[A+28>>2]=r,ar[A+20>>2]=r,ar[A+16>>2]=r+(0|ar[A+48>>2]),0))}function il(A,e,r){var i,f,n;return 0|(0|(i=A|=0,f=e|=0,n=r|=0,0|(n=0|fl(i|=0,f|=0,n|=0,-1,-1))))}function fl(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a;return t=ur=(a=ur)+31&-32,ur=ur+128|0,ar[t>>2]=0,ar[(o=4+t|0)>>2]=A,ar[44+t>>2]=A,ar[(n=8+t|0)>>2]=(0|A)<0?-1:A+2147483647|0,ar[76+t>>2]=-1,nl(t,0),r=0|wi(t,r,1,i,f),0|e&&(ar[e>>2]=A+((0|ar[o>>2])+(0|ar[108+t>>2])-(0|ar[n>>2]))),ur=a,0|r}function nl(A,e){e|=0;var r,i,f;ar[(A|=0)+104>>2]=e,f=(r=0|ar[A+8>>2])-(i=0|ar[A+4>>2])|0,ar[A+108>>2]=f,ar[A+100>>2]=0!=(0|e)&(0|e)<(0|f)?i+e|0:r}function tl(A){switch(0|(A|=0)){case 15:case 13:case 11:return 0|(A=1);case 14:case 12:case 10:case 3:case 2:case 1:case 0:case 99:return(A=0)|A;default:sr(55739,25597,495,25802)}return 0}function ol(A,e,r,i){A|=0,e|=0,i|=0;var f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0;if(!(r|=0))return t=0|ar[e>>2],(f=0|ar[e+4>>2])||(A=0|X(4),ar[A>>2]=17536,I(0|A,3920,421)),(n=0|function(A){var e,r=0,i=0;r=0|ar[(e=4+(A|=0)|0)>>2];for(;;){if(-1==(0|r)){A=0;break}if((0|(i=0|ar[e>>2]))==(0|r)&&(ar[e>>2]=r+1),(0|i)==(0|r))break;r=i}return 0|A}(f))||(A=0|X(4),ar[A>>2]=17536,I(0|A,3920,421)),ar[i>>2]=t,f=0|ar[(e=i+4|0)>>2],ar[e>>2]=n,0|f&&du(f),Z=0|ar[(g=56592)+4>>2],ar[(e=A)>>2]=ar[g>>2],ar[e+4>>2]=Z,void yu(A+8|0,56600);switch(f=0|ar[e+24>>2],n=0|ar[e+28>>2],g=90==(0|r),Z=270==(0|r),0|r){case 90:case 270:l=n;break;default:l=f,f=n}o=0|hu(80),ar[o+4>>2]=0,ar[o+8>>2]=0,ar[o>>2]=6208,ar[(n=o+12|0)>>2]=0,ar[n+4>>2]=0,ar[n+8>>2]=0,ar[n+12>>2]=0,ar[n+16>>2]=0,ar[o+32>>2]=32215,ar[o+36>>2]=0,ar[o+40>>2]=0,ar[o+44>>2]=99,ar[o+48>>2]=99,c=o+52|0,ar[(a=o+72|0)>>2]=0,ar[o+76>>2]=0,ar[c>>2]=0,ar[c+4>>2]=0,ar[c+8>>2]=0,ar[c+12>>2]=0,ar[o+68>>2]=a,a=n,m=(c=o)+16|0,bu(o),su(o),t=0|ar[m>>2],ar[n>>2]=a,ar[m>>2]=c,0|t&&ku(t),du(o),ar[i>>2]=a,t=0|ar[(m=i+4|0)>>2],ar[m>>2]=c,t?(du(t),n=0|ar[(m=i)>>2]):m=i,v=0|ar[e+32>>2],w=0|ar[e+36>>2],ar[n+24>>2]=l,ar[n+28>>2]=f,ar[n+32>>2]=v,ar[n+36>>2]=w,f=0|ar[e+56>>2],w=e+60|0;A:do{if((0|f)!=(0|w))for(v=180==(0|r),h=f;;){switch(c=0|ar[h+16>>2],f=0|ar[(o=h+24|0)>>2],n=0|ar[(a=h+28|0)>>2],0|r){case 90:case 270:t=f,f=n;break;default:t=n}if(l=h+20|0,Bo(0|ar[m>>2],c,f,t,0|cr[l>>0]),k=0|ar[o>>2],b=0|ar[a>>2],s=0|ar[h+48>>2],d=0|ar[h+40>>2],o=60+(0|ar[m>>2])|0,n=0|ar[o>>2]){f=o;e:for(;;){for(t=n;!((0|ar[t+16>>2])>=(0|c));){if(!(n=0|ar[t+4>>2]))break e;t=n}if(!(n=0|ar[t>>2])){f=t;break}f=t}i=(0|f)!=(0|o)&&(0|ar[f+16>>2])<=(0|c)?(u=0|ar[f+40>>2],0|ar[f+48>>2]):u=0}else i=u=0;f=0<(0|b);e:do{if(8==(0|tr[l>>0])){if(Z){if(!f)break;if(t=b+-1|0,!(0<(0|k)))break;for(n=0;;){for(o=0|br(t-n|0,s),f=0;l=u+((0|br(f,i))+n)|0,tr[l>>0]=0|tr[d+(f+o)>>0],(0|(f=f+1|0))!=(0|k););if((0|(n=n+1|0))==(0|b))break e}}if(v){if(!f)break;if(t=b+-1|0,o=k+-1|0,!(0<(0|k)))break;n=0;do{for(a=o+(0|br(t-n|0,s))|0,c=0|br(n,i),f=0;tr[u+(f+c)>>0]=0|tr[d+(a-f)>>0],(0|(f=f+1|0))!=(0|k););n=n+1|0}while((0|n)!=(0|b))}else{if(!(g&f))break;if(t=k+-1|0,!(0<(0|k)))break;n=0;do{for(o=t+(0|br(n,s))|0,f=0;l=u+((0|br(f,i))+n)|0,tr[l>>0]=0|tr[d+(o-f)>>0],(0|(f=f+1|0))!=(0|k););n=n+1|0}while((0|n)!=(0|b))}}else{if(Z){if(!f)break;if(t=b+-1|0,!(0<(0|k)))break;for(n=0;;){for(o=0|br(t-n|0,s),a=n<<1,f=0;c=(f<<1)+o|0,l=(0|br(f,i))+a|0,tr[u+l>>0]=0|tr[d+c>>0],tr[u+(l+1)>>0]=0|tr[d+(c+1)>>0],(0|(f=f+1|0))!=(0|k););if((0|(n=n+1|0))==(0|b))break e}}if(v){if(!f)break;if(t=b+-1|0,o=k+-1|0,!(0<(0|k)))break;n=0;do{for(a=0|br(t-n|0,s),c=0|br(n,i),f=0;p=(o-f<<1)+a|0,tr[u+(l=(f<<1)+c|0)>>0]=0|tr[d+p>>0],tr[u+(l+1)>>0]=0|tr[d+(p+1)>>0],(0|(f=f+1|0))!=(0|k););n=n+1|0}while((0|n)!=(0|b))}else{if(!(g&f))break;if(t=k+-1|0,!(0<(0|k)))break;f=0;do{for(o=0|br(f,s),a=f<<1,n=0;l=(t-n<<1)+o|0,p=(0|br(n,i))+a|0,tr[u+p>>0]=0|tr[d+l>>0],tr[u+(p+1)>>0]=0|tr[d+(l+1)>>0],(0|(n=n+1|0))!=(0|k););f=f+1|0}while((0|f)!=(0|b))}}}while(0);if(f=0|ar[h+4>>2])for(;n=0|ar[f>>2];)f=n;else if(f=0|ar[(n=h+8|0)>>2],(0|ar[f>>2])!=(0|h))for(;p=0|ar[n>>2],f=0|ar[(n=p+8|0)>>2],(0|ar[f>>2])!=(0|p););if((0|f)==(0|w))break A;h=f}}while(0);f=0|ar[m>>2],n=0|ar[e+40>>2],(o=0==(0|(t=0|ar[e+44>>2])))||(bu(t),bu(t)),ar[f+40>>2]=n,f=0|ar[(p=f+44|0)>>2],ar[p>>2]=t,0|f&&du(f),o||du(t),f=0|ar[m>>2],n=0|ar[e+48>>2],(o=0==(0|(t=0|ar[e+52>>2])))||(bu(t),bu(t)),ar[f+48>>2]=n,f=0|ar[(p=f+52|0)>>2],ar[p>>2]=t,0|f&&du(f),o||du(t),e=0|ar[(Z=56592)+4>>2],ar[(p=A)>>2]=ar[Z>>2],ar[p+4>>2]=e,yu(A+8|0,56600)}function al(A,e,r){A|=0,r|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0;ur=(f=ur)+16|0,w=f,n=0|ar[(e|=0)+56>>2],i=e+60|0;A:do{if((0|n)!=(0|i)){for(;8==(0|tr[n+20>>0]);){if(c=0|ar[n+24>>2],l=0|ar[n+28>>2],b=0|ar[n+48>>2],s=0|ar[n+40>>2],r){if(0<(0|l)&&(k=(0|c)/2|0,h=c+-1|0,1<(0|c))){t=0;do{for(a=h+(o=0|br(t,b))|0,e=0;u=s+(a-e)|0,c=0|tr[(v=s+(e+o)|0)>>0],tr[v>>0]=0|tr[u>>0],tr[u>>0]=c,(0|(e=e+1|0))<(0|k););t=t+1|0}while((0|t)!=(0|l))}}else if(u=(0|l)/2|0,1<(0|l)&&(d=l+-1|0,0<(0|c))){e=0;do{for(o=0|br(e,b),a=0|br(d-e|0,b),t=0;v=s+(t+a)|0,l=0|tr[(m=s+(t+o)|0)>>0],tr[m>>0]=0|tr[v>>0],tr[v>>0]=l,(0|(t=t+1|0))!=(0|c););e=e+1|0}while((0|e)<(0|u))}if(e=0|ar[n+4>>2])for(;n=0|ar[e>>2];)e=n;else if(e=0|ar[(t=n+8|0)>>2],(0|ar[e>>2])!=(0|n))for(n=t;m=0|ar[n>>2],e=0|ar[(n=m+8|0)>>2],(0|ar[e>>2])!=(0|m););if((0|e)==(0|i))break A;n=e}for(e=0|hu(64),ar[w>>2]=e,ar[w+8>>2]=-2147483584,t=25898,o=(n=e)+(ar[w+4>>2]=54)|0;tr[n>>0]=0|tr[t>>0],t=t+1|0,(0|(n=n+1|0))<(0|o););return(oo(A,4,tr[e+54>>0]=0,w),0<=(0|tr[w+11>>0]))?void(ur=f):(vu(0|ar[w>>2]),void(ur=f))}}while(0);v=0|ar[(w=56592)+4>>2],ar[(m=A)>>2]=ar[w>>2],ar[m+4>>2]=v,yu(A+8|0,56600),ur=f}function cl(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0;var o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0;if(l=0|hu(80),ar[l+4>>2]=0,ar[l+8>>2]=0,ar[l>>2]=6208,ar[(o=l+12|0)>>2]=0,ar[o+4>>2]=0,ar[o+8>>2]=0,ar[o+12>>2]=0,ar[o+16>>2]=0,ar[l+32>>2]=32215,ar[l+36>>2]=0,ar[l+40>>2]=0,ar[l+44>>2]=99,ar[l+48>>2]=99,u=l+52|0,ar[(c=l+72|0)>>2]=0,ar[l+76>>2]=0,ar[u>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u+12>>2]=0,ar[l+68>>2]=c,c=o,p=(u=l)+16|0,bu(l),su(l),a=0|ar[p>>2],ar[o>>2]=c,ar[p>>2]=u,0|a&&ku(a),du(l),ar[t>>2]=c,a=0|ar[(p=t+4|0)>>2],ar[p>>2]=u,a?(du(a),o=0|ar[(p=t)>>2]):p=t,Z=0|ar[e+32>>2],m=0|ar[e+36>>2],ar[o+24>>2]=1-r+i,ar[o+28>>2]=1-f+n,ar[o+32>>2]=Z,ar[o+36>>2]=m,(0|(o=0|ar[e+56>>2]))!=(0|(m=e+60|0)))for(g=e+24|0,Z=e+28|0,v=o;;){if(u=0|ar[v+16>>2],h=0|ar[v+24>>2],t=0|ar[v+28>>2],b=(0|(b=0|br(h,r)))/(0|(s=0|ar[g>>2]))|0,s=(0|br(h,i))/(0|s)|0,h=(0|(h=0|br(t,f)))/(0|(w=0|ar[Z>>2]))|0,w=(0|br(t,n))/(0|w)|0,s=s-b+1|0,t=v+20|0,Bo(0|ar[p>>2],u,s,1-h+w|0,0|cr[t>>0]),d=0|ar[v+48>>2],k=0|ar[v+40>>2],l=60+(0|ar[p>>2])|0,a=0|ar[l>>2]){o=l;A:for(;;){for(c=a;!((0|ar[c+16>>2])>=(0|u));){if(!(a=0|ar[c+4>>2]))break A;c=a}if(!(a=0|ar[c>>2])){o=c;break}o=c}l=(0|o)!=(0|l)&&(0|ar[o+16>>2])<=(0|u)?(u=0|ar[o+40>>2],0|ar[o+48>>2]):u=0}else l=u=0;if(o=(0|w)<(0|h),8==(0|tr[t>>0])){if(!o)for(o=h;hb(u+(0|br(o-h|0,l))|0,k+((0|br(o,d))+b)|0,0|s),(0|o)<(0|w);)o=o+1|0}else if(!o)for(c=b<<1,a=s<<1,o=h;hb(u+(0|br(o-h|0,l))|0,k+((0|br(o,d))+c)|0,0|a),(0|o)<(0|w);)o=o+1|0;if(o=0|ar[v+4>>2])for(;a=0|ar[o>>2];)o=a;else if(o=0|ar[(a=v+8|0)>>2],(0|ar[o>>2])!=(0|v))for(;v=0|ar[a>>2],o=0|ar[(a=v+8|0)>>2],(0|ar[o>>2])!=(0|v););if((0|o)==(0|m))break;v=o}if(o=0|ar[p>>2],a=0|ar[e+40>>2],(l=0==(0|(c=0|ar[e+44>>2])))||(bu(c),bu(c)),ar[o+40>>2]=a,o=0|ar[(n=o+44|0)>>2],ar[n>>2]=c,0|o&&du(o),l||du(c),o=0|ar[p>>2],a=0|ar[e+48>>2],(l=0==(0|(c=0|ar[e+52>>2])))||(bu(c),bu(c)),ar[o+48>>2]=a,o=0|ar[(e=o+52|0)>>2],ar[e>>2]=c,0|o&&du(o),l)return i=0|ar[(i=n=56592)>>2],n=0|ar[(n=n+4|0)>>2],ar[(f=e=A)>>2]=i,ar[(e=e+4|0)>>2]=n,void yu(A=A+8|0,56600);du(c),i=0|ar[(i=n=56592)>>2],n=0|ar[(n=n+4|0)>>2],ar[(f=e=A)>>2]=i,ar[(e=e+4|0)>>2]=n,yu(A=A+8|0,56600)}function ll(A,e,r,i,f,n){A|=0;var t,o,a,c,l,u,b=0,s=0,d=0,k=0;ur=(u=ur)+32|0,s=u+12|0,k=u,l=(e|=0)+60|0,c=(65535&(i|=0))>>>8&255,a=(65535&(r|=0))>>>8&255,o=(65535&(f|=0))>>>8&255,t=(65535&(n|=0))>>>8&255,n=6228;A:for(;;){if(e=0|ar[l>>2],b=0|ar[n>>2],e){r=l,i=e;e:for(;;){for(e=i;!((0|ar[e+16>>2])>=(0|b));)if(!(e=0|ar[e+4>>2])){e=r;break e}if(!(i=0|ar[e>>2]))break;r=e}if((0|e)!=(0|l)&&(0|b)>=(0|ar[e+16>>2])){if(8!=(0|tr[e+20>>0])){d=13;break}switch(r=0|ar[e+28>>2],f=0|ar[e+48>>2],i=0|ar[e+40>>2],0|b){case 3:e=a;break;case 4:e=c;break;case 5:e=o;break;case 6:e=t;break;default:d=19;break A}vb(0|i,0|e,0|br(f,r))}else d=9}else d=9;if(9==(0|d)&&6!=((d=0)|b)){d=10;break}if(6244==(0|(n=n+4|0))){d=22;break}}if(10==(0|d))return ar[s>>2]=0,ar[s+4>>2]=0,ar[s+8>>2]=0,oo(A,5,2002,s),0<=(0|tr[s+11>>0])||vu(0|ar[s>>2]),void(ur=u);if(13==(0|d)){for(e=0|hu(64),ar[k>>2]=e,ar[k+8>>2]=-2147483584,r=25953,f=(i=e)+(ar[k+4>>2]=52)|0;tr[i>>0]=0|tr[r>>0],r=r+1|0,(0|(i=i+1|0))<(0|f););return(oo(A,4,tr[e+52>>0]=0,k),0<=(0|tr[k+11>>0]))?void(ur=u):(vu(0|ar[k>>2]),void(ur=u))}if(19==(0|d))sr(55739,25597,756,26006);else if(22==(0|d))return d=0|ar[(s=56592)+4>>2],ar[(k=A)>>2]=ar[s>>2],ar[k+4>>2]=d,yu(A+8|0,56600),void(ur=u)}function ul(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;if(ur=(a=ur)+48|0,W=a+12|0,Io(o=(I=a)+24|0,0|ar[(r|=0)>>2]),k=60+(0|ar[r>>2])|0,s=0==(0|(u=0|ar[k>>2])))d=8;else{c=k,b=u;A:for(;;){for(l=b;!(6<=(0|ar[l+16>>2]));)if(!(l=0|ar[l+4>>2]))break A;if(!(b=0|ar[l>>2])){c=l;break}c=l}(0|c)!=(0|k)&&(0|ar[c+16>>2])<=6||(d=8)}if(8==(0|d)&&(c=k),t=(0|c)==(0|k),s)X=0;else{c=k;A:for(;;){for(l=u;!(6<=(0|ar[l+16>>2]));)if(!(l=0|ar[l+4>>2]))break A;if(!(u=0|ar[l>>2])){c=l;break}c=l}X=(0|c)!=(0|k)&&(0|ar[c+16>>2])<=6?0|ar[c+40>>2]:0}c=0|ar[o>>2],n=4+o|0;A:do{if((0|c)!=(0|n)){E=e+60|0,y=(B=(0|i)<0)?0-i|0:0,B=B?0:i,p=(0|f)<0?0-f|0:0,Z=c;e:for(;;){v=0|ar[Z+16>>2],h=0|ar[E>>2];r:do{if(0|h){c=E,u=h;i:for(;;){for(l=u;!((0|ar[l+16>>2])>=(0|v));)if(!(l=0|ar[l+4>>2]))break i;if(!(u=0|ar[l>>2])){c=l;break}c=l}if((0|c)!=(0|E)&&(0|ar[c+16>>2])<=(0|v)){if(k=60+(0|ar[r>>2])|0,b=0==(0|(s=0|ar[k>>2])))g=m=0;else{c=k,u=s;i:for(;;){for(l=u;!((0|ar[l+16>>2])>=(0|v));)if(!(l=0|ar[l+4>>2]))break i;if(!(u=0|ar[l>>2])){c=l;break}c=l}g=(0|c)!=(0|k)&&(0|ar[c+16>>2])<=(0|v)?(m=0|ar[c+40>>2],0|ar[c+48>>2]):m=0}c=E,u=h;i:for(;;){for(l=u;!((0|ar[l+16>>2])>=(0|v));)if(!(l=0|ar[l+4>>2]))break i;if(!(u=0|ar[l>>2])){c=l;break}c=l}if(e=(0|c)!=(0|E)&&(0|ar[c+16>>2])<=(0|v)?(w=0|ar[c+48>>2],0|ar[c+40>>2]):w=0,b){d=59;break e}c=k,u=s;i:for(;;){for(l=u;!((0|ar[l+16>>2])>=(0|v));)if(!(l=0|ar[l+4>>2]))break i;if(!(u=0|ar[l>>2])){c=l;break}c=l}if(d=(0|c)!=(0|k)&&(0|ar[c+16>>2])<=(0|v)?0|ar[c+24>>2]:-1,b)s=-1;else{c=k,u=s;i:for(;;){for(l=u;!((0|ar[l+16>>2])>=(0|v));)if(!(l=0|ar[l+4>>2]))break i;if(!(u=0|ar[l>>2])){c=l;break}c=l}s=(0|c)!=(0|k)&&(0|ar[c+16>>2])<=(0|v)?0|ar[c+28>>2]:-1}if((0|d)<=-1){d=59;break e}if(!(-1<(0|s))){d=61;break e}c=E,u=h;i:for(;;){for(l=u;!((0|ar[l+16>>2])>=(0|v));)if(!(l=0|ar[l+4>>2]))break i;if(!(u=0|ar[l>>2])){c=l;break}c=l}b=(0|c)!=(0|E)&&(0|ar[c+16>>2])<=(0|v)?0|ar[c+24>>2]:-1,c=E,u=h;i:for(;;){for(l=u;!((0|ar[l+16>>2])>=(0|v));)if(!(l=0|ar[l+4>>2]))break i;if(!(u=0|ar[l>>2])){c=l;break}c=l}if(c=(0|c)!=(0|E)&&(0|ar[c+16>>2])<=(0|v)?0|ar[c+28>>2]:-1,(0|b)<=-1){d=78;break e}if((0|c)<=-1){d=80;break e}if(((s=(0|c)<(s+f|0)?c-f|0:s)|(d=(0|b)<(d+i|0)?b-i|0:d)|0)<0){d=82;break e}if(!((0|y)<(0|d)&(0|p)<(0|s))){d=90;break e}if(l=e+B|0,u=m+y|0,b=d-y|0,t){for(c=p;;)if(hb(l+(0|br(c+f|0,w))|0,u+(0|br(c,g))|0,0|b),(0|s)<=(0|(c=c+1|0)))break r}else l=p;do{for(u=(0|br(l+f|0,w))+B|0,b=(0|br(l,g))+y|0,c=y;v=e+(u+c)|0,k=0|cr[X+(h=b+c|0)>>0],h=0|br(k,0|cr[m+h>>0]),h=255&((((0|br(0|cr[v>>0],255^k))+h|0)>>>0)/255|0),tr[v>>0]=h,(0|(c=c+1|0))<(0|d););l=l+1|0}while((0|l)<(0|s))}}}while(0);if(c=0|ar[Z+4>>2])for(;l=0|ar[c>>2];)c=l;else if(c=0|ar[(l=Z+8|0)>>2],(0|ar[c>>2])!=(0|Z))for(;Z=0|ar[l>>2],c=0|ar[(l=Z+8|0)>>2],(0|ar[c>>2])!=(0|Z););if((0|c)==(0|n))break A;Z=c}if(59==(0|d))sr(26021,25597,795,26031);else if(61==(0|d))sr(26039,25597,796,26031);else if(78==(0|d))sr(26049,25597,800,26031);else if(80==(0|d))sr(26060,25597,801,26031);else{if(82==(0|d)){for(ar[W>>2]=0,ar[W+4>>2]=0,c=(ar[W+8>>2]=0)|hu(64),ar[W>>2]=c,ar[W+8>>2]=-2147483584,u=26071,b=(l=c)+(ar[W+4>>2]=54)|0;tr[l>>0]=0|tr[u>>0],u=u+1|0,(0|(l=l+1|0))<(0|b););return(tr[c+54>>0]=0,oo(A,2,122,W),0<=(0|tr[W+11>>0]))?(Co(o,A=0|ar[n>>2]),void(ur=a)):(vu(0|ar[W>>2]),Co(o,A=0|ar[n>>2]),void(ur=a))}if(90==(0|d)){for(ar[I>>2]=0,ar[I+4>>2]=0,c=(ar[I+8>>2]=0)|hu(64),ar[I>>2]=c,ar[I+8>>2]=-2147483584,u=26126,b=(l=c)+(ar[I+4>>2]=50)|0;tr[l>>0]=0|tr[u>>0],u=u+1|0,(0|(l=l+1|0))<(0|b););return(tr[c+50>>0]=0,oo(A,2,122,I),0<=(0|tr[I+11>>0]))?(Co(o,A=0|ar[n>>2]),void(ur=a)):(vu(0|ar[I>>2]),Co(o,A=0|ar[n>>2]),void(ur=a))}}}}while(0);W=0|ar[(f=56592)+4>>2],ar[(I=A)>>2]=ar[f>>2],ar[I+4>>2]=W,yu(A+8|0,56600),Co(o,A=0|ar[n>>2]),ur=a}function bl(A,e,r){e|=0,r|=0;var i,f;ur=(i=ur)+16|0,f=i,A=0|ar[(A|=0)>>2],e=0|tA(0|e),ar[f>>2]=ar[r>>2],r=0|cA(4144,0|f),aA(0|A,0|e,0|r),iA(0|r),iA(0|e),ur=i}function sl(A,e){e|=0;var r,i,f,n=0,t=0;if(ar[(A|=0)>>2]=0,ar[(f=A+4|0)>>2]=0,(r=(n=((ar[A+8>>2]=0)|ar[(i=e+4|0)>>2])-(0|ar[e>>2])|0)>>3)&&(536870911<r>>>0&&zl(),t=0|hu(n),ar[f>>2]=t,ar[A>>2]=t,ar[A+8>>2]=t+(r<<3),(0|(n=0|ar[e>>2]))!=(0|(e=0|ar[i>>2]))))for(;ar[t>>2]=ar[n>>2],A=0|ar[n+4>>2],0|(ar[t+4>>2]=A)&&bu(A),n=n+8|0,t=8+(0|ar[f>>2])|0,ar[f>>2]=t,(0|n)!=(0|e););}function dl(A,e,r){e|=0,r|=0;var i,f;ur=(i=ur)+16|0,f=i,A=0|ar[(A|=0)>>2],ar[f>>2]=ar[e>>2],e=0|cA(4144,0|f),ar[f>>2]=ar[r>>2],r=0|cA(4152,0|f),aA(0|A,0|e,0|r),iA(0|r),iA(0|e),ur=i}function kl(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;f=0|ar[(u=(A|=0)+4|0)>>2],c=n=0|ar[A>>2],536870911<(t=1+(r=f-n>>3)|0)>>>0&&zl(),o=(l=(0|ar[(i=A+8|0)>>2])-n|0)>>2,o=l>>3>>>0<268435455?o>>>0<t>>>0?t:o:536870911;do{if(o){if(!(536870911<o>>>0)){a=0|hu(o<<3);break}Zu(u=0|X(8),44519),ar[u>>2]=17660,I(0|u,4016,428)}else a=0}while(0);if(l=a+(o<<3)|0,ar[(t=n=a+(r<<3)|0)>>2]=ar[e>>2],o=0|ar[e+4>>2],o=(ar[a+(r<<3)+4>>2]=o)?(bu(o),f=0|ar[u>>2],0|ar[A>>2]):c,a=n+8|0,(0|f)!=(0|o)){for(;f=(c=f)+-8|0,ar[n+-8>>2]=ar[f>>2],c=c+-4|0,ar[n+-4>>2]=ar[c>>2],ar[f>>2]=0,t=n=t+-8|(ar[c>>2]=0),(0|f)!=(0|o););o=0|ar[A>>2],f=0|ar[u>>2]}if(ar[A>>2]=t,ar[u>>2]=a,ar[i>>2]=l,(0|f)!=(0|(t=o)))for(;n=0|ar[f+-4>>2],f=f+-8|0,0|n&&du(n),(0|f)!=(0|t););o&&vu(o)}function hl(A){var e;(A|=0)&&(0|(e=0|ar[A+4>>2])&&du(e),vu(A))}function wl(A,e){var r=0,i=0,f=0,n=0,t=0,o=0,a=0;if((e|=0)>>>0<=(f=0|ar[(o=(A|=0)+8|0)>>2])-(r=0|ar[(a=A+4|0)>>2])>>3>>>0)for(;ar[(o=r)>>2]=0,r=8+((ar[o+4>>2]=0)|ar[a>>2])|0,ar[a>>2]=r,0!=(0|(e=e+-1|0)););else{536870911<(r=(n=r-(i=0|ar[A>>2])>>3)+e|0)>>>0&&zl(),t=(f=f-i|0)>>2,r=f>>3>>>0<268435455?t>>>0<r>>>0?r:t:536870911;do{if(r){if(!(536870911<r>>>0)){i=0|hu(r<<3);break}Zu(a=0|X(8),44519),ar[a>>2]=17660,I(0|a,4016,428)}else i=0}while(0);for(t=i+(n<<3)|0,n=i+(r<<3)|0,f=r=t;ar[(i=r)>>2]=0,f=r=f+8|(ar[i+4>>2]=0),0!=(0|(e=e+-1|0)););e=0|ar[A>>2],r=t+(0-((i=(0|ar[a>>2])-e|0)>>3)<<3)|0,0<(0|i)&&hb(0|r,0|e,0|i),ar[A>>2]=r,ar[a>>2]=f,ar[o>>2]=n,e&&vu(e)}}function vl(A,e){A|=0,(e|=0)&&(vl(A,0|ar[e>>2]),vl(A,0|ar[e+4>>2]),0|(A=0|ar[e+24>>2])&&du(A),vu(e))}function ml(A,e){return A|=0,(e|=0)&&(ml(A,0|ar[e>>2]),ml(A,0|ar[e+4>>2]),void vu(e))}function gl(A){var e,r,i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(ur=(f=ur)+16|0,e=f,(0|(n=0|ar[(r=(A|=0)+28|0)>>2]))!=(0|(i=A+32|0)))for(s=b=e+4|0,u=n;;){if(a=0|ar[u+20>>2],(l=0==(0|(c=0|ar[u+24>>2])))||bu(c),sl(e,a+48|0),o=0|ar[e>>2],(0|(n=0|ar[b>>2]))==(0|o))n=o;else{for(;t=n+-8|0,ar[b>>2]=t,(0|(n=(n=0|ar[n+-4>>2])?(du(n),0|ar[b>>2]):t))!=(0|o););n=0|ar[e>>2]}if(0|n){if((0|o)!=(0|n)){for(;t=o+-8|0,ar[b>>2]=t,(o=0|ar[o+-4>>2])&&(du(o),t=0|ar[b>>2]),(0|t)!=(0|n);)o=t;n=0|ar[e>>2]}vu(n)}if(n=(ar[a+68>>2]=0)|ar[(o=a+72|0)>>2],(ar[o>>2]=0)|n&&du(n),n=(ar[a+84>>2]=0)|ar[(o=a+88|0)>>2],(ar[o>>2]=0)|n&&du(n),sl(e,a+172|0),o=0|ar[e>>2],(0|(n=0|ar[s>>2]))==(0|o))n=o;else{for(;t=n+-8|0,ar[s>>2]=t,(0|(n=(n=0|ar[n+-4>>2])?(du(n),0|ar[s>>2]):t))!=(0|o););n=0|ar[e>>2]}if(0|n){if((0|o)!=(0|n)){for(;t=o+-8|0,ar[s>>2]=t,(o=0|ar[o+-4>>2])&&(du(o),t=0|ar[s>>2]),(0|t)!=(0|n);)o=t;n=0|ar[e>>2]}vu(n)}if(l||du(c),n=0|ar[u+4>>2])for(;t=0|ar[n>>2];)n=t;else if(n=0|ar[(t=u+8|0)>>2],(0|ar[n>>2])!=(0|u))for(;u=0|ar[t>>2],n=0|ar[(t=u+8|0)>>2],(0|ar[n>>2])!=(0|u););if((0|n)==(0|i))break;u=n}if(0|(n=0|ar[A+64>>2])&&du(n),0|(n=0|ar[A+56>>2])&&du(n),0|(n=0|ar[(a=A+40|0)>>2])){if((0|(t=0|ar[(c=A+44|0)>>2]))!=(0|n)){for(;o=t+-8|0,ar[c>>2]=o,(0|(t=(t=0|ar[t+-4>>2])?(du(t),0|ar[c>>2]):o))!=(0|n););n=0|ar[a>>2]}vu(n)}vl(r,0|ar[i>>2]),ml(A+16|0,0|ar[A+20>>2]),ur=(0<=(0|tr[A+11>>0])||vu(0|ar[A>>2]),f)}function Zl(A,e){A|=0;var r=0,i=0,f=0,n=0,t=0;if(r=0|ar[(e|=0)>>2]){n=(r=0|qu(r,416,400,0))?(0|(f=i=0|ar[e+4>>2])&&bu(i),r?(ar[A+204>>2]=r,r=0|ar[(n=A+208|0)>>2],ar[n>>2]=f,r&&du(r),0):f):0,r=0|ar[e>>2];do{if(0|r&&0|(t=0|qu(r,416,440,0))){if(i=t,0|(f=r=0|ar[e+4>>2])&&bu(r),t){if(ar[A+196>>2]=i,r=0|ar[(t=A+200|0)>>2],ar[t>>2]=f,!r)break;du(r);break}if(!r)break;du(r);break}}while(0);n&&du(n)}}function pl(A,e){A|=0,e|=0;var r,i,f,n,t,o,a=0,c=0,l=0,u=0;if(ur=(o=ur)+32|0,ar[(n=(i=o)+8|0)>>2]=0,ar[(t=4+n|0)>>2]=0,((ar[8+n>>2]=0)|(a=0|ar[(f=A+40|0)>>2]))!=(0|(r=0|ar[A+44>>2]))){l=i+4|0,u=8+n|0;do{c=0|ar[a>>2],ar[i>>2]=c,A=0|ar[a+4>>2],A=(ar[l>>2]=A)?(bu(A),c=0|ar[i>>2]):c;do{if((0|A)!=(0|ar[e>>2])){if((0|(A=0|ar[t>>2]))==(0|ar[u>>2])){kl(n,i);break}ar[A>>2]=c,c=0|ar[l>>2],(ar[A+4>>2]=c)&&(bu(c),A=0|ar[t>>2]),ar[t>>2]=A+8}}while(0);0|(A=0|ar[l>>2])&&du(A),a=a+8|0}while((0|a)!=(0|r))}if((0|f)!=(0|n)&&function(A,e,r){var i=0,f=0,n=0,t=0,o=0,a=0,c=0;if(o=(r|=0)-(e|=0)>>3,i=0|ar[(a=8+(A|=0)|0)>>2],n=0|ar[A>>2],o>>>0>i-(f=n)>>3>>>0){if(n){if((0|(i=0|ar[(t=A+4|0)>>2]))==(0|f))i=n;else{for(n=i;i=n+-8|0,ar[t>>2]=i,(n=0|ar[n+-4>>2])&&(du(n),i=0|ar[t>>2]),(0|i)!=(0|f);)n=i;i=0|ar[A>>2]}vu(i),ar[a>>2]=0,ar[t>>2]=0,ar[A>>2]=0,i=0}if(536870911<o>>>0&&zl(),f=i>>2,536870911<(f=i>>3>>>0<268435455?f>>>0<o>>>0?o:f:536870911)>>>0&&zl(),i=0|hu(f<<3),ar[(n=A+4|0)>>2]=i,ar[A>>2]=i,ar[a>>2]=i+(f<<3),(0|e)==(0|r))return;for(;ar[i>>2]=ar[e>>2],f=0|ar[e+4>>2],0|(ar[i+4>>2]=f)&&bu(f),e=e+8|0,i=8+(0|ar[n>>2])|0,ar[n>>2]=i,(0|e)!=(0|r););return}if(i=(0|ar[(a=A+4|0)>>2])-n>>3,A=i>>>0<o>>>0,i=e+(i<<3)|0,(0|(o=A?i:r))==(0|e))e=f;else{for(;n=0|ar[e>>2],0|(t=0|ar[e+4>>2])&&bu(t),ar[f>>2]=n,n=0|ar[(c=f+4|0)>>2],ar[c>>2]=t,0|n&&du(n),f=f+8|0,(0|(e=e+8|0))!=(0|o););e=f}if(!A){if((0|(i=0|ar[a>>2]))==(0|e))return;for(;f=i+-8|0,ar[a>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[a>>2]):f))!=(0|e););return}if((0|o)==(0|r))return;f=0|ar[a>>2];for(;ar[f>>2]=ar[i>>2],e=0|ar[i+4>>2],0|(ar[f+4>>2]=e)&&bu(e),i=i+8|0,f=8+(0|ar[a>>2])|0,ar[a>>2]=f,(0|i)!=(0|r););}(f,0|ar[n>>2],0|ar[t>>2]),A=0|ar[n>>2]){if((0|(a=0|ar[t>>2]))!=(0|A)){for(;c=a+-8|0,ar[t>>2]=c,(0|(a=(a=0|ar[a+-4>>2])?(du(a),0|ar[t>>2]):c))!=(0|A););A=0|ar[n>>2]}vu(A),ur=o}else ur=o}function yl(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;t=0|ar[(b=(A|=0)+4|0)>>2],r=o=0|ar[A>>2],536870911<(f=(l=t-o>>3)+1|0)>>>0&&zl(),a=(u=(0|ar[(i=A+8|0)>>2])-o|0)>>2,a=u>>3>>>0<268435455?a>>>0<f>>>0?f:a:536870911;do{if(a){if(!(536870911<a>>>0)){c=0|hu(a<<3);break}Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)}else c=0}while(0);if(u=c+(a<<3)|0,ar[(f=n=c+(l<<3)|0)>>2]=ar[e>>2],a=e+4|0,ar[c+(l<<3)+4>>2]=ar[a>>2],ar[e>>2]=0,a=n+8|(ar[a>>2]=0),(0|t)!=(0|r)){for(;t=(l=t)+-8|0,ar[n+-8>>2]=ar[t>>2],l=l+-4|0,ar[n+-4>>2]=ar[l>>2],ar[t>>2]=0,f=n=f+-8|(ar[l>>2]=0),(0|t)!=(0|r););o=0|ar[A>>2]}if(ar[A>>2]=f,f=0|ar[b>>2],ar[b>>2]=a,ar[i>>2]=u,(0|f)!=(0|(t=o)))for(;n=0|ar[f+-4>>2],f=f+-8|0,0|n&&du(n),(0|f)!=(0|t););o&&vu(o)}function Bl(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;t=0|ar[(b=(A|=0)+4|0)>>2],r=o=0|ar[A>>2],536870911<(f=(l=t-o>>3)+1|0)>>>0&&zl(),a=(u=(0|ar[(i=A+8|0)>>2])-o|0)>>2,a=u>>3>>>0<268435455?a>>>0<f>>>0?f:a:536870911;do{if(a){if(!(536870911<a>>>0)){c=0|hu(a<<3);break}Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)}else c=0}while(0);if(u=c+(a<<3)|0,ar[(f=n=c+(l<<3)|0)>>2]=ar[e>>2],a=e+4|0,ar[c+(l<<3)+4>>2]=ar[a>>2],ar[e>>2]=0,a=n+8|(ar[a>>2]=0),(0|t)!=(0|r)){for(;t=(l=t)+-8|0,ar[n+-8>>2]=ar[t>>2],l=l+-4|0,ar[n+-4>>2]=ar[l>>2],ar[t>>2]=0,f=n=f+-8|(ar[l>>2]=0),(0|t)!=(0|r););o=0|ar[A>>2]}if(ar[A>>2]=f,f=0|ar[b>>2],ar[b>>2]=a,ar[i>>2]=u,(0|f)!=(0|(t=o)))for(;n=0|ar[f+-4>>2],f=f+-8|0,0|n&&du(n),(0|f)!=(0|t););o&&vu(o)}function El(A){var e=0,r=0,i=0,f=0,n=0;if(0|(e=0|ar[(A|=0)+208>>2])&&du(e),0|(e=0|ar[A+200>>2])&&du(e),0|(e=0|ar[(n=A+184|0)>>2])){if((0|(r=0|ar[(f=A+188|0)>>2]))!=(0|e)){for(;i=r+-8|0,ar[f>>2]=i,(0|(r=(r=0|ar[r+-4>>2])?(du(r),0|ar[f>>2]):i))!=(0|e););e=0|ar[n>>2]}vu(e)}if(0|(e=0|ar[(f=A+172|0)>>2])){if((0|(r=0|ar[(n=A+176|0)>>2]))!=(0|e)){for(;i=r+-8|0,ar[n>>2]=i,(0|(r=(r=0|ar[r+-4>>2])?(du(r),0|ar[n>>2]):i))!=(0|e););e=0|ar[f>>2]}vu(e)}if((0|tr[(e=A+160|0)+11>>0])<0&&vu(0|ar[e>>2]),0|(e=0|ar[A+88>>2])&&du(e),0|(e=0|ar[A+72>>2])&&du(e),0|(e=0|ar[(f=A+48|0)>>2])){if((0|(r=0|ar[(n=A+52|0)>>2]))!=(0|e)){for(;i=r+-8|0,ar[n>>2]=i,(0|(r=(r=0|ar[r+-4>>2])?(du(r),0|ar[n>>2]):i))!=(0|e););e=0|ar[f>>2]}vu(e)}0<=(0|tr[A+11>>0])||vu(0|ar[A>>2])}function Xl(A,e,r,i,f,n){A|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0;ur=(k=ur)+272|0,s=k+96|0,B=k+236|0,U=k+72|0,S=k+48|0,t=k+24|0,I=k+224|0,C=(o=k)+200|0,F=k+212|0,G=k+188|0,W=k+176|0,V=k+168|0,R=k+152|0,y=k+140|0,a=k+128|0,b=k+116|0,ho(d=k+248|0,0|ar[(N=(e|=0)+60|0)>>2],r),(Z=0|ar[(c=e+32|0)>>2])?(v=c,g=Z):sr(31354,30203,1047,31362);A:for(;;){for(m=g;!((0|ar[m+16>>2])>>>0>=r>>>0);)if(!(m=0|ar[m+4>>2]))break A;if(!(g=0|ar[m>>2])){v=m;break}v=m}(0|v)==(0|c)&&sr(31354,30203,1047,31362),(0|ar[v+16>>2])>>>0>r>>>0?sr(31354,30203,1047,31362):(w=c,p=Z);A:for(;;){for(v=p;!((0|ar[v+16>>2])>>>0>=r>>>0);)if(!(v=0|ar[v+4>>2]))break A;if(!(p=0|ar[v>>2])){w=v;break}w=v}(0|w)!=(0|c)&&(0|ar[w+16>>2])>>>0<=r>>>0||(w=c),v=0|ar[w+20>>2],0|(u=0|ar[w+24>>2])&&bu(u),(E=v)||sr(31354,30203,1047,31362),h=s,ar[(h|=0)>>2]=0,ar[h+4>>2]=0,ar[h+8>>2]=0,ar[h+12>>2]=0,v=(ar[h+16>>2]=0)|tr[(l=11+d|0)>>0],w=0|ar[(m=4+d|0)>>2],M=4==(0|(v<<24>>24<0?w:255&v))?0|Yu(d,0,-1,30298,4)?(v=0|tr[l>>0],w=0|ar[m>>2],22):25:22;A:do{if(22==(0|M)){if(4==(0|(v<<24>>24<0?w:255&v))){if(!(0|Yu(d,0,-1,30318,4))){M=25;break}v=0|tr[l>>0],w=0|ar[m>>2]}do{if(4==(0|(v<<24>>24<0?w:255&v))){if(0|Yu(d,0,-1,30303,4)){v=0|tr[l>>0],w=0|ar[m>>2];break}if(ar[U>>2]=0,ar[(g=U+4|0)>>2]=0,mo(S,(ar[U+8>>2]=0)|ar[N>>2],r,U),w=0|ar[(m=S)+4>>2],ar[(v=s)>>2]=ar[m>>2],ar[v+4>>2]=w,w=S+8|0,(0|tr[(m=(v=8+s|0)+11|0)>>0])<0?(tr[ar[v>>2]>>0]=0,ar[12+s>>2]=0):(tr[v>>0]=0,tr[m>>0]=0),Cu(v,0),ar[v>>2]=ar[w>>2],ar[v+4>>2]=ar[w+4>>2],ar[v+8>>2]=ar[w+8>>2],0|ar[s>>2]){S=0|ar[(i=s)+4>>2],ar[(w=A)>>2]=ar[i>>2],ar[w+4>>2]=S,ar[(w=A+8|0)>>2]=ar[v>>2],ar[w+4>>2]=ar[v+4>>2],ar[w+8>>2]=ar[v+8>>2],ar[v>>2]=0,ar[v+4>>2]=0,(ar[v+8>>2]=0)|(w=0|ar[U>>2])&&((0|ar[g>>2])!=(0|w)&&(ar[g>>2]=w),vu(w));break A}if(Wl(S,e,r,i,U),J=0|ar[(D=S)+4>>2],ar[(w=s)>>2]=ar[D>>2],ar[w+4>>2]=J,w=S+8|0,(0|tr[m>>0])<0?(tr[ar[v>>2]>>0]=0,ar[12+s>>2]=0):(tr[v>>0]=0,tr[m>>0]=0),Cu(v,0),ar[v>>2]=ar[w>>2],ar[v+4>>2]=ar[w+4>>2],ar[v+8>>2]=ar[w+8>>2],0|ar[s>>2]){S=0|ar[(i=s)+4>>2],ar[(w=A)>>2]=ar[i>>2],ar[w+4>>2]=S,ar[(w=A+8|0)>>2]=ar[v>>2],ar[w+4>>2]=ar[v+4>>2],ar[w+8>>2]=ar[v+8>>2],ar[v>>2]=0,ar[v+4>>2]=0,(ar[v+8>>2]=0)|(w=0|ar[U>>2])&&((0|ar[g>>2])!=(0|w)&&(ar[g>>2]=w),vu(w));break A}0|(w=0|ar[U>>2])&&((0|ar[g>>2])!=(0|w)&&(ar[g>>2]=w),vu(w)),M=178;break A}}while(0);do{if(4==(0|(v<<24>>24<0?w:255&v))){if(0|Yu(d,0,-1,30308,4)){v=0|tr[l>>0],w=0|ar[m>>2];break}if(Il(U,e,r,i),v=0|ar[(m=U)+4>>2],ar[(w=s)>>2]=ar[m>>2],ar[w+4>>2]=v,v=U+8|0,(0|tr[(m=(w=8+s|0)+11|0)>>0])<0?(tr[ar[w>>2]>>0]=0,ar[12+s>>2]=0):(tr[w>>0]=0,tr[m>>0]=0),Cu(w,0),ar[w>>2]=ar[v>>2],ar[w+4>>2]=ar[v+4>>2],ar[w+8>>2]=ar[v+8>>2],!(0|ar[s>>2])){M=178;break A}U=0|ar[(i=s)+4>>2],ar[(S=A)>>2]=ar[i>>2],ar[S+4>>2]=U,ar[(A=A+8|0)>>2]=ar[w>>2],ar[A+4>>2]=ar[w+4>>2],ar[A+8>>2]=ar[w+8>>2],ar[w>>2]=0,ar[w+4>>2]=0,ar[w+8>>2]=0;break A}}while(0);if(4==(0|(v<<24>>24<0?w:255&v))&&0==(0|Yu(d,0,-1,30313,4))){if(ar[U>>2]=0,ar[(g=U+4|0)>>2]=0,mo(S,(ar[U+8>>2]=0)|ar[N>>2],r,U),w=0|ar[(m=S)+4>>2],ar[(v=s)>>2]=ar[m>>2],ar[v+4>>2]=w,w=S+8|0,(0|tr[(m=(v=8+s|0)+11|0)>>0])<0?(tr[ar[v>>2]>>0]=0,ar[12+s>>2]=0):(tr[v>>0]=0,tr[m>>0]=0),Cu(v,0),ar[v>>2]=ar[w>>2],ar[v+4>>2]=ar[w+4>>2],ar[v+8>>2]=ar[w+8>>2],0|ar[s>>2]){S=0|ar[(i=s)+4>>2],ar[(w=A)>>2]=ar[i>>2],ar[w+4>>2]=S,ar[(w=A+8|0)>>2]=ar[v>>2],ar[w+4>>2]=ar[v+4>>2],ar[w+8>>2]=ar[v+8>>2],ar[v>>2]=0,ar[v+4>>2]=0,(ar[v+8>>2]=0)|(w=0|ar[U>>2])&&((0|ar[g>>2])!=(0|w)&&(ar[g>>2]=w),vu(w));break}if(Cl(S,e,r,i,U),J=0|ar[(D=S)+4>>2],ar[(w=s)>>2]=ar[D>>2],ar[w+4>>2]=J,w=S+8|0,(0|tr[m>>0])<0?(tr[ar[v>>2]>>0]=0,ar[12+s>>2]=0):(tr[v>>0]=0,tr[m>>0]=0),Cu(v,0),ar[v>>2]=ar[w>>2],ar[v+4>>2]=ar[w+4>>2],ar[v+8>>2]=ar[w+8>>2],0|ar[s>>2]){S=0|ar[(i=s)+4>>2],ar[(w=A)>>2]=ar[i>>2],ar[w+4>>2]=S,ar[(w=A+8|0)>>2]=ar[v>>2],ar[w+4>>2]=ar[v+4>>2],ar[w+8>>2]=ar[v+8>>2],ar[v>>2]=0,ar[v+4>>2]=0,(ar[v+8>>2]=0)|(w=0|ar[U>>2])&&((0|ar[g>>2])!=(0|w)&&(ar[g>>2]=w),vu(w));break}0|(w=0|ar[U>>2])&&((0|ar[g>>2])!=(0|w)&&(ar[g>>2]=w),vu(w)),M=178;break}ar[y>>2]=0,ar[y+4>>2]=0,ar[y+8>>2]=0,oo(A,4,3001,y),(0|tr[y+11>>0])<0&&vu(0|ar[y>>2])}}while(0);do{if(25==(0|M)){if(v=0|tr[l>>0],w=0|ar[m>>2],4==(0|(v<<24>>24<0?w:255&v))?0|Yu(d,0,-1,30298,4)?(v=0|tr[l>>0],w=0|ar[m>>2],M=28):p=1:M=28,28==(0|M)&&(p=4==(0|(v<<24>>24<0?w:255&v))&&(p=0==(0|Yu(d,0,-1,30318,4)))?4:0),m=(w=0|Rl(p))?0|jb[127&ar[w+16>>2]](p):0,(0|(v=0|ar[e+16>>2]))==(0|(y=e+20|0)))g=w;else{do{if(D=0|ar[v+16>>2],w=(J=(0|m)<(0|(g=0|jb[127&ar[D+16>>2]](p))))?D:w,m=J?g:m,g=0|ar[v+4>>2])for(v=g;g=0|ar[v>>2];)v=g;else if(Z=0|ar[(g=v+8|0)>>2],(0|ar[Z>>2])==(0|v))v=Z;else for(;J=0|ar[g>>2],v=0|ar[(g=J+8|0)>>2],(0|ar[v>>2])!=(0|J););}while((0|v)!=(0|y));g=w}if(!g){if(ar[B>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,oo(A,4,3e3,B),0<=(0|tr[B+11>>0]))break;vu(0|ar[B>>2]);break}if(ar[U>>2]=0,ar[(X=U+4|0)>>2]=0,mo(S,(ar[U+8>>2]=0)|ar[N>>2],r,U),v=0|ar[(m=S)+4>>2],ar[(w=s)>>2]=ar[m>>2],ar[w+4>>2]=v,v=S+8|0,(0|tr[(m=(w=8+s|0)+11|0)>>0])<0?(tr[ar[w>>2]>>0]=0,ar[12+s>>2]=0):(tr[w>>0]=0,tr[m>>0]=0),Cu(w,0),ar[w>>2]=ar[v>>2],ar[w+4>>2]=ar[v+4>>2],ar[w+8>>2]=ar[v+8>>2],0|ar[s>>2])D=0|ar[(Q=s)+4>>2],ar[(J=A)>>2]=ar[Q>>2],ar[J+4>>2]=D,ar[(J=A+8|0)>>2]=ar[w>>2],ar[J+4>>2]=ar[w+4>>2],ar[J+8>>2]=ar[w+8>>2],ar[w>>2]=0,ar[w+4>>2]=0,ar[w+8>>2]=0,w=1;else{fs[63&ar[g+20>>2]](t,S),Z=0|ar[t>>2];do{if(Z)m=0|ar[4+t>>2],v=0|ar[8+t>>2],ar[I>>2]=0,ar[I+4>>2]=0,4294967279<(g=(ar[I+8>>2]=0)|Vc(v))>>>0&&pu(),g>>>0<11?(tr[I+11>>0]=g)?(w=I,M=53):w=I:(w=0|hu(M=g+16&-16),ar[I>>2]=w,ar[I+8>>2]=-2147483648|M,ar[I+4>>2]=g,M=53),53==(0|M)&&hb(0|w,0|v,0|g),tr[w+g>>0]=0,oo(A,Z,m,I),w=((0|tr[I+11>>0])<0&&vu(0|ar[I>>2]),1);else{if(J=0|ar[U>>2],ts[31&ar[g+28>>2]](o,0|ar[S>>2],J,(0|ar[X>>2])-J|0),ar[t>>2]=ar[o>>2],ar[4+t>>2]=ar[o+4>>2],ar[8+t>>2]=ar[o+8>>2],0|ar[t>>2]){if(is[511&ar[g+24>>2]](0|ar[S>>2]),m=0|ar[t>>2],g=0|ar[4+t>>2],v=0|ar[8+t>>2],ar[C>>2]=0,ar[C+4>>2]=0,4294967279<(Z=(ar[C+8>>2]=0)|Vc(v))>>>0&&pu(),Z>>>0<11?(tr[C+11>>0]=Z)?(w=C,M=62):w=C:(w=0|hu(M=Z+16&-16),ar[C>>2]=w,ar[C+8>>2]=-2147483648|M,ar[C+4>>2]=Z,M=62),62==(0|M)&&hb(0|w,0|v,0|Z),tr[w+Z>>0]=0,oo(A,m,g,C),0<=(0|tr[C+11>>0])){w=1;break}vu(0|ar[C>>2]),w=1;break}ar[o>>2]=0,ns[127&ar[g+32>>2]](F,0|ar[S>>2],o),ar[t>>2]=ar[F>>2],ar[4+t>>2]=ar[F+4>>2],ar[8+t>>2]=ar[F+8>>2];do{if(0|ar[t>>2]){if(is[511&ar[g+24>>2]](0|ar[S>>2]),m=0|ar[t>>2],g=0|ar[4+t>>2],v=0|ar[8+t>>2],ar[G>>2]=0,ar[G+4>>2]=0,4294967279<(Z=(ar[G+8>>2]=0)|Vc(v))>>>0&&pu(),Z>>>0<11?(tr[G+11>>0]=Z)?(w=G,M=71):w=G:(w=0|hu(M=Z+16&-16),ar[G>>2]=w,ar[G+8>>2]=-2147483648|M,ar[G+4>>2]=Z,M=71),71==(0|M)&&hb(0|w,0|v,0|Z),tr[w+Z>>0]=0,oo(A,m,g,G),0<=(0|tr[G+11>>0])){w=1;break}vu(0|ar[G>>2]),w=1}else{if(!(w=0|ar[o>>2])){if(is[511&ar[g+24>>2]](0|ar[S>>2]),ar[W>>2]=0,ar[W+4>>2]=0,oo(A,7,ar[W+8>>2]=0,W),0<=(0|tr[W+11>>0])){w=1;break}vu(0|ar[W>>2]),w=1;break}p=0|ar[w>>2],J=0|ar[(D=w+4|0)>>2],ar[w>>2]=0,ar[D>>2]=0,ar[i>>2]=p,w=0|ar[(p=i+4|0)>>2],ar[p>>2]=J,0|w&&du(w),hl(0|ar[o>>2]),is[511&ar[g+24>>2]](0|ar[S>>2]),w=0|ar[E+196>>2],(B=0==(0|(y=0|ar[E+200>>2])))||bu(y);do{if(0|w){if(v=0|ar[i>>2],B||(bu(y),bu(y)),ar[v+40>>2]=w,w=0|ar[(J=v+44|0)>>2],ar[J>>2]=y,0|w&&du(w),B)break;du(y)}}while(0);v=0|ar[E+204>>2],(Z=0==(0|(g=0|ar[E+208>>2])))||bu(g);do{if(0|v){if(w=0|ar[i>>2],Z||(bu(g),bu(g)),ar[w+48>>2]=v,w=0|ar[(J=w+52|0)>>2],ar[J>>2]=g,0|w&&du(w),Z)break;du(g)}}while(0);J=0|ar[i>>2],D=0|ar[J+32>>2],v=2==(0|(w=0==(0|(w=99==(0|f)?D:f))?1:w))?0:3;do{if((0|w)==(0|D)&&(0|v)==(0|ar[J+36>>2]))w=0;else{ar[V>>2]=0,me(F,i,w,v,V,ar[(m=V+4|0)>>2]=0),w=0|ar[F>>2],J=0|ar[(v=F+4|0)>>2],ar[F>>2]=0,ar[v>>2]=0,ar[i>>2]=w,w=0|ar[p>>2],ar[p>>2]=J;do{if(0|w){if(du(w),!(w=0|ar[v>>2]))break;du(w)}}while(0);if(0|(w=0|ar[m>>2])&&du(w),0|ar[i>>2]){w=0;break}if(ar[R>>2]=0,ar[R+4>>2]=0,ar[R+8>>2]=0,oo(A,4,3003,R),0<=(0|tr[R+11>>0])){w=1;break}vu(0|ar[R>>2]),w=1}}while(0);if(Z||du(g),B)break;du(y)}}while(0)}}while(0)}0|(v=0|ar[U>>2])&&((0|ar[X>>2])!=(0|v)&&(ar[X>>2]=v),vu(v)),w||(M=178)}}while(0);do{if(178==(0|M)){if(0==(0|n)||0==(0|tr[n+1>>0])){ar[U>>2]=0,ar[(J=U+4|0)>>2]=0,w=(ar[U+8>>2]=0)|ar[N>>2],v=0|ar[w+44>>2],(D=0==(0|(Q=0|ar[w+48>>2])))||(bu(Q),w=0|ar[N>>2]),ar[S>>2]=ar[w+52>>2],Y=S+4|0,w=0|ar[w+56>>2],0|(ar[Y>>2]=w)&&bu(w),Ht(t,v,r,S,U),w=0|ar[(_=t)+4>>2],ar[(N=s)>>2]=ar[_>>2],ar[N+4>>2]=w,w=8+t|0,(0|tr[(_=(N=8+s|0)+11|0)>>0])<0?(tr[ar[N>>2]>>0]=0,ar[12+s>>2]=0):(tr[N>>0]=0,tr[_>>0]=0),Cu(N,0),ar[N>>2]=ar[w>>2],ar[N+4>>2]=ar[w+4>>2],ar[N+8>>2]=ar[w+8>>2],w=0|ar[U>>2],X=0|ar[J>>2];A:do{if((0|w)!=(0|X)){W=11+a|0,G=12+s|0,f=i+4|0,V=A+8|0,F=8+t|0,R=I=4+t|0,n=C=o+8|0;e:for(;;){v=0|ar[(Z=w+4|0)>>2];r:do{if(v){if(m=0|qu(v,128,808,0)){(v=0|ar[w+8>>2])?bu(v):v=0,ar[t>>2]=0,ol(o,(ar[R>>2]=0)|ar[i>>2],0|ar[m+56>>2],t),B=0|ar[(y=o)+4>>2],ar[(E=s)>>2]=ar[y>>2],ar[E+4>>2]=B,(0|tr[_>>0])<0?(tr[ar[N>>2]>>0]=0,ar[G>>2]=0):(tr[N>>0]=0,tr[_>>0]=0),Cu(N,0),ar[N>>2]=ar[n>>2],ar[N+4>>2]=ar[n+4>>2],ar[N+8>>2]=ar[n+8>>2];do{if(0|ar[s>>2])E=0|ar[(B=s)+4>>2],ar[(m=A)>>2]=ar[B>>2],ar[m+4>>2]=E,ar[V>>2]=ar[N>>2],ar[V+4>>2]=ar[N+4>>2],ar[V+8>>2]=ar[N+8>>2],ar[N>>2]=0,ar[N+4>>2]=0,ar[N+8>>2]=0,m=1;else{if(m=0|ar[t>>2],0|(g=0|ar[R>>2])&&bu(g),ar[i>>2]=m,m=0|ar[f>>2],ar[f>>2]=g,!m){m=0;break}du(m),m=0}}while(0);if(0|(g=0|ar[R>>2])&&du(g),m){m=1;break}E=v}else E=0;if(v=0|ar[Z>>2]){m=0|qu(v,128,776,0);do{if(m){if((v=0|ar[w+8>>2])?bu(v):v=0,al(t,0|ar[i>>2],1==(0|tr[m+56>>0])),B=0|ar[(y=t)+4>>2],ar[(M=s)>>2]=ar[y>>2],ar[M+4>>2]=B,(0|tr[_>>0])<0?(tr[ar[N>>2]>>0]=0,ar[G>>2]=0):(tr[N>>0]=0,tr[_>>0]=0),Cu(N,0),ar[N>>2]=ar[F>>2],ar[N+4>>2]=ar[F+4>>2],ar[N+8>>2]=ar[F+8>>2],!(0|ar[s>>2])){B=v;break}g=0|ar[(M=s)+4>>2],ar[(m=A)>>2]=ar[M>>2],ar[m+4>>2]=g,ar[V>>2]=ar[N>>2],ar[V+4>>2]=ar[N+4>>2],ar[V+8>>2]=ar[N+8>>2],ar[N>>2]=0,ar[N+4>>2]=0,ar[N+8>>2]=0,m=1,g=v,v=E,M=241;break r}B=0}while(0);if(!(v=0|ar[Z>>2])){Z=0,g=B,v=E,M=238;break}if(!(m=0|qu(v,128,744,0))){Z=0,g=B,v=E,M=238;break}if((v=0|ar[w+8>>2])?bu(v):v=0,y=0|ar[i>>2],g=0|ar[y+24>>2],y=0|ar[y+28>>2],(0|g)<=-1){M=220;break e}if((0|y)<=-1){M=222;break e}if(p=0|Kt(m,g),M=0|qt(m,g),Z=0|$t(m,y),(0|(g=(0|M)<(0|g)?M:g+-1|0))<(0|(p=0<(0|p)?p:0))|(0|(m=(0|(m=0|Ao(m,y)))<(0|y)?m:y+-1|0))<(0|(Z=0<(0|Z)?Z:0))){if(ar[a>>2]=0,ar[4+a>>2]=0,ar[8+a>>2]=0,oo(A,2,120,a),0<=(0|tr[W>>0])){m=1,Z=v,g=B,v=E,M=239;break}vu(0|ar[a>>2]),m=1,Z=v,g=B,v=E,M=239;break}ar[t>>2]=0,cl(o,(ar[I>>2]=0)|ar[i>>2],p,g,Z,m,t),y=0|ar[(p=o)+4>>2],ar[(M=s)>>2]=ar[p>>2],ar[M+4>>2]=y,(0|tr[_>>0])<0?(tr[ar[N>>2]>>0]=0,ar[G>>2]=0):(tr[N>>0]=0,tr[_>>0]=0),Cu(N,0),ar[N>>2]=ar[C>>2],ar[N+4>>2]=ar[C+4>>2],ar[N+8>>2]=ar[C+8>>2];do{if(0|ar[s>>2])M=0|ar[(y=s)+4>>2],ar[(m=A)>>2]=ar[y>>2],ar[m+4>>2]=M,ar[V>>2]=ar[N>>2],ar[V+4>>2]=ar[N+4>>2],ar[V+8>>2]=ar[N+8>>2],ar[N>>2]=0,ar[N+4>>2]=0,ar[N+8>>2]=0,m=1;else{if(m=0|ar[t>>2],0|(g=0|ar[I>>2])&&bu(g),ar[i>>2]=m,m=0|ar[f>>2],ar[f>>2]=g,!m){m=0;break}du(m),m=0}}while(0);0|(g=0|ar[I>>2])&&du(g),M=m?(m=1,Z=v,g=B,v=E,239):(Z=v,g=B,v=E,238)}else g=Z=0,v=E,M=238}else v=g=Z=0,M=238}while(0);if(238==(0|M)&&(m=0,M=239),239==(0|M)&&(M=(Z&&du(Z),241)),241==(0|M)&&(M=0,g&&du(g)),0|v&&du(v),w=w+12|0,0|m){T=m;break A}if((0|w)==(0|X)){T=2;break A}}220==(0|M)?sr(31382,30203,1221,31362):222==(0|M)&&sr(31397,30203,1222,31362)}else T=2}while(0);if(0|(w=0|ar[Y>>2])&&du(w),D||du(Q),0|(w=0|ar[U>>2])){if((0|(v=0|ar[J>>2]))!=(0|w)){for(;m=v+-12|0,ar[J>>2]=m,(0|(v=(v=0|ar[v+-4>>2])?(du(v),0|ar[J>>2]):m))!=(0|w););w=0|ar[U>>2]}vu(w)}if(2!=(2|T))break}if(0|(m=0|ar[c>>2])){w=c,g=m;A:for(;;){for(v=g;!((0|ar[v+16>>2])>>>0>=r>>>0);)if(!(v=0|ar[v+4>>2]))break A;if(!(g=0|ar[v>>2])){w=v;break}w=v}if((0|w)!=(0|c)&&(0|ar[w+16>>2])>>>0<=r>>>0){w=c;A:for(;;){for(v=m;!((0|ar[v+16>>2])>>>0>=r>>>0);)if(!(v=0|ar[v+4>>2]))break A;if(!(m=0|ar[v>>2])){w=v;break}w=v}if((0|w)!=(0|c)&&(0|ar[w+16>>2])>>>0<=r>>>0||(w=c),v=0|ar[w+20>>2],(y=0==(0|(p=0|ar[w+24>>2])))||bu(p),w=0|ar[v+68>>2],(Z=0==(0|(g=0|ar[v+72>>2])))||bu(g),w){ar[U>>2]=0,Xl(S,e,(ar[(m=U+4|0)>>2]=0)|ar[w+20>>2],U,99,0);A:do{if(0|ar[S>>2])w=0|ar[(i=S)+4>>2],ar[(U=A)>>2]=ar[i>>2],ar[U+4>>2]=w,w=S+8|0,ar[(U=A+8|0)>>2]=ar[w>>2],ar[U+4>>2]=ar[w+4>>2],ar[U+8>>2]=ar[w+8>>2],ar[w>>2]=0,ar[w+4>>2]=0,ar[w+8>>2]=0,w=1;else{switch(0|ar[32+(0|ar[U>>2])>>2]){case 2:case 0:w=0;break;case 1:w=3;break;default:if(ar[b>>2]=0,ar[4+b>>2]=0,ar[8+b>>2]=0,oo(A,2,3003,b),0<=(0|tr[11+b>>0])){w=1;break A}vu(0|ar[b>>2]),w=1;break A}_o(0|ar[i>>2],U,w,6),w=0}}while(0);(0|tr[(v=S+8|0)+11>>0])<0&&vu(0|ar[v>>2]),0|(v=0|ar[m>>2])&&du(v),w||(M=289)}else M=289;if(289==(0|M)&&(w=0),Z||du(g),y||du(p),0|w)break}}U=0|ar[(i=56592)+4>>2],ar[(S=A)>>2]=ar[i>>2],ar[S+4>>2]=U,yu(A+8|0,56600)}}while(0);(0|tr[(w=8+s|0)+11>>0])<0&&vu(0|ar[w>>2]),0|u&&du(u),ur=(0<=(0|tr[l>>0])||vu(0|ar[d>>2]),k)}function Wl(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0;if(ur=(a=ur)+480|0,J=a+24|0,s=(o=a)+460|0,c=a+436|0,Z=a+280|0,k=a+424|0,v=a+264|0,t=a+256|0,p=a+96|0,y=a+240|0,B=a+80|0,E=a+68|0,Q=a+56|0,n=a+48|0,ar[(g=a+448|0)>>2]=0,ar[g+4>>2]=0,ar[g+8>>2]=0,function(A,e,r){A|=0,e|=0;var i,f=0,n=0,t=0,o=0;if(ur=(i=ur)+32|0,t=i+12|0,o=i,n=0|ar[(r|=0)>>2],(r=(0|ar[r+4>>2])-n|0)>>>0<8){for(r=0|hu(32),ar[t>>2]=r,ar[t+8>>2]=-2147483616,n=30033,e=(f=r)+(ar[t+4>>2]=25)|0;tr[f>>0]=0|tr[n>>0],n=n+1|0,(0|(f=f+1|0))<(0|e););return(tr[r+25>>0]=0,oo(A,2,118,t),0<=(0|tr[t+11>>0]))?ur=i:(vu(0|ar[t>>2]),ur=i)}t=0==(1&tr[n+1>>0]),or[e>>1]=1+(0|cr[n+2>>0]),or[e+2>>1]=1+(0|cr[n+3>>0]);do{if(!t){if(12<=r>>>0){ar[e+4>>2]=cr[n+5>>0]<<16|cr[n+4>>0]<<24|cr[n+6>>0]<<8|cr[n+7>>0],r=11,f=cr[n+9>>0]<<16|cr[n+8>>0]<<24|cr[n+10>>0]<<8;break}for(r=0|hu(32),ar[o>>2]=r,ar[o+8>>2]=-2147483616,n=30059,e=(f=r)+(ar[o+4>>2]=26)|0;tr[f>>0]=0|tr[n>>0],n=n+1|0,(0|(f=f+1|0))<(0|e););return(tr[r+26>>0]=0,oo(A,2,118,o),0<=(0|tr[o+11>>0]))?ur=i:(vu(0|ar[o>>2]),ur=i)}ar[e+4>>2]=cr[n+4>>0]<<8|cr[n+5>>0],r=7,f=cr[n+6>>0]<<8}while(0);ar[e+8>>2]=cr[n+r>>0]|f,t=0|ar[(e=56592)+4>>2],ar[(o=A)>>2]=ar[e>>2],ar[o+4>>2]=t,yu(A+8|0,56600),ur=i}(o,g,f),0|ar[o>>2])U=0|ar[(M=o)+4>>2],ar[(T=A)>>2]=ar[M>>2],ar[T+4>>2]=U,U=o+8|0,ar[(T=A+8|0)>>2]=ar[U>>2],ar[T+4>>2]=ar[U+4>>2],ar[T+8>>2]=ar[U+8>>2],ar[U>>2]=0,ar[U+4>>2]=0,ar[U+8>>2]=0;else{if(T=0|ar[(w=e+60|0)>>2],f=0|ar[T+76>>2],(U=0==(0|(T=0|ar[T+80>>2])))||bu(T),f){fo(c,f,r,1684630887),f=0|ar[(M=c+4|0)>>2],u=l=0|ar[c>>2],h=f,257<=(65535&(G=0|or[g>>1]))&&sr(31678,30203,133,31692),257<=(65535&(s=0|or[g+2>>1]))&&sr(31701,30203,139,31718),d=0|br(Y=65535&s,_=65535&G);A:do{if((f-l>>2|0)==(0|d)){e:do{if((0|u)!=(0|h)){d=0|ar[e+28>>2],k=e+32|0;r:do{if((0|d)==(0|k))s=0|ar[u>>2];else for(b=u;;){for(s=0|ar[b>>2],u=d;(0|ar[u+16>>2])!=(0|s);){if(f=0|ar[u+4>>2])for(;l=0|ar[f>>2];)f=l;else if(f=0|ar[(l=u+8|0)>>2],(0|ar[f>>2])!=(0|u))for(;N=0|ar[l>>2],f=0|ar[(l=N+8|0)>>2],(0|ar[f>>2])!=(0|N););if((0|f)==(0|k))break r;u=f}if((0|(b=b+4|0))==(0|h))break e}}while(0);l=Z+64|0,ar[(b=Z+8|0)>>2]=4524,u=Z+12|0,ar[Z>>2]=188,ar[l>>2]=208,Jf(Z+64|(ar[Z+4>>2]=0),u),ar[Z+136>>2]=0,ar[Z+140>>2]=-1,ar[Z>>2]=4504,ar[l>>2]=4544,ar[b>>2]=4524,Sf(u),ar[u>>2]=4340,ar[(b=Z+44|0)>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,ar[b+12>>2]=0,ar[Z+60>>2]=24,ar[J>>2]=0,ar[J+4>>2]=0,ar[J+8>>2]=0,Xe(u,J),(0|tr[J+11>>0])<0&&vu(0|ar[J>>2]),We(0|Lf(0|We(f=Z+8|0,31789,14),s),31804,23),Ie(v,u),oo(A,2,119,v),(0|tr[v+11>>0])<0&&vu(0|ar[v>>2]),ar[Z>>2]=4504,ar[l>>2]=4544,ar[f>>2]=4524,ar[u>>2]=4340,(0|tr[b+11>>0])<0&&vu(0|ar[b>>2]),kf(u),bf(l);break A}}while(0);f=0|ar[w>>2],ar[Z>>2]=ar[f+52>>2],N=Z+4|0,l=0|ar[f+56>>2],(ar[N>>2]=l)&&(bu(l),f=0|ar[w>>2]),l=0|ar[f+44>>2],(R=0==(0|(F=0|ar[f+48>>2])))||bu(F),Lt(t,l,r,Z,1885960297),V=0!=(0|(f=0|ar[t>>2]))&&0!=(0|(m=0|qu(f,128,352,0)))?(f=0|ar[4+t>>2])?(bu(f),d=m,f):(d=m,0):d=0,h=0|ar[g+4>>2],k=0|ar[g+8>>2],(0|ar[c>>2])==(0|ar[M>>2])&&sr(31828,30203,1359,31854),s=e+72|0;e:do{if(h>>>0<(0|ar[s>>2])>>>0&&k>>>0<(0|ar[e+76>>2])>>>0){u=0|hu(80),ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u>>2]=6208,ar[(f=u+12|0)>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f+12>>2]=0,ar[f+16>>2]=0,ar[u+32>>2]=30025,ar[u+36>>2]=0,ar[u+40>>2]=0,ar[u+44>>2]=99,ar[u+48>>2]=99,s=u+52|0,ar[(b=u+72|0)>>2]=0,ar[u+76>>2]=0,ar[s>>2]=0,ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s+12>>2]=0,ar[u+68>>2]=b,b=f,C=(s=u)+16|0,bu(u),su(u),l=0|ar[C>>2],ar[f>>2]=b,ar[C>>2]=s,0|l&&ku(l),du(u),ar[i>>2]=b,l=0|ar[(C=i+4|0)>>2],ar[C>>2]=s,l?(du(l),f=0|ar[(b=i)>>2]):b=i,yo(f,h,k,1,3),u=0!=(0|d);do{if(u){if(f=0|ar[d+56>>2],1<=((0|ar[d+60>>2])-f|0)){l=0|cr[f>>0];break}for(ar[B>>2]=0,ar[B+4>>2]=0,f=(ar[B+8>>2]=0)|hu(48),ar[B>>2]=f,ar[B+8>>2]=-2147483600,u=31877,b=(l=f)+(ar[B+4>>2]=37)|0;tr[l>>0]=0|tr[u>>0],u=u+1|0,(0|(l=l+1|0))<(0|b););if(tr[f+37>>0]=0,oo(A,2,130,B),0<=(0|tr[B+11>>0]))break e;vu(0|ar[B>>2]);break e}l=8}while(0);Bo(0|ar[b>>2],3,h,k,l);do{if(u){if(f=I=0|ar[d+56>>2],3!=((0|ar[d+60>>2])-I|0))break;if((0|cr[f+1>>0])==(0|l)&&(0|cr[f+2>>0])==(0|l))break;for(ar[E>>2]=0,ar[E+4>>2]=0,f=(ar[E+8>>2]=0)|hu(64),ar[E>>2]=f,ar[E+8>>2]=-2147483584,u=31915,b=(l=f)+(ar[E+4>>2]=51)|0;tr[l>>0]=0|tr[u>>0],u=u+1|0,(0|(l=l+1|0))<(0|b););if(tr[f+51>>0]=0,oo(A,2,130,E),0<=(0|tr[E+11>>0]))break e;vu(0|ar[E>>2]);break e}}while(0);Bo(0|ar[b>>2],4,h,k,l),Bo(0|ar[b>>2],5,h,k,l),Z=e+32|0,p=4+n|0,B=(y=J+8|0)+11|0,E=A+8|0,X=Q+8|0,W=Q+4|0,I=Q+11|0;r:do{if(G<<16>>16){g=f=m=0;i:for(;;){for(v=w=r=0;!((0|Y)<=(0|r));){if(d=0|ar[(0|ar[c>>2])+(f<<2)>>2],!(u=0|ar[Z>>2]))break i;l=Z;f:for(;;){for(b=u;!((0|ar[b+16>>2])>>>0>=d>>>0);){if(!(u=0|ar[b+4>>2]))break f;b=u}if(!(u=0|ar[b>>2])){l=b;break}l=b}if((0|l)==(0|Z))break i;if(d>>>0<(0|ar[l+16>>2])>>>0)break i;u=0|ar[l+20>>2],(h=0==(0|(k=0|ar[l+24>>2])))||bu(k),s=0|ar[u+24>>2],b=0|ar[u+28>>2],ar[n>>2]=ar[i>>2],l=0|ar[C>>2],(ar[p>>2]=l)?(bu(l),Gl(J,e,d,n,v,g),du(l)):Gl(J,e,d,n,v,g);do{if(0|ar[J>>2])u=0|ar[(l=J)+4>>2],ar[(b=A)>>2]=ar[l>>2],ar[b+4>>2]=u,ar[E>>2]=ar[y>>2],ar[E+4>>2]=ar[y+4>>2],ar[E+8>>2]=ar[y+8>>2],ar[y>>2]=0,ar[y+4>>2]=0,ar[y+8>>2]=0,b=w,u=v,l=1;else{if(l=s+v|0,f=f+1|0,0<=(0|tr[B>>0])){u=l,l=0;break}vu(0|ar[y>>2]),u=l,l=0}}while(0);if(h||du(k),l)break e;r=r+1|0,w=b,v=u}if((0|_)<=(0|(m=m+1|0)))break r;g=w+g|0}for(ar[Q>>2]=0,ar[Q+4>>2]=0,f=(ar[Q+8>>2]=0)|hu(48),ar[Q>>2]=f,ar[X>>2]=-2147483600,u=31967,b=(l=f)+(ar[W>>2]=32)|0;tr[l>>0]=0|tr[u>>0],u=u+1|0,(0|(l=l+1|0))<(0|b););if(tr[f+32>>0]=0,oo(A,2,119,Q),0<=(0|tr[I>>0]))break e;vu(0|ar[Q>>2]);break e}}while(0);J=0|ar[(Q=56592)+4>>2],ar[A>>2]=ar[Q>>2],ar[A+4>>2]=J,yu(E,56600)}else D=51}while(0);51==(0|D)&&(l=p+64|0,ar[(b=p+8|0)>>2]=4524,u=p+12|0,ar[p>>2]=188,ar[l>>2]=208,Jf(p+64|(ar[p+4>>2]=0),u),ar[p+136>>2]=0,ar[p+140>>2]=-1,ar[p>>2]=4504,ar[l>>2]=4544,ar[b>>2]=4524,Sf(u),ar[u>>2]=4340,ar[(b=p+44|0)>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,ar[b+12>>2]=0,ar[p+60>>2]=24,ar[J>>2]=0,ar[J+4>>2]=0,ar[J+8>>2]=0,Xe(u,J),(0|tr[J+11>>0])<0&&vu(0|ar[J>>2]),J=0|We(0|Lf(0|We(0|Lf(0|We(f=p+8|0,30366,11),h),30170,1),k),30378,32),J=0|We(0|Lf(J,0|ar[s>>2]),30170,1),We(0|Lf(J,0|ar[e+76>>2]),30086,1),Ie(y,u),oo(A,6,1e3,y),(0|tr[y+11>>0])<0&&vu(0|ar[y>>2]),ar[p>>2]=4504,ar[l>>2]=4544,ar[f>>2]=4524,ar[u>>2]=4340,(0|tr[b+11>>0])<0&&vu(0|ar[b>>2]),kf(u),bf(l)),0|V&&du(V),0|(f=0|ar[4+t>>2])&&du(f),R||du(F),0|(f=0|ar[N>>2])&&du(f)}else l=Z+64|0,ar[(b=Z+8|0)>>2]=4524,u=Z+12|0,ar[Z>>2]=188,ar[l>>2]=208,Jf(Z+64|(ar[Z+4>>2]=0),u),ar[Z+136>>2]=0,ar[Z+140>>2]=-1,ar[Z>>2]=4504,ar[l>>2]=4544,ar[b>>2]=4524,Sf(u),ar[u>>2]=4340,ar[(b=Z+44|0)>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,ar[b+12>>2]=0,ar[Z+60>>2]=24,ar[J>>2]=0,ar[J+4>>2]=0,ar[J+8>>2]=0,Xe(u,J),(0|tr[J+11>>0])<0&&vu(0|ar[J>>2]),J=0|We(0|Pf(0|We(0|xf(0|We(0|xf(0|We(f=Z+8|0,31730,17),G),30170,1),s),31748,1),d),31750,17),We(0|Lf(J,(0|ar[M>>2])-(0|ar[c>>2])>>2),31768,20),Ie(k,u),oo(A,2,119,k),(0|tr[k+11>>0])<0&&vu(0|ar[k>>2]),ar[Z>>2]=4504,ar[l>>2]=4544,ar[f>>2]=4524,ar[u>>2]=4340,(0|tr[b+11>>0])<0&&vu(0|ar[b>>2]),kf(u),bf(l)}while(0);0|(c=0|ar[c>>2])&&((0|(f=0|ar[M>>2]))!=(0|c)&&(ar[M>>2]=f+(~((f+-4-c|0)>>>2)<<2)),vu(c))}else{for(ar[s>>2]=0,ar[s+4>>2]=0,c=(ar[s+8>>2]=0)|hu(64),ar[s>>2]=c,ar[s+8>>2]=-2147483584,u=31629,b=(l=c)+(ar[s+4>>2]=48)|0;tr[l>>0]=0|tr[u>>0],u=u+1|0,(0|(l=l+1|0))<(0|b););tr[c+48>>0]=0,oo(A,2,113,s),(0|tr[s+11>>0])<0&&vu(0|ar[s>>2])}U||du(T)}ur=(0<=(0|tr[(c=o+8|0)+11>>0])||vu(0|ar[c>>2]),a)}function Il(A,e,r,i){A|=0,r|=0,i|=0;var f,n,t,o,a=0,c=0,l=0,u=0;if(ur=(o=ur)+64|0,c=o+32|0,n=o+44|0,l=o+20|0,f=o,u=0|ar[(e|=0)+60>>2],a=0|ar[u+76>>2],(t=0==(0|(u=0|ar[u+80>>2])))||bu(u),a){if(fo(n,a,r,1684630887),c=4+n|0,a=0|ar[n>>2],4!=((0|ar[c>>2])-a|0)){for(ar[l>>2]=0,ar[l+4>>2]=0,a=(ar[l+8>>2]=0)|hu(48),ar[l>>2]=a,ar[l+8>>2]=-2147483600,e=31581,i=(r=a)+(ar[l+4>>2]=47)|0;tr[r>>0]=0|tr[e>>0],e=e+1|0,(0|(r=r+1|0))<(0|i););tr[a+47>>0]=0,oo(A,2,119,l),(0|tr[l+11>>0])<0&&vu(0|ar[l>>2])}else Xl(f,e,0|ar[a>>2],i,1,0),i=0|ar[(e=f)+4>>2],ar[(l=A)>>2]=ar[e>>2],ar[l+4>>2]=i,l=f+8|0,ar[(A=A+8|0)>>2]=ar[l>>2],ar[A+4>>2]=ar[l+4>>2],ar[A+8>>2]=ar[l+8>>2];0|(a=0|ar[n>>2])&&((0|(r=0|ar[c>>2]))!=(0|a)&&(ar[c>>2]=r+(~((r+-4-a|0)>>>2)<<2)),vu(a))}else{for(ar[c>>2]=0,ar[c+4>>2]=0,a=(ar[c+8>>2]=0)|hu(64),ar[c>>2]=a,ar[c+8>>2]=-2147483584,e=31532,i=(r=a)+(ar[c+4>>2]=48)|0;tr[r>>0]=0|tr[e>>0],e=e+1|0,(0|(r=r+1|0))<(0|i););tr[a+48>>0]=0,oo(A,2,113,c),(0|tr[c+11>>0])<0&&vu(0|ar[c>>2])}ur=(t||du(u),o)}function Cl(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0;if(ur=(l=ur)+288|0,X=l+168|0,s=l+264|0,a=l+276|0,w=l+232|0,o=l+144|0,d=l+220|0,k=(W=l)+208|0,n=l+200|0,t=l+188|0,V=0|ar[(e|=0)+60>>2],u=0|ar[V+76>>2],(c=0==(0|(V=0|ar[V+80>>2])))||bu(V),u){fo(a,u,r,1684630887),ar[(I=w+20|0)>>2]=0,ar[(C=w+24|0)>>2]=0,function(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;for(ur=(n=ur)+208|0,u=n+192|0,t=(f=n)+32|0,b=n+48|0,s=n+20|0,o=0|hu(32),ar[t>>2]=o,ar[t+8>>2]=-2147483616,c=30088,l=(a=o)+(ar[t+4>>2]=29)|0;tr[a>>0]=0|tr[c>>0],c=c+1|0,(0|(a=a+1|0))<(0|l););tr[o+29>>0]=0,oo(f,2,118,t),(0|tr[t+11>>0])<0&&vu(0|ar[t>>2]),l=0|ar[i>>2],o=(0|ar[i+4>>2])-l|0;do{if(o>>>0<10)w=0|ar[(i=f)+4>>2],ar[(r=A)>>2]=ar[i>>2],ar[r+4>>2]=w,r=A+8|0,A=f+8|0,ar[r>>2]=ar[A>>2],ar[r+4>>2]=ar[A+4>>2],ar[r+8>>2]=ar[A+8>>2],ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0;else{if(w=0|tr[l>>0],tr[e>>0]=w,t=0|tr[l+1>>0],tr[e+1>>0]=t,w<<24>>24){o=b+64|0,ar[(c=b+8|0)>>2]=4524,a=b+12|0,ar[b>>2]=188,ar[o>>2]=208,Jf(b+64|(ar[b+4>>2]=0),a),ar[b+136>>2]=0,ar[b+140>>2]=-1,ar[b>>2]=4504,ar[o>>2]=4544,ar[c>>2]=4524,Sf(a),ar[a>>2]=4340,ar[(c=b+44|0)>>2]=0,ar[c+4>>2]=0,ar[c+8>>2]=0,ar[c+12>>2]=0,ar[b+60>>2]=24,ar[u>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,Xe(a,u),(0|tr[u+11>>0])<0&&vu(0|ar[u>>2]),r=0|We(t=b+8|0,30118,27),We(0|Pf(r,0|cr[e>>0]),30146,23),Ie(s,a),oo(A,4,3002,s),(0|tr[s+11>>0])<0&&vu(0|ar[s>>2]),ar[b>>2]=4504,ar[o>>2]=4544,ar[t>>2]=4524,ar[a>>2]=4340,(0|tr[c+11>>0])<0&&vu(0|ar[c>>2]),kf(a),bf(o);break}if(((10+((u=(b=t<<1&2)+2<<24>>24)<<1&255)&255)+(0|br(r<<1,w=255&u))|0)>>>0>o>>>0){w=0|ar[(i=f)+4>>2],ar[(r=A)>>2]=ar[i>>2],ar[r+4>>2]=w,r=A+8|0,A=f+8|0,ar[r>>2]=ar[A>>2],ar[r+4>>2]=ar[A+4>>2],ar[r+8>>2]=ar[A+8>>2],ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0;break}for(or[e+2>>1]=cr[l+3>>0]|cr[l+2>>0]<<8,or[e+4>>1]=cr[l+5>>0]|cr[l+4>>0]<<8,or[e+6>>1]=cr[l+7>>0]|cr[l+6>>0]<<8,or[e+8>>1]=cr[l+9>>0]|cr[l+8>>0]<<8,a=255&b,t=0,o=w,c=10;o=o+-1|0,t=cr[l+c>>0]|t<<8,o;)c=c+1|0;for(k=12|a,ar[e+12>>2]=t,o=k+a|0,c=0,t=w,a=k;t=t+-1|0,c=cr[l+a>>0]|c<<8,t;)a=a+1|0;if(l=o+2|0,ar[e+16>>2]=c,k=e+20|0,r>>>0<=(o=(c=0|ar[(t=e+24|0)>>2])-(a=0|ar[k>>2])>>3)>>>0?(r>>>0<o>>>0&&(0|c)!=(0|(d=a+(r<<3)|0))&&(ar[t>>2]=c+(~((c+-8-d|0)>>>3)<<3)),0|r&&(h=25)):(wl(k,r-o|0),h=25),25==(0|h))for(d=~(e=128<<(u<<3&255)-8),s=4+(b<<1&255)&255,b=0|ar[i>>2],u=0;;){for(a=0,t=w,o=l;t=t+-1|0,a=cr[b+o>>0]|a<<8,t;)o=o+1|0;for(c=0|ar[k>>2],ar[c+(u<<3)>>2]=(a&d)-(0==(a&e|0)?0:e),a=(o=w)+l|(t=0);o=o+-1|0,t=cr[b+a>>0]|t<<8,o;)a=a+1|0;if(ar[c+(u<<3)+4>>2]=(t&d)-(0==(t&e|0)?0:e),(0|(u=u+1|0))==(0|r))break;l=s+l|0}w=0|ar[(i=56592)+4>>2],ar[(r=A)>>2]=ar[i>>2],ar[r+4>>2]=w,yu(A+8|0,56600)}}while(0);ur=(0<=(0|tr[(t=f+8|0)+11>>0])||vu(0|ar[t>>2]),n)}(o,w,((ar[w+28>>2]=0)|ar[(G=4+a|0)>>2])-(0|ar[a>>2])>>2,f);A:do{if(0|ar[o>>2])W=0|ar[(e=o)+4>>2],ar[(F=A)>>2]=ar[e>>2],ar[F+4>>2]=W,F=8+o|0,ar[(A=A+8|0)>>2]=ar[F>>2],ar[A+4>>2]=ar[F+4>>2],ar[A+8>>2]=ar[F+8>>2],ar[F>>2]=0,ar[F+4>>2]=0,ar[F+8>>2]=0;else{if(y=w+20|0,((0|ar[G>>2])-(0|ar[a>>2])>>2|0)!=((0|ar[C>>2])-(0|ar[y>>2])>>3|0)){for(ar[d>>2]=0,ar[d+4>>2]=0,u=(ar[d+8>>2]=0)|hu(80),ar[d>>2]=u,ar[d+8>>2]=-2147483568,f=31462,b=(r=u)+(ar[d+4>>2]=69)|0;tr[r>>0]=0|tr[f>>0],f=f+1|0,(0|(r=r+1|0))<(0|b););if(tr[u+69>>0]=0,oo(A,2,121,d),0<=(0|tr[d+11>>0]))break;vu(0|ar[d>>2]);break}if(d=0|ar[w+12>>2],h=0|ar[w+16>>2],d>>>0<(0|ar[(s=e+72|0)>>2])>>>0&&h>>>0<(0|ar[e+76>>2])>>>0){if(f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(u=f+12|0)>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u+12>>2]=0,ar[u+16>>2]=0,ar[f+32>>2]=30025,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,s=f+52|0,ar[(b=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[s>>2]=0,ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s+12>>2]=0,ar[f+68>>2]=b,b=u,p=(s=f)+16|0,bu(f),su(f),r=0|ar[p>>2],ar[u>>2]=b,ar[p>>2]=s,0|r&&ku(r),du(f),ar[i>>2]=b,r=0|ar[(p=i+4|0)>>2],ar[p>>2]=s,r?(du(r),u=0|ar[(p=i)>>2]):p=i,yo(u,d,h,1,3),Bo(0|ar[p>>2],3,d,h,8),Bo(0|ar[p>>2],4,d,h,8),Bo(0|ar[p>>2],5,d,h,8),ll(X,0|ar[p>>2],0|or[w+2>>1],0|or[w+4>>1],0|or[w+6>>1],0|or[w+8>>1]),u=0|ar[(Z=X)+4>>2],ar[(g=o)>>2]=ar[Z>>2],ar[g+4>>2]=u,u=X+8|0,(0|tr[(Z=(g=8+o|0)+11|0)>>0])<0?(tr[ar[g>>2]>>0]=0,ar[12+o>>2]=0):(tr[g>>0]=0,tr[Z>>0]=0),Cu(g,0),ar[g>>2]=ar[u>>2],ar[g+4>>2]=ar[u+4>>2],ar[g+8>>2]=ar[u+8>>2],0|ar[o>>2]){e=0|ar[(X=o)+4>>2],ar[(W=A)>>2]=ar[X>>2],ar[W+4>>2]=e,ar[(A=A+8|0)>>2]=ar[g>>2],ar[A+4>>2]=ar[g+4>>2],ar[A+8>>2]=ar[g+8>>2],ar[g>>2]=0,ar[g+4>>2]=0,ar[g+8>>2]=0;break}u=0|ar[a>>2];e:do{if((0|ar[G>>2])==(0|u))E=(B=A)+8|0;else{b=X+4|0,d=12+o|0,k=4+n|0,i=W+4|0,h=11+t|0,w=s=W+8|0,v=A+8|0,m=4+o|0,f=0;r:for(;;){ar[X>>2]=0,Xl(W,e,(ar[b>>2]=0)|ar[u+(f<<2)>>2],X,1,0),u=0|ar[(F=W)+4>>2],ar[(r=o)>>2]=ar[F>>2],ar[r+4>>2]=u,(0|tr[Z>>0])<0?(tr[ar[g>>2]>>0]=0,ar[d>>2]=0):(tr[g>>0]=0,tr[Z>>0]=0),Cu(g,0),ar[g>>2]=ar[s>>2],ar[g+4>>2]=ar[s+4>>2],ar[g+8>>2]=ar[s+8>>2];i:do{if((0|ar[o>>2])==(0|ar[14148])){ar[n>>2]=0,me(W,X,1,3,n,ar[k>>2]=0),u=0|ar[W>>2],F=0|ar[i>>2],ar[W>>2]=0,ar[i>>2]=0,ar[X>>2]=u,u=0|ar[b>>2],ar[b>>2]=F;do{if(0|u){if(du(u),!(u=0|ar[i>>2]))break;du(u)}}while(0);if(0|(u=0|ar[k>>2])&&du(u),!(0|ar[X>>2])){if(ar[t>>2]=0,ar[4+t>>2]=0,ar[8+t>>2]=0,oo(A,4,3003,t),0<=(0|tr[h>>0])){u=1;break}vu(0|ar[t>>2]),u=1;break}if(u=F=0|ar[y>>2],(0|ar[C>>2])-F>>3>>>0<=f>>>0)break r;ul(W,0|ar[p>>2],X,0|ar[u+(f<<3)>>2],0|ar[u+(f<<3)+4>>2]),r=0|ar[(u=W)+4>>2],ar[(F=o)>>2]=ar[u>>2],ar[F+4>>2]=r,(0|tr[Z>>0])<0?(tr[ar[g>>2]>>0]=0,ar[d>>2]=0):(tr[g>>0]=0,tr[Z>>0]=0),Cu(g,0),ar[g>>2]=ar[w>>2],ar[g+4>>2]=ar[w+4>>2],ar[g+8>>2]=ar[w+8>>2];f:do{switch(0|ar[o>>2]){case 0:u=0;break i;case 2:if(122!=(0|ar[m>>2]))break f;F=0|ar[(r=56592)+4>>2],ar[(u=o)>>2]=ar[r>>2],ar[u+4>>2]=F,Eu(g,56600),u=0;break i}}while(0);F=0|ar[(r=o)+4>>2],ar[(u=A)>>2]=ar[r>>2],ar[u+4>>2]=F,ar[v>>2]=ar[g>>2],ar[v+4>>2]=ar[g+4>>2],ar[v+8>>2]=ar[g+8>>2],ar[g>>2]=0,ar[g+4>>2]=0,ar[g+8>>2]=0,u=1}else F=0|ar[(r=o)+4>>2],ar[(u=A)>>2]=ar[r>>2],ar[u+4>>2]=F,ar[v>>2]=ar[g>>2],ar[v+4>>2]=ar[g+4>>2],ar[v+8>>2]=ar[g+8>>2],ar[g>>2]=0,ar[g+4>>2]=0,ar[g+8>>2]=0,u=1}while(0);if(0|(r=0|ar[b>>2])&&du(r),f=f+1|0,0|u)break A;if(u=0|ar[a>>2],f>>>0>=(0|ar[G>>2])-u>>2>>>0){B=A,E=v;break e}}sr(30172,30203,382,30219)}}while(0);A=0|ar[(W=o)+4>>2],ar[(F=B)>>2]=ar[W>>2],ar[F+4>>2]=A,ar[E>>2]=ar[g>>2],ar[E+4>>2]=ar[g+4>>2],ar[E+8>>2]=ar[g+8>>2],ar[g>>2]=0,ar[g+4>>2]=0,ar[g+8>>2]=0;break}r=W+64|0,ar[(b=W+8|0)>>2]=4524,f=W+12|0,ar[W>>2]=188,ar[r>>2]=208,Jf(W+64|(ar[W+4>>2]=0),f),ar[W+136>>2]=0,ar[W+140>>2]=-1,ar[W>>2]=4504,ar[r>>2]=4544,ar[b>>2]=4524,Sf(f),ar[f>>2]=4340,ar[(b=W+44|0)>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,ar[b+12>>2]=0,ar[W+60>>2]=24,ar[X>>2]=0,ar[X+4>>2]=0,ar[X+8>>2]=0,Xe(f,X),(0|tr[X+11>>0])<0&&vu(0|ar[X>>2]),F=0|We(0|Lf(0|We(0|Lf(0|We(u=W+8|0,30366,11),d),30170,1),h),30378,32),F=0|We(0|Lf(F,0|ar[s>>2]),30170,1),We(0|Lf(F,0|ar[e+76>>2]),30086,1),Ie(k,f),oo(A,6,1e3,k),(0|tr[k+11>>0])<0&&vu(0|ar[k>>2]),ar[W>>2]=4504,ar[r>>2]=4544,ar[u>>2]=4524,ar[f>>2]=4340,(0|tr[b+11>>0])<0&&vu(0|ar[b>>2]),kf(f),bf(r)}}while(0);(0|tr[(u=8+o|0)+11>>0])<0&&vu(0|ar[u>>2]),0|(u=0|ar[I>>2])&&((0|(r=0|ar[C>>2]))!=(0|u)&&(ar[C>>2]=r+(~((r+-8-u|0)>>>3)<<3)),vu(u)),0|(u=0|ar[a>>2])&&((0|(r=0|ar[G>>2]))!=(0|u)&&(ar[G>>2]=r+(~((r+-4-u|0)>>>2)<<2)),vu(u))}else{for(ar[s>>2]=0,ar[s+4>>2]=0,u=(ar[s+8>>2]=0)|hu(64),ar[s>>2]=u,ar[s+8>>2]=-2147483584,f=31413,b=(r=u)+(ar[s+4>>2]=48)|0;tr[r>>0]=0|tr[f>>0],f=f+1|0,(0|(r=r+1|0))<(0|b););tr[u+48>>0]=0,oo(A,2,113,s),(0|tr[s+11>>0])<0&&vu(0|ar[s>>2])}ur=(c||du(V),l)}function Gl(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;if(ur=(l=ur)+80|0,Z=(c=l)+52|0,k=l+36|0,t=l+48|0,o=l+32|0,h=l+20|0,ar[(g=l+64|0)>>2]=0,Xl(c,e,r,g,(ar[(a=g+4|0)>>2]=0)|ar[32+(0|ar[i>>2])>>2],0),(0|ar[c>>2])==(0|ar[14148])){e=0|ar[i>>2],s=0|ar[e+24>>2],d=0|ar[e+28>>2],r=0|ar[g>>2],u=0|ar[r+24>>2],r=0|ar[r+28>>2],(0|u)<=-1&&sr(32e3,30203,1540,32015),(0|r)<=-1&&sr(32043,30203,1541,32015),m=0|ar[e+36>>2],Io(Z,e),e=0|ar[g>>2];A:do{if((0|m)!=(0|ar[e+36>>2])){for(ar[k>>2]=0,ar[k+4>>2]=0,e=(ar[k+8>>2]=0)|hu(64),ar[k>>2]=e,ar[k+8>>2]=-2147483584,u=32059,b=(r=e)+(ar[k+4>>2]=58)|0;tr[r>>0]=0|tr[u>>0],u=u+1|0,(0|(r=r+1|0))<(0|b););tr[e+58>>0]=0,oo(A,2,127,k),(0|tr[k+11>>0])<0&&vu(0|ar[k>>2])}else{b=0|ar[Z>>2],m=Z+4|0;e:do{if((0|b)!=(0|m)){if(k=(0|(k=s-f|0))<(0|u)?k:u,w=0<(0|(v=(0|(v=d-n|0))<(0|r)?v:r)),!((0|f)<(0|s)&(0|n)<(0|d))){Fo(e,g=0|ar[b+16>>2],t),Fo(0|ar[i>>2],g,o),ar[h>>2]=0,ar[h+4>>2]=0,ar[h+8>>2]=0,oo(A,2,118,h),(0|tr[h+11>>0])<0&&vu(0|ar[h>>2]);break A}for(;;){if(u=0|Fo(e,s=0|ar[b+16>>2],t),e=0|Fo(0|ar[i>>2],s,o),s=0|br((255&(0|Go(0|ar[g>>2],3)))>>>3&255,k),r=0|Go(0|ar[g>>2],3),w)for(r=e+(0|br((255&r)>>>3&255,f))|0,e=0;hb(0|(h=r+(0|br(0|ar[o>>2],e+n|0))|0),u+(0|br(0|ar[t>>2],e))|0,0|s),(0|(e=e+1|0))<(0|v););if(e=0|ar[b+4>>2])for(;r=0|ar[e>>2];)e=r;else if(e=0|ar[(r=b+8|0)>>2],(0|ar[e>>2])!=(0|b))for(;h=0|ar[r>>2],e=0|ar[(r=h+8|0)>>2],(0|ar[e>>2])!=(0|h););if((0|e)==(0|m))break e;b=e,e=0|ar[g>>2]}}}while(0);n=0|ar[(f=56592)+4>>2],ar[(g=A)>>2]=ar[f>>2],ar[g+4>>2]=n,yu(A+8|0,56600)}}while(0);Co(Z,0|ar[Z+4>>2]),(0|tr[c+8+11>>0])<0&&vu(0|ar[c+8>>2])}else g=0|ar[(n=c)+4>>2],ar[(Z=A)>>2]=ar[n>>2],ar[Z+4>>2]=g,Z=c+8|0,ar[(A=A+8|0)>>2]=ar[Z>>2],ar[A+4>>2]=ar[Z+4>>2],ar[A+8>>2]=ar[Z+8>>2],ar[Z>>2]=0,ar[Z+4>>2]=0,ar[Z+8>>2]=0;ur=((e=0|ar[a>>2])&&du(e),l)}function Vl(A,e,r){A|=0,r|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0;if(ur=(f=ur)+80|0,i=f+76|0,b=f+72|0,d=(s=f)+64|0,YA(n=f+32|0,u=0|ar[(e|=0)>>2],(0|ar[(t=e+4|0)>>2])-u|0),(0|(u=0|QA(n,32)))<=(0|(n=((0|ar[n+24>>2])/-8|0)+((0|ar[n+4>>2])-(0|ar[n+8>>2]))|0)))return b=0|ar[(b=r=56592)>>2],r=0|ar[(r=r+4|0)>>2],ar[(s=d=A)>>2]=b,ar[(d=d+4|0)>>2]=r,yu(A=A+8|0,56600),void(ur=f);if(YA(s,(u=0|ar[e>>2])+n|0,(0|ar[t>>2])-(u+n)|0),QA(s,32),u=(0|QA(s,8))>>>1,function(A,e){e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0;if((0|(i=0|ar[(r=(A|=0)+24|0)>>2]))<(0|e)){i=64-i|0,n=A+8|0;A:do{if(7<(0|i)){t=A+16|0,f=0|ar[n>>2];do{if(!f)break A;c=0|ar[A>>2],ar[A>>2]=c+1,c=0|cr[c>>0],f=f+-1|0,ar[n>>2]=f,c=0|db(0|c,0,0|(i=i+-8|0)),a=ar[(l=t)+4>>2]|D,ar[(o=t)>>2]=ar[l>>2]|c,ar[o+4>>2]=a}while(7<(0|i))}}while(0);i=64-i|0,ar[r>>2]=i}c=0|db(0|ar[(c=l=A+16|0)>>2],0|ar[c+4>>2],0|e),ar[l>>2]=c,ar[l+4>>2]=D,ar[r>>2]=i-e}(s,8),((255&u)-39|0)>>>0<2&&(u=0|QA(s,8),QA(s,8),177==(255&u|0))){for(u=0|hu(80),ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u>>2]=6448,t=(n=e=u+16|0)+64|0;(0|(n=n+4|(ar[n>>2]=0)))<(0|t););ar[e>>2]=6476,l=e,tr[(c=u)+24>>0]=1,ar[(e=u+68|0)>>2]=0,ar[u+72>>2]=0,k=255&((ar[u+76>>2]=0)|QA(s,1)),tr[(n=u+25|0)>>0]=k,k=255&(0|QA(s,1)),tr[(t=u+26|0)>>0]=k,k=255&(0|QA(s,1)),tr[(o=u+27|0)>>0]=k,k=255&(0|QA(s,1)),tr[(a=u+28|0)>>0]=k,DA(s,i),ar[u+64>>2]=ar[i>>2],(0!=(0|tr[o>>0])||0|tr[a>>0])&&(DA(s,b),ar[e>>2]=ar[b>>2]),0|tr[n>>0]&&(h=+Fl(s),Q[u+32>>3]=h),0|tr[t>>0]&&(h=+Fl(s),Q[u+40>>3]=h),0|tr[o>>0]&&(h=+Fl(s),Q[u+48>>3]=h),0|tr[a>>0]&&(h=+Fl(s),Q[u+56>>3]=h),ar[d>>2]=l,ar[(t=d+4|0)>>2]=c,(0|(n=0|ar[(e=r+4|0)>>2]))==(0|ar[r+8>>2])?function(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;f=0|ar[(u=4+(A|=0)|0)>>2],n=0|ar[A>>2],536870911<(t=1+(r=f-(c=n)>>3)|0)>>>0&&zl();l=(0|ar[(i=A+8|0)>>2])-n|0,o=l>>2,o=l>>3>>>0<268435455?o>>>0<t>>>0?t:o:536870911;do{if(o){if(!(536870911<o>>>0)){a=0|hu(o<<3);break}Zu(u=0|X(8),44519),ar[u>>2]=17660,I(0|u,4016,428)}else a=0}while(0);l=a+(o<<3)|0,ar[(t=n=a+(r<<3)|0)>>2]=ar[e>>2],o=0|ar[e+4>>2],o=(ar[a+(r<<3)+4>>2]=o)?(bu(o),f=0|ar[u>>2],0|ar[A>>2]):c;if(a=n+8|0,(0|f)!=(0|o)){for(;f=(c=f)+-8|0,ar[n+-8>>2]=ar[f>>2],c=c+-4|0,ar[n+-4>>2]=ar[c>>2],ar[f>>2]=0,ar[c>>2]=0,t=n=t+-8|0,(0|f)!=(0|o););o=0|ar[A>>2],f=0|ar[u>>2]}if(ar[A>>2]=t,ar[u>>2]=a,ar[i>>2]=l,(0|f)!=(0|(t=o)))for(;n=0|ar[f+-4>>2],f=f+-8|0,0|n&&du(n),(0|f)!=(0|t););if(!o)return;vu(o)}(r,d):(ar[n>>2]=l,bu(ar[n+4>>2]=u),ar[e>>2]=8+(0|ar[e>>2])),0|(e=0|ar[t>>2])&&du(e)}s=0|ar[(s=d=56592)>>2],d=0|ar[(d=d+4|0)>>2],ar[(r=k=A)>>2]=s,ar[(k=k+4|0)>>2]=d,yu(k=A+8|0,56600),ur=f}function Fl(A){var e,r,i,f=0,n=0,t=0;return e=0|QA(A|=0,1),r=0|QA(A,7),i=0|QA(A,5),A=0|QA(A,f=1+i|0),0<(0|r)?(t=+Af(1,r-31|0),n=-(t*=(0|A)/Af(1,f)+1),+(n=(f=0==(0|e))?t:n)):(t=-(n=(0|A)*Af(1,-31-i|0)),+(t=(f=0==(0|e))?n:t))}function Rl(A){A|=0;var e=0,r=0,i=0,f=0,n=0,t=0;if(57284==(0|(r=0|ar[14320])))return(A=0)|A;n=e=0;do{if(t=0|ar[r+16>>2],e=(f=(0|n)<(0|(i=0|jb[127&ar[t+16>>2]](A))))?t:e,n=f?i:n,i=0|ar[r+4>>2])for(r=i;i=0|ar[r>>2];)r=i;else if(f=0|ar[(i=r+8|0)>>2],(0|ar[f>>2])==(0|r))r=f;else for(;t=0|ar[i>>2],r=0|ar[(i=t+8|0)>>2],(0|ar[r>>2])!=(0|t););}while(57284!=(0|r));return 0|e}function Nl(A,e){e|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;o=0|ar[(b=(A|=0)+4|0)>>2],r=f=0|ar[A>>2],119304647<(n=(l=((t=o)-f|0)/36|0)+1|0)>>>0&&zl(),a=(u=((0|ar[(i=A+8|0)>>2])-f|0)/36|0)<<1,a=u>>>0<59652323?a>>>0<n>>>0?n:a:119304647;do{if(a){if(!(119304647<a>>>0)){c=0|hu(36*a|0);break}Zu(b=0|X(8),44519),ar[b>>2]=17660,I(0|b,4016,428)}else c=0}while(0);if(u=c+(36*a|0)|0,ar[(f=n=c+(36*l|0)|0)>>2]=ar[e>>2],ar[n+4>>2]=ar[e+4>>2],ar[n+8>>2]=ar[e+8>>2],ar[n+12>>2]=ar[e+12>>2],s=e+16|0,ar[c+(36*l|0)+16>>2]=ar[s>>2],a=e+20|0,ar[c+(36*l|0)+20>>2]=ar[a>>2],ar[s>>2]=0,a=c+(36*l|(ar[a>>2]=0))+24|0,l=e+24|0,ar[a>>2]=ar[l>>2],ar[a+4>>2]=ar[l+4>>2],ar[a+8>>2]=ar[l+8>>2],a=n+36|0,(0|t)!=(0|r)){for(;t=(l=t)+-36|0,ar[(e=n+-36|0)>>2]=ar[t>>2],ar[e+4>>2]=ar[t+4>>2],ar[e+8>>2]=ar[t+8>>2],ar[e+12>>2]=ar[t+12>>2],e=l+-20|0,ar[n+-20>>2]=ar[e>>2],s=l+-16|0,ar[n+-16>>2]=ar[s>>2],ar[e>>2]=0,l=l+-12|(ar[s>>2]=0),ar[(s=n+-12|0)>>2]=ar[l>>2],ar[s+4>>2]=ar[l+4>>2],ar[s+8>>2]=ar[l+8>>2],f=n=f+-36|0,(0|t)!=(0|r););o=0|ar[A>>2]}if(ar[A>>2]=f,f=0|ar[b>>2],ar[b>>2]=a,ar[i>>2]=u,(0|f)!=(0|(t=o)))for(;n=0|ar[f+-16>>2],f=f+-36|0,0|n&&du(n),(0|f)!=(0|t););o&&vu(o)}function _l(A,e,r,i,f,n,t,o,a,c){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0;var l,u,b;if(u=ur=(b=ur)+31&-32,ur=ur+16|0,l=12+u|0,A|=0){if(r=0|un(r,60968),e){for(fs[63&ar[44+(0|ar[r>>2])>>2]](l,r),A=0|ar[l>>2],tr[i>>0]=A,tr[i+1>>0]=A>>8,tr[i+2>>0]=A>>16,tr[i+3>>0]=A>>24,fs[63&ar[32+(0|ar[r>>2])>>2]](u,r),(0|tr[(A=a+8+3|0)>>0])<0?(i=0|ar[a>>2],ar[l>>2]=0,ln(i,l),ar[a+4>>2]=0):(ar[l>>2]=0,ln(a,l),tr[A>>0]=0),Mu(a,0),ar[a>>2]=ar[u>>2],ar[a+4>>2]=ar[4+u>>2],ar[a+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Qu(u)}else{for(fs[63&ar[40+(0|ar[r>>2])>>2]](l,r),A=0|ar[l>>2],tr[i>>0]=A,tr[i+1>>0]=A>>8,tr[i+2>>0]=A>>16,tr[i+3>>0]=A>>24,fs[63&ar[28+(0|ar[r>>2])>>2]](u,r),(0|tr[(A=a+8+3|0)>>0])<0?(i=0|ar[a>>2],ar[l>>2]=0,ln(i,l),ar[a+4>>2]=0):(ar[l>>2]=0,ln(a,l),tr[A>>0]=0),Mu(a,0),ar[a>>2]=ar[u>>2],ar[a+4>>2]=ar[4+u>>2],ar[a+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Qu(u)}for(A=0|jb[127&ar[12+(0|ar[r>>2])>>2]](r),ar[f>>2]=A,A=0|jb[127&ar[16+(0|ar[r>>2])>>2]](r),ar[n>>2]=A,fs[63&ar[20+(0|ar[r>>2])>>2]](u,r),A=((0|tr[(A=t+11|0)>>0])<0?(A=0|ar[t>>2],tr[l>>0]=0,Qf(A,l),ar[t+4>>2]=0):(tr[l>>0]=0,Qf(t,l),tr[A>>0]=0),t),Cu(t,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);for(Bu(u),fs[63&ar[24+(0|ar[r>>2])>>2]](u,r),(0|tr[(A=o+8+3|0)>>0])<0?(t=0|ar[o>>2],ar[l>>2]=0,ln(t,l),ar[o+4>>2]=0):(ar[l>>2]=0,ln(o,l),tr[A>>0]=0),Mu(o,0),ar[o>>2]=ar[u>>2],ar[o+4>>2]=ar[4+u>>2],ar[o+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Qu(u),A=0|jb[127&ar[36+(0|ar[r>>2])>>2]](r)}else{if(r=0|un(r,60960),e){for(fs[63&ar[44+(0|ar[r>>2])>>2]](l,r),A=0|ar[l>>2],tr[i>>0]=A,tr[i+1>>0]=A>>8,tr[i+2>>0]=A>>16,tr[i+3>>0]=A>>24,fs[63&ar[32+(0|ar[r>>2])>>2]](u,r),(0|tr[(A=a+8+3|0)>>0])<0?(i=0|ar[a>>2],ar[l>>2]=0,ln(i,l),ar[a+4>>2]=0):(ar[l>>2]=0,ln(a,l),tr[A>>0]=0),Mu(a,0),ar[a>>2]=ar[u>>2],ar[a+4>>2]=ar[4+u>>2],ar[a+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Qu(u)}else{for(fs[63&ar[40+(0|ar[r>>2])>>2]](l,r),A=0|ar[l>>2],tr[i>>0]=A,tr[i+1>>0]=A>>8,tr[i+2>>0]=A>>16,tr[i+3>>0]=A>>24,fs[63&ar[28+(0|ar[r>>2])>>2]](u,r),(0|tr[(A=a+8+3|0)>>0])<0?(i=0|ar[a>>2],ar[l>>2]=0,ln(i,l),ar[a+4>>2]=0):(ar[l>>2]=0,ln(a,l),tr[A>>0]=0),Mu(a,0),ar[a>>2]=ar[u>>2],ar[a+4>>2]=ar[4+u>>2],ar[a+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Qu(u)}for(A=0|jb[127&ar[12+(0|ar[r>>2])>>2]](r),ar[f>>2]=A,A=0|jb[127&ar[16+(0|ar[r>>2])>>2]](r),ar[n>>2]=A,fs[63&ar[20+(0|ar[r>>2])>>2]](u,r),A=((0|tr[(A=t+11|0)>>0])<0?(A=0|ar[t>>2],tr[l>>0]=0,Qf(A,l),ar[t+4>>2]=0):(tr[l>>0]=0,Qf(t,l),tr[A>>0]=0),t),Cu(t,0),ar[A>>2]=ar[u>>2],ar[A+4>>2]=ar[4+u>>2],ar[A+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);for(Bu(u),fs[63&ar[24+(0|ar[r>>2])>>2]](u,r),(0|tr[(A=o+8+3|0)>>0])<0?(t=0|ar[o>>2],ar[l>>2]=0,ln(t,l),ar[o+4>>2]=0):(ar[l>>2]=0,ln(o,l),tr[A>>0]=0),Mu(o,0),ar[o>>2]=ar[u>>2],ar[o+4>>2]=ar[4+u>>2],ar[o+8>>2]=ar[8+u>>2],A=0;3!=(0|A);)A=A+1|(ar[u+(A<<2)>>2]=0);Qu(u),A=0|jb[127&ar[36+(0|ar[r>>2])>>2]](r)}ar[c>>2]=A,ur=b}function Yl(A,e,r,i,f,n,t,o,a,c,l,u,b,s,d){A|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0,s|=0,d|=0;var k,h,w,v,m,g,Z,p,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0;for(ar[(r|=0)>>2]=A,k=s+8+3|0,p=s+4|0,h=b+8+3|0,w=b+4|0,v=0==(512&i|0),m=0<(0|d),g=u+11|0,Z=u+4|0,F=0;4!=(0|F);){A:do{switch(0|tr[a+F>>0]){case 0:ar[e>>2]=ar[r>>2];break;case 1:ar[e>>2]=ar[r>>2],G=0|Hb[31&ar[44+(0|ar[t>>2])>>2]](t,32),V=0|ar[r>>2],ar[r>>2]=V+4,ar[V>>2]=G;break;case 3:0|((y=(V=0|tr[k>>0])<<24>>24<0)?0|ar[p>>2]:255&V)&&(G=0|ar[(y?0|ar[s>>2]:s)>>2],V=0|ar[r>>2],ar[r>>2]=V+4,ar[V>>2]=G);break;case 2:if(!(v|0==(0|(W=(y=(W=0|tr[h>>0])<<24>>24<0)?0|ar[w>>2]:255&W)))){for(B=(X=y?0|ar[b>>2]:b)+(W<<2)|0,y=E=0|ar[r>>2];(0|X)!=(0|B);)ar[y>>2]=ar[X>>2],y=y+4|0,X=X+4|0;ar[r>>2]=E+(W<<2)}break;case 4:for(B=0|ar[r>>2],y=f=o?f+4|0:f;!(n>>>0<=y>>>0)&&0|xb[63&ar[12+(0|ar[t>>2])>>2]](t,2048,0|ar[y>>2]);)y=y+4|0;if(m){for(X=d;f>>>0<y>>>0&(E=0<(0|X));)C=0|ar[(V=y+-4|0)>>2],G=0|ar[r>>2],ar[r>>2]=G+4,ar[G>>2]=C,X=X+-1|0,y=V;for(I=E?0|Hb[31&ar[44+(0|ar[t>>2])>>2]](t,48):0,W=0|ar[r>>2];E=W+4|0,!((0|X)<=0);)ar[W>>2]=I,X=X+-1|0,W=E;ar[r>>2]=E,ar[W>>2]=c}if((0|y)==(0|f))G=0|Hb[31&ar[44+(0|ar[t>>2])>>2]](t,48),y=(V=0|ar[r>>2])+4|0,ar[r>>2]=y,ar[V>>2]=G;else{for(G=(V=0|tr[g>>0])<<24>>24<0,V&=255,I=E=(W=0|(G?0|ar[Z>>2]:V)?0|tr[(G?0|ar[u>>2]:u)>>0]:-1,0);(0|y)!=(0|f);)X=0|ar[r>>2],(0|I)==(0|W)&&(C=X+4|0,ar[r>>2]=C,ar[X>>2]=l,X=(I=(W=(E=E+1|0)>>>0<(G?0|ar[Z>>2]:V)>>>0?(W=0|tr[(G?0|ar[u>>2]:u)+E>>0])<<24>>24==127?-1:W<<24>>24:I,0),C)),R=0|ar[(C=y+-4|0)>>2],ar[r>>2]=X+4,ar[X>>2]=R,I=I+1|0,y=C;y=0|ar[r>>2]}if((0|B)!=(0|y))for(;;){if((y=y+-4|0)>>>0<=B>>>0)break A;R=0|ar[B>>2],ar[B>>2]=ar[y>>2],ar[y>>2]=R,B=B+4|0}}}while(0);F=F+1|0}if(1<(f=(y=(f=0|tr[k>>0])<<24>>24<0)?0|ar[p>>2]:255&f)>>>0){for(X=(y=y?0|ar[s>>2]:s)+4|0,E=(y=y+(f<<2)|0)-X|0,f=B=0|ar[r>>2];(0|X)!=(0|y);)ar[f>>2]=ar[X>>2],f=f+4|0,X=X+4|0;ar[r>>2]=B+(E>>>2<<2)}switch((176&i)<<24>>24){case 32:ar[e>>2]=ar[r>>2];break;case 16:break;default:ar[e>>2]=A}}function Ql(A){var e;ar[(A|=0)>>2]=16988,(0|(0|ar[(e=A+8|0)>>2]))!=(0|dn())&&of(0|ar[e>>2]),an()}function Dl(A){var e,r,i=0,f=0;for(ar[(A|=0)>>2]=17036,e=A+8|0,r=A+12|0,f=0;i=0|ar[e>>2],!(f>>>0>=(0|ar[r>>2])-i>>2>>>0);)0|(i=0|ar[i+(f<<2)>>2])&&lu(i),f=f+1|0;Bu(A+144|0),function(A){var e,r=0,i=0,f=0;e=0|ar[(A|=0)>>2];do{if(0|e){for(i=0|ar[(r=A+4|0)>>2];(0|i)!=(0|e);)f=i+-4|0,ar[r>>2]=f,i=f;if((A+16|0)==(0|e)){tr[A+128>>0]=0;break}vu(e);break}}while(0)}(e),an()}function Jl(A){var e;ar[(A|=0)>>2]=17056,0|(e=0|ar[A+8>>2])&&0|tr[A+12>>0]&&mu(e),an()}function Ml(){return 0|ar[3118]}function Tl(){return 0|ar[2733]}function Ul(){return 0|ar[2732]}function Sl(A){ar[(A|=0)>>2]=17108,Bu(A+12|0),an()}function Ol(A){ar[(A|=0)>>2]=17148,Bu(A+16|0),an()}function zl(){lA()}function jl(A,e){e|=0;var r,i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z,j,H,x,P,L,K,q,$,AA,eA,rA,iA,fA,nA,tA,oA,aA,cA,lA=0,uA=0,bA=0,sA=0;for(r=ur=(i=ur)+31&-32,ur=ur+16|0,ar[(A|=0)+4>>2]=e+-1,ar[A>>2]=17036,f=lA=A+8|0,n=28,n|=0,ar[(f|=0)>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,(tr[f+128>>0]=0)|n&&(function(A,e){var r=0;(0|Ll(A|=0))>>>0<(e|=0)>>>0&&zl();r=e>>>0<29&0==(0|tr[(r=A+128|0)>>0])?(tr[r>>0]=1,A+16|0):0|hu(e<<2);ar[A+4>>2]=r,ar[A>>2]=r,ar[A+8>>2]=r+(e<<2)}(f,n),Pl(f,n)),ar[(e=A+144|0)>>2]=0,ar[e+4>>2]=0,4294967279<(uA=(ar[e+8>>2]=0)|Yf(53684))>>>0&&pu(),uA>>>0<11?tr[e+11>>0]=uA:(bA=0|hu(sA=uA+16&-16),ar[e>>2]=bA,ar[A+152>>2]=-2147483648|sA,ar[A+148>>2]=uA,e=bA),wf(e,53684,uA),Qf(e+uA|(tr[r>>0]=0),r),e=0|ar[lA>>2],uA=0|ar[(lA=A+12|0)>>2];(0|uA)!=(0|e);)sA=uA+-4|0,uA=ar[lA>>2]=sA;ar[14199]=0,ar[14198]=14700,t=A,o=56792,Hl(t|=0,o|=0,0|hn(59216)),ar[14201]=0,ar[14200]=14732,a=A,c=56800,Hl(a|=0,c|=0,0|hn(59224)),function(A,e,r,i){e|=0,r|=0,i|=0,ar[4+(A|=0)>>2]=i+-1,ar[A>>2]=17056,ar[(i=A+8|0)>>2]=e,tr[A+12>>0]=1&r,e||(r=0|Ul(),ar[i>>2]=r)}(56808,0,0,1),l=A,u=56808,Hl(l|=0,u|=0,0|hn(59232)),ar[14207]=0,ar[14206]=17252,b=A,s=56824,Hl(b|=0,s|=0,0|hn(59264)),ar[14209]=0,ar[14208]=17320,d=A,k=56832,Hl(d|=0,k|=0,0|hn(61024)),function(A,e){e|=0,ar[4+(A|=0)>>2]=e+-1,ar[A>>2]=16988,e=0|dn(),ar[A+8>>2]=e}(56840,1),h=A,w=56840,Hl(h|=0,w|=0,0|hn(61032)),ar[14215]=0,ar[14214]=17368,v=A,m=56856,Hl(v|=0,m|=0,0|hn(61040)),ar[14217]=0,ar[14216]=17416,g=A,Z=56864,Hl(g|=0,Z|=0,0|hn(61048)),function(A,e){for(e|=0,ar[4+(A|=0)>>2]=e+-1,ar[A>>2]=17108,tr[A+8>>0]=46,tr[A+9>>0]=44,ar[(e=A+12|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,A=0;3!=(0|A);)ar[e+(A<<2)>>2]=0,A=A+1|0}(56872,1),p=A,y=56872,Hl(p|=0,y|=0,0|hn(59248)),function(A,e){for(e|=0,ar[4+(A|=0)>>2]=e+-1,ar[A>>2]=17148,ar[A+8>>2]=46,ar[A+12>>2]=44,ar[(e=A+16|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,A=0;3!=(0|A);)ar[e+(A<<2)>>2]=0,A=A+1|0}(56896,1),B=A,E=56896,Hl(B|=0,E|=0,0|hn(59272)),ar[14233]=0,ar[14232]=14764,X=A,W=56928,Hl(X|=0,W|=0,0|hn(59256)),ar[14235]=0,ar[14234]=14828,I=A,C=56936,Hl(I|=0,C|=0,0|hn(59280)),ar[14237]=0,ar[14236]=14892,G=A,V=56944,Hl(G|=0,V|=0,0|hn(59288)),ar[14239]=0,ar[14238]=14944,F=A,R=56952,Hl(F|=0,R|=0,0|hn(59296)),ar[14241]=0,ar[14240]=16492,N=A,_=56960,Hl(N|=0,_|=0,0|hn(60944)),ar[14243]=0,ar[14242]=16548,Y=A,Q=56968,Hl(Y|=0,Q|=0,0|hn(60952)),ar[14245]=0,ar[14244]=16604,D=A,J=56976,Hl(D|=0,J|=0,0|hn(60960)),ar[14247]=0,ar[14246]=16660,M=A,T=56984,Hl(M|=0,T|=0,0|hn(60968)),ar[14249]=0,ar[14248]=16716,U=A,S=56992,Hl(U|=0,S|=0,0|hn(60976)),ar[14251]=0,ar[14250]=16744,O=A,z=57e3,Hl(O|=0,z|=0,0|hn(60984)),ar[14253]=0,ar[14252]=16772,j=A,H=57008,Hl(j|=0,H|=0,0|hn(60992)),ar[14255]=0,ar[14254]=16800,x=A,P=57016,Hl(x|=0,P|=0,0|hn(61e3)),ar[14257]=0,ar[14256]=17232,function(A){ar[(A|=0)>>2]=17464}(57032),ar[14256]=14996,ar[14258]=15044,L=A,K=57024,Hl(L|=0,K|=0,0|hn(60108)),ar[14261]=0,ar[14260]=17232,function(A){ar[(A|=0)>>2]=17500}(57048),ar[14260]=15080,ar[14262]=15128,q=A,$=57040,Hl(q|=0,$|=0,0|hn(60920)),ar[14265]=0,ar[14264]=17232,AA=0|dn(),ar[14266]=AA,ar[14264]=16444,eA=A,rA=57056,Hl(eA|=0,rA|=0,0|hn(60928)),ar[14269]=0,ar[14268]=17232,iA=0|dn(),ar[14270]=iA,ar[14268]=16468,fA=A,nA=57072,Hl(fA|=0,nA|=0,0|hn(60936)),ar[14273]=0,ar[14272]=16828,tA=A,oA=57088,Hl(tA|=0,oA|=0,0|hn(61008)),ar[14275]=0,ar[14274]=16860,aA=A,cA=57096,Hl(aA|=0,cA|=0,0|hn(61016)),ur=i}function Hl(A,e,r){A|=0,r|=0;var i,f=0;au(e|=0),f=0|ar[(i=A+8|0)>>2],(0|ar[A+12>>2])-f>>2>>>0>r>>>0?A=i:(function(A,e){e|=0;var r,i,f=0,n=0;f=0|ar[(i=4+(A|=0)|0)>>2],n=0|ar[A>>2],r=f-n>>2;A:do{if(e>>>0<=r>>>0){if(e>>>0<r>>>0)for(A=n+(e<<2)|0;;){if((0|f)==(0|A))break A;n=f+-4|0,ar[i>>2]=n,f=n}}else xl(A,e-r|0)}while(0)}(i,r+1|0),f=0|ar[(A=i)>>2]),0|(f=0|ar[f+(r<<2)>>2])&&lu(f),ar[(0|ar[A>>2])+(r<<2)>>2]=e}function xl(A,e){e|=0;var r,i,f,n=0,t=0,o=0,a=0,c=0;r=ur=(f=ur)+31&-32,ur=ur+32|0,o=(A|=0)+8|0,n=0|ar[(i=A+4|0)>>2];do{if((0|ar[o>>2])-n>>2>>>0<e>>>0){if(n=(n-(0|ar[A>>2])>>2)+e|0,!((t=0|Ll())>>>0<n>>>0)){a=0|ar[A>>2],o=(c=(0|ar[o>>2])-a|0)>>1,Kl(r,c>>2>>>0<t>>>1>>>0?o>>>0<n>>>0?n:o:t,(0|ar[i>>2])-a>>2,A+16|0),ql(r,e),$l(A,r),Au(r);break}zl()}else Pl(A,e)}while(0);ur=f}function Pl(A,e){var r;for(r=(A|=0)+4|0,A=e|=0,e=0|ar[r>>2];e=4+((ar[e>>2]=0)|ar[r>>2])|0,ar[r>>2]=e,0!=(0|(A=A+-1|0)););}function Ll(){return 1073741823}function Kl(A,e,r,i){e|=0,r|=0,i|=0;var f=0;ar[(A|=0)+12>>2]=0,ar[A+16>>2]=i;do{if(e){if(e>>>0<29&0==(0|tr[(f=i+112|0)>>0])){tr[f>>0]=1;break}i=0|hu(e<<2);break}i=0}while(0);r=(ar[A>>2]=i)+(r<<2)|0,ar[A+8>>2]=r,ar[A+4>>2]=r,ar[A+12>>2]=i+(e<<2)}function ql(A,e){var r;for(r=(A|=0)+8|0,A=e|=0,e=0|ar[r>>2];e=4+((ar[e>>2]=0)|ar[r>>2])|0,ar[r>>2]=e,0!=(0|(A=A+-1|0)););}function $l(A,e){e|=0;var r=0,i=0,f=0,n=0,t=0;i=0|ar[(A|=0)>>2],n=e+4|0,f=(0|ar[(t=A+4|0)>>2])-i|0,r=(0|ar[n>>2])+(0-(f>>2)<<2)|0,ar[n>>2]=r,0<(0|f)?(hb(0|r,0|i,0|f),r=0|ar[(i=n)>>2]):i=n,n=0|ar[A>>2],ar[A>>2]=r,ar[i>>2]=n,n=e+8|0,f=0|ar[t>>2],ar[t>>2]=ar[n>>2],ar[n>>2]=f,t=e+12|0,A=0|ar[(n=A+8|0)>>2],ar[n>>2]=ar[t>>2],ar[t>>2]=A,ar[e>>2]=ar[i>>2]}function Au(A){var e=0,r=0,i=0,f=0;for(e=0|ar[(A|=0)+4>>2],i=0|ar[(r=A+8|0)>>2];(0|i)!=(0|e);)f=i+-4|0,i=ar[r>>2]=f;r=0|ar[A>>2];do{if(0|r){if((0|(e=0|ar[A+16>>2]))==(0|r)){tr[e+112>>0]=0;break}vu(r);break}}while(0)}function eu(){return 0==(0|tr[57104])&&0|ib(57104)&&(jl(57112,1),ar[15264]=57112,ar[15265]=61056),0|ar[15265]}function ru(A,e){A|=0,e=0|ar[(e|=0)>>2],au(ar[A>>2]=e)}function iu(){return 0==(0|tr[57272])&&0|ib(57272)&&(ru(61064,0|eu()),ar[15267]=61064),0|ar[15267]}function fu(A){A|=0;var e=0;e=0|iu(),e=0|ar[e>>2],au(ar[A>>2]=e)}function nu(A,e,r){return A|=0,e|=0,0|(A=(r|=0)?0|function(A,e,r){A|=0,e|=0,r|=0;var i=0,f=0;A:do{if(r){for(;(i=0|tr[A>>0])<<24>>24==(f=0|tr[e>>0])<<24>>24;){if(!(r=r+-1|0)){A=0;break A}A=A+1|0,e=e+1|0}A=(255&i)-(255&f)|0}else A=0}while(0);return 0|A}(A,e,r):0)}function tu(){0}function ou(A){0}function au(A){cu((A|=0)+4|0)}function cu(A){ar[(A|=0)>>2]=1+(0|ar[A>>2])}function lu(A){return 0|(A=-1==(0|uu((A|=0)+4|0))?(is[511&ar[8+(0|ar[A>>2])>>2]](A),1):0)}function uu(A){var e;return e=0|ar[(A|=0)>>2],ar[A>>2]=e-1,e-1|0}function bu(A){au(A|=0)}function su(A){cu((A|=0)+8|0)}function du(A){0|lu(A|=0)&&ku(A)}function ku(A){var e;0!=(0|ar[(e=(A|=0)+8|0)>>2])&&-1!=(0|uu(e))||is[511&ar[16+(0|ar[A>>2])>>2]](A)}function hu(A){var e;for(e=0==(0|(A|=0))?1:A;!(0|(A=0|yc(e)));){if(!(A=0|fb())){A=0;break}rs[7&A]()}return 0|A}function wu(A){return 0|hu(A|=0)}function vu(A){Bc(A|=0)}function mu(A){vu(A|=0)}function gu(){lA()}function Zu(A,e){e|=0,ar[(A|=0)>>2]=17640,function(A,e){A|=0;var r,i,f=0;f=0|hu(13+(r=0|Vc(e|=0))|0),ar[f>>2]=r,ar[f+4>>2]=r,hb((ar[f+8>>2]=0)|(f=0|(i=f,12+(i|=0)|0)),0|e,1+r|0),ar[A>>2]=f}(A+4|0,e)}function pu(){lA()}function yu(A,e){e|=0;var r,i,f=0,n=0,t=0;r=ur=(i=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,((ar[A+8>>2]=0)|tr[e+11>>0])<0?(f=0|ar[e>>2],4294967279<(e=0|ar[e+4>>2])>>>0&&pu(),e>>>0<11?tr[A+11>>0]=e:(n=0|hu(t=e+16&-16),ar[A>>2]=n,ar[A+8>>2]=-2147483648|t,ar[A+4>>2]=e,A=n),wf(A,f,e),Qf(A+e|(tr[r>>0]=0),r)):(ar[A>>2]=ar[e>>2],ar[A+4>>2]=ar[e+4>>2],ar[A+8>>2]=ar[e+8>>2]),ur=i}function Bu(A){(0|tr[(A|=0)+11>>0])<0&&vu(0|ar[A>>2])}function Eu(A,e){var r=0,i=0;return(0|(A|=0))!=(0|(e|=0))&&Xu(A,(i=(r=0|tr[e+11>>0])<<24>>24<0)?0|ar[e>>2]:e,i?0|ar[e+4>>2]:255&r),0|A}function Xu(A,e,r){e|=0,r|=0;var i,f,n,t,o=0,a=0;f=ur=(t=ur)+31&-32,ur=ur+16|0,a=(i=(o=0|tr[(n=(A|=0)+11|0)>>0])<<24>>24<0)?(2147483647&ar[A+8>>2])-1|0:10;do{if(r>>>0<=a>>>0){if(Wu(o=i?0|ar[A>>2]:A,e,r),Qf(o+r|(tr[f>>0]=0),f),(0|tr[n>>0])<0){ar[A+4>>2]=r;break}tr[n>>0]=r;break}i?o=0|ar[A+4>>2]:o&=255,Iu(A,a,r-a|0,o,0,o,r,e)}while(0);return ur=t,0|A}function Wu(A,e,r){return A|=0,e|=0,0|(r|=0)&&wb(0|A,0|e,0|r),0|A}function Iu(A,e,r,i,f,n,t,o){A|=0,i|=0,f|=0,n|=0,t|=0,o|=0;var a,c,l=0,u=0,b=0;a=ur=(c=ur)+31&-32,ur=ur+16|0,(-18-(e|=0)|0)>>>0<(r|=0)>>>0&&pu(),b=(0|tr[A+11>>0])<0?0|ar[A>>2]:A,u=0|hu(l=e>>>0<2147483623?(l=(l=r+e|0)>>>0<(u=e<<1)>>>0?u:l)>>>0<11?11:l+16&-16:-17),0|f&&wf(u,b,f),0|t&&wf(u+f|0,o,t),0|(i=(r=i-n|0)-f|0)&&wf(u+f+t|0,b+f+n|0,i),10!=(0|e)&&vu(b),ar[A>>2]=u,ar[A+8>>2]=-2147483648|l,t=r+t|0,Qf(u+(ar[A+4>>2]=t)|(tr[a>>0]=0),a),ur=c}function Cu(A,e){A|=0;var r,i=0,f=0,n=0,t=0,o=0;4294967279<(e|=0)>>>0&&pu(),i=(n=(f=0|tr[(r=A+11|0)>>0])<<24>>24<0)?(o=0|ar[A+4>>2],(2147483647&ar[A+8>>2])-1|0):(o=255&f,10),t=(e=(t=e>>>0<o>>>0?o:e)>>>0<11)?10:(t+16&-16)-1|0;do{if((0|t)!=(0|i)){do{if(!e){if(e=0|hu(t+1|0),n){n=1,i=0|ar[A>>2],f=13;break}wf(e,A,1+(255&f)|0),f=14;break}e=0|ar[A>>2],f=n?(n=0,i=e,e=A,13):(wf(A,e,1+(255&f)|0),vu(e),15)}while(0);if(13==(0|f)&&(wf(e,i,1+(0|ar[A+4>>2])|0),vu(i),f=n?14:15),14==(0|f)){ar[A+8>>2]=t+1|-2147483648,ar[A+4>>2]=o,ar[A>>2]=e;break}if(15==(0|f)){tr[r>>0]=o;break}}}while(0)}function Gu(A,e){return 0|Xu(A|=0,e|=0,0|Yf(e))}function Vu(A,e,r){e|=0,r|=0;var i,f,n,t=0,o=0;i=ur=(n=ur)+31&-32,ur=ur+16|0,(o=(t=0|tr[(f=(A|=0)+11|0)>>0])<<24>>24<0)?t=0|ar[A+4>>2]:t&=255;do{if(e>>>0<=t>>>0){if(o){o=(0|ar[A>>2])+e|0,tr[i>>0]=0,Qf(o,i),ar[A+4>>2]=e;break}Qf(A+e|(tr[i>>0]=0),i),tr[f>>0]=e;break}Fu(A,e-t|0,r)}while(0);ur=n}function Fu(A,e,r){A|=0,r|=0;var i,f,n=0,t=0,o=0,a=0,c=0;return i=ur=(f=ur)+31&-32,ur=ur+16|0,0|(e|=0)&&(t=(n=0|tr[(c=A+11|0)>>0])<<24>>24<0?(o=0|ar[A+4>>2],(2147483647&ar[A+8>>2])-1|0):(o=255&n,10),a=o+e|0,(t-o|0)>>>0<e>>>0&&(Ru(A,t,a-t|0,o,o,0,0),n=0|tr[c>>0]),oi((n=n<<24>>24<0?0|ar[A>>2]:A)+o|0,e,r),(0|tr[c>>0])<0?ar[A+4>>2]=a:tr[c>>0]=a,Qf(n+a|(tr[i>>0]=0),i)),ur=f,0|A}function Ru(A,e,r,i,f,n,t){A|=0,i|=0,f|=0,n|=0,t|=0;var o=0,a=0,c=0;(-17-(e|=0)|0)>>>0<(r|=0)>>>0&&pu(),c=(0|tr[A+11>>0])<0?0|ar[A>>2]:A,a=0|hu(o=e>>>0<2147483623?(o=(o=r+e|0)>>>0<(a=e<<1)>>>0?a:o)>>>0<11?11:o+16&-16:-17),0|f&&wf(a,c,f),0|(r=i-n-f|0)&&wf(a+f+t|0,c+f+n|0,r),10!=(0|e)&&vu(c),ar[A>>2]=a,ar[A+8>>2]=-2147483648|o}function Nu(A,e,r){e|=0,r|=0;var i,f,n,t,o,a=0,c=0;return n=ur=(o=ur)+31&-32,ur=ur+16|0,a=(f=(a=0|tr[(t=(A|=0)+11|0)>>0])<<24>>24<0)?(c=0|ar[A+4>>2],(2147483647&ar[A+8>>2])-1|0):(c=255&a,10),i=c+r|0,r>>>0<=(a-c|0)>>>0?0|r&&(wf((a=f?0|ar[A>>2]:A)+c|0,e,r),(0|tr[t>>0])<0?ar[A+4>>2]=i:tr[t>>0]=i,Qf(a+i|(tr[n>>0]=0),n)):Iu(A,a,i-a|0,c,c,0,r,e),ur=o,0|A}function _u(A,e){A|=0,e|=0;var r,i,f=0,n=0,t=0,o=0;o=ur=(i=ur)+31&-32,ur=ur+16|0,o=(r=o)+1|0,tr[r>>0]=e,e=(f=(e=0|tr[(n=A+11|0)>>0])<<24>>24<0)?(t=0|ar[A+4>>2],(2147483647&ar[A+8>>2])-1|0):(t=255&e,10),7==(0|(f=(0|t)==(0|e)?(Ru(A,e,1,e,e,0,0),e=e+1|0,(0|tr[n>>0])<0?8:7):(e=t+1|0,f?8:7)))?(tr[n>>0]=e,e=A):8==(0|f)&&(n=0|ar[A>>2],ar[A+4>>2]=e,e=n),Qf(A=e+t|0,r),Qf(A+1|(tr[o>>0]=0),o),ur=i}function Yu(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n,t=0;return(n=(t=0|tr[(A|=0)+11>>0])<<24>>24<0)?t=0|ar[A+4>>2]:t&=255,-1==(0|f)|t>>>0<e>>>0&&lA(),r=(t=t-e|0)>>>0<r>>>0?t:r,n&&(A=0|ar[A>>2]),(A=0|nu(A+e|0,i,(t=f>>>0<r>>>0)?f:r))?0|A:0|(r>>>0<f>>>0?-1:1&t)}function Qu(A){(0|tr[(A|=0)+8+3>>0])<0&&vu(0|ar[A>>2])}function Du(A,e,r){return A|=0,e|=0,(r|=0)&&function(A,e,r){var i=0;if((r|=0)>>>0<=(A|=0)-(e|=0)>>2>>>0){if(0|r)for(i=A;r=r+-1|0,ar[i>>2]=ar[e>>2],r;)e=e+4|0,i=i+4|0}else for(;ar[A+((r=r+-1|0)<<2)>>2]=ar[e+(r<<2)>>2],0!=(0|r););}(A,e,r),0|A}function Ju(A,e,r,i,f,n,t,o){A|=0,i|=0,f|=0,n|=0,t|=0,o|=0;var a,c,l,u=0,b=0,s=0;c=ur=(l=ur)+31&-32,ur=ur+16|0,(1073741806-(e|=0)|0)>>>0<(r|=0)>>>0&&pu(),s=(0|tr[3+(a=A+8|0)>>0])<0?0|ar[A>>2]:A,e>>>0<536870887?1073741823<(r=(r=(r=r+e|0)>>>0<(u=e<<1)>>>0?u:r)>>>0<2?2:r+4&-4)>>>0?lA():b=r:b=1073741807,u=0|hu(b<<2),0|f&&Zf(u,s,f),0|t&&Zf(u+(f<<2)|0,o,t),0|(i=(r=i-n|0)-f|0)&&Zf(u+(f<<2)+(t<<2)|0,s+(f<<2)+(n<<2)|0,i),1!=(0|e)&&vu(s),ar[A>>2]=u,ar[a>>2]=-2147483648|b,t=r+t|0,ln(u+((ar[A+4>>2]=t)<<2)|(ar[c>>2]=0),c),ur=l}function Mu(A,e){A|=0;var r,i,f=0,n=0,t=0,o=0,a=0;1073741807<(e|=0)>>>0&&pu(),f=(t=(n=0|tr[(r=3+(i=A+8|0)|0)>>0])<<24>>24<0)?(a=0|ar[A+4>>2],(2147483647&ar[i>>2])-1|0):(a=255&n,1),o=(e=(o=e>>>0<a>>>0?a:e)>>>0<2)?1:(o+4&-4)-1|0;do{if((0|o)!=(0|f)){do{if(!e){if(1073741823<(e=o+1|0)>>>0&&lA(),e=0|hu(e<<2),t){t=1,f=0|ar[A>>2],n=15;break}Zf(e,A,1+(255&n)|0),n=16;break}e=0|ar[A>>2],n=t?(t=0,f=e,e=A,15):(Zf(A,e,1+(255&n)|0),vu(e),17)}while(0);if(15==(0|n)&&(Zf(e,f,1+(0|ar[A+4>>2])|0),vu(f),n=t?16:17),16==(0|n)){ar[i>>2]=o+1|-2147483648,ar[A+4>>2]=a,ar[A>>2]=e;break}if(17==(0|n)){tr[r>>0]=a;break}}}while(0)}function Tu(A,e){return 0|function(A,e,r){e|=0,r|=0;var i,f,n,t,o,a=0,c=0;n=ur=(o=ur)+31&-32,ur=ur+16|0,c=(f=(i=0|tr[(t=(a=(A|=0)+8|0)+3|0)>>0])<<24>>24<0)?(2147483647&ar[a>>2])-1|0:1;do{if(r>>>0<=c>>>0){if(Du(a=f?0|ar[A>>2]:A,e,r),ln(a+(r<<2)|(ar[n>>2]=0),n),(0|tr[t>>0])<0){ar[A+4>>2]=r;break}tr[t>>0]=r;break}Ju(A,c,r-c|0,a=f?0|ar[A+4>>2]:255&i,0,a,r,e)}while(0);return ur=o,0|A}(A|=0,e|=0,0|Mr(e))}function Uu(A,e,r,i,f,n,t){A|=0,i|=0,f|=0,n|=0,t|=0;var o,a=0,c=0,l=0;(1073741807-(e|=0)|0)>>>0<(r|=0)>>>0&&pu(),l=(0|tr[3+(o=A+8|0)>>0])<0?0|ar[A>>2]:A,e>>>0<536870887?1073741823<(r=(r=(r=r+e|0)>>>0<(a=e<<1)>>>0?a:r)>>>0<2?2:r+4&-4)>>>0?lA():c=r:c=1073741807,a=0|hu(c<<2),0|f&&Zf(a,l,f),0|(r=i-n-f|0)&&Zf(a+(f<<2)+(t<<2)|0,l+(f<<2)+(n<<2)|0,r),1!=(0|e)&&vu(l),ar[A>>2]=a,ar[o>>2]=-2147483648|c}function Su(A,e,r){e|=0,r|=0;var i,f,n,t,o=0,a=0,c=0;return f=ur=(t=ur)+31&-32,ur=ur+16|0,o=(i=(o=0|tr[(n=(a=(A|=0)+8|0)+3|0)>>0])<<24>>24<0)?(c=0|ar[A+4>>2],(2147483647&ar[a>>2])-1|0):(c=255&o,1),a=c+r|0,r>>>0<=(o-c|0)>>>0?0|r&&(Zf((o=i?0|ar[A>>2]:A)+(c<<2)|0,e,r),(0|tr[n>>0])<0?ar[A+4>>2]=a:tr[n>>0]=a,ln(o+(a<<2)|(ar[f>>2]=0),f)):Ju(A,o,a-o|0,c,c,0,r,e),ur=t,0|A}function Ou(A,e){A|=0,e|=0;var r,i,f,n=0,t=0,o=0,a=0;a=ur=(f=ur)+31&-32,ur=ur+16|0,a=(i=a)+4|0,ar[i>>2]=e,e=(r=(e=0|tr[(t=(n=A+8|0)+3|0)>>0])<<24>>24<0)?(o=0|ar[A+4>>2],(2147483647&ar[n>>2])-1|0):(o=255&e,1),7==(0|(n=(0|o)==(0|e)?(Uu(A,e,1,e,e,0,0),e=e+1|0,(0|tr[t>>0])<0?8:7):(e=o+1|0,r?8:7)))?(tr[t>>0]=e,e=A):8==(0|n)&&(t=0|ar[A>>2],ar[A+4>>2]=e,e=t),ln(A=e+(o<<2)|0,i),ln(A+4|(ar[a>>2]=0),a),ur=f}function zu(){var A,e=0;return e=ur=(A=ur)+31&-32,ur=ur+16|0,0|yA(61148,5)?(ju(56158,e),0):(e=0|wA(0|ar[15288]),ur=A,0|e)}function ju(A,e){A|=0,e|=0;var r;r=ur=ur+31&-32,ur=ur+16|0,ar[r>>2]=e,Qc(e=0|ar[2669],A,r),function(A,e){var r,i=0,f=0,n=0,t=0,o=0,a=0;i=r=255&(A|=0),0<=(0|ar[(e|=0)+76>>2])&&0!=(0|Jc())?((0|i)!=(0|tr[e+75>>0])&&(o=0|ar[(t=e+20|0)>>2])>>>0<(0|ar[e+16>>2])>>>0?(ar[t>>2]=o+1,tr[o>>0]=r):i=0|Si(e,A),Mc()):a=3;do{if(3==(0|a)){if((0|i)!=(0|tr[e+75>>0])&&(n=0|ar[(f=e+20|0)>>2])>>>0<(0|ar[e+16>>2])>>>0){ar[f>>2]=n+1,tr[n>>0]=r;break}i=0|Si(e,A)}}while(0)}(10,e),lA()}function Hu(A){0}function xu(A,e){return(0|(A|=0))==(0|(e|=0))|0}function Pu(A,e,r,i){A|=0,r|=0,i|=0;var f,n,t;f=0|ar[(A=(e|=0)+16|0)>>2],n=e+36|0,t=e+24|0;do{if(f){if((0|f)!=(0|r)){ar[n>>2]=1+(0|ar[n>>2]),ar[t>>2]=2,tr[e+54>>0]=1;break}2==(0|ar[t>>2])&&(ar[t>>2]=i)}else ar[A>>2]=r,ar[t>>2]=i,ar[n>>2]=1}while(0)}function Lu(A,e,r,i){r|=0,i|=0;var f=0;(0|ar[(e|=0)+4>>2])==(0|r)&&1!=(0|ar[(f=e+28|0)>>2])&&(ar[f>>2]=i)}function Ku(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n=0,t=0,o=0,a=0;tr[(e|=0)+53>>0]=1;do{if((0|ar[e+4>>2])==(0|i)){if(tr[e+52>>0]=1,o=e+54|0,a=e+48|0,t=e+24|0,A=e+36|0,!(n=0|ar[(i=e+16|0)>>2])){if(ar[i>>2]=r,ar[t>>2]=f,!((ar[A>>2]=1)==(0|ar[a>>2])&1==(0|f)))break;tr[o>>0]=1;break}if((0|n)!=(0|r)){ar[A>>2]=1+(0|ar[A>>2]),tr[o>>0]=1;break}2==(0|(A=0|ar[t>>2]))&&(A=ar[t>>2]=f),1==(0|ar[a>>2])&1==(0|A)&&(tr[o>>0]=1)}}while(0)}function qu(A,e,r,i){e|=0,r|=0,i|=0;var f,n,t,o,a,c,l,u=0,b=0;for(a=ur=(l=ur)+31&-32,ur=ur+64|0,b=0|ar[(A|=0)>>2],c=A+(0|ar[b+-8>>2])|0,b=0|ar[b+-4>>2],ar[a>>2]=r,ar[4+a>>2]=A,ar[8+a>>2]=e,ar[12+a>>2]=i,e=20+a|0,i=24+a|0,f=28+a|0,n=32+a|0,t=40+a|0,o=(u=A=16+a|0)+36|0;(0|(u=u+4|(ar[u>>2]=0)))<(0|o););or[A+36>>1]=0,tr[A+38>>0]=0;A:do{if(0|xu(b,r))ar[48+a>>2]=1,as[15&ar[20+(0|ar[b>>2])>>2]](b,a,c,c,1,0),A=1==(0|ar[i>>2])?c:0;else{switch(os[63&ar[24+(0|ar[b>>2])>>2]](b,a,c,1,0),0|ar[36+a>>2]){case 0:A=1==(0|ar[t>>2])&1==(0|ar[f>>2])&1==(0|ar[n>>2])?0|ar[e>>2]:0;break A;case 1:break;default:A=0;break A}if(1!=(0|ar[i>>2])&&!(0==(0|ar[t>>2])&1==(0|ar[f>>2])&1==(0|ar[n>>2]))){A=0;break}A=0|ar[A>>2]}}while(0);return ur=l,0|A}function $u(A){var e,r,i;ar[(A|=0)>>2]=17640,e=A+4|0,(i=r=0)|(e|=0,1)&&(r=0|function(A){return(A|=0)+-12|0}(0|ar[e>>2]),e=0|ar[(i=r+8|0)>>2],ar[i>>2]=e+-1,(e+-1|0)<0)&&vu(r)}function Ab(A,e,r,i){e|=0,r|=0,i|=0;var f,n=0;n=(f=0|ar[(A|=0)+4>>2])>>8,1&f&&(n=0|ar[(0|ar[r>>2])+n>>2]),A=0|ar[A>>2],ts[31&ar[28+(0|ar[A>>2])>>2]](A,e,r+n|0,2&f|0?i:2)}function eb(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o=0;o=(t=0|ar[(A|=0)+4>>2])>>8,1&t&&(o=0|ar[(0|ar[i>>2])+o>>2]),A=0|ar[A>>2],as[15&ar[20+(0|ar[A>>2])>>2]](A,e,r,i+o|0,2&t|0?f:2,n)}function rb(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0;var n,t=0;t=(n=0|ar[(A|=0)+4>>2])>>8,1&n&&(t=0|ar[(0|ar[r>>2])+t>>2]),A=0|ar[A>>2],os[63&ar[24+(0|ar[A>>2])>>2]](A,e,r+t|0,2&n|0?i:2,f)}function ib(A){return 0|(A=1==(0|tr[(A|=0)>>0])?0:tr[A>>0]=1)}function fb(){var A;return A=0|ar[15289],0|(ar[15289]=A)}function nb(A,e,r,i){e|=0,i|=0;var f,n,t,o,a,c,l,u;return r=0|(t=f=A|=0,o=n=r|=0,t=((a=(u=0)|br(u=65535&(o|=0),l=65535&(t|=0)))>>>16)+(0|br(u,c=t>>>16))|0,o=0|br(u=o>>>16,l),0|(D=(t>>>16)+(0|br(u,c))+(((65535&t)+o|0)>>>16)|0,t+o<<16|65535&a|0)),A=D,0|(D=(0|br(e,n))+(0|br(i,f))+A|0&A,0|r)}function tb(A,e,r,i){return 0|(D=(e|=0)+(i|=0)+((r=(A|=0)+(r|=0)>>>0)>>>0<A>>>0|0)>>>0,0|r)}function ob(A,e,r,i){return 0|(D=i=(e|=0)-(i|=0)-((A|=0)>>>0<(r|=0)>>>0|0)>>>0,A-r>>>0|0)}function ab(A){var e=0;return(0|(e=0|tr[s+(255&(A|=0))>>0]))<8?0|e:(0|(e=0|tr[s+(A>>8&255)>>0]))<8?e+8|0:(0|(e=0|tr[s+(A>>16&255)>>0]))<8?e+16|0:24+(0|tr[s+(A>>>24)>>0])|0}function cb(A,e,r,i,f){f|=0;var n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0;if(l=A|=0,t=r|=0,o=b=i|=0,!(c=a=e|=0))return n=0!=(0|f),o?(n&&(ar[f>>2]=0|A,ar[f+4>>2]=0&e),(f=b=0)|(D=b,f)):(n&&(ar[f>>2]=(l>>>0)%(t>>>0),ar[f+4>>2]=0),(b=0)|(D=b,f=(l>>>0)/(t>>>0)>>>0));n=0==(0|o);do{if(t){if(!n){if((n=(0|g(0|o))-(0|g(0|c))|0)>>>0<=31){A=l>>>((t=u=n+1|0)>>>0)&(e=n-31>>31)|c<<(o=31-n|0),e&=c>>>(u>>>0),n=0,o=l<<o;break}return f?(ar[f>>2]=0|A,ar[f+4>>2]=a|0&e,(f=b=0)|(D=b,f)):(f=b=0)|(D=b,f)}if((n=t-1|0)&t|0){A=(u=32-(o=33+(0|g(0|t))-(0|g(0|c))|0)|0)-1>>31&c>>>((s=o-32|0)>>>0)|(c<<u|l>>>((t=o)>>>0))&(e=s>>31),e&=c>>>(o>>>0),n=l<<(d=64-o|0)&(a=u>>31),o=(c<<d|l>>>(s>>>0))&a|l<<u&o-33>>31;break}return 0|f&&(ar[f>>2]=n&l,ar[f+4>>2]=0),1==(0|t)?0|(D=s=a|0&e,d=0|A):(d=0|ab(0|t),0|(D=s=c>>>(d>>>0)|0,d=c<<32-d|l>>>(d>>>0)|0))}if(n)return 0|f&&(ar[f>>2]=(c>>>0)%(t>>>0),ar[f+4>>2]=0),(s=0)|(D=s,d=(c>>>0)/(t>>>0)>>>0);if(!l)return 0|f&&(ar[f>>2]=0,ar[f+4>>2]=(c>>>0)%(o>>>0)),(s=0)|(D=s,d=(c>>>0)/(o>>>0)>>>0);if(!((n=o-1|0)&o))return 0|f&&(ar[f>>2]=0|A,ar[f+4>>2]=n&c|0&e),d=c>>>(((s=0)|ab(0|o))>>>0),0|(D=s,d);if((n=(0|g(0|o))-(0|g(0|c))|0)>>>0<=30){A=c<<(o=31-n|0)|l>>>((t=e=n+1|0)>>>0),e=c>>>(e>>>0),n=0,o=l<<o;break}return f&&(ar[f>>2]=0|A,ar[f+4>>2]=a|0&e),(d=s=0)|(D=s,d)}while(0);if(t){for(c=0|tb(0|(u=0|r),0|(l=b|0&i),-1,-1),r=D,a=o,o=0;a=n>>>31|(i=a)<<1,n=o|n<<1,ob(0|c,0|r,0|(i=A<<1|i>>>31|0),0|(b=A>>>31|e<<1|0)),o=1&(s=(d=D)>>31|((0|d)<0?-1:0)<<1),A=0|ob(0|i,0|b,s&u|0,(((0|d)<0?-1:0)>>31|((0|d)<0?-1:0)<<1)&l|0),e=D,0!=(0|(t=t-1|0)););c=a,a=0}else c=o,o=a=0;return(t=0)|f&&(ar[f>>2]=A,ar[f+4>>2]=e),0|(D=s=(0|n)>>>31|(c|t)<<1|0&(t<<1|n>>>31)|a,d=-2&(n<<1|0)|o)}function lb(A,e,r,i){return 0|cb(A|=0,e|=0,r|=0,i|=0,0)}function ub(A,e,r,i){var f,n;return ur=(n=ur)+16|0,cb(A|=0,e|=0,r|=0,i|=0,f=0|n),ur=n,0|(D=0|ar[4+f>>2],0|ar[f>>2])}function bb(A,e,r){return A|=0,e|=0,(0|(r|=0))<32?(D=e>>r,A>>>r|(e&(1<<r)-1)<<32-r):(D=(0|e)<0?-1:0,e>>r-32|0)}function sb(A,e,r){return A|=0,e|=0,(0|(r|=0))<32?(D=e>>>r,A>>>r|(e&(1<<r)-1)<<32-r):e>>>r-32|(D=0)}function db(A,e,r){return A|=0,e|=0,(0|(r|=0))<32?(D=e<<r|(A&(1<<r)-1<<32-r)>>>32-r,A<<r):(D=A<<r-32,0)}function kb(A){return(255&(A|=0))<<24|(A>>8&255)<<16|(A>>16&255)<<8|A>>>24|0}function hb(A,e,r){A|=0,e|=0;var i,f,n=0;if(8192<=(0|(r|=0)))return 0|uA(0|A,0|e,0|r);if(f=0|A,i=A+r|0,(3&A)==(3&e)){for(;3&A;){if(!r)return 0|f;tr[A>>0]=0|tr[e>>0],A=A+1|0,e=e+1|0,r=r-1|0}for(n=(r=-4&i|0)-64|0;(0|A)<=(0|n);)ar[A>>2]=ar[e>>2],ar[A+4>>2]=ar[e+4>>2],ar[A+8>>2]=ar[e+8>>2],ar[A+12>>2]=ar[e+12>>2],ar[A+16>>2]=ar[e+16>>2],ar[A+20>>2]=ar[e+20>>2],ar[A+24>>2]=ar[e+24>>2],ar[A+28>>2]=ar[e+28>>2],ar[A+32>>2]=ar[e+32>>2],ar[A+36>>2]=ar[e+36>>2],ar[A+40>>2]=ar[e+40>>2],ar[A+44>>2]=ar[e+44>>2],ar[A+48>>2]=ar[e+48>>2],ar[A+52>>2]=ar[e+52>>2],ar[A+56>>2]=ar[e+56>>2],ar[A+60>>2]=ar[e+60>>2],A=A+64|0,e=e+64|0;for(;(0|A)<(0|r);)ar[A>>2]=ar[e>>2],A=A+4|0,e=e+4|0}else for(r=i-4|0;(0|A)<(0|r);)tr[A>>0]=0|tr[e>>0],tr[A+1>>0]=0|tr[e+1>>0],tr[A+2>>0]=0|tr[e+2>>0],tr[A+3>>0]=0|tr[e+3>>0],A=A+4|0,e=e+4|0;for(;(0|A)<(0|i);)tr[A>>0]=0|tr[e>>0],A=A+1|0,e=e+1|0;return 0|f}function wb(A,e,r){var i=0;if((0|(e|=0))<(0|(A|=0))&(0|A)<(e+(r|=0)|0)){for(e=e+r|0,A=(i=A)+r|0;0<(0|r);)e=e-1|0,r=r-1|0,tr[(A=A-1|0)>>0]=0|tr[e>>0];A=i}else hb(A,e,r);return 0|A}function vb(A,e,r){e|=0;var i,f=0,n=0,t=0;if(i=(A|=0)+(r|=0)|0,e&=255,67<=(0|r)){for(;3&A;)tr[A>>0]=e,A=A+1|0;for(n=(f=-4&i|0)-64|0,t=e|e<<8|e<<16|e<<24;(0|A)<=(0|n);)ar[A>>2]=t,ar[A+4>>2]=t,ar[A+8>>2]=t,ar[A+12>>2]=t,ar[A+16>>2]=t,ar[A+20>>2]=t,ar[A+24>>2]=t,ar[A+28>>2]=t,ar[A+32>>2]=t,ar[A+36>>2]=t,ar[A+40>>2]=t,ar[A+44>>2]=t,ar[A+48>>2]=t,ar[A+52>>2]=t,ar[A+56>>2]=t,ar[A+60>>2]=t,A=A+64|0;for(;(0|A)<(0|f);)ar[A>>2]=t,A=A+4|0}for(;(0|A)<(0|i);)tr[A>>0]=e,A=A+1|0;return i-r|0}function mb(A){return 0}function gb(A){return 0}function Zb(A){return 0}function pb(A){return 0<=(A=+A)?+v(A+.5):+m(A-.5)}function yb(A){var e,r;return 0<(0|(r=(A|=0)+15&-16|0))&(0|(A=(e=0|ar[b>>2])+r|0))<(0|e)|(0|A)<0?(B(),F(12),-1):(0|(ar[b>>2]=A))>(0|y())&&0==(0|p())?(ar[b>>2]=e,F(12),-1):0|e}function Bb(){return Z(0),0}function Eb(A){return Z(1),0}function Xb(A,e){return Z(2),0}function Wb(A,e,r){return Z(3),0}function Ib(A,e,r,i,f){return Z(5),0}function Cb(A,e,r,i,f){return Z(6),0}function Gb(A,e,r,i,f,n){return Z(7),0}function Vb(A,e,r,i,f,n){return Z(8),0}function Fb(A,e,r,i,f,n,t){return Z(9),0}function Rb(A,e,r,i,f,n,t,o){return Z(10),0}function Nb(){Z(11)}function _b(A){Z(12)}function Yb(A,e){Z(13)}function Qb(A,e,r){Z(14)}function Db(A,e,r,i){Z(15)}function Jb(A,e,r,i,f){Z(16)}function Mb(A,e,r,i,f,n){Z(17)}function Tb(A,e,r,i,f,n,t){Z(18)}function Ub(A,e,r,i,f,n,t,o){Z(19)}function Sb(A,e,r,i,f,n,t,o,a){Z(20)}function Ob(A,e,r,i,f,n,t,o,a,c){Z(21)}var zb=[Bb,function(){var A,e,r=0,i=0,f=0;for(i=34509,f=(r=61161)+22|0;tr[r>>0]=0|tr[i>>0],i=i+1|0,(0|(r=r+1|0))<(0|f););if(80<=(10+(0|Vc(34542))|0)>>>0)return 61161;for(i=34531,f=(r=61161+(0|Vc(61161))|0)+11|0;tr[r>>0]=0|tr[i>>0],i=i+1|0,(0|(r=r+1|0))<(0|f););return A=61161,e=34542,e|=0,function(A,e){!function(A,e){A|=0;var r=0,i=0;r=e|=0;A:do{if(3&(r^A))i=8;else{if(3&r)do{if(r=0|tr[e>>0],!((tr[A>>0]=r)<<24>>24))break A;e=e+1|0,A=A+1|0}while(0!=(3&e|0));if(!((-2139062144&(r=0|ar[e>>2])^-2139062144)&r+-16843009))for(i=A;e=e+4|0,A=i+4|0,ar[i>>2]=r,!((-2139062144&(r=0|ar[e>>2])^-2139062144)&r+-16843009|0);)i=A;i=8}}while(0);if(8==(0|i)&&(i=0|tr[e>>0],(tr[A>>0]=i)<<24>>24))for(;A=A+1|0,i=0|tr[(e=e+1|0)>>0],(tr[A>>0]=i)<<24>>24!=0;);}(A|=0,e|=0)}((A|=0)+(0|Vc(A))|0,e),61161},function(){return 17432576},function(){var A,e,r,i,f,n;return A=0|hu(8),ar[A>>2]=0,r=(ar[(e=4+A|0)>>2]=0)|hu(92),ar[4+r>>2]=0,ar[8+r>>2]=0,ar[r>>2]=6336,f=i=12+r|0,ar[(f|=0)>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f+12>>2]=30025,ar[f+20>>2]=0,ar[f+24>>2]=0,ar[f+16>>2]=f+20,ar[f+32>>2]=0,ar[f+36>>2]=0,ar[f+28>>2]=f+32,ar[(n=f+40|0)>>2]=0,ar[4+n>>2]=0,ar[8+n>>2]=0,ar[12+n>>2]=0,ar[16+n>>2]=0,ar[20+n>>2]=0,ar[24+n>>2]=0,ar[f+68>>2]=4,ar[f+72>>2]=32768,ar[f+76>>2]=32768,function(A){A|=0;var e=0,r=0,i=0,f=0,n=0;if(n=0|hu(132),ar[n+4>>2]=0,ar[n+8>>2]=0,ar[n>>2]=6364,co(e=n+12|0),ar[(r=A+60|0)>>2]=e,i=0|ar[(f=A+64|0)>>2],ar[f>>2]=n,i&&(du(i),e=0|ar[r>>2]),function(A){var e,r,i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0;if(ur=(w=ur)+64|0,f=w+48|0,t=w+40|0,o=w+32|0,a=w+24|0,l=w+16|0,b=w+8|0,h=(d=w)+56|0,v=(ar[(A|=0)>>2]=0)|ar[(N=A+4|0)>>2],(ar[N>>2]=0)|v&&du(v),g=0|ar[(k=A+8|0)>>2],(0|(v=0|ar[(N=A+12|0)>>2]))!=(0|g))for(;m=v+-8|0,ar[N>>2]=m,(0|(v=(v=0|ar[v+-4>>2])?(du(v),0|ar[N>>2]):m))!=(0|g););R=0|hu(96),ar[R+4>>2]=0,ar[R+8>>2]=0,ar[R>>2]=4600,Mt(F=R+16|0),ar[R+60>>2]=0,ar[R+64>>2]=0,ar[R+68>>2]=0,ar[F>>2]=4436,ar[(V=R+72|0)>>2]=0,ar[V+4>>2]=0,ar[V+8>>2]=0,ar[V+12>>2]=0,ar[V+16>>2]=0,ar[R+36>>2]=1718909296,tr[R+52>>0]=0,ar[(V=A+20|0)>>2]=F,v=0|ar[(F=A+24|0)>>2],ar[F>>2]=R,0|v&&du(v),R=0|hu(104),ar[R+4>>2]=0,ar[R+8>>2]=0,ar[R>>2]=4656,Mt(g=R+16|0),ar[R+60>>2]=0,ar[R+64>>2]=0,ar[R+68>>2]=0,ar[g>>2]=4684,ar[R+72>>2]=0,ar[R+76>>2]=1885954932,ar[(m=R+80|0)>>2]=0,ar[m+4>>2]=0,ar[m+8>>2]=0,ar[m+12>>2]=0,ar[m+16>>2]=0,ar[m+20>>2]=0,ar[R+36>>2]=1751411826,tr[R+52>>0]=1,ar[(m=A+28|0)>>2]=g,v=0|ar[(g=A+32|0)>>2],ar[g>>2]=R,0|v&&du(v),G=0|hu(72),ar[G+4>>2]=0,ar[G+8>>2]=0,ar[G>>2]=4628,Mt(R=G+16|0),ar[G+60>>2]=0,ar[G+64>>2]=0,ar[G+68>>2]=0,ar[R>>2]=4468,ar[G+36>>2]=1835365473,tr[G+52>>0]=1,ar[(s=A+36|0)>>2]=R,v=0|ar[(R=A+40|0)>>2],ar[R>>2]=G,0|v&&du(v),G=0|hu(72),ar[G+4>>2]=0,ar[G+8>>2]=0,ar[G>>2]=5016,Mt(I=G+16|0),ar[G+60>>2]=0,ar[G+64>>2]=0,ar[G+68>>2]=0,ar[I>>2]=5044,ar[G+36>>2]=1768973167,tr[G+52>>0]=0,ar[(c=A+44|0)>>2]=I,v=0|ar[(I=A+48|0)>>2],ar[I>>2]=G,0|v&&du(v),C=0|hu(88),ar[C+4>>2]=0,ar[C+8>>2]=0,ar[C>>2]=5076,Mt(G=C+16|0),ar[C+60>>2]=0,ar[C+64>>2]=0,ar[C+68>>2]=0,ar[G>>2]=5104,ar[C+72>>2]=0,ar[C+76>>2]=0,ar[C+80>>2]=0,ar[C+36>>2]=1768975713,tr[C+52>>0]=1,ar[(u=A+52|0)>>2]=G,v=0|ar[(G=A+56|0)>>2],ar[G>>2]=C,0|v&&du(v),C=0|hu(104),ar[C+4>>2]=0,ar[C+8>>2]=0,ar[C>>2]=4776,Mt(E=C+16|0),ar[C+60>>2]=0,ar[C+64>>2]=0,ar[C+68>>2]=0,ar[E>>2]=4804,B=C+72|0,ar[C+96>>2]=0,ar[B>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,ar[B+12>>2]=0,ar[B+16>>2]=0,tr[B+20>>0]=0,ar[C+36>>2]=1768714083,tr[C+52>>0]=1,ar[(B=A+60|0)>>2]=E,v=0|ar[(E=A+64|0)>>2],ar[E>>2]=C,0|v&&du(v),C=0|hu(72),ar[C+4>>2]=0,ar[C+8>>2]=0,ar[C>>2]=4836,Mt(X=C+16|0),ar[C+60>>2]=0,ar[C+64>>2]=0,ar[C+68>>2]=0,ar[X>>2]=4864,ar[C+36>>2]=1768517222,tr[C+52>>0]=1,ar[(n=A+92|0)>>2]=X,v=0|ar[(X=A+96|0)>>2],ar[X>>2]=C,0|v&&du(v),y=0|hu(72),ar[y+4>>2]=0,ar[y+8>>2]=0,ar[y>>2]=4956,Mt(W=y+16|0),ar[y+60>>2]=0,ar[y+64>>2]=0,ar[y+68>>2]=0,ar[W>>2]=4984,ar[y+36>>2]=1768977008,tr[y+52>>0]=0,ar[(C=A+100|0)>>2]=W,v=0|ar[(W=A+104|0)>>2],ar[W>>2]=y,0|v&&du(v),p=0|hu(80),ar[p+4>>2]=0,ar[p+8>>2]=0,ar[p>>2]=4716,Mt(y=p+16|0),ar[p+60>>2]=0,ar[p+64>>2]=0,ar[p+68>>2]=0,ar[y>>2]=4744,ar[p+72>>2]=0,ar[p+36>>2]=1885959277,tr[p+52>>0]=1,ar[(i=A+84|0)>>2]=y,v=0|ar[(y=A+88|0)>>2],ar[y>>2]=p,0|v&&du(v),r=0|ar[s>>2],Z=0|ar[m>>2],ar[f>>2]=Z,p=4+f|0,m=0|ar[g>>2],(g=0==(0|(ar[p>>2]=m)))||bu(m),(0|(v=0|ar[(e=48+r|0)>>2]))==(0|ar[52+r>>2])?Ut(44+r|0,f):(ar[v>>2]=Z,ar[v+4>>2]=m,g||(bu(m),v=0|ar[e>>2]),ar[e>>2]=v+8),0|(v=0|ar[p>>2])&&du(v),m=0|ar[s>>2],ar[t>>2]=ar[i>>2],Z=4+t|0,v=0|ar[y>>2],0|(ar[Z>>2]=v)&&bu(v),(0|(v=0|ar[(g=m+48|0)>>2]))==(0|ar[m+52>>2])?Ut(m+44|0,t):(ar[v>>2]=ar[t>>2],m=0|ar[Z>>2],(ar[v+4>>2]=m)&&(bu(m),v=0|ar[g>>2]),ar[g>>2]=v+8),0|(v=0|ar[Z>>2])&&du(v),m=0|ar[s>>2],ar[o>>2]=ar[B>>2],Z=4+o|0,v=0|ar[E>>2],0|(ar[Z>>2]=v)&&bu(v),(0|(v=0|ar[(g=m+48|0)>>2]))==(0|ar[m+52>>2])?Ut(m+44|0,o):(ar[v>>2]=ar[o>>2],m=0|ar[Z>>2],(ar[v+4>>2]=m)&&(bu(m),v=0|ar[g>>2]),ar[g>>2]=v+8),0|(v=0|ar[Z>>2])&&du(v),m=0|ar[s>>2],ar[a>>2]=ar[n>>2],Z=4+a|0,v=0|ar[X>>2],0|(ar[Z>>2]=v)&&bu(v),(0|(v=0|ar[(g=m+48|0)>>2]))==(0|ar[m+52>>2])?Ut(m+44|0,a):(ar[v>>2]=ar[a>>2],m=0|ar[Z>>2],(ar[v+4>>2]=m)&&(bu(m),v=0|ar[g>>2]),ar[g>>2]=v+8),0|(v=0|ar[Z>>2])&&du(v),m=0|ar[s>>2],ar[l>>2]=ar[C>>2],Z=4+l|0,v=0|ar[W>>2],0|(ar[Z>>2]=v)&&bu(v),(0|(v=0|ar[(g=m+48|0)>>2]))==(0|ar[m+52>>2])?Ut(m+44|0,l):(ar[v>>2]=ar[l>>2],m=0|ar[Z>>2],(ar[v+4>>2]=m)&&(bu(m),v=0|ar[g>>2]),ar[g>>2]=v+8),0|(v=0|ar[Z>>2])&&du(v),m=0|ar[C>>2],ar[b>>2]=ar[c>>2],Z=4+b|0,v=0|ar[I>>2],0|(ar[Z>>2]=v)&&bu(v),(0|(v=0|ar[(g=m+48|0)>>2]))==(0|ar[m+52>>2])?Ut(m+44|0,b):(ar[v>>2]=ar[b>>2],m=0|ar[Z>>2],(ar[v+4>>2]=m)&&(bu(m),v=0|ar[g>>2]),ar[g>>2]=v+8),0|(v=0|ar[Z>>2])&&du(v),m=0|ar[C>>2],ar[d>>2]=ar[u>>2],Z=d+4|0,v=0|ar[G>>2],0|(ar[Z>>2]=v)&&bu(v),(0|(v=0|ar[(g=m+48|0)>>2]))==(0|ar[m+52>>2])?Ut(m+44|0,d):(ar[v>>2]=ar[d>>2],m=0|ar[Z>>2],(ar[v+4>>2]=m)&&(bu(m),v=0|ar[g>>2]),ar[g>>2]=v+8),0|(v=0|ar[Z>>2])&&du(v),uo(v=A+108|0,0|ar[(m=A+112|0)>>2]),ar[A+116>>2]=0,ar[v>>2]=m,ar[m>>2]=0,ar[h>>2]=ar[V>>2],m=4+h|0,v=0|ar[F>>2],0|(ar[m>>2]=v)&&bu(v),v=0|ar[N>>2],g=A+16|0;do{if(v>>>0<(0|ar[g>>2])>>>0)ar[v>>2]=ar[h>>2],ar[v+4>>2]=ar[m>>2],ar[h>>2]=0,ar[m>>2]=0,ar[N>>2]=v+8;else{if(ee(k,h),!(v=0|ar[m>>2]))break;du(v)}}while(0);if(ar[h>>2]=ar[s>>2],m=4+h|0,v=0|ar[R>>2],0|(ar[m>>2]=v)&&bu(v),(v=0|ar[N>>2])>>>0<(0|ar[g>>2])>>>0)return ar[v>>2]=ar[h>>2],ar[v+4>>2]=ar[m>>2],ar[h>>2]=0,ar[m>>2]=0,ar[N>>2]=v+8,ur=w;ee(k,h),(v=0|ar[m>>2])&&du(v),ur=w}(e),vl(f=A+28|0,0|ar[(i=A+32|0)>>2]),ar[A+36>>2]=0,ar[f>>2]=i,ar[i>>2]=0,i=0|ar[A+40>>2],(0|(e=0|ar[(f=A+44|0)>>2]))!=(0|i))for(;r=e+-8|0,ar[f>>2]=r,(0|(e=(e=0|ar[e+-4>>2])?(du(e),0|ar[f>>2]):r))!=(0|i););ar[A+52>>2]=0,e=0|ar[(n=A+56|0)>>2],ar[n>>2]=0,e&&du(e)}(f),ar[A>>2]=i,ar[e>>2]=r,0|A},function(){var A;return A=0|hu(12),ar[A>>2]=0,ar[4+A>>2]=0,(ar[8+A>>2]=0)|A},Bb,Bb,Bb],jb=[Eb,function(A){return D=0|ar[(A=(A|=0)+16|0)+4>>2],0|ar[A>>2]},function(A){return 0},function(A){return 0},function(A){var e=0,r=0,i=0;return(i=0|ar[(e=(A|=0)+44|0)>>2])>>>0<(r=0|ar[A+24>>2])>>>0&&(i=ar[e>>2]=r),8&ar[A+48>>2]?((r=0|ar[(e=A+16|0)>>2])>>>0<i>>>0&&(r=ar[e>>2]=i),r>>>0<=(e=0|ar[A+12>>2])>>>0?0|(A=-1):0|(A=0|cr[e>>0])):0|(A=-1)},function(A){var e=0;return 0|(A=-1==(0|(e=0|jb[127&ar[36+(0|ar[(A|=0)>>2])>>2]](A)))?-1:(A=0|ar[(e=A+12|0)>>2],ar[e>>2]=A+1,0|hf(0|tr[A>>0])))},function(A){return 1852009592},function(A){return 0|ar[(A|=0)+4>>2]},function(A){return 0|(1==(0|(A|=0))?100:0)},function(A){var e,r,i;return r=ur=(e=ur)+31&-32,ur=ur+16|0,A=0|(i=0|ar[(A|=0)+60>>2],0|(i|=0)),ar[r>>2]=A,A=0|Ic(0|J(6,0|r)),ur=e,0|A},function(A){return-1},function(A){return 0},function(A){return 0},function(A){return-1},function(A){var e=0;return 0|(A=-1==(0|(e=0|jb[127&ar[36+(0|ar[(A|=0)>>2])>>2]](A)))?-1:(A=0|ar[(e=A+12|0)>>2],ar[e>>2]=A+4,0|gf(0|ar[A>>2])))},function(A){var e,r,i,f,n,t,o,a,c=0,l=0;i=ur=(a=ur)+31&-32,ur=ur+16|0,f=(A|=0)+36|0,n=A+40|0,t=8+(r=8+i|0)|0,o=r,e=A+32|0;A:for(;;){if(A=0|ar[f>>2],A=0|Kb[31&ar[20+(0|ar[A>>2])>>2]](A,0|ar[n>>2],r,t,i),(0|Ui(r,1,l=(0|ar[i>>2])-o|0,0|ar[e>>2]))!=(0|l)){A=-1;break}switch(0|A){case 1:break;case 2:A=-1;break A;default:c=4;break A}}return 4==(0|c)&&(A=(0!=(0|Oi(0|ar[e>>2])))<<31>>31),ur=a,0|A},function(A){var e,r,i,f,n,t,o,a,c=0,l=0;i=ur=(a=ur)+31&-32,ur=ur+16|0,f=(A|=0)+36|0,n=A+40|0,t=8+(r=8+i|0)|0,o=r,e=A+32|0;A:for(;;){if(A=0|ar[f>>2],A=0|Kb[31&ar[20+(0|ar[A>>2])>>2]](A,0|ar[n>>2],r,t,i),(0|Ui(r,1,l=(0|ar[i>>2])-o|0,0|ar[e>>2]))!=(0|l)){A=-1;break}switch(0|A){case 1:break;case 2:A=-1;break A;default:c=4;break A}}return 4==(0|c)&&(A=(0!=(0|Oi(0|ar[e>>2])))<<31>>31),ur=a,0|A},function(A){return 0|fn(A|=0,0)},function(A){return 0|fn(A|=0,1)},function(A){return 0|tn(A|=0,0)},function(A){return 0|tn(A|=0,1)},function(A){return 2},function(A){return 0==(0|tr[56696])&&0|ib(56696)&&(function(){var A=0,e=0;if(0==(0|tr[56704])&&0|ib(56704)){e=59936;do{for(ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,A=0;3!=(0|A);)ar[e+(A<<2)>>2]=0,A=A+1|0;e=e+12|0}while(60104!=(0|e))}Gu(59936,54302),Gu(59948,54309),Gu(59960,54316),Gu(59972,54324),Gu(59984,54334),Gu(59996,54343),Gu(60008,54350),Gu(60020,54359),Gu(60032,54363),Gu(60044,54367),Gu(60056,54371),Gu(60068,54375),Gu(60080,54379),Gu(60092,54383)}(),ar[15026]=59936),0|ar[15026]},function(A){return 0==(0|tr[56680])&&0|ib(56680)&&(function(){var A=0,e=0;if(0==(0|tr[56688])&&0|ib(56688)){e=59644;do{for(ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,A=0;3!=(0|A);)ar[e+(A<<2)>>2]=0,A=A+1|0;e=e+12|0}while(59932!=(0|e))}Gu(59644,54172),Gu(59656,54180),Gu(59668,54189),Gu(59680,54195),Gu(59692,54201),Gu(59704,54205),Gu(59716,54210),Gu(59728,54215),Gu(59740,54222),Gu(59752,54232),Gu(59764,54240),Gu(59776,54249),Gu(59788,54258),Gu(59800,54262),Gu(59812,54266),Gu(59824,54270),Gu(59836,54201),Gu(59848,54274),Gu(59860,54278),Gu(59872,54282),Gu(59884,54286),Gu(59896,54290),Gu(59908,54294),Gu(59920,54298)}(),ar[14983]=59644),0|ar[14983]},function(A){return 0==(0|tr[56664])&&0|ib(56664)&&(function(){var A=0,e=0;if(0==(0|tr[56672])&&0|ib(56672)){e=59352;do{for(ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,A=0;3!=(0|A);)ar[e+(A<<2)>>2]=0,A=A+1|0;e=e+12|0}while(59640!=(0|e))}Gu(59352,54166),Gu(59364,54169)}(),ar[14910]=59352),0|ar[14910]},function(A){A|=0;var e,r,i=0,f=0;return e=ur=(r=ur)+31&-32,ur=ur+16|0,0==(0|tr[56656])&&0|ib(56656)&&(ar[14835]=0,ar[14836]=0,4294967279<(i=(ar[14837]=0)|Yf(54145))>>>0&&pu(),i>>>0<11?(tr[59351]=i,A=59340):(A=0|hu(f=i+16&-16),ar[14835]=A,ar[14837]=-2147483648|f,ar[14836]=i),wf(A,54145,i),Qf(A+i|(tr[e>>0]=0),e)),ur=r,59340},function(A){A|=0;var e,r,i=0,f=0;return e=ur=(r=ur)+31&-32,ur=ur+16|0,0==(0|tr[56648])&&0|ib(56648)&&(ar[14832]=0,ar[14833]=0,4294967279<(i=(ar[14834]=0)|Yf(54133))>>>0&&pu(),i>>>0<11?(tr[59339]=i,A=59328):(A=0|hu(f=i+16&-16),ar[14832]=A,ar[14834]=-2147483648|f,ar[14833]=i),wf(A,54133,i),Qf(A+i|(tr[e>>0]=0),e)),ur=r,59328},function(A){A|=0;var e,r,i=0,f=0;return e=ur=(r=ur)+31&-32,ur=ur+16|0,0==(0|tr[56640])&&0|ib(56640)&&(ar[14829]=0,ar[14830]=0,4294967279<(i=(ar[14831]=0)|Yf(54124))>>>0&&pu(),i>>>0<11?(tr[59327]=i,A=59316):(A=0|hu(f=i+16&-16),ar[14829]=A,ar[14831]=-2147483648|f,ar[14830]=i),wf(A,54124,i),Qf(A+i|(tr[e>>0]=0),e)),ur=r,59316},function(A){A|=0;var e,r,i=0,f=0;return e=ur=(r=ur)+31&-32,ur=ur+16|0,0==(0|tr[56632])&&0|ib(56632)&&(ar[14826]=0,ar[14827]=0,4294967279<(i=(ar[14828]=0)|Yf(54115))>>>0&&pu(),i>>>0<11?(tr[59315]=i,A=59304):(A=0|hu(f=i+16&-16),ar[14826]=A,ar[14828]=-2147483648|f,ar[14827]=i),wf(A,54115,i),Qf(A+i|(tr[e>>0]=0),e)),ur=r,59304},function(A){return 2},function(A){return 0==(0|tr[56776])&&0|ib(56776)&&(function(){var A=0,e=0;if(0==(0|tr[56784])&&0|ib(56784)){e=60748;do{for(ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,A=0;3!=(0|A);)ar[e+(A<<2)>>2]=0,A=A+1|0;e=e+12|0}while(60916!=(0|e))}Tu(60748,15904),Tu(60760,15932),Tu(60772,15960),Tu(60784,15992),Tu(60796,16032),Tu(60808,16068),Tu(60820,16096),Tu(60832,16132),Tu(60844,16148),Tu(60856,16164),Tu(60868,16180),Tu(60880,16196),Tu(60892,16212),Tu(60904,16228)}(),ar[15229]=60748),0|ar[15229]},function(A){return 0==(0|tr[56760])&&0|ib(56760)&&(function(){var A=0,e=0;if(0==(0|tr[56768])&&0|ib(56768)){e=60456;do{for(ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,A=0;3!=(0|A);)ar[e+(A<<2)>>2]=0,A=A+1|0;e=e+12|0}while(60744!=(0|e))}Tu(60456,15384),Tu(60468,15416),Tu(60480,15452),Tu(60492,15476),Tu(60504,15500),Tu(60516,15516),Tu(60528,15536),Tu(60540,15556),Tu(60552,15584),Tu(60564,15624),Tu(60576,15656),Tu(60588,15692),Tu(60600,15728),Tu(60612,15744),Tu(60624,15760),Tu(60636,15776),Tu(60648,15500),Tu(60660,15792),Tu(60672,15808),Tu(60684,15824),Tu(60696,15840),Tu(60708,15856),Tu(60720,15872),Tu(60732,15888)}(),ar[15186]=60456),0|ar[15186]},function(A){return 0==(0|tr[56744])&&0|ib(56744)&&(function(){var A=0,e=0;if(0==(0|tr[56752])&&0|ib(56752)){e=60164;do{for(ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,A=0;3!=(0|A);)ar[e+(A<<2)>>2]=0,A=A+1|0;e=e+12|0}while(60452!=(0|e))}Tu(60164,15360),Tu(60176,15372)}(),ar[15113]=60164),0|ar[15113]},function(A){A|=0;var e,r=0,i=0,f=0;if(A=ur=(e=ur)+31&-32,ur=ur+16|0,0==(0|tr[56736])&&0|ib(56736)){ar[15038]=0,ar[15039]=0,1073741807<(i=(ar[15040]=0)|Mr(15276))>>>0&&pu();do{if(2<=i>>>0){if(!(1073741823<(r=i+4&-4)>>>0)){f=0|hu(r<<2),ar[15038]=f,ar[15040]=-2147483648|r,ar[15039]=i;break}lA()}else tr[60163]=i,f=60152}while(0);Zf(f,15276,i),ln(f+(i<<2)|(ar[A>>2]=0),A)}return ur=e,60152},function(A){A|=0;var e,r=0,i=0,f=0;if(A=ur=(e=ur)+31&-32,ur=ur+16|0,0==(0|tr[56728])&&0|ib(56728)){ar[15035]=0,ar[15036]=0,1073741807<(i=(ar[15037]=0)|Mr(15228))>>>0&&pu();do{if(2<=i>>>0){if(!(1073741823<(r=i+4&-4)>>>0)){f=0|hu(r<<2),ar[15035]=f,ar[15037]=-2147483648|r,ar[15036]=i;break}lA()}else tr[60151]=i,f=60140}while(0);Zf(f,15228,i),ln(f+(i<<2)|(ar[A>>2]=0),A)}return ur=e,60140},function(A){A|=0;var e,r=0,i=0,f=0;if(A=ur=(e=ur)+31&-32,ur=ur+16|0,0==(0|tr[56720])&&0|ib(56720)){ar[15032]=0,ar[15033]=0,1073741807<(i=(ar[15034]=0)|Mr(15192))>>>0&&pu();do{if(2<=i>>>0){if(!(1073741823<(r=i+4&-4)>>>0)){f=0|hu(r<<2),ar[15032]=f,ar[15034]=-2147483648|r,ar[15033]=i;break}lA()}else tr[60139]=i,f=60128}while(0);Zf(f,15192,i),ln(f+(i<<2)|(ar[A>>2]=0),A)}return ur=e,60128},function(A){A|=0;var e,r=0,i=0,f=0;if(A=ur=(e=ur)+31&-32,ur=ur+16|0,0==(0|tr[56712])&&0|ib(56712)){ar[15029]=0,ar[15030]=0,1073741807<(i=(ar[15031]=0)|Mr(15156))>>>0&&pu();do{if(2<=i>>>0){if(!(1073741823<(r=i+4&-4)>>>0)){f=0|hu(r<<2),ar[15029]=f,ar[15031]=-2147483648|r,ar[15030]=i;break}lA()}else tr[60127]=i,f=60116}while(0);Zf(f,15156,i),ln(f+(i<<2)|(ar[A>>2]=0),A)}return ur=e,60116},function(A){return 127},function(A){return 127},function(A){return 0},function(A){return 127},function(A){return 127},function(A){return 0},function(A){return 2147483647},function(A){return 2147483647},function(A){return 0},function(A){return 2147483647},function(A){return 2147483647},function(A){return 0},function(A){return 0},function(A){return 0},function(A){return 4},function(A){var e,r=0;if(r=0|rf(0|ar[(A=(A|=0)+8|0)>>2]),e=0|function(A,e,r){A|=0,e|=0,r|=0;var i,f=0,n=0,t=0;f=ur=(i=ur)+31&-32,ur=ur+16|0;A:do{if(e){do{if(0|r){if(t=0==(0|A)?f:A,-1<(A=0|tr[e>>0])<<24>>24){ar[t>>2]=255&A,A=A<<24>>24!=0&1;break A}if(n=10488,A=0|tr[e>>0],!(0|ar[ar[n>>2]>>2])){ar[t>>2]=A<<24>>24&57343,A=1;break A}if((A=(255&A)-194|0)>>>0<=50){if(f=e+1|0,n=0|ar[9896+(A<<2)>>2],r>>>0<4&&n&-2147483648>>>((6*r|0)-6|0)|0)break;if(((r=(A=0|cr[f>>0])>>>3)+-16|r+(n>>26))>>>0<=7){if(0<=(0|(A=A+-128|n<<6))){ar[t>>2]=A,A=2;break A}if((f=(0|cr[e+2>>0])-128|0)>>>0<=63){if(0<=(0|(f|=A<<6))){ar[t>>2]=f,A=3;break A}if((A=(0|cr[e+3>>0])-128|0)>>>0<=63){ar[t>>2]=A|f<<6,A=4;break A}}}}}}while(0);ar[(A=10364)>>2]=84,A=-1}else A=0}while(0);return ur=i,0|A}(0,0,4),0|r&&rf(r),e)A=-1;else{if(A=0|ar[A>>2])return r=0|rf(A),A=0|yi(),0|r&&rf(r),1==(0|A)|0;A=1}return 0|A},function(A){return 0},function(A){var e=0;return(A=0|ar[(A|=0)+8>>2])?(e=0|rf(A),A=0|yi(),e&&rf(e)):A=1,0|A},function(A){return 0|tr[(A|=0)+8>>0]},function(A){return 0|tr[(A|=0)+9>>0]},function(A){return 0|ar[(A|=0)+8>>2]},function(A){return 0|ar[(A|=0)+12>>2]},function(A){return 1},function(A){return 1},function(A){return 1},function(A){return 0},function(A){return 0},function(A){return 4},function(A){return 55847},function(A){return 0|(e=(A|=0)+4|0,0|ar[(e|=0)>>2]);var e},function(A){var e,r,i,f,n=0;return ur=(r=ur)+16|0,f=r,is[511&(A|=0)](f),A=0|yc((n=(i=(n=0|tr[f+11>>0])<<24>>24<0)?0|ar[f+4>>2]:255&n)+4|0),ar[A>>2]=n,e=0|ar[f>>2],hb(A+4|0,0|(i?e:f),0|n),ur=(i&&vu(e),r),0|A},function(A){return 0|zb[7&(A|=0)]()},function(A){return 0|zb[7&(A|=0)]()},function(A){var e,r,i,f,n,t=0;if(ur=(n=ur)+16|0,sl(i=n,40+(0|ar[(A|=0)>>2])|0),f=(t=0|ar[(r=i+4|0)>>2])-(A=0|ar[i>>2])>>3,!(e=A))return ur=n,0|f;if((0|t)!=(0|e)){for(;A=t+-8|0,ar[r>>2]=A,(t=0|ar[t+-4>>2])&&(du(t),A=0|ar[r>>2]),(0|A)!=(0|e);)t=A;A=0|ar[i>>2]}return vu(A),ur=n,0|f},function(A){return 1272},function(A){return 1312},function(A){return 1352},Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb,Eb],Hb=[Xb,function(A,e){e|=0;var r,i=0,f=0,n=0;if((i=0|ar[(f=(A|=0)+44|0)>>2])>>>0<(n=0|ar[A+24>>2])>>>0&&(i=ar[f>>2]=n),f=0|ar[(r=A+12|0)>>2],(0|ar[A+8>>2])>>>0>=f>>>0)return 0|(e=-1);if(-1==(0|e))return ar[r>>2]=f+-1,ar[A+16>>2]=i,(e=0)|e;if(16&ar[A+48>>2])n=255&e,f=f+-1|0;else if((n=255&e)<<24>>24!=(0|tr[(f=f+-1|0)>>0]))return 0|(e=-1);return ar[r>>2]=f,ar[A+16>>2]=i,tr[f>>0]=n,0|e},function(A,e){var r,i,f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;if(ur=(o=ur)+16|0,i=o,-1==(0|(e|=0)))return ur=o,(w=0)|w;if(n=(A|=0)+8|0,t=(0|ar[(f=A+12|0)>>2])-(0|ar[n>>2])|0,(0|(d=0|ar[(w=A+24|0)>>2]))==(0|(a=0|ar[(r=A+28|0)>>2]))){if(!(16&ar[(s=A+48|0)>>2]))return ur=o,0|(w=-1);b=0|ar[(u=A+20|0)>>2],k=(0|ar[(h=A+44|0)>>2])-b|0,_u(l=A+32|0,0),Vu(l,c=(0|tr[(a=l+11|0)>>0])<0?(2147483647&ar[A+40>>2])-1|0:10,0),(a=0|tr[a>>0])<<24>>24<0?(c=0|ar[l>>2],a=0|ar[A+36>>2]):(c=l,a&=255),a=c+a|0,ar[u>>2]=c,ar[r>>2]=a,d=c+(d-b)|0,ar[w>>2]=d,c=c+k|0,ar[h>>2]=c,l=k=h,b=a}else s=A+48|0,c=0|ar[(l=k=c=A+44|0)>>2],b=a;return u=d+1|0,ar[i>>2]=u,c=0|ar[(u>>>0<c>>>0?l:i)>>2],ar[k>>2]=c,8&ar[s>>2]|0&&((0|tr[(a=A+32|0)+11>>0])<0&&(a=0|ar[a>>2]),ar[n>>2]=a,ar[f>>2]=a+t,ar[A+16>>2]=c),(0|d)==(0|b)?(w=0|Hb[31&ar[52+(0|ar[A>>2])>>2]](A,255&e),ur=o,0|w):(ar[w>>2]=u,tr[d>>0]=e,ur=o,0|(w=255&e))},function(A,e){return 0},function(A,e){e|=0;var r=0;return r=0|ar[(A|=0)+376156>>2],(0|ar[A+376160>>2])-r>>2>>>0<=e>>>0?(r=0)|r:0|(r=0|ar[r+(e<<2)>>2])},function(A,e){return(0|(e|=0))<=-1?(e=0)|e:0|(e=((0|ar[(A|=0)+376160>>2])-(0|ar[A+376156>>2])>>2|0)>(0|e))},function(A,e){return-1},function(A,e){return-1},function(A,e){return-1},function(A,e){return-1},function(A,e){A|=0,e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;f=ur=(n=ur)+31&-32,ur=ur+32|0,r=16+f|0,o=8+f|0,i=4+f|0;do{if(0|Uf(e,-1))t=15;else{if(s=0|pf(e),ar[o>>2]=s,s=A+32|0,0|tr[A+44>>0]){if(1==(0|Ui(o,4,1,0|ar[s>>2]))){t=15;break}A=-1;break}for(u=o+4|0,b=A+36|0,a=A+40|0,c=8+(ar[i>>2]=r)|0,l=r,A=o;;){if(t=0|ar[b>>2],o=1==(0|(t=0|es[15&ar[12+(0|ar[t>>2])>>2]](t,0|ar[a>>2],A,u,f,r,c,i))),(0|ar[f>>2])==(0|A)){t=14;break}if(3==(0|t)){if(1!=(0|Ui(A,1,1,0|ar[s>>2]))){t=14;break}}else{if(1!=(1|t)){t=14;break}if((0|Ui(r,1,t=(0|ar[i>>2])-l|0,0|ar[s>>2]))!=(0|t)){t=14;break}A=o?0|ar[f>>2]:A}if(!o){t=13;break}}if(13==(0|t)){t=15;break}if(14==(0|t)){A=-1;break}}}while(0);return 15==(0|t)&&(A=0|function(A){0|Uf(A|=0,-1)&&(A=0);return 0|A}(e)),ur=n,0|A},function(A,e){A|=0,e|=0;var r,i,f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;f=ur=(n=ur)+31&-32,ur=ur+32|0,r=16+f|0,o=8+f|0,i=4+f|0;do{if(0|Mf(e,-1))t=15;else{if(s=0|vf(e),tr[o>>0]=s,s=A+32|0,0|tr[A+44>>0]){if(1==(0|Ui(o,1,1,0|ar[s>>2]))){t=15;break}A=-1;break}for(u=o+1|0,b=A+36|0,a=A+40|0,c=8+(ar[i>>2]=r)|0,l=r,A=o;;){if(t=0|ar[b>>2],o=1==(0|(t=0|es[15&ar[12+(0|ar[t>>2])>>2]](t,0|ar[a>>2],A,u,f,r,c,i))),(0|ar[f>>2])==(0|A)){t=14;break}if(3==(0|t)){if(1!=(0|Ui(A,1,1,0|ar[s>>2]))){t=14;break}}else{if(1!=(1|t)){t=14;break}if((0|Ui(r,1,t=(0|ar[i>>2])-l|0,0|ar[s>>2]))!=(0|t)){t=14;break}A=o?0|ar[f>>2]:A}if(!o){t=13;break}}if(13==(0|t)){t=15;break}if(14==(0|t)){A=-1;break}}}while(0);return 15==(0|t)&&(A=0|function(A){0|Mf(A|=0,-1)&&(A=0);return 0|A}(e)),ur=n,0|A},function(A,e){var r,i,f,n,t,o=0,a=0,c=0,l=0;c=ur=(t=ur)+31&-32,ur=ur+32|0,r=c+16|0,i=c+8|0,a=c+4|0,l=0|Uf(e|=0,-1),o=0!=(0|tr[(n=(A|=0)+52|0)>>0]),f=A+48|0;do{if(l)o?o=e:(l=1&(1^(0|Uf(o=0|ar[f>>2],-1))),tr[n>>0]=l);else{if(o){switch(l=0|pf(0|ar[f>>2]),ar[a>>2]=l,l=0|ar[A+36>>2],0|es[15&ar[12+(0|ar[l>>2])>>2]](l,0|ar[A+40>>2],a,a+4|0,c,r,8+r|0,i)){case 1:case 2:c=10;break;case 3:tr[r>>0]=ar[f>>2],ar[i>>2]=1+r,c=7;break;default:c=7}A:do{if(7==(0|c))for(o=A+32|0;;){if((a=0|ar[i>>2])>>>0<=r>>>0){a=1,o=0;break A}if(l=a+-1|0,ar[i>>2]=l,-1==(0|uf(0|tr[l>>0],0|ar[o>>2]))){c=10;break}}}while(0);if(10==(0|c)&&(a=0,o=-1),!a)break}ar[f>>2]=e,tr[n>>0]=1,o=e}}while(0);return ur=t,0|o},function(A,e){var r,i,f,n,t,o=0,a=0,c=0,l=0;c=ur=(t=ur)+31&-32,ur=ur+32|0,r=c+16|0,i=c+4|0,a=c+8|0,l=0|Mf(e|=0,-1),o=0!=(0|tr[(n=(A|=0)+52|0)>>0]),f=A+48|0;do{if(l)o?o=e:(l=1&(1^(0|Mf(o=0|ar[f>>2],-1))),tr[n>>0]=l);else{if(o){switch(l=0|vf(0|ar[f>>2]),tr[a>>0]=l,l=0|ar[A+36>>2],0|es[15&ar[12+(0|ar[l>>2])>>2]](l,0|ar[A+40>>2],a,a+1|0,c,r,8+r|0,i)){case 1:case 2:c=10;break;case 3:tr[r>>0]=ar[f>>2],ar[i>>2]=1+r,c=7;break;default:c=7}A:do{if(7==(0|c))for(o=A+32|0;;){if((a=0|ar[i>>2])>>>0<=r>>>0){a=1,o=0;break A}if(l=a+-1|0,ar[i>>2]=l,-1==(0|uf(0|tr[l>>0],0|ar[o>>2]))){c=10;break}}}while(0);if(10==(0|c)&&(a=0,o=-1),!a)break}ar[f>>2]=e,tr[n>>0]=1,o=e}}while(0);return ur=t,0|o},function(A,e){return-1<(e|=0)<<24>>24&&(e=(0|Tl())+((255&e)<<2)|0,e=255&ar[e>>2]),0|e},function(A,e){return-1<(e|=0)<<24>>24&&(e=(0|Ml())+(e<<24>>24<<2)|0,e=255&ar[e>>2]),0|e},function(A,e){return 0|(e|=0)},function(A,e){return(e|=0)>>>0<128&&(e=(0|Tl())+(e<<2)|0,e=0|ar[e>>2]),0|e},function(A,e){return(e|=0)>>>0<128&&(e=(0|Ml())+(e<<2)|0,e=0|ar[e>>2]),0|e},function(A,e){return(e|=0)<<24>>24|0},function(A,e){return e|=0,0|jb[127&(A|=0)](e)},function(A,e){var r,i;return e|=0,ur=(r=ur)+16|0,i=r,fs[63&(A|=0)](i,e),fA(0|ar[i>>2]),e=0|ar[i>>2],iA(0|e),ur=r,0|e},function(A,e){return 0|ar[(e|=0)+(0|ar[(A|=0)>>2])>>2]},function(A,e){return 0|ar[(e|=0)+(0|ar[(A|=0)>>2])>>2]},Xb,Xb,Xb,Xb,Xb,Xb,Xb,Xb],xb=[Wb,function(A,e,r){var i;return e|=0,r|=0,0|((0|(i=0|ar[(A=(A|=0)+8|0)+4>>2]))<(0|r)|((0|i)==(0|r)?(0|ar[A>>2])>>>0<e>>>0:0)?2:0)},function(A,e,r){e|=0,r|=0;var i,f,n,t=0,o=0,a=0;return t=0|tb(0|(f=0|ar[(t=i=(A|=0)+16|0)>>2]),0|ar[t+4>>2],0|r,0),a=D,(0|(o=0|ar[4+(n=A+8|0)>>2]))<(0|a)|((0|a)==(0|o)?t>>>0>(0|ar[n>>2])>>>0:0)?(a=0)|a:(hb(0|e,(0|ar[A+4>>2])+f|0,0|r),o=0|tb(0|ar[(o=i)>>2],0|ar[o+4>>2],0|r,0),ar[(a=i)>>2]=o,ar[a+4>>2]=D,0|(a=1))},function(A,e,r){e|=0;var i,f=0;return(0|(r|=0))<0|((0|(f=0|ar[4+(i=(A|=0)+8|0)>>2]))<(0|r)|((0|f)==(0|r)?(0|ar[i>>2])>>>0<e>>>0:0))?(f=0)|f:(ar[(f=A+16|0)>>2]=e,ar[f+4>>2]=r,0|(f=1))},function(A,e,r){return 0|(A|=0)},function(A,e,r){e|=0,r|=0;var i,f,n=0,t=0,o=0,a=0;for(i=(A|=0)+12|0,f=A+16|0,o=0;!((0|r)<=(0|o));)if((n=0|ar[i>>2])>>>0<(t=0|ar[f>>2])>>>0)wf(e,n,t=(0|(a=r-o|0))<(0|(t=t-n|0))?a:t),ar[i>>2]=(0|ar[i>>2])+t,e=e+t|0,o=t+o|0;else{if(-1==(0|(n=0|jb[127&ar[40+(0|ar[A>>2])>>2]](A))))break;a=0|vf(n),tr[e>>0]=a,e=e+1|0,o=o+1|0}return 0|o},function(A,e,r){e|=0,r|=0;var i,f,n=0,t=0,o=0,a=0;for(i=(A|=0)+24|0,f=A+28|0,n=0;!((0|r)<=(0|n));)if((t=0|ar[i>>2])>>>0<(o=0|ar[f>>2])>>>0)wf(t,e,o=(0|(a=r-n|0))<(0|(o=o-t|0))?a:o),ar[i>>2]=(0|ar[i>>2])+o,e=e+o|0,n=o+n|0;else{if(o=0|ar[52+(0|ar[A>>2])>>2],a=0|hf(0|tr[e>>0]),-1==(0|Hb[31&o](A,a)))break;e=e+1|0,n=n+1|0}return 0|n},function(A,e,r){e|=0,r|=0;var i,f,n=0;return n=ur=(f=ur)+31&-32,ur=ur+32|0,i=n,ar[(A|=0)+36>>2]=10,0==(64&ar[A>>2]|0)&&(ar[i>>2]=ar[A+60>>2],ar[i+4>>2]=21523,ar[i+8>>2]=n+16,0|Y(54,0|i))&&(tr[A+75>>0]=-1),n=0|Gc(A,e,r),ur=f,0|n},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n=0;return n=ur=(i=ur)+31&-32,ur=ur+32|0,n=(f=n)+20|0,ar[f>>2]=ar[A+60>>2],ar[f+4>>2]=0,ar[f+8>>2]=e,ar[f+12>>2]=n,ar[f+16>>2]=r,A=(0|Ic(0|R(140,0|f)))<0?ar[n>>2]=-1:0|ar[n>>2],ur=i,0|A},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t=0,o=0,a=0,c=0;return c=ur=(f=ur)+31&-32,ur=ur+32|0,ar[(c=(t=c)+16|0)>>2]=e,o=c+4|0,n=0|ar[(i=A+48|0)>>2],ar[o>>2]=r-(0!=(0|n)&1),a=A+44|0,ar[c+8>>2]=ar[a>>2],ar[c+12>>2]=n,ar[t>>2]=ar[A+60>>2],ar[t+4>>2]=c,ar[t+8>>2]=2,1<=(0|(t=0|Ic(0|N(145,0|t))))?(c=0|ar[o>>2])>>>0<t>>>0&&(o=0|ar[a>>2],ar[(a=A+4|0)>>2]=o,ar[A+8>>2]=o+(t-c),t=(0|ar[i>>2]&&(ar[a>>2]=o+1,tr[e+(r+-1)>>0]=0|tr[o>>0]),r)):ar[A>>2]=ar[A>>2]|48&t^16,ur=f,0|t},Gc,function(A,e,r){var i,f;return e|=0,r|=0,hb(0|(f=0|ar[(i=(A|=0)+20|0)>>2]),0|e,0|(A=r>>>0<(A=(0|ar[A+16>>2])-f|0)>>>0?r:A)),ar[i>>2]=(0|ar[i>>2])+A,0|r},function(A,e,r){return 0|(A|=0)},function(A,e,r){e|=0,r|=0;var i,f,n=0,t=0,o=0,a=0;for(i=(A|=0)+12|0,f=A+16|0,o=0;!((0|r)<=(0|o));)if((n=0|ar[i>>2])>>>0<(t=0|ar[f>>2])>>>0)Zf(e,n,t=(0|(a=r-o|0))<(0|(t=t-n>>2))?a:t),ar[i>>2]=(0|ar[i>>2])+(t<<2),e=e+(t<<2)|0,o=t+o|0;else{if(-1==(0|(n=0|jb[127&ar[40+(0|ar[A>>2])>>2]](A))))break;a=0|pf(n),ar[e>>2]=a,e=e+4|0,o=o+1|0}return 0|o},function(A,e,r){e|=0,r|=0;var i,f,n=0,t=0,o=0,a=0;for(i=(A|=0)+24|0,f=A+28|0,n=0;!((0|r)<=(0|n));)if((t=0|ar[i>>2])>>>0<(o=0|ar[f>>2])>>>0)Zf(t,e,o=(0|(a=r-n|0))<(0|(o=o-t>>2))?a:o),ar[i>>2]=(0|ar[i>>2])+(o<<2),e=e+(o<<2)|0,n=o+n|0;else{if(o=0|ar[52+(0|ar[A>>2])>>2],a=0|gf(0|ar[e>>2]),-1==(0|Hb[31&o](A,a)))break;e=e+4|0,n=n+1|0}return 0|n},function(A,e,r){A|=0,e|=0,r|=0;var i=0,f=0,n=0;A:do{if(0|tr[A+44>>0])i=0|Ui(e,4,r,0|ar[A+32>>2]);else for(i=0;;){if((0|r)<=(0|i))break A;if(n=0|ar[52+(0|ar[A>>2])>>2],f=0|gf(0|ar[e>>2]),-1==(0|(f=0|Hb[31&n](A,f))))break A;i=i+1|0,e=e+4|0}}while(0);return 0|i},function(A,e,r){A|=0,e|=0,r|=0;var i=0,f=0,n=0;A:do{if(0|tr[A+44>>0])i=0|Ui(e,1,r,0|ar[A+32>>2]);else for(i=0;;){if((0|r)<=(0|i))break A;if(n=0|ar[52+(0|ar[A>>2])>>2],f=0|hf(0|tr[e>>0]),-1==(0|(f=0|Hb[31&n](A,f))))break A;i=i+1|0,e=e+1|0}}while(0);return 0|i},function(A,e,r){A|=0,e|=0,r|=0;var i=0,f=0;for(A=0;(0|e)!=(0|r);)A=((f=-268435456&(i=(0|tr[e>>0])+(A<<4)|0))>>>24|f)^i,e=e+1|0;return 0|A},function(A,e,r){A|=0,e|=0,r|=0;var i=0,f=0;for(A=0;(0|e)!=(0|r);)A=((f=-268435456&(i=(0|ar[e>>2])+(A<<4)|0))>>>24|f)^i,e=e+4|0;return 0|A},function(A,e,r){return r|=0,(r=0|cf((0|tr[(e|=0)+11>>0])<0&&ar[e>>2]))>>>(-1!=(0|r)&1)|0},function(A,e,r){return r|=0,(r=0|cf((0|tr[(e|=0)+11>>0])<0&&ar[e>>2]))>>>(-1!=(0|r)&1)|0},function(A,e,r){for(A|=0,e|=0,r|=0;(0|e)!=(0|r);)-1<(A=0|tr[e>>0])<<24>>24&&(A=0|Tl(),A=255&ar[A+(tr[e>>0]<<2)>>2]),tr[e>>0]=A,e=e+1|0;return 0|r},function(A,e,r){for(A|=0,e|=0,r|=0;(0|e)!=(0|r);)-1<(A=0|tr[e>>0])<<24>>24&&(A=0|Ml(),A=255&ar[A+(tr[e>>0]<<2)>>2]),tr[e>>0]=A,e=e+1|0;return 0|r},function(A,e,r){return r|=0,0|(-1<(e|=0)<<24>>24?e:r)},function(A,e,r){return A|=0,e|=0,0|(A=(r|=0)>>>0<128?(A=(0|Ul())+(r<<1)|0,(or[A>>1]&e)<<16>>16!=0):0)},function(A,e,r){for(A|=0,e|=0,r|=0;(0|e)!=(0|r);)(A=0|ar[e>>2])>>>0<128&&(A=0|Tl(),A=0|ar[A+(ar[e>>2]<<2)>>2]),ar[e>>2]=A,e=e+4|0;return 0|r},function(A,e,r){for(A|=0,e|=0,r|=0;(0|e)!=(0|r);)(A=0|ar[e>>2])>>>0<128&&(A=0|Ml(),A=0|ar[A+(ar[e>>2]<<2)>>2]),ar[e>>2]=A,e=e+4|0;return 0|r},function(A,e,r){return r|=0,0|((e|=0)>>>0<128?255&e:r)},function(A,e,r){r|=0;var i,f,n=0,t=0;if(i=ur=(f=ur)+31&-32,ur=ur+64|0,0|xu(A|=0,e|=0))e=1;else if(0!=(0|e)&&0!=(0|(t=0|qu(e,3960,3944,0)))){for(n=(e=4+i|0)+52|0;(0|(e=e+4|(ar[e>>2]=0)))<(0|n););ar[i>>2]=t,ar[8+i>>2]=A,ar[12+i>>2]=-1,ar[48+i>>2]=1,ts[31&ar[28+(0|ar[t>>2])>>2]](t,i,0|ar[r>>2],1),e=1==(0|ar[24+i>>2])?(ar[r>>2]=ar[16+i>>2],1):0}else e=0;return ur=f,0|e},function(A,e,r){return 0|xu(A|=0,e|=0)},function(A,e,r){A|=0,e|=0;var i,f,n=0,t=0,o=0,a=0;if(i=ur=(f=ur)+31&-32,ur=ur+64|0,ar[(r|=0)>>2]=ar[ar[r>>2]>>2],0|function(A,e){A=0|xu(A|=0,e|=0)?1:0|xu(e,4088);return 0|A}(A,e))A=1;else if(0!=(0|e)&&0!=(0|(n=0|qu(e,3960,4048,0)))&&0==(ar[n+8>>2]&~ar[A+8>>2]|0))if(e=n+12|0,0|xu(0|ar[(A=A+12|0)>>2],0|ar[e>>2])||0|xu(0|ar[A>>2],4080))A=1;else if(0!=(0|(A=0|ar[A>>2]))&&0!=(0|(o=0|qu(A,3960,3944,0)))&&0!=(0|(t=0|ar[e>>2]))&&0!=(0|(a=0|qu(t,3960,3944,0)))){for(e=(A=4+i|0)+52|0;(0|(A=A+4|(ar[A>>2]=0)))<(0|e););ar[i>>2]=a,ar[8+i>>2]=o,ar[12+i>>2]=-1,ar[48+i>>2]=1,ts[31&ar[28+(0|ar[a>>2])>>2]](a,i,0|ar[r>>2],1),A=1==(0|ar[24+i>>2])?(ar[r>>2]=ar[16+i>>2],1):0}else A=0;else A=0;return ur=f,0|A},function(A,e,r){return 0|xu(A|=0,e|=0)},function(A,e,r){A|=0,e|=0;var i,f,n,t,o,a=0;return ur=(o=ur)+32|0,n=o+12|0,t=o,i=(r|=0)+4|0,f=0|ar[r>>2],ar[t>>2]=0,ar[t+4>>2]=0,4294967279<f>>>(ar[t+8>>2]=0)&&pu(),f>>>0<11?(tr[t+11>>0]=f)?(r=t,a=6):r=t:(r=0|hu(a=16+f&-16),ar[t>>2]=r,ar[t+8>>2]=-2147483648|a,ar[t+4>>2]=f,a=6),6==(0|a)&&hb(0|r,0|i,0|f),tr[r+f>>0]=0,ns[127&A](n,e,t),r=0|hu(12),ar[r>>2]=ar[n>>2],ar[r+4>>2]=ar[4+n>>2],ar[r+8>>2]=ar[8+n>>2],ur=(0<=(0|tr[t+11>>0])||vu(0|ar[t>>2]),o),0|r},function(A,e,r){var i,f;return e|=0,r|=0,ur=(i=ur)+16|0,f=i,ns[127&(A|=0)](f,e,r),fA(0|ar[f>>2]),r=0|ar[f>>2],iA(0|r),ur=i,0|r},function(A,e,r){return 0|function(A,e,r){e|=0,r|=0;var i,f,n,t=0;return f=0|ar[(i=(A=A|0)+84|0)>>2],t=0|Rc(f,0,n=r+256|0),hb(0|e,0|f,0|(r=(t=0==(0|t)?n:t-f|0)>>>0<r>>>0?t:r)),ar[A+4>>2]=f+r,e=f+t|0,ar[A+8>>2]=e,ar[i>>2]=e,0|r}(A|=0,e|=0,r|=0)},Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb,Wb],Pb=[function(A,e,r,i){return Z(4),0},function(A,e,r,i){A|=0,r|=0,i|=0;var f,n,t,o=0,a=0,c=0;if(A=0|ar[(e|=0)+4>>2],a=(0|(i=0|ar[e+8>>2]))/(0|ar[r+5784>>2])|0,c=(c=A+-1+(e=0|ar[e+12>>2])|0)-((0|c)%(0|e)|0)|0,e=(A=((0|A)/(0|ar[r+5780>>2])|0)-1+e|0)-((0|A)%(0|e)|0)|0,9<=((A=0|ar[r+5760>>2])+-8|0)>>>0&&sr(36609,36663,115,36672),9<=((o=0|ar[r+5768>>2])+-8|0)>>>0&&sr(36695,36663,116,36672),n=0==(0|(f=0|Wc(16,0|br(0|br(c,i),(A+7|0)/8|0)))),t=f,0|ar[r+20>>2]){if(0==(0|(i=o=0|Wc(16,a=0|br(0|br(e,a),(o+7|0)/8|0))))|0==(0|(A=a=0|Wc(16,a)))|n)return n||Bc(f),0|o&&Bc(o),a&&Bc(a),(r=0)|r}else{if(n)return(r=0)|r;A=i=e=0}return ar[r+4>>2]=t,ar[r+10492>>2]=0,ar[r+40>>2]=c,ar[r+8>>2]=i,ar[r+10496>>2]=0,ar[r+12>>2]=A,ar[r+10500>>2]=0,ar[r+44>>2]=e,0|(r=1)},function(A,e,r,i){for(e|=0,r|=0,i|=0;(0|e)!=(0|r);)tr[i>>0]=0|tr[e>>0],i=i+1|0,e=e+1|0;return 0|r},function(A,e,r,i){for(A|=0,e|=0,r|=0,i|=0;(0|e)!=(0|r);)A=(0|ar[e>>2])>>>0<128?(A=0|Ul(),0|lr[A+(ar[e>>2]<<1)>>1]):0,or[i>>1]=A,i=i+2|0,e=e+4|0;return 0|r},function(A,e,r,i){for(A|=0,e|=0,r|=0,i|=0;;){if((0|r)==(0|i)){r=i;break}if((0|ar[r>>2])>>>0<128&&(A=0|Ul(),(or[A+(ar[r>>2]<<1)>>1]&e)<<16>>16))break;r=r+4|0}return 0|r},function(A,e,r,i){for(A|=0,e|=0,r|=0,i|=0;;){if((0|r)==(0|i)){r=i;break}if(128<=(0|ar[r>>2])>>>0)break;if(A=0|Ul(),!((or[A+(ar[r>>2]<<1)>>1]&e)<<16>>16))break;r=r+4|0}return 0|r},function(A,e,r,i){for(e|=0,r|=0,i|=0;(0|e)!=(0|r);)ar[i>>2]=tr[e>>0],i=i+4|0,e=e+1|0;return 0|r},function(A,e,r,i){var f,n;return e|=0,r|=0,i|=0,ur=(f=ur)+16|0,n=f,ts[31&(A|=0)](n,e,r,i),fA(0|ar[n>>2]),i=0|ar[n>>2],iA(0|i),ur=f,0|i}],Lb=[Ib,function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f=+f;var n,t,o,a,c,l,u,b,s,d,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0;return m=ur=(d=ur)+31&-32,ur=ur+176|0,u=m+72|0,o=m+48|0,t=m+32|0,h=m+24|0,k=m+8|0,c=(n=m)+134|0,a=m+68|0,l=m+76|0,s=m+64|0,b=m+60|0,m=m+56|0,ar[(w=n)>>2]=37,w=(ar[w+4>>2]=0)|dr(n+1|0,79659,0|ar[r+4>>2]),ar[a>>2]=c,A=0|dn(),29<(0|(A=w?(ar[k>>2]=ar[r+8>>2],Q[k+8>>3]=f,0|fr(c,30,A,n,k)):(Q[h>>3]=f,0|fr(c,30,A,n,h))))?(A=0|dn(),k=w?(ar[t>>2]=ar[r+8>>2],Q[8+t>>3]=f,0|kr(a,A,n,t)):(Q[o>>3]=f,0|kr(a,A,n,o)),(A=0|ar[a>>2])?(v=k,y=p=A):gu()):(v=A,y=(p=0)|ar[a>>2]),h=0|nr(y,k=y+v|0,r),(0|y)!=(0|c)?(A=0|yc(v<<1))?Z=g=A:gu():(g=l,Z=0),Tf(u,r),hr(y,h,k,g,s,b,u),bn(u),ar[m>>2]=ar[e>>2],e=0|ar[s>>2],y=0|ar[b>>2],ar[u>>2]=ar[m>>2],y=0|PA(u,g,e,y,r,i),Bc(Z),Bc(p),ur=d,0|y},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f=+f;var n,t,o,a,c,l,u,b,s,d,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0;return m=ur=(d=ur)+31&-32,ur=ur+176|0,u=m+72|0,o=m+48|0,t=m+32|0,h=m+24|0,k=m+8|0,c=(n=m)+134|0,a=m+68|0,l=m+76|0,s=m+64|0,b=m+60|0,m=m+56|0,ar[(w=n)>>2]=37,w=(ar[w+4>>2]=0)|dr(n+1|0,53897,0|ar[r+4>>2]),ar[a>>2]=c,A=0|dn(),29<(0|(A=w?(ar[k>>2]=ar[r+8>>2],Q[k+8>>3]=f,0|fr(c,30,A,n,k)):(Q[h>>3]=f,0|fr(c,30,A,n,h))))?(A=0|dn(),k=w?(ar[t>>2]=ar[r+8>>2],Q[8+t>>3]=f,0|kr(a,A,n,t)):(Q[o>>3]=f,0|kr(a,A,n,o)),(A=0|ar[a>>2])?(v=k,y=p=A):gu()):(v=A,y=(p=0)|ar[a>>2]),h=0|nr(y,k=y+v|0,r),(0|y)!=(0|c)?(A=0|yc(v<<1))?Z=g=A:gu():(g=l,Z=0),Tf(u,r),hr(y,h,k,g,s,b,u),bn(u),ar[m>>2]=ar[e>>2],e=0|ar[s>>2],y=0|ar[b>>2],ar[u>>2]=ar[m>>2],y=0|PA(u,g,e,y,r,i),Bc(Z),Bc(p),ur=d,0|y},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f=+f;var n,t,o,a,c,l,u,b,s,d,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0;m=ur=(d=ur)+31&-32,ur=ur+336|0,u=m+300|0,o=m+48|0,t=m+32|0,h=m+24|0,k=m+8|0,c=(n=m)+304|0,a=m+296|0,l=m+68|0,s=m+64|0,b=m+60|0,m=m+56|0,ar[(w=n)>>2]=37,w=(ar[w+4>>2]=0)|dr(n+1|0,79659,0|ar[r+4>>2]),ar[a>>2]=c,A=0|dn(),29<(0|(A=w?(ar[k>>2]=ar[r+8>>2],Q[k+8>>3]=f,0|fr(c,30,A,n,k)):(Q[h>>3]=f,0|fr(c,30,A,n,h))))?(A=0|dn(),k=w?(ar[t>>2]=ar[r+8>>2],Q[8+t>>3]=f,0|kr(a,A,n,t)):(Q[o>>3]=f,0|kr(a,A,n,o)),(A=0|ar[a>>2])?(v=k,Z=y=A):gu()):(v=A,Z=(y=0)|ar[a>>2]),h=0|nr(Z,k=Z+v|0,r);do{if((0|Z)!=(0|c)){if(A=0|yc(v<<3)){p=0,B=g=A;break}gu()}else g=l,p=1,B=0}while(0);return Tf(u,r),Zr(Z,h,k,g,s,b,u),bn(u),ar[m>>2]=ar[e>>2],Z=0|ar[s>>2],A=0|ar[b>>2],ar[u>>2]=ar[m>>2],A=0|mr(u,g,Z,A,r,i),ar[e>>2]=A,p||Bc(B),Bc(y),ur=d,0|A},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f=+f;var n,t,o,a,c,l,u,b,s,d,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0;m=ur=(d=ur)+31&-32,ur=ur+336|0,u=m+300|0,o=m+48|0,t=m+32|0,h=m+24|0,k=m+8|0,c=(n=m)+304|0,a=m+296|0,l=m+68|0,s=m+64|0,b=m+60|0,m=m+56|0,ar[(w=n)>>2]=37,w=(ar[w+4>>2]=0)|dr(n+1|0,53897,0|ar[r+4>>2]),ar[a>>2]=c,A=0|dn(),29<(0|(A=w?(ar[k>>2]=ar[r+8>>2],Q[k+8>>3]=f,0|fr(c,30,A,n,k)):(Q[h>>3]=f,0|fr(c,30,A,n,h))))?(A=0|dn(),k=w?(ar[t>>2]=ar[r+8>>2],Q[8+t>>3]=f,0|kr(a,A,n,t)):(Q[o>>3]=f,0|kr(a,A,n,o)),(A=0|ar[a>>2])?(v=k,Z=y=A):gu()):(v=A,Z=(y=0)|ar[a>>2]),h=0|nr(Z,k=Z+v|0,r);do{if((0|Z)!=(0|c)){if(A=0|yc(v<<3)){p=0,B=g=A;break}gu()}else g=l,p=1,B=0}while(0);return Tf(u,r),Zr(Z,h,k,g,s,b,u),bn(u),ar[m>>2]=ar[e>>2],Z=0|ar[s>>2],A=0|ar[b>>2],ar[u>>2]=ar[m>>2],A=0|mr(u,g,Z,A,r,i),ar[e>>2]=A,p||Bc(B),Bc(y),ur=d,0|A},Ib,Ib,Ib],Kb=[Cb,function(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n=0,t=0;for(A=e|=0;;){if((0|i)==(0|f)){t=7;break}if((0|A)==(0|r)){A=-1;break}if((e=0|tr[A>>0])<<24>>24<(n=0|tr[i>>0])<<24>>24){A=-1;break}if(n<<24>>24<e<<24>>24){A=1;break}i=i+1|0,A=A+1|0}return 7==(0|t)&&(A=(0|A)!=(0|r)&1),0|A},function(A,e,r,i,f){A|=0,r|=0,i|=0,f|=0;var n=0,t=0;for(A=e|=0;;){if((0|i)==(0|f)){t=7;break}if((0|A)==(0|r)){A=-1;break}if((0|(e=0|ar[A>>2]))<(0|(n=0|ar[i>>2]))){A=-1;break}if((0|n)<(0|e)){A=1;break}i=i+4|0,A=A+4|0}return 7==(0|t)&&(A=(0|A)!=(0|r)&1),0|A},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0;if(o=ur=(t=ur)+31&-32,ur=ur+16|0,n=o+4|0,1&ar[(r|=0)+4>>2]){for(Tf(n,r),A=0|un(n,59248),bn(n),r=0|ar[A>>2],f?fs[63&ar[r+24>>2]](n,A):fs[63&ar[r+28>>2]](n,A),(A=0|tr[(a=11+n|0)>>0])<<24>>24<0?(r=A,A=0|ar[n>>2],c=8):f=n;8==(0|c)&&(f=A,A=r),(0|f)!=(((c=A<<24>>24<0)?0|ar[n>>2]:n)+(c?0|ar[4+n>>2]:255&A)|0);)A=0|tr[f>>0],0|(r=0|ar[e>>2])&&0|Mf(A=(0|(o=0|ar[(i=r+24|0)>>2]))==(0|ar[r+28>>2])?(c=0|ar[52+(0|ar[r>>2])>>2],A=0|hf(A),0|Hb[31&c](r,A)):(ar[i>>2]=o+1,0|hf(tr[o>>0]=A)),-1)&&(ar[e>>2]=0),r=0|tr[a>>0],A=f+1|0,c=8;A=0|ar[e>>2],Bu(n)}else c=0|ar[24+(0|ar[A>>2])>>2],ar[o>>2]=ar[e>>2],ar[n>>2]=ar[o>>2],A=0|Kb[31&c](A,n,r,i,1&f);return ur=t,0|A},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l,u=0,b=0;return u=ur=(A=ur)+31&-32,ur=ur+64|0,b=(t=u)+52|0,c=u+39|0,n=u+16|0,a=u+12|0,o=u+4|0,u=u+8|0,tr[b>>0]=0|tr[53902],tr[b+1>>0]=0|tr[53903],tr[b+2>>0]=0|tr[53904],tr[b+3>>0]=0|tr[53905],tr[b+4>>0]=0|tr[53906],tr[b+5>>0]=0|tr[53907],wr(b+1|0,53908,1,0|ar[r+4>>2]),l=0|dn(),ar[t>>2]=f,b=0|nr(c,f=c+(0|fr(c,13,l,b,t))|0,r),Tf(t,r),vr(c,b,f,n,a,o,t),bn(t),ar[u>>2]=ar[e>>2],e=0|ar[a>>2],f=0|ar[o>>2],ar[t>>2]=ar[u>>2],f=0|PA(t,n,e,f,r,i),ur=A,0|f},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l,u=0,b=0;return u=ur=(A=ur)+31&-32,ur=ur+64|0,b=(t=u)+52|0,c=u+40|0,n=u+16|0,a=u+12|0,o=u+4|0,u=u+8|0,tr[b>>0]=0|tr[53902],tr[b+1>>0]=0|tr[53903],tr[b+2>>0]=0|tr[53904],tr[b+3>>0]=0|tr[53905],tr[b+4>>0]=0|tr[53906],tr[b+5>>0]=0|tr[53907],wr(b+1|0,53908,0,0|ar[r+4>>2]),l=0|dn(),ar[t>>2]=f,b=0|nr(c,f=c+(0|fr(c,12,l,b,t))|0,r),Tf(t,r),vr(c,b,f,n,a,o,t),bn(t),ar[u>>2]=ar[e>>2],e=0|ar[a>>2],f=0|ar[o>>2],ar[t>>2]=ar[u>>2],f=0|PA(t,n,e,f,r,i),ur=A,0|f},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0;return u=ur=(A=ur)+31&-32,ur=ur+80|0,l=(o=u)+68|0,n=u+48|0,t=u+8|0,u=u+4|0,tr[l>>0]=0|tr[53891],tr[l+1>>0]=0|tr[53892],tr[l+2>>0]=0|tr[53893],tr[l+3>>0]=0|tr[53894],tr[l+4>>0]=0|tr[53895],tr[l+5>>0]=0|tr[53896],c=0|dn(),ar[o>>2]=f,c=0|nr(n,l=n+(f=0|fr(n,20,c,l,o))|0,r),Tf(o,r),a=0|un(o,59232),bn(o),Pb[7&ar[32+(0|ar[a>>2])>>2]](a,n,l,t),f=t+f|0,ar[u>>2]=ar[e>>2],ar[o>>2]=ar[u>>2],f=0|PA(o,t,(0|c)==(0|l)?f:c-n+t|0,f,r,i),ur=A,0|f},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0;if(o=ur=(t=ur)+31&-32,ur=ur+16|0,n=o+4|0,1&ar[(r|=0)+4>>2]){for(Tf(n,r),A=0|un(n,59272),bn(n),r=0|ar[A>>2],f?fs[63&ar[r+24>>2]](n,A):fs[63&ar[r+28>>2]](n,A),A=0|tr[(a=8+n+3|0)>>0],r=0|ar[n>>2],c=4+n|0,f=A<<24>>24<0?r:n;(0|f)!=(((o=A<<24>>24<0)?r:n)+((o?0|ar[c>>2]:255&A)<<2)|0);)A=0|ar[f>>2],0|(r=0|ar[e>>2])&&0|Uf(A=(0|(o=0|ar[(i=r+24|0)>>2]))==(0|ar[r+28>>2])?(o=0|ar[52+(0|ar[r>>2])>>2],A=0|gf(A),0|Hb[31&o](r,A)):(ar[i>>2]=o+4,0|gf(ar[o>>2]=A)),-1)&&(ar[e>>2]=0),f=f+4|0,A=0|tr[a>>0],r=0|ar[n>>2];A=0|ar[e>>2],Qu(n)}else c=0|ar[24+(0|ar[A>>2])>>2],ar[o>>2]=ar[e>>2],ar[n>>2]=ar[o>>2],A=0|Kb[31&c](A,n,r,i,1&f);return ur=t,0|A},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l,u=0,b=0;return u=ur=(A=ur)+31&-32,ur=ur+128|0,b=(t=u)+122|0,c=u+108|0,n=u+16|0,a=u+12|0,o=u+4|0,u=u+8|0,tr[b>>0]=0|tr[53902],tr[b+1>>0]=0|tr[53903],tr[b+2>>0]=0|tr[53904],tr[b+3>>0]=0|tr[53905],tr[b+4>>0]=0|tr[53906],tr[b+5>>0]=0|tr[53907],wr(b+1|0,53908,1,0|ar[r+4>>2]),l=0|dn(),ar[t>>2]=f,b=0|nr(c,f=c+(0|fr(c,13,l,b,t))|0,r),Tf(t,r),pr(c,b,f,n,a,o,t),bn(t),ar[u>>2]=ar[e>>2],e=0|ar[a>>2],f=0|ar[o>>2],ar[t>>2]=ar[u>>2],f=0|mr(t,n,e,f,r,i),ur=A,0|f},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l,u=0,b=0;return u=ur=(A=ur)+31&-32,ur=ur+128|0,b=(t=u)+112|0,c=u+100|0,n=u+16|0,a=u+12|0,o=u+4|0,u=u+8|0,tr[b>>0]=0|tr[53902],tr[b+1>>0]=0|tr[53903],tr[b+2>>0]=0|tr[53904],tr[b+3>>0]=0|tr[53905],tr[b+4>>0]=0|tr[53906],tr[b+5>>0]=0|tr[53907],wr(b+1|0,53908,0,0|ar[r+4>>2]),l=0|dn(),ar[t>>2]=f,b=0|nr(c,f=c+(0|fr(c,12,l,b,t))|0,r),Tf(t,r),pr(c,b,f,n,a,o,t),bn(t),ar[u>>2]=ar[e>>2],e=0|ar[a>>2],f=0|ar[o>>2],ar[t>>2]=ar[u>>2],f=0|mr(t,n,e,f,r,i),ur=A,0|f},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0;return u=ur=(A=ur)+31&-32,ur=ur+192|0,l=(o=u)+176|0,n=u+156|0,t=u+4|0,u=u+152|0,tr[l>>0]=0|tr[53891],tr[l+1>>0]=0|tr[53892],tr[l+2>>0]=0|tr[53893],tr[l+3>>0]=0|tr[53894],tr[l+4>>0]=0|tr[53895],tr[l+5>>0]=0|tr[53896],c=0|dn(),ar[o>>2]=f,c=0|nr(n,l=n+(f=0|fr(n,20,c,l,o))|0,r),Tf(o,r),a=0|un(o,59264),bn(o),Pb[7&ar[48+(0|ar[a>>2])>>2]](a,n,l,t),f=t+(f<<2)|0,ar[u>>2]=ar[e>>2],ar[o>>2]=ar[u>>2],f=0|mr(o,t,(0|c)==(0|l)?f:t+(c-n<<2)|0,f,r,i),ur=A,0|f},function(A,e,r,i,f){return r|=0,ar[(f|=0)>>2]=r,3},function(A,e,r,i,f){return 0|function(A,e,r,i,f){r|=0,i|=0;var n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0;2<((n=e|=0)-(t=A|=0)|0)&0!=(4&(f|=0)|0)&&-17==(0|tr[A>>0])&&-69==(0|tr[A+1>>0])?A=-65==((s=0)|tr[A+2>>0])?A+3|0:A:s=0;A:for(;;){if(!(s>>>0<r>>>0&A>>>0<e>>>0)){0;break}l=0|tr[A>>0],b=255&l,o=A+1|0;do{if(-1<l<<24>>24){if(i>>>0<b>>>0){0;break A}A=o}else{if((255&l)<194){0;break A}if(a=A+2|0,f=n-(u=A)|0,(255&l)<224){if((0|f)<2){0;break A}if(128!=(192&(f=0|cr[o>>0])|0)){0;break A}if(i>>>0<(63&f|b<<6&1984)>>>0){0;break A}A=a;break}if(c=A+3|0,(255&l)<240){if((0|f)<3){0;break A}switch(a=0|tr[a>>0],o=0|cr[o>>0],f=224&o,l<<24>>24){case-32:if(160==(0|f))break;A=u;break A;case-19:if(128==(0|f))break;A=u;break A;default:if(128!=(192&o|0)){A=u;break A}}if(128!=(192&(f=255&a)|0)){0;break A}if(i>>>0<(o<<6&4032|b<<12&61440|63&f)>>>0){0;break A}A=c;break}if((0|f)<4|244<(255&l)){0;break A}switch(o=0|tr[o>>0],f=0|tr[a>>0],a=0|tr[c>>0],c=255&o,l<<24>>24){case-16:if(48<=(o+112&255)){A=u;break A}break;case-12:if(128==(240&c|0))break;A=u;break A;default:if(128!=(192&c|0)){A=u;break A}}if(128!=(192&(o=255&f)|0)){0;break A}if(128!=(192&(f=255&a)|0)){0;break A}if(i>>>0<(c<<12&258048|b<<18&1835008|o<<6&4032|63&f)>>>0){0;break A}A=A+4|0}}while(0);s=s+1|0}return A-t|0}(r|=0,i|=0,f|=0,1114111,0)},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0;var n,t=0;t=ur=(n=ur)+31&-32,ur=ur+16|0,ar[(f|=0)>>2]=r,r=0|rf(0|ar[A+8>>2]),A=0|$c(t,0),0|r&&rf(r);A:do{switch(0|A){case 0:case-1:A=2;break;default:if((A=A+-1|0)>>>0>(i-(0|ar[f>>2])|0)>>>0)A=1;else for(;;){if(!A){A=0;break A}e=0|tr[t>>0],i=0|ar[f>>2],ar[f>>2]=i+1,tr[i>>0]=e,t=t+1|0,A=A+-1|0}}}while(0);return ur=n,0|A},function(A,e,r,i,f){e|=0,r|=0,f|=0;var n,t,o,a,c,l=0,u=0,b=0;t=i|=0,n=(A|=0)+8|0,b=u=0;A:for(;!((0|r)==(0|i)|f>>>0<=u>>>0);){switch(l=0|rf(0|ar[n>>2]),A=0|(a=t-(o=r)|0,c=e,0|Gi(0,o|=0,a|=0,0|(c|=0)?c:58156)),0|l&&rf(l),0|A){case-2:case-1:break A;case 0:A=1}u=u+1|0,b=A+b|0,r=r+A|0}return 0|b},function(A,e,r,i,f){for(A|=0,e|=0,r|=0,i|=0,f|=0;(0|e)!=(0|r);)A=0|tr[e>>0],tr[f>>0]=-1<A<<24>>24?A:i,f=f+1|0,e=e+1|0;return 0|r},function(A,e,r,i,f){A|=0,i|=0;var n,t=0;for(n=((r|=0)-(e|=0)|0)>>>2,A=f|=0,f=e;(0|f)!=(0|r);)t=0|ar[f>>2],tr[A>>0]=t>>>0<128?255&t:i,A=A+1|0,f=f+4|0;return e+(n<<2)|0},function(A,e,r,i,f){return r|=0,ar[(f|=0)>>2]=r,3},function(A,e,r,i,f){return 0|((i=(i|=0)-(r|=0)|0)>>>0<(f|=0)>>>0?i:f)},function(A,e,r,i,f){return r|=0,ar[(f|=0)>>2]=r,3},function(A,e,r,i,f){return 0|function(A,e,r,i,f){r|=0,i|=0;var n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0;2<((n=e|=0)-(t=A|=0)|0)&0!=(4&(f|=0)|0)&&-17==(0|tr[A>>0])&&-69==(0|tr[A+1>>0])?A=-65==((d=0)|tr[A+2>>0])?A+3|0:A:d=0;A:for(;;){if(!(d>>>0<r>>>0&A>>>0<e>>>0)){0;break}if(l=0|tr[A>>0],i>>>0<(s=255&l)>>>0){0;break}a=A+1|0;do{if(l<<24>>24<=-1){if((255&l)<194){0;break A}if(c=A+2|0,f=n-(u=A)|0,(255&l)<224){if((0|f)<2){0;break A}if(128!=(192&(f=0|cr[a>>0])|0)){0;break A}if(i>>>0<(63&f|s<<6&1984)>>>0){0;break A}f=d,A=c;break}if(b=A+3|0,(255&l)<240){if((0|f)<3){0;break A}switch(o=0|tr[c>>0],a=0|cr[a>>0],f=224&a,l<<24>>24){case-32:if(160==(0|f))break;A=u;break A;case-19:if(128==(0|f))break;A=u;break A;default:if(128!=(192&a|0)){A=u;break A}}if(128!=(192&(f=255&o)|0)){0;break A}if(i>>>0<(a<<6&4032|s<<12&61440|63&f)>>>0){0;break A}f=d,A=b;break}if(245<=(255&l)){0;break A}if((r-d|0)>>>0<2|(0|f)<4){0;break A}switch(o=0|tr[a>>0],f=0|tr[c>>0],a=0|tr[b>>0],c=255&o,l<<24>>24){case-16:if(48<=(o+112&255)){A=u;break A}break;case-12:if(128==(240&c|0))break;A=u;break A;default:if(128!=(192&c|0)){A=u;break A}}if(128!=(192&(o=255&f)|0)){0;break A}if(128!=(192&(f=255&a)|0)){0;break A}if(i>>>0<(c<<12&258048|s<<18&1835008|o<<6&4032|63&f)>>>0){0;break A}f=d+1|0,A=A+4|0}else f=d,A=a}while(0);d=f+1|0}return A-t|0}(r|=0,i|=0,f|=0,1114111,0)},Cb,Cb,Cb,Cb,Cb,Cb,Cb,Cb,Cb,Cb,Cb],qb=[Gb,function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n=+n;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0;for(B=ur=(m=ur)+31&-32,ur=ur+384|0,c=B+8|0,A=(Z=B)+284|0,p=B+72|0,g=B+184|0,v=B+68|0,l=B+180|0,u=B+177|0,b=B+176|0,k=B+56|0,h=B+44|0,w=B+32|0,o=B+28|0,a=B+76|0,s=B+24|0,d=B+16|0,B=B+20|0,ar[p>>2]=A,Q[c>>3]=n,99<(A=0|_c(A,100,55168,c))>>>0?(A=0|dn(),Q[Z>>3]=n,A=0|kr(p,A,55168,Z),(g=0|ar[p>>2])||gu(),(Z=0|yc(A))?(W=A,C=E=Z,G=g):gu()):(E=g,W=A,G=C=0),Tf(v,i),t=0|un(v,59232),y=0|ar[p>>2],Pb[7&ar[32+(0|ar[t>>2])>>2]](t,y,y+W|0,E),y=W?45==(0|tr[ar[p>>2]>>0]):0,ar[k>>2]=0,ar[4+k>>2]=0,A=ar[8+k>>2]=0;3!=(0|A);)A=A+1|(ar[k+(A<<2)>>2]=0);for(ar[h>>2]=0,ar[4+h>>2]=0,A=ar[8+h>>2]=0;3!=(0|A);)A=A+1|(ar[h+(A<<2)>>2]=0);for(ar[w>>2]=0,ar[4+w>>2]=0,A=ar[8+w>>2]=0;3!=(0|A);)A=A+1|(ar[w+(A<<2)>>2]=0);return ki(r,y,v,l,u,b,k,h,w,o),100<(A=(Z=(0|(p=0|ar[o>>2]))<(0|W)?(g=0|tr[11+w>>0],Z=0|tr[11+h>>0],A=1,g=(g<<24>>24<0?0|ar[4+w>>2]:255&g)+(W-p<<1)|0,Z<<24>>24<0?0|ar[4+h>>2]:255&Z):(Z=0|tr[11+w>>0],A=2,g=(g=0|tr[11+h>>0])<<24>>24<0?0|ar[4+h>>2]:255&g,Z<<24>>24<0?0|ar[4+w>>2]:255&Z))+p+g+A|0)>>>0?(A=0|yc(A))?I=X=A:gu():(X=a,I=0),hi(X,s,d,0|ar[i+4>>2],E,E+W|0,t,y,l,0|tr[u>>0],0|tr[b>>0],k,h,w,p),ar[B>>2]=ar[e>>2],e=0|ar[s>>2],A=0|ar[d>>2],ar[c>>2]=ar[B>>2],A=0|PA(c,X,e,A,i,f),0|I&&Bc(I),Bu(w),Bu(h),Bu(k),bn(v),0|C&&Bc(C),0|G&&Bc(G),ur=m,0|A},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n=+n;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0;for(B=ur=(m=ur)+31&-32,ur=ur+1008|0,c=B+8|0,A=(Z=B)+896|0,p=B+888|0,g=B+488|0,v=B+480|0,l=B+892|0,u=B+476|0,b=B+472|0,k=B+460|0,h=B+448|0,w=B+436|0,o=B+432|0,a=B+32|0,s=B+24|0,d=B+16|0,B=B+20|0,ar[p>>2]=A,Q[c>>3]=n,99<(A=0|_c(A,100,55168,c))>>>0?(A=0|dn(),Q[Z>>3]=n,A=0|kr(p,A,55168,Z),(g=0|ar[p>>2])||gu(),(Z=0|yc(A<<2))?(W=A,C=E=Z,G=g):gu()):(E=g,W=A,G=C=0),Tf(v,i),t=0|un(v,59264),y=0|ar[p>>2],Pb[7&ar[48+(0|ar[t>>2])>>2]](t,y,y+W|0,E),y=W?45==(0|tr[ar[p>>2]>>0]):0,ar[k>>2]=0,ar[4+k>>2]=0,A=ar[8+k>>2]=0;3!=(0|A);)A=A+1|(ar[k+(A<<2)>>2]=0);for(ar[h>>2]=0,ar[4+h>>2]=0,A=ar[8+h>>2]=0;3!=(0|A);)A=A+1|(ar[h+(A<<2)>>2]=0);for(ar[w>>2]=0,ar[4+w>>2]=0,A=ar[8+w>>2]=0;3!=(0|A);)A=A+1|(ar[w+(A<<2)>>2]=0);return _l(r,y,v,l,u,b,k,h,w,o),100<(A=(Z=(0|(p=0|ar[o>>2]))<(0|W)?(g=0|tr[8+w+3>>0],Z=0|tr[8+h+3>>0],A=1,g=(g<<24>>24<0?0|ar[4+w>>2]:255&g)+(W-p<<1)|0,Z<<24>>24<0?0|ar[4+h>>2]:255&Z):(Z=0|tr[8+w+3>>0],A=2,g=(g=0|tr[8+h+3>>0])<<24>>24<0?0|ar[4+h>>2]:255&g,Z<<24>>24<0?0|ar[4+w>>2]:255&Z))+p+g+A|0)>>>0?(A=0|yc(A<<2))?I=X=A:gu():(X=a,I=0),Yl(X,s,d,0|ar[i+4>>2],E,E+(W<<2)|0,t,y,l,0|ar[u>>2],0|ar[b>>2],k,h,w,p),ar[B>>2]=ar[e>>2],e=0|ar[s>>2],A=0|ar[d>>2],ar[c>>2]=ar[B>>2],A=0|mr(c,X,e,A,i,f),0|I&&Bc(I),Qu(w),Qu(h),Bu(k),bn(v),0|C&&Bc(C),0|G&&Bc(G),ur=m,0|A},Gb],$b=[Vb,function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c=0,l=0,u=0,b=0;if(u=ur=(a=ur)+31&-32,ur=ur+48|0,c=u+40|0,b=u+16|0,t=u+8|0,o=u+12|0,l=u+4|0,1&ar[(i|=0)+4>>2])for(Tf(c,i),l=0|un(c,59232),bn(c),Tf(c,i),A=0|un(c,59248),bn(c),fs[63&ar[24+(0|ar[A>>2])>>2]](b,A),fs[63&ar[28+(0|ar[A>>2])>>2]](b+12|0,A),ar[u>>2]=ar[r>>2],A=b+24|0,ar[c>>2]=ar[u>>2],c=(0|Vn(e,c,b,A,l,f,1))==(0|b)&1,tr[n>>0]=c,c=0|ar[e>>2];Bu(A=A+-12|0),(0|A)!=(0|b););else{switch(ar[t>>2]=-1,u=0|ar[16+(0|ar[A>>2])>>2],ar[o>>2]=ar[e>>2],ar[l>>2]=ar[r>>2],ar[b>>2]=ar[o>>2],ar[c>>2]=ar[l>>2],b=0|$b[63&u](A,b,c,i,f,t),ar[e>>2]=b,0|ar[t>>2]){case 0:tr[n>>0]=0;break;case 1:tr[n>>0]=1;break;default:tr[n>>0]=1,ar[f>>2]=4}c=0|ar[e>>2]}return ur=a,0|c},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;y=ur=(h=ur)+31&-32,ur=ur+224|0,c=y+198|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),Bn(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,ar[y>>2]=0,t=4+k|0,v=0|ar[e>>2],w=v;A:for(;;){m=w?0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)?(ar[e>>2]=0,v=Z=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|sn(255&(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|hf(0|tr[i>>0])),s,A,l,y,0|tr[p>>0],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+1,hf(0|tr[i>>0]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y);B=0|Gn(A,0|ar[l>>2],f,s),ar[n>>2]=B,gn(d,u,0|ar[b>>2],f),i=Z?(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|hf(0|tr[A>>0]),0|Mf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(w){if(0|Mf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);47==(0|E)&&i&&(E=49);49==(0|E)&&(ar[f>>2]=2|ar[f>>2]);return E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;y=ur=(h=ur)+31&-32,ur=ur+224|0,c=y+198|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),Bn(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,ar[y>>2]=0,t=4+k|0,v=0|ar[e>>2],w=v;A:for(;;){m=w?0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)?(ar[e>>2]=0,v=Z=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|sn(255&(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|hf(0|tr[i>>0])),s,A,l,y,0|tr[p>>0],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+1,hf(0|tr[i>>0]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y);B=0|Cn(A,0|ar[l>>2],f,s),ar[n>>2]=B,ar[n+4>>2]=D,gn(d,u,0|ar[b>>2],f),i=Z?(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|hf(0|tr[A>>0]),0|Mf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(w){if(0|Mf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);47==(0|E)&&i&&(E=49);49==(0|E)&&(ar[f>>2]=2|ar[f>>2]);return E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;y=ur=(h=ur)+31&-32,ur=ur+224|0,c=y+198|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),Bn(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,ar[y>>2]=0,t=4+k|0,v=0|ar[e>>2],w=v;A:for(;;){m=w?0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)?(ar[e>>2]=0,v=Z=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|sn(255&(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|hf(0|tr[i>>0])),s,A,l,y,0|tr[p>>0],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+1,hf(0|tr[i>>0]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y);B=0|In(A,0|ar[l>>2],f,s),or[n>>1]=B,gn(d,u,0|ar[b>>2],f),i=Z?(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|hf(0|tr[A>>0]),0|Mf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(w){if(0|Mf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);47==(0|E)&&i&&(E=49);49==(0|E)&&(ar[f>>2]=2|ar[f>>2]);return E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;y=ur=(h=ur)+31&-32,ur=ur+224|0,c=y+198|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),Bn(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,ar[y>>2]=0,t=4+k|0,v=0|ar[e>>2],w=v;A:for(;;){m=w?0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)?(ar[e>>2]=0,v=Z=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|sn(255&(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|hf(0|tr[i>>0])),s,A,l,y,0|tr[p>>0],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+1,hf(0|tr[i>>0]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y);B=0|Wn(A,0|ar[l>>2],f,s),ar[n>>2]=B,gn(d,u,0|ar[b>>2],f),i=Z?(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|hf(0|tr[A>>0]),0|Mf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(w){if(0|Mf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);47==(0|E)&&i&&(E=49);49==(0|E)&&(ar[f>>2]=2|ar[f>>2]);return E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;y=ur=(h=ur)+31&-32,ur=ur+224|0,c=y+198|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),Bn(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,ar[y>>2]=0,t=4+k|0,v=0|ar[e>>2],w=v;A:for(;;){m=w?0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)?(ar[e>>2]=0,v=Z=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|sn(255&(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|hf(0|tr[i>>0])),s,A,l,y,0|tr[p>>0],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+1,hf(0|tr[i>>0]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y);B=0|Xn(A,0|ar[l>>2],f,s),ar[n>>2]=B,gn(d,u,0|ar[b>>2],f),i=Z?(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|hf(0|tr[A>>0]),0|Mf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(w){if(0|Mf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);47==(0|E)&&i&&(E=49);49==(0|E)&&(ar[f>>2]=2|ar[f>>2]);return E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;y=ur=(h=ur)+31&-32,ur=ur+224|0,c=y+198|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),Bn(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,ar[y>>2]=0,t=4+k|0,v=0|ar[e>>2],w=v;A:for(;;){m=w?0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)?(ar[e>>2]=0,v=Z=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Mf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|sn(255&(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|hf(0|tr[i>>0])),s,A,l,y,0|tr[p>>0],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+1,hf(0|tr[i>>0]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y);B=0|En(A,0|ar[l>>2],f,s),ar[n>>2]=B,ar[n+4>>2]=D,gn(d,u,0|ar[b>>2],f),i=Z?(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|hf(0|tr[A>>0]),0|Mf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(w){if(0|Mf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);47==(0|E)&&i&&(E=49);49==(0|E)&&(ar[f>>2]=2|ar[f>>2]);return E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;B=ur=(w=ur)+31&-32,ur=ur+240|0,c=B+200|0,l=B+199|0,E=B+198|0,h=B+184|0,k=B+172|0,u=B+168|0,b=B+8|0,s=B+4|0,X=(d=B)+197|0,B=B+196|0,wn(h,i|=0,c,l,E),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A,ar[s>>2]=b,ar[d>>2]=0,tr[X>>0]=1,tr[B>>0]=69,t=4+k|0,g=0|ar[e>>2],m=g;A:for(;;){Z=m?0|Mf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[i>>0]),-1)?(ar[e>>2]=0,g=y=0,1):(y=m,0):(g=y=0,1),m=0|ar[r>>2];do{if(m){if(0|Mf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,I=19;break}if(Z)break;break A}I=19}while(0);if(19==(0|I)){if(I=0,Z){m=0;break}m=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[u>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A+i),0|vn(255&(i=(0|(i=0|ar[(Z=y+12|0)>>2]))==(0|ar[(p=y+16|0)>>2])?0|jb[127&ar[36+(0|ar[y>>2])>>2]](y):0|hf(0|tr[i>>0])),X,B,A,u,0|tr[l>>0],0|tr[E>>0],h,b,s,d,c))break;(0|(i=0|ar[Z>>2]))!=(0|ar[p>>2])?(ar[Z>>2]=i+1,hf(0|tr[i>>0]),m=y):(jb[127&ar[40+(0|ar[y>>2])>>2]](y),m=y)}E=0|tr[11+h>>0],0!=(0|tr[X>>0])&&0!=(0|(E<<24>>24<0?0|ar[4+h>>2]:255&E))&&((W=0|ar[s>>2])-b|0)<160&&(X=0|ar[d>>2],ar[s>>2]=W+4,ar[W>>2]=X);v=+pn(A,0|ar[u>>2],f),gA[n>>2]=v,gn(h,b,0|ar[s>>2],f),i=y?(A=(0|(A=0|ar[y+12>>2]))==(0|ar[y+16>>2])?0|jb[127&ar[36+(0|ar[g>>2])>>2]](y):0|hf(0|tr[A>>0]),0|Mf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(m){if(0|Mf(A=(0|(A=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,I=47;break}if(i)break;I=49;break}I=47}while(0);47==(0|I)&&i&&(I=49);49==(0|I)&&(ar[f>>2]=2|ar[f>>2]);return I=0|ar[e>>2],Bu(k),Bu(h),ur=w,0|I}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;B=ur=(w=ur)+31&-32,ur=ur+240|0,c=B+200|0,l=B+199|0,E=B+198|0,h=B+184|0,k=B+172|0,u=B+168|0,b=B+8|0,s=B+4|0,X=(d=B)+197|0,B=B+196|0,wn(h,i|=0,c,l,E),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A,ar[s>>2]=b,ar[d>>2]=0,tr[X>>0]=1,tr[B>>0]=69,t=4+k|0,g=0|ar[e>>2],m=g;A:for(;;){Z=m?0|Mf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[i>>0]),-1)?(ar[e>>2]=0,g=y=0,1):(y=m,0):(g=y=0,1),m=0|ar[r>>2];do{if(m){if(0|Mf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,I=19;break}if(Z)break;break A}I=19}while(0);if(19==(0|I)){if(I=0,Z){m=0;break}m=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[u>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A+i),0|vn(255&(i=(0|(i=0|ar[(Z=y+12|0)>>2]))==(0|ar[(p=y+16|0)>>2])?0|jb[127&ar[36+(0|ar[y>>2])>>2]](y):0|hf(0|tr[i>>0])),X,B,A,u,0|tr[l>>0],0|tr[E>>0],h,b,s,d,c))break;(0|(i=0|ar[Z>>2]))!=(0|ar[p>>2])?(ar[Z>>2]=i+1,hf(0|tr[i>>0]),m=y):(jb[127&ar[40+(0|ar[y>>2])>>2]](y),m=y)}E=0|tr[11+h>>0],0!=(0|tr[X>>0])&&0!=(0|(E<<24>>24<0?0|ar[4+h>>2]:255&E))&&((W=0|ar[s>>2])-b|0)<160&&(X=0|ar[d>>2],ar[s>>2]=W+4,ar[W>>2]=X);v=+Zn(A,0|ar[u>>2],f),Q[n>>3]=v,gn(h,b,0|ar[s>>2],f),i=y?(A=(0|(A=0|ar[y+12>>2]))==(0|ar[y+16>>2])?0|jb[127&ar[36+(0|ar[g>>2])>>2]](y):0|hf(0|tr[A>>0]),0|Mf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(m){if(0|Mf(A=(0|(A=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,I=47;break}if(i)break;I=49;break}I=47}while(0);47==(0|I)&&i&&(I=49);49==(0|I)&&(ar[f>>2]=2|ar[f>>2]);return I=0|ar[e>>2],Bu(k),Bu(h),ur=w,0|I}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;B=ur=(w=ur)+31&-32,ur=ur+240|0,c=B+200|0,l=B+199|0,E=B+198|0,h=B+184|0,k=B+172|0,u=B+168|0,b=B+8|0,s=B+4|0,X=(d=B)+197|0,B=B+196|0,wn(h,i|=0,c,l,E),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A,ar[s>>2]=b,ar[d>>2]=0,tr[X>>0]=1,tr[B>>0]=69,t=4+k|0,g=0|ar[e>>2],m=g;A:for(;;){Z=m?0|Mf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[i>>0]),-1)?(ar[e>>2]=0,g=y=0,1):(y=m,0):(g=y=0,1),m=0|ar[r>>2];do{if(m){if(0|Mf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,I=19;break}if(Z)break;break A}I=19}while(0);if(19==(0|I)){if(I=0,Z){m=0;break}m=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[u>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A+i),0|vn(255&(i=(0|(i=0|ar[(Z=y+12|0)>>2]))==(0|ar[(p=y+16|0)>>2])?0|jb[127&ar[36+(0|ar[y>>2])>>2]](y):0|hf(0|tr[i>>0])),X,B,A,u,0|tr[l>>0],0|tr[E>>0],h,b,s,d,c))break;(0|(i=0|ar[Z>>2]))!=(0|ar[p>>2])?(ar[Z>>2]=i+1,hf(0|tr[i>>0]),m=y):(jb[127&ar[40+(0|ar[y>>2])>>2]](y),m=y)}E=0|tr[11+h>>0],0!=(0|tr[X>>0])&&0!=(0|(E<<24>>24<0?0|ar[4+h>>2]:255&E))&&((W=0|ar[s>>2])-b|0)<160&&(X=0|ar[d>>2],ar[s>>2]=W+4,ar[W>>2]=X);v=+mn(A,0|ar[u>>2],f),Q[n>>3]=v,gn(h,b,0|ar[s>>2],f),i=y?(A=(0|(A=0|ar[y+12>>2]))==(0|ar[y+16>>2])?0|jb[127&ar[36+(0|ar[g>>2])>>2]](y):0|hf(0|tr[A>>0]),0|Mf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(m){if(0|Mf(A=(0|(A=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,I=47;break}if(i)break;I=49;break}I=47}while(0);47==(0|I)&&i&&(I=49);49==(0|I)&&(ar[f>>2]=2|ar[f>>2]);return I=0|ar[e>>2],Bu(k),Bu(h),ur=w,0|I}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0;for(g=ur=(d=ur)+31&-32,ur=ur+240|0,Z=(u=g)+204|0,b=g+192|0,s=g+180|0,p=g+176|0,c=g+16|0,l=g+8|0,g=g+4|0,ar[b>>2]=0,ar[4+b>>2]=0,A=ar[8+b>>2]=0;3!=(0|A);)A=A+1|(ar[b+(A<<2)>>2]=0);for(Tf(s,i),A=0|un(s,59232),Pb[7&ar[32+(0|ar[A>>2])>>2]](A,53648,53674,Z),bn(s),ar[s>>2]=0,ar[4+s>>2]=0,A=ar[8+s>>2]=0;3!=(0|A);)A=A+1|(ar[s+(A<<2)>>2]=0);o=8+s|0,Vu(s,A=(0|tr[(a=11+s|0)>>0])<0?(2147483647&ar[o>>2])-1|0:10,0),A=(0|tr[a>>0])<0?0|ar[s>>2]:s,ar[p>>2]=A,ar[l>>2]=c,t=4+s|(ar[g>>2]=0),k=h=0|ar[e>>2];A:for(;;){w=k?0|Mf(i=(0|(i=0|ar[k+12>>2]))==(0|ar[k+16>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|hf(0|tr[i>>0]),-1)?(h=m=ar[e>>2]=0,1):(m=k,0):(h=m=0,1),k=0|ar[r>>2];do{if(k){if(0|Mf(i=(0|(i=0|ar[k+12>>2]))==(0|ar[k+16>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,y=22;break}if(w)break;break A}y=22}while(0);if(22==(0|y)){if(y=0,w){k=0;break}k=0}if(i=(i=0|tr[a>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[p>>2])==(A+i|0)&&(Vu(s,i<<1,0),Vu(s,A=(0|tr[a>>0])<0?(2147483647&ar[o>>2])-1|0:10,0),A=(0|tr[a>>0])<0?0|ar[s>>2]:s,ar[p>>2]=A+i),0|sn(255&(i=(0|(i=0|ar[(w=m+12|0)>>2]))==(0|ar[(v=m+16|0)>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|hf(0|tr[i>>0])),16,A,p,g,0,b,c,l,Z))break;(0|(i=0|ar[w>>2]))!=(0|ar[v>>2])?(ar[w>>2]=i+1,hf(0|tr[i>>0]),k=m):(jb[127&ar[40+(0|ar[m>>2])>>2]](m),k=m)}Vu(s,(0|ar[p>>2])-A|0,0),Z=(0|tr[a>>0])<0?0|ar[s>>2]:s,p=0|dn(),ar[u>>2]=n,1!=(0|kn(Z,p,53681,u))&&(ar[f>>2]=4),i=m?0|Mf(A=(0|(A=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[h>>2])>>2]](m):0|hf(0|tr[A>>0]),-1)?(ar[e>>2]=0,1):0:1;do{if(k){if(0|Mf(A=(0|(A=0|ar[k+12>>2]))==(0|ar[k+16>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,y=49;break}if(i)break;y=51;break}y=49}while(0);return 49==(0|y)&&i&&(y=51),51==(0|y)&&(ar[f>>2]=2|ar[f>>2]),y=0|ar[e>>2],Bu(s),Bu(b),ur=d,0|y},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c=0,l=0,u=0,b=0;if(u=ur=(a=ur)+31&-32,ur=ur+48|0,c=u+40|0,b=u+16|0,t=u+8|0,o=u+12|0,l=u+4|0,1&ar[(i|=0)+4>>2])for(Tf(c,i),l=0|un(c,59264),bn(c),Tf(c,i),A=0|un(c,59272),bn(c),fs[63&ar[24+(0|ar[A>>2])>>2]](b,A),fs[63&ar[28+(0|ar[A>>2])>>2]](b+12|0,A),ar[u>>2]=ar[r>>2],A=b+24|0,ar[c>>2]=ar[u>>2],c=(0|ir(e,c,b,A,l,f,1))==(0|b)&1,tr[n>>0]=c,c=0|ar[e>>2];Qu(A=A+-12|0),(0|A)!=(0|b););else{switch(ar[t>>2]=-1,u=0|ar[16+(0|ar[A>>2])>>2],ar[o>>2]=ar[e>>2],ar[l>>2]=ar[r>>2],ar[b>>2]=ar[o>>2],ar[c>>2]=ar[l>>2],b=0|$b[63&u](A,b,c,i,f,t),ar[e>>2]=b,0|ar[t>>2]){case 0:tr[n>>0]=0;break;case 1:tr[n>>0]=1;break;default:tr[n>>0]=1,ar[f>>2]=4}c=0|ar[e>>2]}return ur=a,0|c},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;for(y=ur=(h=ur)+31&-32,ur=ur+304|0,c=y+200|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),_n(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,A=ar[8+k>>2]=0;3!=(0|A);)A=A+1|(ar[k+(A<<2)>>2]=0);a=8+k|0,Vu(k,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,t=4+k|(ar[y>>2]=0),w=v=0|ar[e>>2];A:for(;;){m=w?0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)?(v=Z=ar[e>>2]=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),Vu(k,A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|Fn(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|gf(0|ar[i>>2]),s,A,l,y,0|ar[p>>2],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+4,gf(0|ar[i>>2]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y),B=0|Gn(A,0|ar[l>>2],f,s),ar[n>>2]=B,gn(d,u,0|ar[b>>2],f),i=Z?0|Uf(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|gf(0|ar[A>>2]),-1)?(ar[e>>2]=0,1):0:1;do{if(w){if(0|Uf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);return 47==(0|E)&&i&&(E=49),49==(0|E)&&(ar[f>>2]=2|ar[f>>2]),E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;for(y=ur=(h=ur)+31&-32,ur=ur+304|0,c=y+200|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),_n(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,A=ar[8+k>>2]=0;3!=(0|A);)A=A+1|(ar[k+(A<<2)>>2]=0);a=8+k|0,Vu(k,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,t=4+k|(ar[y>>2]=0),w=v=0|ar[e>>2];A:for(;;){m=w?0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)?(v=Z=ar[e>>2]=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),Vu(k,A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|Fn(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|gf(0|ar[i>>2]),s,A,l,y,0|ar[p>>2],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+4,gf(0|ar[i>>2]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y),B=0|Cn(A,0|ar[l>>2],f,s),ar[n>>2]=B,ar[n+4>>2]=D,gn(d,u,0|ar[b>>2],f),i=Z?0|Uf(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|gf(0|ar[A>>2]),-1)?(ar[e>>2]=0,1):0:1;do{if(w){if(0|Uf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);return 47==(0|E)&&i&&(E=49),49==(0|E)&&(ar[f>>2]=2|ar[f>>2]),E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;for(y=ur=(h=ur)+31&-32,ur=ur+304|0,c=y+200|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),_n(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,A=ar[8+k>>2]=0;3!=(0|A);)A=A+1|(ar[k+(A<<2)>>2]=0);a=8+k|0,Vu(k,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,t=4+k|(ar[y>>2]=0),w=v=0|ar[e>>2];A:for(;;){m=w?0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)?(v=Z=ar[e>>2]=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),Vu(k,A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|Fn(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|gf(0|ar[i>>2]),s,A,l,y,0|ar[p>>2],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+4,gf(0|ar[i>>2]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y),B=0|In(A,0|ar[l>>2],f,s),or[n>>1]=B,gn(d,u,0|ar[b>>2],f),i=Z?0|Uf(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|gf(0|ar[A>>2]),-1)?(ar[e>>2]=0,1):0:1;do{if(w){if(0|Uf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);return 47==(0|E)&&i&&(E=49),49==(0|E)&&(ar[f>>2]=2|ar[f>>2]),E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;y=ur=(h=ur)+31&-32,ur=ur+304|0,c=y+200|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),_n(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,ar[y>>2]=0,t=4+k|0,v=0|ar[e>>2],w=v;A:for(;;){m=w?0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)?(ar[e>>2]=0,v=Z=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|Fn(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|gf(0|ar[i>>2]),s,A,l,y,0|ar[p>>2],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+4,gf(0|ar[i>>2]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y);B=0|Wn(A,0|ar[l>>2],f,s),ar[n>>2]=B,gn(d,u,0|ar[b>>2],f),i=Z?(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|gf(0|ar[A>>2]),0|Uf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(w){if(0|Uf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);47==(0|E)&&i&&(E=49);49==(0|E)&&(ar[f>>2]=2|ar[f>>2]);return E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;y=ur=(h=ur)+31&-32,ur=ur+304|0,c=y+200|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),_n(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,ar[y>>2]=0,t=4+k|0,v=0|ar[e>>2],w=v;A:for(;;){m=w?0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)?(ar[e>>2]=0,v=Z=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|Fn(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|gf(0|ar[i>>2]),s,A,l,y,0|ar[p>>2],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+4,gf(0|ar[i>>2]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y);B=0|Xn(A,0|ar[l>>2],f,s),ar[n>>2]=B,gn(d,u,0|ar[b>>2],f),i=Z?(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|gf(0|ar[A>>2]),0|Uf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(w){if(0|Uf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);47==(0|E)&&i&&(E=49);49==(0|E)&&(ar[f>>2]=2|ar[f>>2]);return E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;y=ur=(h=ur)+31&-32,ur=ur+304|0,c=y+200|0,p=y+196|0,d=y+184|0,k=y+172|0,l=y+168|0,u=y+8|0,b=y+4|0,s=0|yn(i|=0),_n(d,i,c,p),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A,ar[b>>2]=u,ar[y>>2]=0,t=4+k|0,v=0|ar[e>>2],w=v;A:for(;;){m=w?0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)?(ar[e>>2]=0,v=Z=0,1):(Z=w,0):(v=Z=0,1),w=0|ar[r>>2];do{if(w){if(0|Uf(i=(0|(i=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,E=19;break}if(m)break;break A}E=19}while(0);if(19==(0|E)){if(E=0,m){w=0;break}w=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[l>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[l>>2]=A+i),0|Fn(i=(0|(i=0|ar[(m=Z+12|0)>>2]))==(0|ar[(g=Z+16|0)>>2])?0|jb[127&ar[36+(0|ar[Z>>2])>>2]](Z):0|gf(0|ar[i>>2]),s,A,l,y,0|ar[p>>2],d,u,b,c))break;(0|(i=0|ar[m>>2]))!=(0|ar[g>>2])?(ar[m>>2]=i+4,gf(0|ar[i>>2]),w=Z):(jb[127&ar[40+(0|ar[Z>>2])>>2]](Z),w=Z)}0|((p=0|tr[11+d>>0])<<24>>24<0?0|ar[4+d>>2]:255&p)&&((B=0|ar[b>>2])-u|0)<160&&(y=0|ar[y>>2],ar[b>>2]=B+4,ar[B>>2]=y);B=0|En(A,0|ar[l>>2],f,s),ar[n>>2]=B,ar[n+4>>2]=D,gn(d,u,0|ar[b>>2],f),i=Z?(A=(0|(A=0|ar[Z+12>>2]))==(0|ar[Z+16>>2])?0|jb[127&ar[36+(0|ar[v>>2])>>2]](Z):0|gf(0|ar[A>>2]),0|Uf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(w){if(0|Uf(A=(0|(A=0|ar[w+12>>2]))==(0|ar[w+16>>2])?0|jb[127&ar[36+(0|ar[w>>2])>>2]](w):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,E=47;break}if(i)break;E=49;break}E=47}while(0);47==(0|E)&&i&&(E=49);49==(0|E)&&(ar[f>>2]=2|ar[f>>2]);return E=0|ar[e>>2],Bu(k),Bu(d),ur=h,0|E}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;B=ur=(w=ur)+31&-32,ur=ur+352|0,c=B+208|0,l=B+200|0,E=B+196|0,h=B+184|0,k=B+172|0,u=B+168|0,b=B+8|0,s=B+4|0,X=(d=B)+337|0,B=B+336|0,Rn(h,i|=0,c,l,E),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A,ar[s>>2]=b,ar[d>>2]=0,tr[X>>0]=1,tr[B>>0]=69,t=4+k|0,g=0|ar[e>>2],m=g;A:for(;;){Z=m?0|Uf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[i>>2]),-1)?(ar[e>>2]=0,g=y=0,1):(y=m,0):(g=y=0,1),m=0|ar[r>>2];do{if(m){if(0|Uf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,I=19;break}if(Z)break;break A}I=19}while(0);if(19==(0|I)){if(I=0,Z){m=0;break}m=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[u>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A+i),0|Nn(i=(0|(i=0|ar[(Z=y+12|0)>>2]))==(0|ar[(p=y+16|0)>>2])?0|jb[127&ar[36+(0|ar[y>>2])>>2]](y):0|gf(0|ar[i>>2]),X,B,A,u,0|ar[l>>2],0|ar[E>>2],h,b,s,d,c))break;(0|(i=0|ar[Z>>2]))!=(0|ar[p>>2])?(ar[Z>>2]=i+4,gf(0|ar[i>>2]),m=y):(jb[127&ar[40+(0|ar[y>>2])>>2]](y),m=y)}E=0|tr[11+h>>0],0!=(0|tr[X>>0])&&0!=(0|(E<<24>>24<0?0|ar[4+h>>2]:255&E))&&((W=0|ar[s>>2])-b|0)<160&&(X=0|ar[d>>2],ar[s>>2]=W+4,ar[W>>2]=X);v=+pn(A,0|ar[u>>2],f),gA[n>>2]=v,gn(h,b,0|ar[s>>2],f),i=y?(A=(0|(A=0|ar[y+12>>2]))==(0|ar[y+16>>2])?0|jb[127&ar[36+(0|ar[g>>2])>>2]](y):0|gf(0|ar[A>>2]),0|Uf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(m){if(0|Uf(A=(0|(A=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,I=47;break}if(i)break;I=49;break}I=47}while(0);47==(0|I)&&i&&(I=49);49==(0|I)&&(ar[f>>2]=2|ar[f>>2]);return I=0|ar[e>>2],Bu(k),Bu(h),ur=w,0|I}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;B=ur=(w=ur)+31&-32,ur=ur+352|0,c=B+208|0,l=B+200|0,E=B+196|0,h=B+184|0,k=B+172|0,u=B+168|0,b=B+8|0,s=B+4|0,X=(d=B)+337|0,B=B+336|0,Rn(h,i|=0,c,l,E),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A,ar[s>>2]=b,ar[d>>2]=0,tr[X>>0]=1,tr[B>>0]=69,t=4+k|0,g=0|ar[e>>2],m=g;A:for(;;){Z=m?0|Uf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[i>>2]),-1)?(ar[e>>2]=0,g=y=0,1):(y=m,0):(g=y=0,1),m=0|ar[r>>2];do{if(m){if(0|Uf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,I=19;break}if(Z)break;break A}I=19}while(0);if(19==(0|I)){if(I=0,Z){m=0;break}m=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[u>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A+i),0|Nn(i=(0|(i=0|ar[(Z=y+12|0)>>2]))==(0|ar[(p=y+16|0)>>2])?0|jb[127&ar[36+(0|ar[y>>2])>>2]](y):0|gf(0|ar[i>>2]),X,B,A,u,0|ar[l>>2],0|ar[E>>2],h,b,s,d,c))break;(0|(i=0|ar[Z>>2]))!=(0|ar[p>>2])?(ar[Z>>2]=i+4,gf(0|ar[i>>2]),m=y):(jb[127&ar[40+(0|ar[y>>2])>>2]](y),m=y)}E=0|tr[11+h>>0],0!=(0|tr[X>>0])&&0!=(0|(E<<24>>24<0?0|ar[4+h>>2]:255&E))&&((W=0|ar[s>>2])-b|0)<160&&(X=0|ar[d>>2],ar[s>>2]=W+4,ar[W>>2]=X);v=+Zn(A,0|ar[u>>2],f),Q[n>>3]=v,gn(h,b,0|ar[s>>2],f),i=y?(A=(0|(A=0|ar[y+12>>2]))==(0|ar[y+16>>2])?0|jb[127&ar[36+(0|ar[g>>2])>>2]](y):0|gf(0|ar[A>>2]),0|Uf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(m){if(0|Uf(A=(0|(A=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,I=47;break}if(i)break;I=49;break}I=47}while(0);47==(0|I)&&i&&(I=49);49==(0|I)&&(ar[f>>2]=2|ar[f>>2]);return I=0|ar[e>>2],Bu(k),Bu(h),ur=w,0|I}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;B=ur=(w=ur)+31&-32,ur=ur+352|0,c=B+208|0,l=B+200|0,E=B+196|0,h=B+184|0,k=B+172|0,u=B+168|0,b=B+8|0,s=B+4|0,X=(d=B)+337|0,B=B+336|0,Rn(h,i|=0,c,l,E),ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,A=0;for(;3!=(0|A);)ar[k+(A<<2)>>2]=0,A=A+1|0;a=8+k|0,A=(0|tr[(o=11+k|0)>>0])<0?(2147483647&ar[a>>2])-1|0:10;Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A,ar[s>>2]=b,ar[d>>2]=0,tr[X>>0]=1,tr[B>>0]=69,t=4+k|0,g=0|ar[e>>2],m=g;A:for(;;){Z=m?0|Uf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[i>>2]),-1)?(ar[e>>2]=0,g=y=0,1):(y=m,0):(g=y=0,1),m=0|ar[r>>2];do{if(m){if(0|Uf(i=(0|(i=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,I=19;break}if(Z)break;break A}I=19}while(0);if(19==(0|I)){if(I=0,Z){m=0;break}m=0}if(i=(i=0|tr[o>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[u>>2])==(A+i|0)&&(Vu(k,i<<1,0),A=(0|tr[o>>0])<0?(2147483647&ar[a>>2])-1|0:10,Vu(k,A,0),A=(0|tr[o>>0])<0?0|ar[k>>2]:k,ar[u>>2]=A+i),0|Nn(i=(0|(i=0|ar[(Z=y+12|0)>>2]))==(0|ar[(p=y+16|0)>>2])?0|jb[127&ar[36+(0|ar[y>>2])>>2]](y):0|gf(0|ar[i>>2]),X,B,A,u,0|ar[l>>2],0|ar[E>>2],h,b,s,d,c))break;(0|(i=0|ar[Z>>2]))!=(0|ar[p>>2])?(ar[Z>>2]=i+4,gf(0|ar[i>>2]),m=y):(jb[127&ar[40+(0|ar[y>>2])>>2]](y),m=y)}E=0|tr[11+h>>0],0!=(0|tr[X>>0])&&0!=(0|(E<<24>>24<0?0|ar[4+h>>2]:255&E))&&((W=0|ar[s>>2])-b|0)<160&&(X=0|ar[d>>2],ar[s>>2]=W+4,ar[W>>2]=X);v=+mn(A,0|ar[u>>2],f),Q[n>>3]=v,gn(h,b,0|ar[s>>2],f),i=y?(A=(0|(A=0|ar[y+12>>2]))==(0|ar[y+16>>2])?0|jb[127&ar[36+(0|ar[g>>2])>>2]](y):0|gf(0|ar[A>>2]),0|Uf(A,-1)?(ar[e>>2]=0,1):0):1;do{if(m){if(0|Uf(A=(0|(A=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,I=47;break}if(i)break;I=49;break}I=47}while(0);47==(0|I)&&i&&(I=49);49==(0|I)&&(ar[f>>2]=2|ar[f>>2]);return I=0|ar[e>>2],Bu(k),Bu(h),ur=w,0|I}(A,a,o,i,f,n),ur=t,0|n},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0;for(g=ur=(d=ur)+31&-32,ur=ur+320|0,Z=(u=g)+208|0,b=g+192|0,s=g+180|0,p=g+176|0,c=g+16|0,l=g+8|0,g=g+4|0,ar[b>>2]=0,ar[4+b>>2]=0,A=ar[8+b>>2]=0;3!=(0|A);)A=A+1|(ar[b+(A<<2)>>2]=0);for(Tf(s,i),A=0|un(s,59264),Pb[7&ar[48+(0|ar[A>>2])>>2]](A,53648,53674,Z),bn(s),ar[s>>2]=0,ar[4+s>>2]=0,A=ar[8+s>>2]=0;3!=(0|A);)A=A+1|(ar[s+(A<<2)>>2]=0);o=8+s|0,Vu(s,A=(0|tr[(a=11+s|0)>>0])<0?(2147483647&ar[o>>2])-1|0:10,0),A=(0|tr[a>>0])<0?0|ar[s>>2]:s,ar[p>>2]=A,ar[l>>2]=c,t=4+s|(ar[g>>2]=0),k=h=0|ar[e>>2];A:for(;;){w=k?0|Uf(i=(0|(i=0|ar[k+12>>2]))==(0|ar[k+16>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|gf(0|ar[i>>2]),-1)?(h=m=ar[e>>2]=0,1):(m=k,0):(h=m=0,1),k=0|ar[r>>2];do{if(k){if(0|Uf(i=(0|(i=0|ar[k+12>>2]))==(0|ar[k+16>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,y=22;break}if(w)break;break A}y=22}while(0);if(22==(0|y)){if(y=0,w){k=0;break}k=0}if(i=(i=0|tr[a>>0])<<24>>24<0?0|ar[t>>2]:255&i,(0|ar[p>>2])==(A+i|0)&&(Vu(s,i<<1,0),Vu(s,A=(0|tr[a>>0])<0?(2147483647&ar[o>>2])-1|0:10,0),A=(0|tr[a>>0])<0?0|ar[s>>2]:s,ar[p>>2]=A+i),0|Fn(i=(0|(i=0|ar[(w=m+12|0)>>2]))==(0|ar[(v=m+16|0)>>2])?0|jb[127&ar[36+(0|ar[m>>2])>>2]](m):0|gf(0|ar[i>>2]),16,A,p,g,0,b,c,l,Z))break;(0|(i=0|ar[w>>2]))!=(0|ar[v>>2])?(ar[w>>2]=i+4,gf(0|ar[i>>2]),k=m):(jb[127&ar[40+(0|ar[m>>2])>>2]](m),k=m)}Vu(s,(0|ar[p>>2])-A|0,0),Z=(0|tr[a>>0])<0?0|ar[s>>2]:s,p=0|dn(),ar[u>>2]=n,1!=(0|kn(Z,p,53681,u))&&(ar[f>>2]=4),i=m?0|Uf(A=(0|(A=0|ar[m+12>>2]))==(0|ar[m+16>>2])?0|jb[127&ar[36+(0|ar[h>>2])>>2]](m):0|gf(0|ar[A>>2]),-1)?(ar[e>>2]=0,1):0:1;do{if(k){if(0|Uf(A=(0|(A=0|ar[k+12>>2]))==(0|ar[k+16>>2])?0|jb[127&ar[36+(0|ar[k>>2])>>2]](k):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,y=49;break}if(i)break;y=51;break}y=49}while(0);return 49==(0|y)&&i&&(y=51),51==(0|y)&&(ar[f>>2]=2|ar[f>>2]),y=0|ar[e>>2],Bu(s),Bu(b),ur=d,0|y},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s=0,d=0;return s=ur=(A=ur)+31&-32,ur=ur+96|0,o=s+8|0,l=(u=s)+71|0,t=s+28|0,c=s+24|0,a=s+16|0,s=s+20|0,ar[(d=u)>>2]=37,wr(u+1|(ar[d+4>>2]=0),53899,1,0|ar[r+4>>2]),d=0|dn(),ar[(b=o)>>2]=f,ar[4+b>>2]=n,n=0|nr(l,f=l+(0|fr(l,23,d,u,o))|0,r),Tf(o,r),vr(l,n,f,t,c,a,o),bn(o),ar[s>>2]=ar[e>>2],f=0|ar[c>>2],n=0|ar[a>>2],ar[o>>2]=ar[s>>2],n=0|PA(o,t,f,n,r,i),ur=A,0|n},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s=0,d=0;return s=ur=(A=ur)+31&-32,ur=ur+96|0,o=s+8|0,l=(u=s)+71|0,t=s+28|0,c=s+24|0,a=s+16|0,s=s+20|0,ar[(d=u)>>2]=37,wr(u+1|(ar[d+4>>2]=0),53899,0,0|ar[r+4>>2]),d=0|dn(),ar[(b=o)>>2]=f,ar[4+b>>2]=n,n=0|nr(l,f=l+(0|fr(l,23,d,u,o))|0,r),Tf(o,r),vr(l,n,f,t,c,a,o),bn(o),ar[s>>2]=ar[e>>2],f=0|ar[c>>2],n=0|ar[a>>2],ar[o>>2]=ar[s>>2],n=0|PA(o,t,f,n,r,i),ur=A,0|n},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s=0,d=0;return s=ur=(A=ur)+31&-32,ur=ur+224|0,o=s+8|0,l=(u=s)+200|0,t=s+28|0,c=s+24|0,a=s+16|0,s=s+20|0,ar[(d=u)>>2]=37,wr(u+1|(ar[d+4>>2]=0),53899,1,0|ar[r+4>>2]),d=0|dn(),ar[(b=o)>>2]=f,ar[4+b>>2]=n,n=0|nr(l,f=l+(0|fr(l,23,d,u,o))|0,r),Tf(o,r),pr(l,n,f,t,c,a,o),bn(o),ar[s>>2]=ar[e>>2],f=0|ar[c>>2],n=0|ar[a>>2],ar[o>>2]=ar[s>>2],n=0|mr(o,t,f,n,r,i),ur=A,0|n},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s=0,d=0;return s=ur=(A=ur)+31&-32,ur=ur+224|0,o=s+8|0,l=(u=s)+200|0,t=s+28|0,c=s+24|0,a=s+16|0,s=s+20|0,ar[(d=u)>>2]=37,wr(u+1|(ar[d+4>>2]=0),53899,0,0|ar[r+4>>2]),d=0|dn(),ar[(b=o)>>2]=f,ar[4+b>>2]=n,n=0|nr(l,f=l+(0|fr(l,23,d,u,o))|0,r),Tf(o,r),pr(l,n,f,t,c,a,o),bn(o),ar[s>>2]=ar[e>>2],f=0|ar[c>>2],n=0|ar[a>>2],ar[o>>2]=ar[s>>2],n=0|mr(o,t,f,n,r,i),ur=A,0|n},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|Er(A,a,o,i,f,n,54427,54435),ur=t,0|n},function(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b=0;return c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,l=4+c|0,b=0|jb[127&ar[20+(0|ar[(b=(A|=0)+8|0)>>2])>>2]](b),ar[l>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],r=(e=(u=(r=0|tr[b+11>>0])<<24>>24<0)?0|ar[b>>2]:b)+(u?0|ar[b+4>>2]:255&r)|0,ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|Er(A,a,o,i,f,n,e,r),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a;return A|=0,e|=0,r|=0,f|=0,n|=0,a=ur=(t=ur)+31&-32,ur=ur+16|0,Tf(o=4+a|0,i|=0),i=0|un(o,59232),bn(o),ar[a>>2]=ar[r>>2],ar[o>>2]=ar[a>>2],yr(A,n+24|0,e,o,f,i),ur=t,0|ar[e>>2]},function(A,e,r,i,f,n){var t,o,a;return A|=0,e|=0,r|=0,f|=0,n|=0,a=ur=(t=ur)+31&-32,ur=ur+16|0,Tf(o=4+a|0,i|=0),i=0|un(o,59232),bn(o),ar[a>>2]=ar[r>>2],ar[o>>2]=ar[a>>2],Br(A,n+16|0,e,o,f,i),ur=t,0|ar[e>>2]},function(A,e,r,i,f,n){var t,o,a;return A|=0,e|=0,r|=0,f|=0,n|=0,a=ur=(t=ur)+31&-32,ur=ur+16|0,Tf(o=4+a|0,i|=0),i=0|un(o,59232),bn(o),ar[a>>2]=ar[r>>2],ar[o>>2]=ar[a>>2],Yr(A,n+20|0,e,o,f,i),ur=t,0|ar[e>>2]},function(A,e,r,i,f,n){var t,o,a,c,l;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,ar[(l=4+c|0)>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|Sr(A,a,o,i,f,n,16404,16436),ur=t,0|n},function(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l,u,b=0;return c=ur=(t=ur)+31&-32,ur=ur+16|0,o=12+c|0,a=8+c|0,l=4+c|0,b=0|jb[127&ar[20+(0|ar[(b=(A|=0)+8|0)>>2])>>2]](b),ar[l>>2]=ar[e>>2],ar[c>>2]=ar[r>>2],r=(e=(u=(r=0|tr[b+8+3>>0])<<24>>24<0)?0|ar[b>>2]:b)+((u?0|ar[b+4>>2]:255&r)<<2)|0,ar[a>>2]=ar[l>>2],ar[o>>2]=ar[c>>2],n=0|Sr(A,a,o,i,f,n,e,r),ur=t,0|n},function(A,e,r,i,f,n){var t,o,a;return A|=0,e|=0,r|=0,f|=0,n|=0,a=ur=(t=ur)+31&-32,ur=ur+16|0,Tf(o=4+a|0,i|=0),i=0|un(o,59264),bn(o),ar[a>>2]=ar[r>>2],ar[o>>2]=ar[a>>2],Tr(A,n+24|0,e,o,f,i),ur=t,0|ar[e>>2]},function(A,e,r,i,f,n){var t,o,a;return A|=0,e|=0,r|=0,f|=0,n|=0,a=ur=(t=ur)+31&-32,ur=ur+16|0,Tf(o=4+a|0,i|=0),i=0|un(o,59264),bn(o),ar[a>>2]=ar[r>>2],ar[o>>2]=ar[a>>2],Ur(A,n+16|0,e,o,f,i),ur=t,0|ar[e>>2]},function(A,e,r,i,f,n){var t,o,a;return A|=0,e|=0,r|=0,f|=0,n|=0,a=ur=(t=ur)+31&-32,ur=ur+16|0,Tf(o=4+a|0,i|=0),i=0|un(o,59264),bn(o),ar[a>>2]=ar[r>>2],ar[o>>2]=ar[a>>2],Ai(A,n+20|0,e,o,f,i),ur=t,0|ar[e>>2]},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p=0,y=0,B=0,E=0,X=0,W=0;for(b=ur=(Z=ur)+31&-32,ur=ur+176|0,c=56+b|0,d=164+b|0,k=161+b|0,h=160+b|0,w=40+b|0,v=28+b|0,m=16+b|0,t=12+b|0,a=60+b|0,l=8+b|0,u=4+b|0,Tf(g=52+b|0,i|=0),s=0|un(g,59232),y=n+4|0,E=0|((A=(E=0|tr[(p=n+11|0)>>0])<<24>>24<0)?0|ar[y>>2]:255&E)?(E=0|tr[(A?0|ar[n>>2]:n)>>0])<<24>>24==(0|Hb[31&ar[28+(0|ar[s>>2])>>2]](s,45))<<24>>24:0,ar[w>>2]=0,ar[4+w>>2]=0,A=ar[8+w>>2]=0;3!=(0|A);)A=A+1|(ar[w+(A<<2)>>2]=0);for(ar[v>>2]=0,ar[4+v>>2]=0,A=ar[8+v>>2]=0;3!=(0|A);)A=A+1|(ar[v+(A<<2)>>2]=0);for(ar[m>>2]=0,ar[4+m>>2]=0,A=ar[8+m>>2]=0;3!=(0|A);)A=A+1|(ar[m+(A<<2)>>2]=0);return ki(r,E,g,d,k,h,w,v,m,t),B=(o=(B=0|tr[p>>0])<<24>>24<0)?0|ar[y>>2]:255&B,100<(A=(r=(0|(y=0|ar[t>>2]))<(0|B)?(p=0|tr[11+m>>0],r=0|tr[11+v>>0],A=1,p=(p<<24>>24<0?0|ar[4+m>>2]:255&p)+(B-y<<1)|0,r<<24>>24<0?0|ar[4+v>>2]:255&r):(r=0|tr[11+m>>0],A=2,p=(p=0|tr[11+v>>0])<<24>>24<0?0|ar[4+v>>2]:255&p,r<<24>>24<0?0|ar[4+m>>2]:255&r))+y+p+A|0)>>>0?(A=0|yc(A))?W=X=A:gu():(X=a,W=0),n=o?0|ar[n>>2]:n,hi(X,l,u,0|ar[i+4>>2],n,n+B|0,s,E,d,0|tr[k>>0],0|tr[h>>0],w,v,m,y),ar[b>>2]=ar[e>>2],n=0|ar[l>>2],A=0|ar[u>>2],ar[c>>2]=ar[b>>2],A=0|PA(c,X,n,A,i,f),0|W&&Bc(W),Bu(m),Bu(v),Bu(w),bn(g),ur=Z,0|A},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,f|=0,n|=0;var t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p=0,y=0,B=0,E=0,X=0,W=0;for(b=ur=(Z=ur)+31&-32,ur=ur+480|0,c=468+b|0,d=472+b|0,k=460+b|0,h=456+b|0,w=444+b|0,v=432+b|0,m=420+b|0,t=416+b|0,a=16+b|0,l=8+b|0,u=4+b|0,Tf(g=464+b|0,i|=0),s=0|un(g,59264),y=n+4|0,E=0|((A=(E=0|tr[(p=n+8+3|0)>>0])<<24>>24<0)?0|ar[y>>2]:255&E)?(0|(E=0|ar[(A?0|ar[n>>2]:n)>>2]))==(0|Hb[31&ar[44+(0|ar[s>>2])>>2]](s,45)):0,ar[w>>2]=0,ar[4+w>>2]=0,A=ar[8+w>>2]=0;3!=(0|A);)A=A+1|(ar[w+(A<<2)>>2]=0);for(ar[v>>2]=0,ar[4+v>>2]=0,A=ar[8+v>>2]=0;3!=(0|A);)A=A+1|(ar[v+(A<<2)>>2]=0);for(ar[m>>2]=0,ar[4+m>>2]=0,A=ar[8+m>>2]=0;3!=(0|A);)A=A+1|(ar[m+(A<<2)>>2]=0);return _l(r,E,g,d,k,h,w,v,m,t),B=(o=(B=0|tr[p>>0])<<24>>24<0)?0|ar[y>>2]:255&B,100<(A=(r=(0|(y=0|ar[t>>2]))<(0|B)?(p=0|tr[8+m+3>>0],r=0|tr[8+v+3>>0],A=1,p=(p<<24>>24<0?0|ar[4+m>>2]:255&p)+(B-y<<1)|0,r<<24>>24<0?0|ar[4+v>>2]:255&r):(r=0|tr[8+m+3>>0],A=2,p=(p=0|tr[8+v+3>>0])<<24>>24<0?0|ar[4+v>>2]:255&p,r<<24>>24<0?0|ar[4+m>>2]:255&r))+y+p+A|0)>>>0?(A=0|yc(A<<2))?W=X=A:gu():(X=a,W=0),n=o?0|ar[n>>2]:n,Yl(X,l,u,0|ar[i+4>>2],n,n+(B<<2)|0,s,E,d,0|ar[k>>2],0|ar[h>>2],w,v,m,y),ar[b>>2]=ar[e>>2],n=0|ar[l>>2],A=0|ar[u>>2],ar[c>>2]=ar[b>>2],A=0|mr(c,X,n,A,i,f),0|W&&Bc(W),Qu(m),Qu(v),Bu(w),bn(g),ur=Z,0|A},Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb,Vb],As=[Fb,function(A,e,r,i,f,n,t){var o;for(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,i=ur=(o=ur)+31&-32,ur=ur+112|0,r=i+4|0,ar[i>>2]=r+100,fi(A+8|0,r,i,f,n,t),t=0|ar[i>>2],n=r,r=0|ar[e>>2];(0|n)!=(0|t);)i=0|tr[n>>0],r=!r||(e=0|Mf(i=(0|(f=0|ar[(A=r+24|0)>>2]))==(0|ar[r+28>>2])?(e=0|ar[52+(0|ar[r>>2])>>2],i=0|hf(i),0|Hb[31&e](r,i)):(ar[A>>2]=f+1,0|hf(tr[f>>0]=i)),-1))?0:r,n=n+1|0;return ur=o,0|r},function(A,e,r,i,f,n,t){var o;for(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,i=ur=(o=ur)+31&-32,ur=ur+416|0,r=i+8|0,ar[i>>2]=r+400,function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c,l=0;l=ur=(t=ur)+31&-32,ur=ur+128|0,a=l+16|0,c=l+12|0,l=(o=l)+8|0,ar[c>>2]=100+a,fi(A,a,c,i,f,n),ar[(i=o)>>2]=0,ar[i+4>>2]=0,ar[l>>2]=a,i=0|function(A,e){return(e|=0)-(A|=0)>>2|0}(e,0|ar[r>>2]),A=0|rf(0|ar[A>>2]),i=0|Xi(e,l,i,o),0|A&&rf(A);{if(-1!=(0|i))return ar[r>>2]=e+(i<<2),ur=t;ti()}}(A+8|0,r,i,f,n,t),t=0|ar[i>>2],n=r,r=0|ar[e>>2];(0|n)!=(0|t);)i=0|ar[n>>2],r=!r||(e=0|Uf(i=(0|(f=0|ar[(A=r+24|0)>>2]))==(0|ar[r+28>>2])?(e=0|ar[52+(0|ar[r>>2])>>2],i=0|gf(i),0|Hb[31&e](r,i)):(ar[A>>2]=f+4,0|gf(ar[f>>2]=i)),-1))?0:r,n=n+4|0;return ur=o,0|r},function(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0;var o,a,c,l,u,b,s,d,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;if(m=ur=(s=ur)+31&-32,ur=ur+240|0,o=m+24|0,v=(c=m)+140|0,b=m+16|0,a=m+12|0,l=m+8|0,k=m+136|0,d=m+4|0,m=m+36|0,ar[b>>2]=v,ar[(u=4+b|0)>>2]=444,Tf(l,f),A=0|un(l,59232),tr[k>>0]=0,ar[d>>2]=ar[r>>2],w=0|ar[f+4>>2],ar[o>>2]=ar[d>>2],0|ai(e,o,i,l,w,n,k,A,b,a,v+100|0)){for(Pb[7&ar[32+(0|ar[A>>2])>>2]](A,54952,54962,o),98<(0|(A=(w=0|ar[a>>2])-(i=0|ar[b>>2])|0))?(A=0|yc(A+2|0))?g=h=A:gu():(h=m,g=0),A=0|tr[k>>0]?(tr[h>>0]=45,h+1|0):h,h=10+o|0,v=o,k=i,f=A,A=w;!(A>>>0<=k>>>0);){for(i=0|tr[k>>0],A=o;;){if((0|A)==(0|h)){A=h;break}if((0|tr[A>>0])==i<<24>>24)break;A=A+1|0}tr[f>>0]=0|tr[A-v+54952>>0],k=k+1|0,f=f+1|0,A=0|ar[a>>2]}tr[f>>0]=0,ar[c>>2]=t,1!=(0|ji(m,54963,c))&&ti(),0|g&&Bc(g)}A=0|ar[e>>2];do{if(A){if(0|Mf(A=(0|(i=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|hf(0|tr[i>>0]),-1)){ar[e>>2]=0,f=1;break}f=0==(0|ar[e>>2]);break}f=1}while(0);A=0|ar[r>>2];do{if(A){if(0|Mf(A=(0|(i=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|hf(0|tr[i>>0]),-1)){ar[r>>2]=0,Z=32;break}if(f)break;Z=34;break}Z=32}while(0);return 32==(0|Z)&&f&&(Z=34),34==(0|Z)&&(ar[n>>2]=2|ar[n>>2]),i=0|ar[e>>2],bn(l),A=0|ar[b>>2],(ar[b>>2]=0)|A&&is[511&ar[u>>2]](A),ur=s,0|i},function(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0;var o,a,c,l,u,b,s,d=0,k=0,h=0,w=0;if(h=ur=(s=ur)+31&-32,ur=ur+144|0,d=h+24|0,A=h+32|0,b=h+16|0,a=h+8|0,k=(l=h)+28|0,h=h+4|0,ar[b>>2]=A,ar[(u=4+b|0)>>2]=444,Tf(l,f),o=0|un(l,59232),c=(tr[k>>0]=0)|ar[r>>2],ar[h>>2]=c,f=0|ar[f+4>>2],ar[d>>2]=ar[h>>2],h=c,0|ai(e,d,i,l,f,n,k,o,b,a,A+100|0)){for((0|tr[(A=t+11|0)>>0])<0?(i=0|ar[t>>2],tr[d>>0]=0,Qf(i,d),ar[t+4>>2]=0):(tr[d>>0]=0,Qf(t,d),tr[A>>0]=0),0|tr[k>>0]&&_u(t,0|Hb[31&ar[28+(0|ar[o>>2])>>2]](o,45)),k=0|Hb[31&ar[28+(0|ar[o>>2])>>2]](o,48),d=(f=0|ar[a>>2])+-1|0,A=0|ar[b>>2];!(d>>>0<=A>>>0)&&(0|tr[A>>0])==k<<24>>24;)A=A+1|0;!function(A,e,r){r|=0;var i,f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;c=ur=(n=ur)+31&-32,ur=ur+16|0,i=e|=0,s=c+12|0,o=0|tr[(b=11+(A|=0)|0)>>0],l=(t=o<<24>>24<0)?(u=0|ar[A+4>>2],(2147483647&ar[A+8>>2])-1|0):(u=255&o,10);f=r-i|0;do{if(0|f){if(t?(o=0|ar[A>>2],a=o,t=0|ar[A+4>>2]):(t=255&o,o=a=A),0|ci(e,o,a+t|0)){for(ar[c>>2]=0,ar[c+4>>2]=0,ar[c+8>>2]=0,4294967279<f>>>0&&pu(),f>>>0<11?(tr[c+11>>0]=f,o=c):(o=0|hu(b=16+f&-16),ar[c>>2]=o,ar[c+8>>2]=-2147483648|b,ar[c+4>>2]=f),t=o;(0|e)!=(0|r);)Qf(t,e),e=e+1|0,t=t+1|0;tr[s>>0]=0,Qf(o+f|0,s),s=0|tr[c+11>>0],Nu(A,(r=s<<24>>24<0)?0|ar[c>>2]:c,r?0|ar[c+4>>2]:255&s),Bu(c);break}for(c=u+f|0,(l-u|0)>>>0<f>>>0&&Ru(A,l,c-l|0,u,u,0,0),a=(0|tr[b>>0])<0?0|ar[A>>2]:A,o=r+(u-i)|0,t=a+u|0;(0|e)!=(0|r);)Qf(t,e),t=t+1|0,e=e+1|0;if(tr[s>>0]=0,Qf(a+o|0,s),(0|tr[b>>0])<0){ar[A+4>>2]=c;break}tr[b>>0]=c;break}}while(0);ur=n}(t,A,f)}A=0|ar[e>>2];do{if(A){if(0|Mf(A=(0|(f=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|hf(0|tr[f>>0]),-1)){ar[e>>2]=0,f=1;break}f=0==(0|ar[e>>2]);break}f=1}while(0);do{if(c){if(0|Mf(A=(0|(A=0|ar[h+12>>2]))==(0|ar[h+16>>2])?0|jb[127&ar[36+(0|ar[c>>2])>>2]](h):0|hf(0|tr[A>>0]),-1)){ar[r>>2]=0,w=25;break}if(f)break;w=27;break}w=25}while(0);return 25==(0|w)&&f&&(w=27),27==(0|w)&&(ar[n>>2]=2|ar[n>>2]),f=0|ar[e>>2],bn(l),A=0|ar[b>>2],(ar[b>>2]=0)|A&&is[511&ar[u>>2]](A),ur=s,0|f},function(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0;var o,a,c,l,u,b,s,d,k=0,h=0,w=0,v=0,m=0,g=0,Z=0;if(m=ur=(s=ur)+31&-32,ur=ur+576|0,o=m+424|0,v=(c=m)+24|0,b=m+16|0,a=m+12|0,l=m+8|0,k=m+564|0,d=m+4|0,m=m+464|0,ar[b>>2]=v,ar[(u=4+b|0)>>2]=444,Tf(l,f),A=0|un(l,59264),tr[k>>0]=0,ar[d>>2]=ar[r>>2],w=0|ar[f+4>>2],ar[o>>2]=ar[d>>2],0|bi(e,o,i,l,w,n,k,A,b,a,v+400|0)){for(Pb[7&ar[48+(0|ar[A>>2])>>2]](A,55062,55072,o),392<(0|(A=(w=0|ar[a>>2])-(i=0|ar[b>>2])|0))?(A=0|yc(2+(A>>>2)|0))?g=h=A:gu():(h=m,g=0),A=0|tr[k>>0]?(tr[h>>0]=45,h+1|0):h,h=40+o|0,v=o,k=i,f=A,A=w;!(A>>>0<=k>>>0);){for(i=0|ar[k>>2],A=o;;){if((0|A)==(0|h)){A=h;break}if((0|ar[A>>2])==(0|i))break;A=A+4|0}tr[f>>0]=0|tr[55062+(A-v>>2)>>0],k=k+4|0,f=f+1|0,A=0|ar[a>>2]}tr[f>>0]=0,ar[c>>2]=t,1!=(0|ji(m,54963,c))&&ti(),0|g&&Bc(g)}A=0|ar[e>>2];do{if(A){if(0|Uf(A=(0|(i=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|gf(0|ar[i>>2]),-1)){ar[e>>2]=0,f=1;break}f=0==(0|ar[e>>2]);break}f=1}while(0);A=0|ar[r>>2];do{if(A){if(0|Uf(A=(0|(i=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|gf(0|ar[i>>2]),-1)){ar[r>>2]=0,Z=32;break}if(f)break;Z=34;break}Z=32}while(0);return 32==(0|Z)&&f&&(Z=34),34==(0|Z)&&(ar[n>>2]=2|ar[n>>2]),i=0|ar[e>>2],bn(l),A=0|ar[b>>2],(ar[b>>2]=0)|A&&is[511&ar[u>>2]](A),ur=s,0|i},function(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0;var o,a,c,l,u,b,s,d=0,k=0,h=0,w=0;if(h=ur=(s=ur)+31&-32,ur=ur+432|0,d=h+424|0,A=h+24|0,b=h+16|0,a=h+8|0,k=(l=h)+428|0,h=h+4|0,ar[b>>2]=A,ar[(u=4+b|0)>>2]=444,Tf(l,f),o=0|un(l,59264),c=(tr[k>>0]=0)|ar[r>>2],ar[h>>2]=c,f=0|ar[f+4>>2],ar[d>>2]=ar[h>>2],h=c,0|bi(e,d,i,l,f,n,k,o,b,a,A+400|0)){for((0|tr[(A=t+8+3|0)>>0])<0?(i=0|ar[t>>2],ar[d>>2]=0,ln(i,d),ar[t+4>>2]=0):(ar[d>>2]=0,ln(t,d),tr[A>>0]=0),0|tr[k>>0]&&Ou(t,0|Hb[31&ar[44+(0|ar[o>>2])>>2]](o,45)),k=0|Hb[31&ar[44+(0|ar[o>>2])>>2]](o,48),d=(f=0|ar[a>>2])+-4|0,A=0|ar[b>>2];!(d>>>0<=A>>>0)&&(0|ar[A>>2])==(0|k);)A=A+4|0;!function(A,e,r){e|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;n=ur=(o=ur)+31&-32,ur=ur+16|0,k=12+n|0,i=0|tr[(t=3+(a=8+(A|=0)|0)|0)>>0],u=(c=i<<24>>24<0)?(d=0|ar[A+4>>2],(2147483647&ar[a>>2])-1|0):(d=255&i,1);f=r-e>>2;do{if(0|f){if(c?(c=0|ar[A>>2],l=c,a=0|ar[A+4>>2]):(a=255&i,c=l=A),0|si(e,c,l+(a<<2)|0)){ar[n>>2]=0,ar[4+n>>2]=0,ar[8+n>>2]=0,1073741807<f>>>0&&pu();do{if(2<=f>>>0){if(!(1073741823<(a=4+f&-4)>>>0)){s=0|hu(a<<2),ar[n>>2]=s,ar[8+n>>2]=-2147483648|a,ar[4+n>>2]=f,b=e;break}lA()}else tr[8+n+3>>0]=f,b=e,s=n}while(0);for(;(0|b)!=(0|r);)ln(s,b),b=b+4|0,s=s+4|0;ar[k>>2]=0,ln(s,k),k=0|tr[8+n+3>>0],Su(A,(r=k<<24>>24<0)?0|ar[n>>2]:n,r?0|ar[4+n>>2]:255&k),Qu(n);break}for(c=d+f|0,(u-d|0)>>>0<f>>>0&&Uu(A,u,c-u|0,d,d,0,0),a=(a=(0|tr[t>>0])<0?0|ar[A>>2]:A)+(d<<2)|0;(0|e)!=(0|r);)ln(a,e),a=a+4|0,e=e+4|0;if(ar[k>>2]=0,ln(a,k),(0|tr[t>>0])<0){ar[A+4>>2]=c;break}tr[t>>0]=c;break}}while(0);ur=o}(t,A,f)}A=0|ar[e>>2];do{if(A){if(0|Uf(A=(0|(f=0|ar[A+12>>2]))==(0|ar[A+16>>2])?0|jb[127&ar[36+(0|ar[A>>2])>>2]](A):0|gf(0|ar[f>>2]),-1)){ar[e>>2]=0,f=1;break}f=0==(0|ar[e>>2]);break}f=1}while(0);do{if(c){if(0|Uf(A=(0|(A=0|ar[h+12>>2]))==(0|ar[h+16>>2])?0|jb[127&ar[36+(0|ar[c>>2])>>2]](h):0|gf(0|ar[A>>2]),-1)){ar[r>>2]=0,w=25;break}if(f)break;w=27;break}w=25}while(0);return 25==(0|w)&&f&&(w=27),27==(0|w)&&(ar[n>>2]=2|ar[n>>2]),f=0|ar[e>>2],bn(l),A=0|ar[b>>2],(ar[b>>2]=0)|A&&is[511&ar[u>>2]](A),ur=s,0|f},Fb],es=[Rb,function(A,e,r,i,f,n,t,o){A|=0,e|=0,r|=0,i|=0,n|=0,t|=0,o|=0;var a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z,j=0,H=0;switch(Q=ur=(z=ur)+31&-32,ur=ur+144|0,a=128+Q|0,o=112+Q|0,O=124+Q|0,j=120+Q|0,c=116+Q|0,l=108+Q|0,u=104+Q|0,b=100+Q|0,s=96+Q|0,d=92+Q|0,k=88+Q|0,h=84+Q|0,w=80+Q|0,v=76+Q|0,m=72+Q|0,g=68+Q|0,Z=64+Q|0,p=60+Q|0,y=56+Q|0,B=52+Q|0,E=48+Q|0,X=44+Q|0,W=40+Q|0,I=36+Q|0,C=32+Q|0,G=28+Q|0,V=24+Q|0,F=20+Q|0,R=16+Q|0,N=12+Q|0,_=8+Q|0,Y=4+Q|0,ar[(f|=0)>>2]=0,Tf(a,i),D=0|un(a,59232),bn(a),J=n+8|0,M=n+20|0,T=n+16|0,U=n+24|0,S=A+8|0,t<<24>>24|0){case 65:case 97:ar[O>>2]=ar[r>>2],ar[a>>2]=ar[O>>2],yr(A,U,e,a,f,D),H=26;break;case 104:case 66:case 98:ar[j>>2]=ar[r>>2],ar[a>>2]=ar[j>>2],Br(A,T,e,a,f,D),H=26;break;case 99:j=0|jb[127&ar[12+(0|ar[S>>2])>>2]](S),ar[c>>2]=ar[e>>2],ar[l>>2]=ar[r>>2],H=(t=(r=(H=0|tr[j+11>>0])<<24>>24<0)?0|ar[j>>2]:j)+(r?0|ar[j+4>>2]:255&H)|0,ar[o>>2]=ar[c>>2],ar[a>>2]=ar[l>>2],H=0|Er(A,o,a,i,f,n,t,H),ar[e>>2]=H,H=26;break;case 101:case 100:ar[u>>2]=ar[r>>2],ar[a>>2]=ar[u>>2],Xr(A,n+12|0,e,a,f,D),H=26;break;case 68:ar[b>>2]=ar[e>>2],ar[s>>2]=ar[r>>2],ar[o>>2]=ar[b>>2],ar[a>>2]=ar[s>>2],H=0|Er(A,o,a,i,f,n,54387,54395),ar[e>>2]=H,H=26;break;case 70:ar[d>>2]=ar[e>>2],ar[k>>2]=ar[r>>2],ar[o>>2]=ar[d>>2],ar[a>>2]=ar[k>>2],H=0|Er(A,o,a,i,f,n,54395,54403),ar[e>>2]=H,H=26;break;case 72:ar[h>>2]=ar[r>>2],ar[a>>2]=ar[h>>2],Wr(A,J,e,a,f,D),H=26;break;case 73:ar[w>>2]=ar[r>>2],ar[a>>2]=ar[w>>2],Ir(A,J,e,a,f,D),H=26;break;case 106:ar[v>>2]=ar[r>>2],ar[a>>2]=ar[v>>2],Cr(A,n+28|0,e,a,f,D),H=26;break;case 109:ar[m>>2]=ar[r>>2],ar[a>>2]=ar[m>>2],Gr(A,T,e,a,f,D),H=26;break;case 77:ar[g>>2]=ar[r>>2],ar[a>>2]=ar[g>>2],Vr(A,n+4|0,e,a,f,D),H=26;break;case 116:case 110:ar[Z>>2]=ar[r>>2],ar[a>>2]=ar[Z>>2],Fr(A,e,a,f,D),H=26;break;case 112:ar[p>>2]=ar[r>>2],ar[a>>2]=ar[p>>2],Rr(A,J,e,a,f,D),H=26;break;case 114:ar[y>>2]=ar[e>>2],ar[B>>2]=ar[r>>2],ar[o>>2]=ar[y>>2],ar[a>>2]=ar[B>>2],H=0|Er(A,o,a,i,f,n,54403,54414),ar[e>>2]=H,H=26;break;case 82:ar[E>>2]=ar[e>>2],ar[X>>2]=ar[r>>2],ar[o>>2]=ar[E>>2],ar[a>>2]=ar[X>>2],H=0|Er(A,o,a,i,f,n,54414,54419),ar[e>>2]=H,H=26;break;case 83:ar[W>>2]=ar[r>>2],ar[a>>2]=ar[W>>2],Nr(A,n,e,a,f,D),H=26;break;case 84:ar[I>>2]=ar[e>>2],ar[C>>2]=ar[r>>2],ar[o>>2]=ar[I>>2],ar[a>>2]=ar[C>>2],H=0|Er(A,o,a,i,f,n,54419,54427),ar[e>>2]=H,H=26;break;case 119:ar[G>>2]=ar[r>>2],ar[a>>2]=ar[G>>2],_r(A,U,e,a,f,D),H=26;break;case 120:t=0|ar[20+(0|ar[A>>2])>>2],ar[V>>2]=ar[e>>2],ar[F>>2]=ar[r>>2],ar[o>>2]=ar[V>>2],ar[a>>2]=ar[F>>2],o=0|$b[63&t](A,o,a,i,f,n);break;case 88:j=0|jb[127&ar[24+(0|ar[S>>2])>>2]](S),ar[R>>2]=ar[e>>2],ar[N>>2]=ar[r>>2],H=(t=(r=(H=0|tr[j+11>>0])<<24>>24<0)?0|ar[j>>2]:j)+(r?0|ar[j+4>>2]:255&H)|0,ar[o>>2]=ar[R>>2],ar[a>>2]=ar[N>>2],H=0|Er(A,o,a,i,f,n,t,H),ar[e>>2]=H,H=26;break;case 121:ar[_>>2]=ar[r>>2],ar[a>>2]=ar[_>>2],Yr(A,M,e,a,f,D),H=26;break;case 89:ar[Y>>2]=ar[r>>2],ar[a>>2]=ar[Y>>2],Qr(A,M,e,a,f,D),H=26;break;case 37:ar[Q>>2]=ar[r>>2],ar[a>>2]=ar[Q>>2],Dr(A,e,a,f,D),H=26;break;default:ar[f>>2]=4|ar[f>>2],H=26}return 26==(0|H)&&(o=0|ar[e>>2]),ur=z,0|o},function(A,e,r,i,f,n,t,o){A|=0,e|=0,r|=0,i|=0,n|=0,t|=0,o|=0;var a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G,V,F,R,N,_,Y,Q,D,J,M,T,U,S,O,z,j=0,H=0;switch(Q=ur=(z=ur)+31&-32,ur=ur+144|0,a=128+Q|0,o=112+Q|0,O=124+Q|0,j=120+Q|0,c=116+Q|0,l=108+Q|0,u=104+Q|0,b=100+Q|0,s=96+Q|0,d=92+Q|0,k=88+Q|0,h=84+Q|0,w=80+Q|0,v=76+Q|0,m=72+Q|0,g=68+Q|0,Z=64+Q|0,p=60+Q|0,y=56+Q|0,B=52+Q|0,E=48+Q|0,X=44+Q|0,W=40+Q|0,I=36+Q|0,C=32+Q|0,G=28+Q|0,V=24+Q|0,F=20+Q|0,R=16+Q|0,N=12+Q|0,_=8+Q|0,Y=4+Q|0,ar[(f|=0)>>2]=0,Tf(a,i),D=0|un(a,59264),bn(a),J=n+8|0,M=n+20|0,T=n+16|0,U=n+24|0,S=A+8|0,t<<24>>24|0){case 65:case 97:ar[O>>2]=ar[r>>2],ar[a>>2]=ar[O>>2],Tr(A,U,e,a,f,D),H=26;break;case 104:case 66:case 98:ar[j>>2]=ar[r>>2],ar[a>>2]=ar[j>>2],Ur(A,T,e,a,f,D),H=26;break;case 99:j=0|jb[127&ar[12+(0|ar[S>>2])>>2]](S),ar[c>>2]=ar[e>>2],ar[l>>2]=ar[r>>2],H=(t=(r=(H=0|tr[j+8+3>>0])<<24>>24<0)?0|ar[j>>2]:j)+((r?0|ar[j+4>>2]:255&H)<<2)|0,ar[o>>2]=ar[c>>2],ar[a>>2]=ar[l>>2],H=0|Sr(A,o,a,i,f,n,t,H),ar[e>>2]=H,H=26;break;case 101:case 100:ar[u>>2]=ar[r>>2],ar[a>>2]=ar[u>>2],Or(A,n+12|0,e,a,f,D),H=26;break;case 68:ar[b>>2]=ar[e>>2],ar[s>>2]=ar[r>>2],ar[o>>2]=ar[b>>2],ar[a>>2]=ar[s>>2],H=0|Sr(A,o,a,i,f,n,16244,16276),ar[e>>2]=H,H=26;break;case 70:ar[d>>2]=ar[e>>2],ar[k>>2]=ar[r>>2],ar[o>>2]=ar[d>>2],ar[a>>2]=ar[k>>2],H=0|Sr(A,o,a,i,f,n,16276,16308),ar[e>>2]=H,H=26;break;case 72:ar[h>>2]=ar[r>>2],ar[a>>2]=ar[h>>2],zr(A,J,e,a,f,D),H=26;break;case 73:ar[w>>2]=ar[r>>2],ar[a>>2]=ar[w>>2],jr(A,J,e,a,f,D),H=26;break;case 106:ar[v>>2]=ar[r>>2],ar[a>>2]=ar[v>>2],Hr(A,n+28|0,e,a,f,D),H=26;break;case 109:ar[m>>2]=ar[r>>2],ar[a>>2]=ar[m>>2],xr(A,T,e,a,f,D),H=26;break;case 77:ar[g>>2]=ar[r>>2],ar[a>>2]=ar[g>>2],Pr(A,n+4|0,e,a,f,D),H=26;break;case 116:case 110:ar[Z>>2]=ar[r>>2],ar[a>>2]=ar[Z>>2],Lr(A,e,a,f,D),H=26;break;case 112:ar[p>>2]=ar[r>>2],ar[a>>2]=ar[p>>2],Kr(A,J,e,a,f,D),H=26;break;case 114:ar[y>>2]=ar[e>>2],ar[B>>2]=ar[r>>2],ar[o>>2]=ar[y>>2],ar[a>>2]=ar[B>>2],H=0|Sr(A,o,a,i,f,n,16308,16352),ar[e>>2]=H,H=26;break;case 82:ar[E>>2]=ar[e>>2],ar[X>>2]=ar[r>>2],ar[o>>2]=ar[E>>2],ar[a>>2]=ar[X>>2],H=0|Sr(A,o,a,i,f,n,16352,16372),ar[e>>2]=H,H=26;break;case 83:ar[W>>2]=ar[r>>2],ar[a>>2]=ar[W>>2],qr(A,n,e,a,f,D),H=26;break;case 84:ar[I>>2]=ar[e>>2],ar[C>>2]=ar[r>>2],ar[o>>2]=ar[I>>2],ar[a>>2]=ar[C>>2],H=0|Sr(A,o,a,i,f,n,16372,16404),ar[e>>2]=H,H=26;break;case 119:ar[G>>2]=ar[r>>2],ar[a>>2]=ar[G>>2],$r(A,U,e,a,f,D),H=26;break;case 120:t=0|ar[20+(0|ar[A>>2])>>2],ar[V>>2]=ar[e>>2],ar[F>>2]=ar[r>>2],ar[o>>2]=ar[V>>2],ar[a>>2]=ar[F>>2],o=0|$b[63&t](A,o,a,i,f,n);break;case 88:j=0|jb[127&ar[24+(0|ar[S>>2])>>2]](S),ar[R>>2]=ar[e>>2],ar[N>>2]=ar[r>>2],H=(t=(r=(H=0|tr[j+8+3>>0])<<24>>24<0)?0|ar[j>>2]:j)+((r?0|ar[j+4>>2]:255&H)<<2)|0,ar[o>>2]=ar[R>>2],ar[a>>2]=ar[N>>2],H=0|Sr(A,o,a,i,f,n,t,H),ar[e>>2]=H,H=26;break;case 121:ar[_>>2]=ar[r>>2],ar[a>>2]=ar[_>>2],Ai(A,M,e,a,f,D),H=26;break;case 89:ar[Y>>2]=ar[r>>2],ar[a>>2]=ar[Y>>2],ei(A,M,e,a,f,D),H=26;break;case 37:ar[Q>>2]=ar[r>>2],ar[a>>2]=ar[Q>>2],ri(A,e,a,f,D),H=26;break;default:ar[f>>2]=4|ar[f>>2],H=26}return 26==(0|H)&&(o=0|ar[e>>2]),ur=z,0|o},function(A,e,r,i,f,n,t,o){var a;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,A=ur=(e=ur)+31&-32,ur=ur+16|0,t=0|function(A,e,r,i,f,n,t,o){A|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0;var a=0,c=0,l=0;ar[(r|=0)>>2]=A,ar[n>>2]=i,2&o?(f-i|0)<3?A=1:(ar[n>>2]=i+1,tr[i>>0]=-17,a=0|ar[n>>2],ar[n>>2]=a+1,tr[a>>0]=-69,a=0|ar[n>>2],ar[n>>2]=a+1,tr[a>>0]=-65,a=4):a=4;A:do{if(4==(0|a))for(A=0|ar[r>>2];;){if(e>>>0<=A>>>0){A=0;break A}if(l=0|ar[A>>2],t>>>0<l>>>0|55296==(-2048&l|0)){A=2;break A}do{if(128<=l>>>0){if(c=255&(63&l|128),l>>>0<2048){if(A=0|ar[n>>2],(f-A|0)<2){A=1;break A}ar[n>>2]=A+1,tr[A>>0]=l>>>6|192,l=0|ar[n>>2],ar[n>>2]=l+1,tr[l>>0]=c;break}if(A=0|ar[n>>2],i=f-A|0,o=A+1|0,a=255&(l>>>6&63|128),l>>>0<65536){if((0|i)<3){A=1;break A}ar[n>>2]=o,tr[A>>0]=l>>>12|224,l=0|ar[n>>2],ar[n>>2]=l+1,tr[l>>0]=a,l=0|ar[n>>2],ar[n>>2]=l+1,tr[l>>0]=c;break}if((0|i)<4){A=1;break A}ar[n>>2]=o,tr[A>>0]=l>>>18|240,o=0|ar[n>>2],ar[n>>2]=o+1,tr[o>>0]=l>>>12&63|128,l=0|ar[n>>2],ar[n>>2]=l+1,tr[l>>0]=a,l=0|ar[n>>2],ar[n>>2]=l+1,tr[l>>0]=c;break}if(A=0|ar[n>>2],(f-A|0)<1){A=1;break A}ar[n>>2]=A+1,tr[A>>0]=l}while(0);A=4+(0|ar[r>>2])|0,ar[r>>2]=A}}while(0);return 0|A}(ar[(a=A+4|0)>>2]=r,i,a,ar[A>>2]=n,t,A,1114111,0),ar[f>>2]=ar[a>>2],ar[o>>2]=ar[A>>2],ur=e,0|t},function(A,e,r,i,f,n,t,o){var a;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,A=ur=(e=ur)+31&-32,ur=ur+16|0,t=0|function(A,e,r,i,f,n,t,o){A|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0;var a,c=0,l=0,u=0,b=0,s=0;ar[(r|=0)>>2]=A,ar[n>>2]=i,a=e,4&o|0&&(c=0|ar[r>>2],2<(a-c|0))&&-17==(0|tr[c>>0])&&-69==(0|tr[c+1>>0])&&-65==(0|tr[c+2>>0])&&(ar[r>>2]=c+3);A:for(;;){if(l=0|ar[r>>2],e>>>0<=l>>>0){A=0;break}if(s=0|ar[n>>2],f>>>0<=s>>>0){A=1;break}u=0|tr[l>>0],b=255&u,A=l+1|0;do{if(-1<u<<24>>24){if(t>>>0<b>>>0){A=2;break A}ar[s>>2]=b}else{if((255&u)<194){A=2;break A}if(c=l+2|0,i=a-l|0,(255&u)<224){if((0|i)<2){A=1;break A}if(128!=(192&(A=0|cr[A>>0])|0)){A=2;break A}if(t>>>0<(A=63&A|b<<6&1984)>>>0){A=2;break A}ar[s>>2]=A,A=c;break}if(o=l+3|0,(255&u)<240){if((0|i)<3){A=1;break A}switch(i=0|tr[c>>0],c=0|cr[A>>0],A=224&c,u<<24>>24){case-32:if(160==(0|A))break;A=2;break A;case-19:if(128==(0|A))break;A=2;break A;default:if(128!=(192&c|0)){A=2;break A}}if(128!=(192&(A=255&i)|0)){A=2;break A}if(t>>>0<(A=c<<6&4032|b<<12&61440|63&A)>>>0){A=2;break A}ar[s>>2]=A,A=o;break}if(245<=(255&u)){A=2;break A}if((0|i)<4){A=1;break A}switch(i=0|tr[A>>0],A=0|tr[c>>0],c=0|tr[o>>0],o=255&i,u<<24>>24){case-16:if(48<=(i+112&255)){A=2;break A}break;case-12:if(128==(240&o|0))break;A=2;break A;default:if(128!=(192&o|0)){A=2;break A}}if(128!=(192&(i=255&A)|0)){A=2;break A}if(128!=(192&(A=255&c)|0)){A=2;break A}if(t>>>0<(A=o<<12&258048|b<<18&1835008|i<<6&4032|63&A)>>>0){A=2;break A}ar[s>>2]=A,A=l+4|0}}while(0);ar[r>>2]=A,ar[n>>2]=4+(0|ar[n>>2])}return 0|A}(ar[(a=A+4|0)>>2]=r,i,a,ar[A>>2]=n,t,A,1114111,0),ar[f>>2]=ar[a>>2],ar[o>>2]=ar[A>>2],ur=e,0|t},function(A,e,r,i,f,n,t,o){A|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0;var a,c,l,u,b=0,s=0,d=0,k=0;for(d=ur=(u=ur)+31&-32,ur=ur+16|0,d=(l=d)+8|0,b=r|=0;;){if((0|b)==(0|i)){b=i;break}if(!(0|ar[b>>2]))break;b=b+4|0}ar[o>>2]=n,ar[f>>2]=r,a=t,c=A+8|0;A:for(;;){if((0|n)==(0|t)|(0|r)==(0|i)){b=35;break}switch(s=0|ar[(k=e)+4>>2],ar[(A=l)>>2]=ar[k>>2],ar[A+4>>2]=s,A=0|rf(0|ar[c>>2]),s=0|Fi(n,f,b-r>>2,a-n|0,e),0|A&&rf(A),0|s){case-1:b=10;break A;case 0:r=1,b=32;break A}if(n=(0|ar[o>>2])+s|0,(0|(ar[o>>2]=n))==(0|t)){b=33;break}if((0|b)==(0|i))b=i,r=0|ar[f>>2];else{if(n=0|rf(0|ar[c>>2]),r=0|$c(d,0),0|n&&rf(n),-1==(0|r)){r=2,b=31;break}if(r>>>0>(a-(0|ar[o>>2])|0)>>>0){r=1,b=31;break}for(n=d;r;)s=0|tr[n>>0],k=0|ar[o>>2],ar[o>>2]=k+1,tr[k>>0]=s,n=n+1|0,r=r+-1|0;for(r=4+(0|ar[f>>2])|0,b=ar[f>>2]=r;;){if((0|b)==(0|i)){b=i;break}if(!(0|ar[b>>2]))break;b=b+4|0}n=0|ar[o>>2]}}if(10==(0|b)){for(ar[o>>2]=n;(0|r)!=(0|ar[f>>2])&&(k=0|ar[r>>2],b=0|rf(0|ar[c>>2]),n=0|$c(n,k),0|b&&rf(b),-1!=(0|n));)n=(0|ar[o>>2])+n|0,ar[o>>2]=n,r=r+4|0;ar[f>>2]=r,r=2,b=32}else 31==(0|b)?b=32:33==(0|b)&&(r=0|ar[f>>2],b=35);return 32!=(0|b)&&35==(0|b)&&(r=(0|r)!=(0|i)&1),ur=u,0|r},function(A,e,r,i,f,n,t,o){A|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0;var a,c,l,u,b=0,s=0,d=0;for(l=ur=(u=ur)+31&-32,ur=ur+16|0,b=r|=0;;){if((0|b)==(0|i)){b=i;break}if(!(0|tr[b>>0]))break;b=b+1|0}for(ar[o>>2]=n,ar[f>>2]=r,a=t,c=A+8|0,A=n;;){if((0|A)==(0|t)|(0|r)==(0|i)){A=32;break}if(n=0|ar[(s=e)+4>>2],ar[(d=l)>>2]=ar[s>>2],ar[d+4>>2]=n,d=b,n=0|rf(0|ar[c>>2]),s=0|Vi(A,f,d-r|0,a-A>>2,e),0|n&&rf(n),-1==(0|s)){b=A,A=10;break}if(A=(0|ar[o>>2])+(s<<2)|0,(0|(ar[o>>2]=A))==(0|t)){A=29;break}if(r=0|ar[f>>2],(0|b)==(0|i))b=i;else{if(b=0|rf(0|ar[c>>2]),r=0|Gi(A,r,1,e),0|b&&rf(b),0|r){r=2,A=28;break}for(ar[o>>2]=4+(0|ar[o>>2]),r=1+(0|ar[f>>2])|0,b=ar[f>>2]=r;;){if((0|b)==(0|i)){b=i;break}if(!(0|tr[b>>0]))break;b=b+1|0}A=0|ar[o>>2]}}do{if(10==(0|A)){A:for(;;){if(ar[o>>2]=b,(0|r)==(0|ar[f>>2])){A=18;break}switch(A=0|rf(0|ar[c>>2]),b=0|Gi(b,r,d-r|0,l),0|A&&rf(A),0|b){case-1:A=15;break A;case-2:A=16;break A;case 0:b=1}r=r+b|0,b=4+(0|ar[o>>2])|0,A=10}if(15==(0|A)){ar[f>>2]=r,r=2,A=28;break}if(16==(0|A)){ar[f>>2]=r,r=1,A=28;break}if(18==(0|A)){r=(0|(ar[f>>2]=r))!=(0|i)&1,A=28;break}}else 29==(0|A)&&(r=0|ar[f>>2],A=32)}while(0);return 28!=(0|A)&&32==(0|A)&&(r=(0|r)!=(0|i)&1),ur=u,0|r},function(A,e,r,i,f,n,t,o){return r|=0,n|=0,o|=0,ar[(f|=0)>>2]=r,ar[o>>2]=n,3},function(A,e,r,i,f,n,t,o){return r|=0,n|=0,o|=0,ar[(f|=0)>>2]=r,ar[o>>2]=n,3},function(A,e,r,i,f,n,t,o){var a;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,A=ur=(e=ur)+31&-32,ur=ur+16|0,t=0|function(A,e,r,i,f,n,t,o){A|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0;var a=0,c=0,l=0,u=0,b=0;ar[(r|=0)>>2]=A,ar[n>>2]=i,2&o?(f-i|0)<3?A=1:(ar[n>>2]=i+1,tr[i>>0]=-17,a=0|ar[n>>2],ar[n>>2]=a+1,tr[a>>0]=-69,a=0|ar[n>>2],ar[n>>2]=a+1,tr[a>>0]=-65,a=4):a=4;A:do{if(4==(0|a))for(b=e,A=0|ar[r>>2];;){if(e>>>0<=A>>>0){A=0;break A}if(i=0|or[A>>1],t>>>0<(u=65535&i)>>>0){A=2;break A}do{if((65535&i)<128){if(A=0|ar[n>>2],(f-A|0)<1){A=1;break A}ar[n>>2]=A+1,tr[A>>0]=i}else{if(l=255&(128|(c=63&u)),(65535&i)<2048){if(A=0|ar[n>>2],(f-A|0)<2){A=1;break A}ar[n>>2]=A+1,tr[A>>0]=u>>>6|192,u=0|ar[n>>2],ar[n>>2]=u+1,tr[u>>0]=l;break}if(o=255&(u>>>12|224),a=255&(u>>>6&63|128),(65535&i)<55296){if(A=0|ar[n>>2],(f-A|0)<3){A=1;break A}ar[n>>2]=A+1,tr[A>>0]=o,u=0|ar[n>>2],ar[n>>2]=u+1,tr[u>>0]=a,u=0|ar[n>>2],ar[n>>2]=u+1,tr[u>>0]=l;break}if(56320<=(65535&i)){if((65535&i)<57344){A=2;break A}if(A=0|ar[n>>2],(f-A|0)<3){A=1;break A}ar[n>>2]=A+1,tr[A>>0]=o,u=0|ar[n>>2],ar[n>>2]=u+1,tr[u>>0]=a,u=0|ar[n>>2],ar[n>>2]=u+1,tr[u>>0]=l;break}if((b-A|0)<4){A=1;break A}if(56320!=(64512&(i=0|lr[(A=A+2|0)>>1])|0)){A=2;break A}if((f-(0|ar[n>>2])|0)<4){A=1;break A}if(t>>>0<(65536+((o=960&u)<<10)|c<<10|1023&i)>>>0){A=2;break A}ar[r>>2]=A,c=1+(o>>>6)|0,l=0|ar[n>>2],ar[n>>2]=l+1,tr[l>>0]=c>>>2|240,l=0|ar[n>>2],ar[n>>2]=l+1,tr[l>>0]=u>>>2&15|c<<4&48|128,l=0|ar[n>>2],ar[n>>2]=l+1,tr[l>>0]=u<<4&48|i>>>6&15|128,u=0|ar[n>>2],ar[n>>2]=u+1,tr[u>>0]=63&i|128}}while(0);A=2+(0|ar[r>>2])|0,ar[r>>2]=A}}while(0);return 0|A}(ar[(a=A+4|0)>>2]=r,i,a,ar[A>>2]=n,t,A,1114111,0),ar[f>>2]=ar[a>>2],ar[o>>2]=ar[A>>2],ur=e,0|t},function(A,e,r,i,f,n,t,o){var a;return A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,A=ur=(e=ur)+31&-32,ur=ur+16|0,t=0|function(A,e,r,i,f,n,t,o){A|=0,e|=0,i|=0,f|=0,n|=0,t|=0,o|=0;var a,c,l=0,u=0,b=0,s=0,d=0,k=0;ar[(r|=0)>>2]=A,ar[n>>2]=i,c=e,4&o|0&&(l=0|ar[r>>2],2<(c-l|0))&&-17==(0|tr[l>>0])&&-69==(0|tr[l+1>>0])&&-65==(0|tr[l+2>>0])&&(ar[r>>2]=l+3);a=f;A:for(;;){if(i=0|ar[r>>2],!(A=i>>>0<e>>>0)){k=40;break}if(d=0|ar[n>>2],f>>>0<=d>>>0){k=40;break}if(b=0|tr[i>>0],t>>>0<(s=255&b)>>>0){A=2;break}A=i+1|0;do{if(-1<b<<24>>24)or[d>>1]=255&b;else{if((255&b)<194){A=2;break A}if(l=c-i|0,o=i+2|0,(255&b)<224){if((0|l)<2){A=1;break A}if(128!=(192&(A=0|cr[A>>0])|0)){A=2;break A}if(t>>>0<(A=63&A|s<<6&1984)>>>0){A=2;break A}or[d>>1]=A,A=o;break}if(u=i+3|0,(255&b)<240){if((0|l)<3){A=1;break A}switch(i=0|tr[o>>0],l=0|cr[A>>0],A=224&l,b<<24>>24){case-32:if(160==(0|A))break;A=2;break A;case-19:if(128==(0|A))break;A=2;break A;default:if(128!=(192&l|0)){A=2;break A}}if(128!=(192&(A=255&i)|0)){A=2;break A}if(t>>>0<(65535&(A=l<<6&4032|s<<12|63&A))>>>0){A=2;break A}or[d>>1]=A,A=u;break}if(245<=(255&b)){A=2;break A}if((0|l)<4){A=1;break A}switch(l=0|tr[A>>0],A=0|tr[o>>0],i=0|tr[u>>0],u=255&l,b<<24>>24){case-16:if(48<=(l+112&255)){A=2;break A}break;case-12:if(128==(240&u|0))break;A=2;break A;default:if(128!=(192&u|0)){A=2;break A}}if(128!=(192&(o=255&A)|0)){A=2;break A}if(128!=(192&(A=255&i)|0)){A=2;break A}if((a-d|0)<4){A=1;break A}if(t>>>0<(u<<12&258048|(i=7&s)<<18|4032&(l=o<<6)|(A&=63))>>>0){A=2;break A}or[d>>1]=u<<2&60|o>>>4&3|16320+((u>>>4&3|i<<2)<<6)|55296,d=d+2|0,ar[n>>2]=d,or[d>>1]=A|960&l|56320,A=4+(0|ar[r>>2])|0}}while(0);ar[r>>2]=A,ar[n>>2]=2+(0|ar[n>>2])}40==(0|k)&&(A&=1);return 0|A}(ar[(a=A+4|0)>>2]=r,i,a,ar[A>>2]=n,t,A,1114111,0),ar[f>>2]=ar[a>>2],ar[o>>2]=ar[A>>2],ur=e,0|t},Rb,Rb,Rb,Rb,Rb],rs=[Nb,function(){!function(){var A=0;if(A=0|ar[14154],ar[14154]=A+1,1<(A+1|0))return A=0;if(Ya(),0|Ka())return A=0;ar[14154]=(0|ar[14154])-1,A=11}()},function(){!function(){var A=0;if(A=0|ar[14154],ar[14154]=A-1,(0|(A=A+-1|0))<0)return ar[14154]=1+(0|ar[14154]),A=12;if(0|A)return A=0;qa(),A=0}()},function(){W()},function(){var A,e,r,i=0,f=0,n=0,t=0,o=0;t=ur=ur+31&-32,ur=ur+48|0,r=t+32|0,A=t+24|0,o=t+16|0,t=(e=t)+36|0,0|(i=0|zu())&&0|(n=0|ar[i>>2])&&(1126902528==(-256&(f=0|ar[(i=n+48|0)>>2])|0)&1129074247==(0|(i=0|ar[i+4>>2]))||(ar[A>>2]=56019,ju(55969,A)),i=1126902529==(0|f)&1129074247==(0|i)?0|ar[n+44>>2]:n+80|0,ar[t>>2]=i,n=0|ar[n>>2],i=0|ar[n+4>>2],0|xb[63&ar[16+(0|ar[984])>>2]](3936,n,t)?(o=0|ar[t>>2],o=0|jb[127&ar[8+(0|ar[o>>2])>>2]](o),ar[e>>2]=56019,ar[e+4>>2]=i,ar[e+8>>2]=o,ju(55883,e)):(ar[o>>2]=56019,ar[o+4>>2]=i,ju(55928,o))),ju(56007,r)},function(){var A,e;e=ur=(A=ur)+31&-32,ur=ur+16|0,0|mA(61152,446)?ju(56207,e):ur=A},Nb,Nb],is=[_b,XA,function(A){var e;ar[(A|=0)>>2]=4232,(e=0|ar[A+24>>2])&&mu(e),vu(A)},function(A){var e;ar[(A|=0)>>2]=4264,(e=0|ar[A+24>>2])&&((0|ar[(A=A+28|0)>>2])!=(0|e)&&(ar[A>>2]=e),vu(e))},function(A){var e,r;ar[(A|=0)>>2]=4264,(e=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|e)&&(ar[r>>2]=e),vu(e)),vu(A)},function(A){var e,r,i;ar[(A|=0)>>2]=4304,ar[(e=A+56|0)>>2]=4324,ar[(r=A+4|0)>>2]=4340,(0|tr[11+(i=A+36|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),Gf(),bf(e)},function(A){var e,r,i;ar[(A|=0)>>2]=4304,ar[(e=A+56|0)>>2]=4324,ar[(r=A+4|0)>>2]=4340,(0|tr[11+(i=A+36|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),Gf(),bf(e),vu(A)},function(A){var e,r,i;A=(A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0,ar[A>>2]=4304,ar[(e=A+56|0)>>2]=4324,ar[(r=A+4|0)>>2]=4340,(0|tr[11+(i=A+36|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),Gf(),bf(e)},function(A){var e,r,i;A=(A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0,ar[A>>2]=4304,ar[(e=A+56|0)>>2]=4324,ar[(r=A+4|0)>>2]=4340,(0|tr[11+(i=A+36|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),Gf(),bf(e),vu(A)},function(A){var e;ar[(A|=0)>>2]=4340,(0|tr[11+(e=A+32|0)>>0])<0&&vu(0|ar[e>>2]),kf(A)},function(A){var e;ar[(A|=0)>>2]=4340,(0|tr[11+(e=A+32|0)>>0])<0&&vu(0|ar[e>>2]),kf(A),vu(A)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){tr[(A|=0)+37>>0]=0},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4436,0|(r=0|ar[A+64>>2])&&((0|(f=0|ar[(i=A+68|0)>>2]))!=(0|r)&&(ar[i>>2]=f+(~((f+-4-r|0)>>>2)<<2)),vu(r)),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4436,0|(r=0|ar[A+64>>2])&&((0|(f=0|ar[(i=A+68|0)>>2]))!=(0|r)&&(ar[i>>2]=f+(~((f+-4-r|0)>>>2)<<2)),vu(r)),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i;ar[(A|=0)>>2]=4504,ar[(e=A+64|0)>>2]=4544,ar[A+8>>2]=4524,ar[(r=A+12|0)>>2]=4340,(0|tr[11+(i=A+44|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),_f(),bf(e)},function(A){var e,r,i;ar[(A|=0)>>2]=4504,ar[(e=A+64|0)>>2]=4544,ar[A+8>>2]=4524,ar[(r=A+12|0)>>2]=4340,(0|tr[11+(i=A+44|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),_f(),bf(e),vu(A)},function(A){var e,r,i;ar[(A=(A|=0)+-8|0)>>2]=4504,ar[(e=A+64|0)>>2]=4544,ar[A+8>>2]=4524,ar[(r=A+12|0)>>2]=4340,(0|tr[11+(i=A+44|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),_f(),bf(e)},function(A){var e,r,i;ar[(A=(A|=0)+-8|0)>>2]=4504,ar[(e=A+64|0)>>2]=4544,ar[A+8>>2]=4524,ar[(r=A+12|0)>>2]=4340,(0|tr[11+(i=A+44|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),_f(),bf(e),vu(A)},function(A){var e,r,i;A=(A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0,ar[A>>2]=4504,ar[(e=A+64|0)>>2]=4544,ar[A+8>>2]=4524,ar[(r=A+12|0)>>2]=4340,(0|tr[11+(i=A+44|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),_f(),bf(e)},function(A){var e,r,i;A=(A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0,ar[A>>2]=4504,ar[(e=A+64|0)>>2]=4544,ar[A+8>>2]=4524,ar[(r=A+12|0)>>2]=4340,(0|tr[11+(i=A+44|0)>>0])<0&&vu(0|ar[i>>2]),kf(r),_f(),bf(e),vu(A)},yf,Bf,function(A){yf((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},function(A){Bf((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},Rf,Nf,function(A){Rf((A|=0)+-8|0)},function(A){Nf((A|=0)+-8|0)},function(A){Rf((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},function(A){Nf((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},If,Cf,function(A){If((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},function(A){Cf((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4600,ar[(r=A+16|0)>>2]=4436,0|(i=0|ar[A+80>>2])&&((0|(n=0|ar[(f=A+84|0)>>2]))!=(0|i)&&(ar[f>>2]=n+(~((n+-4-i|0)>>>2)<<2)),vu(i)),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4600,ar[(r=A+16|0)>>2]=4436,0|(i=0|ar[A+80>>2])&&((0|(n=0|ar[(f=A+84|0)>>2]))!=(0|i)&&(ar[f>>2]=n+(~((n+-4-i|0)>>>2)<<2)),vu(i)),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4628,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4628,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4656,ar[(r=A+16|0)>>2]=4684,(0|tr[(i=A+92|0)+11>>0])<0&&vu(0|ar[i>>2]),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4656,ar[(r=A+16|0)>>2]=4684,(0|tr[(i=A+92|0)+11>>0])<0&&vu(0|ar[i>>2]),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4684,(0|tr[(r=A+76|0)+11>>0])<0&&vu(0|ar[r>>2]),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4684,(0|tr[(r=A+76|0)+11>>0])<0&&vu(0|ar[r>>2]),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4716,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4716,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){tr[(A|=0)+37>>0]=65535<(0|ar[A+56>>2])>>>0&1},function(A){ar[(A|=0)>>2]=4776,Yt(A+16|0),tu()},function(A){ar[(A|=0)>>2]=4776,Yt(A+16|0),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},Yt,function(A){Yt(A|=0),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0,o=0;if(i=0|cr[(A|=0)+72>>0],i=!(65535<(n=0|ar[A+60>>2])-(f=0|ar[A+56>>2])>>5>>>0)||2<i>>>0?i:2,r=A+74|0,t=A+75|0,o=A+76|0,tr[(e=A+73|0)>>0]=0,tr[1+e>>0]=0,tr[2+e>>0]=0,((tr[3+e>>0]=0)|f)==(0|n))return n=i,tr[e>>0]=4,tr[r>>0]=4,tr[t>>0]=4,tr[o>>0]=0,t=255&n,void(tr[(o=A+37|0)>>0]=t);for(;i=!(65535<(0|ar[f>>2])>>>0)||2<(0|i)?i:2,i=0==(0|tr[f+4>>0])|1<(0|i)?i:1,(0|(f=f+32|0))!=(0|n););tr[e>>0]=4,tr[r>>0]=4,tr[t>>0]=4,tr[o>>0]=0,t=255&i,tr[(o=A+37|0)>>0]=t},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4836,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4836,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){tr[(A|=0)+37>>0]=65535<(0|ar[A+48>>2])-(0|ar[A+44>>2])>>3>>>0&1},function(A){ar[(A|=0)>>2]=4896,_t(A+16|0),tu()},function(A){ar[(A|=0)>>2]=4896,_t(A+16|0),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},_t,function(A){_t(A|=0),vu(A)},function(A){var e,r=0,i=0,f=0;if(r=(e=65535<(0|ar[(A|=0)+56>>2])>>>0)?3:0==(0|tr[A+124>>0])?0:2,0==(0|((f=0|tr[(i=A+64|0)+11>>0])<<24>>24<0?0|ar[A+68>>2]:255&f))&&(f=0==(0|Yu(i,0,-1,79659,0))))return i=r,i&=255,void(tr[(f=A+37|0)>>0]=i);i=r=e?3:2,i&=255,tr[(f=A+37|0)>>0]=i},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4956,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=4956,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5016,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5016,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){ar[(A|=0)>>2]=5076,Ft(A+16|0),tu()},function(A){ar[(A|=0)>>2]=5076,Ft(A+16|0),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},Ft,function(A){Ft(A|=0),vu(A)},function(A){var e=0,r=0,i=0,f=0,n=0,t=0;if((0|(r=0|ar[(A|=0)+56>>2]))==(0|(t=0|ar[A+60>>2])))return tr[(t=A+37|(n=f=0))>>0]=f,n&=1,void(ar[(t=A+40|0)>>2]=n);n=e=0;do{if(n=65535<(0|ar[r>>2])>>>0?1:n,(0|(i=0|ar[r+4>>2]))!=(0|(f=0|ar[r+8>>2])))for(;e|=127<(0|lr[i+2>>1]),(0|(i=i+4|0))!=(0|f););r=r+16|0}while((0|r)!=(0|t));f=255&n,n=e,tr[(t=A+37|0)>>0]=f,n&=1,ar[(t=A+40|0)>>2]=n},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5136,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5136,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},Vt,function(A){Vt(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5224,0|(r=0|ar[A+68>>2])&&((0|ar[(i=A+72|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),(0|tr[(r=A+56|0)+11>>0])<0&&vu(0|ar[r>>2]),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5224,0|(r=0|ar[A+68>>2])&&((0|ar[(i=A+72|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),(0|tr[(r=A+56|0)+11>>0])<0&&vu(0|ar[r>>2]),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5256,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5256,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5316,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5316,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5376,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5376,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){ar[(A|=0)>>2]=5436,be(A+16|0),tu()},function(A){ar[(A|=0)>>2]=5436,be(A+16|0),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},be,function(A){be(A|=0),vu(A)},function(A){var e=0,r=0,i=0,f=0,n=0,t=0;if((0|(r=0|ar[(A|=0)+56>>2]))!=(0|(n=0|ar[A+60>>2]))){for(e=0;;){if(65535<(0|ar[r+48>>2])>>>0){e=1,r=6;break}if((0|(i=0|ar[r+52>>2]))!=(0|(f=0|ar[r+56>>2])))for(;e=(t=65535<(0|ar[i>>2])>>>0)?1:e,!(t|(0|(i=i+4|0))==(0|f)););if((0|(r=r+64|0))==(0|n)){r=6;break}}6!=(0|r)||(tr[(t=A+37|0)>>0]=e)}else tr[(A=A+37|(n=0))>>0]=n},function(A){ar[(A|=0)>>2]=5496,ce(A+16|0),tu()},function(A){ar[(A|=0)>>2]=5496,ce(A+16|0),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},ce,function(A){ce(A|=0),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5556,ar[(r=A+16|0)>>2]=5584,0|(i=0|ar[A+84>>2])&&((0|ar[(f=A+88|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5556,ar[(r=A+16|0)>>2]=5584,0|(i=0|ar[A+84>>2])&&((0|ar[(f=A+88|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5584,0|(r=0|ar[A+68>>2])&&((0|ar[(i=A+72|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5584,0|(r=0|ar[A+68>>2])&&((0|ar[(i=A+72|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5616,ar[(r=A+16|0)>>2]=5644,0|(i=0|ar[A+88>>2])&&((0|ar[(f=A+92|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5616,ar[(r=A+16|0)>>2]=5644,0|(i=0|ar[A+88>>2])&&((0|ar[(f=A+92|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5644,0|(r=0|ar[A+72>>2])&&((0|ar[(i=A+76|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5644,0|(r=0|ar[A+72>>2])&&((0|ar[(i=A+76|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){ar[(A|=0)>>2]=5676,te(A+16|0),tu()},function(A){ar[(A|=0)>>2]=5676,te(A+16|0),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},te,function(A){te(A|=0),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5736,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5736,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5796,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5796,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5856,ar[(r=A+16|0)>>2]=5884,(0|tr[(i=A+72|0)+11>>0])<0&&vu(0|ar[i>>2]),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5856,ar[(r=A+16|0)>>2]=5884,(0|tr[(i=A+72|0)+11>>0])<0&&vu(0|ar[i>>2]),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5884,(0|tr[(r=A+56|0)+11>>0])<0&&vu(0|ar[r>>2]),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5884,(0|tr[(r=A+56|0)+11>>0])<0&&vu(0|ar[r>>2]),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5916,ar[(r=A+16|0)>>2]=5944,0|(i=0|ar[A+76>>2])&&du(i),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5916,ar[(r=A+16|0)>>2]=5944,0|(i=0|ar[A+76>>2])&&du(i),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5944,0|(r=0|ar[A+60>>2])&&du(r),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=5944,0|(r=0|ar[A+60>>2])&&du(r),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(f=i;i=f+-8|0,ar[n>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[n>>2]),(0|i)!=(0|r);)f=i;r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5976,ar[(r=A+16|0)>>2]=6004,0|(i=0|ar[A+72>>2])&&((0|ar[(f=A+76|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=5976,ar[(r=A+16|0)>>2]=6004,0|(i=0|ar[A+72>>2])&&((0|ar[(f=A+76|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),ar[r>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(;n=f+-8|0,ar[t>>2]=n,(0|(f=(f=0|ar[f+-4>>2])?(du(f),0|ar[t>>2]):n))!=(0|i););i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=6004,0|(r=0|ar[A+56>>2])&&((0|ar[(i=A+60|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(i=0|ar[A+24>>2])&&((0|ar[(r=A+28|0)>>2])!=(0|i)&&(ar[r>>2]=i),vu(i))},function(A){var e,r=0,i=0,f=0,n=0;if(ar[(A|=0)>>2]=6004,0|(r=0|ar[A+56>>2])&&((0|ar[(i=A+60|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),ar[A>>2]=4404,0|(r=0|ar[(e=A+44|0)>>2])){if((0|(i=0|ar[(n=A+48|0)>>2]))!=(0|r)){for(;f=i+-8|0,ar[n>>2]=f,(0|(i=(i=0|ar[i+-4>>2])?(du(i),0|ar[n>>2]):f))!=(0|r););r=0|ar[e>>2]}vu(r)}ar[A>>2]=4264,(r=0|ar[A+24>>2])&&((0|ar[(i=A+28|0)>>2])!=(0|r)&&(ar[i>>2]=r),vu(r)),vu(A)},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=6036,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}ar[r>>2]=4264,(i=0|ar[A+40>>2])&&((0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i)),tu()},function(A){var e,r,i=0,f=0,n=0,t=0;if(ar[(A|=0)>>2]=6036,ar[(r=A+16|0)>>2]=4404,0|(i=0|ar[(e=A+60|0)>>2])){if((0|(f=0|ar[(t=A+64|0)>>2]))!=(0|i)){for(n=f;f=n+-8|0,ar[t>>2]=f,(n=0|ar[n+-4>>2])&&(du(n),f=0|ar[t>>2]),(0|f)!=(0|i);)n=f;i=0|ar[e>>2]}vu(i)}if(ar[r>>2]=4264,!(i=0|ar[A+40>>2]))return tu(),void vu(A);(0|ar[(f=A+44|0)>>2])!=(0|i)&&(ar[f>>2]=i),vu(i),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){0},function(A){vu(A|=0)},function(A){var e,r;ar[(A|=0)>>2]=6120,ar[A+12>>2]=6148,(e=0|ar[A+20>>2])&&((0|ar[(r=A+24|0)>>2])!=(0|e)&&(ar[r>>2]=e),vu(e)),tu()},function(A){var e,r;if(ar[(A|=0)>>2]=6120,ar[A+12>>2]=6148,!(e=0|ar[A+20>>2]))return tu(),void vu(A);(0|ar[(r=A+24|0)>>2])!=(0|e)&&(ar[r>>2]=e),vu(e),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){var e;ar[(A|=0)>>2]=6148,(e=0|ar[A+8>>2])&&((0|ar[(A=A+12|0)>>2])!=(0|e)&&(ar[A>>2]=e),vu(e))},function(A){var e,r;ar[(A|=0)>>2]=6148,(e=0|ar[A+8>>2])&&((0|ar[(r=A+12|0)>>2])!=(0|e)&&(ar[r>>2]=e),vu(e)),vu(A)},function(A){ar[(A|=0)>>2]=6180,XA(A+16|0),tu()},function(A){ar[(A|=0)>>2]=6180,XA(A+16|0),tu(),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){ar[(A|=0)>>2]=6208,po(A+12|0),tu()},function(A){ar[(A|=0)>>2]=6208,po(A+12|0),tu(),vu(A)},function(A){po((A|=0)+12|0)},function(A){vu(A|=0)},function(A){ar[(A|=0)>>2]=6336,gl(A+12|0),tu()},function(A){ar[(A|=0)>>2]=6336,gl(A+12|0),tu(),vu(A)},function(A){gl((A|=0)+12|0)},function(A){vu(A|=0)},function(A){ar[(A|=0)>>2]=6364,lo(A+12|0),tu()},function(A){ar[(A|=0)>>2]=6364,lo(A+12|0),tu(),vu(A)},function(A){lo((A|=0)+12|0)},function(A){vu(A|=0)},function(A){ar[(A|=0)>>2]=6392,El(A+16|0),tu()},function(A){ar[(A|=0)>>2]=6392,El(A+16|0),tu(),vu(A)},function(A){El((A|=0)+16|0)},function(A){vu(A|=0)},function(A){var e=0,r=0;ar[(A|=0)>>2]=6420,0|(e=0|ar[A+40>>2])&&((0|ar[(r=A+44|0)>>2])!=(0|e)&&(ar[r>>2]=e),vu(e)),(0|tr[(e=A+28|0)+11>>0])<0&&vu(0|ar[e>>2]),0<=(0|tr[(e=A+16|0)+11>>0])||vu(0|ar[e>>2]),tu()},function(A){var e=0,r=0;if(ar[(A|=0)>>2]=6420,0|(e=0|ar[A+40>>2])&&((0|ar[(r=A+44|0)>>2])!=(0|e)&&(ar[r>>2]=e),vu(e)),(0|tr[(e=A+28|0)+11>>0])<0&&vu(0|ar[e>>2]),0<=(0|tr[(e=A+16|0)+11>>0]))return tu(),void vu(A);vu(0|ar[e>>2]),tu(),vu(A)},function(A){var e=0,r=0;0|(e=0|ar[(A|=0)+40>>2])&&((0|ar[(r=A+44|0)>>2])!=(0|e)&&(ar[r>>2]=e),vu(e)),(0|tr[(e=A+28|0)+11>>0])<0&&vu(0|ar[e>>2]),0<=(0|tr[(e=A+16|0)+11>>0])||vu(0|ar[e>>2])},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+16|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){0},function(A){vu(A|=0)},function(A){0},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){tu(A|=0)},function(A){tu(A|=0),vu(A)},function(A){is[511&ar[ar[(A=(A|=0)+12|0)>>2]>>2]](A)},function(A){vu(A|=0)},function(A){(function(A){(function(A){if((0|ar[375892+(A|=0)>>2])<=0)return;!function(A){var e,r,i,f=0;{if(gb(e=420+(A|=0)|0),tr[A>>0]=1,Zb(),mb(r=A+448|0),!(0<(0|ar[(i=A+156|0)>>2])))return ZA(0|e),sA(0|r);f=0}for(;vA(0|ar[A+28+(f<<2)>>2],0),f=f+1|0,(0|f)<(0|ar[i>>2]););ZA(0|e),sA(0|r)}(A+375396|0)})(A|=0),0|A&&is[511&ar[4+(0|ar[A>>2])>>2]](A);if(A=0|ar[14154],ar[14154]=A-1,(0|(A=A+-1|0))<0)return ar[14154]=1+(0|ar[14154]),A=12;if(0|A)return A=0;qa(),A=0})(0|ar[(A|=0)>>2]),A&&vu(A)},Me,function(A){Me(A|=0),vu(A)},function(A){0},function(A){vu(A|=0)},function(A){0},function(A){vu(A|=0)},function(A){var e,r,i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0;ar[(t=(A|=0)+4|0)>>2]=1,la(0|ar[(n=A+12|0)>>2],A),o=0|ar[n>>2],u=(w=0|ar[o+5820>>2])+-1|0,i=1<<(b=0|ar[o+5804>>2]),l=A+24|0,ba(o,A,u,0|ar[(f=A+8|0)>>2],0|ar[l>>2]),0<(0|(o=0|ar[f>>2]))&&(ba(0|ar[n>>2],A,u,o+-1|0,0|ar[l>>2]),o=0|ar[f>>2]),a=o+1|0,c=0|ar[n>>2],(0|a)<(0|ar[c+5828>>2])&&(ba(c,A,u,a,0|ar[l>>2]),o=0|ar[f>>2]),r=A+16|0,function(A,e,r,i){A|=0,r|=0,i|=0;var f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(c=(0|(c=0|ar[(e|=0)+28>>2]))<(0|i)?c:i,1&r|0&&sr(36765,36663,535,36780),1&c|0&&sr(36796,36663,536,36780),n=(7+(0|ar[A+5760>>2])|0)/8|0,s=(7+(0|ar[A+5768>>2])|0)/8|0,(0|(i=0|ar[(t=e+40|0)>>2]))!=(0|(f=0|ar[(o=A+40|0)>>2]))){if((0|r)<(0|c)&&(l=A+4|0,u=e+4|0,b=e+24|0,a=0|br(n,r),hb(0|(f=(0|ar[l>>2])+(0|br(a,f))|0),0|(a=(0|ar[u>>2])+(0|br(a,i))|0),0|br(0|ar[b>>2],n)),(0|(a=r+1|0))<(0|c)))for(i=a;a=0|br(i,n),hb(0|(f=(0|ar[l>>2])+(0|br(a,0|ar[o>>2]))|0),0|(a=(0|ar[u>>2])+(0|br(a,0|ar[t>>2]))|0),0|br(0|ar[b>>2],n)),(0|(i=i+1|0))<(0|c););}else hb(0|(b=(0|ar[A+4>>2])+(0|br(0|br(n,r),i))|0),(0|ar[e+4>>2])+(0|br(0|br(i,r),n))|0,0|br(0|br(n,c-r|0),i));if(i=(0|r)/(0|(a=0|ar[e+5784>>2]))|0,a=(0|c)/(0|a)|0,0|ar[e+20>>2]){if((0|(f=0|ar[(c=e+44|0)>>2]))==(0|(n=0|ar[(r=A+44|0)>>2])))return u=0|br(i,s),l=0|br(u,f),b=0|br(a-i|0,s),hb((0|ar[A+8>>2])+l|0,(0|ar[e+8>>2])+l|0,0|br(b,f)),s=0|ar[r>>2],u=0|br(u,s),hb((0|ar[A+12>>2])+u|0,(0|ar[e+12>>2])+u|0,0|br(b,s));if(!((0|a)<=(0|i)))for(l=A+8|0,u=e+8|0,b=e+32|0,o=A+12|0,t=e+12|0;e=0|br(i,s),hb(0|(n=(0|ar[l>>2])+(0|br(e,n))|0),0|(A=(0|ar[u>>2])+(0|br(e,f))|0),0|br(0|ar[b>>2],s)),hb(0|(A=(0|ar[o>>2])+(0|br(e,0|ar[r>>2]))|0),0|(e=(0|ar[t>>2])+(0|br(e,0|ar[c>>2]))|0),0|br(0|ar[b>>2],s)),(0|(i=i+1|0))!=(0|a);)n=0|ar[r>>2],f=0|ar[c>>2]}}(0|ar[(e=A+20|0)>>2],0|ar[r>>2],o<<b,o+1<<b),o=0|ar[n>>2];A:do{if(0<(0|ar[o+5820>>2])){h=0;do{if(b=0|ar[f>>2],a=(0|br(0|ar[o+10352>>2],b))+h|0,a=0|lr[(0|ar[o+10340>>2])+(24*a|0)+2>>1],c=0|ar[o+48>>2],a>>>0>=(0|ar[o+52>>2])-c>>2>>>0)break A;if(!(k=0|ar[c+(a<<2)>>2]))break A;do{if(0|tr[k+325>>0]){if(a=0|ar[r>>2],l=0|ar[a+4>>2],a=0|ar[a+40>>2],c=0|ar[e>>2],u=0|ar[c+4>>2],c=0|ar[c+40>>2],8<(0|ar[o+5760>>2])){Ra(o,h,b,k,0,i,i,l,a,u,c);break}Na(o,h,b,k,0,i,i,l,a,u,c);break}}while(0);do{if(0|tr[k+326>>0]){if(c=0|ar[n>>2],s=(0|i)/(0|ar[c+5780>>2])|0,d=(0|i)/(0|ar[c+5784>>2])|0,l=0|ar[f>>2],a=0|ar[r>>2],u=0|ar[a+8>>2],a=0|ar[a+44>>2],o=0|ar[e>>2],b=0|ar[o+8>>2],o=0|ar[o+44>>2],(8<(0|ar[c+5768>>2])?Ra:Na)(c,h,l,k,1,s,d,u,a,b,o),u=0|ar[n>>2],b=0|ar[f>>2],a=0|ar[r>>2],c=0|ar[a+12>>2],a=0|ar[a+44>>2],o=0|ar[e>>2],l=0|ar[o+12>>2],o=0|ar[o+44>>2],8<(0|ar[u+5768>>2])){Ra(u,h,b,k,2,s,d,c,a,l,o);break}Na(u,h,b,k,2,s,d,c,a,l,o);break}}while(0);h=h+1|0,o=0|ar[n>>2]}while((0|h)<(0|ar[o+5820>>2]))}}while(0);if(!(0<(0|w)))return w=o,ar[t>>2]=3,void ua(w,A);for(a=0;Tn((0|ar[o+10524>>2])+(80*((0|br(0|ar[f>>2],0|ar[o+5820>>2]))+a|0)|0)|0,4),a=a+1|0,o=0|ar[n>>2],(0|a)!=(0|w););ar[t>>2]=3,ua(o,A)},function(A){vu(A|=0)},function(A){var e,r,i,f=0,n=0,t=0,o=0;e=0|ar[(A|=0)+20>>2],r=0|ar[(n=18596+e|0)>>2],ar[(i=A+4|0)>>2]=1,la(r,A),n=0|ar[n>>2],t=0|ar[4+e>>2],f=0|ar[n+5836>>2],o=0|ar[n+5820>>2],(0|t)<(0|f)&&(f=0|ar[(0|ar[n+10284>>2])+(t<<2)>>2]),ar[e>>2]=f,ar[8+e>>2]=(0|f)%(0|o)|0,ar[12+e>>2]=(0|f)/(0|o)|0,f=A+8|0;do{if(0|tr[f>>0]){if(!(0|Da(e)))return ar[i>>2]=3,Un(44+(0|ar[18608+e>>2])|0,1),void ua(r,A)}else{if(n=0|ar[18600+e>>2],(t=0|ar[n+796>>2])>>>0<3){ht(18580+e|0,t,0|ar[n+792>>2]),tr[(o=18588+e|0)>>0]=0,tr[o+1>>0]=0,tr[o+2>>0]=0,tr[o+3>>0]=0;break}sr(39211,39242,1508,39251)}}while(0);tt(18556+e|0),Ja(e,0,0!=(0|tr[f>>0])),ar[i>>2]=3,Un(44+(0|ar[18608+e>>2])|0,1),ua(r,A)},function(A){vu(A|=0)},function(A){var e,r,i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0;if(f=0|ar[(A|=0)+16>>2],n=0|ar[(l=18596+f|0)>>2],r=0|ar[(i=5820+n|0)>>2],ar[(t=A+4|0)>>2]=1,la(n,A),l=0|ar[l>>2],c=0|ar[4+f>>2],a=0|ar[l+5836>>2],u=0|ar[l+5820>>2],(0|c)<(0|a)&&(a=0|ar[(0|ar[l+10284>>2])+(c<<2)>>2]),ar[f>>2]=a,ar[(c=8+f|0)>>2]=(0|a)%(0|u)|0,ar[(l=12+f|0)>>2]=(0|a)/(0|u)|0,e=(0|a)/(0|r)|0,0|tr[(a=A+8|0)>>0]&&!(0|Da(f))){if(0<(0|r))for(c=10524+n|0,a=0|br(e,r),o=0;Tn((0|ar[c>>2])+(80*(o+a|0)|0)|0,1),(0|(o=o+1|0))!=(0|r););return ar[t>>2]=3,Un(44+(0|ar[18608+f>>2])|0,1),void ua(n,A)}tt(18556+f|0),Ja(f,1,a=0|tr[a>>0]?0==(0|tr[12+(0|ar[18600+f>>2])>>0]):0);A:do{if((0|ar[l>>2])==(0|e)&&(b=0|ar[i>>2],o=0|ar[c>>2],(0|o)<(0|b)))for(u=5828+n|0,c=0|br(e,r),l=10524+n|0,a=b;;){if((0|o)<(0|a)&&(0|e)<(0|ar[u>>2])&&Tn((0|ar[l>>2])+(80*(o+c|0)|0)|0,1),(0|(o=o+1|0))==(0|b))break A;a=0|ar[i>>2]}}while(0);ar[t>>2]=3,Un(44+(0|ar[18608+f>>2])|0,1),ua(n,A)},function(A){vu(A|=0)},function(A){var e,r,i,f,n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0;ar[(a=(A|=0)+4|0)>>2]=1,la(0|ar[(t=A+8|0)>>2],A),e=0|ar[t>>2],i=0|ar[10472+e>>2],d=(0|ar[5812+e>>2])/4|0,c=0|ar[(n=A+12|0)>>2],r=0|br(c,d),d=0|br(l=c+1|0,d),d=(0|(s=0|ar[10476+e>>2]))<(0|d)?s:d,f=(k=0!=(0|tr[(s=A+16|0)>>0]))?2:3,u=(o=0|ar[5820+e>>2])-1|0,k?ba(e,A,u,(0|(k=(0|ar[5828+e>>2])-1|0))<(0|l)?k:l,1):(0<(0|c)?(ba(e,A,u,c+-1|0,2),l=0|ar[t>>2],c=0|ar[n>>2]):l=e,ba(l,A,u,c,2),c=1+(0|ar[n>>2])|0,l=0|ar[t>>2],(0|c)<(0|ar[l+5828>>2])&&ba(l,A,u,c,2)),c=0|ar[t>>2],l=0|ar[n>>2],0|tr[s>>0]?(k=0|Zt(c,l),c=0|ar[t>>2],u=0|br(0|ar[c+10352>>2],0|ar[n>>2]),tr[(0|ar[c+10340>>2])+(24*u|0)+21>>0]=1&k,k&&(l=0!=(0|tr[s>>0]),b=11)):(k=0|br(0|ar[c+10352>>2],l),0|tr[(0|ar[c+10340>>2])+(24*k|0)+21>>0]&&(l=0,b=11));do{if(11==(0|b)&&(pt(c,l,r,d,0,i),c=0|ar[t>>2],l=0!=(0|tr[s>>0]),(8<(0|ar[c+5760>>2])?yt:Bt)(c,l,r,d,0,i),l=0|ar[t>>2],0|ar[l+5776>>2])){if(c=0!=(0|tr[s>>0]),8<(0|ar[l+5768>>2])){Et(l,c,r,d,0,i);break}Xt(l,c,r,d,0,i);break}}while(0);if(c=0|ar[t>>2],!(0<(0|o)))return k=c,ar[a>>2]=3,void ua(k,A);for(l=0;Tn((0|ar[c+10524>>2])+(80*((0|br(0|ar[n>>2],0|ar[c+5820>>2]))+l|0)|0)|0,f),l=l+1|0,c=0|ar[t>>2],(0|l)!=(0|o););ar[a>>2]=3,ua(c,A)},sf,function(A){sf(A|=0),vu(A)},kf,function(A){kf(A|=0),vu(A)},mf,function(A){mf(A|=0),vu(A)},Xf,Wf,function(A){Xf((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},function(A){Wf((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},Vf,Ff,function(A){Vf((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},function(A){Ff((A|=0)+(0|ar[(0|ar[A>>2])-12>>2])|0)},An,function(A){An(A|=0),vu(A)},en,function(A){en(A|=0),vu(A)},rn,function(A){rn(A|=0),vu(A)},nn,function(A){nn(A|=0),vu(A)},on,function(A){on(A|=0),vu(A)},function(A){0|(A|=0)&&is[511&ar[4+(0|ar[A>>2])>>2]](A)},cn,function(A){cn(),vu(A|=0)},function(A){an()},function(A){an(),vu(A|=0)},function(A){an()},function(A){an(),vu(A|=0)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){ni((A|=0)+8|0),an()},function(A){ni((A|=0)+8|0),an(),vu(A)},function(A){ni((A|=0)+8|0),an()},function(A){ni((A|=0)+8|0),an(),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an(A|=0)},function(A){an(A|=0),vu(A)},function(A){an()},function(A){an(),vu(A|=0)},function(A){an()},function(A){an(),vu(A|=0)},an,function(A){an(),vu(A|=0)},function(A){an(),vu(A|=0)},Ql,function(A){Ql(A|=0),vu(A)},Dl,function(A){Dl(A|=0),vu(A)},Jl,function(A){Jl(A|=0),vu(A)},Sl,function(A){Sl(A|=0),vu(A)},Ol,function(A){Ol(A|=0),vu(A)},function(A){an(),vu(A|=0)},function(A){an(),vu(A|=0)},function(A){an(),vu(A|=0)},function(A){an(),vu(A|=0)},function(A){an(),vu(A|=0)},ou,function(A){ou(),vu(A|=0)},Hu,function(A){Hu(),vu(A|=0)},function(A){0},function(A){0},function(A){Hu(),vu(A|=0)},$u,function(A){$u(A|=0),vu(A)},function(A){$u(A|=0),vu(A)},function(A){Hu(),vu(A|=0)},function(A){Hu(),vu(A|=0)},function(A){Hu(),vu(A|=0)},function(A){Hu(),vu(A|=0)},function(A){ar[(A|=0)>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,tr[A+11>>0]=6,tr[A>>0]=0|tr[30018],tr[A+1>>0]=0|tr[30019],tr[A+2>>0]=0|tr[30020],tr[A+3>>0]=0|tr[30021],tr[A+4>>0]=0|tr[30022],tr[A+5>>0]=0|tr[30023],tr[A+6>>0]=0},function(A){var e;(A|=0)&&(0|(e=0|ar[A+4>>2])&&du(e),vu(A))},function(A){var e=0;(A|=0)&&(0|(e=0|ar[A+12>>2])&&du(e),0|(e=0|ar[A+4>>2])&&du(e),vu(A))},function(A){var e;(A|=0)&&(0|(e=0|ar[A+4>>2])&&du(e),vu(A))},function(A){var e=0;(A|=0)&&(0|(e=0|ar[A+12>>2])&&du(e),0|(e=0|ar[A+4>>2])&&du(e),vu(A))},function(A){var e;(A|=0)&&(0|(e=0|ar[A+4>>2])&&du(e),vu(A))},function(A){(A|=0)&&vu(A)},function(A){var e;A|=0,e=0|ar[14811],ar[14811]=1+e,ar[A+4>>2]=1+e},function(A){!function(A){var e,r,i;e=0|ar[4+(A|=0)>>2],i=0|ar[A+8>>2],r=(0|ar[A>>2])+(i>>1)|0,A=1&i?0|ar[(0|ar[r>>2])+e>>2]:e;is[511&A](r)}(0|ar[ar[(A|=0)>>2]>>2])},function(A){0},Bc,function(A){var e,r;r=ur=(e=ur)+31&-32,ur=ur+16|0,Bc(A|=0),0|BA(0|ar[15288],0)?ju(56257,r):ur=e},_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b,_b],fs=[Yb,function(A,e){},function(A,e){var r,i;A|=0,e|=0,r=0|hu(4),ar[r>>2]=0,ar[A>>2]=ar[1904],ar[A+4>>2]=ar[1905],ar[A+8>>2]=ar[1906],A=0|(i=(i=0)|ar[14154],ar[14154]=i+1,!((i+1|0)<=1)||(Ya(),0|Ka())?(function(A){var e=0,r=0,i=0,f=0,n=0,t=0,o=0,a=0;for(ar[84+(A|=0)>>2]=0,ar[A+168>>2]=0,ar[A>>2]=7720,function(A){ar[(A|=0)>>2]=1,ar[A+4>>2]=9,ar[A+8>>2]=1,ar[A+12>>2]=1,ar[A+16>>2]=1,ar[A+20>>2]=2,ar[A+24>>2]=1,ar[A+28>>2]=1,ar[A+32>>2]=2,ar[A+36>>2]=2,ar[A+40>>2]=2,ar[A+44>>2]=2,ar[A+48>>2]=3,ar[A+52>>2]=4,ar[A+56>>2]=5,ar[A+60>>2]=6,ar[A+64>>2]=7,ar[A+68>>2]=8,ar[A+72>>2]=9,ar[A+76>>2]=10,ar[A+80>>2]=11,ar[A+84>>2]=12,ar[A+88>>2]=13,ar[A+92>>2]=14,ar[A+96>>2]=15,ar[A+100>>2]=16,ar[A+104>>2]=17,ar[A+108>>2]=18,ar[A+112>>2]=3,ar[A+116>>2]=4,ar[A+120>>2]=4,ar[A+124>>2]=4,ar[A+128>>2]=2,ar[A+132>>2]=3,ar[A+136>>2]=4,ar[A+140>>2]=5,ar[A+144>>2]=6,ar[A+148>>2]=7,ar[A+152>>2]=8,ar[A+156>>2]=9,ar[A+160>>2]=10,ar[A+164>>2]=11,ar[A+168>>2]=12,ar[A+172>>2]=13,ar[A+176>>2]=14,ar[A+180>>2]=15,ar[A+184>>2]=16,ar[A+188>>2]=17,ar[A+204>>2]=81,ar[A+212>>2]=11,ar[A+208>>2]=12,ar[A+192>>2]=82,ar[A+200>>2]=83,ar[A+196>>2]=84,ar[A+216>>2]=85,ar[A+220>>2]=86,ar[A+224>>2]=87,ar[A+228>>2]=88,ar[A+232>>2]=89,ar[A+236>>2]=13,ar[A+240>>2]=14,ar[A+244>>2]=15,ar[A+248>>2]=16,ar[A+252>>2]=17,ar[A+256>>2]=18,ar[A+260>>2]=47,ar[A+284>>2]=44,ar[A+288>>2]=45,ar[A+296>>2]=46,ar[A+292>>2]=47,ar[A+300>>2]=48,ar[A+264>>2]=19,ar[A+268>>2]=20,ar[A+272>>2]=21,ar[A+276>>2]=22,ar[A+280>>2]=23,ar[A+304>>2]=90,ar[A+308>>2]=91,ar[A+312>>2]=92,ar[A+316>>2]=93,ar[A+320>>2]=94,ar[A+324>>2]=95,ar[A+328>>2]=96,ar[A+332>>2]=97,ar[A+336>>2]=98}(A+172|0),ar[A>>2]=7696,function(A){var e;for(tr[(A|=0)>>0]=0,tr[A+1>>0]=0,e=48+(A=A+4|0)|0;((ar[A>>2]=0)|(A=A+4|0))<(0|e););}(A+548|0),ar[A+1192>>2]=0,ar[A+1196>>2]=0,ar[A+1200>>2]=0,ar[(e=A+1228|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+1848>>2]=0,ar[A+1852>>2]=0,ar[A+1856>>2]=0,ar[(e=A+1884|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+2504>>2]=0,ar[A+2508>>2]=0,ar[A+2512>>2]=0,ar[(e=A+2540|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+3160>>2]=0,ar[A+3164>>2]=0,ar[A+3168>>2]=0,ar[(e=A+3196|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+3816>>2]=0,ar[A+3820>>2]=0,ar[A+3824>>2]=0,ar[(e=A+3852|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+4472>>2]=0,ar[A+4476>>2]=0,ar[A+4480>>2]=0,ar[(e=A+4508|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+5128>>2]=0,ar[A+5132>>2]=0,ar[A+5136>>2]=0,ar[(e=A+5164|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+5784>>2]=0,ar[A+5788>>2]=0,ar[A+5792>>2]=0,ar[(e=A+5820|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+6440>>2]=0,ar[A+6444>>2]=0,ar[A+6448>>2]=0,ar[(e=A+6476|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+7096>>2]=0,ar[A+7100>>2]=0,ar[A+7104>>2]=0,ar[(e=A+7132|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+7752>>2]=0,ar[A+7756>>2]=0,ar[A+7760>>2]=0,ar[(e=A+7788|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+8408>>2]=0,ar[A+8412>>2]=0,ar[A+8416>>2]=0,ar[(e=A+8444|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+9064>>2]=0,ar[A+9068>>2]=0,ar[A+9072>>2]=0,ar[(e=A+9100|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+9720>>2]=0,ar[A+9724>>2]=0,ar[A+9728>>2]=0,ar[(e=A+9756|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+10376>>2]=0,ar[A+10380>>2]=0,ar[A+10384>>2]=0,ar[(e=A+10412|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,ar[A+11032>>2]=0,ar[A+11036>>2]=0,ar[A+11040>>2]=0,ar[(e=A+11068|0)>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[e+16>>2]=0,ar[e+20>>2]=0,$a(A+11096|0),$a(A+16264|0),$a(A+21432|0),$a(A+26600|0),$a(A+31768|0),$a(A+36936|0),$a(A+42104|0),$a(A+47272|0),$a(A+52440|0),$a(A+57608|0),$a(A+62776|0),$a(A+67944|0),$a(A+73112|0),$a(A+78280|0),$a(A+83448|0),$a(A+88616|0),e=0;Ia(A+93784+(4400*e|0)|0),64!=(0|(e=e+1|0)););for(ar[(n=A+375400|0)>>2]=0,ar[n+4>>2]=0,ar[n+8>>2]=0,ar[n+12>>2]=0,ar[n+16>>2]=0,ar[n+20>>2]=0,function(A){var e,r=0;for(e=48+(r=8+(A|=0)|0)|0;((ar[r>>2]=0)|(r=r+4|0))<(0|e););ar[A>>2]=30,ar[A+4>>2]=30}(A+376148|0),ar[A+377216>>2]=0,ar[A+377220>>2]=0,ar[A+377224>>2]=0,tr[A+512>>0]=0,tr[A+513>>0]=1,tr[A+514>>0]=0,tr[A+532>>0]=0,tr[A+533>>0]=0,ar[(n=A+516|0)>>2]=-1,ar[n+4>>2]=-1,ar[n+8>>2]=-1,ar[n+12>>2]=-1,e=0|ar[4+(n=7736)>>2],ar[(t=A+536|0)>>2]=ar[n>>2],ar[t+4>>2]=e,ar[A+544>>2]=0,ar[A+375384>>2]=0,ar[A+375388>>2]=0,ar[A+375392>>2]=0,ar[A+375892>>2]=0,ar[(t=A+375896|0)>>2]=6,ar[A+375900>>2]=100,ar[A+375904>>2]=6,ar[A+375912>>2]=6,ar[A+375908>>2]=100,e=6;;){if((0|(i=(0|(n=100*e|0))/7|0))<=(0|(n=(n+100|0)/7|0)))for(f=n-i|0,r=i;a=0|ar[t>>2],e=(o=(0|a)<(0|e))?a:e,tr[A+375916+(r<<1)>>0]=e,tr[A+375916+(r<<1)+1>>0]=o?100:255&((100*(r-i|0)|0)/(0|f)|0),(0|r)<(0|n);)r=r+1|0;if(ar[A+376120+(e<<2)>>2]=n,!(0<(0|e)))break;e=e+-1|0}ar[(a=A+376204|0)>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,ar[a+12>>2]=0,ar[a+16>>2]=0,ar[a+20>>2]=0,tr[A+376208>>0]=1,ar[a>>2]=-1}(i=0|hu(377232)),0|i):(ar[14154]=(0|ar[14154])-1,(i=0)|i)),Ne(ar[r>>2]=A,7,1),Ne(A,8,1),ar[e>>2]=r},function(A,e){A|=0,e|=0;var r,i,f=0,n=0;if(ur=(i=ur)+112|0,r=(f=i)+4|0,ar[f>>2]=ar[e+8>>2],Bi(r,39045,f),ar[A>>2]=0,ar[A+4>>2]=0,4294967279<(e=(ar[A+8>>2]=0)|Vc(r))>>>0&&pu(),e>>>0<11){if(!(tr[A+11>>0]=e))return tr[(f=(f=A)+e|0)>>0]=0,void(ur=i)}else f=0|hu(n=e+16&-16),ar[A>>2]=f,ar[A+8>>2]=-2147483648|n,ar[A+4>>2]=e,A=f;hb(0|A,0|r,0|e),tr[(n=(n=A)+e|0)>>0]=0,ur=i},function(A,e){A|=0;var r,i,f=0,n=0;if(ur=(i=ur)+112|0,r=(f=i)+8|0,n=0|ar[(e|=0)+16>>2],ar[f>>2]=ar[e+12>>2],ar[f+4>>2]=n,Bi(r,39191,f),ar[A>>2]=0,ar[A+4>>2]=0,4294967279<(e=(ar[A+8>>2]=0)|Vc(r))>>>0&&pu(),e>>>0<11){if(!(tr[A+11>>0]=e))return tr[(n=(n=A)+e|0)>>0]=0,void(ur=i)}else n=0|hu(f=e+16&-16),ar[A>>2]=n,ar[A+8>>2]=-2147483648|f,ar[A+4>>2]=e,A=n;hb(0|A,0|r,0|e),tr[(n=(n=A)+e|0)>>0]=0,ur=i},function(A,e){A|=0,e|=0;var r,i,f=0,n=0;if(ur=(i=ur)+112|0,r=(f=i)+4|0,ar[f>>2]=ar[e+12>>2],Bi(r,39665,f),ar[A>>2]=0,ar[A+4>>2]=0,4294967279<(e=(ar[A+8>>2]=0)|Vc(r))>>>0&&pu(),e>>>0<11){if(!(tr[A+11>>0]=e))return tr[(f=(f=A)+e|0)>>0]=0,void(ur=i)}else f=0|hu(n=e+16&-16),ar[A>>2]=f,ar[A+8>>2]=-2147483648|n,ar[A+4>>2]=e,A=f;hb(0|A,0|r,0|e),tr[(n=(n=A)+e|0)>>0]=0,ur=i},function(A,e){A|=0,e|=0;var r,i,f=0,n=0;if(ur=(i=ur)+112|0,r=(f=i)+4|0,ar[f>>2]=ar[e+12>>2],Bi(r,48089,f),ar[A>>2]=0,ar[A+4>>2]=0,4294967279<(e=(ar[A+8>>2]=0)|Vc(r))>>>0&&pu(),e>>>0<11){if(!(tr[A+11>>0]=e))return tr[(f=(f=A)+e|0)>>0]=0,void(ur=i)}else f=0|hu(n=e+16&-16),ar[A>>2]=f,ar[A+8>>2]=-2147483648|n,ar[A+4>>2]=e,A=f;hb(0|A,0|r,0|e),tr[(n=(n=A)+e|0)>>0]=0,ur=i},function(A,e){},function(A,e){e|=0,jb[127&ar[24+(0|ar[(A|=0)>>2])>>2]](A),e=0|un(e,61032),ar[A+36>>2]=e,e=1&(0|jb[127&ar[28+(0|ar[e>>2])>>2]](e)),tr[A+44>>0]=e},function(A,e){e|=0,jb[127&ar[24+(0|ar[(A|=0)>>2])>>2]](A),e=0|un(e,61024),ar[A+36>>2]=e,e=1&(0|jb[127&ar[28+(0|ar[e>>2])>>2]](e)),tr[A+44>>0]=e},function(A,e){A|=0;var r=0,i=0;i=0|un(e|=0,61032),ar[(r=A+36|0)>>2]=i,i=0|jb[127&ar[24+(0|ar[i>>2])>>2]](i),ar[(e=A+44|0)>>2]=i,r=0|ar[r>>2],r=1&(0|jb[127&ar[28+(0|ar[r>>2])>>2]](r)),tr[A+53>>0]=r,8<(0|ar[e>>2])&&ti()},function(A,e){A|=0;var r=0,i=0;i=0|un(e|=0,61024),ar[(r=A+36|0)>>2]=i,i=0|jb[127&ar[24+(0|ar[i>>2])>>2]](i),ar[(e=A+44|0)>>2]=i,r=0|ar[r>>2],r=1&(0|jb[127&ar[28+(0|ar[r>>2])>>2]](r)),tr[A+53>>0]=r,8<(0|ar[e>>2])&&ti()},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){var r;e|=0,r=ur=(e=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,oi(A,tr[A+11>>0]=1,45),Qf(A+1|(tr[r>>0]=0),r),ur=e},function(A,e){tr[(A|=0)>>0]=2,tr[A+1>>0]=3,tr[A+2>>0]=0,tr[A+3>>0]=4},function(A,e){tr[(A|=0)>>0]=2,tr[A+1>>0]=3,tr[A+2>>0]=0,tr[A+3>>0]=4},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){var r;e|=0,r=ur=(e=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,oi(A,tr[A+11>>0]=1,45),Qf(A+1|(tr[r>>0]=0),r),ur=e},function(A,e){tr[(A|=0)>>0]=2,tr[A+1>>0]=3,tr[A+2>>0]=0,tr[A+3>>0]=4},function(A,e){tr[(A|=0)>>0]=2,tr[A+1>>0]=3,tr[A+2>>0]=0,tr[A+3>>0]=4},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){var r;e|=0,r=ur=(e=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,gr(A,tr[A+8+3>>0]=1,45),ln(A+4|(ar[r>>2]=0),r),ur=e},function(A,e){tr[(A|=0)>>0]=2,tr[A+1>>0]=3,tr[A+2>>0]=0,tr[A+3>>0]=4},function(A,e){tr[(A|=0)>>0]=2,tr[A+1>>0]=3,tr[A+2>>0]=0,tr[A+3>>0]=4},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){for(e|=0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0)},function(A,e){var r;e|=0,r=ur=(e=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,gr(A,tr[A+8+3>>0]=1,45),ln(A+4|(ar[r>>2]=0),r),ur=e},function(A,e){tr[(A|=0)>>0]=2,tr[A+1>>0]=3,tr[A+2>>0]=0,tr[A+3>>0]=4},function(A,e){tr[(A|=0)>>0]=2,tr[A+1>>0]=3,tr[A+2>>0]=0,tr[A+3>>0]=4},function(A,e){},function(A,e){},function(A,e){yu(A|=0,(e|=0)+12|0)},function(A,e){e|=0;var r,i,f,n=0;r=ur=(f=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,4294967279<(i=(ar[A+8>>2]=0)|Yf(55745))>>>0&&pu(),i>>>0<11?(tr[A+11>>0]=i,e=A):(e=0|hu(n=16+i&-16),ar[A>>2]=e,ar[A+8>>2]=-2147483648|n,ar[A+4>>2]=i),wf(e,55745,i),Qf(e+i|(tr[r>>0]=0),r),ur=f},function(A,e){e|=0;var r,i,f,n=0;r=ur=(f=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,4294967279<(i=(ar[A+8>>2]=0)|Yf(55739))>>>0&&pu(),i>>>0<11?(tr[A+11>>0]=i,e=A):(e=0|hu(n=16+i&-16),ar[A>>2]=e,ar[A+8>>2]=-2147483648|n,ar[A+4>>2]=i),wf(e,55739,i),Qf(e+i|(tr[r>>0]=0),r),ur=f},function(A,e){yu(A|=0,(e|=0)+16|0)},function(A,e){e|=0;var r,i,f,n=0;r=ur=(f=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,1073741807<(i=(ar[A+8>>2]=0)|Mr(17204))>>>0&&pu();do{if(2<=i>>>0){if(!(1073741823<(e=4+i&-4)>>>0)){n=0|hu(e<<2),ar[A>>2]=n,ar[A+8>>2]=-2147483648|e,ar[A+4>>2]=i;break}lA()}else tr[A+8+3>>0]=i,n=A}while(0);Zf(n,17204,i),ln(n+(i<<2)|(ar[r>>2]=0),r),ur=f},function(A,e){e|=0;var r,i,f,n=0;r=ur=(f=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,1073741807<(i=(ar[A+8>>2]=0)|Mr(17180))>>>0&&pu();do{if(2<=i>>>0){if(!(1073741823<(e=4+i&-4)>>>0)){n=0|hu(e<<2),ar[A>>2]=n,ar[A+8>>2]=-2147483648|e,ar[A+4>>2]=i;break}lA()}else tr[A+8+3>>0]=i,n=A}while(0);Zf(n,17180,i),ln(n+(i<<2)|(ar[r>>2]=0),r),ur=f},function(A,e){e|=0,is[511&(A|=0)](e)},function(A,e){A|=0,e|=0;var r,i=0,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0;if(ur=(r=ur)+16|0,u=(l=r)+12|0,i=0|nA(),ar[u>>2]=i,!e)return ar[A>>2]=i,ar[u>>2]=0,iA((u=0)|u),void(ur=r);if(sl(l,40+(0|ar[e>>2])|0),a=(o=(f=0|ar[(t=l+4|0)>>2])-(i=0|ar[l>>2])|0)>>3,0|(n=i)){if((0|f)!=(0|n)){for(;i=f+-8|0,ar[t>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[t>>2]),(0|i)!=(0|n);)f=i;i=0|ar[l>>2]}vu(i)}if((0|o)<8)return ar[A>>2]=ar[u>>2],ar[u>>2]=0,iA((u=0)|u),void(ur=r);if(!(c=0|yc(o>>>1)))return c=0|hu(12),ar[c>>2]=6,ar[c+4>>2]=1e3,ar[l>>2]=c,l=0|cA(1392,0|l),ar[A>>2]=l,u=0|ar[u>>2],iA(0|u),void(ur=r);if(sl(l,40+(0|ar[e>>2])|0),f=0|ar[(o=l+4|0)>>2],t=i=0|ar[l>>2],e=0<(0|(a=(0|(e=f-i>>3))<(0|a)?e:a)))for(n=0;ar[c+(n<<2)>>2]=ar[20+(0|ar[t+(n<<3)>>2])>>2],(0|(n=n+1|0))<(0|a););if(0|i){if((0|f)!=(0|t)){for(;i=f+-8|0,ar[o>>2]=i,(f=0|ar[f+-4>>2])&&(du(f),i=0|ar[o>>2]),(0|i)!=(0|t);)f=i;i=0|ar[l>>2]}vu(i)}if(!a)return Bc(c),ar[A>>2]=ar[u>>2],ar[u>>2]=0,iA((u=0)|u),void(ur=r);if(ar[l>>2]=0,e)for(i=0;dl(u,l,c+(i<<2)|0),i=1+(0|ar[l>>2])|0,(0|(ar[l>>2]=i))<(0|a););Bc(c),ar[A>>2]=ar[u>>2],ar[u>>2]=0,iA((u=0)|u),ur=r},function(A,e){e|=0,is[511&(A|=0)](e)},function(A,e){A|=0;var r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=0;if(r=(0|(e|=0))/2|0,!((0|e)<=1)){i=e+-1|0,f=0;do{for(t=0|br(f,e),o=i+(0|br(i-f|0,e))|0,n=0;a=A+(o-n<<1)|0,c=0|or[(l=A+(n+t<<1)|0)>>1],or[l>>1]=0|or[a>>1],or[a>>1]=c,(0|(n=n+1|0))!=(0|e););f=f+1|0}while((0|f)<(0|r))}},Yb,Yb,Yb,Yb,Yb,Yb,Yb,Yb,Yb,Yb,Yb,Yb,Yb,Yb,Yb,Yb],ns=[Qb,HA,LA,function(A,e,r){A|=0,e|=0;var i,f,n,t,o=0,a=0,c=0,l=0,u=0;ur=(t=ur)+32|0,f=t,n=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),a=0|ar[e+44>>2],i=0|ar[e+48>>2];A:do{if((0|a)==(0|i))o=A+8|0,l=8;else for(c=(o=A+8|0)+11|0;;){if(u=0|ar[a>>2],ns[127&ar[12+(0|ar[u>>2])>>2]](A,u,r),0|ar[A>>2])break A;if((0|tr[c>>0])<0&&vu(0|ar[o>>2]),(0|(a=a+8|0))==(0|i)){l=8;break}}}while(0);8==(0|l)&&(l=0|ar[(c=56592)+4>>2],ar[(u=A)>>2]=ar[c>>2],ar[u+4>>2]=l,yu(o,56600)),KA(f,e,r,n),ur=(0<=(0|tr[(o=f+8|0)+11>>0])||vu(0|ar[o>>2]),t)},function(A,e,r){A|=0,r|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0;ur=(f=ur)+32|0,i=f+12|0,o=f,t=0|ar[(n=c=(e|=0)+8|0)>>2],n=0|ar[n+4>>2];do{if(0==(0|t)&0==(0|n))for(e=r;(ar[(b=e+16|0)>>2]=0)!=(0|(e=(ar[b+4>>2]=0)|ar[e+8>>2])););else if(0|CA(r,e=0|ob(0|t,0|n,0|ar[(a=e+16|0)>>2],0),n=D)){if(0<n>>>0|0==(0|n)&2147483647<e>>>0)return ar[o>>2]=0,ar[o+4>>2]=0,ar[o+8>>2]=0,oo(A,2,101,o),0<=(0|tr[o+11>>0])||vu(0|ar[o>>2]),void(ur=f);if(e=0|ar[r>>2],(t=0==(0|(n=0|ar[r+4>>2])))||bu(n),b=0|ar[(u=c)>>2],u=0|ar[u+4>>2],l=0|ar[a>>2],o=0|ar[e>>2],a=0|ar[o+20>>2],o=0|jb[127&ar[o+8>>2]](e),c=D,c=0|tb(0|(l=0|ob(0|b,0|u,0|l,0)),0|D,0|o,0|c),xb[63&a](e,c,D),t)break;du(n);break}}while(0);0|tr[r+24>>0]?(ar[i>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,oo(A,2,100,i),(0|tr[11+i>>0])<0&&vu(0|ar[i>>2])):(u=0|ar[(l=56592)+4>>2],ar[(b=A)>>2]=ar[l>>2],ar[b+4>>2]=u,yu(A+8|0,56600)),ur=f},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),HA(f,e,r),We(n,(s=(d=0|tr[(k=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,s?0|ar[4+f>>2]:255&d),(0|tr[k>>0])<0&&vu(0|ar[f>>2]),0<(0|ar[r>>2]))for(c=0;We(n,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(l=0|We(n,19206,13),k=0|ar[e+56>>2],ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,tr[(u=11+f|0)>>0]=4,tr[4+f>>0]=0,tr[f>>0]=k>>>24,tr[1+f>>0]=k>>>16,tr[2+f>>0]=k>>>8,tr[3+f>>0]=k,l=0|We(0|We(l,f,4),30086,1),0<(0|ar[r>>2]))for(c=0;We(l,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(l=0|We(l,19220,15),l=0|We(0|Lf(l,0|ar[e+60>>2]),30086,1),0<(0|ar[r>>2]))for(c=0;We(l,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(We(l,19236,19),(0|tr[u>>0])<0&&vu(0|ar[f>>2]),(0|(c=0|ar[e+64>>2]))!=(0|(r=0|ar[e+68>>2])))for(e=11+f|0,b=4+f|0,s=1+f|0,d=2+f|0,k=3+f|0,u=1;l=0|ar[c>>2],u||(tr[f>>0]=44,We(n,f,1)),ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,tr[e>>0]=4,tr[b>>0]=0,tr[f>>0]=l>>>24,tr[s>>0]=l>>>16,tr[d>>0]=l>>>8,tr[k>>0]=l,We(n,f,4),(0|tr[e>>0])<0&&vu(0|ar[f>>2]),(0|(c=c+4|0))!=(0|r);)u=0;if(We(n,30086,1),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),Gf(),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),Gf(),bf(t),ur=a},function(A,e,r){A|=0,e|=0;var i,f,n=0,t=0,o=0;if(ur=(f=ur)+32|0,t=f,o=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),UA(r,0|ar[e+56>>2]),UA(r,0|ar[e+60>>2]),(0|(n=0|ar[e+64>>2]))!=(0|(i=0|ar[e+68>>2])))for(;UA(r,0|ar[n>>2]),(0|(n=n+4|0))!=(0|i););KA(t,e,r,o),(0|tr[(n=t+8|0)+11>>0])<0&&vu(0|ar[n>>2]),t=0|ar[(r=56592)+4>>2],ar[(o=A)>>2]=ar[r>>2],ar[o+4>>2]=t,yu(A+8|0,56600),ur=f},function(A,e,r){A|=0,e|=0;var i,f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(ur=(n=ur)+32|0,s=n+12|0,c=n,o=0|FA(r|=0),ar[e+56>>2]=o,o=0|FA(r),ar[e+60>>2]=o,t=0|ar[(o=e+8|0)>>2],!(0<(o=0|ar[o+4>>2])>>>0|0==(0|o)&((a=0|ar[e+16>>2])+8|0)>>>0<t>>>0)){for(t=0|hu(48),ar[c>>2]=t,ar[c+8>>2]=-2147483600,a=19167,e=(o=t)+(ar[c+4>>2]=38)|0;tr[o>>0]=0|tr[a>>0],a=a+1|0,(0|(o=o+1|0))<(0|e););return(tr[t+38>>0]=0,oo(A,2,101,c),0<=(0|tr[c+11>>0]))?void(ur=n):(vu(0|ar[c>>2]),void(ur=n))}l=0|sb(0|(l=0|ob(0|(l=0|tb(0|t,0|o,-8,-1)),0|D,0|a,0)),0|D,2),i=D,f=r+24|0;A:do{if(!(0==(0|l)&0==(0|i))){u=e+68|0,b=e+72|0,t=e+64|0,c=e=0;do{if(0|tr[f>>0])break A;o=0|FA(r),ar[s>>2]=o,(a=0|ar[u>>2])>>>0<(0|ar[b>>2])>>>0?(ar[a>>2]=o,ar[u>>2]=a+4):Ce(t,s),e=0|tb(0|e,0|c,1,0),c=D}while(c>>>0<i>>>0|(0|c)==(0|i)&e>>>0<l>>>0)}}while(0);0|tr[f>>0]?(ar[s>>2]=0,ar[s+4>>2]=0,ar[s+8>>2]=0,oo(A,2,100,s),(0|tr[s+11>>0])<0&&vu(0|ar[s>>2])):(r=0|ar[(b=56592)+4>>2],ar[(s=A)>>2]=ar[b>>2],ar[s+4>>2]=r,yu(A+8|0,56600)),ur=n},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(u=(l=0|tr[(c=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,u?0|ar[4+f>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[f>>2]),ne(f,e,r),We(n,(c=(l=0|tr[(u=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,c?0|ar[4+f>>2]:255&l),(0|tr[u>>0])<0&&vu(0|ar[f>>2]),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),Gf(),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),Gf(),bf(t),ur=a},function(A,e,r){A|=0;var i,f=0;ur=(i=ur)+32|0,qA(f=i,e|=0,r|=0),(0|tr[(f=f+8|0)+11>>0])<0&&vu(0|ar[f>>2]),$A(A,e,r,-1),ur=i},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c,l=0,u=0,b=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(l=(u=0|tr[(b=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,l?0|ar[4+f>>2]:255&u),(0|tr[b>>0])<0&&vu(0|ar[f>>2]),0<(0|ar[r>>2]))for(l=0;We(n,18862,2),(0|(l=l+1|0))<(0|ar[r>>2]););if(u=0|We(n,23170,13),u=0|We(0|Lf(u,0|ar[e+56>>2]),30086,1),0<(0|ar[r>>2]))for(l=0;We(u,18862,2),(0|(l=l+1|0))<(0|ar[r>>2]););if(b=0|We(u,23184,14),l=0|ar[e+60>>2],ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,tr[(u=11+f|0)>>0]=4,tr[4+f>>0]=0,tr[f>>0]=l>>>24,tr[1+f>>0]=l>>>16,tr[2+f>>0]=l>>>8,tr[3+f>>0]=l,b=0|We(0|We(b,f,4),30086,1),0<(0|ar[r>>2]))for(l=0;We(b,18862,2),(0|(l=l+1|0))<(0|ar[r>>2]););if(c=0|We(b,23199,6),We(0|We(c,(b=(r=0|tr[(l=e+76|0)+11>>0])<<24>>24<0)?0|ar[l>>2]:l,b?0|ar[e+80>>2]:255&r),30086,1),(0|tr[u>>0])<0&&vu(0|ar[f>>2]),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),bf(t),ur=a},function(A,e,r){A|=0,e|=0;var i,f=0,n=0;ur=(i=ur)+32|0,f=i,n=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),UA(r,0|ar[e+56>>2]),UA(r,0|ar[e+60>>2]),UA(r,0|ar[e+64>>2]),UA(r,0|ar[e+68>>2]),UA(r,0|ar[e+72>>2]),OA(r,e+76|0),KA(f,e,r,n),(0|tr[(e=f+8|0)+11>>0])<0&&vu(0|ar[e>>2]),f=0|ar[(r=56592)+4>>2],ar[(n=A)>>2]=ar[r>>2],ar[n+4>>2]=f,yu(A+8|0,56600),ur=i},function(A,e,r){A|=0;var i,f,n=0,t=0;if(ur=(f=ur)+32|0,t=f+20|0,qA(n=f,e|=0,r|=0),(0|tr[(n=n+8|0)+11>>0])<0&&vu(0|ar[n>>2]),n=0|FA(r),ar[e+56>>2]=n,n=0|FA(r),ar[e+60>>2]=n,n=0|FA(r),ar[e+64>>2]=n,n=0|FA(r),ar[e+68>>2]=n,n=0|FA(r),ar[e+72>>2]=n,RA(t,r),(0|tr[(i=(n=e+76|0)+11|0)>>0])<0?(tr[ar[n>>2]>>0]=0,ar[e+80>>2]=0):(tr[n>>0]=0,tr[i>>0]=0),Cu(n,0),ar[n>>2]=ar[t>>2],ar[n+4>>2]=ar[t+4>>2],ar[n+8>>2]=ar[t+8>>2],!(0|tr[r+24>>0]))return r=0|ar[(e=56592)+4>>2],ar[(t=A)>>2]=ar[e>>2],ar[t+4>>2]=r,yu(A+8|0,56600),void(ur=f);ar[t>>2]=0,ar[t+4>>2]=0,ar[t+8>>2]=0,oo(A,2,100,t),ur=(0<=(0|tr[t+11>>0])||vu(0|ar[t>>2]),f)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c,l=0,u=0;if(ur=(o=ur)+160|0,l=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[l>>2]=0,ar[l+4>>2]=0,ar[l+8>>2]=0,Xe(t,l),(0|tr[l+11>>0])<0&&vu(0|ar[l>>2]),LA(l,e,r),We(f,(u=(c=0|tr[(a=l+11|0)>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[l+4>>2]:255&c),(0|tr[a>>0])<0&&vu(0|ar[l>>2]),0<(0|ar[r>>2]))for(l=0;We(f,18862,2),(0|(l=l+1|0))<(0|ar[r>>2]););if(u=0|We(f,22462,9),We(0|Lf(u,0|ar[e+56>>2]),30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f,n=0,t=0;ur=(f=ur)+32|0,n=f,t=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),i=0|ar[e+56>>2];do{if(0|tr[e+37>>0])UA(r,i);else{if(i>>>0<65536){MA(r,65535&i);break}sr(23065,19104,891,19563)}}while(0);KA(n,e,r,t),(0|tr[(e=n+8|0)+11>>0])<0&&vu(0|ar[e>>2]),n=0|ar[(r=56592)+4>>2],ar[(t=A)>>2]=ar[r>>2],ar[t+4>>2]=n,yu(A+8|0,56600),ur=f},function(A,e,r){A|=0;var i,f=0,n=0;if(ur=(i=ur)+32|0,n=i+20|0,qA(f=i,e|=0,r|=0),(0|tr[(f=f+8|0)+11>>0])<0&&vu(0|ar[f>>2]),f=0|tr[e+37>>0]?0|FA(r):65535&(0|VA(r)),ar[e+56>>2]=f,!(0|tr[r+24>>0]))return r=0|ar[(e=56592)+4>>2],ar[(n=A)>>2]=ar[e>>2],ar[n+4>>2]=r,yu(A+8|0,56600),void(ur=i);ar[n>>2]=0,ar[n+4>>2]=0,ar[n+8>>2]=0,oo(A,2,100,n),ur=(0<=(0|tr[n+11>>0])||vu(0|ar[n>>2]),i)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0,b=0;if(ur=(o=ur)+160|0,a=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,Xe(t,a),(0|tr[a+11>>0])<0&&vu(0|ar[a>>2]),LA(a,e,r),We(f,(u=(c=0|tr[(l=a+11|0)>>0])<<24>>24<0)?0|ar[a>>2]:a,u?0|ar[a+4>>2]:255&c),(0|tr[l>>0])<0&&vu(0|ar[a>>2]),(0|(a=0|ar[e+56>>2]))!=(0|(l=0|ar[e+60>>2]))){c=a;do{if(0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(e=0|We(f,22885,9),e=0|We(0|Lf(e,0|ar[c>>2]),30086,1),0<(0|ar[r>>2]))for(a=0;We(e,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(e=0|We(e,22895,23),e=0|We(0|Pf(e,0|cr[c+4>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(e,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(u=(e=0|We(e,22919,24))+(0|ar[(0|ar[e>>2])-12>>2])+4|0,ar[u>>2]=-75&ar[u>>2]|8,u=(e=0|xf(e,0|or[c+6>>1]))+(0|ar[(0|ar[e>>2])-12>>2])+4|0,ar[u>>2]=-75&ar[u>>2]|2,e=0|We(e,30086,1),0<(0|ar[r>>2]))for(a=0;We(e,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(e=0|We(e,22944,15),We(0|Kf(e,0|ar[(u=c+8|0)>>2],0|ar[u+4>>2]),30086,1),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(We(f,22960,11),(0|(a=0|ar[c+16>>2]))!=(0|(e=0|ar[c+20>>2])))for(;b=0|We(0|Kf(f,0|ar[(b=a+8|0)>>2],0|ar[b+4>>2]),19588,1),Kf(b,0|ar[(u=a+16|0)>>2],0|ar[u+4>>2]),0==(0|ar[(u=a)>>2])&0==(0|ar[u+4>>2])||Kf(u=0|We(f,22972,7),0|ar[(b=a)>>2],0|ar[b+4>>2]),We(f,20449,1),(0|(a=a+40|0))!=(0|e););We(f,30086,1),c=c+32|0}while((0|c)!=(0|l))}if(Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),bf(n),ur=o},function(A,e,r){A|=0,r|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0;if(ur=(f=ur)+32|0,p=f,(0|(o=0|ar[(k=(e|=0)+56|0)>>2]))!=(0|(u=0|ar[(h=e+60|0)>>2]))){n=0;do{if(1==(0|tr[o+4>>0])&&(0|(c=0|ar[o+16>>2]))!=(0|(l=0|ar[o+20>>2])))for(a=c;n=(0|ar[a+28>>2])+n-(0|ar[a+24>>2])|0,(0|(a=a+40|0))!=(0|l););o=o+32|0}while((0|o)!=(0|u));if(0|n&&(UA(r,n+8|0),UA(r,1768186228),(0|(t=0|ar[k>>2]))!=(0|(b=0|ar[h>>2]))))do{if(1==(0|tr[t+4>>0])&&(0|(s=0|ar[t+16>>2]))!=(0|(d=0|ar[t+20>>2])))for(n=s;zA(r,n+24|0),(0|(n=n+40|0))!=(0|d););t=t+32|0}while((0|t)!=(0|b))}if(Z=0|ar[(a=r+12|0)>>2],jA(r,0|tr[e+36>>0]?12:8),ar[e+68>>2]=ar[a>>2],n=(t=(255&(a=0|tr[e+37>>0]))<2)?4:6,(0|(o=0|ar[k>>2]))!=(0|(i=0|ar[h>>2]))){w=e+73|0,v=e+74|0,m=e+76|0,g=(d=t?2:4)+(k=a<<24>>24?2:0)+(h=0|cr[e+75>>0])+4|0,t=a;do{l=n+4+h+d+k|0,c=a=0|ar[o+16>>2],s=0|ar[o+20>>2];do{if((0|a)==(0|s))n=l;else{if(u=0|cr[w>>0],b=0|cr[v>>0],!(t<<24>>24)){n=g+n+(0|br(((s+-40-c|0)>>>0)/40|0,u+b|0))+u+b|0,t=0;break}for(c=0|cr[m>>0],n=l;n=u+(c+n)+b|0,(0|(a=a+40|0))!=(0|s););}}while(0);o=o+32|0}while((0|o)!=(0|i))}if(jA(r,n),KA(p,e,r,Z),0<=(0|tr[(n=p+8|0)+11>>0]))return Z=0|ar[(Z=r=56592)>>2],r=0|ar[(r=r+4|0)>>2],ar[(e=p=A)>>2]=Z,ar[(p=p+4|0)>>2]=r,yu(A=A+8|0,56600),void(ur=f);vu(0|ar[n>>2]),Z=0|ar[(Z=r=56592)>>2],r=0|ar[(r=r+4|0)>>2],ar[(e=p=A)>>2]=Z,ar[(p=p+4|0)>>2]=r,yu(A=A+8|0,56600),ur=f},function(A,e,r){A|=0;var i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0;if(ur=(t=ur)+384|0,q=t+144|0,l=($=t)+340|0,f=t+184|0,n=t+328|0,qA(o=t+352|0,e|=0,r|=0),(0|tr[(o=o+8|0)+11>>0])<0&&vu(0|ar[o>>2]),a=0|VA(r),o=1<(255&(K=0|tr[(i=e+37|0)>>0]))?15&a:0,2e4<(0|(K=(255&K)<2?65535&(0|VA(r)):0|FA(r))))return e=$+64|0,ar[(c=$+8|0)>>2]=4524,a=$+12|0,ar[$>>2]=188,ar[e>>2]=208,Jf($+64|(ar[$+4>>2]=0),a),ar[$+136>>2]=0,ar[$+140>>2]=-1,ar[$>>2]=4504,ar[e>>2]=4544,ar[c>>2]=4524,Sf(a),ar[a>>2]=4340,ar[(c=$+44|0)>>2]=0,ar[c+4>>2]=0,ar[c+8>>2]=0,ar[c+12>>2]=0,ar[$+60>>2]=24,ar[q>>2]=0,ar[q+4>>2]=0,ar[q+8>>2]=0,Xe(a,q),(0|tr[q+11>>0])<0&&vu(0|ar[q>>2]),We(0|Pf(0|We(0|Pf(0|We(o=$+8|0,22754,18),K),22773,44),2e4),22818,7),Ie(l,a),oo(A,6,1e3,l),(0|tr[l+11>>0])<0&&vu(0|ar[l>>2]),ar[$>>2]=4504,ar[e>>2]=4544,ar[o>>2]=4524,ar[a>>2]=4340,(0|tr[c+11>>0])<0&&vu(0|ar[c>>2]),kf(a),bf(e),void(ur=t);A:do{if(0<(0|K)){W=$+4|0,I=$+6|0,C=$+8|0,x=(65535&a)>>>4&255,F=12+f|0,R=4+f|0,N=G=64+f|0,_=136+f|0,Y=140+f|0,D=60+f|0,J=q+11|0,M=V=8+f|0,T=11+n|0,U=(Q=44+f|0)+11|0,O=$+20|0,z=r+24|0,j=e+60|0,H=e+64|0,B=e+56|0,E=S=$+16|0,X=0!=(0|o),y=255&o,g=q+8|0,p=(65535&a)>>>12&255,Z=q+16|0,m=(65535&a)>>>8&255,k=$+24|0,w=q+28|0,v=h=q+24|0,d=0;e:for(;;){for(ar[$>>2]=0,e=(o=I)+22|(tr[W>>0]=0);(0|(o=o+2|(or[o>>1]=0)))<(0|e););switch(o=(0|cr[i>>0])<2?65535&(0|VA(r)):0|FA(r),ar[$>>2]=o,0|tr[i>>0]&&(s=15&(0|VA(r)),tr[W>>0]=s),s=0|VA(r),or[I>>1]=s,ar[(s=C)>>2]=0,ar[s+4>>2]=0,15&x){case 4:o=0|FA(r),e=0,L=26;break;case 8:o=0|FA(r),ar[(e=C)>>2]=0,ar[e+4>>2]=o,e=C,o=0|FA(r)|ar[e>>2],e=0|ar[e+4>>2],L=26}26==(0|L)&&(L=0,ar[(s=C)>>2]=o,ar[s+4>>2]=e),s=65535&(o=0|VA(r));do{if((65535&o)<=32){r:do{if(o<<16>>16)for(b=0;;){for(e=(o=q)+36|0;(0|(o=o+4|(ar[o>>2]=0)))<(0|e););i:do{if(X&1<(0|cr[i>>0]))switch(15&y){case 4:l=0|FA(r),ar[(u=q)>>2]=l,ar[u+4>>2]=0;break i;case 8:a=0|FA(r),ar[(c=q)>>2]=0,ar[c+4>>2]=a,c=0|FA(r),l=0|ar[(a=q)+4>>2],ar[(u=q)>>2]=ar[a>>2]|c,ar[u+4>>2]=l;break i;default:break i}}while(0);switch(ar[(u=g)>>2]=0,ar[u+4>>2]=0,15&p){case 4:o=0|FA(r),e=0,L=44;break;case 8:o=0|FA(r),ar[(e=g)>>2]=0,ar[e+4>>2]=o,e=g,o=0|FA(r)|ar[e>>2],e=0|ar[e+4>>2],L=44}switch(44==(0|L)&&(L=0,ar[(u=g)>>2]=o,ar[u+4>>2]=e),ar[(u=Z)>>2]=0,ar[u+4>>2]=0,15&m){case 4:o=0|FA(r),e=0,L=48;break;case 8:o=0|FA(r),ar[(e=Z)>>2]=0,ar[e+4>>2]=o,e=Z,o=0|FA(r)|ar[e>>2],e=0|ar[e+4>>2],L=48}if(48==(0|L)&&(L=0,ar[(u=Z)>>2]=o,ar[u+4>>2]=e),(0|(e=0|ar[O>>2]))==(0|ar[k>>2]))Qt(E,q),o=0|ar[h>>2];else{if(ar[e>>2]=ar[q>>2],ar[e+4>>2]=ar[q+4>>2],ar[e+8>>2]=ar[q+8>>2],ar[e+12>>2]=ar[q+12>>2],ar[e+16>>2]=ar[q+16>>2],ar[e+20>>2]=ar[q+20>>2],ar[(a=e+24|0)>>2]=0,ar[(u=e+28|0)>>2]=0,o=(ar[e+32>>2]=0)|ar[v>>2],c=(0|ar[w>>2])-o|0){if((0|c)<0){L=52;break e}l=0|hu(c),ar[u>>2]=l,ar[a>>2]=l,ar[e+32>>2]=l+c,o=0|ar[v>>2],0<(0|(e=(0|ar[w>>2])-o|0))&&(hb(0|l,0|o,0|e),ar[u>>2]=l+e)}ar[O>>2]=40+(0|ar[O>>2])}if(0|o&&((0|ar[w>>2])!=(0|o)&&(ar[w>>2]=o),vu(o)),(0|s)<=(0|(b=b+1|0)))break r}}while(0);if(!(0|tr[z>>0])){if((0|(o=0|ar[j>>2]))==(0|ar[H>>2])){Jt(B,$),l=0;break}ar[o>>2]=ar[$>>2],ar[o+4>>2]=ar[$+4>>2],ar[o+8>>2]=ar[$+8>>2],ar[o+12>>2]=ar[$+12>>2],Dt(o+16|0,E),ar[j>>2]=32+(0|ar[j>>2]),l=0;break}l=0}else ar[V>>2]=4524,ar[f>>2]=188,ar[G>>2]=208,ar[R>>2]=0,Jf(N,F),ar[_>>2]=0,ar[Y>>2]=-1,ar[f>>2]=4504,ar[G>>2]=4544,ar[V>>2]=4524,Sf(F),ar[F>>2]=4340,ar[Q>>2]=0,ar[Q+4>>2]=0,ar[Q+8>>2]=0,ar[Q+12>>2]=0,ar[D>>2]=24,ar[q>>2]=0,ar[q+4>>2]=0,ar[q+8>>2]=0,Xe(F,q),(0|tr[J>>0])<0&&vu(0|ar[q>>2]),We(0|Pf(0|We(0|Pf(0|We(M,22826,31),s),22858,26),32),18904,2),Ie(n,F),oo(A,6,1e3,n),(0|tr[T>>0])<0&&vu(0|ar[n>>2]),ar[f>>2]=4504,ar[G>>2]=4544,ar[M>>2]=4524,ar[F>>2]=4340,(0|tr[U>>0])<0&&vu(0|ar[Q>>2]),kf(F),bf(G),l=1}while(0);if(0|(o=0|ar[S>>2])){if((0|(e=0|ar[O>>2]))!=(0|o)){for(;a=e+-40|0,ar[O>>2]=a,(0|(e=(c=0|ar[e+-16>>2])?((0|ar[(e=e+-12|0)>>2])!=(0|c)&&(ar[e>>2]=c),vu(c),0|ar[O>>2]):a))!=(0|o););o=0|ar[S>>2]}vu(o)}if(d=d+1|0,0|l){L=80;break}if((0|K)<=(0|d)){P=z;break A}}if(52==(0|L))zl();else if(80==(0|L))return void(ur=t)}else P=r+24|0}while(0);0|tr[P>>0]?(ar[q>>2]=0,ar[q+4>>2]=0,ar[q+8>>2]=0,oo(A,2,100,q),(0|tr[q+11>>0])<0&&vu(0|ar[q>>2])):(q=0|ar[(K=56592)+4>>2],ar[($=A)>>2]=ar[K>>2],ar[$+4>>2]=q,yu(A+8|0,56600)),ur=t},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(u=(l=0|tr[(c=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,u?0|ar[4+f>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[f>>2]),ne(f,e,r),We(n,(c=(l=0|tr[(u=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,c?0|ar[4+f>>2]:255&l),(0|tr[u>>0])<0&&vu(0|ar[f>>2]),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),bf(t),ur=a},function(A,e,r){A|=0,e|=0;var i,f,n,t=0,o=0,a=0,c=0,l=0,u=0;ur=(n=ur)+32|0,i=n,f=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),a=e+48|0,SA(r,0|tr[e+37>>0]?4:2,(0|ar[a>>2])-(0|ar[e+44>>2])>>3,0),o=0|ar[e+44>>2],a=0|ar[a>>2];A:do{if((0|o)==(0|a))t=A+8|0,l=8;else for(c=(t=A+8|0)+11|0;;){if(u=0|ar[o>>2],ns[127&ar[12+(0|ar[u>>2])>>2]](A,u,r),0|ar[A>>2])break A;if((0|tr[c>>0])<0&&vu(0|ar[t>>2]),(0|(o=o+8|0))==(0|a)){l=8;break}}}while(0);8==(0|l)&&(l=0|ar[(c=56592)+4>>2],ar[(u=A)>>2]=ar[c>>2],ar[u+4>>2]=l,yu(t,56600)),KA(i,e,r,f),ur=(0<=(0|tr[(t=i+8|0)+11>>0])||vu(0|ar[t>>2]),n)},function(A,e,r){A|=0;var i,f=0;return ur=(i=ur)+32|0,qA(f=i,e|=0,r|=0),(0|tr[(f=f+8|0)+11>>0])<0&&vu(0|ar[f>>2]),(f=0|tr[e+37>>0]?0|FA(r):65535&(0|VA(r)))?$A(A,e,r,-1):(e=0|ar[(f=56592)+4>>2],ar[(r=A)>>2]=ar[f>>2],ar[r+4>>2]=e,yu(A+8|0,56600)),void(ur=i)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0;if(ur=(o=ur)+160|0,a=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,Xe(t,a),(0|tr[a+11>>0])<0&&vu(0|ar[a>>2]),LA(a,e,r),We(f,(u=(l=0|tr[(c=a+11|0)>>0])<<24>>24<0)?0|ar[a>>2]:a,u?0|ar[a+4>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[a>>2]),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(f,22462,9),c=0|We(0|Lf(c,0|ar[e+56>>2]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,22472,23),c=0|We(0|xf(c,0|or[e+60>>1]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(a=0|We(c,22496,11),c=0|We(0|We(a,(u=(c=0|tr[(l=e+64|0)+11>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[e+68>>2]:255&c),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(a=0|We(c,22508,11),c=0|We(0|We(a,(u=(c=0|tr[(l=e+76|0)+11>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[e+80>>2]:255&c),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(a=0|We(c,22520,14),c=0|We(0|We(a,(u=(c=0|tr[(l=e+88|0)+11>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[e+92>>2]:255&c),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(a=0|We(c,22535,18),c=0|We(0|We(a,(u=(c=0|tr[(l=e+100|0)+11>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[e+104>>2]:255&c),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(a=0|We(c,22554,15),c=0|We(0|We(a,(u=(c=0|tr[(l=e+112|0)+11>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[e+116>>2]:255&c),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(l=(u=0|We(c,22570,13))+(0|ar[(0|ar[u>>2])-12>>2])+4|0,ar[l>>2]=1|ar[l>>2],We(0|Hf(u,0!=(0|tr[e+124>>0])),30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0,l=0;ur=(i=ur)+32|0,c=i,l=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),(255&(f=0|tr[(n=e+37|0)>>0]))<2?(MA(r,65535&ar[e+56>>2]),MA(r,0|or[e+60>>1]),OA(r,e+76|0),OA(r,e+88|0),OA(r,e+100|0),1<(255&(f=0|tr[n>>0]))&&(t=3)):t=3;A:do{if(3==(0|t)){switch(f<<24>>24){case 2:MA(r,65535&ar[e+56>>2]);break;case 3:UA(r,0|ar[e+56>>2])}MA(r,0|or[e+60>>1]),(n=(f=0|tr[(o=(a=e+64|0)+11|0)>>0])<<24>>24<0)?f=0|ar[e+68>>2]:f&=255,f?(f=n?0|ar[a>>2]:a,UA(r,tr[f+1>>0]<<16|cr[f>>0]<<24|tr[f+2>>0]<<8|tr[f+3>>0])):UA(r,0),OA(r,e+76|0),n=0|tr[o>>0],f=0|ar[(t=e+68|0)>>2];do{if(4==(0|(n<<24>>24<0?f:255&n))){if(0|Yu(a,0,-1,22452,4)){n=0|tr[o>>0],f=0|ar[t>>2];break}OA(r,e+88|0),OA(r,e+100|0);break A}}while(0);4==(0|(n<<24>>24<0?f:255&n))&&0==(0|Yu(a,0,-1,22457,4))&&OA(r,e+112|0)}}while(0);if(KA(c,e,r,l),0<=(0|tr[(f=c+8|0)+11>>0]))return e=0|ar[(e=c=56592)>>2],c=0|ar[(c=c+4|0)>>2],ar[(r=l=A)>>2]=e,ar[(l=l+4|0)>>2]=c,yu(A=A+8|0,56600),void(ur=i);vu(0|ar[f>>2]),e=0|ar[(e=c=56592)>>2],c=0|ar[(c=c+4|0)>>2],ar[(r=l=A)>>2]=e,ar[(l=l+4|0)>>2]=c,yu(A=A+8|0,56600),ur=i},function(A,e,r){A|=0;var i,f=0,n=0,t=0,o=0,a=0;ur=(i=ur)+32|0,a=i+20|0,qA(f=i,e|=0,r|=0),(0|tr[(f=f+8|0)+11>>0])<0&&vu(0|ar[f>>2]),(255&(f=0|tr[(t=e+37|0)>>0]))<2?(f=65535&(0|VA(r)),ar[e+56>>2]=f,f=0|VA(r),or[e+60>>1]=f,RA(a,r),(0|tr[(n=(f=e+76|0)+11|0)>>0])<0?(tr[ar[f>>2]>>0]=0,ar[e+80>>2]=0):(tr[f>>0]=0,tr[n>>0]=0),Cu(f,0),ar[f>>2]=ar[a>>2],ar[f+4>>2]=ar[a+4>>2],ar[f+8>>2]=ar[a+8>>2],RA(a,r),(0|tr[(n=(f=e+88|0)+11|0)>>0])<0?(tr[ar[f>>2]>>0]=0,ar[e+92>>2]=0):(tr[f>>0]=0,tr[n>>0]=0),Cu(f,0),ar[f>>2]=ar[a>>2],ar[f+4>>2]=ar[a+4>>2],ar[f+8>>2]=ar[a+8>>2],RA(a,r),(0|tr[(n=(f=e+100|0)+11|0)>>0])<0?(tr[ar[f>>2]>>0]=0,ar[e+104>>2]=0):(tr[f>>0]=0,tr[n>>0]=0),Cu(f,0),ar[f>>2]=ar[a>>2],ar[f+4>>2]=ar[a+4>>2],ar[f+8>>2]=ar[a+8>>2],1<(255&(f=0|tr[t>>0]))&&(o=14)):o=14;A:do{if(14==(0|o)){if(tr[e+124>>0]=1&ar[e+40>>2],f=f<<24>>24==2?65535&(0|VA(r)):0|FA(r),ar[e+56>>2]=f,o=0|VA(r),or[e+60>>1]=o,0|(o=0|FA(r))&&(tr[a>>0]=0,tr[a+1>>0]=0,tr[a+2>>0]=0,tr[a+3>>0]=0,tr[a+4>>0]=0,f=(tr[a+5>>0]=0)|kb(0|o),(0|tr[(t=(n=e+64|0)+11|0)>>0])<0?(tr[ar[n>>2]>>0]=0,ar[e+68>>2]=0):(tr[n>>0]=0,tr[t>>0]=0),Cu(n,0),ar[e+64>>2]=f,tr[e+68>>0]=0,tr[(t=e+69|0)>>0]=0|tr[a>>0],tr[t+1>>0]=0|tr[a+1>>0],tr[t+2>>0]=0|tr[a+2>>0],tr[t+3>>0]=0|tr[a+3>>0],tr[t+4>>0]=0|tr[a+4>>0],tr[t+5>>0]=0|tr[a+5>>0],tr[e+75>>0]=4),RA(a,r),(0|tr[(n=(f=e+76|0)+11|0)>>0])<0?(tr[ar[f>>2]>>0]=0,ar[e+80>>2]=0):(tr[f>>0]=0,tr[n>>0]=0),Cu(f,0),ar[f>>2]=ar[a>>2],ar[f+4>>2]=ar[a+4>>2],ar[f+8>>2]=ar[a+8>>2],1970432288<=(0|o)){switch(0|o){case 1970432288:break;default:break A}RA(a,r),(0|tr[(n=(f=e+112|0)+11|0)>>0])<0?(tr[ar[f>>2]>>0]=0,ar[e+116>>2]=0):(tr[f>>0]=0,tr[n>>0]=0),Cu(f,0),ar[f>>2]=ar[a>>2],ar[f+4>>2]=ar[a+4>>2],ar[f+8>>2]=ar[a+8>>2];break}switch(0|o){case 1835625829:break;default:break A}RA(a,r),(0|tr[(n=(f=e+88|0)+11|0)>>0])<0?(tr[ar[f>>2]>>0]=0,ar[e+92>>2]=0):(tr[f>>0]=0,tr[n>>0]=0),Cu(f,0),ar[f>>2]=ar[a>>2],ar[f+4>>2]=ar[a+4>>2],ar[f+8>>2]=ar[a+8>>2],RA(a,r),(0|tr[(n=(f=e+100|0)+11|0)>>0])<0?(tr[ar[f>>2]>>0]=0,ar[e+104>>2]=0):(tr[f>>0]=0,tr[n>>0]=0),Cu(f,0),ar[f>>2]=ar[a>>2],ar[f+4>>2]=ar[a+4>>2],ar[f+8>>2]=ar[a+8>>2]}}while(0);if(!(0|tr[r+24>>0]))return r=0|ar[(e=56592)+4>>2],ar[(a=A)>>2]=ar[e>>2],ar[a+4>>2]=r,yu(A+8|0,56600),void(ur=i);ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,oo(A,2,100,a),ur=(0<=(0|tr[a+11>>0])||vu(0|ar[a>>2]),i)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(u=(l=0|tr[(c=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,u?0|ar[4+f>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[f>>2]),ne(f,e,r),We(n,(c=(l=0|tr[(u=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,c?0|ar[4+f>>2]:255&l),(0|tr[u>>0])<0&&vu(0|ar[f>>2]),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),bf(t),ur=a},function(A,e,r){$A(A|=0,e|=0,r|=0,-1)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(u=(l=0|tr[(c=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,u?0|ar[4+f>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[f>>2]),ne(f,e,r),We(n,(c=(l=0|tr[(u=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,c?0|ar[4+f>>2]:255&l),(0|tr[u>>0])<0&&vu(0|ar[f>>2]),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),bf(t),ur=a},function(A,e,r){$A(A|=0,e|=0,r|=0,-1)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0,b=0;if(ur=(o=ur)+160|0,a=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,Xe(t,a),(0|tr[a+11>>0])<0&&vu(0|ar[a>>2]),LA(a,e,r),We(f,(c=(l=0|tr[(u=a+11|0)>>0])<<24>>24<0)?0|ar[a>>2]:a,c?0|ar[a+4>>2]:255&l),(0|tr[u>>0])<0&&vu(0|ar[a>>2]),(0|(a=0|ar[e+56>>2]))!=(0|(u=0|ar[e+60>>2]))){l=a,a=0|ar[r>>2];do{if(0<(0|a))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(a=0|We(f,22139,26),We(0|Lf(a,0|ar[l>>2]),30086,1),a=1+(0|ar[r>>2])|0,ar[r>>2]=a,(0|(e=0|ar[l+4>>2]))!=(0|(c=0|ar[l+8>>2])))do{if(0<(0|a))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););a=0|We(f,22166,16),b=(a=0|We(0|xf(a,0|or[e+2>>1]),22183,13))+(0|ar[(0|ar[a>>2])-12>>2])+4|0,ar[b>>2]=1|ar[b>>2],We(0|Hf(a,0!=(0|tr[e>>0])),18904,2),e=e+4|0,a=0|ar[r>>2]}while((0|e)!=(0|c));a=(0|a)<1?0:a+-1|0,ar[r>>2]=a,l=l+16|0}while((0|l)!=(0|u))}if(Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(ur=(i=ur)+32|0,b=i,s=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),f=e+56|0,UA(r,(0|ar[(c=e+60|0)>>2])-(0|ar[f>>2])>>4),(0|(f=0|ar[f>>2]))!=(0|(c=0|ar[c>>2]))){l=e+37|0,u=e+40|0;do{if(n=0|ar[f>>2],0|tr[l>>0]?UA(r,n):MA(r,65535&n),n=f+4|0,JA(r,((0|ar[(a=f+8|0)>>2])-(0|ar[n>>2])|0)>>>2&255),(0|(n=0|ar[n>>2]))!=(0|(a=0|ar[a>>2])))for(;t=0!=(0|tr[n>>0]),o=0|lr[n+2>>1],1&ar[u>>2]?MA(r,65535&(32767&o|(t?32768:0))):JA(r,255&(127&o|(t?128:0))),(0|(n=n+4|0))!=(0|a););f=f+16|0}while((0|f)!=(0|c))}if(KA(b,e,r,s),0<=(0|tr[(f=b+8|0)+11>>0]))return r=0|ar[(r=b=56592)>>2],b=0|ar[(b=b+4|0)>>2],ar[(u=s=A)>>2]=r,ar[(s=s+4|0)>>2]=b,yu(A=A+8|0,56600),void(ur=i);vu(0|ar[f>>2]),r=0|ar[(r=b=56592)>>2],b=0|ar[(b=b+4|0)>>2],ar[(u=s=A)>>2]=r,ar[(s=s+4|0)>>2]=b,yu(A=A+8|0,56600),ur=i},function(A,e,r){A|=0;var i,f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0;ur=(n=ur)+48|0,E=n+24|0,qA(t=(X=n)+4|0,e|=0,r|=0),(0|tr[(t=t+8|0)+11>>0])<0&&vu(0|ar[t>>2]),i=0|FA(r),f=r+24|0;A:do{if(0<(0|i)){for(h=r+16|0,v=E+8|0,g=e+37|0,Z=e+60|0,p=e+64|0,y=e+56|0,B=w=E+4|0,s=e+40|0,d=X+2|0,k=m=E+12|0,b=0;;){if(0|tr[f>>0])break A;if(0==(0|ar[(u=h)>>2])&0==(0|ar[u+4>>2]))break A;if(ar[w>>2]=0,ar[v>>2]=0,t=(ar[m>>2]=0)|tr[g>>0]?0|FA(r):65535&(0|VA(r)),ar[E>>2]=t,c=255&(u=0|IA(r)),u<<24>>24)for(a=0;1&ar[s>>2]?(t=(65535&(o=0|VA(r)))>>>15&255,e=32767):(t=(255&(o=0|IA(r)))>>>7,e=127,o&=255),tr[X>>0]=t,or[d>>1]=65535&o&e,(0|(t=0|ar[v>>2]))==(0|ar[k>>2])?Nt(B,X):(u=0|ar[X>>2],or[t>>1]=u,or[t+2>>1]=u>>>16,ar[v>>2]=4+(0|ar[v>>2])),(0|(a=a+1|0))<(0|c););if((0|(o=0|ar[Z>>2]))==(0|ar[p>>2]))Rt(y,E),t=0|ar[w>>2];else{if(ar[o>>2]=ar[E>>2],ar[(a=o+4|0)>>2]=0,ar[(u=o+8|0)>>2]=0,t=(ar[o+12>>2]=0)|ar[B>>2],c=(e=(0|ar[v>>2])-t|0)>>2){if(1073741823<c>>>0)break;l=0|hu(e),ar[u>>2]=l,ar[a>>2]=l,ar[o+12>>2]=l+(c<<2),t=0|ar[B>>2],0<(0|(e=(0|ar[v>>2])-t|0))&&(hb(0|l,0|t,0|e),ar[u>>2]=l+(e>>>2<<2))}ar[Z>>2]=16+(0|ar[Z>>2])}if(0|t&&((0|(e=0|ar[v>>2]))!=(0|t)&&(ar[v>>2]=e+(~((e+-4-t|0)>>>2)<<2)),vu(t)),(0|i)<=(0|(b=b+1|0)))break A}zl()}}while(0);if(!(0|tr[f>>0]))return E=0|ar[(r=56592)+4>>2],ar[(X=A)>>2]=ar[r>>2],ar[X+4>>2]=E,yu(A+8|0,56600),void(ur=n);ar[E>>2]=0,ar[E+4>>2]=0,ar[E+8>>2]=0,oo(A,2,100,E),ur=(0<=(0|tr[E+11>>0])||vu(0|ar[E>>2]),n)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0;if(ur=(o=ur)+160|0,c=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[c>>2]=0,ar[c+4>>2]=0,ar[c+8>>2]=0,Xe(t,c),(0|tr[c+11>>0])<0&&vu(0|ar[c>>2]),LA(c,e,r),We(f,(u=(a=0|tr[(l=c+11|0)>>0])<<24>>24<0)?0|ar[c>>2]:c,u?0|ar[c+4>>2]:255&a),(0|tr[l>>0])<0&&vu(0|ar[c>>2]),0<(0|ar[r>>2]))for(c=0;We(f,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(l=0|We(f,22025,13),l=0|We(0|Lf(l,0|ar[e+56>>2]),30086,1),0<(0|ar[r>>2]))for(c=0;We(l,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(u=0|We(l,22039,14),We(0|Lf(u,0|ar[e+60>>2]),30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f=0,n=0;ur=(i=ur)+32|0,f=i,n=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),UA(r,0|ar[e+56>>2]),UA(r,0|ar[e+60>>2]),KA(f,e,r,n),(0|tr[(e=f+8|0)+11>>0])<0&&vu(0|ar[e>>2]),f=0|ar[(r=56592)+4>>2],ar[(n=A)>>2]=ar[r>>2],ar[n+4>>2]=f,yu(A+8|0,56600),ur=i},function(A,e,r){A|=0;var i,f=0,n=0;if(ur=(i=ur)+32|0,f=i+20|0,qA(n=i,e|=0,r|=0),(0|tr[(n=n+8|0)+11>>0])<0&&vu(0|ar[n>>2]),n=0|FA(r),ar[e+56>>2]=n,n=0|FA(r),ar[e+60>>2]=n,!(0|tr[r+24>>0]))return f=0|ar[(r=56592)+4>>2],ar[(n=A)>>2]=ar[r>>2],ar[n+4>>2]=f,yu(A+8|0,56600),void(ur=i);ar[f>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,oo(A,2,100,f),ur=(0<=(0|tr[f+11>>0])||vu(0|ar[f>>2]),i)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0;if(ur=(o=ur)+160|0,a=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,Xe(t,a),(0|tr[a+11>>0])<0&&vu(0|ar[a>>2]),LA(a,e,r),We(f,(u=(l=0|tr[(c=a+11|0)>>0])<<24>>24<0)?0|ar[a>>2]:a,u?0|ar[a+4>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[a>>2]),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(a=0|We(f,21914,10),c=0|We(0|We(a,(u=(c=0|tr[(l=e+56|0)+11>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[e+60>>2]:255&c),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(We(c,21925,14),(0|(a=0|ar[e+68>>2]))!=(0|(c=0|ar[e+72>>2])))for(;u=0|tr[a>>0],l=f+(0|ar[(0|ar[f>>2])-12>>2])+4|0,ar[l>>2]=-75&ar[l>>2]|8,ar[f+(0|ar[(0|ar[f>>2])-12>>2])+12>>2]=2,ar[f+(0|ar[(0|ar[f>>2])-12>>2])+76>>2]=48,We(0|Pf(f,255&u),20449,1),(0|(a=a+1|0))!=(0|c););if(We(f,30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f,n=0,t=0,o=0;if(ur=(f=ur)+32|0,t=f,o=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),OA(r,e+56|0),(0|(n=0|ar[e+68>>2]))!=(0|(i=0|ar[e+72>>2])))for(;JA(r,0|tr[n>>0]),(0|(n=n+1|0))!=(0|i););KA(t,e,r,o),(0|tr[(n=t+8|0)+11>>0])<0&&vu(0|ar[n>>2]),t=0|ar[(r=56592)+4>>2],ar[(o=A)>>2]=ar[r>>2],ar[o+4>>2]=t,yu(A+8|0,56600),ur=f},function(A,e,r){A|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;ur=(f=ur)+32|0,k=f+20|0,qA(n=f,e|=0,r|=0),(0|tr[(n=n+8|0)+11>>0])<0&&vu(0|ar[n>>2]),RA(k,r),(0|tr[(t=(n=e+56|0)+11|0)>>0])<0?(tr[ar[n>>2]>>0]=0,ar[e+60>>2]=0):(tr[n>>0]=0,tr[t>>0]=0),Cu(n,0),ar[n>>2]=ar[k>>2],ar[n+4>>2]=ar[k+4>>2],ar[n+8>>2]=ar[k+8>>2],d=i=r+16|0;A:do{if(!(0==(0|ar[d>>2])&0==(0|ar[d+4>>2]))){for(s=e+68|0,d=e+72|0,u=e+76|0;;){if(a=0|IA(r),n=0|ar[d>>2],(t=b=0|ar[u>>2])>>>0<=n>>>0){if(l=b=0|ar[s>>2],(0|(n=(c=n-b|0)+1|0))<0)break;t=(o=t-b|0)<<1,o=(t=o>>>0<1073741823?t>>>0<n>>>0?n:t:2147483647)?0|hu(t):0,tr[(e=o+c|0)>>0]=a,n=e+(0-c)|0,0<(0|c)&&hb(0|n,0|l,0|c),ar[s>>2]=n,ar[d>>2]=e+1,ar[u>>2]=o+t,0|b&&vu(l)}else tr[n>>0]=a,ar[d>>2]=1+(0|ar[d>>2]);if(0==(0|ar[(b=i)>>2])&0==(0|ar[b+4>>2]))break A}zl()}}while(0);if(!(0|tr[r+24>>0]))return r=0|ar[(d=56592)+4>>2],ar[(k=A)>>2]=ar[d>>2],ar[k+4>>2]=r,yu(A+8|0,56600),void(ur=f);ar[k>>2]=0,ar[k+4>>2]=0,ar[k+8>>2]=0,oo(A,2,100,k),ur=(0<=(0|tr[k+11>>0])||vu(0|ar[k>>2]),f)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c,l=0,u=0;if(ur=(o=ur)+160|0,l=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[l>>2]=0,ar[l+4>>2]=0,ar[l+8>>2]=0,Xe(t,l),(0|tr[l+11>>0])<0&&vu(0|ar[l>>2]),LA(l,e,r),We(f,(u=(c=0|tr[(a=l+11|0)>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[l+4>>2]:255&c),(0|tr[a>>0])<0&&vu(0|ar[l>>2]),0<(0|ar[r>>2]))for(l=0;We(f,18862,2),(0|(l=l+1|0))<(0|ar[r>>2]););if(u=0|We(f,21802,10),We(0|Pf(u,0|ar[e+56>>2]),21813,15),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f=0,n=0;if(ur=(i=ur)+16|0,f=i,n=90*(3&(0|IA(r|=0)))|0,ar[e+56>>2]=n,!(0|tr[r+24>>0]))return f=0|ar[(r=56592)+4>>2],ar[(n=A)>>2]=ar[r>>2],ar[n+4>>2]=f,yu(A+8|0,56600),void(ur=i);ar[f>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,oo(A,2,100,f),ur=(0<=(0|tr[f+11>>0])||vu(0|ar[f>>2]),i)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c,l,u=0;if(ur=(o=ur)+160|0,u=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[u>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,Xe(t,u),(0|tr[u+11>>0])<0&&vu(0|ar[u>>2]),LA(u,e,r),We(f,(l=(c=0|tr[(a=u+11|0)>>0])<<24>>24<0)?0|ar[u>>2]:u,l?0|ar[u+4>>2]:255&c),(0|tr[a>>0])<0&&vu(0|ar[u>>2]),0<(0|ar[r>>2]))for(u=0;We(f,18862,2),(0|(u=u+1|0))<(0|ar[r>>2]););switch(We(f,21681,13),0|tr[e+56>>0]){case 0:We(f,21695,9);break;case 1:We(f,21705,11)}if(Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f=0,n=0;if(ur=(i=ur)+16|0,f=i,n=1&(0|IA(r|=0)),tr[e+56>>0]=n,!(0|tr[r+24>>0]))return f=0|ar[(r=56592)+4>>2],ar[(n=A)>>2]=ar[r>>2],ar[n+4>>2]=f,yu(A+8|0,56600),void(ur=i);ar[f>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,oo(A,2,100,f),ur=(0<=(0|tr[f+11>>0])||vu(0|ar[f>>2]),i)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c,l=0,u=0;if(ur=(o=ur)+160|0,l=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[l>>2]=0,ar[l+4>>2]=0,ar[l+8>>2]=0,Xe(t,l),(0|tr[l+11>>0])<0&&vu(0|ar[l>>2]),LA(l,e,r),We(f,(u=(c=0|tr[(a=l+11|0)>>0])<<24>>24<0)?0|ar[l>>2]:l,u?0|ar[l+4>>2]:255&c),(0|tr[a>>0])<0&&vu(0|ar[l>>2]),0<(0|ar[r>>2]))for(l=0;We(f,18862,2),(0|(l=l+1|0))<(0|ar[r>>2]););if(u=0|We(f,21560,16),u=0|We(0|Pf(u,0|ar[e+56>>2]),21577,1),u=0|We(0|Pf(u,0|ar[e+60>>2]),21579,3),u=0|We(0|Pf(u,0|ar[e+64>>2]),21577,1),We(0|Pf(u,0|ar[e+68>>2]),30086,1),0<(0|ar[r>>2]))for(l=0;We(f,18862,2),(0|(l=l+1|0))<(0|ar[r>>2]););if(u=0|We(f,21583,8),u=0|We(0|Pf(u,0|ar[e+72>>2]),21577,1),u=0|We(0|Pf(u,0|ar[e+76>>2]),21592,3),u=0|We(0|Pf(u,0|ar[e+80>>2]),21577,1),We(0|Pf(u,0|ar[e+84>>2]),30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f=0,n=0;ur=(i=ur)+32|0,f=i,n=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),UA(r,0|ar[e+56>>2]),UA(r,0|ar[e+60>>2]),UA(r,0|ar[e+64>>2]),UA(r,0|ar[e+68>>2]),UA(r,0|ar[e+72>>2]),UA(r,0|ar[e+76>>2]),UA(r,0|ar[e+80>>2]),UA(r,0|ar[e+84>>2]),KA(f,e,r,n),(0|tr[(e=f+8|0)+11>>0])<0&&vu(0|ar[e>>2]),f=0|ar[(r=56592)+4>>2],ar[(n=A)>>2]=ar[r>>2],ar[n+4>>2]=f,yu(A+8|0,56600),ur=i},function(A,e,r){A|=0,e|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0;if(ur=(i=ur)+32|0,b=i+12|0,s=i,l=0|FA(r|=0),u=0|FA(r),a=0|FA(r),c=0|FA(r),t=0|FA(r),o=0|FA(r),n=0|FA(r),f=0|FA(r),131072<(u+65536|0)>>>0)for(;l=(0|l)/2|0,131072<((u=(0|u)/2|0)+65536|0)>>>0;);if(131072<(l+65536|0)>>>0)for(;u=(0|u)/2|0,131072<((l=(0|l)/2|0)+65536|0)>>>0;);if(ar[(d=e+56|0)>>2]=l,ar[d+4>>2]=u,131072<(c+65536|0)>>>0)for(;a=(0|a)/2|0,131072<((c=(0|c)/2|0)+65536|0)>>>0;);if(131072<(a+65536|0)>>>0)for(;c=(0|c)/2|0,131072<((a=(0|a)/2|0)+65536|0)>>>0;);if(ar[(d=e+64|0)>>2]=a,ar[d+4>>2]=c,131072<(o+65536|0)>>>0)for(;t=(0|t)/2|0,131072<((o=(0|o)/2|0)+65536|0)>>>0;);if(131072<(t+65536|0)>>>0)for(;o=(0|o)/2|0,131072<((t=(0|t)/2|0)+65536|0)>>>0;);if(ar[(d=e+72|0)>>2]=t,ar[d+4>>2]=o,131072<(f+65536|0)>>>0)for(;n=(0|n)/2|0,131072<((f=(0|f)/2|0)+65536|0)>>>0;);if(131072<(n+65536|0)>>>0)for(;f=(0|f)/2|0,131072<((n=(0|n)/2|0)+65536|0)>>>0;);if(ar[(d=e+80|0)>>2]=n,0==(0|u)|0==(0|c)|0==(0|o)|0==(0|(ar[d+4>>2]=f)))return ar[s>>2]=0,ar[s+4>>2]=0,ar[s+8>>2]=0,oo(A,2,128,s),0<=(0|tr[s+11>>0])||vu(0|ar[s>>2]),void(ur=i);0|tr[r+24>>0]?(ar[b>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,oo(A,2,100,b),(0|tr[b+11>>0])<0&&vu(0|ar[b>>2])):(s=0|ar[(b=56592)+4>>2],ar[(d=A)>>2]=ar[b>>2],ar[d+4>>2]=s,yu(A+8|0,56600)),ur=i},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(u=(b=0|tr[(s=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,u?0|ar[4+f>>2]:255&b),(0|tr[s>>0])<0&&vu(0|ar[f>>2]),(0|(c=0|ar[e+56>>2]))!=(0|(u=0|ar[e+60>>2]))){b=11+f|0,s=4+f|0;do{if(0<(0|ar[r>>2]))for(e=0;We(n,18862,2),(0|(e=e+1|0))<(0|ar[r>>2]););if(d=0|We(n,21430,21),xA(f,c),l=0|We(0|We(0|We(d,(e=(l=0|tr[b>>0])<<24>>24<0)?0|ar[f>>2]:f,e?0|ar[s>>2]:255&l),21452,1),21454,10),We(0|Lf(l,0|ar[c+48>>2]),21465,9),(0|tr[b>>0])<0&&vu(0|ar[f>>2]),(0|(e=0|ar[c+52>>2]))!=(0|(l=0|ar[c+56>>2])))for(;We(0|Lf(n,0|ar[e>>2]),20449,1),(0|(e=e+4|0))!=(0|l););We(n,30086,1),c=c+64|0}while((0|c)!=(0|u))}if(Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),Gf(),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),Gf(),bf(t),ur=a},function(A,e,r){A|=0,e|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0;if(ur=(f=ur)+32|0,c=f,l=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),i=0==(0|tr[e+37>>0])?2:4,(0|(n=0|ar[e+56>>2]))!=(0|(a=0|ar[e+60>>2])))do{if(t=n+52|0,UA(r,10+(0|br(1+((0|ar[(o=n+56|0)>>2])-(0|ar[t>>2])>>2)|0,i))|0),UA(r,0|ar[n+20>>2]),SA(r,i,0|ar[n+48>>2],0),MA(r,((0|ar[o>>2])-(0|ar[t>>2])|0)>>>2&65535),(0|(t=0|ar[t>>2]))!=(0|(o=0|ar[o>>2])))for(;SA(r,i,0|ar[t>>2],0),(0|(t=t+4|0))!=(0|o););n=n+64|0}while((0|n)!=(0|a));if(KA(c,e,r,l),0<=(0|tr[(n=c+8|0)+11>>0]))return a=0|ar[(a=c=56592)>>2],c=0|ar[(c=c+4|0)>>2],ar[(r=l=A)>>2]=a,ar[(l=l+4|0)>>2]=c,yu(A=A+8|0,56600),void(ur=f);vu(0|ar[n>>2]),a=0|ar[(a=c=56592)>>2],c=0|ar[(c=c+4|0)>>2],ar[(r=l=A)>>2]=a,ar[(l=l+4|0)>>2]=c,yu(A=A+8|0,56600),ur=f},function(A,e,r){A|=0;var i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z=0,p=0,y=0,B=0,E=0,X=0;for(ur=(g=ur)+96|0,E=(B=g)+64|0,qA(Z=g+68|0,e|=0,r|=0),(0|tr[(Z=Z+8|0)+11>>0])<0&&vu(0|ar[Z>>2]),a=r+16|0,c=B+8|0,l=B+40|0,b=B+56|0,d=e+37|0,k=B+48|0,h=s=B+60|0,w=u=B+52|0,v=e+60|0,m=e+64|0,i=e+56|0,n=11+(f=A+8|0)|0,t=B+24|0,o=B+28|0;!(0==(0|ar[(y=a)>>2])&0==(0|ar[y+4>>2]));){if(ar[B>>2]=4264,ar[l>>2]=0,ar[c>>2]=0,ar[4+c>>2]=0,ar[8+c>>2]=0,ar[12+c>>2]=0,ar[16+c>>2]=0,ar[20+c>>2]=0,ar[24+c>>2]=0,or[28+c>>1]=0,ar[u>>2]=0,ar[b>>2]=0,ar[s>>2]=0,re(A,B,r),(0|ar[A>>2])==(0|ar[14148])){if(0|tr[d>>0]){if(y=0|FA(r),ar[k>>2]=y,e=65535&(y=0|VA(r)),y<<16>>16)for(Z=0;p=0|FA(r),ar[E>>2]=p,(y=0|ar[b>>2])>>>0<(0|ar[h>>2])>>>0?(ar[y>>2]=p,ar[b>>2]=y+4):Ce(w,E),Z=Z+1|0,(0!=(0|ar[(y=a)>>2])|0!=(0|ar[y+4>>2]))&(0|Z)<(0|e););}else if(y=65535&(0|VA(r)),ar[k>>2]=y,e=65535&(y=0|VA(r)),y<<16>>16)for(Z=0;p=65535&(0|VA(r)),ar[E>>2]=p,(y=0|ar[b>>2])>>>0<(0|ar[h>>2])>>>0?(ar[y>>2]=p,ar[b>>2]=y+4):Ce(w,E),Z=Z+1|0,(0!=(0|ar[(y=a)>>2])|0!=(0|ar[y+4>>2]))&(0|Z)<(0|e););(0|(Z=0|ar[v>>2]))==(0|ar[m>>2])?de(i,B):(se(Z,B),ar[v>>2]=64+(0|ar[v>>2])),p=((0|tr[n>>0])<0&&vu(0|ar[f>>2]),0)}else p=1;if(0|(Z=0|ar[u>>2])&&((0|(e=0|ar[b>>2]))!=(0|Z)&&(ar[b>>2]=e+(~((e+-4-Z|0)>>>2)<<2)),vu(Z)),ar[B>>2]=4264,0|(Z=0|ar[t>>2])&&((0|ar[o>>2])!=(0|Z)&&(ar[o>>2]=Z),vu(Z)),1==(0|p)){X=36;break}}ur=(36!=(0|X)&&(0|tr[r+24>>0]?(ar[B>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,oo(A,2,100,B),(0|tr[B+11>>0])<0&&vu(0|ar[B>>2])):(E=0|ar[(B=56592)+4>>2],ar[(X=A)>>2]=ar[B>>2],ar[X+4>>2]=E,yu(f,56600))),g)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0;if(ur=(o=ur)+160|0,l=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[l>>2]=0,ar[l+4>>2]=0,ar[l+8>>2]=0,Xe(t,l),(0|tr[l+11>>0])<0&&vu(0|ar[l>>2]),LA(l,e,r),We(f,(c=(u=0|tr[(b=l+11|0)>>0])<<24>>24<0)?0|ar[l>>2]:l,c?0|ar[l+4>>2]:255&u),(0|tr[b>>0])<0&&vu(0|ar[l>>2]),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(f,20916,23),c=0|We(0|Pf(c,0|cr[e+56>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,20940,23),c=0|We(0|Pf(c,0|cr[e+57>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,20964,19),c=0|We(0|Hf(c,0!=(0|tr[e+58>>0])),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(b=0|We(c,20984,21),We(0|Pf(b,0|cr[e+59>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););for(We(f,21006,37),c=e+60|0,a=0;Lf(f,(0|ar[c>>2])>>>(31-a|0)&1),7!=((0|a)%8|0)?3==((0|a)%4|0)&&(tr[l>>0]=46,We(f,l,1)):(tr[l>>0]=32,We(f,l,1)),(0|(a=a+1|0))<32;);if(We(f,30086,1),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););for(We(f,21044,36),a=0;Pf(f,0!=(ar[e+64+(a>>>5<<2)>>2]&1<<(31&a)|0)&1),7&(a=a+1|0)||(tr[l>>0]=32,We(f,l,1)),(0|a)<48;);if(We(f,30086,1),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(f,21081,19),c=0|We(0|Pf(c,0|cr[e+72>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21101,30),c=0|We(0|xf(c,0|or[e+74>>1]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21132,18),c=0|We(0|Pf(c,0|cr[e+76>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21151,15),c=0|We(0|Pf(c,0|cr[e+77>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21167,16),c=0|We(0|Pf(c,0|cr[e+78>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21184,18),c=0|We(0|Pf(c,0|cr[e+79>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21203,16),c=0|We(0|xf(c,0|or[e+80>>1]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21220,21),c=0|We(0|Pf(c,0|cr[e+82>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21242,21),c=0|We(0|Pf(c,0|cr[e+83>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21264,20),c=0|We(0|Pf(c,0|cr[e+84>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(a=0|We(c,21285,13),We(0|Pf(a,0|cr[e+88>>0]),30086,1),(0|(a=0|ar[e+92>>2]))!=(0|(b=0|ar[e+96>>2]))){u=a,a=0|ar[r>>2];do{if(0<(0|a))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(We(f,21299,8),e=0|ar[r>>2],ar[r>>2]=e+1,-1<(0|e))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(f,21308,20),c=0|We(0|Pf(c,0|cr[u>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,21329,15),We(0|Pf(c,0|cr[u+1>>0]),30086,1),c=0|ar[u+4>>2],e=0|ar[u+8>>2],a=0|ar[r>>2],(0|c)!=(0|e))do{if(0<(0|a))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if((0|(a=0|ar[c>>2]))!=(0|(l=0|ar[c+4>>2])))for(;s=0|tr[a>>0],ar[f+(0|ar[(0|ar[f>>2])-12>>2])+76>>2]=48,ar[f+(0|ar[(0|ar[f>>2])-12>>2])+12>>2]=2,d=f+(0|ar[(0|ar[f>>2])-12>>2])+4|0,ar[d>>2]=-75&ar[d>>2]|8,We(0|Pf(f,255&s),20449,1),(0|(a=a+1|0))!=(0|l););We(f,30086,1),a=f+(0|ar[(0|ar[f>>2])-12>>2])+4|0,ar[a>>2]=-75&ar[a>>2]|2,c=c+12|0,a=0|ar[r>>2]}while((0|c)!=(0|e));a=(0|a)<1?0:a+-1|0,ar[r>>2]=a,u=u+16|0}while((0|u)!=(0|b))}if(Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0;for(ur=(i=ur)+32|0,a=i,c=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),JA(r,0|tr[e+56>>0]),JA(r,tr[e+58>>0]<<5&255|tr[e+57>>0]<<6&255|31&tr[e+59>>0]),UA(r,0|ar[e+60>>2]),f=0;o=f<<3,JA(r,(0!=(ar[e+64+((f>>>2&134217727)<<2)>>2]&1<<(24&o|7)|0)|(0!=(ar[e+64+((f>>>2&134217727)<<2)>>2]&1<<(24&o|6)|0)|(0!=(ar[e+64+((f>>>2&134217727)<<2)>>2]&1<<(24&o|5)|0)|(0!=(ar[e+64+((f>>>2&134217727)<<2)>>2]&1<<(24&o|4)|0)|(0!=(ar[e+64+((f>>>2&134217727)<<2)>>2]&1<<(24&o|3)|0)|(0!=(ar[e+64+((f>>>2&134217727)<<2)>>2]&1<<(24&o|2)|0)|(0!=(ar[e+64+((f>>>2&134217727)<<2)>>2]&1<<(24&o|1)|0)&1)<<1)<<1)<<1&14)<<1&30)<<1&62)<<1&126)<<1&255),6!=(0|(f=f+1|0)););if(JA(r,0|tr[e+72>>0]),MA(r,-4096|or[e+74>>1]),JA(r,-4|tr[e+76>>0]),JA(r,-4|tr[e+77>>0]),JA(r,-8|tr[e+78>>0]),JA(r,-8|tr[e+79>>0]),MA(r,0|or[e+80>>1]),JA(r,255&(255&(tr[e+83>>0]<<3&56|tr[e+82>>0]<<6&255|tr[e+84>>0]<<2&4)|3+(0|cr[e+88>>0])&3)),f=e+92|0,JA(r,((0|ar[(o=e+96|0)>>2])-(0|ar[f>>2])|0)>>>4&255),(0|(f=0|ar[f>>2]))!=(0|(o=0|ar[o>>2])))do{if(JA(r,tr[f>>0]<<6&64|63&tr[f+1>>0]),n=f+4|0,MA(r,65535&(((0|ar[(t=f+8|0)>>2])-(0|ar[n>>2])|0)/12|0)),(0|(n=0|ar[n>>2]))!=(0|(t=0|ar[t>>2])))for(;MA(r,(0|ar[n+4>>2])-(0|ar[n>>2])&65535),zA(r,n),(0|(n=n+12|0))!=(0|t););f=f+16|0}while((0|f)!=(0|o));if(KA(a,e,r,c),0<=(0|tr[(f=a+8|0)+11>>0]))return e=0|ar[(e=a=56592)>>2],a=0|ar[(a=a+4|0)>>2],ar[(r=c=A)>>2]=e,ar[(c=c+4|0)>>2]=a,yu(A=A+8|0,56600),void(ur=i);vu(0|ar[f>>2]),e=0|ar[(e=a=56592)>>2],a=0|ar[(a=a+4|0)>>2],ar[(r=c=A)>>2]=e,ar[(c=c+4|0)>>2]=a,yu(A=A+8|0,56600),ur=i},function(A,e,r){A|=0,e|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;for(ur=(i=ur)+32|0,I=i+16|0,W=i,n=0|IA(r|=0),tr[e+56>>0]=n,f=255&(n=0|IA(r)),tr[e+57>>0]=(255&n)>>>6,tr[e+58>>0]=f>>>5&1,tr[e+59>>0]=31&f,f=0|FA(r),ar[e+60>>2]=f,n=(f=0)|IA(r);p=255&n,y=1<<(24&(B=f<<3)),Z=0|ar[(E=e+64+((f>>>2&134217727)<<2)|0)>>2],ar[E>>2]=128&p|0?Z|y:Z&~y,y=1<<(24&B|1),Z=0|ar[(E=e+64+((f>>>2&134217727)<<2)|0)>>2],ar[E>>2]=64&p|0?Z|y:Z&~y,y=1<<(24&B|2),Z=0|ar[(E=e+64+((f>>>2&134217727)<<2)|0)>>2],ar[E>>2]=32&p|0?Z|y:Z&~y,y=1<<(24&B|3),Z=0|ar[(E=e+64+((f>>>2&134217727)<<2)|0)>>2],ar[E>>2]=16&p|0?Z|y:Z&~y,y=1<<(24&B|4),Z=0|ar[(E=e+64+((f>>>2&134217727)<<2)|0)>>2],ar[E>>2]=8&p|0?Z|y:Z&~y,y=1<<(24&B|5),Z=0|ar[(E=e+64+((f>>>2&134217727)<<2)|0)>>2],ar[E>>2]=4&p|0?Z|y:Z&~y,y=1<<(24&B|6),Z=0|ar[(E=e+64+((f>>>2&134217727)<<2)|0)>>2],ar[E>>2]=2&p|0?Z|y:Z&~y,B=1<<(24&B|7),y=0|ar[(E=e+64+((f>>>2&134217727)<<2)|0)>>2],ar[E>>2]=1&p|0?y|B:y&~B,f=f+1|0,n=0|IA(r),6!=(0|f););tr[e+72>>0]=n,k=4095&(0|VA(r)),or[e+74>>1]=k,k=3&(0|IA(r)),tr[e+76>>0]=k,k=3&(0|IA(r)),tr[e+77>>0]=k,k=7&(0|IA(r))|8,tr[e+78>>0]=k,k=7&(0|IA(r))|8,tr[e+79>>0]=k,k=0|VA(r),or[e+80>>1]=k,E=255&(k=0|IA(r)),tr[e+82>>0]=(255&k)>>>6,tr[e+83>>0]=E>>>3&7,tr[e+84>>0]=E>>>2&1,tr[e+88>>0]=1+(3&E),k=255&(E=0|IA(r));A:do{if(E<<24>>24){h=r+24|0,v=I+8|0,g=I+1|0,Z=e+96|0,p=e+100|0,B=m=I+12|0,E=y=w=I+4|0,l=e+92|0,u=W+4|0,s=r+4|0,d=b=W+8|0,c=0;do{if(0|tr[h>>0])break A;o=0|IA(r),ar[w>>2]=0,ar[v>>2]=0,ar[m>>2]=0,o&=255,tr[I>>0]=o>>>6&1,tr[g>>0]=63&o,a=65535&(o=0|VA(r));e:do{if(o<<16>>16){o=0;do{if(0|tr[h>>0])break e;ar[W>>2]=0,ar[u>>2]=0,t=65535&(f=(ar[b>>2]=0)|VA(r));do{if(f<<16>>16){do{if(0|CA(r,65535&f,0)){if(t>>>0<=(f=(e=0|ar[u>>2])-(n=0|ar[W>>2])|0)>>>0?t>>>0<f>>>0&&(0|e)!=(0|(X=n+t|0))&&(ar[u>>2]=X):TA(W,t-f|0),f=0|ar[r>>2],n=0|ar[s>>2]){bu(n),xb[63&ar[16+(0|ar[f>>2])>>2]](f,0|ar[W>>2],t),du(n);break}xb[63&ar[16+(0|ar[f>>2])>>2]](f,0|ar[W>>2],t);break}}while(0);if((f=0|ar[v>>2])>>>0<(0|ar[B>>2])>>>0){ar[f>>2]=0,ar[(t=f+4|0)>>2]=0,ar[f+8>>2]=0,ar[f>>2]=ar[W>>2],ar[t>>2]=ar[u>>2],ar[f+8>>2]=ar[d>>2],ar[d>>2]=0,ar[u>>2]=0,ar[W>>2]=0,ar[v>>2]=12+(0|ar[v>>2]);break}ue(y,W);break}}while(0);0|(f=0|ar[W>>2])&&((0|ar[u>>2])!=(0|f)&&(ar[u>>2]=f),vu(f)),o=o+1|0}while((0|o)<(0|a))}}while(0);if((f=0|ar[Z>>2])>>>0>=(0|ar[p>>2])>>>0){if(le(l,I),0|(f=0|ar[E>>2])){if((0|(n=0|ar[v>>2]))!=(0|f)){for(;e=n+-12|0,ar[v>>2]=e,(0|(n=(t=0|ar[e>>2])?((0|ar[(n=n+-8|0)>>2])!=(0|t)&&(ar[n>>2]=t),vu(t),0|ar[v>>2]):e))!=(0|f););f=0|ar[E>>2]}vu(f)}}else or[f>>1]=0|or[I>>1],ar[(o=f+4|0)>>2]=0,ar[(a=f+8|0)>>2]=0,ar[f+12>>2]=0,ar[o>>2]=ar[y>>2],ar[a>>2]=ar[v>>2],ar[f+12>>2]=ar[B>>2],ar[B>>2]=0,ar[v>>2]=0,ar[y>>2]=0,ar[Z>>2]=16+(0|ar[Z>>2]);c=c+1|0}while((0|c)<(0|k))}}while(0);if(n=0|ar[(f=t=r+16|0)>>2],0<(0|(f=0|ar[f+4>>2]))|0==(0|f)&0<n>>>0&&((e=0|ar[r+8>>2])&&(_A(e,n,f),n=0|ar[(f=t)>>2],f=0|ar[f+4>>2]),X=0|ar[r>>2],W=0|ar[X>>2],E=0|ar[W+20>>2],W=0|tb(0|(W=0|jb[127&ar[W+8>>2]](X)),0|D,0|n,0|f),xb[63&E](X,W,D),ar[(W=t)>>2]=0,ar[W+4>>2]=0),!(0|tr[r+24>>0]))return r=0|ar[(W=56592)+4>>2],ar[(I=A)>>2]=ar[W>>2],ar[I+4>>2]=r,yu(A+8|0,56600),void(ur=i);ar[I>>2]=0,ar[I+4>>2]=0,ar[I+8>>2]=0,oo(A,2,100,I),ur=(0<=(0|tr[I+11>>0])||vu(0|ar[I>>2]),i)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0;if(ur=(o=ur)+160|0,a=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,Xe(t,a),(0|tr[a+11>>0])<0&&vu(0|ar[a>>2]),LA(a,e,r),We(f,(u=(l=0|tr[(c=a+11|0)>>0])<<24>>24<0)?0|ar[a>>2]:a,u?0|ar[a+4>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[a>>2]),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(f,18907,9),c=0|We(0|Pf(c,0|cr[e+56>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,20644,13),c=0|We(0|Pf(c,0|cr[e+57>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,20658,17),c=0|We(0|Pf(c,0|cr[e+58>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,20676,15),c=0|We(0|Pf(c,0|cr[e+60>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,20692,12),c=0|We(0|Pf(c,0|cr[e+61>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,20705,22),c=0|We(0|Pf(c,0|cr[e+63>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,20728,22),c=0|We(0|Pf(c,0|cr[e+64>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,20751,24),c=0|We(0|Pf(c,0|cr[e+65>>0]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(We(c,20776,28),0|tr[e+66>>0]?We(0|Pf(f,1+(0|cr[e+67>>0])|0),30086,1):We(f,20805,12),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(We(f,20818,12),r=e+68|0,(0|ar[(c=e+72|0)>>2])!=(0|ar[r>>2]))for(a=0;l=(u=0|We(f,20449,1))+(0|ar[(0|ar[u>>2])-12>>2])+4|0,ar[l>>2]=-75&ar[l>>2]|8,ar[u+(0|ar[(0|ar[u>>2])-12>>2])+76>>2]=48,ar[u+(0|ar[(0|ar[u>>2])-12>>2])+12>>2]=2,Pf(u,0|cr[(0|ar[r>>2])+a>>0]),(a=a+1|0)>>>0<((0|ar[c>>2])-(0|ar[r>>2])|0)>>>0;);if(u=f+(0|ar[(0|ar[f>>2])-12>>2])+4|0,ar[u>>2]=-75&ar[u>>2]|2,We(f,30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f=0,n=0;if(ur=(i=ur)+32|0,f=i,n=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),JA(r,-128|tr[e+56>>0]),JA(r,31&tr[e+58>>0]|tr[e+57>>0]<<5&255),JA(r,255&((0|tr[e+60>>0]?64:0)|(0|tr[e+59>>0]?128:0)|(0|tr[e+61>>0]?32:0)|(0|tr[e+62>>0]?16:0)|(0|tr[e+63>>0]?8:0)|(0|tr[e+64>>0]?4:0)|3&tr[e+65>>0])),JA(r,0),KA(f,e,r,n),0<=(0|tr[(e=f+8|0)+11>>0]))return e=0|ar[(e=f=56592)>>2],f=0|ar[(f=f+4|0)>>2],ar[(r=n=A)>>2]=e,ar[(n=n+4|0)>>2]=f,yu(n=A+8|0,56600),void(ur=i);vu(0|ar[e>>2]),e=0|ar[(e=f=56592)>>2],f=0|ar[(f=f+4|0)>>2],ar[(r=n=A)>>2]=e,ar[(n=n+4|0)>>2]=f,yu(n=A+8|0,56600),ur=i},function(A,e,r){A|=0,e|=0;var i,f,n,t,o,a,c,l,u,b,s,d=0,k=0,h=0,w=0;if(ur=(o=ur)+16|0,w=o,k=127&(0|IA(r|=0)),tr[e+56>>0]=k,k=0|IA(r),tr[e+57>>0]=(255&k)>>>5,tr[e+58>>0]=31&k,d=255&(k=0|IA(r)),tr[e+59>>0]=(255&k)>>>7,tr[e+60>>0]=d>>>6&1,tr[e+61>>0]=d>>>5&1,tr[e+62>>0]=d>>>4&1,tr[e+63>>0]=d>>>3&1,tr[e+64>>0]=d>>>2&1,tr[e+65>>0]=3&d,k=(d=255&(0|IA(r)))>>>4&1,(tr[e+66>>0]=k)<<24>>24&&(tr[e+67>>0]=15&d),t=0|ar[(k=r+16|0)>>2],k=0|ar[k+4>>2],n=e+68|0,t>>>0<=(i=(f=0|ar[(e=e+72|0)>>2])-(d=0|ar[n>>2])|0)>>>0?t>>>0<i>>>0&&(0|f)!=(0|(h=d+t|0))&&(ar[e>>2]=h):(TA(n,t-i|0),d=0|ar[n>>2]),a=r,c=d,l=t,u=k,c|=0,a=0|CA(a|=0,l|=0,u|=0)?(u=0|ar[a>>2],(s=0==(0|(b=0|ar[a+4>>2])))||bu(b),(u=0|xb[63&ar[16+(0|ar[u>>2])>>2]](u,c,l))||GA(a),s||du(b),u):0,!(0|tr[r+24>>0]))return r=0|ar[(h=56592)+4>>2],ar[(w=A)>>2]=ar[h>>2],ar[w+4>>2]=r,yu(A+8|0,56600),void(ur=o);ar[w>>2]=0,ar[w+4>>2]=0,ar[w+8>>2]=0,oo(A,2,100,w),ur=(0<=(0|tr[w+11>>0])||vu(0|ar[w>>2]),o)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0;if(ur=(o=ur)+160|0,c=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[c>>2]=0,ar[c+4>>2]=0,ar[c+8>>2]=0,Xe(t,c),(0|tr[c+11>>0])<0&&vu(0|ar[c>>2]),LA(c,e,r),We(f,(u=(l=0|tr[(a=c+11|0)>>0])<<24>>24<0)?0|ar[c>>2]:c,u?0|ar[c+4>>2]:255&l),(0|tr[a>>0])<0&&vu(0|ar[c>>2]),0<(0|ar[r>>2]))for(c=0;We(f,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(l=0|We(f,20536,22),We(0|Kf(l,u=0|ob(0|ar[(u=e+8|0)>>2],0|ar[u+4>>2],0|ar[e+16>>2],0),D),30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f=0,n=0;ur=(i=ur)+32|0,f=i,n=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),zA(r,e+72|0),KA(f,e,r,n),(0|tr[(e=f+8|0)+11>>0])<0&&vu(0|ar[e>>2]),f=0|ar[(r=56592)+4>>2],ar[(n=A)>>2]=ar[r>>2],ar[n+4>>2]=f,yu(A+8|0,56600),ur=i},function(A,e,r){A|=0,e|=0;var i,f,n=0,t=0,o=0;if(ur=(f=ur)+16|0,i=f,n=0|ar[(r|=0)>>2],(t=0|ar[r+4>>2])?(bu(t),o=0|jb[127&ar[8+(0|ar[n>>2])>>2]](n),ar[(n=e+56|0)>>2]=0,ar[n+4>>2]=0,ar[(n=e+64|0)>>2]=o,ar[n+4>>2]=D,du(t)):(n=0|jb[127&ar[8+(0|ar[n>>2])>>2]](n),ar[(t=e+56|0)>>2]=0,ar[t+4>>2]=0,ar[(t=e+64|0)>>2]=n,ar[t+4>>2]=D),!(0|tr[r+24>>0]))return t=0|ar[(n=56592)+4>>2],ar[(o=A)>>2]=ar[n>>2],ar[o+4>>2]=t,yu(A+8|0,56600),void(ur=f);ar[i>>2]=0,ar[i+4>>2]=0,ar[i+8>>2]=0,oo(A,2,100,i),ur=(0<=(0|tr[i+11>>0])||vu(0|ar[i>>2]),f)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(u=(b=0|tr[(s=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,u?0|ar[4+f>>2]:255&b),(0|tr[s>>0])<0&&vu(0|ar[f>>2]),(0|(c=0|ar[e+56>>2]))!=(0|(u=0|ar[e+60>>2]))){b=11+f|0,s=4+f|0;do{if(0<(0|ar[r>>2]))for(e=0;We(n,18862,2),(0|(e=e+1|0))<(0|ar[r>>2]););if(d=0|We(n,20408,12),xA(f,c),l=0|We(0|We(d,(e=(l=0|tr[b>>0])<<24>>24<0)?0|ar[f>>2]:f,e?0|ar[s>>2]:255&l),30086,1),0<(0|ar[r>>2]))for(e=0;We(l,18862,2),(0|(e=e+1|0))<(0|ar[r>>2]););if(l=0|We(l,20421,12),l=0|We(0|Lf(l,0|ar[c+48>>2]),30086,1),0<(0|ar[r>>2]))for(e=0;We(l,18862,2),(0|(e=e+1|0))<(0|ar[r>>2]););if(We(l,20434,14),(0|tr[b>>0])<0&&vu(0|ar[f>>2]),(0|(e=0|ar[c+52>>2]))!=(0|(l=0|ar[c+56>>2])))for(;We(0|Lf(n,0|ar[e>>2]),20449,1),(0|(e=e+4|0))!=(0|l););We(n,30086,1),c=c+64|0}while((0|c)!=(0|u))}if(Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),Gf(),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),Gf(),bf(t),ur=a},function(A,e,r){var i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p=0,y=0,B=0,E=0,X=0,W=0;for(ur=(Z=ur)+96|0,v=(r|=0)+16|0,m=8+(h=Z+24|0)|0,g=40+h|0,X=56+h|0,l=(w=Z)+8|0,u=11+(c=(A|=0)+8|0)|0,b=A+12|0,s=48+h|0,d=(e|=0)+60|0,k=e+64|0,i=e+56|0,f=a=60+h|0,n=E=52+h|0,t=24+h|0,o=28+h|0;!(0==(0|ar[(B=v)>>2])&0==(0|ar[B+4>>2]));){if(ar[h>>2]=4264,ar[g>>2]=0,ar[m>>2]=0,ar[4+m>>2]=0,ar[8+m>>2]=0,ar[12+m>>2]=0,ar[16+m>>2]=0,ar[20+m>>2]=0,ar[24+m>>2]=0,or[28+m>>1]=0,ar[E>>2]=0,ar[X>>2]=0,ar[a>>2]=0,re(A,h,r),(0|ar[A>>2])==(0|ar[14148]))if(qA(w,h,r),y=0|ar[(p=w)+4>>2],ar[(B=A)>>2]=ar[p>>2],ar[B+4>>2]=y,(0|tr[u>>0])<0?(tr[ar[c>>2]>>0]=0,ar[b>>2]=0):(tr[c>>0]=0,tr[u>>0]=0),Cu(c,0),ar[c>>2]=ar[l>>2],ar[4+c>>2]=ar[4+l>>2],ar[8+c>>2]=ar[8+l>>2],(0|ar[A>>2])==(0|ar[14148])){p=0|FA(r),ar[s>>2]=p,p=0|FA(r);A:do{if(0<(0|p)){e=0;do{if(0==(0|ar[(B=v)>>2])&0==(0|ar[B+4>>2]))break A;y=0|FA(r),ar[w>>2]=y,(B=0|ar[X>>2])>>>0<(0|ar[f>>2])>>>0?(ar[B>>2]=y,ar[X>>2]=B+4):Ce(n,w),e=e+1|0}while((0|e)<(0|p))}}while(0);(0|(e=0|ar[d>>2]))==(0|ar[k>>2])?ae(i,h):(oe(e,h),ar[d>>2]=64+(0|ar[d>>2])),y=((0|tr[u>>0])<0&&vu(0|ar[c>>2]),0)}else y=1;else y=1;if(0|(e=0|ar[E>>2])&&((0|(p=0|ar[X>>2]))!=(0|e)&&(ar[X>>2]=p+(~((p+-4-e|0)>>>2)<<2)),vu(e)),ar[h>>2]=4264,0|(e=0|ar[t>>2])&&((0|ar[o>>2])!=(0|e)&&(ar[o>>2]=e),vu(e)),1==(0|y)){W=33;break}}ur=(33!=(0|W)&&(0|tr[r+24>>0]?(ar[h>>2]=0,ar[4+h>>2]=0,ar[8+h>>2]=0,oo(A,2,100,h),(0|tr[11+h>>0])<0&&vu(0|ar[h>>2])):(X=0|ar[(E=56592)+4>>2],ar[(W=A)>>2]=ar[E>>2],ar[W+4>>2]=X,yu(c,56600))),Z)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(u=(l=0|tr[(c=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,u?0|ar[4+f>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[f>>2]),ne(f,e,r),We(n,(c=(l=0|tr[(u=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,c?0|ar[4+f>>2]:255&l),(0|tr[u>>0])<0&&vu(0|ar[f>>2]),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),Gf(),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),Gf(),bf(t),ur=a},function(A,e,r){$A(A|=0,e|=0,r|=0,-1)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(u=(l=0|tr[(c=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,u?0|ar[4+f>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[f>>2]),ne(f,e,r),We(n,(c=(l=0|tr[(u=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,c?0|ar[4+f>>2]:255&l),(0|tr[u>>0])<0&&vu(0|ar[f>>2]),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),Gf(),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),Gf(),bf(t),ur=a},function(A,e,r){A|=0;var i,f=0;ur=(i=ur)+32|0,qA(f=i,e|=0,r|=0),(0|tr[(f=f+8|0)+11>>0])<0&&vu(0|ar[f>>2]),$A(A,e,r,0|FA(r)),ur=i},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0;if(ur=(o=ur)+160|0,a=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,Xe(t,a),(0|tr[a+11>>0])<0&&vu(0|ar[a>>2]),LA(a,e,r),We(f,(u=(l=0|tr[(c=a+11|0)>>0])<<24>>24<0)?0|ar[a>>2]:a,u?0|ar[a+4>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[a>>2]),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(r=0|We(f,20144,10),We(0|We(r,(l=(u=0|tr[(c=e+56|0)+11>>0])<<24>>24<0)?0|ar[c>>2]:c,l?0|ar[e+60>>2]:255&u),30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o},function(A,e,r){A|=0;var i,f,n=0,t=0;if(ur=(f=ur)+32|0,t=f+20|0,qA(n=f,e|=0,r|=0),(0|tr[(n=n+8|0)+11>>0])<0&&vu(0|ar[n>>2]),RA(t,r),(0|tr[(i=(n=e+56|0)+11|0)>>0])<0?(tr[ar[n>>2]>>0]=0,ar[e+60>>2]=0):(tr[n>>0]=0,tr[i>>0]=0),Cu(n,0),ar[n>>2]=ar[t>>2],ar[n+4>>2]=ar[t+4>>2],ar[n+8>>2]=ar[t+8>>2],!(0|tr[r+24>>0]))return r=0|ar[(e=56592)+4>>2],ar[(t=A)>>2]=ar[e>>2],ar[t+4>>2]=r,yu(A+8|0,56600),void(ur=f);ar[t>>2]=0,ar[t+4>>2]=0,ar[t+8>>2]=0,oo(A,2,100,t),ur=(0<=(0|tr[t+11>>0])||vu(0|ar[t>>2]),f)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0;if(ur=(a=ur)+160|0,f=a+136|0,t=(n=a)+56|0,o=n+4|0,ar[n>>2]=292,ar[t>>2]=312,Jf(n+56|0,o),ar[n+128>>2]=0,ar[n+132>>2]=-1,ar[n>>2]=4304,ar[t>>2]=4324,Sf(o),ar[o>>2]=4340,ar[(i=n+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[n+52>>2]=16,ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,Xe(o,f),(0|tr[11+f>>0])<0&&vu(0|ar[f>>2]),LA(f,e,r),We(n,(u=(l=0|tr[(c=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,u?0|ar[4+f>>2]:255&l),(0|tr[c>>0])<0&&vu(0|ar[f>>2]),0<(0|ar[r>>2]))for(c=0;We(n,18862,2),(0|(c=c+1|0))<(0|ar[r>>2]););if(l=0|We(n,20027,13),e=0|ar[(c=e+56|0)>>2],e=0|jb[127&ar[8+(0|ar[e>>2])>>2]](e),ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,tr[(u=11+f|0)>>0]=4,tr[4+f>>0]=0,tr[f>>0]=e>>>24,tr[1+f>>0]=e>>>16,tr[2+f>>0]=e>>>8,tr[3+f>>0]=e,We(0|We(l,f,4),30086,1),(0|tr[u>>0])<0&&vu(0|ar[f>>2]),(c=0|ar[c>>2])?(ns[127&ar[12+(0|ar[c>>2])>>2]](f,c,r),We(n,(r=(l=0|tr[(u=11+f|0)>>0])<<24>>24<0)?0|ar[f>>2]:f,r?0|ar[4+f>>2]:255&l),(0|tr[u>>0])<0&&vu(0|ar[f>>2])):We(n,20041,17),Ie(A,o),ar[n>>2]=4304,ar[t>>2]=4324,ar[o>>2]=4340,0<=(0|tr[11+i>>0]))return kf(o),Gf(),bf(t),void(ur=a);vu(0|ar[i>>2]),kf(o),Gf(),bf(t),ur=a},function(A,e,r){A|=0,e|=0;var i,f,n=0,t=0,o=0,a=0;if(ur=(f=ur)+48|0,t=(a=f)+20|0,o=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),(n=0|ar[(i=e+56|0)>>2])||sr(20011,19104,1857,19563),UA(r,0|jb[127&ar[8+(0|ar[n>>2])>>2]](n)),n=0|ar[i>>2],ns[127&ar[16+(0|ar[n>>2])>>2]](a,n,r),0|ar[a>>2])return t=0|ar[(r=a)+4>>2],ar[(o=A)>>2]=ar[r>>2],ar[o+4>>2]=t,a=a+8|0,ar[(A=A+8|0)>>2]=ar[a>>2],ar[A+4>>2]=ar[a+4>>2],ar[A+8>>2]=ar[a+8>>2],ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,void(ur=f);KA(t,e,r,o),(0|tr[(e=t+8|0)+11>>0])<0&&vu(0|ar[e>>2]),t=0|ar[(r=56592)+4>>2],ar[(o=A)>>2]=ar[r>>2],ar[o+4>>2]=t,yu(A+8|0,56600),ur=(0<=(0|tr[a+8+11>>0])||vu(0|ar[a+8>>2]),f)},function(A,e,r){A|=0,e|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;ur=(f=ur)+64|0,b=f+40|0,l=f+36|0,o=f+24|0,i=f+16|0,n=f,t=0|FA(r|=0),ar[l>>2]=t;A:do{if(1886547814<=(0|t)){if((0|t)<1917403971)switch(0|t){case 1886547814:break;default:s=26;break A}else switch(0|t){case 1917403971:break;default:s=26;break A}if(0|NA(r,a=0|tb(0|(a=0|ob(0|ar[(a=e+8|0)>>2],0|ar[a+4>>2],0|ar[e+16>>2],0)),0|D,-4,-1),c=D))return ar[o>>2]=0,ar[o+4>>2]=0,ar[o+8>>2]=0,oo(A,2,100,o),0<=(0|tr[o+11>>0])||vu(0|ar[o>>2]),void(ur=f);if(ar[b>>2]=0,ar[(o=b+4|0)>>2]=0,(ar[b+8>>2]=0)|a)for((0|a)<0&&zl(),t=0|hu(a),ar[o>>2]=t,ar[b>>2]=t,ar[b+8>>2]=t+a,n=a;t=1+((tr[t>>0]=0)|ar[o>>2])|0,ar[o>>2]=t,0!=(0|(n=n+-1|0)););if(!(0==(0|a)&0==(0|c)))for(n=0;t=0|IA(r),tr[(0|ar[b>>2])+n>>0]=t,0<c>>>0|0==(0|c)&(n=n+1|0)>>>0<a>>>0;);fe(i,l,b),n=0|ar[i>>2],l=0|ar[(t=4+i|0)>>2],ar[i>>2]=0,ar[t>>2]=0,ar[e+56>>2]=n,n=0|ar[(e=e+60|0)>>2],ar[e>>2]=l,0|n&&(du(n),0|(u=0|ar[t>>2]))&&du(u),0|(n=0|ar[b>>2])&&((0|ar[o>>2])!=(0|n)&&(ar[o>>2]=n),vu(n))}else{switch(0|t){case 1852009592:break;default:s=26;break A}if(o=0|hu(24),ar[o+4>>2]=0,ar[o+8>>2]=0,ar[o>>2]=6064,ar[(t=o+12|0)>>2]=6092,or[o+16>>1]=2,or[o+18>>1]=2,or[o+20>>1]=6,tr[o+22>>0]=1,bu(o),ar[e+56>>2]=t,n=0|ar[(e=e+60|0)>>2],ar[e>>2]=o,0|n&&du(n),ie(A,t,r),0|ar[A>>2])return du(o),void(ur=f);(0|tr[(n=A+8|0)+11>>0])<0&&vu(0|ar[n>>2]),du(o)}}while(0);if(26==(0|s))return ar[n>>2]=0,ar[n+4>>2]=0,ar[n+8>>2]=0,oo(A,2,126,n),0<=(0|tr[n+11>>0])||vu(0|ar[n>>2]),void(ur=f);0|tr[r+24>>0]?(ar[b>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,oo(A,2,100,b),(0|tr[b+11>>0])<0&&vu(0|ar[b>>2])):(b=0|ar[(r=56592)+4>>2],ar[(s=A)>>2]=ar[r>>2],ar[s+4>>2]=b,yu(A+8|0,56600)),ur=f},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a,c,l=0,u=0;if(ur=(o=ur)+160|0,l=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[l>>2]=0,ar[l+4>>2]=0,ar[l+8>>2]=0,Xe(t,l),(0|tr[l+11>>0])<0&&vu(0|ar[l>>2]),LA(l,e,r),We(f,(c=(a=0|tr[(u=l+11|0)>>0])<<24>>24<0)?0|ar[l>>2]:l,c?0|ar[l+4>>2]:255&a),(0|tr[u>>0])<0&&vu(0|ar[l>>2]),0<(0|ar[r>>2]))for(l=0;We(f,18862,2),(0|(l=l+1|0))<(0|ar[r>>2]););if(We(f,19569,18),u=e+56|0,e=e+60|0,l=0|ar[u>>2],(0|ar[e>>2])!=(0|l))for(r=0;r&&(We(f,19588,1),l=0|ar[u>>2]),Pf(f,0|cr[l+r>>0]),r=r+1|0,l=0|ar[u>>2],r>>>0<((0|ar[e>>2])-l|0)>>>0;);if(We(f,30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o},function(A,e,r){A|=0,e|=0;var i,f,n,t,o=0,a=0,c=0,l=0;if(ur=(t=ur)+32|0,c=t,l=0|ar[(r|=0)+12>>2],jA(r,0|tr[e+36>>0]?12:8),f=e+56|0,255<(i=(o=0|ar[(n=e+60|0)>>2])-(a=0|ar[f>>2])|0)>>>0&&sr(55739,19104,1919,19563),(0|a)==(0|o)&&sr(55739,19104,1919,19563),JA(r,255&i),o=0|ar[f>>2],(0|ar[n>>2])!=(0|o))for(a=0;JA(r,0|tr[o+a>>0]),a=a+1|0,o=0|ar[f>>2],a>>>0<((0|ar[n>>2])-o|0)>>>0;);KA(c,e,r,l),(0|tr[(o=c+8|0)+11>>0])<0&&vu(0|ar[o>>2]),c=0|ar[(r=56592)+4>>2],ar[(l=A)>>2]=ar[r>>2],ar[l+4>>2]=c,yu(A+8|0,56600),ur=t},function(A,e,r){A|=0;var i,f,n,t,o,a=0,c=0,l=0,u=0;if(ur=(o=ur)+48|0,u=o+32|0,qA(a=(c=o)+12|0,e|=0,r|=0),(0|tr[(a=a+8|0)+11>>0])<0&&vu(0|ar[a>>2]),0|NA(r,255&(f=0|IA(r)),0))return ar[c>>2]=0,ar[c+4>>2]=0,ar[c+8>>2]=0,oo(A,2,100,c),0<=(0|tr[c+11>>0])||vu(0|ar[c>>2]),void(ur=o);if(n=e+56|0,(t=255&f)>>>0<=(c=(i=0|ar[(a=e+60|0)>>2])-(e=0|ar[n>>2])|0)>>>0?t>>>0<c>>>0&&(0|i)!=(0|(l=e+t|0))&&(ar[a>>2]=l):TA(n,t-c|0),f<<24>>24)for(a=0;l=0|IA(r),tr[(0|ar[n>>2])+a>>0]=l,(0|(a=a+1|0))!=(0|t););0|tr[r+24>>0]?(ar[u>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,oo(A,2,100,u),(0|tr[u+11>>0])<0&&vu(0|ar[u>>2])):(r=0|ar[(l=56592)+4>>2],ar[(u=A)>>2]=ar[l>>2],ar[u+4>>2]=r,yu(A+8|0,56600)),ur=o},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a=0,c=0;if(ur=(o=ur)+160|0,a=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,Xe(t,a),(0|tr[a+11>>0])<0&&vu(0|ar[a>>2]),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(f,19818,18),c=0|We(0|xf(c,0|or[e+4>>1]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,19837,26),c=0|We(0|xf(c,0|or[e+6>>1]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(c=0|We(c,19864,21),c=0|We(0|xf(c,0|or[e+8>>1]),30086,1),0<(0|ar[r>>2]))for(a=0;We(c,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(r=0|We(c,19886,17),We(0|Hf(r,0!=(0|tr[e+10>>0])),30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o},function(A,e,r){A|=0,MA(r|=0,0|or[(e|=0)+4>>1]),MA(r,0|or[e+6>>1]),MA(r,0|or[e+8>>1]),JA(r,0|tr[e+10>>0]?-128:0),e=0|ar[14149],ar[(r=A)>>2]=ar[14148],ar[r+4>>2]=e,yu(A+8|0,56600)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n,t,o,a=0;if(ur=(o=ur)+160|0,a=o+136|0,n=(f=o)+56|0,t=f+4|0,ar[f>>2]=292,ar[n>>2]=312,Jf(f+56|0,t),ar[f+128>>2]=0,ar[f+132>>2]=-1,ar[f>>2]=4304,ar[n>>2]=4324,Sf(t),ar[t>>2]=4340,ar[(i=f+36|0)>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,ar[12+i>>2]=0,ar[f+52>>2]=16,ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,Xe(t,a),(0|tr[a+11>>0])<0&&vu(0|ar[a>>2]),0<(0|ar[r>>2]))for(a=0;We(f,18862,2),(0|(a=a+1|0))<(0|ar[r>>2]););if(r=0|We(f,19675,14),We(0|Lf(r,(0|ar[e+12>>2])-(0|ar[e+8>>2])|0),30086,1),Ie(A,t),ar[f>>2]=4304,ar[n>>2]=4324,ar[t>>2]=4340,0<=(0|tr[11+i>>0]))return kf(t),Gf(),bf(n),void(ur=o);vu(0|ar[i>>2]),kf(t),Gf(),bf(n),ur=o},function(A,e,r){A|=0,zA(r|=0,(e|=0)+8|0),e=0|ar[14149],ar[(r=A)>>2]=ar[14148],ar[r+4>>2]=e,yu(A+8|0,56600)},function(A,e,r){e|=0,r|=0;var i,f,n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0;for(ur=(o=ur)+32|0,i=o+20|0,f=o+16|0,n=o+12|0,t=o,ar[(A|=0)>>2]=ar[1904],ar[A+4>>2]=ar[1905],ar[A+8>>2]=ar[1906],a=0|ar[e>>2],Wa(a=548+(a|=0)|0),Wa(a),tr[a>>0]=1,ar[r>>2]=0;;){if((ar[n>>2]=0)|Ee(0|ar[e>>2],n)){l=28;break}if(0|(m=0|Fe(0|ar[e>>2]))){for(0|(c=0|ar[r>>2])&&hl(c),l=0==(0|De(m)),Z=0|hu(80),ar[Z+4>>2]=0,ar[Z+8>>2]=0,ar[Z>>2]=6208,ar[(v=Z+12|0)>>2]=0,ar[v+4>>2]=0,ar[v+8>>2]=0,ar[v+12>>2]=0,ar[v+16>>2]=0,ar[Z+32>>2]=34395,ar[Z+36>>2]=0,ar[Z+40>>2]=0,ar[Z+44>>2]=99,ar[Z+48>>2]=99,w=Z+52|0,ar[(g=Z+72|0)>>2]=0,ar[Z+76>>2]=0,ar[w>>2]=0,ar[w+4>>2]=0,ar[w+8>>2]=0,ar[w+12>>2]=0,ar[Z+68>>2]=g,g=v,w=Z+16|0,bu(p=Z),su(Z),c=0|ar[w>>2],ar[v>>2]=g,ar[w>>2]=p,0|c&&ku(c),du(Z),yo(v,d=0|_e(m,0),s=0|Ye(m,0),l?2:0,w=0|De(m)),s=l?1:3,d=((w=0|Qe(m,0))+7|0)/8|0,b=0;;){if((0|Qe(m,b))!=(0|w)){l=10;break}if(k=0|Je(m,b,i),(0|(l=0|_e(m,b)))<1|(0|(h=0|Ye(m,b)))<1){l=12;break}if(!(0|Bo(v,c=0|ar[7628+(b<<2)>>2],l,h,w))){l=14;break}if(u=0|Fo(v,c,f),0<(0|h))for(l=0|br(l,d),c=0;hb(0|(y=u+(0|br(0|ar[f>>2],c))|0),k+(0|br(0|ar[i>>2],c))|0,0|l),(0|(c=c+1|0))!=(0|h););if((0|s)<=(0|(b=b+1|0))){l=20;break}}if(10==(0|l)?(l=0,ar[t>>2]=ar[1910],ar[t+4>>2]=ar[1911],ar[t+8>>2]=ar[1912]):12==(0|l)?(ar[t>>2]=ar[1913],ar[t+4>>2]=ar[1914],ar[t+8>>2]=ar[1915],l=18):14==(0|l)?(ar[t>>2]=ar[1916],ar[t+4>>2]=ar[1917],ar[t+8>>2]=ar[1918],l=18):20==(0|l)&&(c=(l=0)|hu(8),ar[c>>2]=0,ar[(y=c+4|0)>>2]=0,ar[r>>2]=c,bu(Z),ar[c>>2]=g,c=0|ar[y>>2],ar[y>>2]=p,0|c&&du(c),ar[t>>2]=ar[1904],ar[t+4>>2]=ar[1905],ar[t+8>>2]=ar[1906]),du(Z),ar[A>>2]=ar[t>>2],ar[A+4>>2]=ar[t+4>>2],ar[A+8>>2]=ar[t+8>>2],0|ar[A>>2]){l=28;break}c=0|hu(24),ar[c+4>>2]=0,ar[c+8>>2]=0,ar[c>>2]=6064,ar[(l=c+12|0)>>2]=6092,or[c+16>>1]=0,or[c+18>>1]=0,or[c+20>>1]=0,tr[c+22>>0]=1,jt(l),y=0|ar[ar[r>>2]>>2],bu(c),bu(c),ar[y+40>>2]=l,l=0|ar[(y=y+44|0)>>2],ar[y>>2]=c,0|l&&du(l),du(c),Re(0|ar[e>>2]),du(c)}if(!(0|ar[n>>2])){l=28;break}}28!=(0|l)||(ur=o)},function(A,e,r){A|=0,0|(A=0|ar[(e|=0)+4>>2])&&Bc(A),0|(A=0|ar[e+8>>2])&&Bc(A),(A=0|ar[e+12>>2])&&Bc(A)},function(A,e,r){var i,f,n,t;A|=0,e|=0,ur=(i=ur)+32|0,f=i,t=(n=0|tr[(r|=0)+11>>0])<<24>>24<0,function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0;ur=(a=ur)+32|0,o=a,u=0|hu(132),ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u>>2]=6364,co(c=u+12|0),ar[(n=e+60|0)>>2]=c,t=0|ar[(l=e+64|0)>>2],ar[l>>2]=u,t&&(du(t),c=0|ar[n>>2]);if(ko(o,c,r,i,f),0|ar[o>>2])return u=0|ar[(f=o)+4>>2],ar[(l=A)>>2]=ar[f>>2],ar[l+4>>2]=u,u=o+8|0,ar[(l=A+8|0)>>2]=ar[u>>2],ar[l+4>>2]=ar[u+4>>2],ar[l+8>>2]=ar[u+8>>2],ar[u>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,ur=a;if(function(A,e){A|=0;var r,i,f,n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I,C,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0,fA=0,nA=0,tA=0,oA=0,aA=0,cA=0,lA=0,uA=0,bA=0,sA=0,dA=0,kA=0,hA=0,wA=0,vA=0,mA=0,gA=0,ZA=0,pA=0,yA=0,BA=0,EA=0,XA=0,WA=0,IA=0,CA=0,GA=0,VA=0,FA=0,RA=0,NA=0,_A=0,YA=0,QA=0,DA=0,JA=0,MA=0,TA=0,UA=0,SA=0,OA=0,zA=0,jA=0,HA=0,xA=0,PA=0,LA=0,KA=0,qA=0,$A=0,Ae=0,ee=0,re=0,ie=0,fe=0,ne=0,te=0,oe=0,ae=0,ce=0,le=0,ue=0,be=0,se=0,de=0,ke=0,he=0,we=0,ve=0,me=0,ge=0,Ze=0,pe=0,ye=0,Be=0,Ee=0;if(ur=(C=ur)+656|0,y=C+640|0,I=C+616|0,q=C+628|0,ye=C+604|0,Be=C+144|0,lA=(Ee=C)+592|0,uA=C+584|0,r=C+572|0,i=C+560|0,f=C+548|0,n=C+536|0,t=C+384|0,p=C+392|0,o=C+372|0,a=C+348|0,c=C+360|0,l=C+328|0,u=C+316|0,b=C+304|0,s=C+292|0,d=C+280|0,k=C+268|0,h=C+256|0,w=C+248|0,de=C+240|0,v=C+232|0,m=C+216|0,Ze=C+208|0,pe=C+200|0,B=C+188|0,E=C+176|0,X=C+168|0,vl(ge=28+(e|=0)|0,0|ar[(W=e+32|0)>>2]),ar[(P=e+36|0)>>2]=0,ar[ge>>2]=W,ar[W>>2]=0,F=0|ar[(L=e+40|0)>>2],(0|(G=0|ar[(K=e+44|0)>>2]))!=(0|F))for(;V=G+-8|0,ar[K>>2]=V,G=(G=0|ar[G+-4>>2])?(du(G),0|ar[K>>2]):V,(0|G)!=(0|F););ar[(H=e+52|0)>>2]=0,G=0|ar[(x=e+56|0)>>2],ar[x>>2]=0,0|G&&du(G);if(function(A,e){e|=0;var r,i,f,n,t,o=0,a=0,c=0;if(ur=(t=ur)+16|0,f=t,ar[(A|=0)>>2]=0,ar[(n=A+4|0)>>2]=0,((ar[A+8>>2]=0)|(o=0|ar[e+108>>2]))!=(0|(r=e+112|0))){for(i=A+8|0,c=o,a=o=0;;){if(e=0|ar[56+(0|ar[c+20>>2])>>2],ar[f>>2]=e,o>>>0<a>>>0?(ar[o>>2]=e,ar[n>>2]=o+4):Ce(A,f),e=0|ar[c+4>>2])for(;o=0|ar[e>>2];)e=o;else if(e=0|ar[(o=c+8|0)>>2],(0|ar[e>>2])!=(0|c))for(;c=0|ar[o>>2],e=0|ar[(o=c+8|0)>>2],(0|ar[e>>2])!=(0|c););if((0|e)==(0|r))break;c=e,o=0|ar[n>>2],a=0|ar[i>>2]}ur=t}else ur=t}(I,0|ar[(g=e+60|0)>>2]),G=0|ar[I>>2],M=0|ar[(Z=4+I|0)>>2],(0|G)!=(0|M)){T=11+y|0,O=U=4+y|0,z=(S=e)+32|0,j=e+48|0;do{J=0|ar[G>>2],N=112+(0|ar[g>>2])|0,F=0|ar[N>>2];do{if(0|F){V=N;A:for(;;){for(R=F;!((0|ar[R+16>>2])>>>0>=J>>>0);){if(!(F=0|ar[R+4>>2]))break A;R=F}if(!(F=0|ar[R>>2])){V=R;break}V=R}if((0|V)!=(0|N)&&(0|ar[V+16>>2])>>>0<=J>>>0){if(F=0|ar[V+20>>2],V=0|ar[V+24>>2],D=V?(bu(V),V):0,!(Q=F)){if(!D)break;du(D);break}yu(y,Q+64|0),F=0|tr[T>>0],V=0|ar[U>>2],4==(0|(F<<24>>24<0?V:255&F))?0|Yu(y,0,-1,30298,4)?(F=0|tr[T>>0],V=0|ar[U>>2],me=23):V=1:me=23;do{if(23==(0|me)){if(4==((me=0)|(F<<24>>24<0?V:255&F))){if(!(0|Yu(y,0,-1,30303,4))){V=1;break}F=0|tr[T>>0],V=0|ar[U>>2]}if(4==(0|(F<<24>>24<0?V:255&F))){if(!(0|Yu(y,0,-1,30308,4))){V=1;break}F=0|tr[T>>0],V=0|ar[U>>2]}if(4==(0|(F<<24>>24<0?V:255&F))){if(!(0|Yu(y,0,-1,30313,4))){V=1;break}F=0|tr[T>>0],V=0|ar[U>>2]}V=4==(0|(F<<24>>24<0?V:255&F))?0==(0|Yu(y,0,-1,30318,4)):0}}while(0);if((0|tr[T>>0])<0&&vu(0|ar[y>>2]),V){for(Y=0|hu(232),ar[Y+4>>2]=0,ar[Y+8>>2]=0,ar[Y>>2]=6392,ar[(V=Y+16|0)>>2]=0,ar[V+4>>2]=0,ar[V+8>>2]=0,ar[Y+28>>2]=30025,ar[Y+32>>2]=S,ar[Y+36>>2]=J,ve=Y+60|0,rA=Y+80|0,iA=Y+96|0,F=Y+176|0,R=Y+112|0,ar[(we=Y+40|0)>>2]=0,ar[we+4>>2]=0,ar[we+8>>2]=0,ar[we+12>>2]=0,or[we+16>>1]=0,ar[ve>>2]=0,ar[ve+4>>2]=0,ar[ve+8>>2]=0,ar[ve+12>>2]=0,or[ve+16>>1]=0,ar[rA>>2]=0,ar[rA+4>>2]=0,ar[rA+8>>2]=0,tr[rA+12>>0]=0,ar[iA>>2]=0,ar[iA+4>>2]=0,ar[iA+8>>2]=0,tr[iA+12>>0]=0,rA=(iA=R)+60|0;((ar[iA>>2]=0)|(iA=iA+4|0))<(0|rA););for(tr[R+60>>0]=0,rA=(iA=F)+52|0;((ar[iA>>2]=0)|(iA=iA+4|0))<(0|rA););ar[y>>2]=V,ar[O>>2]=Y,N=V,bu(_=Y),V=0|ar[W>>2];do{if(V){for(R=z;;)if(F=0|ar[V+16>>2],J>>>0<F>>>0){if(!(F=0|ar[V>>2])){me=41;break}R=V,V=F}else{if(J>>>0<=F>>>0){me=45;break}if(!(F=0|ar[(R=V+4|0)>>2])){me=44;break}V=F}if(41==(0|me)){me=0,R=F=V;break}if(44==(0|me)){me=0,F=V;break}if(45==(0|me)){me=0,F=V;break}}else R=F=W}while(0);0|ar[R>>2]?du(Y):(V=0|hu(28),ar[V+16>>2]=J,ar[V+20>>2]=N,ar[V+24>>2]=_,ar[V>>2]=0,ar[V+4>>2]=0,ar[V+8>>2]=F,ar[R>>2]=V,(F=0|ar[ar[ge>>2]>>2])&&(ar[ge>>2]=F,V=0|ar[R>>2]),so(0|ar[z>>2],V),ar[P>>2]=1+(0|ar[P>>2]));do{if(!(0|tr[Q+124>>0])){do{if((0|J)==(0|ar[56+(0|ar[84+(0|ar[g>>2])>>2])>>2])){if(V=0|ar[y>>2],tr[V+40>>0]=1,0|(F=0|ar[O>>2])&&bu(F),ar[H>>2]=V,V=0|ar[x>>2],ar[x>>2]=F,!V)break;du(V)}}while(0);if((0|(V=0|ar[K>>2]))==(0|ar[j>>2])){kl(L,y);break}ar[V>>2]=ar[y>>2],F=0|ar[O>>2],(ar[V+4>>2]=F)&&(bu(F),V=0|ar[K>>2]),ar[K>>2]=V+8}}while(0);0|(V=0|ar[O>>2])&&du(V)}0|D&&du(D)}}}while(0);G=G+4|0}while((0|G)!=(0|M))}A:do{if(0|ar[H>>2]){if((0|(G=0|ar[ge>>2]))!=(0|W))for(M=ye+4|0,T=ye+8|0,U=uA+4|0,S=e+72|0,j=Ee+12|0,H=Ee+4|0,x=O=Ee+64|0,P=Ee+136|0,L=Ee+140|0,q=Ee+60|0,$=11+y|0,AA=z=Ee+8|0,eA=e+76|0,rA=lA+11|0,iA=(K=Ee+44|0)+11|0,nA=(fA=Be+8|0)+11|0,tA=A+8|0,J=G;;){if(Q=J+20|0,ar[ye>>2]=0,ar[M>>2]=0,ar[T>>2]=0,vo(Be,0|ar[g>>2],0|ar[J+16>>2],ye),0|ar[Be>>2])ve=0|ar[(we=Be)+4>>2],ar[(G=A)>>2]=ar[we>>2],ar[G+4>>2]=ve,ar[tA>>2]=ar[fA>>2],ar[tA+4>>2]=ar[fA+4>>2],ar[tA+8>>2]=ar[fA+8>>2],ar[fA>>2]=0,ar[fA+4>>2]=0,ar[fA+8>>2]=0,G=1;else{G=0|ar[ye>>2],D=0|ar[M>>2];e:do{if((0|G)==(0|D))G=6;else for(N=0;;){V=0|ar[(_=G+4|0)>>2];do{if(0!=(0|V)&&0!=(0|(oA=0|qu(V,128,872,0)))){if((V=0|ar[G+8>>2])?bu(V):V=0,F=0|ar[oA+56>>2],R=0|ar[oA+60>>2],F>>>0<=(0|ar[S>>2])>>>0&&R>>>0<=(0|ar[eA>>2])>>>0){Y=0|ar[Q>>2],ar[Y+24>>2]=F,ar[Y+28>>2]=R,ar[Y+32>>2]=F,ar[Y+36>>2]=R,Y=V,me=94;break}ar[z>>2]=4524,ar[Ee>>2]=188,ar[O>>2]=208,ar[H>>2]=0,Jf(x,j),ar[P>>2]=0,ar[L>>2]=-1,ar[Ee>>2]=4504,ar[O>>2]=4544,ar[z>>2]=4524,Sf(j),ar[j>>2]=4340,ar[K>>2]=0,ar[K+4>>2]=0,ar[K+8>>2]=0,ar[K+12>>2]=0,ar[q>>2]=24,ar[y>>2]=0,ar[4+y>>2]=0,ar[8+y>>2]=0,Xe(j,y),(0|tr[$>>0])<0&&vu(0|ar[y>>2]),ve=0|We(0|Lf(0|We(0|Lf(0|We(AA,30366,11),F),30170,1),R),30378,32),ve=0|We(0|Lf(ve,0|ar[S>>2]),30170,1),We(0|Lf(ve,0|ar[eA>>2]),30086,1),Ie(lA,j),oo(A,6,1e3,lA),(0|tr[rA>>0])<0&&vu(0|ar[lA>>2]),ar[Ee>>2]=4504,ar[O>>2]=4544,ar[AA>>2]=4524,ar[j>>2]=4340,(0|tr[iA>>0])<0&&vu(0|ar[K>>2]),kf(j),bf(O),R=1,F=N}else me=83}while(0);if(83==(0|me)&&(me=N?(Y=0,94):(Y=F=0,109)),94==(0|me))if(V=(me=0)|ar[_>>2]){F=(F=0|qu(V,128,744,0))?((V=0|ar[G+8>>2])?bu(V):V=0,me=0|ar[Q>>2],ve=0|eo(F),F=0|ro(F),ar[me+24>>2]=ve,ar[me+28>>2]=F,V):0,V=0|ar[_>>2];do{if(0|V&&0|(aA=0|qu(V,128,808,0))){switch((V=0|ar[G+8>>2])?bu(V):V=0,0|ar[aA+56>>2]){case 270:case 90:we=0|ar[Q>>2],me=we+28|0,ve=0|ar[(we=we+24|0)>>2],ar[we>>2]=ar[me>>2],ar[me>>2]=ve}if(!V)break;du(V)}}while(0);me=(F=(F&&du(F),1),109)}else R=0,F=1,V=Y;do{if(109==(0|me))if((me=0)!=(0|(V=0|ar[_>>2]))&&0!=(0|(cA=0|qu(V,128,384,0)))){if((V=0|ar[G+8>>2])?bu(V):V=0,R=0|ar[cA+56>>2],N=0|ar[cA+60>>2],Zl(R=((_=0==(0|N))?(ve=0|ar[Q>>2],ar[uA>>2]=R,ar[U>>2]=0):(bu(N),ve=0|ar[Q>>2],ar[uA>>2]=R,bu(ar[U>>2]=N)),ve),uA),0|(R=0|ar[U>>2])&&du(R),_||du(N),!V){R=0,V=Y;break}du(V),R=0,V=Y}else R=0,V=Y}while(0);if(0|V&&du(V),G=G+12|0,0|R){G=1;break e}if((0|G)==(0|D)){G=6;break}N=F}}while(0);G=6==(0|G)?0:G,(0|tr[nA>>0])<0&&vu(0|ar[fA>>2])}if(0|(V=0|ar[ye>>2])){if((0|(F=0|ar[M>>2]))!=(0|V)){for(;R=F+-12|0,ar[M>>2]=R,(0|(F=(F=0|ar[F+-4>>2])?(du(F),0|ar[M>>2]):R))!=(0|V););V=0|ar[ye>>2]}vu(V)}if(0|G)break A;if(G=0|ar[J+4>>2])for(;V=0|ar[G>>2];)G=V;else if(G=0|ar[(V=J+8|0)>>2],(0|ar[G>>2])!=(0|J))for(;ve=0|ar[V>>2],G=0|ar[(V=ve+8|0)>>2],(0|ar[G>>2])!=(0|ve););if((0|G)==(0|W))break;J=G}we=0|ar[g>>2],ke=0|ar[we+76>>2],we=0|ar[we+80>>2],(ve=0==(0|we))||bu(we),he=0!=(0|ke);e:do{if(he&&(bA=0|ar[ge>>2],(0|bA)!=(0|W))){S=ye+4|0,z=8+i|0,j=4+i|0,H=11+i|0,x=8+n|0,P=4+n|0,L=11+n|0,K=4+t|0,q=8+f|0,$=4+f|0,AA=11+f|0,fA=8+r|0,nA=4+r|0,tA=11+r|0,oA=Be+4|0,aA=Be+8|0,uA=12+p|0,dA=cA=64+p|0,kA=136+p|0,hA=140+p|0,vA=60+p|0,mA=11+y|0,ZA=11+o|0,pA=(wA=44+p|0)+11|0,yA=O=4+y|0,XA=8+u|0,WA=4+u|0,IA=11+u|0,CA=8+b|0,GA=4+b|0,VA=11+b|0,NA=8+s|0,_A=4+s|0,YA=11+s|0,QA=8+d|0,DA=4+d|0,JA=11+d|0,MA=RA=EA=sA=4+p|0,SA=8+c|0,zA=(OA=8+l|0)+11|0,jA=TA=gA=lA=8+p|0,HA=FA=BA=11+p|0,xA=8+k|0,PA=4+k|0,LA=11+k|0,KA=8+h|0,qA=4+h|0,$A=11+h|0,Ae=4+w|0,ee=de+4|0,fe=re=11+c|0,ne=ie=UA=4+c|0,te=11+l|0,oe=4+l|0,ae=8+a|0,ce=4+a|0,le=11+a|0,be=(ue=Ee+8|0)+11|0,se=A+8|0;r:for(;;){if(io(ye,ke,0|ar[20+(0|ar[(M=bA+20|0)>>2])>>2]),V=0|ar[ye>>2],T=0|ar[S>>2],(0|V)==(0|T))G=10;else{U=bA+24|0;i:for(;;){G=0|ar[V+20>>2];f:do{if((0|G)<1953000802){switch(0|G){case 1635088492:break;default:break f}if(ar[Be>>2]=0,ar[oA>>2]=0,ar[aA>>2]=0,vo(Ee,0|ar[g>>2],0|ar[20+(0|ar[M>>2])>>2],Be),0|ar[Ee>>2])iA=0|ar[(rA=Ee)+4>>2],ar[(G=A)>>2]=ar[rA>>2],ar[G+4>>2]=iA,ar[se>>2]=ar[ue>>2],ar[se+4>>2]=ar[ue+4>>2],ar[se+8>>2]=ar[ue+8>>2],ar[ue>>2]=0,ar[ue+4>>2]=0,ar[ue+8>>2]=0,G=1;else{G=0|ar[Be>>2],Q=0|ar[oA>>2];do{if((0|G)==(0|Q))F=0,me=197;else{for(F=Y=0;;){R=0|ar[G+4>>2];do{if(R){if(!(_=0|qu(R,128,840,0))){R=Y;break}R=_,(N=0|ar[G+8>>2])?bu(N):N=0;do{if(_){if(0|(_=N)&&bu(N),!F){F=_;break}du(F),F=_}else R=Y}while(0);if(!N)break;du(N)}else R=Y}while(0);if((0|(G=G+12|0))==(0|Q))break;Y=R}if(!(D=R)){me=197;break}Ge(y,V+52|0);n:do{if(4==((0|ar[yA>>2])-(0|ar[y>>2])|0)){yu(p,J=D+56|0),25==(0|((iA=0|tr[BA>>0])<<24>>24<0?0|ar[EA>>2]:255&iA))&&0==(0|Yu(p,0,-1,30621,25))?G=1:(yu(c,J),26==(0|((iA=0|tr[fe>>0])<<24>>24<0?0|ar[ne>>2]:255&iA))&&0==(0|Yu(c,0,-1,30647,26))?G=1:(yu(l,J),43==(0|((R=0|tr[te>>0])<<24>>24<0?0|ar[oe>>2]:255&R))?(G=0==(0|Yu(l,0,-1,30674,43)),R=0|tr[te>>0]):G=0,R<<24>>24<0&&vu(0|ar[l>>2])),(0|tr[fe>>0])<0&&vu(0|ar[c>>2])),(0|tr[BA>>0])<0&&vu(0|ar[p>>2]);t:do{if(G){R=0|ar[W>>2];do{if(0|R){_=0|ar[ar[y>>2]>>2],G=W;o:for(;;){for(N=R;!((0|ar[N+16>>2])>>>0>=_>>>0);){if(!(R=0|ar[N+4>>2]))break o;N=R}if(!(R=0|ar[N>>2])){G=N;break}G=N}if((0|G)==(0|W))break;if(_>>>0<(0|ar[G+16>>2])>>>0)break;_=0|ar[G+20>>2],Y=0|ar[G+24>>2],(Q=0==(0|Y))||bu(Y),G=0|ar[M>>2],R=G;do{if((0|G)==(0|_)){for(ar[b>>2]=0,ar[4+b>>2]=0,ar[8+b>>2]=0,G=0|hu(32),ar[b>>2]=G,ar[CA>>2]=-2147483616,ar[GA>>2]=30,eA=30754,rA=(iA=G)+30|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+30>>0]=0,oo(A,2,2e3,b),0<=(0|tr[VA>>0])){G=1;break}vu(0|ar[b>>2]),G=1}else{if((0|ar[G+24>>2])!=(0|ar[_+24>>2])){G=0;break}if((0|ar[G+28>>2])!=(0|ar[_+28>>2])){G=0;break}if(N=0|ar[ar[y>>2]>>2],tr[G+60>>0]=1,ar[G+64>>2]=N,tr[G+61>>0]=1,0|(N=0|ar[U>>2])&&bu(N),ar[_+68>>2]=R,G=0|ar[(iA=_+72|0)>>2],ar[iA>>2]=N,!G){G=0;break}du(G),G=0}}while(0);if(Q||du(Y),G){G=1;break n}break t}}while(0);for(ar[u>>2]=0,ar[4+u>>2]=0,ar[8+u>>2]=0,G=0|hu(48),ar[u>>2]=G,ar[XA>>2]=-2147483600,ar[WA>>2]=35,eA=30718,rA=(iA=G)+35|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+35>>0]=0,oo(A,2,2e3,u),0<=(0|tr[IA>>0])){G=1;break n}vu(0|ar[u>>2]),G=1;break n}}while(0);yu(p,J),26==(0|((iA=0|tr[FA>>0])<<24>>24<0?0|ar[RA>>2]:255&iA))&&0==(0|Yu(p,0,-1,30785,26))?G=1:(yu(c,J),43==(0|((R=0|tr[re>>0])<<24>>24<0?0|ar[ie>>2]:255&R))?(G=0==(0|Yu(c,0,-1,30812,43)),R=0|tr[re>>0]):G=0,R<<24>>24<0&&vu(0|ar[c>>2])),(0|tr[FA>>0])<0&&vu(0|ar[p>>2]);t:do{if(G){Y=0|ar[M>>2],G=0|ar[y>>2],N=0|ar[G>>2],tr[Y+76>>0]=1,ar[Y+80>>2]=N,N=0|ar[W>>2],Q=Y;do{if(0|N){_=0|ar[G>>2],G=W;o:for(;;){for(R=N;!((0|ar[R+16>>2])>>>0>=_>>>0);)if(!(R=0|ar[R+4>>2]))break o;if(!(N=0|ar[R>>2])){G=R;break}G=R}if((0|G)==(0|W))break;if(_>>>0<(0|ar[G+16>>2])>>>0)break;if(G=0|ar[G+20>>2],(0|Y)==(0|G)){for(ar[d>>2]=0,ar[4+d>>2]=0,ar[8+d>>2]=0,G=0|hu(32),ar[d>>2]=G,ar[QA>>2]=-2147483616,ar[DA>>2]=30,eA=30892,rA=(iA=G)+30|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+30>>0]=0,oo(A,2,2e3,d),0<=(0|tr[JA>>0])){G=1;break n}vu(0|ar[d>>2]),G=1;break n}if(0|(R=0|ar[U>>2])&&bu(R),ar[G+84>>2]=Q,G=0|ar[(iA=G+88|0)>>2],ar[iA>>2]=R,0|G&&du(G),ar[p>>2]=0,ar[MA>>2]=0,ar[TA>>2]=0,R=0|ar[D+68>>2],0|(G=(0|ar[D+72>>2])-R|0)){if((0|G)<0)break r;rA=0|hu(G),ar[MA>>2]=rA,ar[p>>2]=rA,iA=rA+G|0,ar[jA>>2]=iA,hb(0|rA,0|R,0|G),ar[MA>>2]=iA}if(ar[c>>2]=0,ar[UA>>2]=0,ar[SA>>2]=0,Vl(l,p,c),G=0|ar[c>>2],_=0|ar[UA>>2],(0|G)!=(0|_))do{R=0|ar[G>>2];do{if(0|R){if(!(N=0|qu(R,1472,1480,0)))break;for((R=0|ar[G+4>>2])?bu(R):R=0,iA=0|ar[M>>2],tr[iA+92>>0]=1,eA=N+8|0,rA=(iA=iA+96|0)+56|0;ar[iA>>2]=ar[eA>>2],eA=eA+4|0,(0|(iA=iA+4|0))<(0|rA););if(!R)break;du(R)}}while(0);G=G+8|0}while((0|G)!=(0|_));if((0|tr[zA>>0])<0&&vu(0|ar[OA>>2]),0|(G=0|ar[c>>2])){if((0|(R=0|ar[UA>>2]))!=(0|G)){for(;N=R+-8|0,ar[UA>>2]=N,(0|(R=(R=0|ar[R+-4>>2])?(du(R),0|ar[UA>>2]):N))!=(0|G););G=0|ar[c>>2]}vu(G)}0|(G=0|ar[p>>2])&&((0|ar[MA>>2])!=(0|G)&&(ar[MA>>2]=G),vu(G));break t}}while(0);for(ar[s>>2]=0,ar[4+s>>2]=0,ar[8+s>>2]=0,G=0|hu(48),ar[s>>2]=G,ar[NA>>2]=-2147483600,ar[_A>>2]=35,eA=30856,rA=(iA=G)+35|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+35>>0]=0,oo(A,2,2e3,s),0<=(0|tr[YA>>0])){G=1;break n}vu(0|ar[s>>2]),G=1;break n}}while(0);iA=0|ar[M>>2],rA=0|ar[ar[y>>2]>>2],yu(p,J),tr[iA+156>>0]=1,ar[iA+152>>2]=rA,Eu(iA+160|0,p),(0|tr[HA>>0])<0&&vu(0|ar[p>>2]),R=0|ar[W>>2];do{if(0|R){_=0|ar[ar[y>>2]>>2],G=W;t:for(;;){for(N=R;!((0|ar[N+16>>2])>>>0>=_>>>0);){if(!(R=0|ar[N+4>>2]))break t;N=R}if(!(R=0|ar[N>>2])){G=N;break}G=N}if((0|G)==(0|W))break;if(_>>>0<(0|ar[G+16>>2])>>>0)break;if(R=0|ar[M>>2],N=0|ar[G+20>>2],(0|R)==(0|N)){for(ar[h>>2]=0,ar[4+h>>2]=0,ar[8+h>>2]=0,G=0|hu(32),ar[h>>2]=G,ar[KA>>2]=-2147483616,ar[qA>>2]=28,eA=30957,rA=(iA=G)+28|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+28>>0]=0,oo(A,2,2e3,h),0<=(0|tr[$A>>0])){G=1;break n}vu(0|ar[h>>2]),G=1;break n}ar[w>>2]=R,G=0|ar[U>>2],0|(ar[Ae>>2]=G)&&bu(G),R=0|ar[(G=N+176|0)>>2];do{if(R>>>0<(0|ar[N+180>>2])>>>0)ar[R>>2]=ar[w>>2],ar[R+4>>2]=ar[Ae>>2],ar[w>>2]=0,ar[Ae>>2]=0,ar[G>>2]=R+8;else{if(yl(N+172|0,w),!(G=0|ar[Ae>>2]))break;du(G)}}while(0);if(ar[de>>2]=ar[M>>2],G=0|ar[U>>2],ar[ee>>2]=G){bu(G),pl(e,de),du(G),G=0;break n}pl(e,de),G=0;break n}}while(0);for(ar[k>>2]=0,ar[4+k>>2]=0,ar[8+k>>2]=0,G=0|hu(48),ar[k>>2]=G,ar[xA>>2]=-2147483600,ar[PA>>2]=33,eA=30923,rA=(iA=G)+33|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+33>>0]=0,oo(A,2,2e3,k),0<=(0|tr[LA>>0])){G=1;break}vu(0|ar[k>>2]),G=1}else{for(ar[a>>2]=0,ar[4+a>>2]=0,ar[8+a>>2]=0,G=0|hu(48),ar[a>>2]=G,ar[ae>>2]=-2147483600,ar[ce>>2]=35,eA=30585,rA=(iA=G)+35|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+35>>0]=0,oo(A,2,0,a),0<=(0|tr[le>>0])){G=1;break}vu(0|ar[a>>2]),G=1}}while(0);0|(R=0|ar[y>>2])&&((0|(N=0|ar[yA>>2]))!=(0|R)&&(ar[yA>>2]=N+(~((N+-4-R|0)>>>2)<<2)),vu(R))}}while(0);197==(0|me)&&(me=0,ar[lA>>2]=4524,ar[p>>2]=188,ar[cA>>2]=208,ar[sA>>2]=0,Jf(dA,uA),ar[kA>>2]=0,ar[hA>>2]=-1,ar[p>>2]=4504,ar[cA>>2]=4544,ar[lA>>2]=4524,Sf(uA),ar[uA>>2]=4340,ar[wA>>2]=0,ar[wA+4>>2]=0,ar[wA+8>>2]=0,ar[wA+12>>2]=0,ar[vA>>2]=24,ar[y>>2]=0,ar[4+y>>2]=0,ar[8+y>>2]=0,Xe(uA,y),(0|tr[mA>>0])<0&&vu(0|ar[y>>2]),Lf(iA=0|We(gA,30557,27),0|ar[20+(0|ar[M>>2])>>2]),Ie(o,uA),oo(A,2,123,o),(0|tr[ZA>>0])<0&&vu(0|ar[o>>2]),ar[p>>2]=4504,ar[cA>>2]=4544,ar[gA>>2]=4524,ar[uA>>2]=4340,(0|tr[pA>>0])<0&&vu(0|ar[wA>>2]),kf(uA),bf(cA),G=1),F&&du(F)}if((0|tr[be>>0])<0&&vu(0|ar[ue>>2]),0|(F=0|ar[Be>>2])){if((0|(R=0|ar[oA>>2]))!=(0|F)){for(;N=R+-12|0,ar[oA>>2]=N,(0|(R=(R=0|ar[R+-4>>2])?(du(R),0|ar[oA>>2]):N))!=(0|F););F=0|ar[Be>>2]}vu(F)}if(0|G)break i}else{switch(0|G){case 1953000802:break;default:break f}Ge(y,V+52|0),iA=0|ar[y>>2],G=iA;n:do{if(4==((0|ar[O>>2])-iA|0)){_=0|ar[M>>2],R=0|ar[G>>2],tr[_+41>>0]=1,ar[_+44>>2]=R,R=0|ar[W>>2],Y=_;do{if(0|R){N=0|ar[G>>2],G=W;t:for(;;){for(F=R;!((0|ar[F+16>>2])>>>0>=N>>>0);)if(!(F=0|ar[F+4>>2]))break t;if(!(R=0|ar[F>>2])){G=F;break}G=F}if((0|G)==(0|W))break;if(N>>>0<(0|ar[G+16>>2])>>>0)break;if(F=0|ar[G+20>>2],0|tr[F+41>>0]){for(ar[f>>2]=0,ar[4+f>>2]=0,ar[8+f>>2]=0,G=0|hu(48),ar[f>>2]=G,ar[q>>2]=-2147483600,ar[$>>2]=38,eA=30483,rA=(iA=G)+38|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+38>>0]=0,oo(A,2,2e3,f),0<=(0|tr[AA>>0])){G=1;break n}vu(0|ar[f>>2]),G=1;break n}if((0|_)==(0|F)){for(ar[n>>2]=0,ar[4+n>>2]=0,ar[8+n>>2]=0,G=0|hu(48),ar[n>>2]=G,ar[x>>2]=-2147483600,ar[P>>2]=34,eA=30522,rA=(iA=G)+34|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+34>>0]=0,oo(A,2,2e3,n),0<=(0|tr[L>>0])){G=1;break n}vu(0|ar[n>>2]),G=1;break n}if((0|(G=0|ar[(R=F+52|0)>>2]))==(0|ar[F+56>>2])?kl(F+48|0,M):(ar[G>>2]=Y,F=0|ar[U>>2],(ar[G+4>>2]=F)&&(bu(F),G=0|ar[R>>2]),ar[R>>2]=G+8),ar[t>>2]=ar[M>>2],G=0|ar[U>>2],ar[K>>2]=G){bu(G),pl(e,t),du(G),G=0;break n}pl(e,t),G=0;break n}}while(0);for(ar[i>>2]=0,ar[4+i>>2]=0,ar[8+i>>2]=0,G=0|hu(48),ar[i>>2]=G,ar[z>>2]=-2147483600,ar[j>>2]=41,eA=30441,rA=(iA=G)+41|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););tr[G+41>>0]=0,oo(A,2,2e3,i),G=((0|tr[H>>0])<0&&vu(0|ar[i>>2]),1)}else{for(ar[r>>2]=0,ar[4+r>>2]=0,ar[8+r>>2]=0,G=0|hu(32),ar[r>>2]=G,ar[fA>>2]=-2147483616,ar[nA>>2]=29,eA=30411,rA=(iA=G)+29|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););tr[G+29>>0]=0,oo(A,2,0,r),G=((0|tr[tA>>0])<0&&vu(0|ar[r>>2]),1)}}while(0);if(0|(F=0|ar[y>>2])&&((0|(R=0|ar[O>>2]))!=(0|F)&&(ar[O>>2]=R+(~((R+-4-F|0)>>>2)<<2)),vu(F)),0|G){G=1;break i}}}while(0);if((0|(V=V+64|0))==(0|T)){G=10;break}}V=0|ar[ye>>2]}if(Y=10==(0|G)?0:G,0|V){if((0|(G=0|ar[S>>2]))==(0|V))G=V;else{for(;F=G+-64|0,ar[S>>2]=F,0|(R=0|ar[G+-12>>2])&&((0|(_=0|ar[(N=G+-8|0)>>2]))!=(0|R)&&(ar[N>>2]=_+(~((_+-4-R|0)>>>2)<<2)),vu(R)),ar[F>>2]=4264,0|(F=0|ar[G+-40>>2])&&((0|ar[(G=G+-36|0)>>2])!=(0|F)&&(ar[G>>2]=F),vu(F)),(0|(G=0|ar[S>>2]))!=(0|V););G=0|ar[ye>>2]}vu(G)}switch(0|Y){case 8:me=362;break e;case 0:break;default:break e}if(G=0|ar[bA+4>>2])for(;V=0|ar[G>>2];)G=V;else if(G=0|ar[(V=bA+8|0)>>2],(0|ar[G>>2])!=(0|bA))for(;bA=0|ar[V>>2],G=0|ar[(V=bA+8|0)>>2],(0|ar[G>>2])!=(0|bA););if((0|G)==(0|W)){me=362;break e}bA=G}zl()}else me=362}while(0);e:do{if(362==(0|me)){G=0|ar[ge>>2];r:do{if((0|G)!=(0|W)){for(Q=11+y|0,J=D=4+y|0,M=4+v|0,T=8+m|0,U=4+m|0,S=11+m|0,Y=G;;){if(R=0|ar[20+(0|ar[(_=Y+20|0)>>2])>>2],N=112+(0|ar[g>>2])|0,G=0|ar[N>>2]){V=N;i:for(;;){for(F=G;!((0|ar[F+16>>2])>>>0>=R>>>0);){if(!(G=0|ar[F+4>>2]))break i;F=G}if(!(G=0|ar[F>>2])){V=F;break}V=F}N=(0|V)!=(0|N)&&(0|ar[V+16>>2])>>>0<=R>>>0?(G=0|ar[V+20>>2],(V=0|ar[V+24>>2])?(bu(V),V):0):G=0}else N=G=0;if(yu(y,G+64|0),4==(0|((G=0|tr[Q>>0])<<24>>24<0?0|ar[D>>2]:255&G))?(V=0==(0|Yu(y,0,-1,30298,4)),G=0|tr[Q>>0]):V=0,G<<24>>24<0&&vu(0|ar[y>>2]),V){G=0|ar[g>>2],ar[y>>2]=ar[G+52>>2],V=0|ar[G+56>>2],(ar[J>>2]=V)&&(bu(V),G=0|ar[g>>2]),V=0|ar[G+44>>2],F=0|ar[G+48>>2],(R=0==(0|F))||bu(F),Lt(v,V,0|ar[20+(0|ar[_>>2])>>2],y,1752589123),G=0==(0|ar[v>>2]),0|(V=0|ar[M>>2])&&du(V);do{if(G){for(ar[m>>2]=0,ar[4+m>>2]=0,ar[8+m>>2]=0,G=0|hu(48),ar[m>>2]=G,ar[T>>2]=-2147483600,ar[U>>2]=35,eA=30986,rA=(iA=G)+35|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[G+35>>0]=0,oo(A,2,106,m),0<=(0|tr[S>>0])){G=1;break}vu(0|ar[m>>2]),G=1}else G=0}while(0);R||du(F),0|(V=0|ar[J>>2])&&du(V),G||(me=392)}else me=392;if(392==(0|me)&&(G=me=0),0|N&&du(N),0|G)break e;G=0|ar[Y+4>>2];do{if(G)for(;V=0|ar[G>>2];)G=V;else{if(G=0|ar[(V=Y+8|0)>>2],(0|ar[G>>2])==(0|Y))break;for(;de=0|ar[V>>2],G=0|ar[(V=de+8|0)>>2],(0|ar[G>>2])!=(0|de););}}while(0);if((0|G)==(0|W))break;Y=G}if((0|(G=0|ar[ge>>2]))!=(0|W)){M=1^he,T=11+y|0,S=U=4+y|0,O=Ze+4|0,z=pe+4|0;do{if(D=G+20|0,_=0|ar[G+16>>2],N=112+(0|ar[g>>2])|0,0|(F=0|ar[N>>2])){V=N;i:for(;;){for(R=F;!((0|ar[R+16>>2])>>>0>=_>>>0);){if(!(F=0|ar[R+4>>2]))break i;R=F}if(!(F=0|ar[R>>2])){V=R;break}V=R}if((0|V)!=(0|N)&&(0|ar[V+16>>2])>>>0<=_>>>0){F=0|ar[V+20>>2],V=0|ar[V+24>>2],J=V?(bu(V),V):0,V=0==(0|F);do{if(V|M)V=V?19:18;else{if(yu(y,F+64|0),4==(0|((V=0|tr[T>>0])<<24>>24<0?0|ar[U>>2]:255&V))?(F=0==(0|Yu(y,0,-1,30303,4)),V=0|tr[T>>0]):F=0,V<<24>>24<0&&vu(0|ar[y>>2]),F){if(fo(y,ke,_,1684630887),(0|(F=0|ar[y>>2]))==(0|ar[S>>2]))V=19;else{N=0|ar[F>>2],F=0|ar[W>>2];do{if(F){V=W;i:for(;;){for(R=F;!((0|ar[R+16>>2])>>>0>=N>>>0);){if(!(F=0|ar[R+4>>2]))break i;R=F}if(!(F=0|ar[R>>2])){V=R;break}V=R}if((0|V)==(0|W)){V=19;break}if(N>>>0<(0|ar[V+16>>2])>>>0){V=19;break}_=0|ar[V+20>>2],Y=0|ar[V+24>>2],(Q=0==(0|Y))||bu(Y),R=0|ar[D>>2],V=0|ar[R+204>>2],R=0|ar[R+208>>2],(N=0==(0|R))||bu(R);do{if(!V){if(V=0|ar[(F=_)+204>>2],F=0|ar[F+208>>2]){bu(F),du(F),V=0!=(0|V);break}V=0!=(0|V);break}V=0}while(0);N||du(R);do{if(V){if(V=0|ar[D>>2],F=0|ar[(R=_)+204>>2],0|(R=0|ar[R+208>>2])&&bu(R),ar[Ze>>2]=F,ar[O>>2]=R,Zl(V,Ze),!(V=0|ar[O>>2]))break;du(V)}}while(0);R=0|ar[D>>2],V=0|ar[R+196>>2],R=0|ar[R+200>>2],(N=0==(0|R))||bu(R);do{if(!V){if(V=0|ar[(F=_)+196>>2],F=0|ar[F+200>>2]){bu(F),du(F),V=0!=(0|V);break}V=0!=(0|V);break}V=0}while(0);N||du(R);do{if(V){if(R=0|ar[D>>2],V=0|ar[(F=_)+196>>2],0|(F=0|ar[F+200>>2])&&bu(F),ar[pe>>2]=V,ar[z>>2]=F,Zl(R,pe),!(V=0|ar[z>>2]))break;du(V)}}while(0);if(Q){V=0;break}du(Y),V=0}else V=19}while(0);F=0|ar[y>>2]}if(0|F&&((0|(R=0|ar[S>>2]))!=(0|F)&&(ar[S>>2]=R+(~((R+-4-F|0)>>>2)<<2)),vu(F)),0|V)break}V=0}}while(0);switch(0|J&&du(J),0|V){case 19:case 0:break;default:break r}}}if(V=0|ar[G+4>>2])for(G=V;V=0|ar[G>>2];)G=V;else if(F=0|ar[(V=G+8|0)>>2],(0|ar[F>>2])==(0|G))G=F;else for(;ge=0|ar[V>>2],G=0|ar[(V=ge+8|0)>>2],(0|ar[G>>2])!=(0|ge););}while((0|G)!=(0|W))}}}while(0);if(V=0|ar[I>>2],T=0|ar[Z>>2],(0|V)==(0|T))G=A+8|0;else{U=Ee+4|0,S=4+p|0,O=8+E|0,z=4+E|0,j=11+E|0,H=4+X|0,x=8+B|0,P=4+B|0,L=11+B|0,q=(K=Be+8|0)+11|0,$=ye+11|0,AA=11+y|0,G=A+8|0;do{for(F=0|ar[V>>2],ho(y,0|ar[g>>2],F),wo(ye,0|ar[g>>2],F),M=0|hu(52),ar[M+4>>2]=0,ar[M+8>>2]=0,ar[M>>2]=6420,R=M+12|0,rA=(iA=M+16|0)+36|0;((ar[iA>>2]=0)|(iA=iA+4|0))<(0|rA););ar[(D=R)>>2]=F,Eu(M+16|0,y),Eu(M+28|0,ye),mo(Be,0|ar[g>>2],F,M+40|0);do{if(0|ar[Be>>2])pe=0|ar[(Ze=Be)+4>>2],ar[(F=A)>>2]=ar[Ze>>2],ar[F+4>>2]=pe,ar[G>>2]=ar[K>>2],ar[G+4>>2]=ar[K+4>>2],ar[G+8>>2]=ar[K+8>>2],ar[K>>2]=0,ar[K+4>>2]=0,ar[K+8>>2]=0,F=1;else{if(he){if(io(Ee,ke,F),R=0|ar[Ee>>2],Q=0|ar[U>>2],(0|R)==(0|Q))F=22;else{for(;;){if(1667527523==(0|ar[R+20>>2])){Ge(p,R+52|0),F=0|ar[p>>2];r:do{if(4==((0|ar[S>>2])-F|0)){Y=0|ar[F>>2],N=0|ar[W>>2];do{if(0|N){F=W;i:for(;;){for(_=N;!((0|ar[_+16>>2])>>>0>=Y>>>0);){if(!(N=0|ar[_+4>>2]))break i;_=N}if(!(N=0|ar[_>>2])){F=_;break}F=_}if((0|F)==(0|W))break;if(Y>>>0<(0|ar[F+16>>2])>>>0)break;if(F=0|ar[F+20>>2],ar[X>>2]=D,bu(ar[H>>2]=M),(_=0|ar[(N=F+188|0)>>2])>>>0<(0|ar[F+192>>2])>>>0){ar[_>>2]=ar[X>>2],ar[_+4>>2]=ar[H>>2],ar[X>>2]=0,ar[H>>2]=0,ar[N>>2]=_+8,F=0;break r}if(Bl(F+184|0,X),!(F=0|ar[H>>2])){F=0;break r}du(F),F=0;break r}}while(0);for(ar[E>>2]=0,ar[4+E>>2]=0,ar[8+E>>2]=0,F=0|hu(48),ar[E>>2]=F,ar[O>>2]=-2147483600,ar[z>>2]=39,eA=31063,rA=(iA=F)+39|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[F+39>>0]=0,oo(A,2,2e3,E),0<=(0|tr[j>>0])){F=1;break}vu(0|ar[E>>2]),F=1}else{for(ar[B>>2]=0,ar[4+B>>2]=0,ar[8+B>>2]=0,F=0|hu(48),ar[B>>2]=F,ar[x>>2]=-2147483600,ar[P>>2]=40,eA=31022,rA=(iA=F)+40|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););if(tr[F+40>>0]=0,oo(A,2,0,B),0<=(0|tr[L>>0])){F=1;break}vu(0|ar[B>>2]),F=1}}while(0);if(0|(N=0|ar[p>>2])&&((0|(_=0|ar[S>>2]))!=(0|N)&&(ar[S>>2]=_+(~((_+-4-N|0)>>>2)<<2)),vu(N)),0|F){F=1;break}}if((0|(R=R+64|0))==(0|Q)){F=22;break}}R=0|ar[Ee>>2]}if(J=22==(0|F),0|R){if((0|(N=0|ar[U>>2]))!=(0|R)){for(;_=N+-64|0,ar[U>>2]=_,0|(Y=0|ar[N+-12>>2])&&((0|(D=0|ar[(Q=N+-8|0)>>2]))!=(0|Y)&&(ar[Q>>2]=D+(~((D+-4-Y|0)>>>2)<<2)),vu(Y)),ar[_>>2]=4264,0|(_=0|ar[N+-40>>2])&&((0|ar[(N=N+-36|0)>>2])!=(0|_)&&(ar[N>>2]=_),vu(_)),(0|(N=0|ar[U>>2]))!=(0|R););R=0|ar[Ee>>2]}vu(R)}if(!J)break}F=0}}while(0);if((0|tr[q>>0])<0&&vu(0|ar[K>>2]),du(M),(0|tr[$>>0])<0&&vu(0|ar[ye>>2]),(0|tr[AA>>0])<0&&vu(0|ar[y>>2]),V=V+4|0,0|F)break e}while((0|V)!=(0|T))}Be=0|ar[(ye=56592)+4>>2],ar[(Ee=A)>>2]=ar[ye>>2],ar[Ee+4>>2]=Be,yu(G,56600)}}while(0);ve||du(we)}else{for(ar[q>>2]=0,ar[q+4>>2]=0,ar[q+8>>2]=0,G=0|hu(48),ar[q>>2]=G,ar[q+8>>2]=-2147483600,ar[q+4>>2]=42,eA=30323,rA=(iA=G)+42|0;tr[iA>>0]=0|tr[eA>>0],eA=eA+1|0,(0|(iA=iA+1|0))<(0|rA););tr[G+42>>0]=0,oo(A,2,2e3,q),(0|tr[q+11>>0])<0&&vu(0|ar[q>>2])}}while(0);if(!(A=0|ar[I>>2]))return ur=C;(0|(G=0|ar[Z>>2]))!=(0|A)&&(ar[Z>>2]=G+(~((G+-4-A|0)>>>2)<<2));vu(A),ur=C}(A,e),0<=(0|tr[o+8+11>>0]))return ur=a;vu(0|ar[o+8>>2]),ur=a}(f,0|ar[e>>2],t?0|ar[r>>2]:r,t?0|ar[r+4>>2]:255&n,1),ao(A,f,0|ar[e>>2]),ur=(0<=(0|tr[(A=f+8|0)+11>>0])||vu(0|ar[A>>2]),i)},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n=0,t=0,o=0;if(ur=(f=ur)+32|0,n=(i=f)+20|0,t=f+8|0,o=0|oA(),!e)return ar[A>>2]=o,iA((o=0)|o),void(ur=f);!function(A,e,r,i){A|=0,e|=0,r|=0;var f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0;if(ur=(o=ur)+64|0,t=o+44|0,a=o+32|0,f=o+12|0,b=o,!(i|=0))return ar[a>>2]=0,ar[a+4>>2]=0,ar[a+8>>2]=0,oo(t,5,2001,a),(0|tr[a+11>>0])<0&&vu(0|ar[a>>2]),ao(A,t,0|ar[e>>2]),(0|tr[(a=8+t|0)+11>>0])<0&&vu(0|ar[a>>2]),ur=o;sl(t,40+(0|ar[e>>2])|0),a=0|ar[t>>2],c=0|ar[(n=4+t|0)>>2];A:do{if((0|a)!=(0|c)){for(;l=0|ar[a>>2],(0|ar[l+20>>2])!=(0|r);)if((0|(a=a+8|0))==(0|c)){a=0,s=13;break A}u=l,c=0|ar[a+4>>2],0|(a=c)&&bu(c),l?(r=0|hu(16),ar[r>>2]=0,ar[r+4>>2]=0,ar[r+8>>2]=0,ar[r+12>>2]=0,ar[i>>2]=r,c?(bu(c),c=0|ar[(b=r+4|0)>>2],ar[r>>2]=u,ar[b>>2]=a,0|c&&du(c)):(ar[r>>2]=u,ar[r+4>>2]=a),c=0|ar[i>>2],r=0|ar[e>>2],0|(l=0|ar[e+4>>2])&&bu(l),ar[c+8>>2]=r,c=0|ar[(i=c+12|0)>>2],ar[i>>2]=l,0|c&&du(c),ao(A,56592,0|ar[e>>2])):s=13}else a=0,s=13}while(0);13==(0|s)&&(ar[b>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,oo(f,5,2e3,b),(0|tr[b+11>>0])<0&&vu(0|ar[b>>2]),ao(A,f,0|ar[e>>2]),(0|tr[(c=8+f|0)+11>>0])<0&&vu(0|ar[c>>2]));0|a&&du(a);if(0|(a=0|ar[t>>2])){if((0|(c=0|ar[n>>2]))!=(0|a)){for(;r=c+-8|0,ar[n>>2]=r,(0|(c=(c=0|ar[c+-4>>2])?(du(c),0|ar[n>>2]):r))!=(0|a););a=0|ar[t>>2]}vu(a)}ur=o}(t,e,r,n),t=0|ar[t>>2]?(n=0|hu(12),ar[n>>2]=ar[t>>2],ar[n+4>>2]=ar[t+4>>2],ar[n+8>>2]=ar[t+8>>2],ar[i>>2]=n,0|cA(1392,0|i)):(ar[i>>2]=ar[n>>2],0|cA(1320,0|i)),ar[A>>2]=t,iA(0|o),ur=f},function(A,e,r){r|=0,ar[(e|=0)+(0|ar[(A|=0)>>2])>>2]=r},function(A,e,r){r|=0,ar[(e|=0)+(0|ar[(A|=0)>>2])>>2]=r},function(A,e,r){sr(44456,35137,51,35153)},function(A,e,r){A|=0,e|=0;var i=0,f=0,n=0,t=0;if(0<(0|(r|=0))){f=0;do{for(n=0|br(f,r),i=0;ar[A+((t=i+n|0)<<2)>>2]=or[e+(t<<1)>>1],(0|(i=i+1|0))!=(0|r););f=f+1|0}while((0|f)!=(0|r))}},function(A,e,r){A|=0,e|=0;var i=0,f=0,n=0,t=0,o=0;if(0<(0|(r|=0))){f=0;do{for(t=0|br(f,r),n=i=0;i=(0|or[e+((o=n+t|0)<<1)>>1])+i|0,ar[A+(o<<2)>>2]=i,(0|(n=n+1|0))!=(0|r););f=f+1|0}while((0|f)!=(0|r))}},function(A,e,r){A|=0,e|=0;var i=0,f=0,n=0,t=0;if(0<(0|(r|=0))){f=0;do{for(n=i=0;t=(0|br(n,r))+f|0,i=(0|or[e+(t<<1)>>1])+i|0,ar[A+(t<<2)>>2]=i,(0|(n=n+1|0))!=(0|r););f=f+1|0}while((0|f)!=(0|r))}},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0;for(ur=(f=ur)+32|0,i=f,n=0;t=0|or[e+(n<<1)>>1],l=(74*(o=0|or[e+(n+4<<1)>>1])|0)+(29*t|0)+(84*(a=0|or[e+(n+8<<1)>>1])|0)+(55*(c=0|or[e+(n+12<<1)>>1])|0)+64>>7,or[i+(n<<1)>>1]=(0|l)<-32768?-32768:65535&((0|l)<32767?l:32767),l=(0|br(c,-84))+((0|br(a,-29))+((74*o|0)+(55*t|0)))+64>>7,or[i+8+(n<<1)>>1]=(0|l)<-32768?-32768:65535&((0|l)<32767?l:32767),l=(74*c|0)+((0|br(a,-74))+(74*t|0))+64>>7,or[i+16+(n<<1)>>1]=(0|l)<-32768?-32768:65535&((0|l)<32767?l:32767),t=(0|br(c,-29))+((55*a|0)+((0|br(o,-74))+(84*t|0)))+64>>7,or[i+24+(n<<1)>>1]=(0|t)<-32768?-32768:65535&((0|t)<32767?t:32767),4!=(0|(n=n+1|0)););for(n=0;l=0|br(n,r),c=0|or[i+(n<<3)>>1],u=(74*(a=0|or[i+(n<<3)+2>>1])|0)+(29*c|0)+(84*(o=0|or[i+(n<<3)+4>>1])|0)+(55*(t=0|or[i+(n<<3)+6>>1])|0)+2048>>12,u=(0|cr[(e=A+l|0)>>0])+((0|u)<-32768?-32768:(0|u)<32767?u:32767)|0,tr[e>>0]=(0|u)<0?0:255&((0|u)<255?u:255),e=(0|br(t,-84))+((0|br(o,-29))+((74*a|0)+(55*c|0)))+2048>>12,e=(0|cr[(u=A+(l+1)|0)>>0])+((0|e)<-32768?-32768:(0|e)<32767?e:32767)|0,tr[u>>0]=(0|e)<0?0:255&((0|e)<255?e:255),u=(74*t|0)+((0|br(o,-74))+(74*c|0))+2048>>12,u=(0|cr[(e=A+(l+2)|0)>>0])+((0|u)<-32768?-32768:(0|u)<32767?u:32767)|0,tr[e>>0]=(0|u)<0?0:255&((0|u)<255?u:255),c=(0|br(t,-29))+((55*o|0)+((0|br(a,-74))+(84*c|0)))+2048>>12,c=(0|cr[(l=A+(l+3)|0)>>0])+((0|c)<-32768?-32768:(0|c)<32767?c:32767)|0,tr[l>>0]=(0|c)<0?0:255&((0|c)<255?c:255),4!=(0|(n=n+1|0)););ur=f},function(A,e,r){Oo(A|=0,r|=0,4,e|=0,8)},function(A,e,r){Oo(A|=0,r|=0,8,e|=0,8)},function(A,e,r){Oo(A|=0,r|=0,16,e|=0,8)},function(A,e,r){Oo(A|=0,r|=0,32,e|=0,8)},function(A,e,r){A|=0,e|=0;var i,f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0;for(ur=(t=ur)+32|0,n=t,i=(r|=0)<<1,f=3*r|0,o=0;a=0|or[e+(o<<1)>>1],s=(55*(c=0|or[e+(o+r<<1)>>1])|0)+(29*a|0)+(74*(l=0|or[e+(i+o<<1)>>1])|0)+(84*(u=0|or[e+(f+o<<1)>>1])|0)+1>>1,or[n+(o<<1)>>1]=(0|s)<-32768?-32768:65535&((0|s)<32767?s:32767),b=(s=(0|br(u,-74))+(74*(c+a|0)|0)|0)>>1,or[n+(o+4<<1)>>1]=(0|s)<-65536?-32768:65535&((0|b)<32767?b:32767),b=(55*u|0)+((0|br(l,-74))+((0|br(c,-29))+(84*a|0)))+1>>1,or[n+(o+8<<1)>>1]=(0|b)<-32768?-32768:65535&((0|b)<32767?b:32767),a=(0|br(u,-29))+((74*l|0)+((0|br(c,-84))+(55*a|0)))+1>>1,or[n+(o+12<<1)>>1]=(0|a)<-32768?-32768:65535&((0|a)<32767?a:32767),4!=(0|(o=o+1|0)););for(o=0;b=0|or[n+((s=o<<2)<<1)>>1],u=0|or[n+((1|s)<<1)>>1],l=0|or[n+((2|s)<<1)>>1],c=0|or[n+((3|s)<<1)>>1],or[A+(s<<1)>>1]=((55*u|0)+(29*b|0)+(74*l|0)+(84*c|0)+128|0)>>>8,a=((0|br(c,-74))+(74*(u+b|0)|0)+128|0)>>>8&65535,or[A+((1|s)<<1)>>1]=a,a=((55*c|0)+((0|br(l,-74))+((0|br(u,-29))+(84*b|0)))+128|0)>>>8&65535,or[A+((2|s)<<1)>>1]=a,b=((0|br(c,-29))+((74*l|0)+((0|br(u,-84))+(55*b|0)))+128|0)>>>8&65535,or[A+((3|s)<<1)>>1]=b,4!=(0|(o=o+1|0)););ur=t},function(A,e,r){jo(A|=0,4,e|=0,r|=0)},function(A,e,r){jo(A|=0,8,e|=0,r|=0)},function(A,e,r){jo(A|=0,16,e|=0,r|=0)},function(A,e,r){jo(A|=0,32,e|=0,r|=0)},function(A,e,r){A|=0,r|=0;var i,f=0,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0;ur=(i=ur)+32|0,w=i,n=0|or[(e|=0)>>1],o=0|or[e+4>>1],c=0|or[e+2>>1],m=o+n<<16>>16,a=(f=0|or[e+6>>1])+c<<16>>16,or[w>>1]=a+m,or[(s=w+2|0)>>1]=m-a,o=n-o<<16>>16,f=c-f<<16>>16,or[(c=w+4|0)>>1]=f+o,or[(n=w+6|0)>>1]=o-f,f=0|or[e+(r<<1)>>1],o=0|or[e+(r+2<<1)>>1],a=0|or[e+(r+1<<1)>>1],t=o+f<<16>>16,g=(m=0|or[e+(r+3<<1)>>1])+a<<16>>16,or[(h=w+8|0)>>1]=g+t,or[(b=w+10|0)>>1]=t-g,o=f-o<<16>>16,m=a-m<<16>>16,or[(a=w+12|0)>>1]=m+o,or[(f=w+14|0)>>1]=o-m,o=0|or[e+((m=r<<1)<<1)>>1],g=0|or[e+(m+2<<1)>>1],t=0|or[e+((1|m)<<1)>>1],d=(l=(m=0|or[e+(m+3<<1)>>1])+t<<16>>16)+(v=g+o<<16>>16)|0,or[w+16>>1]=d,l=v-l|0,or[w+18>>1]=l,g=o-g<<16>>16,m=t-m<<16>>16,or[(t=w+20|0)>>1]=m+g,or[(o=w+22|0)>>1]=g-m,g=0|or[e+((m=3*r|0)<<1)>>1],v=0|or[e+(m+2<<1)>>1],r=0|or[e+(m+1<<1)>>1],k=(u=(m=0|or[e+(m+3<<1)>>1])+r<<16>>16)+(e=v+g<<16>>16)|0,or[w+24>>1]=k,u=e-u|0,or[w+26>>1]=u,e=(m=r-m<<16>>16)+(v=g-v<<16>>16)|0,or[w+28>>1]=e,or[(r=w+30|0)>>1]=v-m,m=(d=d<<16>>16)+(w=0|or[w>>1])<<16>>16,v=(k=k<<16>>16)+(h=0|or[h>>1])<<16>>16,or[A>>1]=v+m,or[A+8>>1]=m-v,d=w-d<<16>>16,k=h-k<<16>>16,or[A+16>>1]=k+d,or[A+24>>1]=d-k,k=(l=l<<16>>16)+(s=0|or[s>>1])<<16>>16,d=(u=u<<16>>16)+(b=0|or[b>>1])<<16>>16,or[A+2>>1]=d+k,or[A+10>>1]=k-d,l=s-l<<16>>16,u=b-u<<16>>16,or[A+18>>1]=u+l,or[A+26>>1]=l-u,c=0|or[c>>1],u=(t=0|or[t>>1])+c<<16>>16,l=(e=e<<16>>16)+(a=0|or[a>>1])<<16>>16,or[A+4>>1]=l+u,or[A+12>>1]=u-l,t=c-t<<16>>16,e=a-e<<16>>16,or[A+20>>1]=e+t,or[A+28>>1]=t-e,n=0|or[n>>1],e=0|or[o>>1],f=0|or[f>>1],o=e+n<<16>>16,t=(r=0|or[r>>1])+f<<16>>16,or[A+6>>1]=t+o,or[A+14>>1]=o-t,e=n-e<<16>>16,r=f-r<<16>>16,or[A+22>>1]=r+e,or[A+30>>1]=e-r,ur=i},function(A,e,r){A|=0,e|=0,r|=0;var i,f,n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0;for(ur=(f=ur)+128|0,i=f,n=0;o=0|br(n,r),w=0|or[e+(o<<1)>>1],l=0|or[e+(o+4<<1)>>1],k=0|or[e+(o+1<<1)>>1],c=0|or[e+(o+5<<1)>>1],t=0|or[e+(o+2<<1)>>1],a=0|or[e+(o+6<<1)>>1],h=0|or[e+(o+3<<1)>>1],d=l+w<<16>>16,u=a+t<<16>>16,s=c+k<<16>>16,b=(o=0|or[e+(o+7<<1)>>1])+h<<16>>16,l=w-l<<16>>16,a=t-a<<16>>16,c=k-c<<16>>16,o=h-o<<16>>16,h=u+d<<16>>16,k=b+s<<16>>16,or[i+((t=n<<3)<<1)>>1]=k+h,or[i+((1|t)<<1)>>1]=h-k,u=d-u<<16>>16,b=s-b<<16>>16,or[i+((2|t)<<1)>>1]=b+u,or[i+((3|t)<<1)>>1]=u-b,b=a+l<<16>>16,u=o+c<<16>>16,or[i+((4|t)<<1)>>1]=u+b,or[i+((5|t)<<1)>>1]=b-u,a=l-a<<16>>16,o=c-o<<16>>16,or[i+((6|t)<<1)>>1]=o+a,or[i+((7|t)<<1)>>1]=a-o,8!=(0|(n=n+1|0)););for(n=0;p=0|or[i+(n<<1)>>1],b=0|or[i+((a=n+32|0)<<1)>>1],m=0|or[i+((v=n+8|0)<<1)>>1],s=0|or[i+((u=n+40|0)<<1)>>1],Z=0|or[i+((t=n+16|0)<<1)>>1],k=0|or[i+((d=n+48|0)<<1)>>1],g=0|or[i+((c=n+24|0)<<1)>>1],e=b+p<<16>>16,o=k+Z<<16>>16,r=s+m<<16>>16,l=(h=0|or[i+((w=n+56|0)<<1)>>1])+g<<16>>16,b=p-b<<16>>16,k=Z-k<<16>>16,s=m-s<<16>>16,h=g-h<<16>>16,g=o+e<<16>>16,m=l+r<<16>>16,or[A+(n<<1)>>1]=m+g,or[A+(v<<1)>>1]=g-m,o=e-o<<16>>16,l=r-l<<16>>16,or[A+(t<<1)>>1]=l+o,or[A+(c<<1)>>1]=o-l,c=k+b<<16>>16,l=h+s<<16>>16,or[A+(a<<1)>>1]=l+c,or[A+(u<<1)>>1]=c-l,k=b-k<<16>>16,h=s-h<<16>>16,or[A+(d<<1)>>1]=h+k,or[A+(w<<1)>>1]=k-h,8!=(0|(n=n+1|0)););ur=f},function(A,e,r){Ho(A|=0,16,e|=0,r|=0)},function(A,e,r){Ho(A|=0,32,e|=0,r|=0)},Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb,Qb],ts=[Db,function(A,e,r,i){A|=0,i|=0,r=(r|=0)+8|0,as[15&ar[16+(0|ar[(e|=0)>>2])>>2]](A,e,0|ar[r>>2],0|ar[r+4>>2],0,i)},function(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f=0,n=0;A:do{if(0|i){for(f=0;;){if((i-f|0)>>>0<4){f=4;break}if(n=(0|cr[r+(f+1)>>0])<<16|(0|cr[r+f>>0])<<24|(0|cr[r+(f+2)>>0])<<8|0|cr[r+(f+3)>>0],(i-(f=f+4|0)|0)>>>0<n>>>0){f=7;break}if(Ve(0|ar[e>>2],r+f|0,n,0,0,0),i>>>0<=(f=n+f|0)>>>0)break A}if(4==(0|f))return ar[A>>2]=ar[1919],ar[A+4>>2]=ar[1920],void(ar[A+8>>2]=ar[1921]);if(7==(0|f))return ar[A>>2]=ar[1919],ar[A+4>>2]=ar[1920],void(ar[A+8>>2]=ar[1921])}}while(0);ar[A>>2]=ar[1904],ar[A+4>>2]=ar[1905],ar[A+8>>2]=ar[1906]},function(A,e,r,i){i|=0,ar[(i=A|=0)>>2]=0,ar[i+4>>2]=0,ar[(i=A+8|0)>>2]=-1,ar[i+4>>2]=-1},function(A,e,r,i){i|=0,ar[(i=A|=0)>>2]=0,ar[i+4>>2]=0,ar[(i=A+8|0)>>2]=-1,ar[i+4>>2]=-1},function(A,e,r,i){e|=0,r|=0,i|=0;var f,n,t,o=0;for(f=ur=(t=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,4294967279<(n=i-r|(ar[A+8>>2]=0))>>>0&&pu(),n>>>0<11?(tr[A+11>>0]=n,o=A):(o=0|hu(e=16+n&-16),ar[A>>2]=o,ar[A+8>>2]=-2147483648|e,ar[A+4>>2]=n),e=r,A=o;(0|e)!=(0|i);)Qf(A,e),e=e+1|0,A=A+1|0;Qf(o+n|(tr[f>>0]=0),f),ur=t},function(A,e,r,i){e|=0,r|=0,i|=0;var f,n,t,o=0,a=0;f=ur=(t=ur)+31&-32,ur=ur+16|0,ar[(A|=0)>>2]=0,ar[A+4>>2]=0,1073741807<(n=i-r>>2)>>>(ar[A+8>>2]=0)&&pu();do{if(2<=n>>>0){if(!(1073741823<(e=4+n&-4)>>>0)){a=0|hu(e<<2),ar[A>>2]=a,ar[A+8>>2]=-2147483648|e,ar[A+4>>2]=n,o=r;break}lA()}else tr[A+8+3>>0]=n,o=r,a=A}while(0);for(;(0|o)!=(0|i);)ln(a,o),o=o+4|0,a=a+4|0;ar[f>>2]=0,ln(a,f),ur=t},function(A,e,r,i){r|=0,i|=0,0|xu(A|=0,0|ar[(e|=0)+8>>2])&&Pu(0,e,r,i)},function(A,e,r,i){r|=0,i|=0,0|xu(A|=0,0|ar[(e|=0)+8>>2])?Pu(0,e,r,i):(A=0|ar[A+8>>2],ts[31&ar[28+(0|ar[A>>2])>>2]](A,e,r,i))},function(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f=0,n=0;A:do{if(0|xu(A,0|ar[e+8>>2]))Pu(0,e,r,i);else if(f=A+16+((n=0|ar[A+12>>2])<<3)|0,Ab(A+16|0,e,r,i),1<(0|n)){n=e+54|0,A=A+24|0;do{if(Ab(A,e,r,i),0|tr[n>>0])break A;A=A+8|0}while(A>>>0<f>>>0)}}while(0)},function(A,e,r,i){A|=0,e|=0,r|=0,i|=0;var f,n,t,o,a,c,l,u,b=0,s=0,d=0,k=0,h=0,w=0,v=0;if(ur=(u=ur)+64|0,l=(o=u)+56|0,c=u+52|0,s=u+40|0,a=u+36|0,v=u+24|0,n=u+20|0,f=u+16|0,t=u+12|0,b=0|oA(),ar[l>>2]=b,!e)return ar[A>>2]=b,ar[l>>2]=0,iA((v=0)|v),void(ur=u);if(!function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0;var t,o,a,c;ur=(c=ur)+32|0,ar[(t=(o=c)+24|0)>>2]=0,ar[(a=4+t|0)>>2]=0,function(A,e,r,i,f,n,t){A|=0,n|=0,t|=0;var o,a,c=0,l=0,u=0,b=0,s=0,d=0;ur=(a=ur)+48|0,b=(o=a)+40|0,u=a+32|0,d=a+20|0,Xl(o,e|=0,r|=0,i|=0,f|=0,0);do{if(0|ar[o>>2])i=0|ar[(s=o)+4>>2],ar[(d=A)>>2]=ar[s>>2],ar[d+4>>2]=i,i=o+8|0,ar[(d=A+8|0)>>2]=ar[i>>2],ar[d+4>>2]=ar[i+4>>2],ar[d+8>>2]=ar[i+8>>2],ar[i>>2]=0,ar[i+4>>2]=0,ar[i+8>>2]=0;else{if(99==(0|f)&&(f=0|ar[32+(0|ar[i>>2])>>2]),c=0|ar[i>>2],l=0|ar[c+36>>2],r=99==(0|n)?l:n,e=t&&0|tr[t+20>>0]?8:0,!((0|r)==(0|l)&&(0|f)==(0|ar[c+32>>2])||(ar[u>>2]=0,ar[(c=u+4|0)>>2]=0,me(b,i,f,r,u,e),e=0|ar[b>>2],u=0|ar[(r=b+4|0)>>2],ar[b>>2]=0,ar[r>>2]=0,ar[i>>2]=e,e=0|ar[(b=i+4|0)>>2],ar[b>>2]=u,0|e&&(du(e),0|(s=0|ar[r>>2]))&&du(s),0|(e=0|ar[c>>2])&&du(e),0|ar[i>>2]))){if(ar[d>>2]=0,ar[d+4>>2]=0,ar[d+8>>2]=0,oo(A,4,3003,d),0<=(0|tr[d+11>>0]))break;vu(0|ar[d>>2]);break}d=0|ar[(s=56592)+4>>2],ar[(i=A)>>2]=ar[s>>2],ar[i+4>>2]=d,yu(A+8|0,56600)}}while(0);if(0<=(0|tr[11+(e=o+8|0)>>0]))return ur=a;vu(0|ar[e>>2]),ur=a}(o,0|ar[e+8>>2],0|ar[20+(0|ar[e>>2])>>2],t,i,f,n),0|ar[o>>2]?ao(A,o,0|ar[e>>2]):(n=0|hu(8),ar[r>>2]=n,i=0|ar[t>>2],f=0|ar[a>>2],ar[t>>2]=0,ar[a>>2]=0,ar[n>>2]=i,ar[n+4>>2]=f,ao(A,56592,0|ar[e>>2]));(0|tr[11+(A=o+8|0)>>0])<0&&vu(0|ar[A>>2]);(A=0|ar[a>>2])&&du(A),ur=c}(s,e,c,r,i,0),0|ar[s>>2])v=0|hu(12),ar[v>>2]=ar[s>>2],ar[v+4>>2]=ar[s+4>>2],ar[v+8>>2]=ar[s+8>>2],ar[o>>2]=v,v=0|cA(1392,0|o),ar[A>>2]=v;else{if(ar[o>>2]=cr[40+(0|ar[e>>2])>>0],bl(l,29636,o),sl(o,48+(0|ar[e>>2])|0),s=(b=0|ar[(i=o+4|0)>>2])-(e=0|ar[o>>2])>>3,0|(r=e)){if((0|b)!=(0|r)){for(;e=b+-8|0,ar[i>>2]=e,(b=0|ar[b+-4>>2])&&(du(b),e=0|ar[i>>2]),(0|e)!=(0|r);)b=e;e=0|ar[o>>2]}vu(e)}switch(ar[a>>2]=s,bl(l,29647,a),b=0|ar[c>>2],e=0|Xo(0|ar[b>>2],0),ar[o>>2]=e,function(A,e,r){e|=0,r|=0;var i,f;ur=(i=ur)+16|0,f=i,A=0|ar[(A=A|0)>>2],e=0|tA(0|e),ar[f>>2]=ar[r>>2],r=0|cA(4144,0|f),aA(0|A,0|e,0|r),iA(0|r),iA(0|e),ur=i}(l,29658,o),e=0|Wo(0|ar[b>>2],0),ar[a>>2]=e,function(A,e,r){e|=0,r|=0;var i,f;ur=(i=ur)+16|0,f=i,A=0|ar[(A=A|0)>>2],e=0|tA(0|e),ar[f>>2]=ar[r>>2],r=0|cA(4144,0|f),aA(0|A,0|e,0|r),iA(0|r),iA(0|e),ur=i}(l,29664,a),ar[v>>2]=0,ar[v+4>>2]=0,ar[v+8>>2]=0,ar[n>>2]=ar[36+(0|ar[b>>2])>>2],function(A,e,r){e|=0,r|=0;var i,f;ur=(i=ur)+16|0,f=i,A=0|ar[(A=A|0)>>2],e=0|tA(0|e),ar[f>>2]=ar[r>>2],r=0|cA(1248,0|f),aA(0|A,0|e,0|r),iA(0|r),iA(0|e),ur=i}(l,29671,n),ar[n>>2]=ar[32+(0|ar[b>>2])>>2],function(A,e,r){e|=0,r|=0;var i,f;ur=(i=ur)+16|0,f=i,A=0|ar[(A=A|0)>>2],e=0|tA(0|e),ar[f>>2]=ar[r>>2],r=0|cA(1256,0|f),aA(0|A,0|e,0|r),iA(0|r),iA(0|e),ur=i}(l,29678,n),e=0|ar[b>>2],0|ar[e+32>>2]){case 0:if(r=e?0|Fo(e,0,n):ar[n>>2]=0,h=(e=0|ar[b>>2])?0|Fo(e,1,f):ar[f>>2]=0,e=(e=0|ar[b>>2])?0|Fo(e,2,t):ar[t>>2]=0,w=0|ar[o>>2],d=0|ar[a>>2],Vu(v,(0|br(~~(.5*(0|w)+.5)<<1,~~(.5*(0|d)+.5)))+(0|br(d,w))|0,0),w=(0|tr[v+11>>0])<0?0|ar[v>>2]:v,d=0|ar[o>>2],k=0|ar[a>>2],(0|d)!=(0|(s=0|ar[n>>2]))){if(0<(0|k))for(i=w,b=r,r=0;hb(0|i,0|b,0|s),(0|(r=r+1|0))!=(0|k);)i=i+d|0,b=b+s|0}else hb(0|w,0|r,0|br(k,d));if(d=0|ar[o>>2],k=0|ar[a>>2],b=w+(0|br(k,d))|0,k=~~(.5*(0|k)+.5),(0|(d=~~(.5*(0|d)+.5)))!=(0|(s=0|ar[f>>2]))){if(0<(0|k))for(i=b,b=h,r=0;hb(0|i,0|b,0|s),(0|(r=r+1|0))!=(0|k);)i=i+d|0,b=b+s|0}else hb(0|b,0|h,0|br(k,d));if(r=0|ar[o>>2],i=0|ar[a>>2],b=0|br(d=~~(.5*(0|i)+.5),s=~~(.5*(0|r)+.5)),r=w+(0|br(i,r))+b|0,(0|s)!=(0|(i=0|ar[t>>2]))){if(0<(0|d))for(b=0;hb(0|r,0|e,0|i),(0|(b=b+1|0))!=(0|d);)r=r+s|0,e=e+i|0}else hb(0|r,0|e,0|b);break;case 1:if(10!=(0|ar[e+36>>2])&&sr(29689,29758,140,26426),e=0|Fo(e,10,n),Vu(v,0|br(3*(0|ar[o>>2])|0,0|ar[a>>2]),0),r=(0|tr[v+11>>0])<0?0|ar[v>>2]:v,d=3*(0|ar[o>>2])|0,s=0|ar[a>>2],(0|d)!=(0|(i=0|ar[n>>2]))){if(0<(0|s))for(b=0;hb(0|r,0|e,0|i),(0|(b=b+1|0))!=(0|s);)r=r+d|0,e=e+i|0}else hb(0|r,0|e,0|br(s,d));break;case 2:if(0|ar[e+36>>2]&&sr(29778,29758,151,26426),e=0|Fo(e,0,n),Vu(v,0|br(0|ar[a>>2],0|ar[o>>2]),0),r=(0|tr[v+11>>0])<0?0|ar[v>>2]:v,d=0|ar[o>>2],s=0|ar[a>>2],(0|d)!=(0|(i=0|ar[n>>2]))){if(0<(0|s))for(b=0;hb(0|r,0|e,0|i),(0|(b=b+1|0))!=(0|s);)r=r+d|0,e=e+i|0}else hb(0|r,0|e,0|br(s,d))}!function(A,e,r){e|=0,r|=0;var i,f,n,t,o=0;ur=(i=ur)+16|0,f=i,A=0|ar[(A=A|0)>>2],e=0|tA(0|e),o=0|tr[r+11>>0],o=(t=o<<24>>24<0)?0|ar[r+4>>2]:255&o,n=0|yc(o+4|0),ar[n>>2]=o,hb(4+n|0,0|(t?0|ar[r>>2]:r),0|o),ar[f>>2]=n,r=0|cA(1408,0|f),aA(0|A,0|e,0|r),iA(0|r),iA(0|e),ur=i}(l,29840,v),0|(e=0|ar[c>>2])&&(0|(b=0|ar[e+4>>2])&&du(b),vu(e)),ar[A>>2]=ar[l>>2],((ar[l>>2]=0)|tr[v+11>>0])<0&&vu(0|ar[v>>2])}v=0|ar[l>>2],iA(0|v),ur=u},function(A,e,r,i){A|=0,e|=0,i|=0;var f,n,t=0,o=0,a=0,c=0,l=0,u=0,b=0;if(f=(r|=0)+5|0,n=1<<r,31!=(0|r)){a=0;do{for(c=a<<r,l=0|br(a,i),o=t=0;b=(o=(2048+(or[e+(t+c<<1)>>1]<<f)>>12)+o|0)+(0|cr[(u=A+(t+l)|0)>>0])|0,tr[u>>0]=(0|b)<0?0:255&((0|b)<255?b:255),(0|(t=t+1|0))<(0|n););a=a+1|0}while((0|a)<(0|n))}},function(A,e,r,i){A|=0,e|=0,i|=0;var f,n,t=0,o=0,a=0,c=0,l=0;if(f=(r|=0)+5|0,n=1<<r,31!=(0|r)){a=0;do{for(o=t=0;o=(2048+(or[e+((t<<r)+a<<1)>>1]<<f)>>12)+o|0,c=A+((0|br(t,i))+a)|0,l=o+(0|cr[c>>0])|0,tr[c>>0]=(0|l)<0?0:255&((0|l)<255?l:255),(0|(t=t+1|0))<(0|n););a=a+1|0}while((0|a)<(0|n))}},function(A,e,r,i){sr(44456,35137,68,35179)},function(A,e,r,i){A|=0,e|=0,r|=0;var f,n,t,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0;for(ur=(t=ur)+32|0,f=t,a=(n=20-(i|=0)|0)-1|0,o=0;c=0|or[e+(o<<1)>>1],s=(74*(l=0|or[e+(o+4<<1)>>1])|0)+(29*c|0)+(84*(u=0|or[e+(o+8<<1)>>1])|0)+(55*(b=0|or[e+(o+12<<1)>>1])|0)+64>>7,or[f+(o<<1)>>1]=(0|s)<-32768?-32768:65535&((0|s)<32767?s:32767),s=(0|br(b,-84))+((0|br(u,-29))+((74*l|0)+(55*c|0)))+64>>7,or[f+8+(o<<1)>>1]=(0|s)<-32768?-32768:65535&((0|s)<32767?s:32767),s=(74*b|0)+((0|br(u,-74))+(74*c|0))+64>>7,or[f+16+(o<<1)>>1]=(0|s)<-32768?-32768:65535&((0|s)<32767?s:32767),c=(0|br(b,-29))+((55*u|0)+((0|br(l,-74))+(84*c|0)))+64>>7,or[f+24+(o<<1)>>1]=(0|c)<-32768?-32768:65535&((0|c)<32767?c:32767),4!=(0|(o=o+1|0)););for(c=1<<a,a=(e=1<<i)+65535|0,o=0;s=0|br(o,r),b=0|or[f+(o<<3)>>1],k=(74*(u=0|or[f+(o<<3)+2>>1])|0)+(29*b|0)+(84*(l=0|or[f+(o<<3)+4>>1])|0)+(55*(i=0|or[f+(o<<3)+6>>1])|0)+c>>n,k=(0|lr[(d=A+(s<<1)|0)>>1])+((0|k)<-32768?-32768:(0|k)<32767?k:32767)|0,or[d>>1]=(0|k)<0?0:65535&((0|k)<(0|e)?k:a),d=(0|br(i,-84))+((0|br(l,-29))+((74*u|0)+(55*b|0)))+c>>n,d=(0|lr[(k=A+(s+1<<1)|0)>>1])+((0|d)<-32768?-32768:(0|d)<32767?d:32767)|0,or[k>>1]=(0|d)<0?0:65535&((0|d)<(0|e)?d:a),k=(74*i|0)+((0|br(l,-74))+(74*b|0))+c>>n,k=(0|lr[(d=A+(s+2<<1)|0)>>1])+((0|k)<-32768?-32768:(0|k)<32767?k:32767)|0,or[d>>1]=(0|k)<0?0:65535&((0|k)<(0|e)?k:a),b=(0|br(i,-29))+((55*l|0)+((0|br(u,-74))+(84*b|0)))+c>>n,b=(0|lr[(s=A+(s+3<<1)|0)>>1])+((0|b)<-32768?-32768:(0|b)<32767?b:32767)|0,or[s>>1]=(0|b)<0?0:65535&((0|b)<(0|e)?b:a),4!=(0|(o=o+1|0)););ur=t},function(A,e,r,i){zo(A|=0,r|=0,4,e|=0,i|=0)},function(A,e,r,i){zo(A|=0,r|=0,8,e|=0,i|=0)},function(A,e,r,i){zo(A|=0,r|=0,16,e|=0,i|=0)},function(A,e,r,i){zo(A|=0,r|=0,32,e|=0,i|=0)},function(A,e,r,i){A|=0,e|=0;var f,n,t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0;for(ur=(o=ur)+32|0,t=o,c=(r|=0)+-1|0,f=(a=1<<(i|=0))+65535|0,n=0-a|0,i=0;l=0|or[e+(i<<1)>>1],d=(74*(u=0|or[e+(i+4<<1)>>1])|0)+(29*l|0)+(84*(b=0|or[e+(i+8<<1)>>1])|0)+(55*(s=0|or[e+(i+12<<1)>>1])|0)+64>>7,or[t+(i<<1)>>1]=(0|d)<(0|n)?n:(0|d)<(0|a)?d:f,d=(0|br(s,-84))+((0|br(b,-29))+((74*u|0)+(55*l|0)))+64>>7,or[t+8+(i<<1)>>1]=(0|d)<(0|n)?n:(0|d)<(0|a)?d:f,d=(74*s|0)+((0|br(b,-74))+(74*l|0))+64>>7,or[t+16+(i<<1)>>1]=(0|d)<(0|n)?n:(0|d)<(0|a)?d:f,l=(0|br(s,-29))+((55*b|0)+((0|br(u,-74))+(84*l|0)))+64>>7,or[t+24+(i<<1)>>1]=(0|l)<(0|n)?n:(0|l)<(0|a)?l:f,4!=(0|(i=i+1|0)););for(a=1<<c,i=0;d=i<<2,s=0|or[t+(i<<3)>>1],c=74*(b=0|or[t+(i<<3)+2>>1])|0,u=0|or[t+(i<<3)+4>>1],l=0|or[t+(i<<3)+6>>1],ar[A+(d<<2)>>2]=(55*l|0)+((84*u|0)+(c+(29*s|0)))+a>>r,c=(0|br(l,-84))+((0|br(u,-29))+(c+(55*s|0)))+a>>r,ar[A+((1|d)<<2)>>2]=c,c=(74*l|0)+((0|br(u,-74))+(74*s|0))+a>>r,ar[A+((2|d)<<2)>>2]=c,s=(0|br(l,-29))+((55*u|0)+((0|br(b,-74))+(84*s|0)))+a>>r,ar[A+((3|d)<<2)>>2]=s,4!=(0|(i=i+1|0)););ur=o},function(A,e,r,i){So(A|=0,4,e|=0,r|=0,i|=0)},function(A,e,r,i){So(A|=0,8,e|=0,r|=0,i|=0)},function(A,e,r,i){So(A|=0,16,e|=0,r|=0,i|=0)},function(A,e,r,i){So(A|=0,32,e|=0,r|=0,i|=0)},Db,Db,Db,Db,Db,Db,Db,Db],os=[Jb,function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a=0,c=0,l=0,u=0,b=0;if(ur=(o=ur)+64|0,t=o+36|0,n=o+48|0,u=o,1==(0|ar[(r|=0)>>2])&&3==(0|ar[r+4>>2])&&8==(0|ar[r+12>>2]))return ar[t>>2]=0,ar[(b=4+t|0)>>2]=0,a=(ar[8+t>>2]=0)==(0|tr[(f=r+8|0)>>0])&&0==(0|tr[i+8>>0])?.25:0,ar[u>>2]=1,ar[u+4>>2]=11,tr[u+8>>0]=1,tr[(e=u+9|0)>>0]=0|tr[n>>0],tr[e+1>>0]=0|tr[1+n>>0],tr[e+2>>0]=0|tr[2+n>>0],ar[u+12>>2]=8,ar[u+16>>2]=0,ar[(e=u+20|0)>>2]=0,gA[u+24>>2]=.10000000149011612,gA[u+28>>2]=0,gA[u+32>>2]=a,l=8+t|0,Nl(t,u),0|(e=0|ar[e>>2])&&du(e),0!=(0|tr[f>>0])&&0!=(0|tr[i+8>>0])?c=.10000000149011612:(c=.20000000298023224,a=0),ar[u>>2]=1,ar[u+4>>2]=10,tr[u+8>>0]=0,tr[(f=u+9|0)>>0]=0|tr[n>>0],tr[f+1>>0]=0|tr[1+n>>0],tr[f+2>>0]=0|tr[2+n>>0],ar[u+12>>2]=8,ar[(f=u+16|0)>>2]=0,ar[(r=u+20|0)>>2]=0,gA[u+24>>2]=c,gA[u+28>>2]=0,gA[u+32>>2]=a,(e=0|ar[b>>2])>>>0>=(0|ar[l>>2])>>>0?(Nl(t,u),0|(e=0|ar[r>>2])&&du(e)):(ar[e>>2]=ar[u>>2],ar[e+4>>2]=ar[u+4>>2],ar[e+8>>2]=ar[u+8>>2],ar[e+12>>2]=ar[u+12>>2],ar[e+16>>2]=ar[f>>2],ar[e+20>>2]=ar[r>>2],ar[f>>2]=0,u=u+24|(ar[r>>2]=0),ar[(i=e+24|0)>>2]=ar[u>>2],ar[i+4>>2]=ar[u+4>>2],ar[i+8>>2]=ar[u+8>>2],ar[b>>2]=e+36),ar[A>>2]=ar[t>>2],ar[A+4>>2]=ar[b>>2],ar[A+8>>2]=ar[l>>2],void(ur=o);ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=o},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0;if(ur=(b=ur)+32|0,o=b+16|0,a=b+12|0,c=b+8|0,l=b+4|0,u=b,t=0|Eo(0|ar[(r|=0)>>2],6),n=0!=(0|tr[i+8>>0]),(0|Vo(0|ar[r>>2],3))<<24>>24==8&&(0|Vo(0|ar[r>>2],4))<<24>>24==8&&(0|Vo(0|ar[r>>2],5))<<24>>24==8){if(t&&(0|Vo(0|ar[r>>2],6))<<24>>24!=8)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=b);f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(i=f+12|0)>>2]=0,ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i+12>>2]=0,ar[i+16>>2]=0,ar[f+32>>2]=32215,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,Z=f+52|0,ar[(g=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[Z>>2]=0,ar[Z+4>>2]=0,ar[Z+8>>2]=0,ar[Z+12>>2]=0,ar[f+68>>2]=g,g=i,m=(Z=f)+16|0,bu(f),su(f),e=0|ar[m>>2],ar[i>>2]=g,ar[m>>2]=Z,0|e&&ku(e),du(f),h=0|ar[r>>2],yo(i,k=0|ar[h+24>>2],h=0|ar[h+28>>2],1,n?11:10),Bo(i,10,k,h,8),ar[o>>2]=0,ar[a>>2]=0,ar[c>>2]=0,ar[l>>2]=0,w=(ar[u>>2]=0)|Ro(0|ar[r>>2],3,o),v=0|Ro(0|ar[r>>2],4,a),m=0|Ro(0|ar[r>>2],5,c),d=0|Fo(i,10,u),f=t?0|Ro(0|ar[r>>2],6,l):0;A:do{if(0<(0|h)){s=t&n,r=0<(0|k),i=0;e:for(;;){r:do{if(s){if(r)for(e=0;B=w+((0|br(0|ar[o>>2],i))+e)|0,p=e<<2,y=d+((0|br(0|ar[u>>2],i))+p)|0,tr[y>>0]=0|tr[B>>0],y=v+((0|br(0|ar[a>>2],i))+e)|0,B=d+((1|p)+(0|br(0|ar[u>>2],i)))|0,tr[B>>0]=0|tr[y>>0],B=m+((0|br(0|ar[c>>2],i))+e)|0,y=d+((2|p)+(0|br(0|ar[u>>2],i)))|0,tr[y>>0]=0|tr[B>>0],y=f+((0|br(0|ar[l>>2],i))+e)|0,p=d+((3|p)+(0|br(0|ar[u>>2],i)))|0,tr[p>>0]=0|tr[y>>0],(0|(e=e+1|0))!=(0|k););}else{if(!n){if(!r)break;for(e=0;;)if(y=w+((0|br(0|ar[o>>2],i))+e)|0,B=3*e|0,p=d+((0|br(0|ar[u>>2],i))+B)|0,tr[p>>0]=0|tr[y>>0],p=v+((0|br(0|ar[a>>2],i))+e)|0,y=d+(B+1+(0|br(0|ar[u>>2],i)))|0,tr[y>>0]=0|tr[p>>0],y=m+((0|br(0|ar[c>>2],i))+e)|0,B=d+(B+2+(0|br(0|ar[u>>2],i)))|0,tr[B>>0]=0|tr[y>>0],(0|(e=e+1|0))==(0|k))break r}if(t)break e;if(r)for(e=0;p=w+((0|br(0|ar[o>>2],i))+e)|0,B=e<<2,y=d+((0|br(0|ar[u>>2],i))+B)|0,tr[y>>0]=0|tr[p>>0],y=v+((0|br(0|ar[a>>2],i))+e)|0,p=d+((1|B)+(0|br(0|ar[u>>2],i)))|0,tr[p>>0]=0|tr[y>>0],p=m+((0|br(0|ar[c>>2],i))+e)|0,y=d+((2|B)+(0|br(0|ar[u>>2],i)))|0,tr[y>>0]=0|tr[p>>0],B=d+((3|B)+(0|br(0|ar[u>>2],i)))|0,tr[B>>0]=-1,(0|(e=e+1|0))!=(0|k););}}while(0);if((0|h)<=(0|(i=i+1|0)))break A}sr(32223,32248,281,32272)}}while(0);return ar[A>>2]=g,ar[A+4>>2]=Z,void(ur=b)}ar[A>>2]=0,ar[A+4>>2]=0,ur=b},function(A,e,r,i,f){var n,t;if(A|=0,e|=0,i|=0,f|=0,ur=(t=ur)+48|0,n=t+36|0,f=t,0==(0|ar[(r|=0)>>2])&&1==(0|ar[r+4>>2])&&8==(0|ar[r+12>>2])&&0==(0|tr[r+8>>0])){if(0|(e=0|ar[r+16>>2])){switch(0|or[e+8>>1]){case 0:case 8:case 11:case 14:return ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,void(ur=t)}if(!(0|tr[e+10>>0]))return ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,void(ur=t)}return ar[n>>2]=0,ar[(i=4+n|0)>>2]=0,ar[8+n>>2]=0,ar[f>>2]=1,ar[f+4>>2]=10,tr[f+8>>0]=0,ar[f+12>>2]=8,ar[f+16>>2]=0,ar[(e=f+20|0)>>2]=0,gA[f+24>>2]=.5,gA[f+28>>2]=0,gA[f+32>>2]=0,Nl(n,f),0|(e=0|ar[e>>2])&&du(e),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[i>>2],ar[A+8>>2]=ar[8+n>>2],void(ur=t)}ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=t},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0;if(ur=(c=ur)+64|0,f=c+32|0,n=c+12|0,t=c+8|0,o=c+4|0,a=c,(0|Vo(0|ar[(r|=0)>>2],0))<<24>>24==8&&(0|Vo(0|ar[r>>2],1))<<24>>24==8&&(0|Vo(0|ar[r>>2],2))<<24>>24==8){if(i=0|hu(80),ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i>>2]=6208,ar[(l=i+12|0)>>2]=0,ar[l+4>>2]=0,ar[l+8>>2]=0,ar[l+12>>2]=0,ar[l+16>>2]=0,ar[i+32>>2]=32215,ar[i+36>>2]=0,ar[i+40>>2]=0,ar[i+44>>2]=99,ar[i+48>>2]=99,p=i+52|0,ar[(Z=i+72|0)>>2]=0,ar[i+76>>2]=0,ar[p>>2]=0,ar[p+4>>2]=0,ar[p+8>>2]=0,ar[p+12>>2]=0,ar[i+68>>2]=Z,Z=l,g=(p=i)+16|0,bu(i),su(i),e=0|ar[g>>2],ar[l>>2]=Z,ar[g>>2]=p,0|e&&ku(e),du(i),v=0|ar[r>>2],yo(l,w=0|ar[v+24>>2],v=0|ar[v+28>>2],1,10),Bo(l,10,w,v,8),m=0|ar[r>>2],e=0|ar[m+40>>2],(g=0==(0|(m=0|ar[m+44>>2])))||bu(m),Ze(f),0|e&&(pe(n,0|or[e+8>>1],0|or[e+4>>1]),ar[f>>2]=ar[n>>2],ar[f+4>>2]=ar[4+n>>2],ar[f+8>>2]=ar[8+n>>2],ar[f+12>>2]=ar[12+n>>2],ar[f+16>>2]=ar[16+n>>2]),d=0|ef(256*gA[f+4>>2]),k=0|ef(256*gA[f+12>>2]),h=0|ef(256*gA[f+8>>2]),u=0|ef(256*gA[f+16>>2]),ar[n>>2]=0,ar[t>>2]=0,ar[o>>2]=0,b=(ar[a>>2]=0)|Ro(0|ar[r>>2],0,n),s=0|Ro(0|ar[r>>2],1,t),r=0|Ro(0|ar[r>>2],2,o),f=0|Fo(l,10,a),0<(0|v)&0<(0|w)){i=0;do{for(l=(0|i)/2|0,e=0;B=b+((0|br(0|ar[n>>2],i))+e)|0,B=0|cr[B>>0],W=(0|e)/2|0,E=s+((0|br(0|ar[t>>2],l))+W)|0,E=(0|cr[E>>0])-128|0,W=r+((0|br(0|ar[o>>2],l))+W)|0,W=(0|cr[W>>0])-128|0,I=(128+(0|br(W,d))>>8)+B|0,y=3*e|0,X=f+((0|br(0|ar[a>>2],i))+y)|0,tr[X>>0]=(0|I)<0?0:255<(0|I)?-1:255&I,W=(128+(0|br(E,h))+(0|br(W,k))>>8)+B|0,X=f+(y+1+(0|br(0|ar[a>>2],i)))|0,tr[X>>0]=(0|W)<0?0:255<(0|W)?-1:255&W,B=(128+(0|br(E,u))>>8)+B|0,y=f+(y+2+(0|br(0|ar[a>>2],i)))|0,tr[y>>0]=(0|B)<0?0:255<(0|B)?-1:255&B,(0|(e=e+1|0))!=(0|w););i=i+1|0}while((0|i)!=(0|v))}return(ar[A>>2]=Z,ar[A+4>>2]=p,g)?void(ur=c):(du(m),void(ur=c))}ar[A>>2]=0,ar[A+4>>2]=0,ur=c},function(A,e,r,i,f){var n,t;if(A|=0,e|=0,i|=0,f|=0,ur=(t=ur)+48|0,n=t+36|0,f=t,0==(0|ar[(r|=0)>>2])&&1==(0|ar[r+4>>2])&&8==(0|ar[r+12>>2])){if(0|(e=0|ar[r+16>>2])){switch(0|or[e+8>>1]){case 0:case 8:case 11:case 14:return ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,void(ur=t)}if(!(0|tr[e+10>>0]))return ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,void(ur=t)}return ar[n>>2]=0,ar[(i=4+n|0)>>2]=0,ar[8+n>>2]=0,ar[f>>2]=1,ar[f+4>>2]=11,tr[f+8>>0]=1,ar[f+12>>2]=8,ar[f+16>>2]=0,ar[(e=f+20|0)>>2]=0,gA[f+24>>2]=.5,gA[f+28>>2]=0,gA[f+32>>2]=0,Nl(n,f),0|(e=0|ar[e>>2])&&du(e),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[i>>2],ar[A+8>>2]=ar[8+n>>2],void(ur=t)}ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=t},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0;if(ur=(l=ur)+64|0,f=l+36|0,t=l+16|0,o=l+12|0,a=l+8|0,c=l+4|0,n=l,(0|Vo(0|ar[(r|=0)>>2],0))<<24>>24==8&&(0|Vo(0|ar[r>>2],1))<<24>>24==8&&(0|Vo(0|ar[r>>2],2))<<24>>24==8){if(i=0|hu(80),ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i>>2]=6208,ar[(u=i+12|0)>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u+12>>2]=0,ar[u+16>>2]=0,ar[i+32>>2]=32215,ar[i+36>>2]=0,ar[i+40>>2]=0,ar[i+44>>2]=99,ar[i+48>>2]=99,X=i+52|0,ar[(E=i+72|0)>>2]=0,ar[i+76>>2]=0,ar[X>>2]=0,ar[X+4>>2]=0,ar[X+8>>2]=0,ar[X+12>>2]=0,ar[i+68>>2]=E,E=u,B=(X=i)+16|0,bu(i),su(i),e=0|ar[B>>2],ar[u>>2]=E,ar[B>>2]=X,0|e&&ku(e),du(i),p=0|ar[r>>2],yo(u,Z=0|ar[p+24>>2],p=0|ar[p+28>>2],1,11),Bo(u,10,Z,p,8),y=0|ar[r>>2],e=0|ar[y+40>>2],(B=0==(0|(y=0|ar[y+44>>2])))||bu(y),Ze(f),0|e&&(pe(t,0|or[e+8>>1],0|or[e+4>>1]),ar[f>>2]=ar[t>>2],ar[f+4>>2]=ar[4+t>>2],ar[f+8>>2]=ar[8+t>>2],ar[f+12>>2]=ar[12+t>>2],ar[f+16>>2]=ar[16+t>>2]),v=0|ef(256*gA[f+4>>2]),m=0|ef(256*gA[f+12>>2]),g=0|ef(256*gA[f+8>>2]),s=0|ef(256*gA[f+16>>2]),d=0|Eo(0|ar[r>>2],6),ar[t>>2]=0,ar[o>>2]=0,ar[a>>2]=0,ar[c>>2]=0,k=(ar[n>>2]=0)|Ro(0|ar[r>>2],0,t),h=0|Ro(0|ar[r>>2],1,o),w=0|Ro(0|ar[r>>2],2,a),b=d?0|Ro(0|ar[r>>2],6,c):0,f=0|Fo(u,10,n),0<(0|p)){u=0<(0|Z),i=0;do{if(u)if(r=(0|i)/2|0,d)for(e=0;C=k+((0|br(0|ar[t>>2],i))+e)|0,C=0|cr[C>>0],V=(0|e)/2|0,W=h+((0|br(0|ar[o>>2],r))+V)|0,W=(0|cr[W>>0])-128|0,V=w+((0|br(0|ar[a>>2],r))+V)|0,V=(0|cr[V>>0])-128|0,F=(128+(0|br(V,v))>>8)+C|0,I=e<<2,G=f+((0|br(0|ar[n>>2],i))+I)|0,tr[G>>0]=(0|F)<0?0:255<(0|F)?-1:255&F,V=(128+(0|br(W,g))+(0|br(V,m))>>8)+C|0,G=f+((1|I)+(0|br(0|ar[n>>2],i)))|0,tr[G>>0]=(0|V)<0?0:255<(0|V)?-1:255&V,C=(128+(0|br(W,s))>>8)+C|0,W=f+((2|I)+(0|br(0|ar[n>>2],i)))|0,tr[W>>0]=(0|C)<0?0:255<(0|C)?-1:255&C,W=0|br(0|ar[n>>2],i),C=b+((0|br(0|ar[c>>2],i))+e)|0,tr[f+((3|I)+W)>>0]=0|tr[C>>0],(0|(e=e+1|0))!=(0|Z););else for(e=0;G=k+((0|br(0|ar[t>>2],i))+e)|0,G=0|cr[G>>0],I=(0|e)/2|0,V=h+((0|br(0|ar[o>>2],r))+I)|0,V=(0|cr[V>>0])-128|0,I=w+((0|br(0|ar[a>>2],r))+I)|0,I=(0|cr[I>>0])-128|0,W=(128+(0|br(I,v))>>8)+G|0,F=e<<2,C=f+((0|br(0|ar[n>>2],i))+F)|0,tr[C>>0]=(0|W)<0?0:255<(0|W)?-1:255&W,I=(128+(0|br(V,g))+(0|br(I,m))>>8)+G|0,C=f+((1|F)+(0|br(0|ar[n>>2],i)))|0,tr[C>>0]=(0|I)<0?0:255<(0|I)?-1:255&I,G=(128+(0|br(V,s))>>8)+G|0,V=f+((2|F)+(0|br(0|ar[n>>2],i)))|0,tr[V>>0]=(0|G)<0?0:255<(0|G)?-1:255&G,F=f+((3|F)+(0|br(0|ar[n>>2],i)))|0,tr[F>>0]=-1,(0|(e=e+1|0))!=(0|Z););i=i+1|0}while((0|i)!=(0|p))}return(ar[A>>2]=E,ar[A+4>>2]=X,B)?void(ur=l):(du(y),void(ur=l))}ar[A>>2]=0,ar[A+4>>2]=0,ur=l},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0,l=0,u=0,b=0;if(ur=(t=ur)+64|0,n=t+36|0,c=t+48|0,u=t,1==(0|ar[(r|=0)>>2])&&3==(0|ar[r+4>>2])&&8!=(0|(o=0|ar[(a=r+12|0)>>2])))return ar[n>>2]=0,ar[(b=4+n|0)>>2]=0,(ar[8+n>>2]=0)|tr[r+8>>0]?(l=8+n|0,e=o,r=f=o=0):(ar[u>>2]=1,ar[u+4>>2]=12,tr[u+8>>0]=0,tr[(e=u+9|0)>>0]=0|tr[c>>0],tr[e+1>>0]=0|tr[c+1>>0],tr[e+2>>0]=0|tr[c+2>>0],ar[u+12>>2]=o,ar[u+16>>2]=0,ar[(e=u+20|0)>>2]=0,gA[u+24>>2]=.5,gA[u+28>>2]=0,i=8+n|(gA[u+32>>2]=0),Nl(n,u),0|(e=0|ar[e>>2])&&du(e),r=0|ar[b>>2],l=i,e=0|ar[a>>2],o=r,f=0|ar[i>>2]),ar[u>>2]=1,ar[u+4>>2]=13,tr[u+8>>0]=1,tr[(i=u+9|0)>>0]=0|tr[c>>0],tr[i+1>>0]=0|tr[c+1>>0],tr[i+2>>0]=0|tr[c+2>>0],ar[u+12>>2]=e,ar[(e=u+16|0)>>2]=0,ar[(i=u+20|0)>>2]=0,gA[u+24>>2]=.5,gA[u+28>>2]=0,f>>>(gA[u+32>>2]=0)<=o>>>0?(Nl(n,u),0|(e=0|ar[i>>2])&&du(e)):(ar[r>>2]=ar[u>>2],ar[r+4>>2]=ar[u+4>>2],ar[r+8>>2]=ar[u+8>>2],ar[r+12>>2]=ar[u+12>>2],ar[o+16>>2]=ar[e>>2],ar[o+20>>2]=ar[i>>2],ar[e>>2]=0,u=u+24|(ar[i>>2]=0),ar[(c=o+24|0)>>2]=ar[u>>2],ar[c+4>>2]=ar[u+4>>2],ar[c+8>>2]=ar[u+8>>2],ar[b>>2]=o+36),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[b>>2],ar[A+8>>2]=ar[l>>2],ar[l>>2]=0,void(ur=t);ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=t},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;if(ur=(l=ur)+32|0,n=l+16|0,t=l+12|0,o=l+8|0,a=l+4|0,c=l,(0|Vo(0|ar[(r|=0)>>2],3))<<24>>24!=8&&(0|Vo(0|ar[r>>2],4))<<24>>24!=8&&(0|Vo(0|ar[r>>2],5))<<24>>24!=8){v=0|Eo(0|ar[r>>2],6);do{if(v){if((0|Vo(0|ar[r>>2],6))<<24>>24==8)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=l);if((0|(g=0|Xo(0|ar[r>>2],6)))==(0|Xo(0|ar[r>>2],4))&&(0|(g=0|Wo(0|ar[r>>2],6)))==(0|Wo(0|ar[r>>2],4)))break;return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=l)}}while(0);if(f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(u=f+12|0)>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u+12>>2]=0,ar[u+16>>2]=0,ar[f+32>>2]=32215,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,g=f+52|0,ar[(m=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[g>>2]=0,ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g+12>>2]=0,ar[f+68>>2]=m,m=u,w=(g=f)+16|0,bu(f),su(f),e=0|ar[w>>2],ar[u>>2]=m,ar[w>>2]=g,0|e&&ku(e),du(f),w=0|ar[r>>2],yo(u,h=0|ar[w+24>>2],w=0|ar[w+28>>2],1,0|tr[i+8>>0]?13:12),Bo(u,10,h,w,255&(0|Vo(0|ar[r>>2],3))),ar[n>>2]=0,ar[t>>2]=0,ar[o>>2]=0,ar[a>>2]=0,s=(ar[c>>2]=0)|Ro(0|ar[r>>2],3,n),d=0|Ro(0|ar[r>>2],4,t),k=0|Ro(0|ar[r>>2],5,o),b=0|Fo(u,10,c),e=v?(u=0|Ro(0|ar[r>>2],6,a),(0|ar[a>>2])/2|0):u=0,ar[n>>2]=(0|ar[n>>2])/2|0,ar[t>>2]=(0|ar[t>>2])/2|0,ar[o>>2]=(0|ar[o>>2])/2|0,ar[a>>2]=e,0<(0|w)){i=0<(0|h),f=0;do{if(v){if(i)for(e=0;E=s+((0|br(0|ar[n>>2],f))+e<<1)|0,E=0|or[E>>1],B=d+((0|br(0|ar[t>>2],f))+e<<1)|0,B=0|or[B>>1],y=k+((0|br(0|ar[o>>2],f))+e<<1)|0,y=0|or[y>>1],Z=u+((0|br(0|ar[a>>2],f))+e<<1)|0,Z=0|or[Z>>1],r=e<<3,p=b+((0|br(0|ar[c>>2],f))+r)|0,tr[p>>0]=(65535&E)>>>8,p=b+((1|r)+(0|br(0|ar[c>>2],f)))|0,tr[p>>0]=E,p=b+((2|r)+(0|br(0|ar[c>>2],f)))|0,tr[p>>0]=(65535&B)>>>8,p=b+((3|r)+(0|br(0|ar[c>>2],f)))|0,tr[p>>0]=B,p=b+((4|r)+(0|br(0|ar[c>>2],f)))|0,tr[p>>0]=(65535&y)>>>8,p=b+((5|r)+(0|br(0|ar[c>>2],f)))|0,tr[p>>0]=y,p=b+((6|r)+(0|br(0|ar[c>>2],f)))|0,tr[p>>0]=(65535&Z)>>>8,r=b+((7|r)+(0|br(0|ar[c>>2],f)))|0,tr[r>>0]=Z,(0|(e=e+1|0))!=(0|h););}else if(i)for(e=0;Z=s+((0|br(0|ar[n>>2],f))+e<<1)|0,Z=0|or[Z>>1],p=d+((0|br(0|ar[t>>2],f))+e<<1)|0,p=0|or[p>>1],B=k+((0|br(0|ar[o>>2],f))+e<<1)|0,B=0|or[B>>1],E=6*e|0,y=b+((0|br(0|ar[c>>2],f))+E)|0,tr[y>>0]=(65535&Z)>>>8,y=b+((1|E)+(0|br(0|ar[c>>2],f)))|0,tr[y>>0]=Z,y=b+(E+2+(0|br(0|ar[c>>2],f)))|0,tr[y>>0]=(65535&p)>>>8,y=b+(E+3+(0|br(0|ar[c>>2],f)))|0,tr[y>>0]=p,y=b+(E+4+(0|br(0|ar[c>>2],f)))|0,tr[y>>0]=(65535&B)>>>8,E=b+(E+5+(0|br(0|ar[c>>2],f)))|0,tr[E>>0]=B,(0|(e=e+1|0))!=(0|h););f=f+1|0}while((0|f)!=(0|w))}return ar[A>>2]=m,ar[A+4>>2]=g,void(ur=l)}ar[A>>2]=0,ar[A+4>>2]=0,ur=l},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0,l=0,u=0;if(ur=(t=ur)+64|0,n=t+36|0,a=t+48|0,l=t,1==(0|ar[(r|=0)>>2])&&3==(0|ar[r+4>>2])&&8==(0|ar[(o=r+12|0)>>2]))return ar[n>>2]=0,ar[(u=4+n|0)>>2]=0,(ar[8+n>>2]=0)|tr[r+8>>0]?(c=8+n|0,e=8,r=f=o=0):(ar[l>>2]=1,ar[l+4>>2]=12,tr[l+8>>0]=0,tr[(e=l+9|0)>>0]=0|tr[a>>0],tr[e+1>>0]=0|tr[a+1>>0],tr[e+2>>0]=0|tr[a+2>>0],ar[l+12>>2]=8,ar[l+16>>2]=0,ar[(e=l+20|0)>>2]=0,gA[l+24>>2]=.5,gA[l+28>>2]=0,i=8+n|(gA[l+32>>2]=0),Nl(n,l),0|(e=0|ar[e>>2])&&du(e),r=0|ar[u>>2],c=i,e=0|ar[o>>2],o=r,f=0|ar[i>>2]),ar[l>>2]=1,ar[l+4>>2]=13,tr[l+8>>0]=1,tr[(i=l+9|0)>>0]=0|tr[a>>0],tr[i+1>>0]=0|tr[a+1>>0],tr[i+2>>0]=0|tr[a+2>>0],ar[l+12>>2]=e,ar[(e=l+16|0)>>2]=0,ar[(i=l+20|0)>>2]=0,gA[l+24>>2]=.5,gA[l+28>>2]=0,f>>>(gA[l+32>>2]=0)<=o>>>0?(Nl(n,l),0|(e=0|ar[i>>2])&&du(e)):(ar[r>>2]=ar[l>>2],ar[r+4>>2]=ar[l+4>>2],ar[r+8>>2]=ar[l+8>>2],ar[r+12>>2]=ar[l+12>>2],ar[o+16>>2]=ar[e>>2],ar[o+20>>2]=ar[i>>2],ar[e>>2]=0,l=l+24|(ar[i>>2]=0),ar[(a=o+24|0)>>2]=ar[l>>2],ar[a+4>>2]=ar[l+4>>2],ar[a+8>>2]=ar[l+8>>2],ar[u>>2]=o+36),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[u>>2],ar[A+8>>2]=ar[c>>2],ar[c>>2]=0,void(ur=t);ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=t},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0;if(ur=(l=ur)+32|0,n=l+16|0,t=l+12|0,o=l+8|0,a=l+4|0,c=l,(0|Vo(0|ar[(r|=0)>>2],3))<<24>>24==8&&(0|Vo(0|ar[r>>2],4))<<24>>24==8&&(0|Vo(0|ar[r>>2],5))<<24>>24==8){if((v=0|Eo(0|ar[r>>2],6))&&(0|Vo(0|ar[r>>2],6))<<24>>24!=8)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=l);if(f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(u=f+12|0)>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u+12>>2]=0,ar[u+16>>2]=0,ar[f+32>>2]=32215,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,g=f+52|0,ar[(m=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[g>>2]=0,ar[g+4>>2]=0,ar[g+8>>2]=0,ar[g+12>>2]=0,ar[f+68>>2]=m,m=u,w=(g=f)+16|0,bu(f),su(f),e=0|ar[w>>2],ar[u>>2]=m,ar[w>>2]=g,0|e&&ku(e),du(f),w=0|ar[r>>2],yo(u,h=0|ar[w+24>>2],w=0|ar[w+28>>2],1,0|tr[i+8>>0]?13:12),Bo(u,10,h,w,255&(0|Vo(0|ar[r>>2],3))),ar[n>>2]=0,ar[t>>2]=0,ar[o>>2]=0,ar[a>>2]=0,s=(ar[c>>2]=0)|Ro(0|ar[r>>2],3,n),d=0|Ro(0|ar[r>>2],4,t),k=0|Ro(0|ar[r>>2],5,o),b=0|Fo(u,10,c),f=v?0|Ro(0|ar[r>>2],6,a):0,0<(0|w)){u=0<(0|h),i=0;do{if(v){if(u)for(e=0;r=e<<3,p=b+((0|br(0|ar[c>>2],i))+r)|0,p=s+(((tr[p>>0]=0)|br(0|ar[n>>2],i))+e)|0,Z=b+((1|r)+(0|br(0|ar[c>>2],i)))|0,tr[Z>>0]=0|tr[p>>0],Z=b+((2|r)+(0|br(0|ar[c>>2],i)))|0,Z=d+(((tr[Z>>0]=0)|br(0|ar[t>>2],i))+e)|0,p=b+((3|r)+(0|br(0|ar[c>>2],i)))|0,tr[p>>0]=0|tr[Z>>0],p=b+((4|r)+(0|br(0|ar[c>>2],i)))|0,p=k+(((tr[p>>0]=0)|br(0|ar[o>>2],i))+e)|0,Z=b+((5|r)+(0|br(0|ar[c>>2],i)))|0,tr[Z>>0]=0|tr[p>>0],Z=b+((6|r)+(0|br(0|ar[c>>2],i)))|0,Z=f+(((tr[Z>>0]=0)|br(0|ar[a>>2],i))+e)|0,r=b+((7|r)+(0|br(0|ar[c>>2],i)))|0,tr[r>>0]=0|tr[Z>>0],(0|(e=e+1|0))!=(0|h););}else if(u)for(e=0;p=e<<3,Z=b+((0|br(0|ar[c>>2],i))+p)|0,Z=s+(((tr[Z>>0]=0)|br(0|ar[n>>2],i))+e)|0,r=b+((1|p)+(0|br(0|ar[c>>2],i)))|0,tr[r>>0]=0|tr[Z>>0],r=b+((2|p)+(0|br(0|ar[c>>2],i)))|0,r=d+(((tr[r>>0]=0)|br(0|ar[t>>2],i))+e)|0,Z=b+((3|p)+(0|br(0|ar[c>>2],i)))|0,tr[Z>>0]=0|tr[r>>0],Z=b+((4|p)+(0|br(0|ar[c>>2],i)))|0,Z=k+(((tr[Z>>0]=0)|br(0|ar[o>>2],i))+e)|0,p=b+((5|p)+(0|br(0|ar[c>>2],i)))|0,tr[p>>0]=0|tr[Z>>0],(0|(e=e+1|0))!=(0|h););i=i+1|0}while((0|i)!=(0|w))}return ar[A>>2]=m,ar[A+4>>2]=g,void(ur=l)}ar[A>>2]=0,ar[A+4>>2]=0,ur=l},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t=0,o=0;if(ur=(n=ur)+48|0,f=n+36|0,e=n,1==(0|ar[(r|=0)>>2])&&12==(-2&(t=0|ar[r+4>>2])|0)&&8!=(0|(o=0|ar[r+12>>2])))return ar[f>>2]=0,ar[(i=f+4|0)>>2]=0,ar[f+8>>2]=0,ar[e>>2]=1,ar[e+4>>2]=3,tr[e+8>>0]=15==(2|t)&1,ar[e+12>>2]=o,ar[e+16>>2]=0,ar[(o=e+20|0)>>2]=0,gA[e+24>>2]=.20000000298023224,gA[e+28>>2]=0,gA[e+32>>2]=0,Nl(f,e),0|(e=0|ar[o>>2])&&du(e),ar[A>>2]=ar[f>>2],ar[A+4>>2]=ar[i>>2],ar[A+8>>2]=ar[f+8>>2],void(ur=n);ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=n},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d,k,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0;if(ur=(k=ur)+32|0,d=k+16|0,h=k+12|0,w=k+8|0,v=k+4|0,m=k,s=15==(2|ar[36+(0|ar[(r|=0)>>2])>>2]),i=0|hu(80),ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i>>2]=6208,ar[(f=i+12|0)>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f+12>>2]=0,ar[f+16>>2]=0,ar[i+32>>2]=32215,ar[i+36>>2]=0,ar[i+40>>2]=0,ar[i+44>>2]=99,ar[i+48>>2]=99,e=i+52|0,ar[(y=i+72|0)>>2]=0,ar[i+76>>2]=0,ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[i+68>>2]=y,ar[A>>2]=f,y=(ar[A+4>>2]=i)+16|0,bu(i),su(i),e=0|ar[y>>2],ar[f>>2]=f,ar[y>>2]=i,0|e&&ku(e),du(i),p=0|ar[r>>2],yo(f,b=0|ar[p+24>>2],p=0|ar[p+28>>2],1,3),Bo(f,3,b,p,255&(0|Vo(0|ar[r>>2],10))),Bo(f,4,b,p,255&(0|Vo(0|ar[r>>2],10))),Bo(f,5,b,p,255&(0|Vo(0|ar[r>>2],10))),s&&Bo(f,6,b,p,255&(0|Vo(0|ar[r>>2],10))),ar[d>>2]=0,y=s?8:6,ar[h>>2]=0,ar[w>>2]=0,ar[v>>2]=0,a=(ar[m>>2]=0)|Ro(0|ar[r>>2],10,d),c=0|Fo(f,3,h),l=0|Fo(f,4,w),u=0|Fo(f,5,v),Z=s?(g=0|Fo(f,6,m),(0|ar[m>>2])/2|0):g=0,o=(0|ar[h>>2])/2|0,ar[h>>2]=o,t=(0|ar[w>>2])/2|0,ar[w>>2]=t,n=(0|ar[v>>2])/2|0,ar[v>>2]=n,ar[m>>2]=Z,(0|p)<=0)ur=k;else{A=0<(0|b),f=0;do{A:do{if(A){if(r=0|br(0|ar[d>>2],f),h=0|br(o,f),w=0|br(t,f),v=0|br(n,f),!s)for(e=0;;)if(B=r+(0|br(e,y))|0,i=65535&((0|cr[a+(B+2)>>0])<<8|0|cr[a+(B+3)>>0]),m=65535&((0|cr[a+(B+4)>>0])<<8|0|cr[a+(B+5)>>0]),or[c+(h+e<<1)>>1]=(0|cr[a+B>>0])<<8|0|cr[a+(B+1)>>0],or[l+(w+e<<1)>>1]=i,or[u+(v+e<<1)>>1]=m,(0|(e=e+1|0))==(0|b))break A;for(i=0|br(Z,f),e=0;E=r+(0|br(e,y))|0,m=65535&((0|cr[a+(E+2)>>0])<<8|0|cr[a+(E+3)>>0]),B=65535&((0|cr[a+(E+4)>>0])<<8|0|cr[a+(E+5)>>0]),or[c+(h+e<<1)>>1]=(0|cr[a+E>>0])<<8|0|cr[a+(E+1)>>0],or[l+(w+e<<1)>>1]=m,or[u+(v+e<<1)>>1]=B,B=r+(e<<3)|0,or[g+(i+e<<1)>>1]=(0|cr[a+(B+6)>>0])<<8|0|cr[a+(B+7)>>0],(0|(e=e+1|0))!=(0|b););}}while(0);f=f+1|0}while((0|f)!=(0|p));ur=k}},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0,l=0;if(ur=(t=ur)+64|0,n=t+36|0,i=t+48|0,c=t,1==(0|ar[(r|=0)>>2])&&12==(-4&(o=0|ar[(a=r+4|0)>>2])|0)){switch(ar[n>>2]=0,ar[(l=4+n|0)>>2]=0,(ar[8+n>>2]=0)|o){case 12:case 14:e=0|ar[r+12>>2],ar[c>>2]=1,ar[c+4>>2]=14==(0|o)?12:14,tr[c+8>>0]=0,tr[(o=c+9|0)>>0]=0|tr[i>>0],tr[o+1>>0]=0|tr[i+1>>0],tr[o+2>>0]=0|tr[i+2>>0],ar[c+12>>2]=e,ar[c+16>>2]=0,ar[(e=c+20|0)>>2]=0,gA[c+24>>2]=.10000000149011612,gA[c+28>>2]=0,gA[c+32>>2]=0,Nl(n,c),0|(e=0|ar[e>>2])&&du(e),e=0|ar[a>>2];break;default:e=o}switch(0|e){case 13:case 15:f=0|ar[r+12>>2],ar[c>>2]=1,ar[c+4>>2]=15==(0|e)?13:15,tr[c+8>>0]=1,tr[(o=c+9|0)>>0]=0|tr[i>>0],tr[o+1>>0]=0|tr[i+1>>0],tr[o+2>>0]=0|tr[i+2>>0],ar[c+12>>2]=f,ar[(i=c+16|0)>>2]=0,ar[(f=c+20|0)>>2]=0,gA[c+24>>2]=.10000000149011612,gA[c+28>>2]=0,(o=(gA[c+32>>2]=0)|ar[l>>2])>>>0>=(0|ar[(e=8+n|0)>>2])>>>0?(Nl(n,c),0|(i=0|ar[f>>2])&&du(i)):(ar[o>>2]=ar[c>>2],ar[o+4>>2]=ar[c+4>>2],ar[o+8>>2]=ar[c+8>>2],ar[o+12>>2]=ar[c+12>>2],ar[o+16>>2]=ar[i>>2],ar[o+20>>2]=ar[f>>2],ar[i>>2]=0,c=c+24|(ar[f>>2]=0),ar[(r=o+24|0)>>2]=ar[c>>2],ar[r+4>>2]=ar[c+4>>2],ar[r+8>>2]=ar[c+8>>2],ar[l>>2]=o+36);break;default:e=8+n|0}return ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[l>>2],ar[A+8>>2]=ar[e>>2],ar[e>>2]=0,void(ur=t)}ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=t},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a=0,c=0,l=0,u=0,b=0,s=0,d=0;switch(ur=(o=ur)+16|0,n=o+4|0,t=o,a=0|hu(80),ar[a+4>>2]=0,ar[a+8>>2]=0,ar[a>>2]=6208,ar[(i=a+12|0)>>2]=0,ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i+12>>2]=0,ar[i+16>>2]=0,ar[a+32>>2]=32215,ar[a+36>>2]=0,ar[a+40>>2]=0,ar[a+44>>2]=99,ar[a+48>>2]=99,u=a+52|0,ar[(l=a+72|0)>>2]=0,ar[a+76>>2]=0,ar[u>>2]=0,ar[u+4>>2]=0,ar[u+8>>2]=0,ar[u+12>>2]=0,ar[a+68>>2]=l,l=i,c=(u=a)+16|0,bu(a),su(a),e=0|ar[c>>2],ar[i>>2]=l,ar[c>>2]=u,0|e&&ku(e),du(a),e=0|ar[r>>2],f=0|ar[e+24>>2],c=0|ar[e+28>>2],0|ar[e+36>>2]){case 14:yo(i,f,c,1,12),e=i;break;case 12:yo(i,f,c,1,14),e=i;break;case 15:yo(i,f,c,1,13),e=i;break;case 13:yo(i,f,c,1,15),e=i;break;default:return ar[A>>2]=0,ar[A+4>>2]=0,du(a),void(ur=o)}if(Bo(e,10,f,c,255&(0|Vo(0|ar[r>>2],10))),ar[n>>2]=0,r=(ar[t>>2]=0)|Ro(0|ar[r>>2],10,n),f=0|Fo(e,10,t),0<(0|c)&0<(0|(a=(0|(i=0|ar[t>>2]))<(0|(a=0|ar[n>>2]))?i:a))){i=0;do{for(e=0;d=r+((b=1|e)+(0|br(0|ar[n>>2],i)))|0,s=f+((0|br(0|ar[t>>2],i))+e)|0,tr[s>>0]=0|tr[d>>0],s=r+((0|br(0|ar[n>>2],i))+e)|0,b=f+(b+(0|br(0|ar[t>>2],i)))|0,tr[b>>0]=0|tr[s>>0],(0|(e=e+2|0))<(0|a););i=i+1|0}while((0|i)!=(0|c))}ar[A>>2]=l,ar[A+4>>2]=u,ur=o},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t=0;if(ur=(n=ur)+48|0,f=n+36|0,e=n,2==(0|ar[(r|=0)>>2])&&0==(0|ar[r+4>>2]))return ar[f>>2]=0,ar[(i=f+4|0)>>2]=0,t=(ar[f+8>>2]=0)|tr[r+8>>0],r=0|ar[r+12>>2],ar[e>>2]=0,ar[e+4>>2]=1,tr[e+8>>0]=t,ar[e+12>>2]=r,ar[e+16>>2]=0,ar[(r=e+20|0)>>2]=0,gA[e+24>>2]=.10000000149011612,gA[e+28>>2]=0,gA[e+32>>2]=0,Nl(f,e),0|(e=0|ar[r>>2])&&du(e),ar[A>>2]=ar[f>>2],ar[A+4>>2]=ar[i>>2],ar[A+8>>2]=ar[f+8>>2],void(ur=n);ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=n},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0;if(ur=(s=ur)+16|0,u=s+12|0,b=s+8|0,a=s+4|0,c=s,i=0|hu(80),ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i>>2]=6208,ar[(l=i+12|0)>>2]=0,ar[4+l>>2]=0,ar[8+l>>2]=0,ar[12+l>>2]=0,ar[16+l>>2]=0,ar[i+32>>2]=32215,ar[i+36>>2]=0,ar[i+40>>2]=0,ar[i+44>>2]=99,ar[i+48>>2]=99,e=i+52|0,ar[(B=i+72|0)>>2]=0,ar[i+76>>2]=0,ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[i+68>>2]=B,ar[A>>2]=l,B=(ar[A+4>>2]=i)+16|0,bu(i),su(i),e=0|ar[B>>2],ar[l>>2]=l,ar[B>>2]=i,0|e&&ku(e),du(i),B=0|ar[r>>2],yo(l,o=0|ar[B+24>>2],B=0|ar[B+28>>2],0,1),n=(1+o|0)/2|0,p=(B+1|0)/2|0,Bo(l,0,o,B,i=255&(e=0|Vo(0|ar[r>>2],0))),Bo(l,1,n,p,i),Bo(l,2,n,p,i),(t=0|Eo(0|ar[r>>2],6))?Bo(l,6,o,B,y=255&(0|Vo(0|ar[r>>2],6))):y=0,e<<24>>24==8){if(ar[u>>2]=0,ar[b>>2]=0,ar[a>>2]=0,i=(ar[c>>2]=0)|Ro(0|ar[r>>2],0,c),f=0|Fo(l,0,a),g=0|Fo(l,1,u),Z=0|Fo(l,2,b),vb(0|g,-128,0|br(0|ar[u>>2],p)),vb(0|Z,-128,0|br(0|ar[b>>2],p)),0<(0|B))for(e=0;hb(0|(p=f+(0|br(0|ar[a>>2],e))|0),i+(0|br(0|ar[c>>2],e))|0,0|o),(0|(e=e+1|0))!=(0|B););}else{ar[u>>2]=0,ar[b>>2]=0,ar[a>>2]=0,g=(ar[c>>2]=0)|Ro(0|ar[r>>2],0,c),Z=0|Fo(l,0,a),k=0|Fo(l,1,u),h=0|Fo(l,2,b),ar[c>>2]=(0|ar[c>>2])/2|0,ar[a>>2]=(0|ar[a>>2])/2|0,w=(0|ar[u>>2])/2|0,ar[u>>2]=w,v=(0|ar[b>>2])/2|0,ar[b>>2]=v,m=0<(0|B);do{if(m){if(f=128<<i+-8&65535,0<(0|o)){i=0;do{for(A=0|br(w,i),d=0|br(v,i),e=0;or[k+(A+e<<1)>>1]=f,or[h+(d+e<<1)>>1]=f,(0|(e=e+1|0))<(0|n););i=i+1|0}while((0|i)<(0|p));if(!m)break}if(hb(0|Z,0|g,0|(e=o<<1)),1!=(0|B))for(i=1;hb(Z+((0|br(0|ar[a>>2],i))<<1)|0,g+((0|br(0|ar[c>>2],i))<<1)|0,0|e),(0|(i=i+1|0))!=(0|B););}}while(0)}if(t){if(ar[u>>2]=0,A=(ar[b>>2]=0)|Ro(0|ar[r>>2],6,u),f=0|Fo(l,6,b),i=o<<(8<y>>>0&1),0<(0|B))for(e=0;hb(0|(r=f+(0|br(0|ar[b>>2],e))|0),A+(0|br(0|ar[u>>2],e))|0,0|i),(0|(e=e+1|0))!=(0|B););ur=s}else ur=s},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0,l=0,u=0;switch(ur=(t=ur)+64|0,n=t+36|0,o=t+48|0,l=t,0|ar[(r|=0)>>2]){case 0:case 2:if(0==(0|ar[r+4>>2])&&8==(0|ar[r+12>>2]))return ar[n>>2]=0,ar[(u=4+n|0)>>2]=0,(ar[8+n>>2]=0)|tr[r+8>>0]?(c=8+n|0,r=f=a=0):(ar[l>>2]=1,ar[l+4>>2]=10,tr[l+8>>0]=0,tr[(e=l+9|0)>>0]=0|tr[o>>0],tr[e+1>>0]=0|tr[o+1>>0],tr[e+2>>0]=0|tr[o+2>>0],ar[l+12>>2]=8,ar[l+16>>2]=0,ar[(e=l+20|0)>>2]=0,gA[l+24>>2]=.10000000149011612,gA[l+28>>2]=0,i=8+n|(gA[l+32>>2]=0),Nl(n,l),0|(e=0|ar[e>>2])&&du(e),a=r=0|ar[u>>2],f=0|ar[(c=i)>>2]),ar[l>>2]=1,ar[l+4>>2]=11,tr[l+8>>0]=1,tr[(e=l+9|0)>>0]=0|tr[o>>0],tr[e+1>>0]=0|tr[o+1>>0],tr[e+2>>0]=0|tr[o+2>>0],ar[l+12>>2]=8,ar[(e=l+16|0)>>2]=0,ar[(i=l+20|0)>>2]=0,gA[l+24>>2]=.15000000596046448,gA[l+28>>2]=0,f>>>(gA[l+32>>2]=0)<=a>>>0?(Nl(n,l),0|(e=0|ar[i>>2])&&du(e)):(ar[r>>2]=ar[l>>2],ar[r+4>>2]=ar[l+4>>2],ar[r+8>>2]=ar[l+8>>2],ar[r+12>>2]=ar[l+12>>2],ar[a+16>>2]=ar[e>>2],ar[a+20>>2]=ar[i>>2],ar[e>>2]=0,l=l+24|(ar[i>>2]=0),ar[(o=a+24|0)>>2]=ar[l>>2],ar[o+4>>2]=ar[l+4>>2],ar[o+8>>2]=ar[l+8>>2],ar[u>>2]=a+36),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[u>>2],ar[A+8>>2]=ar[c>>2],ar[c>>2]=0,void(ur=t)}ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=t},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b=0,s=0,d=0,k=0,h=0,w=0,v=0;if(ur=(u=ur)+16|0,c=u+8|0,t=u+4|0,l=u,k=0|ar[(r|=0)>>2],o=0|ar[k+24>>2],a=0|ar[k+28>>2],(0|Vo(k,0))<<24>>24!=8)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=u);if(f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(b=f+12|0)>>2]=0,ar[b+4>>2]=0,ar[b+8>>2]=0,ar[b+12>>2]=0,ar[b+16>>2]=0,ar[f+32>>2]=32215,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,k=f+52|0,ar[(d=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[k>>2]=0,ar[k+4>>2]=0,ar[k+8>>2]=0,ar[k+12>>2]=0,ar[f+68>>2]=d,d=b,s=(k=f)+16|0,bu(f),su(f),e=0|ar[s>>2],ar[b>>2]=d,ar[s>>2]=k,0|e&&ku(e),du(f),e=0|Eo(0|ar[r>>2],6),0|tr[(n=i+8|0)>>0]?yo(b,o,a,1,11):yo(b,o,a,1,10),Bo(b,10,o,a,8),ar[c>>2]=0,s=(ar[l>>2]=0)|Ro(0|ar[r>>2],0,c),i=e?0|Ro(0|ar[r>>2],6,t):0,b=0|Fo(b,10,l),0<(0|a))if(r=0<(0|o),e){f=0;do{if(0|tr[n>>0]){if(r)for(e=0;h=s+((0|br(0|ar[c>>2],f))+e)|0,h=0|tr[h>>0],v=e<<2,w=b+((0|br(0|ar[l>>2],f))+v)|0,tr[w>>0]=h,w=b+((1|v)+(0|br(0|ar[l>>2],f)))|0,tr[w>>0]=h,w=b+((2|v)+(0|br(0|ar[l>>2],f)))|0,tr[w>>0]=h,w=i+((0|br(0|ar[t>>2],f))+e)|0,v=b+((3|v)+(0|br(0|ar[l>>2],f)))|0,tr[v>>0]=0|tr[w>>0],(0|(e=e+1|0))!=(0|o););}else if(r)for(e=0;w=s+((0|br(0|ar[c>>2],f))+e)|0,w=0|tr[w>>0],h=3*e|0,v=b+((0|br(0|ar[l>>2],f))+h)|0,tr[v>>0]=w,v=b+(h+1+(0|br(0|ar[l>>2],f)))|0,tr[v>>0]=w,h=b+(h+2+(0|br(0|ar[l>>2],f)))|0,tr[h>>0]=w,(0|(e=e+1|0))!=(0|o););f=f+1|0}while((0|f)!=(0|a))}else{f=0;do{if(0|tr[n>>0]){if(r)for(e=0;h=s+((0|br(0|ar[c>>2],f))+e)|0,h=0|tr[h>>0],v=e<<2,w=b+((0|br(0|ar[l>>2],f))+v)|0,tr[w>>0]=h,w=b+((1|v)+(0|br(0|ar[l>>2],f)))|0,tr[w>>0]=h,w=b+((2|v)+(0|br(0|ar[l>>2],f)))|0,tr[w>>0]=h,v=b+((3|v)+(0|br(0|ar[l>>2],f)))|0,tr[v>>0]=-1,(0|(e=e+1|0))!=(0|o););}else if(r)for(e=0;w=s+((0|br(0|ar[c>>2],f))+e)|0,w=0|tr[w>>0],v=3*e|0,h=b+((0|br(0|ar[l>>2],f))+v)|0,tr[h>>0]=w,h=b+(v+1+(0|br(0|ar[l>>2],f)))|0,tr[h>>0]=w,v=b+(v+2+(0|br(0|ar[l>>2],f)))|0,tr[v>>0]=w,(0|(e=e+1|0))!=(0|o););f=f+1|0}while((0|f)!=(0|a))}ar[A>>2]=d,ar[A+4>>2]=k,ur=u},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a=0,c=0,l=0,u=0;if(ur=(o=ur)+64|0,t=o+36|0,n=o+48|0,u=o,1==(0|ar[(r|=0)>>2])&&10==(-2&(a=0|ar[(c=r+4|0)>>2])|0))return 3<=((e=0|ar[(f=i+4|0)>>2])+-1|0)>>>0||0|(l=0|ar[i+16>>2])&&0==(0|or[l+8>>1])?(ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0):(ar[t>>2]=0,ar[(l=4+t|0)>>2]=0,11==((ar[8+t>>2]=0)|(e=10==(0|a)?(ar[u>>2]=0,ar[u+4>>2]=e,tr[u+8>>0]=0,tr[(e=u+9|0)>>0]=0|tr[n>>0],tr[e+1>>0]=0|tr[1+n>>0],tr[e+2>>0]=0|tr[2+n>>0],ar[u+12>>2]=8,ar[u+16>>2]=0,ar[(e=u+20|0)>>2]=0,gA[u+24>>2]=.75,gA[u+28>>2]=.5,gA[u+32>>2]=0,Nl(t,u),0|(e=0|ar[e>>2])&&du(e),0|ar[c>>2]):a))?(f=0|ar[f>>2],ar[u>>2]=0,ar[u+4>>2]=f,tr[u+8>>0]=1,tr[(f=u+9|0)>>0]=0|tr[n>>0],tr[f+1>>0]=0|tr[1+n>>0],tr[f+2>>0]=0|tr[2+n>>0],ar[u+12>>2]=8,ar[(f=u+16|0)>>2]=0,ar[(r=u+20|0)>>2]=0,gA[u+24>>2]=.75,gA[u+28>>2]=.5,(i=(gA[u+32>>2]=0)|ar[l>>2])>>>0>=(0|ar[(e=8+t|0)>>2])>>>0?(Nl(t,u),0|(f=0|ar[r>>2])&&du(f)):(ar[i>>2]=ar[u>>2],ar[i+4>>2]=ar[u+4>>2],ar[i+8>>2]=ar[u+8>>2],ar[i+12>>2]=ar[u+12>>2],ar[i+16>>2]=ar[f>>2],ar[i+20>>2]=ar[r>>2],ar[f>>2]=0,u=u+24|(ar[r>>2]=0),ar[(c=i+24|0)>>2]=ar[u>>2],ar[c+4>>2]=ar[u+4>>2],ar[c+8>>2]=ar[u+8>>2],ar[l>>2]=i+36)):e=8+t|0,ar[A>>2]=ar[t>>2],ar[A+4>>2]=ar[l>>2],ar[A+8>>2]=ar[e>>2],ar[e>>2]=0),void(ur=o);ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=o},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d=0,k=0,h=0,w=0,v=0,m=0,g=0,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0;if(ur=(s=ur)+112|0,G=s+96|0,V=s+92|0,p=s+88|0,u=s+84|0,b=s+80|0,E=s+40|0,k=s,F=0|ar[(r|=0)>>2],l=0|ar[F+24>>2],F=0|ar[F+28>>2],f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(d=f+12|0)>>2]=0,ar[d+4>>2]=0,ar[d+8>>2]=0,ar[d+12>>2]=0,ar[d+16>>2]=0,ar[f+32>>2]=32215,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,e=f+52|0,ar[(C=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[f+68>>2]=C,ar[A>>2]=d,C=(ar[A+4>>2]=f)+16|0,bu(f),su(f),e=0|ar[C>>2],ar[d>>2]=d,ar[C>>2]=f,0|e&&ku(e),du(f),W=0|go(X=0|ar[i+4>>2]),I=0|Zo(X),yo(d,l,F,0,X),X=(l-1+(W&=255)|0)/(0|W)|0,C=(F+-1+(I&=255)|0)/(0|I)|0,c=11==(0|ar[36+(0|ar[r>>2])>>2]),Bo(d,0,l,F,8),Bo(d,1,X,C,8),Bo(d,2,X,C,8),c&&Bo(d,6,l,F,8),ar[G>>2]=0,ar[V>>2]=0,ar[p>>2]=0,ar[u>>2]=0,C=(ar[b>>2]=0)|Ro(0|ar[r>>2],10,b),Z=0|Fo(d,0,p),o=0|Fo(d,1,G),a=0|Fo(d,2,V),X=c?0|Fo(d,6,u):0,Be(E),e=0|ar[i+16>>2])for(A=0|tr[e+10>>0],ye(k,0|or[e+8>>1],0|or[e+4>>1]),A=A<<24>>24!=0,e=k,f=(r=E)+40|0;ar[r>>2]=ar[e>>2],e=e+4|0,(0|(r=r+4|0))<(0|f););else A=1;if(g=c?4:3,t=0<(0|F)){i=0<(0|l),k=E+4|0,v=E+8|0,m=E+12|0,d=0;do{e=C+(0|br(0|ar[b>>2],d))|0;A:do{if(i){if(A)r=0;else for(f=0;;){if(y=0|ef(.8554700016975403*((0|cr[e>>0])*gA[k>>2]+(0|cr[e+1>>0])*gA[v>>2]+(0|cr[e+2>>0])*gA[m>>2])),B=Z+((0|br(0|ar[p>>2],d))+f)|0,tr[B>>0]=(0|y)<0?16:((0|y)<219?y:219)+16&255,(0|(f=f+1|0))==(0|l))break A;e=e+g|0}for(;f=(0|(f=0|ef((0|cr[e>>0])*gA[k>>2]+(0|cr[e+1>>0])*gA[v>>2]+(0|cr[e+2>>0])*gA[m>>2])))<0?0:255<(0|f)?-1:255&f,B=Z+((0|br(0|ar[p>>2],d))+r)|0,tr[B>>0]=f,(0|(r=r+1|0))!=(0|l);)e=e+g|0}}while(0);d=d+1|0}while((0|d)!=(0|F));if(t){B=0<(0|l),m=0|br(g,W),g=E+16|0,Z=E+20|0,p=E+24|0,n=E+28|0,y=E+32|0,v=E+36|0,k=0;do{if(B)for(i=C+((d=0)|br(0|ar[b>>2],k))|0;N=+(0|cr[i>>0]),R=+(0|cr[i+1>>0]),w=+(0|cr[i+2>>0]),h=N*gA[g>>2]+R*gA[Z>>2]+w*gA[p>>2],w=N*gA[n>>2]+R*gA[y>>2]+w*gA[v>>2],r=(f=A?(E=0|ef(h+128),r=(0|k)/(0|I)|0,e=(0|d)/(0|W)|0,f=o+((0|br(0|ar[G>>2],r))+e)|0,tr[f>>0]=(0|E)<0?0:255<(0|E)?-1:255&E,(0|(f=0|ef(w+128)))<0?0:255<(0|f)?-1:255&f):(E=0|ef(.875*h+128),r=(0|k)/(0|I)|0,e=(0|d)/(0|W)|0,f=o+((0|br(0|ar[G>>2],r))+e)|0,tr[f>>0]=(0|E)<0?0:255<(0|E)?-1:255&E,(0|(f=0|ef(.875*w+128)))<0?0:255<(0|f)?-1:255&f),0|br(0|ar[V>>2],r)),tr[a+(e+r)>>0]=f,!((0|l)<=(0|(d=d+W|0)));)i=i+m|0;k=k+I|0}while((0|k)<(0|F));if(c&t&0<(0|l)){e=0;do{for(f=0;G=C+((f<<2|3)+(0|br(0|ar[b>>2],e)))|0,V=X+((0|br(0|ar[u>>2],e))+f)|0,tr[V>>0]=0|tr[G>>0],(0|(f=f+1|0))!=(0|l););e=e+1|0}while((0|e)!=(0|F));ur=s}else ur=s}else ur=s}else ur=s},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0,l=0;if(ur=(t=ur)+64|0,n=t+36|0,f=t+48|0,l=t,1==(0|ar[(r|=0)>>2])&&10==(-2&(o=0|ar[(a=r+4|0)>>2])|0))return!(e=0|ar[i+16>>2])||0|or[e+8>>1]||0|(c=0|ar[r+16>>2])&&0==(0|tr[c+10>>0])?(ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0):(ar[n>>2]=0,ar[(c=4+n|0)>>2]=0,11==((ar[8+n>>2]=0)|(e=10==(0|o)?(ar[l>>2]=0,ar[l+4>>2]=3,tr[l+8>>0]=0,tr[(e=l+9|0)>>0]=0|tr[f>>0],tr[e+1>>0]=0|tr[f+1>>0],tr[e+2>>0]=0|tr[f+2>>0],ar[l+12>>2]=8,ar[l+16>>2]=0,ar[(e=l+20|0)>>2]=0,gA[l+24>>2]=.75,gA[l+28>>2]=.5,gA[l+32>>2]=0,Nl(n,l),0|(e=0|ar[e>>2])&&du(e),0|ar[a>>2]):o))?(ar[l>>2]=0,ar[l+4>>2]=3,tr[l+8>>0]=1,tr[(i=l+9|0)>>0]=0|tr[f>>0],tr[i+1>>0]=0|tr[f+1>>0],tr[i+2>>0]=0|tr[f+2>>0],ar[l+12>>2]=8,ar[(f=l+16|0)>>2]=0,ar[(i=l+20|0)>>2]=0,gA[l+24>>2]=.75,gA[l+28>>2]=.5,(r=(gA[l+32>>2]=0)|ar[c>>2])>>>0>=(0|ar[(e=8+n|0)>>2])>>>0?(Nl(n,l),0|(f=0|ar[i>>2])&&du(f)):(ar[r>>2]=ar[l>>2],ar[r+4>>2]=ar[l+4>>2],ar[r+8>>2]=ar[l+8>>2],ar[r+12>>2]=ar[l+12>>2],ar[r+16>>2]=ar[f>>2],ar[r+20>>2]=ar[i>>2],ar[f>>2]=0,l=l+24|(ar[i>>2]=0),ar[(a=r+24|0)>>2]=ar[l>>2],ar[a+4>>2]=ar[l+4>>2],ar[a+8>>2]=ar[l+8>>2],ar[c>>2]=r+36)):e=8+n|0,ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[c>>2],ar[A+8>>2]=ar[e>>2],ar[e>>2]=0),void(ur=t);ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=t},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s=0,d=0,k=0,h=0,w=0,v=0,m=0;if(ur=(b=ur)+32|0,a=b+16|0,c=b+12|0,l=b+8|0,k=b+4|0,u=b,h=0|ar[(r|=0)>>2],o=0|ar[h+24>>2],h=0|ar[h+28>>2],f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(s=f+12|0)>>2]=0,ar[s+4>>2]=0,ar[s+8>>2]=0,ar[s+12>>2]=0,ar[s+16>>2]=0,ar[f+32>>2]=32215,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,e=f+52|0,ar[(d=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[f+68>>2]=d,ar[A>>2]=s,d=(ar[A+4>>2]=f)+16|0,bu(f),su(f),e=0|ar[d>>2],ar[s>>2]=s,ar[d>>2]=f,0|e&&ku(e),du(f),yo(s,o,h,0,3),f=11==(0|ar[36+(0|ar[r>>2])>>2]),Bo(s,0,o,h,8),Bo(s,1,o,h,8),Bo(s,2,o,h,8),f&&Bo(s,6,o,h,8),ar[a>>2]=0,ar[c>>2]=0,ar[l>>2]=0,ar[k>>2]=0,r=(ar[u>>2]=0)|Ro(0|ar[r>>2],10,u),n=0|Fo(s,0,l),t=0|Fo(s,1,a),d=0|Fo(s,2,c),A=f?0|Fo(s,6,k):0,(e=0|ar[i+16>>2])||sr(32569,32248,2161,32272),0|or[e+8>>1]&&sr(32595,32248,2162,32272),e=0<(0|h)&0<(0|o),f){if(!e)return void(ur=b);f=0;do{for(e=0;m=(0|br(0|ar[u>>2],f))+(e<<2)|0,w=0|tr[r+m>>0],v=0|tr[r+(m+2)>>0],s=0|tr[r+(m+3)>>0],i=n+((0|br(0|ar[l>>2],f))+e)|0,tr[i>>0]=0|tr[r+(m+1)>>0],i=t+((0|br(0|ar[a>>2],f))+e)|0,tr[i>>0]=v,i=d+((0|br(0|ar[c>>2],f))+e)|0,tr[i>>0]=w,i=A+((0|br(0|ar[k>>2],f))+e)|0,tr[i>>0]=s,(0|(e=e+1|0))!=(0|o););f=f+1|0}while((0|f)!=(0|h));ur=b}else if(e){e=0;do{for(f=0;k=(0|br(0|ar[u>>2],e))+(3*f|0)|0,v=0|tr[r+k>>0],w=0|tr[r+(k+2)>>0],m=n+((0|br(0|ar[l>>2],e))+f)|0,tr[m>>0]=0|tr[r+(k+1)>>0],m=t+((0|br(0|ar[a>>2],e))+f)|0,tr[m>>0]=w,m=d+((0|br(0|ar[c>>2],e))+f)|0,tr[m>>0]=v,(0|(f=f+1|0))!=(0|o););e=e+1|0}while((0|e)!=(0|h));ur=b}else ur=b},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l=0,u=0;if(ur=(c=ur)+64|0,a=c+36|0,n=c+48|0,o=c,(t=0|ar[(r|=0)+4>>2])>>>0<4&&0|tr[r+8>>0]&&0==(0|tr[i+8>>0])){if(ar[a>>2]=0,ar[(u=4+a|0)>>2]=0,e=(ar[8+a>>2]=0)|ar[r>>2],f=r+9|0,tr[n>>0]=0|tr[f>>0],tr[1+n>>0]=0|tr[f+1>>0],tr[2+n>>0]=0|tr[f+2>>0],f=0|ar[r+12>>2],i=0|ar[r+16>>2],(l=0==(0|(r=0|ar[r+20>>2])))||bu(r),ar[o>>2]=e,ar[o+4>>2]=t,tr[o+8>>0]=0,tr[(e=o+9|0)>>0]=0|tr[n>>0],tr[e+1>>0]=0|tr[1+n>>0],tr[e+2>>0]=0|tr[2+n>>0],ar[o+12>>2]=f,ar[o+16>>2]=i,ar[(e=o+20|0)>>2]=r,l||bu(r),gA[o+24>>2]=.10000000149011612,gA[o+28>>2]=0,f=8+a|(gA[o+32>>2]=0),Nl(a,o),0|(e=0|ar[e>>2])&&du(e),ar[A>>2]=ar[a>>2],ar[A+4>>2]=ar[u>>2],ar[A+8>>2]=ar[f>>2],ar[f>>2]=0,ar[u>>2]=0,ar[a>>2]=0,!l&&(du(r),0|(e=0|ar[a>>2]))){if((0|(f=0|ar[u>>2]))!=(0|e)){for(;i=f+-36|0,ar[u>>2]=i,(0|(f=(f=0|ar[f+-16>>2])?(du(f),0|ar[u>>2]):i))!=(0|e););e=0|ar[a>>2]}vu(e)}ur=c}else ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=c},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t=0,o=0;t=0|ar[(r|=0)>>2],n=0|ar[t+24>>2],t=0|ar[t+28>>2],i=0|hu(80),ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i>>2]=6208,ar[(f=i+12|0)>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f+12>>2]=0,ar[f+16>>2]=0,ar[i+32>>2]=32215,ar[i+36>>2]=0,ar[i+40>>2]=0,ar[i+44>>2]=99,ar[i+48>>2]=99,o=i+52|0,ar[(e=i+72|0)>>2]=0,ar[i+76>>2]=0,ar[o>>2]=0,ar[o+4>>2]=0,ar[o+8>>2]=0,ar[o+12>>2]=0,ar[i+68>>2]=e,ar[A>>2]=f,A=(ar[A+4>>2]=i)+16|0,bu(i),su(i),e=0|ar[A>>2],ar[f>>2]=f,ar[A>>2]=i,0|e&&ku(e),du(i),o=0|ar[r>>2],yo(f,n,t,0|ar[o+32>>2],0|ar[o+36>>2]),0|Eo(0|ar[r>>2],0)&&No(f,r,0,0),0|Eo(0|ar[r>>2],1)&&No(f,r,1,1),0|Eo(0|ar[r>>2],2)&&No(f,r,2,2),0|Eo(0|ar[r>>2],3)&&No(f,r,3,3),0|Eo(0|ar[r>>2],4)&&No(f,r,4,4),0|Eo(0|ar[r>>2],5)&&No(f,r,5,5)},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0,b=0;if(ur=(a=ur)+64|0,o=a+36|0,c=a+48|0,t=a,(n=0|ar[(r|=0)+4>>2])>>>0<4&&8==(0|ar[r+12>>2])){if(ar[o>>2]=0,ar[(b=4+o|0)>>2]=0,e=(ar[8+o>>2]=0)|ar[r>>2],f=0|tr[r+8>>0],l=r+9|0,tr[c>>0]=0|tr[l>>0],tr[c+1>>0]=0|tr[l+1>>0],tr[c+2>>0]=0|tr[l+2>>0],l=0|ar[r+16>>2],(u=0==(0|(r=0|ar[r+20>>2])))||bu(r),i=0|ar[i+12>>2],ar[t>>2]=e,ar[t+4>>2]=n,tr[t+8>>0]=f,tr[(e=t+9|0)>>0]=0|tr[c>>0],tr[e+1>>0]=0|tr[c+1>>0],tr[e+2>>0]=0|tr[c+2>>0],ar[t+12>>2]=i,ar[t+16>>2]=l,ar[(e=t+20|0)>>2]=r,u||bu(r),gA[t+24>>2]=.20000000298023224,gA[t+28>>2]=0,gA[t+32>>2]=.5,f=8+o|0,Nl(o,t),0|(e=0|ar[e>>2])&&du(e),ar[A>>2]=ar[o>>2],ar[A+4>>2]=ar[b>>2],ar[A+8>>2]=ar[f>>2],ar[f>>2]=0,ar[b>>2]=0,ar[o>>2]=0,!u&&(du(r),0|(e=0|ar[o>>2]))){if((0|(f=0|ar[b>>2]))!=(0|e)){for(;c=f+-36|0,ar[b>>2]=c,(0|(f=(f=0|ar[f+-16>>2])?(du(f),0|ar[b>>2]):c))!=(0|e););e=0|ar[o>>2]}vu(e)}ur=a}else ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=a},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0,w=0,v=0,m=0;ur=(a=ur)+16|0,t=a+4|0,o=a,f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(n=f+12|0)>>2]=0,ar[4+n>>2]=0,ar[8+n>>2]=0,ar[12+n>>2]=0,ar[16+n>>2]=0,ar[f+32>>2]=32215,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,e=f+52|0,ar[(u=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[f+68>>2]=u,ar[A>>2]=n,u=(ar[A+4>>2]=f)+16|0,bu(f),su(f),e=0|ar[u>>2],ar[n>>2]=n,ar[u>>2]=f,0|e&&ku(e),du(f),u=0|ar[r>>2],yo(n,0|ar[u+24>>2],0|ar[u+28>>2],0|ar[u+32>>2],0|ar[u+36>>2]),u=i+12|0,l=6796;do{if(e=0|ar[l>>2],0|Eo(0|ar[r>>2],e)&&(Bo(n,e,b=0|Xo(0|ar[r>>2],e),s=0|Wo(0|ar[r>>2],e),0|ar[u>>2]),d=255&(0|Vo(0|ar[r>>2],e)),k=8-(d=(0|ar[u>>2])-d|0)|0,h=0|Ro(0|ar[r>>2],e,t),w=0|Fo(n,e,o),v=(0|ar[o>>2])/2|0,ar[o>>2]=v,0<(0|s)&0<(0|b))){A=0|ar[t>>2],f=0;do{for(i=0|br(A,f),c=0|br(v,f),e=0;m=0|cr[h+(i+e)>>0],or[w+(c+e<<1)>>1]=m<<d|m>>>k,(0|(e=e+1|0))!=(0|b););f=f+1|0}while((0|f)!=(0|s))}l=l+4|0}while(6824!=(0|l));ur=a},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0;if(ur=(a=ur)+64|0,o=a+36|0,f=a+48|0,t=a,(n=0|ar[(r|=0)+4>>2])>>>0<4&&8!=(0|ar[r+12>>2])){if(ar[o>>2]=0,ar[(u=4+o|0)>>2]=0,e=(ar[8+o>>2]=0)|ar[r>>2],i=0|tr[r+8>>0],c=r+9|0,tr[f>>0]=0|tr[c>>0],tr[f+1>>0]=0|tr[c+1>>0],tr[f+2>>0]=0|tr[c+2>>0],c=0|ar[r+16>>2],(l=0==(0|(r=0|ar[r+20>>2])))||bu(r),ar[t>>2]=e,ar[t+4>>2]=n,tr[t+8>>0]=i,tr[(e=t+9|0)>>0]=0|tr[f>>0],tr[e+1>>0]=0|tr[f+1>>0],tr[e+2>>0]=0|tr[f+2>>0],ar[t+12>>2]=8,ar[t+16>>2]=c,ar[(e=t+20|0)>>2]=r,l||bu(r),gA[t+24>>2]=.20000000298023224,gA[t+28>>2]=0,gA[t+32>>2]=.5,i=8+o|0,Nl(o,t),0|(e=0|ar[e>>2])&&du(e),ar[A>>2]=ar[o>>2],ar[A+4>>2]=ar[u>>2],ar[A+8>>2]=ar[i>>2],ar[i>>2]=0,ar[u>>2]=0,ar[o>>2]=0,!l&&(du(r),0|(e=0|ar[o>>2]))){if((0|(i=0|ar[u>>2]))!=(0|e)){for(;f=i+-36|0,ar[u>>2]=f,(0|(i=(i=0|ar[i+-16>>2])?(du(i),0|ar[u>>2]):f))!=(0|e););e=0|ar[o>>2]}vu(e)}ur=a}else ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=a},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n,t,o,a,c=0,l=0,u=0,b=0,s=0,d=0;ur=(a=ur)+16|0,t=a+4|0,o=a,i=0|hu(80),ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i>>2]=6208,ar[(n=i+12|0)>>2]=0,ar[4+n>>2]=0,ar[8+n>>2]=0,ar[12+n>>2]=0,ar[16+n>>2]=0,ar[i+32>>2]=32215,ar[i+36>>2]=0,ar[i+40>>2]=0,ar[i+44>>2]=99,ar[i+48>>2]=99,f=i+52|0,ar[(e=i+72|0)>>2]=0,ar[i+76>>2]=0,ar[f>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f+12>>2]=0,ar[i+68>>2]=e,ar[A>>2]=n,A=(ar[A+4>>2]=i)+16|0,bu(i),su(i),e=0|ar[A>>2],ar[n>>2]=n,ar[A>>2]=i,0|e&&ku(e),du(i),f=0|ar[r>>2],yo(n,0|ar[f+24>>2],0|ar[f+28>>2],0|ar[f+32>>2],0|ar[f+36>>2]),f=6848;do{if(e=0|ar[f>>2],0|Eo(0|ar[r>>2],e)&&(Bo(n,e,c=0|Xo(0|ar[r>>2],e),l=0|Wo(0|ar[r>>2],e),8),u=(255&(0|Vo(0|ar[r>>2],e)))-8|0,b=0|Ro(0|ar[r>>2],e,t),ar[t>>2]=(0|ar[t>>2])/2|0,s=0|Fo(n,e,o),0<(0|l)&0<(0|c))){e=0;do{for(i=0;d=b+((0|br(0|ar[t>>2],e))+i<<1)|0,A=s+((0|br(0|ar[o>>2],e))+i)|0,tr[A>>0]=(0|lr[d>>1])>>>u,(0|(i=i+1|0))!=(0|c););e=e+1|0}while((0|e)!=(0|l))}f=f+4|0}while(6876!=(0|f));ur=a},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0;if(ur=(t=ur)+48|0,n=t+36|0,f=t,1==(0|ar[(r|=0)>>2])&&12==(-4&ar[r+4>>2]|0)&&8!=(0|(o=0|ar[r+12>>2]))){if(0|(e=0|ar[r+16>>2])){switch(0|or[e+8>>1]){case 0:case 8:case 11:case 14:return ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,void(ur=t)}if(!(0|tr[e+10>>0]))return ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,void(ur=t)}return ar[n>>2]=0,ar[(i=4+n|0)>>2]=0,e=(ar[8+n>>2]=0)|tr[r+8>>0],ar[f>>2]=0,ar[f+4>>2]=1,tr[f+8>>0]=e,ar[f+12>>2]=o,ar[f+16>>2]=0,ar[(e=f+20|0)>>2]=0,gA[f+24>>2]=.5,gA[f+28>>2]=0,gA[f+32>>2]=0,Nl(n,f),0|(e=0|ar[e>>2])&&du(e),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[i>>2],ar[A+8>>2]=ar[8+n>>2],void(ur=t)}ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=t},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0;if(ur=(y=ur)+112|0,g=y+96|0,a=y+92|0,Z=y+88|0,p=y+84|0,c=y+80|0,b=y+40|0,X=y,E=0|ar[(r|=0)>>2],v=0|ar[E+24>>2],m=0|ar[E+28>>2],E=255&(0|Vo(E,10)),o=15==(2|ar[36+(0|ar[r>>2])>>2]),f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(B=f+12|0)>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,ar[B+12>>2]=0,ar[B+16>>2]=0,ar[f+32>>2]=32215,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,e=f+52|0,ar[(K=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[f+68>>2]=K,ar[A>>2]=B,K=(ar[A+4>>2]=f)+16|0,bu(f),su(f),e=0|ar[K>>2],ar[B>>2]=B,ar[K>>2]=f,0|e&&ku(e),du(f),yo(B,v,m,0,1),h=o?8:6,L=(1+v|0)/2|0,K=(1+m|0)/2|0,Bo(B,0,v,m,E),Bo(B,1,L,K,E),Bo(B,2,L,K,E),o&&Bo(B,6,v,m,E),ar[g>>2]=0,ar[a>>2]=0,ar[Z>>2]=0,ar[p>>2]=0,w=(ar[c>>2]=0)|Ro(0|ar[r>>2],10,g),n=0|Fo(B,0,a),L=0|Fo(B,1,Z),K=0|Fo(B,2,p),x=o?0|Fo(B,6,c):0,ar[a>>2]=(0|ar[a>>2])/2|0,ar[Z>>2]=(0|ar[Z>>2])/2|0,ar[p>>2]=(0|ar[p>>2])/2|0,ar[c>>2]=(0|ar[c>>2])/2|0,l=1<<E+-1,u=(k=1<<E)-1|0,P=0|ar[r>>2],s=1&(t=15==(1|ar[P+36>>2])),e=0|ar[P+40>>2],(d=0==(0|(P=0|ar[P+44>>2])))||bu(P),Be(b),e)for(A=0|tr[10+(0|ar[i+16>>2])>>0],ye(X,0|or[e+8>>1],0|or[e+4>>1]),A=A<<24>>24!=0,e=X,f=(B=b)+40|0;ar[B>>2]=ar[e>>2],e=e+4|0,(0|(B=B+4|0))<(0|f););else A=1;if(r=0<(0|m)){X=0<(0|v),i=1^s,G=t?3:2,V=3^s,F=t?5:4,R=5-s|0,N=4+b|0,_=8+b|0,Y=12+b|0,Q=t?7:6,D=7^s,J=65535&u,E=0;do{if(X)if(W=+gA[N>>2],I=+gA[_>>2],C=+gA[Y>>2],M=0|br(0|ar[g>>2],E),A)for(f=0;B=w+(M+(0|br(f,h)))|0,e=(0|(e=0|ef(((0|cr[B+s>>0])<<8|0|cr[B+i>>0]|0)*W+((0|cr[B+G>>0])<<8|0|cr[B+V>>0]|0)*I+((0|cr[B+F>>0])<<8|0|cr[B+R>>0]|0)*C)))<0?0:(0|e)<(0|k)?65535&e:J,q=n+((0|br(0|ar[a>>2],E))+f<<1)|0,or[q>>1]=e,o&&(q=x+((0|br(0|ar[c>>2],E))+f<<1)|0,or[q>>1]=(0|cr[B+Q>>0])<<8|0|cr[B+D>>0]),(0|(f=f+1|0))!=(0|v););else for(f=0;B=w+(M+(0|br(f,h)))|0,e=(0|(e=0|ef(.8554700016975403*(((0|cr[B+s>>0])<<8|0|cr[B+i>>0]|0)*W+((0|cr[B+G>>0])<<8|0|cr[B+V>>0]|0)*I+((0|cr[B+F>>0])<<8|0|cr[B+R>>0]|0)*C)+16)))<0?0:(0|e)<(0|k)?65535&e:J,q=n+((0|br(0|ar[a>>2],E))+f<<1)|0,or[q>>1]=e,o&&(q=x+((0|br(0|ar[c>>2],E))+f<<1)|0,or[q>>1]=(0|cr[B+Q>>0])<<8|0|cr[B+D>>0]),(0|(f=f+1|0))!=(0|v););E=E+1|0}while((0|E)!=(0|m));if(r){D=0<(0|v),J=1^s,M=t?3:2,x=3^s,V=t?5:4,F=5-s|0,R=16+b|0,N=20+b|0,_=24+b|0,Y=28+b|0,Q=32+b|0,G=36+b|0,H=+(65535&l|0),r=65535&u,E=0;do{if(D)if(X=(0|E)/2|0,T=+gA[R>>2],U=+gA[N>>2],S=+gA[_>>2],O=+gA[Y>>2],z=+gA[Q>>2],j=+gA[G>>2],i=0|br(0|ar[g>>2],E),A)for(B=0;e=w+(i+(0|br(B,h)))|0,e=(0|(e=0|ef(H+((W=+((0|cr[e+s>>0])<<8|0|cr[e+J>>0]|0))*T+(I=+((0|cr[e+M>>0])<<8|0|cr[e+x>>0]|0))*U+(C=+((0|cr[e+V>>0])<<8|0|cr[e+F>>0]|0))*S))))<0?0:(0|e)<(0|k)?65535&e:r,f=(0|B)/2|0,q=L+((0|br(0|ar[Z>>2],X))+f<<1)|0,or[q>>1]=e,e=(0|(e=0|ef(H+(W*O+I*z+C*j))))<0?0:(0|e)<(0|k)?65535&e:r,q=K+((0|br(0|ar[p>>2],X))+f<<1)|0,or[q>>1]=e,(0|(B=B+2|0))<(0|v););else for(B=0;e=w+(i+(0|br(B,h)))|0,e=(0|(e=0|ef(H+.8554700016975403*((W=+((0|cr[e+s>>0])<<8|0|cr[e+J>>0]|0))*T+(I=+((0|cr[e+M>>0])<<8|0|cr[e+x>>0]|0))*U+(C=+((0|cr[e+V>>0])<<8|0|cr[e+F>>0]|0))*S))))<0?0:(0|e)<(0|k)?65535&e:r,f=(0|B)/2|0,q=L+((0|br(0|ar[Z>>2],X))+f<<1)|0,or[q>>1]=e,e=(0|(e=0|ef(H+.8554700016975403*(W*O+I*z+C*j))))<0?0:(0|e)<(0|k)?65535&e:r,q=K+((0|br(0|ar[p>>2],X))+f<<1)|0,or[q>>1]=e,(0|(B=B+2|0))<(0|v););E=E+2|0}while((0|E)<(0|m))}}ur=(d||du(P),y)},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0,a=0,c=0,l=0;if(ur=(t=ur)+64|0,n=t+36|0,f=t+48|0,l=t,0==(0|ar[(r|=0)>>2])&&1==(0|ar[r+4>>2])&&8!=(0|(o=0|ar[(a=r+12|0)>>2]))){e=0|ar[r+16>>2];A:do{if(0|e){switch(0|or[e+8>>1]){case 0:case 8:case 11:case 14:break;default:break A}return ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,void(ur=t)}}while(0);return ar[n>>2]=0,ar[(c=4+n|0)>>2]=0,e=(ar[8+n>>2]=0)|tr[(i=r+8|0)>>0],ar[l>>2]=1,ar[l+4>>2]=e<<24>>24?15:14,tr[l+8>>0]=e,ar[l+12>>2]=o,ar[l+16>>2]=0,ar[(e=l+20|0)>>2]=0,gA[l+24>>2]=.5,gA[l+28>>2]=0,r=8+n|(gA[l+32>>2]=0),Nl(n,l),0|(e=0|ar[e>>2])&&du(e),i=0|tr[i>>0],e=0|ar[a>>2],ar[l>>2]=1,ar[l+4>>2]=i<<24>>24?13:12,tr[l+8>>0]=i,tr[(i=l+9|0)>>0]=0|tr[f>>0],tr[i+1>>0]=0|tr[f+1>>0],tr[i+2>>0]=0|tr[f+2>>0],ar[l+12>>2]=e,ar[(e=l+16|0)>>2]=0,ar[(i=l+20|0)>>2]=0,gA[l+24>>2]=.5,gA[l+28>>2]=0,(f=(gA[l+32>>2]=0)|ar[c>>2])>>>0>=(0|ar[r>>2])>>>0?(Nl(n,l),0|(e=0|ar[i>>2])&&du(e)):(ar[f>>2]=ar[l>>2],ar[f+4>>2]=ar[l+4>>2],ar[f+8>>2]=ar[l+8>>2],ar[f+12>>2]=ar[l+12>>2],ar[f+16>>2]=ar[e>>2],ar[f+20>>2]=ar[i>>2],ar[e>>2]=0,l=l+24|(ar[i>>2]=0),ar[(a=f+24|0)>>2]=ar[l>>2],ar[a+4>>2]=ar[l+4>>2],ar[a+8>>2]=ar[l+8>>2],ar[c>>2]=f+36),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[c>>2],ar[A+8>>2]=ar[r>>2],void(ur=t)}ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0,ur=t},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z=0,p=0,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0;if(ur=(g=ur)+64|0,k=g+56|0,h=g+52|0,w=g+48|0,v=g+44|0,m=g+40|0,B=g+20|0,p=g,y=0|ar[(r|=0)>>2],b=0|ar[y+24>>2],s=0|ar[y+28>>2],y=255&(0|Vo(y,0)),d=0|Eo(0|ar[r>>2],6),u=1&(X=15==(1|ar[(f=i+4|0)>>2])),W=X<<31>>31,i=0|hu(80),ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i>>2]=6208,ar[(Z=i+12|0)>>2]=0,ar[Z+4>>2]=0,ar[Z+8>>2]=0,ar[Z+12>>2]=0,ar[Z+16>>2]=0,ar[i+32>>2]=32215,ar[i+36>>2]=0,ar[i+40>>2]=0,ar[i+44>>2]=99,ar[i+48>>2]=99,e=i+52|0,ar[(j=i+72|0)>>2]=0,ar[i+76>>2]=0,ar[e>>2]=0,ar[e+4>>2]=0,ar[e+8>>2]=0,ar[e+12>>2]=0,ar[i+68>>2]=j,ar[A>>2]=Z,j=(ar[A+4>>2]=i)+16|0,bu(i),su(i),e=0|ar[j>>2],ar[Z>>2]=Z,ar[j>>2]=i,0|e&&ku(e),du(i),yo(Z,b,s,1,0|ar[f>>2]),j=d?8:6,Bo(Z,10,b,s,y),d&&Bo(Z,6,b,s,y),ar[k>>2]=0,ar[h>>2]=0,ar[w>>2]=0,ar[v>>2]=0,t=(ar[m>>2]=0)|Fo(Z,10,k),o=0|Ro(0|ar[r>>2],0,h),a=0|Ro(0|ar[r>>2],1,w),c=0|Ro(0|ar[r>>2],2,v),z=d?0|Ro(0|ar[r>>2],6,m):0,f=(l=1<<y)-1|0,Ze(B),O=0|ar[r>>2],e=0|ar[O+40>>2],(n=0==(0|(O=0|ar[O+44>>2])))||bu(O),U=e?(U=0|tr[e+10>>0],pe(p,0|or[e+8>>1],0|or[e+4>>1]),ar[B>>2]=ar[p>>2],ar[B+4>>2]=ar[p+4>>2],ar[B+8>>2]=ar[p+8>>2],ar[B+12>>2]=ar[p+12>>2],ar[B+16>>2]=ar[p+16>>2],U<<24>>24!=0):1,0<(0|s)){S=0<(0|b),D=1<<y+-1,J=B+4|0,M=B+8|0,T=B+12|0,F=B+16|0,R=X?3:2,N=X?5:4,_=W+1|0,Y=W+3|0,Q=W+5|0,V=X?7:6,W=W+7|0,G=255&f,X=(65535&f)>>>8&255,y=0;do{if(S)for(B=(0|y)/2|0,p=0;e=o+(((0|br(0|ar[h>>2],y))/2|0)+p<<1)|0,I=+(0|lr[e>>1]),e=(0|p)/2|0,r=a+(((0|br(0|ar[w>>2],B))/2|0)+e<<1)|0,C=+((0|lr[r>>1])-D|0),e=c+(((0|br(0|ar[v>>2],B))/2|0)+e<<1)|0,E=+((0|lr[e>>1])-D|0),C=U?C:1.142899990081787*C,E=U?E:1.142899990081787*E,A=0<=(0|(e=0|ef((I=U?I:1.1689000129699707*(I+-16))+gA[J>>2]*E)))?(0|e)<(0|l)?(r=255&e,(65535&e)>>>8&255):(r=G,X):r=0,i=0<=(0|(e=0|ef(I+C*gA[M>>2]-E*gA[T>>2])))?(0|e)<(0|l)?(Z=255&e,(65535&e)>>>8&255):(Z=G,X):Z=0,e=0<=(0|(e=0|ef(I+C*gA[F>>2])))?(0|e)<(0|l)?(f=255&e,(65535&e)>>>8&255):(f=G,X):f=0,x=t+(((H=0|br(p,j))|u)+(0|br(0|ar[k>>2],y)))|0,tr[x>>0]=A,A=t+(R+H+(0|br(0|ar[k>>2],y)))|0,tr[A>>0]=i,A=t+(N+H+(0|br(0|ar[k>>2],y)))|0,tr[A>>0]=e,A=t+(_+H+(0|br(0|ar[k>>2],y)))|0,tr[A>>0]=r,r=t+(Y+H+(0|br(0|ar[k>>2],y)))|0,tr[r>>0]=Z,r=t+(Q+H+(0|br(0|ar[k>>2],y)))|0,tr[r>>0]=f,d&&(r=z+(((0|br(0|ar[m>>2],y))/2|0)+p<<1)|0,H=t+((V|(x=p<<3))+(0|br(0|ar[k>>2],y)))|0,tr[H>>0]=(0|lr[r>>1])>>>8,H=z+(((0|br(0|ar[m>>2],y))/2|0)+p<<1)|0,x=t+(W+x+(0|br(0|ar[k>>2],y)))|0,tr[x>>0]=or[H>>1]),(0|(p=p+1|0))!=(0|b););y=y+1|0}while((0|y)!=(0|s))}ur=(n||du(O),g)},function(A,e,r,i,f){var n,t;return A|=0,e|=0,i|=0,f|=0,ur=(t=ur)+48|0,n=t+36|0,e=t,8==(0|(i=0|ar[(r|=0)+12>>2]))||0|ar[r>>2]?(ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0):(ar[n>>2]=0,ar[(f=4+n|0)>>2]=0,r=(ar[8+n>>2]=0)|tr[r+8>>0],ar[e>>2]=1,ar[e+4>>2]=3,tr[e+8>>0]=r,ar[e+12>>2]=i,ar[e+16>>2]=0,ar[(r=e+20|0)>>2]=0,gA[e+24>>2]=.5,gA[e+28>>2]=0,gA[e+32>>2]=0,Nl(n,e),0|(e=0|ar[r>>2])&&du(e),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[f>>2],ar[A+8>>2]=ar[8+n>>2]),void(ur=t)},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0,fA=0,nA=0;if(ur=(W=ur)+80|0,p=W+68|0,y=W+64|0,B=W+60|0,E=W+56|0,X=W+52|0,v=W+48|0,m=W+44|0,g=W+40|0,R=W+20|0,V=W,e=0|ar[(r|=0)>>2],G=0|ar[e+36>>2],F=255&(e=0|Vo(e,0)),i=0|Vo(0|ar[r>>2],1),f=0|Vo(0|ar[r>>2],2),I=(Z=0|Eo(0|ar[r>>2],6))?255&(0|Vo(0|ar[r>>2],6)):0,e<<24>>24==8|i<<24>>24==8|f<<24>>24==8)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=W);if(e<<24>>24!=i<<24>>24||e<<24>>24!=f<<24>>24)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=W);if(e=0|ar[r>>2],C=0|ar[e+40>>2],(w=0==(0|(h=0|ar[e+44>>2])))||(bu(h),e=0|ar[r>>2]),k=0|ar[e+24>>2],d=0|ar[e+28>>2],i=0|hu(80),ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i>>2]=6208,ar[(f=i+12|0)>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f+12>>2]=0,ar[f+16>>2]=0,ar[i+32>>2]=32215,ar[i+36>>2]=0,ar[i+40>>2]=0,ar[i+44>>2]=99,ar[i+48>>2]=99,nA=i+52|0,ar[(fA=i+72|0)>>2]=0,ar[i+76>>2]=0,ar[nA>>2]=0,ar[nA+4>>2]=0,ar[nA+8>>2]=0,ar[nA+12>>2]=0,ar[i+68>>2]=fA,fA=f,iA=(nA=i)+16|0,bu(i),su(i),e=0|ar[iA>>2],ar[f>>2]=fA,ar[iA>>2]=nA,0|e&&ku(e),du(i),yo(f,k,d,1,3),Bo(f,3,k,d,F),Bo(f,4,k,d,F),Bo(f,5,k,d,F),Z&&Bo(f,6,k,d,I),ar[p>>2]=0,ar[y>>2]=0,ar[B>>2]=0,ar[E>>2]=0,ar[X>>2]=0,ar[v>>2]=0,ar[m>>2]=0,c=(ar[g>>2]=0)|Ro(0|ar[r>>2],0,p),l=0|Ro(0|ar[r>>2],1,y),u=0|Ro(0|ar[r>>2],2,B),b=0|Fo(f,3,X),s=0|Fo(f,4,v),iA=0|Fo(f,5,m),eA=Z?(rA=0|Ro(0|ar[r>>2],6,E),0|Fo(f,6,g)):rA=0,o=(t=1<<F)-1|0,a=(255&(0|go(G)))-1|0,n=(255&(0|Zo(G)))-1|0,ar[p>>2]=(0|ar[p>>2])/2|0,ar[y>>2]=(0|ar[y>>2])/2|0,ar[B>>2]=(0|ar[B>>2])/2|0,ar[E>>2]=(0|ar[E>>2])/2|0,ar[X>>2]=(0|ar[X>>2])/2|0,ar[v>>2]=(0|ar[v>>2])/2|0,ar[m>>2]=(0|ar[m>>2])/2|0,ar[g>>2]=(0|ar[g>>2])/2|0,Ze(R),C?(e=0|or[C+8>>1],K=0|tr[C+10>>0],pe(V,e,0|or[C+4>>1]),ar[R>>2]=ar[V>>2],ar[R+4>>2]=ar[V+4>>2],ar[R+8>>2]=ar[V+8>>2],ar[R+12>>2]=ar[V+12>>2],ar[R+16>>2]=ar[V+16>>2],K=K<<24>>24!=0,e&=65535):(K=1,e=2),0<(0|d)){q=0<(0|k),$=k<<1,AA=0==(0|e),L=8==(0|e),j=1<<F+-1&65535,H=R+4|0,x=R+8|0,P=R+12|0,F=R+16|0,G=0;do{if(q){D=G>>n,R=0|br(0|ar[y>>2],D),Q=0|br(0|ar[p>>2],G),D=0|br(0|ar[B>>2],D),J=0|br(0|ar[X>>2],G),M=0|br(0|ar[m>>2],G),T=0|br(0|ar[v>>2],G),U=+gA[H>>2],S=+gA[x>>2],O=+gA[P>>2],z=+gA[F>>2],V=0;do{C=R+(e=V>>a)|0,r=Q+V|0,e=0|or[u+(D+e<<1)>>1];do{if(AA){if(i=M+V|0,f=J+V|0,I=T+V|0,K){or[b+(f<<1)>>1]=e,or[s+(I<<1)>>1]=0|or[c+(r<<1)>>1],e=0|or[l+(C<<1)>>1];break}or[b+(f<<1)>>1]=16+((128+(219*(65535&e)|0)|0)>>>8),or[s+(I<<1)>>1]=16+((128+(219*(0|lr[c+(r<<1)>>1])|0)|0)>>>8),e=16+((128+(219*(0|lr[l+(C<<1)>>1])|0)|0)>>>8)&65535;break}if(f=(65535&e)-j|0,i=0|or[c+(r<<1)>>1],e=(0|lr[l+(C<<1)>>1])-j|0,L){r=(i=(C=65535&i)-e|0)+f|0,or[b+(J+V<<1)>>1]=(0|r)<0?0:255<(0|r)?255:255&r,e=C+e|0,or[s+(T+V<<1)>>1]=(0|e)<0?0:255<(0|e)?255:255&e,e=(0|(e=i-f|0))<0?0:255<(0|e)?255:255&e,i=M+V|0;break}_=+(65535&i),Y=+(0|e),N=+(0|f),Y=K?Y:1.142899990081787*Y,e=(0|(e=0|ef((_=K?_:1.1689000129699707*(_+-16))+(N=K?N:1.142899990081787*N)*U)))<0?0:65535&((0|e)<(0|t)?e:o),or[b+(J+V<<1)>>1]=e,e=(0|(e=0|ef(_+Y*S+N*O)))<0?0:65535&((0|e)<(0|t)?e:o),or[s+(T+V<<1)>>1]=e,e=(0|(e=0|ef(_+Y*z)))<0?0:65535&((0|e)<(0|t)?e:o),i=M+V|0}while(0);or[iA+(i<<1)>>1]=e,V=V+1|0}while((0|V)!=(0|k))}Z&&hb(0|(T=eA+((0|br(0|ar[g>>2],G))<<1)|0),rA+((0|br(0|ar[E>>2],G))<<1)|0,0|$),G=G+1|0}while((0|G)!=(0|d))}ar[A>>2]=fA,ar[A+4>>2]=nA,ur=(w||du(h),W)},function(A,e,r,i,f){var n;return A|=0,e|=0,i|=0,f|=0,ur=(n=ur)+48|0,f=n+36|0,e=n,8!=(0|ar[(r|=0)+12>>2])||0|ar[r>>2]?(ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0):(ar[f>>2]=0,ar[(i=f+4|0)>>2]=0,r=(ar[f+8>>2]=0)|tr[r+8>>0],ar[e>>2]=1,ar[e+4>>2]=3,tr[e+8>>0]=r,ar[e+12>>2]=8,ar[e+16>>2]=0,ar[(r=e+20|0)>>2]=0,gA[e+24>>2]=.5,gA[e+28>>2]=0,gA[e+32>>2]=0,Nl(f,e),0|(e=0|ar[r>>2])&&du(e),ar[A>>2]=ar[f>>2],ar[A+4>>2]=ar[i>>2],ar[A+8>>2]=ar[f+8>>2]),void(ur=n)},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y,B,E,X,W,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0;if(ur=(W=ur)+80|0,p=W+68|0,y=W+64|0,B=W+60|0,E=W+56|0,X=W+52|0,v=W+48|0,m=W+44|0,g=W+40|0,Y=W+20|0,V=W,e=0|ar[(r|=0)>>2],G=0|ar[e+36>>2],_=255&(e=0|Vo(e,0)),i=0|Vo(0|ar[r>>2],1),f=0|Vo(0|ar[r>>2],2),I=(Z=0|Eo(0|ar[r>>2],6))?255&(0|Vo(0|ar[r>>2],6)):0,e<<24>>24!=8|i<<24>>24!=8|f<<24>>24!=8)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=W);if(e=0|ar[r>>2],C=0|ar[e+40>>2],(w=0==(0|(h=0|ar[e+44>>2])))||(bu(h),e=0|ar[r>>2]),k=0|ar[e+24>>2],d=0|ar[e+28>>2],i=0|hu(80),ar[i+4>>2]=0,ar[i+8>>2]=0,ar[i>>2]=6208,ar[(f=i+12|0)>>2]=0,ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f+12>>2]=0,ar[f+16>>2]=0,ar[i+32>>2]=32215,ar[i+36>>2]=0,ar[i+40>>2]=0,ar[i+44>>2]=99,ar[i+48>>2]=99,P=i+52|0,ar[(x=i+72|0)>>2]=0,ar[i+76>>2]=0,ar[P>>2]=0,ar[P+4>>2]=0,ar[P+8>>2]=0,ar[P+12>>2]=0,ar[i+68>>2]=x,x=f,H=(P=i)+16|0,bu(i),su(i),e=0|ar[H>>2],ar[f>>2]=x,ar[H>>2]=P,0|e&&ku(e),du(i),yo(f,k,d,1,3),Bo(f,3,k,d,_),Bo(f,4,k,d,_),Bo(f,5,k,d,_),Z&&Bo(f,6,k,d,I),ar[p>>2]=0,ar[y>>2]=0,ar[B>>2]=0,ar[E>>2]=0,ar[X>>2]=0,ar[v>>2]=0,ar[m>>2]=0,c=(ar[g>>2]=0)|Ro(0|ar[r>>2],0,p),l=0|Ro(0|ar[r>>2],1,y),u=0|Ro(0|ar[r>>2],2,B),b=0|Fo(f,3,X),s=0|Fo(f,4,v),H=0|Fo(f,5,m),z=Z?(j=0|Ro(0|ar[r>>2],6,E),0|Fo(f,6,g)):j=0,o=(t=1<<_)-1|0,a=(255&(0|go(G)))-1|0,n=(255&(0|Zo(G)))-1|0,Ze(Y),C?(e=0|or[C+8>>1],T=0|tr[C+10>>0],pe(V,e,0|or[C+4>>1]),ar[Y>>2]=ar[V>>2],ar[Y+4>>2]=ar[V+4>>2],ar[Y+8>>2]=ar[V+8>>2],ar[Y+12>>2]=ar[V+12>>2],ar[Y+16>>2]=ar[V+16>>2],T=T<<24>>24!=0,e&=65535):(T=1,e=2),0<(0|d)){U=0<(0|k),S=k<<1,O=0==(0|e),M=8==(0|e),Q=1<<_+-1&65535,D=Y+4|0,J=Y+8|0,_=Y+12|0,G=Y+16|0,r=0;do{if(U){V=r>>n,C=0;do{i=C>>a,f=u+((0|br(0|ar[B>>2],V))+i)|0,f=0|tr[f>>0];do{if(O){if(e=(0|br(0|ar[X>>2],r))+C|0,T){tr[b+e>>0]=f,Y=c+((0|br(0|ar[p>>2],r))+C)|0,e=s+((0|br(0|ar[v>>2],r))+C)|0,tr[e>>0]=0|tr[Y>>0],e=l+((0|br(0|ar[y>>2],V))+i)|0,e=0|tr[e>>0];break}tr[b+e>>0]=16+((128+(219*(255&f)|0)|0)>>>8),Y=c+((0|br(0|ar[p>>2],r))+C)|0,e=s+((0|br(0|ar[v>>2],r))+C)|0,tr[e>>0]=16+((128+(219*(0|cr[Y>>0])|0)|0)>>>8),e=l+((0|br(0|ar[y>>2],V))+i)|0,e=16+((128+(219*(0|cr[e>>0])|0)|0)>>>8)&255;break}if(e=0|br(0|ar[y>>2],V),I=c+((0|br(0|ar[p>>2],r))+C)|0,I=0|tr[I>>0],i=(0|cr[l+(e+i)>>0])-Q|0,e=(255&f)-Q|0,M){L=(Y=(f=255&I)-i|0)+e|0,I=b+((0|br(0|ar[X>>2],r))+C)|0,tr[I>>0]=(0|L)<0?0:255<(0|L)?-1:255&L,f=i+f|0,I=s+((0|br(0|ar[v>>2],r))+C)|0,tr[I>>0]=(0|f)<0?0:255<(0|f)?-1:255&f,e=(0|(e=Y-e|0))<0?0:255<(0|e)?-1:255&e;break}R=+(255&I),N=+(0|i),F=+(0|e),N=T?N:1.142899990081787*N,e=(0|(e=0|ef((R=T?R:1.1689000129699707*(R+-16))+(F=T?F:1.142899990081787*F)*gA[D>>2])))<0?0:255&((0|e)<(0|t)?e:o),L=b+((0|br(0|ar[X>>2],r))+C)|0,tr[L>>0]=e,e=(0|(e=0|ef(R+N*gA[J>>2]+F*gA[_>>2])))<0?0:255&((0|e)<(0|t)?e:o),L=s+((0|br(0|ar[v>>2],r))+C)|0,tr[L>>0]=e,e=(0|(e=0|ef(R+N*gA[G>>2])))<0?0:255&((0|e)<(0|t)?e:o)}while(0);L=H+((0|br(0|ar[m>>2],r))+C)|0,tr[L>>0]=e,C=C+1|0}while((0|C)!=(0|k))}Z&&hb(0|(L=z+(0|br(0|ar[g>>2],r))|0),j+(0|br(0|ar[E>>2],r))|0,0|S),r=r+1|0}while((0|r)!=(0|d))}ar[A>>2]=x,ar[A+4>>2]=P,ur=(w||du(h),W)},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0;return ur=(t=ur)+48|0,n=t+36|0,e=t,8==(0|ar[(r|=0)+12>>2])&&1==(0|ar[r>>2])&&3==(0|ar[r+4>>2])?(ar[n>>2]=0,ar[(f=4+n|0)>>2]=0,o=(ar[8+n>>2]=0)|ar[i+4>>2],i=0|tr[r+8>>0],ar[e>>2]=0,ar[e+4>>2]=o,tr[e+8>>0]=i,ar[e+12>>2]=8,ar[e+16>>2]=0,ar[(i=e+20|0)>>2]=0,gA[e+24>>2]=.75,gA[e+28>>2]=.5,gA[e+32>>2]=0,Nl(n,e),0|(e=0|ar[i>>2])&&du(e),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[f>>2],ar[A+8>>2]=ar[8+n>>2]):(ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0),void(ur=t)},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0;if(ur=(p=ur)+112|0,w=p+108|0,v=p+104|0,T=p+100|0,Z=p+96|0,F=p+92|0,b=p+88|0,s=p+84|0,m=p+80|0,Y=p+40|0,X=p,U=0|ar[(r|=0)>>2],g=0|ar[U+24>>2],U=0|ar[U+28>>2],d=255&(0|go(f=0|ar[i+4>>2])),k=255&(0|Zo(f)),E=255&(O=0|Vo(0|ar[r>>2],3)),O<<24>>24!=8)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=p);if((h=0|Eo(0|ar[r>>2],6))&&(0|Vo(0|ar[r>>2],6))<<24>>24!=8)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=p);if(y=0|hu(80),ar[y+4>>2]=0,ar[y+8>>2]=0,ar[y>>2]=6208,ar[(B=y+12|0)>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,ar[B+12>>2]=0,ar[B+16>>2]=0,ar[y+32>>2]=32215,ar[y+36>>2]=0,ar[y+40>>2]=0,ar[y+44>>2]=99,ar[y+48>>2]=99,O=y+52|0,ar[(S=y+72|0)>>2]=0,ar[y+76>>2]=0,ar[O>>2]=0,ar[O+4>>2]=0,ar[O+8>>2]=0,ar[O+12>>2]=0,ar[y+68>>2]=S,S=B,M=(O=y)+16|0,bu(y),su(y),e=0|ar[M>>2],ar[B>>2]=S,ar[M>>2]=O,0|e&&ku(e),du(y),yo(B,g,U,0,f),J=(g-1+d|0)/(0|d)|0,M=(U+-1+k|0)/(0|k)|0,Bo(B,0,g,U,E),Bo(B,1,J,M,E),Bo(B,2,J,M,E),h&&Bo(B,6,g,U,E),ar[w>>2]=0,ar[v>>2]=0,ar[T>>2]=0,ar[Z>>2]=0,ar[F>>2]=0,ar[b>>2]=0,ar[s>>2]=0,c=(ar[m>>2]=0)|Ro(0|ar[r>>2],3,w),l=0|Ro(0|ar[r>>2],4,v),u=0|Ro(0|ar[r>>2],5,T),G=0|Fo(B,0,F),J=0|Fo(B,1,b),M=0|Fo(B,2,s),Q=h?(D=0|Ro(0|ar[r>>2],6,Z),0|Fo(B,6,m)):D=0,n=1<<E+-1,a=(o=1<<E)-1|0,Be(Y),e=0|ar[i+16>>2])for(r=0|tr[e+10>>0],ye(X,y=0|or[e+8>>1],0|or[e+4>>1]),r=r<<24>>24!=0,y&=65535,e=X,f=(B=Y)+40|0;ar[B>>2]=ar[e>>2],e=e+4|0,(0|(B=B+4|0))<(0|f););else y=2,r=1;if(t=0<(0|U)){E=0<(0|g),i=0==(0|y),X=Y+4|0,I=Y+8|0,C=Y+12|0,B=0;do{A:do{if(E){if(i)f=0;else for(f=0;;)if(_=l+((0|br(0|ar[v>>2],B))+f)|0,N=c+((0|br(0|ar[w>>2],B))+f)|0,e=u+((0|br(0|ar[T>>2],B))+f)|0,V=(0|cr[N>>0])*gA[X>>2]+(0|cr[_>>0])*gA[I>>2]+(0|cr[e>>0])*gA[C>>2],e=(0|(e=0|ef(r?V:219*V*.00390625+16)))<0?0:255&((0|e)<(0|o)?e:a),_=G+((0|br(0|ar[F>>2],B))+f)|0,tr[_>>0]=e,(0|(f=f+1|0))==(0|g))break A;for(;e=l+((0|br(0|ar[v>>2],B))+f)|0,e=0|tr[e>>0],r||(e=(0|(e=0|ef(219*(255&e)*.00390625+16)))<0?0:255&((0|e)<(0|o)?e:a)),_=G+((0|br(0|ar[F>>2],B))+f)|0,tr[_>>0]=e,(0|(f=f+1|0))!=(0|g););}}while(0);B=B+1|0}while((0|B)!=(0|U));if(t){_=0<(0|g),I=0==(0|y),C=Y+16|0,G=Y+20|0,F=Y+24|0,R=Y+28|0,N=Y+32|0,X=Y+36|0,V=+(65535&n|0),i=0;do{if(_)for(E=0;e=I?(e=u+((0|br(0|ar[T>>2],i))+E)|0,e=0|tr[e>>0],y=(e=r?(y=(0|i)/(0|k)|0,f=(0|E)/(0|d)|0,Y=J+((0|br(0|ar[b>>2],y))+f)|0,tr[Y>>0]=e,e=c+((0|br(0|ar[T>>2],i))+E)|0,0|tr[e>>0]):(e=(0|(e=0|ef(219*(255&e)*.00390625+16)))<0?0:255&((0|e)<(0|o)?e:a),y=(0|i)/(0|k)|0,f=(0|E)/(0|d)|0,Y=J+((0|br(0|ar[b>>2],y))+f)|0,tr[Y>>0]=e,e=c+((0|br(0|ar[T>>2],i))+E)|0,(0|(e=0|ef(219*(0|cr[e>>0])*.00390625+16)))<0?0:255&((0|e)<(0|o)?e:a)),0|br(0|ar[b>>2],y)),B=e,y+f|0):(e=c+((0|br(0|ar[w>>2],i))+E)|0,x=+(0|cr[e>>0]),e=l+((0|br(0|ar[v>>2],i))+E)|0,H=+(0|cr[e>>0]),e=u+((0|br(0|ar[T>>2],i))+E)|0,W=+(0|cr[e>>0]),z=224*(j=x*gA[C>>2]+H*gA[G>>2]+W*gA[F>>2])*.00390625,W=r?x*gA[R>>2]+H*gA[N>>2]+W*gA[X>>2]:224*z*.00390625,e=(0|(e=0|ef(V+(r?j:z))))<0?0:255&((0|e)<(0|o)?e:a),f=(0|i)/(0|k)|0,y=(0|E)/(0|d)|0,Y=J+((0|br(0|ar[b>>2],f))+y)|0,tr[Y>>0]=e,B=e=(0|(e=0|ef(V+W)))<0?0:255&((0|e)<(0|o)?e:a),(0|br(0|ar[s>>2],f))+y|0),tr[M+e>>0]=B,(0|(E=E+d|0))<(0|g););i=i+k|0}while((0|i)<(0|U));if(h&t)for(e=0;hb(0|(T=Q+(0|br(0|ar[m>>2],e))|0),D+(0|br(0|ar[Z>>2],e))|0,0|g),(0|(e=e+1|0))!=(0|U););}}ar[A>>2]=S,ar[A+4>>2]=O,ur=p},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o=0,a=0;return ur=(t=ur)+48|0,n=t+36|0,e=t,8!=(0|(f=0|ar[(r|=0)+12>>2]))&&1==(0|ar[r>>2])&&3==(0|ar[r+4>>2])?(ar[n>>2]=0,ar[(o=4+n|0)>>2]=0,a=(ar[8+n>>2]=0)|ar[i+4>>2],i=0|tr[r+8>>0],ar[e>>2]=0,ar[e+4>>2]=a,tr[e+8>>0]=i,ar[e+12>>2]=f,ar[e+16>>2]=0,ar[(i=e+20|0)>>2]=0,gA[e+24>>2]=.75,gA[e+28>>2]=.5,gA[e+32>>2]=0,Nl(n,e),0|(e=0|ar[i>>2])&&du(e),ar[A>>2]=ar[n>>2],ar[A+4>>2]=ar[o>>2],ar[A+8>>2]=ar[8+n>>2]):(ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=0),void(ur=t)},function(A,e,r,i,f){A|=0,e|=0,i|=0,f|=0;var n,t,o,a,c,l,u,b,s,d,k,h,w,v,m,g,Z,p,y=0,B=0,E=0,X=0,W=0,I=0,C=0,G=0,V=0,F=0,R=0,N=0,_=0,Y=0,Q=0,D=0,J=0,M=0,T=0,U=0,S=0,O=0,z=0,j=0,H=0,x=0,P=0,L=0,K=0,q=0,$=0,AA=0,eA=0,rA=0,iA=0;if(ur=(p=ur)+112|0,o=p+108|0,a=p+104|0,n=p+100|0,Z=p+96|0,V=p+92|0,t=p+88|0,H=p+84|0,g=p+80|0,l=p+40|0,X=p,eA=0|ar[(r|=0)>>2],w=0|ar[eA+24>>2],eA=0|ar[eA+28>>2],v=255&(0|go(y=0|ar[i+4>>2])),m=255&(0|Zo(y)),E=255&(e=0|Vo(0|ar[r>>2],3)),e<<24>>24==8)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=p);if((q=0|Eo(0|ar[r>>2],6))&&(0|Vo(0|ar[r>>2],6))<<24>>24!=e<<24>>24)return ar[A>>2]=0,ar[A+4>>2]=0,void(ur=p);if(f=0|hu(80),ar[f+4>>2]=0,ar[f+8>>2]=0,ar[f>>2]=6208,ar[(B=f+12|0)>>2]=0,ar[B+4>>2]=0,ar[B+8>>2]=0,ar[B+12>>2]=0,ar[B+16>>2]=0,ar[f+32>>2]=32215,ar[f+36>>2]=0,ar[f+40>>2]=0,ar[f+44>>2]=99,ar[f+48>>2]=99,AA=f+52|0,ar[($=f+72|0)>>2]=0,ar[f+76>>2]=0,ar[AA>>2]=0,ar[AA+4>>2]=0,ar[AA+8>>2]=0,ar[AA+12>>2]=0,ar[f+68>>2]=$,$=B,K=(AA=f)+16|0,bu(f),su(f),e=0|ar[K>>2],ar[B>>2]=$,ar[K>>2]=AA,0|e&&ku(e),du(f),yo(B,w,eA,0,y),L=(w-1+v|0)/(0|v)|0,K=(eA+-1+m|0)/(0|m)|0,Bo(B,0,w,eA,E),Bo(B,1,L,K,E),Bo(B,2,L,K,E),q&&Bo(B,6,w,eA,E),ar[o>>2]=0,ar[a>>2]=0,ar[n>>2]=0,ar[Z>>2]=0,ar[V>>2]=0,ar[t>>2]=0,ar[H>>2]=0,d=(ar[g>>2]=0)|Ro(0|ar[r>>2],3,o),k=0|Ro(0|ar[r>>2],4,a),h=0|Ro(0|ar[r>>2],5,n),J=0|Fo(B,0,V),L=0|Fo(B,1,t),K=0|Fo(B,2,H),x=q?(P=0|Ro(0|ar[r>>2],6,Z),0|Fo(B,6,g)):P=0,ar[o>>2]=(0|ar[o>>2])/2|0,ar[a>>2]=(0|ar[a>>2])/2|0,ar[n>>2]=(0|ar[n>>2])/2|0,ar[Z>>2]=(0|ar[Z>>2])/2|0,ar[V>>2]=(0|ar[V>>2])/2|0,ar[t>>2]=(0|ar[t>>2])/2|0,ar[H>>2]=(0|ar[H>>2])/2|0,ar[g>>2]=(0|ar[g>>2])/2|0,c=1<<E+-1,s=(b=1<<E)-1|0,Be(l),e=0|ar[i+16>>2])for(r=0|tr[e+10>>0],ye(X,y=0|or[e+8>>1],0|or[e+4>>1]),r=r<<24>>24!=0,y&=65535,e=X,f=(B=l)+40|0;ar[B>>2]=ar[e>>2],e=e+4|0,(0|(B=B+4|0))<(0|f););else y=2,r=1;if(u=0<(0|eA)){_=0<(0|w),Y=0==(0|y),Q=0|ar[a>>2],X=0|ar[V>>2],V=0|ar[o>>2],F=0|ar[n>>2],W=+gA[4+l>>2],I=+gA[8+l>>2],C=+gA[12+l>>2],i=0;do{A:do{if(_){if(R=0|br(Q,i),N=0|br(X,i),B=0|br(V,i),E=0|br(F,i),Y)f=0;else for(f=0;;)if(z=(0|lr[d+(B+f<<1)>>1])*W+(0|lr[k+(R+f<<1)>>1])*I+(0|lr[h+(E+f<<1)>>1])*C,e=(0|(e=0|ef(r?z:219*z*.00390625+16)))<0?0:65535&((0|e)<(0|b)?e:s),or[J+(N+f<<1)>>1]=e,(0|(f=f+1|0))==(0|w))break A;for(;e=0|or[k+(R+f<<1)>>1],r||(e=(0|(e=0|ef(219*(65535&e)*.00390625+16)))<0?0:65535&((0|e)<(0|b)?e:s)),or[J+(N+f<<1)>>1]=e,(0|(f=f+1|0))!=(0|w););}}while(0);i=i+1|0}while((0|i)!=(0|eA));if(u){j=0<(0|w),J=0==(0|y),Q=0|ar[n>>2],Y=0|ar[t>>2],_=0|ar[o>>2],N=0|ar[a>>2],T=+gA[16+l>>2],U=+gA[20+l>>2],S=+gA[24+l>>2],O=+gA[28+l>>2],z=+gA[32+l>>2],M=+gA[36+l>>2],D=+(65535&c|0),X=0|ar[H>>2],i=0;do{if(j)for(V=0|br(Q,i),F=0|br(_,i),R=0|br(N,i),E=0;e=0|or[h+((f=V+E|0)<<1)>>1],e=J?(e=r?(y=0|br(Y,(0|i)/(0|m)|0),or[L+(y+(H=(0|E)/(0|v)|0)<<1)>>1]=e,f=0|or[d+(f<<1)>>1],H):(e=(0|(e=0|ef(219*(65535&e)*.00390625+16)))<0?0:65535&((0|e)<(0|b)?e:s),y=0|br(Y,(0|i)/(0|m)|0),or[L+(y+(B=(0|E)/(0|v)|0)<<1)>>1]=e,f=(0|(e=0|ef(219*(0|lr[d+(f<<1)>>1])*.00390625+16)))<0?0:65535&((0|e)<(0|b)?e:s),B),y+e|0):(I=224*(iA=(C=+(0|lr[d+(F+E<<1)>>1]))*T+(G=+(0|lr[k+(R+E<<1)>>1]))*U+(W=+(65535&e))*S)*.00390625,e=(0|(e=0|ef(D+(r?iA:I))))<0?0:65535&((0|e)<(0|b)?e:s),B=(0|E)/(0|v)|0,H=L+((0|br(Y,y=(0|i)/(0|m)|0))+B<<1)|0,or[H>>1]=e,f=e=(0|(e=0|ef(D+(r?C*O+G*z+W*M:224*I*.00390625))))<0?0:65535&((0|e)<(0|b)?e:s),(0|br(X,y))+B|0),or[K+(e<<1)>>1]=f,(0|(E=E+v|0))<(0|w););i=i+m|0}while((0|i)<(0|eA))}}if(q&&(rA=w<<1,u))for(e=0;hb(0|(q=x+((0|br(0|ar[g>>2],e))<<1)|0),P+((0|br(0|ar[Z>>2],e))<<1)|0,0|rA),(0|(e=e+1|0))!=(0|eA););ar[A>>2]=$,ar[A+4>>2]=AA,ur=p},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n=0;do{if(0|xu(A,0|ar[e+8>>2]))Lu(0,e,r,i);else if(0|xu(A,0|ar[e>>2])){if(A=e+32|0,(0|ar[e+16>>2])!=(0|r)&&(0|ar[(n=e+20|0)>>2])!=(0|r)){ar[A>>2]=i,ar[n>>2]=r,ar[(i=e+40|0)>>2]=1+(0|ar[i>>2]),1==(0|ar[e+36>>2])&&2==(0|ar[e+24>>2])&&(tr[e+54>>0]=1),ar[e+44>>2]=4;break}1==(0|i)&&(ar[A>>2]=1)}}while(0)},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n=0,t=0,o=0,a=0;do{if(0|xu(A,0|ar[e+8>>2]))Lu(0,e,r,i);else{if(n=A+8|0,!(0|xu(A,0|ar[e>>2]))){o=0|ar[n>>2],os[63&ar[24+(0|ar[o>>2])>>2]](o,e,r,i,f);break}if(A=e+32|0,(0|ar[e+16>>2])!=(0|r)&&(0|ar[(t=e+20|0)>>2])!=(0|r)){if(ar[A>>2]=i,4==(0|ar[(i=e+44|0)>>2]))break;tr[(A=e+52|0)>>0]=0,n=(tr[(a=e+53|0)>>0]=0)|ar[n>>2],as[15&ar[20+(0|ar[n>>2])>>2]](n,e,r,r,1,f),0|tr[a>>0]?0|tr[A>>0]?A=3:(A=3,o=11):(A=4,o=11),11==(0|o)&&(ar[t>>2]=r,ar[(a=e+40|0)>>2]=1+(0|ar[a>>2]),1==(0|ar[e+36>>2])&&2==(0|ar[e+24>>2])&&(tr[e+54>>0]=1)),ar[i>>2]=A;break}1==(0|i)&&(ar[A>>2]=1)}}while(0)},function(A,e,r,i,f){A|=0,e|=0,r|=0,i|=0,f|=0;var n=0,t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0,d=0,k=0,h=0;A:do{if(0|xu(A,0|ar[e+8>>2]))Lu(0,e,r,i);else{if(t=A+12|0,d=e+24|0,k=e+36|0,h=e+54|0,b=A+8|0,l=A+16|0,!(0|xu(A,0|ar[e>>2]))){if(o=A+16+((s=0|ar[t>>2])<<3)|0,rb(l,e,r,i,f),n=A+24|0,(0|s)<=1)break;if(0==(2&(t=0|ar[b>>2])|0)&&1!=(0|ar[k>>2])){if(!(1&t))for(;;){if(0|tr[h>>0])break A;if(1==(0|ar[k>>2]))break A;if(rb(n,e,r,i,f),o>>>0<=(n=n+8|0)>>>0)break A}for(;;){if(0|tr[h>>0])break A;if(1==(0|ar[k>>2])&&1==(0|ar[d>>2]))break A;if(rb(n,e,r,i,f),o>>>0<=(n=n+8|0)>>>0)break A}}for(;;){if(0|tr[h>>0])break A;if(rb(n,e,r,i,f),o>>>0<=(n=n+8|0)>>>0)break A}}if(n=e+32|0,(0|ar[e+16>>2])!=(0|r)&&(0|ar[(s=e+20|0)>>2])!=(0|r)){if(ar[n>>2]=i,4==(0|ar[(u=e+44|0)>>2]))break;i=A+16+(ar[t>>2]<<3)|0,a=e+52|0,c=e+53|0,A=l,o=n=0;e:for(;;){if(i>>>0<=A>>>0){t=18;break}if(tr[a>>0]=0,tr[c>>0]=0,eb(A,e,r,r,1,f),0|tr[h>>0]){t=18;break}do{if(0|tr[c>>0]){if(!(0|tr[a>>0])){if(1&ar[b>>2]){n=1,t=o;break}n=1,t=18;break e}if(1==(0|ar[d>>2])){t=23;break e}if(!(2&ar[b>>2])){t=23;break e}t=n=1}else t=o}while(0);A=A+8|0,o=t}do{if(18==(0|t)){if(!o&&(ar[s>>2]=r,ar[(r=e+40|0)>>2]=1+(0|ar[r>>2]),1==(0|ar[k>>2]))&&2==(0|ar[d>>2])){if(tr[h>>0]=1,n){t=23;break}n=4;break}n?t=23:n=4}}while(0);23==(0|t)&&(n=3),ar[u>>2]=n;break}1==(0|i)&&(ar[n>>2]=1)}}while(0)},function(A,e,r,i,f){A|=0,e|=0,r|=0,f|=0;var n,t,o=0,a=0,c=0,l=0,u=0;if(!((0|(i|=0))<=0)){t=255+(n=1<<f)|0,f=0;do{for(a=0|br(f,e),c=0|br(f,i),o=0;u=(0|cr[(l=A+(o+a)|0)>>0])+(0|ar[r+(o+c<<2)>>2])|0,tr[l>>0]=(0|u)<0?0:255&((0|u)<(0|n)?u:t),(0|(o=o+1|0))!=(0|i););f=f+1|0}while((0|f)!=(0|i))}},function(A,e,r,i,f){A|=0,e|=0,r|=0,f|=0;var n,t,o=0,a=0,c=0,l=0,u=0;if(!((0|(i|=0))<=0)){t=65535+(n=1<<f)|0,f=0;do{for(a=0|br(f,e),c=0|br(f,i),o=0;u=(0|lr[(l=A+(o+a<<1)|0)>>1])+(0|ar[r+(o+c<<2)>>2])|0,or[l>>1]=(0|u)<0?0:65535&((0|u)<(0|n)?u:t),(0|(o=o+1|0))!=(0|i););f=f+1|0}while((0|f)!=(0|i))}},function(A,e,r,i,f){A|=0,e|=0,i|=0;var n,t=0,o=0,a=0,c=0,l=0;if(n=1<<(f|=0)+-1,0<(0|(r|=0))){a=0;do{for(c=0|br(a,r),o=t=0;o=((or[e+((l=t+c|0)<<1)>>1]<<i)+n>>f)+o|0,ar[A+(l<<2)>>2]=o,(0|(t=t+1|0))!=(0|r););a=a+1|0}while((0|a)!=(0|r))}},function(A,e,r,i,f){A|=0,e|=0,i|=0;var n,t=0,o=0,a=0,c=0;if(n=1<<(f|=0)+-1,0<(0|(r|=0))){a=0;do{for(o=t=0;c=(0|br(t,r))+a|0,o=((or[e+(c<<1)>>1]<<i)+n>>f)+o|0,ar[A+(c<<2)>>2]=o,(0|(t=t+1|0))!=(0|r););a=a+1|0}while((0|a)!=(0|r))}},function(A,e,r,i,f){A|=0,e|=0,i|=0;var n,t=0,o=0,a=0,c=0;if(n=1<<(f|=0)+-1,0<(0|(r|=0))){o=0;do{for(a=0|br(o,r),t=0;ar[A+((c=t+a|0)<<2)>>2]=(or[e+(c<<1)>>1]<<i)+n>>f,(0|(t=t+1|0))!=(0|r););o=o+1|0}while((0|o)!=(0|r))}},Jb,Jb,Jb,Jb,Jb,Jb,Jb,Jb,Jb,Jb,Jb,Jb,Jb,Jb,Jb],as=[Mb,function(A,e,r,i,f,n){A|=0,r|=0,i|=0,f|=0,n|=0;var t,o=0,a=0,c=0,l=0,u=0;l=(a=0|ar[(o=(e|=0)+44|0)>>2])>>>0<(c=u=0|ar[(t=e+24|0)>>2])>>>0?(ar[o>>2]=u,c):a,a=24&n;A:do{if(0==(0|a)||1==(0|f)&24==(0|a))o=a=-1;else{e:do{switch(0|f){case 0:a=o=0;break;case 1:if(8&n){a=((0|(o=a=(0|ar[e+12>>2])-(0|ar[e+8>>2])|0))<0)<<31>>31;break e}a=((0|(o=a=c-(0|ar[e+20>>2])|0))<0)<<31>>31;break e;case 2:(0|tr[(o=e+32|0)+11>>0])<0&&(o=0|ar[o>>2]),a=((0|(o=a=l-o|0))<0)<<31>>31;break;default:o=a=-1;break A}}while(0);if(a=0|tb(0|o,0|a,0|r,0|i),0<=(0|(o=D)))if((0|tr[(c=e+32|0)+11>>0])<0&&(c=0|ar[c>>2]),(0|(r=((0|(i=l-c|0))<0)<<31>>31))<(0|o)|(0|r)==(0|o)&i>>>0<a>>>0)o=a=-1;else{if(c=8&n,!(0==(0|a)&0==(0|o))){if(0|c&&0==(0|ar[e+12>>2])){o=a=-1;break}if(0!=(16&n|0)&0==(0|u)){o=a=-1;break}}0|c&&(ar[e+12>>2]=(0|ar[e+8>>2])+a,ar[e+16>>2]=l),16&n&&(ar[t>>2]=(0|ar[e+20>>2])+a)}else o=a=-1}}while(0);ar[(u=A)>>2]=0,ar[u+4>>2]=0,ar[(A=A+8|0)>>2]=a,ar[A+4>>2]=o},function(A,e,r,i,f,n){n|=0,ar[(n=A|=0)>>2]=0,ar[n+4>>2]=0,ar[(n=A+8|0)>>2]=-1,ar[n+4>>2]=-1},function(A,e,r,i,f,n){n|=0,ar[(n=A|=0)>>2]=0,ar[n+4>>2]=0,ar[(n=A+8|0)>>2]=-1,ar[n+4>>2]=-1},function(A,e,r,i,f,n){var t,o,a,c;for(A|=0,e|=0,r|=0,n|=0,t=ur=(o=ur)+31&-32,ur=ur+16|0,ar[t>>2]=0,ar[4+t>>2]=0,e=ar[8+t>>2]=0;3!=(0|e);)e=e+1|(ar[t+(e<<2)>>2]=0);for(n=(e=(c=(a=0|tr[n+11>>0])<<24>>24<0)?0|ar[n>>2]:n)+(c?0|ar[n+4>>2]:255&a)|0;!(n>>>0<=e>>>0);)_u(t,0|tr[e>>0]),e=e+1|0;for(r=0|tf(0,0,0,e=(0|tr[11+t>>0])<0?0|ar[t>>2]:t),ar[A>>2]=0,ar[A+4>>2]=0,n=ar[A+8>>2]=0;3!=(0|n);)n=n+1|(ar[A+(n<<2)>>2]=0);for(n=e+(0|Vc(r))|0;!(n>>>0<=e>>>0);)_u(A,0|tr[e>>0]),e=e+1|0;Bu(t),ur=o},function(A,e,r,i,f,n){A|=0,e|=0,n|=0;var t,o,a,c,l,u,b=0,s=0,d=0,k=0,h=0,w=0;for(w=ur=(u=ur)+31&-32,ur=ur+176|0,o=w+168|0,a=w+40|0,c=w+36|0,l=w+32|0,k=(t=w)+24|0,w=w+16|0,ar[t>>2]=0,ar[t+4>>2]=0,e=ar[t+8>>2]=0;3!=(0|e);)e=e+1|(ar[t+(e<<2)>>2]=0);for(ar[k+4>>2]=0,ar[k>>2]=16892,s=(e=(d=(s=0|tr[n+8+3>>0])<<24>>24<0)?0|ar[n>>2]:n)+((d?0|ar[n+4>>2]:255&s)<<2)|0,d=32+a|0,n=e,e=0;2!=(0|e)&n>>>0<s>>>0;){if(ar[l>>2]=n,2==(0|(b=0|es[15&ar[12+(0|ar[k>>2])>>2]](k,o,n,s,l,a,d,c)))||(0|ar[l>>2])==(0|n)){h=7;break}for(e=a;!(e>>>0>=(0|ar[c>>2])>>>0);)_u(t,0|tr[e>>0]),e=e+1|0;n=0|ar[l>>2],e=b}for(7==(0|h)&&ti(),an(),n=0|tf(0,0,0,b=(0|tr[t+11>>0])<0?0|ar[t>>2]:t),ar[A>>2]=0,ar[A+4>>2]=0,e=ar[A+8>>2]=0;3!=(0|e);)e=e+1|(ar[A+(e<<2)>>2]=0);for(ar[w+4>>2]=0,ar[w>>2]=16940,d=s=b+(0|Vc(n))|0,k=128+a|0,n=b,e=0;;){if(!(2!=(0|e)&n>>>0<s>>>0)){h=21;break}if(ar[l>>2]=n,2==(0|(b=0|es[15&ar[16+(0|ar[w>>2])>>2]](w,o,n,32<(d-n|0)?n+32|0:s,l,a,k,c)))||(0|ar[l>>2])==(0|n)){h=17;break}for(e=a;!(e>>>0>=(0|ar[c>>2])>>>0);)Ou(A,0|ar[e>>2]),e=e+4|0;n=0|ar[l>>2],e=b}if(17==(0|h))ti();else if(21==(0|h))return an(),Bu(t),void(ur=u)},function(A,e,r,i,f,n){r|=0,i|=0,f|=0,n|=0,0|xu(A|=0,0|ar[(e|=0)+8>>2])&&Ku(0,e,r,i,f)},function(A,e,r,i,f,n){r|=0,i|=0,f|=0,n|=0,0|xu(A|=0,0|ar[(e|=0)+8>>2])?Ku(0,e,r,i,f):(A=0|ar[A+8>>2],as[15&ar[20+(0|ar[A>>2])>>2]](A,e,r,i,f,n))},function(A,e,r,i,f,n){r|=0,i|=0,f|=0,n|=0;var t=0,o=0,a=0,c=0,l=0,u=0,b=0,s=0;if(0|xu(A|=0,0|ar[(e|=0)+8>>2]))Ku(0,e,r,i,f);else{t=0|tr[(s=e+52|0)>>0],a=0|tr[(o=e+53|0)>>0],c=A+16+((b=0|ar[A+12>>2])<<3)|0,tr[s>>0]=0,eb(A+16|(tr[o>>0]=0),e,r,i,f,n);A:do{if(1<(0|b)){l=e+24|0,u=e+54|0,b=A+8|0,A=A+24|0;do{if(0|tr[u>>0])break A;if(0|tr[s>>0]){if(1==(0|ar[l>>2]))break A;if(!(2&ar[b>>2]))break A}else if(0|tr[o>>0]&&0==(1&ar[b>>2]|0))break A;tr[s>>0]=0,tr[o>>0]=0,eb(A,e,r,i,f,n),A=A+8|0}while(A>>>0<c>>>0)}}while(0);tr[s>>0]=t,tr[o>>0]=a}},function(A,e,r,i,f,n){A|=0,e|=0,r|=0,i|=0,n|=0;var t=0,o=0,a=0,c=0,l=0;if(1&(f|=0)|0&&sr(36230,36243,40,36262),0<(0|n)&0<(0|f)){a=0;do{for(t=A+(0|br(a,e))|0,o=r+((0|br(a,i))<<1)|0,c=0;l=32+(0|or[o>>1])>>6,tr[t>>0]=(0|l)<0?0:255&((0|l)<255?l:255),l=32+(0|or[o+2>>1])>>6,tr[t+1>>0]=(0|l)<0?0:255&((0|l)<255?l:255),!((0|f)<=(0|(c=c+2|0)));)t=t+2|0,o=o+4|0;a=a+1|0}while((0|a)!=(0|n))}},Mb,Mb,Mb,Mb,Mb,Mb],cs=[Tb,function(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,f|=0,t|=0;var o=0,a=0,c=0,l=0,u=0,b=0;if(1&(n|=0)|0&&sr(36230,36243,105,36363),0<(0|t)&0<(0|n)){l=0;do{for(c=0|br(l,f),o=A+(0|br(l,e))|0,a=i+(c<<1)|0,c=r+(c<<1)|0,u=0;b=64+(0|or[c>>1])+(0|or[a>>1])>>7,tr[o>>0]=(0|b)<0?0:255&((0|b)<255?b:255),b=64+(0|or[c+2>>1])+(0|or[a+2>>1])>>7,tr[o+1>>0]=(0|b)<0?0:255&((0|b)<255?b:255),!((0|n)<=(0|(u=u+2|0)));)o=o+2|0,a=a+4|0,c=c+4|0;l=l+1|0}while((0|l)!=(0|t))}},function(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,n|=0;var o,a,c,l,u=0,b=0,s=0,d=0;if(c=0<(0|(l=14-(t|=0)|0))?1<<l-1:0,1&(f|=0)|0&&sr(36230,36243,172,36396),!((0|n)<=0)&&(a=65535+(o=1<<t)|0,0<(0|f))){b=0;do{for(t=A+((0|br(b,e))<<1)|0,u=r+((0|br(b,i))<<1)|0,s=0;d=(0|or[u>>1])+c>>l,or[t>>1]=(0|d)<0?0:65535&((0|d)<(0|o)?d:a),d=(0|or[u+2>>1])+c>>l,or[t+2>>1]=(0|d)<0?0:65535&((0|d)<(0|o)?d:a),!((0|f)<=(0|(s=s+2|0)));)t=t+4|0,u=u+4|0;b=b+1|0}while((0|b)!=(0|n))}},function(A,e,r,i,f,n,t){A|=0,e|=0,r|=0,i|=0,t|=0;var o=0,a=0,c=0,l=0,u=0,b=0;if(0<(0|(n|=0))&0<(0|(f|=0))){c=0;do{for(t=r+(0|br(c,i))|0,o=A+((0|br(c,e))<<1)|0,a=0;b=(0|cr[t+1>>0])<<6&65535,u=(0|cr[t+2>>0])<<6&65535,l=(0|cr[t+3>>0])<<6&65535,or[o>>1]=(0|cr[t>>0])<<6,or[o+2>>1]=b,or[o+4>>1]=u,or[o+6>>1]=l,!((0|f)<=(0|(a=a+4|0)));)t=t+4|0,o=o+8|0;c=c+1|0}while((0|c)!=(0|n))}},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,0,1,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,0,2,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,0,3,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,1,0,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,1,1,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,1,2,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,1,3,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,2,0,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,2,1,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,2,2,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,2,3,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,3,0,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,3,1,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,3,2,8)},function(A,e,r,i,f,n,t){xo(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,3,3,8)},Tb,Tb,Tb,Tb,Tb,Tb,Tb,Tb,Tb,Tb,Tb,Tb,Tb],ls=[Ub,function(A,e,r,i,f,n,t,o){A|=0,e|=0,r|=0,i|=0,f|=0,t|=0;var a,c,l,u,b=0,s=0,d=0,k=0,h=0;if(l=1<<(u=15-(o|=0)|0)-1,1&(n|=0)|0&&sr(36230,36243,238,36490),!((0|t)<=0)&&(c=65535+(a=1<<o)|0,0<(0|n))){d=0;do{for(s=0|br(d,f),o=A+((0|br(d,e))<<1)|0,b=i+(s<<1)|0,s=r+(s<<1)|0,k=0;h=(0|or[s>>1])+l+(0|or[b>>1])>>u,or[o>>1]=(0|h)<0?0:65535&((0|h)<(0|a)?h:c),h=(0|or[s+2>>1])+l+(0|or[b+2>>1])>>u,or[o+2>>1]=(0|h)<0?0:65535&((0|h)<(0|a)?h:c),!((0|n)<=(0|(k=k+2|0)));)o=o+4|0,b=b+4|0,s=s+4|0;d=d+1|0}while((0|d)!=(0|t))}},function(A,e,r,i,f,n,t,o){A|=0,e|=0,r|=0,i|=0,t|=0;var a,c=0,l=0;if(a=14-(o|=0)|0,0<(0|(n|=0))&0<(0|(f|=0))){c=0;do{for(t=A+((0|br(c,e))<<1)|0,o=r+((0|br(c,i))<<1)|0,l=0;or[t>>1]=(0|lr[o>>1])<<a,(0|(l=l+1|0))!=(0|f);)t=t+2|0,o=o+2|0;c=c+1|0}while((0|c)!=(0|n))}},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,0,1,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,0,2,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,0,3,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,1,0,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,1,1,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,1,2,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,1,3,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,2,0,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,2,1,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,2,2,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,2,3,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,3,0,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,3,1,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,3,2,o|=0)},function(A,e,r,i,f,n,t,o){Po(A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,3,3,o|=0)},Ub,Ub,Ub,Ub,Ub,Ub,Ub,Ub,Ub,Ub,Ub,Ub,Ub,Ub],us=[Sb,function(A,e,r,i,f,n,t,o,a){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0;var c,l=0,u=0,b=0,s=0,d=0;if((0|(a|=0))<=0&&sr(36293,36243,60,36303),c=1<<a+-1,0<(0|n)&0<(0|f)){b=0;do{for(l=A+(0|br(b,e))|0,u=r+((0|br(b,i))<<1)|0,s=0;d=((0|br(0|or[u>>1],t))+c>>a)+o|0,tr[l>>0]=(0|d)<0?0:255&((0|d)<255?d:255),(0|(s=s+1|0))!=(0|f);)l=l+1|0,u=u+2|0;b=b+1|0}while((0|b)!=(0|n))}},function(A,e,r,i,f,n,t,o,a){A|=0,e|=0,r|=0,i|=0,t|=0,o|=0,a|=0;var c=0;if(0<(0|(n|=0))&0<(0|(f|=0))){a=0;do{for(t=r+(0|br(a,i))|0,o=A+((0|br(a,e))<<1)|0,c=0;or[o>>1]=(0|cr[t>>0])<<6,(0|(c=c+1|0))!=(0|f);)t=t+1|0,o=o+2|0;a=a+1|0}while((0|a)!=(0|n))}},Sb],bs=[Ob,function(A,e,r,i,f,n,t,o,a,c){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,c|=0;var l,u,b,s=0,d=0,k=0,h=0;if((0|(a|=0))<=0&&sr(36293,36243,193,36428),b=1<<a+-1,!((0|n)<=0)&&(u=65535+(l=1<<c)|0,0<(0|f))){d=0;do{for(c=A+((0|br(d,e))<<1)|0,s=r+((0|br(d,i))<<1)|0,k=0;h=((0|br(0|or[s>>1],t))+b>>a)+o|0,or[c>>1]=(0|h)<0?0:65535&((0|h)<(0|l)?h:u),(0|(k=k+1|0))!=(0|f);)c=c+2|0,s=s+2|0;d=d+1|0}while((0|d)!=(0|n))}},function(A,e,r,i,f,n,t,o,a,c){A|=0,e|=0,r|=0,i|=0,t|=0,o|=0,a|=0;var l,u,b,s=0,d=0,k=0,h=0,w=0,v=0;if(b=ur,k=(c|=0)+-8|0,h=0|br((f|=0)<<1,l=(n|=0)+3|0),ur=(u=ur)+(15+(0|+h)&-16)|0,-1<(0|(h=n+2|0))){w=0<(0|f),a=-1;do{A:do{if(w)for(d=a+1|0,a=r+(((s=0)|br(a,i))-1)|0;;){switch(0|t){case 0:c=0|cr[(a=a+1|0)>>0];break;case 1:v=a+1|0,c=(0|br(0|cr[a>>0],-2))+(58*(0|cr[v>>0])|0)+(10*(0|cr[a+2>>0])|0)-(cr[a+3>>0]<<1)>>k&65535,a=v;break;case 2:v=a+1|0,c=(0|br(0|cr[a>>0],-4))+(54*(0|cr[v>>0])|0)+(cr[a+2>>0]<<4)-(cr[a+3>>0]<<1)>>k&65535,a=v;break;case 3:v=a+1|0,c=(0|br(0|cr[a>>0],-6))+(46*(0|cr[v>>0])|0)+(28*(0|cr[a+2>>0])|0)-(cr[a+3>>0]<<2)>>k&65535,a=v;break;case 4:v=a+1|0,c=(0|br(0|cr[a>>0],-4))-(cr[a+3>>0]<<2)+(36*((0|cr[a+2>>0])+(0|cr[v>>0])|0)|0)>>k&65535,a=v;break;case 5:v=a+1|0,c=(0|br(0|cr[a>>0],-4))+(28*(0|cr[v>>0])|0)+(46*(0|cr[a+2>>0])|0)+(0|br(0|cr[a+3>>0],-6))>>k&65535,a=v;break;case 6:v=a+1|0,c=(0|br(0|cr[a>>0],-2))+(cr[v>>0]<<4)+(54*(0|cr[a+2>>0])|0)-(cr[a+3>>0]<<2)>>k&65535,a=v;break;default:v=a+1|0,c=(0|br(0|cr[a>>0],-2))+(10*(0|cr[v>>0])|0)+(58*(0|cr[a+2>>0])|0)-(cr[a+3>>0]<<1)>>k&65535,a=v}if(v=u+(d+(0|br(s,l))<<1)|0,or[v>>1]=c,(0|(s=s+1|0))==(0|f)){a=d;break A}}else a=a+1|0}while(0)}while((0|a)!=(0|h))}if(k=0==(0|t)?k:6,(0|f)<=0)ur=b;else{h=0<(0|n),d=0;do{A:do{if(h)for(a=u+(((s=0)|br(d,l))<<1)|0;;){switch(0|o){case 0:c=0|or[(a=a+2|0)>>1];break;case 1:v=a+2|0,c=(0|br(0|or[a>>1],-2))+(58*(0|or[v>>1])|0)+(10*(0|or[a+4>>1])|0)-(or[a+6>>1]<<1)>>k&65535,a=v;break;case 2:v=a+2|0,c=(0|br(0|or[a>>1],-4))+(54*(0|or[v>>1])|0)+(or[a+4>>1]<<4)-(or[a+6>>1]<<1)>>k&65535,a=v;break;case 3:v=a+2|0,c=(0|br(0|or[a>>1],-6))+(46*(0|or[v>>1])|0)+(28*(0|or[a+4>>1])|0)-(or[a+6>>1]<<2)>>k&65535,a=v;break;case 4:v=a+2|0,c=(0|br(0|or[a>>1],-4))-(or[a+6>>1]<<2)+(36*((0|or[a+4>>1])+(0|or[v>>1])|0)|0)>>k&65535,a=v;break;case 5:v=a+2|0,c=(0|br(0|or[a>>1],-4))+(28*(0|or[v>>1])|0)+(46*(0|or[a+4>>1])|0)+(0|br(0|or[a+6>>1],-6))>>k&65535,a=v;break;case 6:v=a+2|0,c=(0|br(0|or[a>>1],-2))+(or[v>>1]<<4)+(54*(0|or[a+4>>1])|0)-(or[a+6>>1]<<2)>>k&65535,a=v;break;default:v=a+2|0,c=(0|br(0|or[a>>1],-2))+(10*(0|or[v>>1])|0)+(58*(0|or[a+4>>1])|0)-(or[a+6>>1]<<1)>>k&65535,a=v}if(v=A+((0|br(s,e))+d<<1)|0,or[v>>1]=c,(0|(s=s+1|0))==(0|n))break A}}while(0);d=d+1|0}while((0|d)!=(0|f));ur=b}},function(A,e,r,i,f,n,t,o,a,c){var l;if(A|=0,e|=0,r|=0,i|=0,t|=0,o|=0,a|=0,l=14-(c|=0)|0,0<(0|(n|=0))&0<(0|(f|=0))){a=0;do{for(t=r+((0|br(a,i))<<1)|0,o=A+((0|br(a,e))<<1)|0,c=0;or[o>>1]=(0|lr[t>>1])<<l,(0|(c=c+1|0))!=(0|f);)t=t+2|0,o=o+2|0;a=a+1|0}while((0|a)!=(0|n))}},function(A,e,r,i,f,n,t,o,a,c){A|=0,e|=0,r|=0,i|=0,t|=0,o|=0,a|=0;var l,u,b,s=0,d=0,k=0,h=0,w=0,v=0;if(b=ur,k=(c|=0)+-8|0,h=0|br((f|=0)<<1,l=(n|=0)+3|0),ur=(u=ur)+(15+(0|+h)&-16)|0,-1<(0|(h=n+2|0))){w=0<(0|f),a=-1;do{A:do{if(w)for(d=a+1|0,a=r+(((s=0)|br(a,i))-1<<1)|0;;){switch(0|t){case 0:c=0|or[(a=a+2|0)>>1];break;case 1:v=a+2|0,c=(0|br(0|lr[a>>1],-2))+(58*(0|lr[v>>1])|0)+(10*(0|lr[a+4>>1])|0)-(lr[a+6>>1]<<1)>>k&65535,a=v;break;case 2:v=a+2|0,c=(0|br(0|lr[a>>1],-4))+(54*(0|lr[v>>1])|0)+(lr[a+4>>1]<<4)-(lr[a+6>>1]<<1)>>k&65535,a=v;break;case 3:v=a+2|0,c=(0|br(0|lr[a>>1],-6))+(46*(0|lr[v>>1])|0)+(28*(0|lr[a+4>>1])|0)-(lr[a+6>>1]<<2)>>k&65535,a=v;break;case 4:v=a+2|0,c=(0|br(0|lr[a>>1],-4))-(lr[a+6>>1]<<2)+(36*((0|lr[a+4>>1])+(0|lr[v>>1])|0)|0)>>k&65535,a=v;break;case 5:v=a+2|0,c=(0|br(0|lr[a>>1],-4))+(28*(0|lr[v>>1])|0)+(46*(0|lr[a+4>>1])|0)+(0|br(0|lr[a+6>>1],-6))>>k&65535,a=v;break;case 6:v=a+2|0,c=(0|br(0|lr[a>>1],-2))+(lr[v>>1]<<4)+(54*(0|lr[a+4>>1])|0)-(lr[a+6>>1]<<2)>>k&65535,a=v;break;default:v=a+2|0,c=(0|br(0|lr[a>>1],-2))+(10*(0|lr[v>>1])|0)+(58*(0|lr[a+4>>1])|0)-(lr[a+6>>1]<<1)>>k&65535,a=v}if(v=u+(d+(0|br(s,l))<<1)|0,or[v>>1]=c,(0|(s=s+1|0))==(0|f)){a=d;break A}}else a=a+1|0}while(0)}while((0|a)!=(0|h))}if(k=0==(0|t)?k:6,(0|f)<=0)ur=b;else{h=0<(0|n),d=0;do{A:do{if(h)for(a=u+(((s=0)|br(d,l))<<1)|0;;){switch(0|o){case 0:c=0|or[(a=a+2|0)>>1];break;case 1:v=a+2|0,c=(0|br(0|or[a>>1],-2))+(58*(0|or[v>>1])|0)+(10*(0|or[a+4>>1])|0)-(or[a+6>>1]<<1)>>k&65535,a=v;break;case 2:v=a+2|0,c=(0|br(0|or[a>>1],-4))+(54*(0|or[v>>1])|0)+(or[a+4>>1]<<4)-(or[a+6>>1]<<1)>>k&65535,a=v;break;case 3:v=a+2|0,c=(0|br(0|or[a>>1],-6))+(46*(0|or[v>>1])|0)+(28*(0|or[a+4>>1])|0)-(or[a+6>>1]<<2)>>k&65535,a=v;break;case 4:v=a+2|0,c=(0|br(0|or[a>>1],-4))-(or[a+6>>1]<<2)+(36*((0|or[a+4>>1])+(0|or[v>>1])|0)|0)>>k&65535,a=v;break;case 5:v=a+2|0,c=(0|br(0|or[a>>1],-4))+(28*(0|or[v>>1])|0)+(46*(0|or[a+4>>1])|0)+(0|br(0|or[a+6>>1],-6))>>k&65535,a=v;break;case 6:v=a+2|0,c=(0|br(0|or[a>>1],-2))+(or[v>>1]<<4)+(54*(0|or[a+4>>1])|0)-(or[a+6>>1]<<2)>>k&65535,a=v;break;default:v=a+2|0,c=(0|br(0|or[a>>1],-2))+(10*(0|or[v>>1])|0)+(58*(0|or[a+4>>1])|0)-(or[a+6>>1]<<1)>>k&65535,a=v}if(v=A+((0|br(s,e))+d<<1)|0,or[v>>1]=c,(0|(s=s+1|0))==(0|n))break A}}while(0);d=d+1|0}while((0|d)!=(0|f));ur=b}},Ob,Ob,Ob],ss=[function(A,e,r,i,f,n,t,o,a,c,l,u){Z(22)},function(A,e,r,i,f,n,t,o,a,c,l,u){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0;var b,s,d=0,k=0,h=0;if((0|(u|=0))<=0&&sr(36293,36243,80,36332),s=a+1+l<<u,!((0|t)<=0)&&(b=u+1|0,0<(0|n))){d=0;do{for(u=0|br(d,f),l=A+(0|br(d,e))|0,a=i+(u<<1)|0,u=r+(u<<1)|0,k=0;h=(h=0|br(0|or[u>>1],o))+s+(0|br(0|or[a>>1],c))>>b,tr[l>>0]=(0|h)<0?0:255&((0|h)<255?h:255),(0|(k=k+1|0))!=(0|n);)l=l+1|0,a=a+2|0,u=u+2|0;d=d+1|0}while((0|d)!=(0|t))}}],ds=[function(A,e,r,i,f,n,t,o,a,c,l,u,b){Z(23)},function(A,e,r,i,f,n,t,o,a,c,l,u,b){A|=0,e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,b|=0;var s,d,k,h,w=0,v=0;if((0|(u|=0))<=0&&sr(36293,36243,213,36458),h=a+1+l<<u,!((0|t)<=0)&&(k=u+1|0,d=65535+(s=1<<b)|0,0<(0|n))){b=0;do{for(u=0|br(b,f),l=A+((0|br(b,e))<<1)|0,a=i+(u<<1)|0,u=r+(u<<1)|0,w=0;v=(v=0|br(0|or[u>>1],o))+h+(0|br(0|or[a>>1],c))>>k,or[l>>1]=(0|v)<0?0:65535&((0|v)<(0|s)?v:d),(0|(w=w+1|0))!=(0|n);)l=l+2|0,a=a+2|0,u=u+2|0;b=b+1|0}while((0|b)!=(0|t))}}];return{__GLOBAL__I_000101:function(){!function(A){A|=0;var e=0;(function(A,e,r){var i,f;e|=0,r|=0,f=ur=(i=ur)+31&-32,ur=ur+16|0,Sf(A|=0),ar[A>>2]=14636,ar[A+32>>2]=e,ar[A+40>>2]=r,r=-1,ar[A+48>>2]=r,tr[A+52>>0]=0,r=0|ar[8+(0|ar[A>>2])>>2],ru(f,A+4|0),fs[63&r](A,f),bn(f),ur=i})(58864,A=0|ar[2637],58920),ar[14546]=14208,ar[14548]=14228,ar[14547]=0,Jf(58192,58864),ar[14566]=0,e=-1,ar[14567]=e,function(A,e,r){var i,f;e|=0,r|=0,f=ur=(i=ur)+31&-32,ur=ur+16|0,Of(A|=0),ar[A>>2]=14572,ar[A+32>>2]=e,ar[A+40>>2]=r,r=-1,ar[A+48>>2]=r,tr[A+52>>0]=0,r=0|ar[8+(0|ar[A>>2])>>2],ru(f,A+4|0),fs[63&r](A,f),bn(f),ur=i}(58928,A,58984),ar[14568]=14256,ar[14570]=14276,ar[14569]=0,Jf(58280,58928),ar[14588]=0,A=-1,ar[14589]=A,qf(58992,A=0|ar[2543],59040),ar[14590]=28,ar[14591]=48,Jf(58364,58992),ar[14609]=0,e=-1,ar[14610]=e,$f(59048,A,59096),ar[14611]=14312,ar[14612]=14332,Jf(58448,59048),ar[14630]=0,A=-1,ar[14631]=A,qf(59104,A=0|ar[2669],59152),ar[14632]=28,ar[14633]=48,Jf(58532,59104),ar[14651]=0,e=-1,ar[14652]=e,e=0|ar[58528+(0|ar[(0|ar[14632])-12>>2])+24>>2],ar[14674]=28,ar[14675]=48,Jf(58700,e),ar[14693]=0,e=-1,ar[14694]=e,$f(59160,A,59208),ar[14653]=14312,ar[14654]=14332,Jf(58616,59160),ar[14672]=0,A=-1,ar[14673]=A,A=0|ar[58612+(0|ar[(0|ar[14653])-12>>2])+24>>2],ar[14695]=14312,ar[14696]=14332,Jf(58784,A),ar[14714]=0,A=-1,ar[14715]=A,ar[58184+(0|ar[(0|ar[14546])-12>>2])+72>>2]=58360,ar[58272+(0|ar[(0|ar[14568])-12>>2])+72>>2]=58444,A=58528+(0|ar[(0|ar[14632])-12>>2])+4|0,ar[A>>2]=8192|ar[A>>2],A=58612+(0|ar[(0|ar[14653])-12>>2])+4|0,ar[A>>2]=8192|ar[A>>2],ar[58528+(0|ar[(0|ar[14632])-12>>2])+72>>2]=58360,ar[58612+(0|ar[(0|ar[14653])-12>>2])+72>>2]=58444}(0)},__GLOBAL__sub_I_bind_cpp:function(){rA(4080,48907),S(4096,48912,1,1,0),L(4104,48917,1,-128,127),L(4120,48922,1,-128,127),L(4112,48934,1,0,255),L(4128,48948,2,-32768,32767),L(4136,48954,2,0,65535),L(4144,48969,4,-2147483648,2147483647),L(4152,48973,4,0,-1),L(4160,48986,4,-2147483648,2147483647),L(4168,48991,4,0,-1),x(4176,49005,4),x(4184,49011,8),q(1408,49018),q(2336,49030),$(2360,4,49063),z(1400,49076),K(2384,0,49092),K(2392,0,49122),K(2400,1,49159),K(2408,2,49198),K(2416,3,49229),K(2424,4,49269),K(2432,5,49298),K(2440,4,49336),K(2448,5,49366),K(2392,0,49405),K(2400,1,49437),K(2408,2,49470),K(2416,3,49503),K(2424,4,49537),K(2432,5,49570),K(2456,6,49604),K(2464,7,49635),K(2472,7,49667)},__GLOBAL__sub_I_box_cc:function(){var A,e;ur=(e=ur)+16|0,ar[(A=e)>>2]=0,ar[A+4>>2]=0,oo(56592,ar[A+8>>2]=0,0,A),ur=(0<=(0|tr[A+11>>0])||vu(0|ar[A>>2]),e)},__GLOBAL__sub_I_heif_cc:function(){!function(A){A|=0;var e=0;P(26177,1,6244,26194,67,435),P(26197,1,6248,26194,68,2),P(26221,1,6252,26194,69,3),P(26240,2,6256,26258,44,436),P(26262,3,6264,26292,32,77),P(26297,2,6276,26341,20,70),P(26345,2,6284,26341,21,45),P(26393,3,6292,26292,33,78),P(26426,4,6304,26447,7,10),P(26453,2,6320,26258,46,437),j(1224,26479,4,0),H(1224,26495,0),H(1224,26509,1),H(1224,26541,2),H(1224,26566,3),H(1224,26598,4),H(1224,26629,5),H(1224,26652,6),H(1224,26687,7),H(1224,26719,8),H(1224,26751,9),H(1224,26777,10),j(1232,26817,4,0),H(1232,26836,0),H(1232,26862,5e3),H(1232,26901,100),H(1232,26927,101),H(1232,26958,102),H(1232,26984,103),H(1232,27010,104),H(1232,27036,105),H(1232,27062,106),H(1232,27088,107),H(1232,27114,108),H(1232,27140,109),H(1232,27166,110),H(1232,27192,111),H(1232,27218,112),H(1232,27244,113),H(1232,27270,114),H(1232,27300,115),H(1232,27355,116),H(1232,27400,117),H(1232,27427,118),H(1232,27459,119),H(1232,27493,131),H(1232,27519,120),H(1232,27556,121),H(1232,27591,122),H(1232,27637,123),H(1232,27684,124),H(1232,27725,125),H(1232,27751,1e3),H(1232,27789,126),H(1232,27830,127),H(1232,27875,128),H(1232,27915,129),H(1232,27948,2e3),H(1232,27990,2001),H(1232,28026,2002),H(1232,28077,2003),H(1232,28118,2004),H(1232,28159,2005),H(1232,28195,2006),H(1232,28233,130),H(1232,28264,3e3),H(1232,28296,3001),H(1232,28333,3002),H(1232,28372,3003),H(1232,28415,3004),H(1232,28466,4e3),j(1240,28502,4,0),H(1240,28526,0),H(1240,28553,1),H(1240,28575,2),H(1240,28596,3),H(1240,28618,4),j(1248,28639,4,0),H(1248,28651,99),H(1248,28673,0),H(1248,28696,1),H(1248,28712,2),H(1248,28728,3),H(1248,28744,10),H(1248,28772,11),H(1248,28801,12),H(1248,28835,13),H(1248,28871,14),H(1248,28905,15),H(1248,28941,10),H(1248,28971,11),j(1256,29001,4,0),H(1256,29017,99),H(1256,29043,0),H(1256,29065,1),H(1256,29085,2),j(1264,29112,4,0),H(1264,29125,0),H(1264,29140,2),H(1264,29156,1),H(1264,29172,3),H(1264,29187,4),H(1264,29202,5),H(1264,29217,6),H(1264,29236,10),O(1272,1280,1296,0,26194,71,29274,0,29274,0,29261,29276,438),O(1312,1320,1336,0,26194,72,29274,0,29274,0,29279,29276,439),O(1352,1360,1376,0,26194,73,29274,0,29274,0,29297,29276,440),AA(1392,29308,29319,4,29276,441),A=0|hu(4),ar[A>>2]=0,e=0|hu(4),ar[e>>2]=0,eA(1392,29321,1224,26341,22,0|A,1224,29326,79,0|e),e=0|hu(4),ar[e>>2]=4,A=0|hu(4),ar[A>>2]=4,eA(1392,29331,1232,26341,23,0|e,1232,29326,80,0|A),U(1392)}(0)},__GLOBAL__sub_I_heif_plugin_registry_cc:function(){ar[14321]=0,ar[14322]=0,ar[14320]=57284,ar[14324]=0,ar[14325]=0,ar[14323]=57296,function(A){A|=0;var e,r=0,i=0,f=0;f=7580,0|(A=0|ar[(e=f)+8>>2])&&rs[7&A]();A=0|ar[14321];do{if(A){for(i=57284;;){if(r=0|ar[A+16>>2],f>>>0<r>>>0){if(!(r=0|ar[A>>2])){r=7;break}}else{if(f>>>0<=r>>>0){r=11;break}if(!(r=0|ar[(i=A+4|0)>>2])){r=10;break}A=i}i=A,A=r}if(7==(0|r)){i=f=A;break}if(10==(0|r)){f=A;break}if(11==(0|r)){f=A;break}}else i=f=57284}while(0);if(0|ar[i>>2])return;A=0|hu(20),ar[A+16>>2]=e,ar[A>>2]=0,ar[A+4>>2]=0,ar[A+8>>2]=f,ar[i>>2]=A,(r=0|ar[ar[14320]>>2])&&(ar[14320]=r,A=0|ar[i>>2]);so(0|ar[14321],A),ar[14322]=1+(0|ar[14322])}(61160)},__GLOBAL__sub_I_iostream_cpp:function(){},___cxa_can_catch:function(A,e,r){var i,f;return A|=0,e|=0,r|=0,i=ur=(f=ur)+31&-32,ur=ur+16|0,ar[i>>2]=ar[r>>2],(A=0|xb[63&ar[16+(0|ar[A>>2])>>2]](A,e,i))&&(ar[r>>2]=ar[i>>2]),ur=f,1&A|0},___cxa_is_pointer_type:function(A){return 1&(A=(A|=0)?0!=(0|qu(A,3960,4048,0)):0)|0},___errno_location:Cc,___getTypeName:function(A){return 0|(e=0|ar[(A|=0)+4>>2],(i=(i=0)|yc(r=1+(0|Vc(e|=0))|0))?hb(0|i,0|e,0|r):i=0,0|i);var e,r,i},___muldi3:nb,___udivdi3:lb,___uremdi3:ub,_bitshift64Ashr:bb,_bitshift64Lshr:sb,_bitshift64Shl:db,_emscripten_get_global_libc:function(){return 58064},_emscripten_replace_memory:function(A){return!(16777215&u(A)||u(A)<=16777215||2147483648<u(A))&&(tr=new i(A),or=new f(A),ar=new n(A),cr=new t(A),lr=new o(A),new a(A),gA=new c(A),Q=new l(A),r=A,!0)},_free:Bc,_i64Add:tb,_i64Subtract:ob,_llvm_bswap_i32:kb,_malloc:yc,_memcpy:hb,_memmove:wb,_memset:vb,_pthread_cond_broadcast:mb,_pthread_mutex_lock:gb,_pthread_mutex_unlock:Zb,_roundf:pb,_sbrk:yb,dynCall_i:function(A){return 0|zb[7&(A|=0)]()},dynCall_ii:function(A,e){return e|=0,0|jb[127&(A|=0)](0|e)},dynCall_iii:function(A,e,r){return e|=0,r|=0,0|Hb[31&(A|=0)](0|e,0|r)},dynCall_iiii:function(A,e,r,i){return e|=0,r|=0,i|=0,0|xb[63&(A|=0)](0|e,0|r,0|i)},dynCall_iiiii:function(A,e,r,i,f){return e|=0,r|=0,i|=0,f|=0,0|Pb[7&(A|=0)](0|e,0|r,0|i,0|f)},dynCall_iiiiid:function(A,e,r,i,f,n){return e|=0,r|=0,i|=0,f|=0,n=+n,0|Lb[7&(A|=0)](0|e,0|r,0|i,0|f,+n)},dynCall_iiiiii:function(A,e,r,i,f,n){return e|=0,r|=0,i|=0,f|=0,n|=0,0|Kb[31&(A|=0)](0|e,0|r,0|i,0|f,0|n)},dynCall_iiiiiid:function(A,e,r,i,f,n,t){return e|=0,r|=0,i|=0,f|=0,n|=0,t=+t,0|qb[3&(A|=0)](0|e,0|r,0|i,0|f,0|n,+t)},dynCall_iiiiiii:function(A,e,r,i,f,n,t){return e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,0|$b[63&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t)},dynCall_iiiiiiii:function(A,e,r,i,f,n,t,o){return e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,0|As[7&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t,0|o)},dynCall_iiiiiiiii:function(A,e,r,i,f,n,t,o,a){return e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,0|es[15&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t,0|o,0|a)},dynCall_v:function(A){rs[7&(A|=0)]()},dynCall_vi:function(A,e){e|=0,is[511&(A|=0)](0|e)},dynCall_vii:function(A,e,r){e|=0,r|=0,fs[63&(A|=0)](0|e,0|r)},dynCall_viii:function(A,e,r,i){e|=0,r|=0,i|=0,ns[127&(A|=0)](0|e,0|r,0|i)},dynCall_viiii:function(A,e,r,i,f){e|=0,r|=0,i|=0,f|=0,ts[31&(A|=0)](0|e,0|r,0|i,0|f)},dynCall_viiiii:function(A,e,r,i,f,n){e|=0,r|=0,i|=0,f|=0,n|=0,os[63&(A|=0)](0|e,0|r,0|i,0|f,0|n)},dynCall_viiiiii:function(A,e,r,i,f,n,t){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,as[15&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t)},dynCall_viiiiiii:function(A,e,r,i,f,n,t,o){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,cs[31&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t,0|o)},dynCall_viiiiiiii:function(A,e,r,i,f,n,t,o,a){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,ls[31&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t,0|o,0|a)},dynCall_viiiiiiiii:function(A,e,r,i,f,n,t,o,a,c){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,us[3&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t,0|o,0|a,0|c)},dynCall_viiiiiiiiii:function(A,e,r,i,f,n,t,o,a,c,l){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,bs[7&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t,0|o,0|a,0|c,0|l)},dynCall_viiiiiiiiiiii:function(A,e,r,i,f,n,t,o,a,c,l,u,b){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0,ss[1&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t,0|o,0|a,0|c,0|l,0|u,0|b)},dynCall_viiiiiiiiiiiii:function(A,e,r,i,f,n,t,o,a,c,l,u,b,s){e|=0,r|=0,i|=0,f|=0,n|=0,t|=0,o|=0,a|=0,c|=0,l|=0,u|=0,b|=0,s|=0,ds[1&(A|=0)](0|e,0|r,0|i,0|f,0|n,0|t,0|o,0|a,0|c,0|l,0|u,0|b,0|s)},establishStackSpace:function(A,e){ur=A|=0,e|=0},getTempRet0:function(){return 0|D},runPostSets:function(){},setTempRet0:function(A){D=A|=0},setThrew:function(A,e){A|=0,e|=0,k||(k=A,0)},stackAlloc:function(A){var e;return ur=(ur=(e=ur)+(A|=0)|0)+15&-16,0|e},stackRestore:function(A){ur=A|=0},stackSave:function(){return 0|ur}}}(d.asmGlobalArg,d.asmLibraryArg,y),Zr=d.__GLOBAL__I_000101=gr.__GLOBAL__I_000101,pr=d.__GLOBAL__sub_I_bind_cpp=gr.__GLOBAL__sub_I_bind_cpp,yr=d.__GLOBAL__sub_I_box_cc=gr.__GLOBAL__sub_I_box_cc,Br=d.__GLOBAL__sub_I_heif_cc=gr.__GLOBAL__sub_I_heif_cc,Er=d.__GLOBAL__sub_I_heif_plugin_registry_cc=gr.__GLOBAL__sub_I_heif_plugin_registry_cc,Xr=d.__GLOBAL__sub_I_iostream_cpp=gr.__GLOBAL__sub_I_iostream_cpp,Wr=(d.___cxa_can_catch=gr.___cxa_can_catch,d.___cxa_is_pointer_type=gr.___cxa_is_pointer_type,d.___errno_location=gr.___errno_location,d.___getTypeName=gr.___getTypeName),Ir=(d.___muldi3=gr.___muldi3,d.___udivdi3=gr.___udivdi3,d.___uremdi3=gr.___uremdi3,d._bitshift64Ashr=gr._bitshift64Ashr,d._bitshift64Lshr=gr._bitshift64Lshr,d._bitshift64Shl=gr._bitshift64Shl,d._emscripten_get_global_libc=gr._emscripten_get_global_libc,d._emscripten_replace_memory=gr._emscripten_replace_memory),Cr=d._free=gr._free,Gr=(d._i64Add=gr._i64Add,d._i64Subtract=gr._i64Subtract,d._llvm_bswap_i32=gr._llvm_bswap_i32,d._malloc=gr._malloc);d._memcpy=gr._memcpy,d._memmove=gr._memmove,d._memset=gr._memset,d._pthread_cond_broadcast=gr._pthread_cond_broadcast,d._pthread_mutex_lock=gr._pthread_mutex_lock,d._pthread_mutex_unlock=gr._pthread_mutex_unlock,d._roundf=gr._roundf,d._sbrk=gr._sbrk,d.establishStackSpace=gr.establishStackSpace,d.getTempRet0=gr.getTempRet0,d.runPostSets=gr.runPostSets,d.setTempRet0=gr.setTempRet0,d.setThrew=gr.setThrew,d.stackAlloc=gr.stackAlloc,d.stackRestore=gr.stackRestore,d.stackSave=gr.stackSave,d.dynCall_i=gr.dynCall_i,d.dynCall_ii=gr.dynCall_ii,d.dynCall_iii=gr.dynCall_iii,d.dynCall_iiii=gr.dynCall_iiii,d.dynCall_iiiii=gr.dynCall_iiiii,d.dynCall_iiiiid=gr.dynCall_iiiiid,d.dynCall_iiiiii=gr.dynCall_iiiiii,d.dynCall_iiiiiid=gr.dynCall_iiiiiid,d.dynCall_iiiiiii=gr.dynCall_iiiiiii,d.dynCall_iiiiiiii=gr.dynCall_iiiiiiii,d.dynCall_iiiiiiiii=gr.dynCall_iiiiiiiii,d.dynCall_v=gr.dynCall_v,d.dynCall_vi=gr.dynCall_vi,d.dynCall_vii=gr.dynCall_vii,d.dynCall_viii=gr.dynCall_viii,d.dynCall_viiii=gr.dynCall_viiii,d.dynCall_viiiii=gr.dynCall_viiiii,d.dynCall_viiiiii=gr.dynCall_viiiiii,d.dynCall_viiiiiii=gr.dynCall_viiiiiii,d.dynCall_viiiiiiii=gr.dynCall_viiiiiiii,d.dynCall_viiiiiiiii=gr.dynCall_viiiiiiiii,d.dynCall_viiiiiiiiii=gr.dynCall_viiiiiiiiii,d.dynCall_viiiiiiiiiiii=gr.dynCall_viiiiiiiiiiii,d.dynCall_viiiiiiiiiiiii=gr.dynCall_viiiiiiiiiiiii;if(k.stackAlloc=d.stackAlloc,k.stackSave=d.stackSave,k.stackRestore=d.stackRestore,k.establishStackSpace=d.establishStackSpace,k.setTempRet0=d.setTempRet0,k.getTempRet0=d.getTempRet0,d.asm=gr,bA)if(\\\"function\\\"==typeof d.locateFile?bA=d.locateFile(bA):d.memoryInitializerPrefixURL&&(bA=d.memoryInitializerPrefixURL+bA),o||r){var Vr=d.readBinary(bA);E.set(Vr,k.GLOBAL_BASE)}else{lA();var Fr=function(A){A.byteLength&&(A=new Uint8Array(A)),E.set(A,k.GLOBAL_BASE),d.memoryInitializerRequest&&delete d.memoryInitializerRequest.response,uA()};function Rr(){d.readAsync(bA,Fr,function(){throw\\\"could not load memory initializer \\\"+bA})}var Nr=vr(bA);if(Nr)Fr(Nr.buffer);else if(d.memoryInitializerRequest){function _r(){var A=d.memoryInitializerRequest,e=A.response;if(200!==A.status&&0!==A.status){var r=vr(d.memoryInitializerRequestURL);if(!r)return console.warn(\\\"a problem seems to have happened with Module.memoryInitializerRequest, status: \\\"+A.status+\\\", retrying \\\"+bA),void Rr();e=r.buffer}Fr(e)}d.memoryInitializerRequest.response?setTimeout(_r,0):d.memoryInitializerRequest.addEventListener(\\\"load\\\",_r)}else Rr()}function Yr(A){this.name=\\\"ExitStatus\\\",this.message=\\\"Program terminated with exit(\\\"+A+\\\")\\\",this.status=A}(Yr.prototype=new Error).constructor=Yr;var Qr=null;function Dr(A){function e(){d.calledRun||(d.calledRun=!0,n||(AA||(AA=!0,x(L)),x(K),d.onRuntimeInitialized&&d.onRuntimeInitialized(),function(){if(d.postRun)for(\\\"function\\\"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;)A=d.postRun.shift(),$.unshift(A);var A;x($)}()))}A=A||d.arguments,null===Qr&&(Qr=Date.now()),0<oA||(function(){if(d.preRun)for(\\\"function\\\"==typeof d.preRun&&(d.preRun=[d.preRun]);d.preRun.length;)A=d.preRun.shift(),P.unshift(A);var A;x(P)}(),0<oA||d.calledRun||(d.setStatus?(d.setStatus(\\\"Running...\\\"),setTimeout(function(){setTimeout(function(){d.setStatus(\\\"\\\")},1),e()},1)):e()))}cA=function A(){d.calledRun||Dr(),d.calledRun||(cA=A)},d.run=Dr,d.exit=function(A,e){e&&d.noExitRuntime&&0===A||(d.noExitRuntime||(n=!0,_=mr,x(q),d.onExit&&d.onExit(A)),o&&process.exit(A),d.quit(A,new Yr(A)))};var Jr=[];function Mr(e){d.onAbort&&d.onAbort(e),e=void 0!==e?(d.print(e),d.printErr(e),JSON.stringify(e)):\\\"\\\",n=!0,0;var r=\\\"abort(\\\"+e+\\\") at \\\"+p()+\\\"\\\\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.\\\";throw Jr&&Jr.forEach(function(A){r=A(r,e)}),r}if(d.abort=Mr,d.preInit)for(\\\"function\\\"==typeof d.preInit&&(d.preInit=[d.preInit]);0<d.preInit.length;)d.preInit.pop()();d.noExitRuntime=!0,Dr();function Tr(A){this.handle=A,this.img=null}Tr.prototype.free=function(){this.handle&&(zr.heif_image_handle_release(this.handle),this.handle=null)},Tr.prototype._ensureImage=function(){if(!this.img){var A=zr.heif_js_decode_image(this.handle,zr.heif_colorspace_YCbCr,zr.heif_chroma_420);A&&!A.code?(this.data=new Uint8Array(function(A){for(var e=new ArrayBuffer(A.length),r=new Uint8Array(e),i=0,f=A.length;i<f;i++)r[i]=A.charCodeAt(i);return e}(A.data)),delete A.data,this.img=A):console.log(\\\"Decoding image failed\\\",this.handle,A)}},Tr.prototype.get_width=function(){return this._ensureImage(),this.img.width},Tr.prototype.get_height=function(){return this._ensureImage(),this.img.height},Tr.prototype.is_primary=function(){return this._ensureImage(),!!this.img.is_primary},Tr.prototype.display=function(m,g){var Z=this.get_width(),p=this.get_height();setTimeout(function(){if(this._ensureImage(),this.img){for(var A,e,r,i,f=0,n=0,t=0,o=0,a=0,c=0,l=Z*p,u=Z,b=Math.ceil(Z/2),s=Math.ceil(Z/2),d=Math.ceil(p/2),k=this.data,h=this.data.subarray(u*p,u*p+b*d),w=this.data.subarray(u*p+b*d,u*p+b*d+s*d),v=m.data;c<l;)i=f>>1,A=1.164*(k[t+f]-16),e=h[o+i]-128,r=w[a+i]-128,v[c<<2]=A+1.596*r,v[1+(c<<2)]=A-.813*r-.391*e,v[2+(c<<2)]=A+2.018*e,v[3+(c<<2)]=255,c++,++f<Z&&(A=1.164*(k[t+f]-16),v[c<<2]=A+1.596*r,v[1+(c<<2)]=A-.813*r-.391*e,v[2+(c<<2)]=A+2.018*e,v[3+(c<<2)]=255,c++,f++),f===Z&&(f=0,t+=u,o=(++n>>1)*b,a=(n>>1)*s);g(m)}else g(null)}.bind(this),0)};function Ur(){this.decoder=null}Ur.prototype.decode=function(A){if(this.decoder&&zr.heif_context_free(this.decoder),this.decoder=zr.heif_context_alloc(),!this.decoder)return console.log(\\\"Could not create HEIF context\\\"),[];var e=zr.heif_context_read_from_memory(this.decoder,A);if(e.code!==zr.heif_error_Ok)return console.log(\\\"Could not parse HEIF file\\\",e),[];var r=zr.heif_js_context_get_list_of_top_level_image_IDs(this.decoder);if(!r||r.code)return console.log(\\\"Error loading image ids\\\",r),[];if(!r.length)return console.log(\\\"No images found\\\"),[];for(var i=[],f=0;f<r.length;f++){var n=zr.heif_js_context_get_image_handle(this.decoder,r[f]);n&&!n.code?i.push(new Tr(n)):console.log(\\\"Could not get image data for id\\\",r[f],n)}return i};var Sr,Or,zr={HeifDecoder:Ur,fourcc:function(A){return A.charCodeAt(0)<<24|A.charCodeAt(1)<<16|A.charCodeAt(2)<<8|A.charCodeAt(3)}},jr={heif_error_code:!0,heif_suberror_code:!0,heif_compression_format:!0,heif_chroma:!0,heif_colorspace:!0,heif_channel:!0};for(Or in jr)if(jr.hasOwnProperty(Or))for(Sr in d[Or])d[Or].hasOwnProperty(Sr)&&\\\"values\\\"!==Sr&&(zr[Sr]=d[Or][Sr]);for(Sr in d)jr.hasOwnProperty(Sr)||0!==Sr.indexOf(\\\"heif_\\\")||(zr[Sr]=d[Sr]);function QA(A,e){return A=YA(A=A||\\\"function_\\\"+new Date),new Function(\\\"body\\\",\\\"return function \\\"+A+'() {\\\\n    \\\"use strict\\\";    return body.apply(this, arguments);\\\\n};\\\\n')(e)}delete this.Module;\\\"undefined\\\"!=typeof exports?(\\\"undefined\\\"!=typeof module&&module.exports&&(exports=module.exports=zr),exports.libheif=zr):this.libheif=zr,\\\"function\\\"==typeof define&&define.amd&&define([],function(){return zr})}).call(this);\\n;\\nfunction processSingleImage(image) {\\n    return new Promise((resolve, reject) => {\\n        const w = image.get_width();\\n        const h = image.get_height();\\n        const whiteImage = new ImageData(w, h);\\n        for (let i = 0; i < w * h; i++) {\\n            whiteImage.data[i * 4 + 3] = 255;\\n        }\\n        image.display(whiteImage, (imageData) => {\\n            if (!imageData) {\\n                return reject(\\\"ERR_LIBHEIF Error while processing single image and generating image data, could not ensure image\\\");\\n            }\\n            resolve(imageData);\\n        });\\n    });\\n}\\nonmessage = (message) => {\\n    const id = message.data.id;\\n    try {\\n        const decoder = new libheif.HeifDecoder();\\n        let imagesArr = decoder.decode(message.data.buffer);\\n        if (!imagesArr || !imagesArr.length) {\\n            throw \\\"ERR_LIBHEIF format not supported\\\";\\n        }\\n        imagesArr = imagesArr.filter((x) => {\\n            let valid = true;\\n            try {\\n                /*\\n                sometimes the heic container is valid\\n                yet the images themselves are corrupt\\n                */\\n                x.get_height();\\n            }\\n            catch (e) {\\n                valid = false;\\n            }\\n            return valid;\\n        });\\n        if (!imagesArr.length) {\\n            throw \\\"ERR_LIBHEIF Heic doesn't contain valid images\\\";\\n        }\\n        Promise.all(imagesArr.map((image) => processSingleImage(image)))\\n            .then((imageDataArr) => {\\n            postMessage({ id, imageDataArr, error: \\\"\\\" });\\n        })\\n            .catch((e) => {\\n            postMessage({\\n                id,\\n                imageDataArr: [],\\n                error: e && e.toString ? e.toString() : e,\\n            });\\n        });\\n    }\\n    catch (e) {\\n        postMessage({\\n            id,\\n            imageDataArr: [],\\n            error: e && e.toString ? e.toString() : e,\\n        });\\n    }\\n};\\n\\n\";\nvar blob = new Blob([workerString], {type: 'application/javascript'});\nwindow.__heic2any__worker = new Worker(URL.createObjectURL(blob));\"use strict\";\r\n;\r\n;\r\n;\r\nvar supportedMIMETypes = [\"image/png\", \"image/jpeg\", \"image/gif\"];\r\nvar utils = {\r\n    blobToDataURL: function (blob) {\r\n        return new Promise(function (resolve, reject) {\r\n            var reader = new FileReader();\r\n            reader.onerror = function () {\r\n                reject(\"ERR_DOM Error on converting blob to data URL\");\r\n            };\r\n            reader.onload = function (e) {\r\n                resolve(reader.result);\r\n            };\r\n            reader.readAsDataURL(blob);\r\n        });\r\n    },\r\n    dataURItoBlob: function (dataURI) {\r\n        try {\r\n            var byteString = atob(dataURI.split(\",\")[1]);\r\n            var mimeString = dataURI.split(\",\")[0].split(\":\")[1].split(\";\")[0];\r\n            var ab = new ArrayBuffer(byteString.length);\r\n            var ia = new Uint8Array(ab);\r\n            for (var i = 0; i < byteString.length; i++) {\r\n                ia[i] = byteString.charCodeAt(i);\r\n            }\r\n            var blob = new Blob([ab], { type: mimeString });\r\n            return blob;\r\n        }\r\n        catch (e) {\r\n            return \"ERR_DOM Error on converting data URI to blob \" + e &&\r\n                e.toString\r\n                ? e.toString()\r\n                : e;\r\n        }\r\n    },\r\n    imageDataToBlob: function (ref) {\n        var imageData = ref.imageData;\n        var toType = ref.toType; if ( toType === void 0 ) toType = \"image/png\";\n        var quality = ref.quality; if ( quality === void 0 ) quality = 0.92;\n\r\n        // normalize quality\r\n        if (quality > 1 || quality < 0) {\r\n            quality = 0.92;\r\n        }\r\n        // normalize MIME type\r\n        if (supportedMIMETypes.indexOf(toType) === -1) {\r\n            toType = \"image/png\";\r\n        }\r\n        return new Promise(function (resolve, reject) {\r\n            var canvas = null;\r\n            try {\r\n                canvas = document.createElement(\"canvas\");\r\n            }\r\n            catch (e) { }\r\n            if (!canvas) {\r\n                return reject(\"ERR_CANVAS Error on converting imagedata to blob: Could not create canvas element\");\r\n            }\r\n            canvas.width = imageData.width;\r\n            canvas.height = imageData.height;\r\n            var ctx = canvas.getContext(\"2d\");\r\n            if (!ctx) {\r\n                return reject(\"ERR_CANVAS Error on converting imagedata to blob: Could not get canvas context\");\r\n            }\r\n            ctx.putImageData(imageData, 0, 0);\r\n            canvas.toBlob(function (blob) {\r\n                if (!blob) {\r\n                    return reject(\"ERR_CANVAS Error on converting imagedata to blob: Could not get blob from canvas\");\r\n                }\r\n                return resolve(blob);\r\n            }, toType, quality);\r\n        });\r\n    },\r\n    imagesToGif: function (ref) {\n        var images = ref.images;\n        var interval = ref.interval;\n        var gifHeight = ref.gifHeight;\n        var gifWidth = ref.gifWidth;\n\r\n        return new Promise(function (resolve, reject) {\r\n            gifshot.createGIF({\r\n                images: images,\r\n                interval: interval,\r\n                gifHeight: gifHeight,\r\n                gifWidth: gifWidth,\r\n            }, function (res) {\r\n                if (res.error) {\r\n                    reject((\"ERR_GIF \" + (res.errorCode) + \" \" + (res.errorMessage)));\r\n                }\r\n                return resolve(res.image);\r\n            });\r\n        });\r\n    },\r\n    otherImageType: function (buffer) {\r\n        /**\r\n         * Some confusion might arise when passing a regular image\r\n         * like jpeg/png/gif and getting \"format is not supported\"\r\n         * so to solve this, we should detect if the image is\r\n         * already browser-readable.\r\n         */\r\n        var arr = new Uint8Array(buffer).subarray(0, 4);\r\n        var header = \"\";\r\n        for (var i = 0; i < arr.length; i++) {\r\n            header = header + arr[i].toString(16);\r\n        }\r\n        switch (header) {\r\n            case \"89504e47\":\r\n                return \"image/png\";\r\n            case \"47494638\":\r\n                return \"image/gif\";\r\n            case \"ffd8ffe0\":\r\n            case \"ffd8ffe1\":\r\n            case \"ffd8ffe2\":\r\n            case \"ffd8ffe3\":\r\n            case \"ffd8ffe8\":\r\n                return \"image/jpeg\";\r\n            default:\r\n                return false;\r\n        }\r\n    },\r\n    error: function (message) {\r\n        /**\r\n         * Error coding system:\r\n         *\r\n         * UNKNOWN = 0\r\n         * USER errors = 1\r\n         * LIBHEIF errors = 2\r\n         * GIF errors = 3\r\n         * DOM errors = 4\r\n         * CANVAS errors = 5\r\n         *\r\n         */\r\n        var code = 0;\r\n        if (!message) {\r\n            message = \"ERR_UNKNOWN\";\r\n        }\r\n        else if (typeof message !== \"string\") {\r\n            if (message.toString) {\r\n                message = message.toString();\r\n            }\r\n            else {\r\n                message = JSON.stringify(message);\r\n            }\r\n        }\r\n        var headers = [\r\n            \"ERR_USER\",\r\n            \"ERR_LIBHEIF\",\r\n            \"ERR_GIF\",\r\n            \"ERR_DOM\",\r\n            \"ERR_CANVAS\" ];\r\n        for (var index = 0; index < headers.length; index++) {\r\n            var header = headers[index];\r\n            if (message.indexOf(header) === 0) {\r\n                code = index + 1;\r\n            }\r\n        }\r\n        return {\r\n            code: code,\r\n            message: message,\r\n        };\r\n    },\r\n};\r\nfunction decodeBuffer(buffer) {\r\n    return new Promise(function (resolve, reject) {\r\n        var id = (Math.random() * new Date().getTime()).toString();\r\n        var message = { id: id, buffer: buffer };\r\n        window.__heic2any__worker.postMessage(message);\r\n        window.__heic2any__worker.addEventListener(\"message\", function (message) {\r\n            if (message.data.id === id) {\r\n                if (message.data.error) {\r\n                    return reject(message.data.error);\r\n                }\r\n                return resolve(message.data.imageDataArr);\r\n            }\r\n        });\r\n    });\r\n}\r\nfunction heic2any(ref) {\n    var blob = ref.blob;\n    var toType = ref.toType; if ( toType === void 0 ) toType = \"image/png\";\n    var quality = ref.quality; if ( quality === void 0 ) quality = 0.92;\n    var gifInterval = ref.gifInterval; if ( gifInterval === void 0 ) gifInterval = 0.4;\n    var multiple = ref.multiple; if ( multiple === void 0 ) multiple = undefined;\n\r\n    return new Promise(function (resolve, reject) {\r\n        if (!(blob instanceof Blob)) {\r\n            utils.error(\"ERR_USER library only accepts BLOBs as input\");\r\n        }\r\n        if (typeof multiple !== \"boolean\") {\r\n            utils.error(\"ERR_USER \\\"multiple\\\" parameter should be of type \\\"boolean\\\"\");\r\n        }\r\n        if (typeof quality !== \"number\") {\r\n            utils.error(\"ERR_USER \\\"quality\\\" parameter should be of type \\\"number\\\"\");\r\n        }\r\n        if (typeof gifInterval !== \"number\") {\r\n            utils.error(\"ERR_USER \\\"gifInterval\\\" parameter should be of type \\\"number\\\"\");\r\n        }\r\n        var reader = new FileReader();\r\n        reader.onload = function (e) {\r\n            var gifWidth = 0;\r\n            var gifHeight = 0;\r\n            var buffer = e.target.result;\r\n            var otherImageType = utils.otherImageType(buffer);\r\n            if (otherImageType) {\r\n                return reject(utils.error((\"ERR_USER Image is already browser readable: \" + otherImageType)));\r\n            }\r\n            decodeBuffer(buffer)\r\n                .then(function (imageDataArr) {\r\n                gifWidth = imageDataArr[0].width;\r\n                gifHeight = imageDataArr[0].height;\r\n                return Promise.all(imageDataArr.map(function (imageData) { return utils.imageDataToBlob({\r\n                    imageData: imageData,\r\n                    toType: toType,\r\n                    quality: quality,\r\n                }); }));\r\n            })\r\n                .then(function (blobs) {\r\n                if (toType === \"image/gif\") {\r\n                    return Promise.all(blobs.map(function (blob) { return utils.blobToDataURL(blob); }));\r\n                }\r\n                else if (multiple) {\r\n                    resolve(blobs);\r\n                    return [\"\"];\r\n                }\r\n                else {\r\n                    resolve(blobs[0]);\r\n                    return [\"\"];\r\n                }\r\n            })\r\n                .then(function (dataURIs) {\r\n                if (toType === \"image/gif\" && dataURIs) {\r\n                    return utils.imagesToGif({\r\n                        images: dataURIs,\r\n                        interval: gifInterval,\r\n                        gifWidth: gifWidth,\r\n                        gifHeight: gifHeight,\r\n                    });\r\n                }\r\n                return \"\";\r\n            })\r\n                .then(function (resultingGif) {\r\n                if (toType === \"image/gif\" && resultingGif) {\r\n                    var blob = utils.dataURItoBlob(resultingGif);\r\n                    if (typeof blob === \"string\") {\r\n                        reject(utils.error(blob));\r\n                    }\r\n                    else {\r\n                        resolve(blob);\r\n                    }\r\n                }\r\n            })\r\n                .catch(function (e) {\r\n                reject(utils.error(e));\r\n            });\r\n        };\r\n        reader.readAsArrayBuffer(blob);\r\n    });\r\n}\r\n;\r\n\nreturn heic2any;\n}));\n","/**\n * @license\n * Copyright 2010-2026 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '184';\n\n/**\n * Represents mouse buttons and interaction types in context of controls.\n *\n * @type {ConstantsMouse}\n * @constant\n */\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\n\n/**\n * Represents touch interaction types in context of controls.\n *\n * @type {ConstantsTouch}\n * @constant\n */\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\n\n/**\n * Disables face culling.\n *\n * @type {number}\n * @constant\n */\nconst CullFaceNone = 0;\n\n/**\n * Culls back faces.\n *\n * @type {number}\n * @constant\n */\nconst CullFaceBack = 1;\n\n/**\n * Culls front faces.\n *\n * @type {number}\n * @constant\n */\nconst CullFaceFront = 2;\n\n/**\n * Culls both front and back faces.\n *\n * @type {number}\n * @constant\n */\nconst CullFaceFrontBack = 3;\n\n/**\n * Gives unfiltered shadow maps - fastest, but lowest quality.\n *\n * @type {number}\n * @constant\n */\nconst BasicShadowMap = 0;\n\n/**\n * Filters shadow maps using the Percentage-Closer Filtering (PCF) algorithm.\n *\n * @type {number}\n * @constant\n */\nconst PCFShadowMap = 1;\n\n/**\n * Filters shadow maps using the Percentage-Closer Filtering (PCF) algorithm with\n * better soft shadows especially when using low-resolution shadow maps.\n *\n * @type {number}\n * @constant\n */\nconst PCFSoftShadowMap = 2;\n\n/**\n * Filters shadow maps using the Variance Shadow Map (VSM) algorithm.\n * When using VSMShadowMap all shadow receivers will also cast shadows.\n *\n * @type {number}\n * @constant\n */\nconst VSMShadowMap = 3;\n\n/**\n * Only front faces are rendered.\n *\n * @type {number}\n * @constant\n */\nconst FrontSide = 0;\n\n/**\n * Only back faces are rendered.\n *\n * @type {number}\n * @constant\n */\nconst BackSide = 1;\n\n/**\n * Both front and back faces are rendered.\n *\n * @type {number}\n * @constant\n */\nconst DoubleSide = 2;\n\n/**\n * No blending is performed which effectively disables\n * alpha transparency.\n *\n * @type {number}\n * @constant\n */\nconst NoBlending = 0;\n\n/**\n * The default blending.\n *\n * @type {number}\n * @constant\n */\nconst NormalBlending = 1;\n\n/**\n * Represents additive blending.\n *\n * @type {number}\n * @constant\n */\nconst AdditiveBlending = 2;\n\n/**\n * Represents subtractive blending.\n *\n * @type {number}\n * @constant\n */\nconst SubtractiveBlending = 3;\n\n/**\n * Represents multiply blending.\n *\n * @type {number}\n * @constant\n */\nconst MultiplyBlending = 4;\n\n/**\n * Represents custom blending.\n *\n * @type {number}\n * @constant\n */\nconst CustomBlending = 5;\n\n/**\n * Represents material blending.\n *\n * @type {number}\n * @constant\n */\nconst MaterialBlending = 6;\n\n/**\n * A `source + destination` blending equation.\n *\n * @type {number}\n * @constant\n */\nconst AddEquation = 100;\n\n/**\n * A `source - destination` blending equation.\n *\n * @type {number}\n * @constant\n */\nconst SubtractEquation = 101;\n\n/**\n * A `destination - source` blending equation.\n *\n * @type {number}\n * @constant\n */\nconst ReverseSubtractEquation = 102;\n\n/**\n * A blend equation that uses the minimum of source and destination.\n *\n * @type {number}\n * @constant\n */\nconst MinEquation = 103;\n\n/**\n * A blend equation that uses the maximum of source and destination.\n *\n * @type {number}\n * @constant\n */\nconst MaxEquation = 104;\n\n/**\n * Multiplies all colors by `0`.\n *\n * @type {number}\n * @constant\n */\nconst ZeroFactor = 200;\n\n/**\n * Multiplies all colors by `1`.\n *\n * @type {number}\n * @constant\n */\nconst OneFactor = 201;\n\n/**\n * Multiplies all colors by the source colors.\n *\n * @type {number}\n * @constant\n */\nconst SrcColorFactor = 202;\n\n/**\n * Multiplies all colors by `1` minus each source color.\n *\n * @type {number}\n * @constant\n */\nconst OneMinusSrcColorFactor = 203;\n\n/**\n * Multiplies all colors by the source alpha value.\n *\n * @type {number}\n * @constant\n */\nconst SrcAlphaFactor = 204;\n\n/**\n * Multiplies all colors by 1 minus the source alpha value.\n *\n * @type {number}\n * @constant\n */\nconst OneMinusSrcAlphaFactor = 205;\n\n/**\n * Multiplies all colors by the destination alpha value.\n *\n * @type {number}\n * @constant\n */\nconst DstAlphaFactor = 206;\n\n/**\n * Multiplies all colors by `1` minus the destination alpha value.\n *\n * @type {number}\n * @constant\n */\nconst OneMinusDstAlphaFactor = 207;\n\n/**\n * Multiplies all colors by the destination color.\n *\n * @type {number}\n * @constant\n */\nconst DstColorFactor = 208;\n\n/**\n * Multiplies all colors by `1` minus each destination color.\n *\n * @type {number}\n * @constant\n */\nconst OneMinusDstColorFactor = 209;\n\n/**\n * Multiplies the RGB colors by the smaller of either the source alpha\n * value or the value of `1` minus the destination alpha value. The alpha\n * value is multiplied by `1`.\n *\n * @type {number}\n * @constant\n */\nconst SrcAlphaSaturateFactor = 210;\n\n/**\n * Multiplies all colors by a constant color.\n *\n * @type {number}\n * @constant\n */\nconst ConstantColorFactor = 211;\n\n/**\n * Multiplies all colors by `1` minus a constant color.\n *\n * @type {number}\n * @constant\n */\nconst OneMinusConstantColorFactor = 212;\n\n/**\n * Multiplies all colors by a constant alpha value.\n *\n * @type {number}\n * @constant\n */\nconst ConstantAlphaFactor = 213;\n\n/**\n * Multiplies all colors by 1 minus a constant alpha value.\n *\n * @type {number}\n * @constant\n */\nconst OneMinusConstantAlphaFactor = 214;\n\n/**\n * Never pass.\n *\n * @type {number}\n * @constant\n */\nconst NeverDepth = 0;\n\n/**\n * Always pass.\n *\n * @type {number}\n * @constant\n */\nconst AlwaysDepth = 1;\n\n/**\n * Pass if the incoming value is less than the depth buffer value.\n *\n * @type {number}\n * @constant\n */\nconst LessDepth = 2;\n\n/**\n * Pass if the incoming value is less than or equal to the depth buffer value.\n *\n * @type {number}\n * @constant\n */\nconst LessEqualDepth = 3;\n\n/**\n * Pass if the incoming value equals the depth buffer value.\n *\n * @type {number}\n * @constant\n */\nconst EqualDepth = 4;\n\n/**\n * Pass if the incoming value is greater than or equal to the depth buffer value.\n *\n * @type {number}\n * @constant\n */\nconst GreaterEqualDepth = 5;\n\n/**\n * Pass if the incoming value is greater than the depth buffer value.\n *\n * @type {number}\n * @constant\n */\nconst GreaterDepth = 6;\n\n/**\n * Pass if the incoming value is not equal to the depth buffer value.\n *\n * @type {number}\n * @constant\n */\nconst NotEqualDepth = 7;\n\n/**\n * Multiplies the environment map color with the surface color.\n *\n * @type {number}\n * @constant\n */\nconst MultiplyOperation = 0;\n\n/**\n * Uses reflectivity to blend between the two colors.\n *\n * @type {number}\n * @constant\n */\nconst MixOperation = 1;\n\n/**\n * Adds the two colors.\n *\n * @type {number}\n * @constant\n */\nconst AddOperation = 2;\n\n/**\n * No tone mapping is applied.\n *\n * @type {number}\n * @constant\n */\nconst NoToneMapping = 0;\n\n/**\n * Linear tone mapping.\n *\n * @type {number}\n * @constant\n */\nconst LinearToneMapping = 1;\n\n/**\n * Reinhard tone mapping.\n *\n * @type {number}\n * @constant\n */\nconst ReinhardToneMapping = 2;\n\n/**\n * Cineon tone mapping.\n *\n * @type {number}\n * @constant\n */\nconst CineonToneMapping = 3;\n\n/**\n * ACES Filmic tone mapping.\n *\n * @type {number}\n * @constant\n */\nconst ACESFilmicToneMapping = 4;\n\n/**\n * Custom tone mapping.\n *\n * Expects a custom implementation by modifying shader code of the material's fragment shader.\n *\n * @type {number}\n * @constant\n */\nconst CustomToneMapping = 5;\n\n/**\n * AgX tone mapping.\n *\n * @type {number}\n * @constant\n */\nconst AgXToneMapping = 6;\n\n/**\n * Neutral tone mapping.\n *\n * Implementation based on the Khronos 3D Commerce Group standard tone mapping.\n *\n * @type {number}\n * @constant\n */\nconst NeutralToneMapping = 7;\n\n/**\n * The skinned mesh shares the same world space as the skeleton.\n *\n * @type {string}\n * @constant\n */\nconst AttachedBindMode = 'attached';\n\n/**\n * The skinned mesh does not share the same world space as the skeleton.\n * This is useful when a skeleton is shared across multiple skinned meshes.\n *\n * @type {string}\n * @constant\n */\nconst DetachedBindMode = 'detached';\n\n/**\n * Maps textures using the geometry's UV coordinates.\n *\n * @type {number}\n * @constant\n */\nconst UVMapping = 300;\n\n/**\n * Reflection mapping for cube textures.\n *\n * @type {number}\n * @constant\n */\nconst CubeReflectionMapping = 301;\n\n/**\n * Refraction mapping for cube textures.\n *\n * @type {number}\n * @constant\n */\nconst CubeRefractionMapping = 302;\n\n/**\n * Reflection mapping for equirectangular textures.\n *\n * @type {number}\n * @constant\n */\nconst EquirectangularReflectionMapping = 303;\n\n/**\n * Refraction mapping for equirectangular textures.\n *\n * @type {number}\n * @constant\n */\nconst EquirectangularRefractionMapping = 304;\n\n/**\n * Reflection mapping for PMREM textures.\n *\n * @type {number}\n * @constant\n */\nconst CubeUVReflectionMapping = 306;\n\n/**\n * The texture will simply repeat to infinity.\n *\n * @type {number}\n * @constant\n */\nconst RepeatWrapping = 1000;\n\n/**\n * The last pixel of the texture stretches to the edge of the mesh.\n *\n * @type {number}\n * @constant\n */\nconst ClampToEdgeWrapping = 1001;\n\n/**\n * The texture will repeats to infinity, mirroring on each repeat.\n *\n * @type {number}\n * @constant\n */\nconst MirroredRepeatWrapping = 1002;\n\n/**\n * Returns the value of the texture element that is nearest (in Manhattan distance)\n * to the specified texture coordinates.\n *\n * @type {number}\n * @constant\n */\nconst NearestFilter = 1003;\n\n/**\n * Chooses the mipmap that most closely matches the size of the pixel being textured\n * and uses the `NearestFilter` criterion (the texel nearest to the center of the pixel)\n * to produce a texture value.\n *\n * @type {number}\n * @constant\n */\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004; // legacy\n\n/**\n * Chooses the two mipmaps that most closely match the size of the pixel being textured and\n * uses the `NearestFilter` criterion to produce a texture value from each mipmap.\n * The final texture value is a weighted average of those two values.\n *\n * @type {number}\n * @constant\n */\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005; // legacy\n\n/**\n * Returns the weighted average of the four texture elements that are closest to the specified\n * texture coordinates, and can include items wrapped or repeated from other parts of a texture,\n * depending on the values of `wrapS` and `wrapT`, and on the exact mapping.\n *\n * @type {number}\n * @constant\n */\nconst LinearFilter = 1006;\n\n/**\n * Chooses the mipmap that most closely matches the size of the pixel being textured and uses\n * the `LinearFilter` criterion (a weighted average of the four texels that are closest to the\n * center of the pixel) to produce a texture value.\n *\n * @type {number}\n * @constant\n */\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007; // legacy\n\n/**\n * Chooses the two mipmaps that most closely match the size of the pixel being textured and uses\n * the `LinearFilter` criterion to produce a texture value from each mipmap. The final texture value\n * is a weighted average of those two values.\n *\n * @type {number}\n * @constant\n */\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008; // legacy\n\n/**\n * An unsigned byte data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst UnsignedByteType = 1009;\n\n/**\n * A byte data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst ByteType = 1010;\n\n/**\n * A short data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst ShortType = 1011;\n\n/**\n * An unsigned short data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst UnsignedShortType = 1012;\n\n/**\n * An int data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst IntType = 1013;\n\n/**\n * An unsigned int data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst UnsignedIntType = 1014;\n\n/**\n * A float data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst FloatType = 1015;\n\n/**\n * A half float data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst HalfFloatType = 1016;\n\n/**\n * An unsigned short 4_4_4_4 (packed) data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst UnsignedShort4444Type = 1017;\n\n/**\n * An unsigned short 5_5_5_1 (packed) data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst UnsignedShort5551Type = 1018;\n\n/**\n * An unsigned int 24_8 data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst UnsignedInt248Type = 1020;\n\n/**\n * An unsigned int 5_9_9_9 (packed) data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst UnsignedInt5999Type = 35902;\n\n/**\n * An unsigned int 10_11_11 (packed) data type for textures.\n *\n * @type {number}\n * @constant\n */\nconst UnsignedInt101111Type = 35899;\n\n/**\n * Discards the red, green and blue components and reads just the alpha component.\n *\n * @type {number}\n * @constant\n */\nconst AlphaFormat = 1021;\n\n/**\n * Discards the alpha component and reads the red, green and blue component.\n *\n * @type {number}\n * @constant\n */\nconst RGBFormat = 1022;\n\n/**\n * Reads the red, green, blue and alpha components.\n *\n * @type {number}\n * @constant\n */\nconst RGBAFormat = 1023;\n\n/**\n * Reads each element as a single depth value, converts it to floating point, and clamps to the range `[0,1]`.\n *\n * @type {number}\n * @constant\n */\nconst DepthFormat = 1026;\n\n/**\n * Reads each element is a pair of depth and stencil values. The depth component of the pair is interpreted as\n * in `DepthFormat`. The stencil component is interpreted based on the depth + stencil internal format.\n *\n * @type {number}\n * @constant\n */\nconst DepthStencilFormat = 1027;\n\n/**\n * Discards the green, blue and alpha components and reads just the red component.\n *\n * @type {number}\n * @constant\n */\nconst RedFormat = 1028;\n\n/**\n * Discards the green, blue and alpha components and reads just the red component. The texels are read as integers instead of floating point.\n *\n * @type {number}\n * @constant\n */\nconst RedIntegerFormat = 1029;\n\n/**\n * Discards the alpha, and blue components and reads the red, and green components.\n *\n * @type {number}\n * @constant\n */\nconst RGFormat = 1030;\n\n/**\n * Discards the alpha, and blue components and reads the red, and green components. The texels are read as integers instead of floating point.\n *\n * @type {number}\n * @constant\n */\nconst RGIntegerFormat = 1031;\n\n/**\n * Discards the alpha component and reads the red, green and blue component. The texels are read as integers instead of floating point.\n *\n * @type {number}\n * @constant\n */\nconst RGBIntegerFormat = 1032;\n\n/**\n * Reads the red, green, blue and alpha components. The texels are read as integers instead of floating point.\n *\n * @type {number}\n * @constant\n */\nconst RGBAIntegerFormat = 1033;\n\n/**\n * A DXT1-compressed image in an RGB image format.\n *\n * @type {number}\n * @constant\n */\nconst RGB_S3TC_DXT1_Format = 33776;\n\n/**\n * A DXT1-compressed image in an RGB image format with a simple on/off alpha value.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_S3TC_DXT1_Format = 33777;\n\n/**\n * A DXT3-compressed image in an RGBA image format. Compared to a 32-bit RGBA texture, it offers 4:1 compression.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_S3TC_DXT3_Format = 33778;\n\n/**\n * A DXT5-compressed image in an RGBA image format. It also provides a 4:1 compression, but differs to the DXT3\n * compression in how the alpha compression is done.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_S3TC_DXT5_Format = 33779;\n\n/**\n * PVRTC RGB compression in 4-bit mode. One block for each 4×4 pixels.\n *\n * @type {number}\n * @constant\n */\nconst RGB_PVRTC_4BPPV1_Format = 35840;\n\n/**\n * PVRTC RGB compression in 2-bit mode. One block for each 8×4 pixels.\n *\n * @type {number}\n * @constant\n */\nconst RGB_PVRTC_2BPPV1_Format = 35841;\n\n/**\n * PVRTC RGBA compression in 4-bit mode. One block for each 4×4 pixels.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\n\n/**\n * PVRTC RGBA compression in 2-bit mode. One block for each 8×4 pixels.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\n\n/**\n * ETC1 RGB format.\n *\n * @type {number}\n * @constant\n */\nconst RGB_ETC1_Format = 36196;\n\n/**\n * ETC2 RGB format.\n *\n * @type {number}\n * @constant\n */\nconst RGB_ETC2_Format = 37492;\n\n/**\n * ETC2 RGBA format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ETC2_EAC_Format = 37496;\n\n/**\n * EAC R11 UNORM format.\n *\n * @type {number}\n * @constant\n */\nconst R11_EAC_Format = 37488; // 0x9270\n\n/**\n * EAC R11 SNORM format.\n *\n * @type {number}\n * @constant\n */\nconst SIGNED_R11_EAC_Format = 37489; // 0x9271\n\n/**\n * EAC RG11 UNORM format.\n *\n * @type {number}\n * @constant\n */\nconst RG11_EAC_Format = 37490; // 0x9272\n\n/**\n * EAC RG11 SNORM format.\n *\n * @type {number}\n * @constant\n */\nconst SIGNED_RG11_EAC_Format = 37491; // 0x9273\n\n/**\n * ASTC RGBA 4x4 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_4x4_Format = 37808;\n\n/**\n * ASTC RGBA 5x4 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_5x4_Format = 37809;\n\n/**\n * ASTC RGBA 5x5 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_5x5_Format = 37810;\n\n/**\n * ASTC RGBA 6x5 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_6x5_Format = 37811;\n\n/**\n * ASTC RGBA 6x6 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_6x6_Format = 37812;\n\n/**\n * ASTC RGBA 8x5 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_8x5_Format = 37813;\n\n/**\n * ASTC RGBA 8x6 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_8x6_Format = 37814;\n\n/**\n * ASTC RGBA 8x8 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_8x8_Format = 37815;\n\n/**\n * ASTC RGBA 10x5 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_10x5_Format = 37816;\n\n/**\n * ASTC RGBA 10x6 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_10x6_Format = 37817;\n\n/**\n * ASTC RGBA 10x8 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_10x8_Format = 37818;\n\n/**\n * ASTC RGBA 10x10 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_10x10_Format = 37819;\n\n/**\n * ASTC RGBA 12x10 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_12x10_Format = 37820;\n\n/**\n * ASTC RGBA 12x12 format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_ASTC_12x12_Format = 37821;\n\n/**\n * BPTC RGBA format.\n *\n * @type {number}\n * @constant\n */\nconst RGBA_BPTC_Format = 36492;\n\n/**\n * BPTC Signed RGB format.\n *\n * @type {number}\n * @constant\n */\nconst RGB_BPTC_SIGNED_Format = 36494;\n\n/**\n * BPTC Unsigned RGB format.\n *\n * @type {number}\n * @constant\n */\nconst RGB_BPTC_UNSIGNED_Format = 36495;\n\n/**\n * RGTC1 Red format.\n *\n * @type {number}\n * @constant\n */\nconst RED_RGTC1_Format = 36283;\n\n/**\n * RGTC1 Signed Red format.\n *\n * @type {number}\n * @constant\n */\nconst SIGNED_RED_RGTC1_Format = 36284;\n\n/**\n * RGTC2 Red Green format.\n *\n * @type {number}\n * @constant\n */\nconst RED_GREEN_RGTC2_Format = 36285;\n\n/**\n * RGTC2 Signed Red Green format.\n *\n * @type {number}\n * @constant\n */\nconst SIGNED_RED_GREEN_RGTC2_Format = 36286;\n\n/**\n * Animations are played once.\n *\n * @type {number}\n * @constant\n */\nconst LoopOnce = 2200;\n\n/**\n * Animations are played with a chosen number of repetitions, each time jumping from\n * the end of the clip directly to its beginning.\n *\n * @type {number}\n * @constant\n */\nconst LoopRepeat = 2201;\n\n/**\n * Animations are played with a chosen number of repetitions, alternately playing forward\n * and backward.\n *\n * @type {number}\n * @constant\n */\nconst LoopPingPong = 2202;\n\n/**\n * Discrete interpolation mode for keyframe tracks.\n *\n * @type {number}\n * @constant\n */\nconst InterpolateDiscrete = 2300;\n\n/**\n * Linear interpolation mode for keyframe tracks.\n *\n * @type {number}\n * @constant\n */\nconst InterpolateLinear = 2301;\n\n/**\n * Smooth interpolation mode for keyframe tracks.\n *\n * @type {number}\n * @constant\n */\nconst InterpolateSmooth = 2302;\n\n/**\n * Bezier interpolation mode for keyframe tracks.\n *\n * Uses cubic Bezier curves with explicit 2D control points.\n * Requires tangent data to be set on the track.\n *\n * @type {number}\n * @constant\n */\nconst InterpolateBezier = 2303;\n\n/**\n * Zero curvature ending for animations.\n *\n * @type {number}\n * @constant\n */\nconst ZeroCurvatureEnding = 2400;\n\n/**\n * Zero slope ending for animations.\n *\n * @type {number}\n * @constant\n */\nconst ZeroSlopeEnding = 2401;\n\n/**\n * Wrap around ending for animations.\n *\n * @type {number}\n * @constant\n */\nconst WrapAroundEnding = 2402;\n\n/**\n * Default animation blend mode.\n *\n * @type {number}\n * @constant\n */\nconst NormalAnimationBlendMode = 2500;\n\n/**\n * Additive animation blend mode. Can be used to layer motions on top of\n * each other to build complex performances from smaller re-usable assets.\n *\n * @type {number}\n * @constant\n */\nconst AdditiveAnimationBlendMode = 2501;\n\n/**\n * For every three vertices draw a single triangle.\n *\n * @type {number}\n * @constant\n */\nconst TrianglesDrawMode = 0;\n\n/**\n * For each vertex draw a triangle from the last three vertices.\n *\n * @type {number}\n * @constant\n */\nconst TriangleStripDrawMode = 1;\n\n/**\n * For each vertex draw a triangle from the first vertex and the last two vertices.\n *\n * @type {number}\n * @constant\n */\nconst TriangleFanDrawMode = 2;\n\n/**\n * The depth value is inverted (1.0 - z) for visualization purposes.\n *\n * @type {number}\n * @constant\n */\nconst BasicDepthPacking = 3200;\n\n/**\n * The depth value is packed into 32 bit RGBA.\n *\n * @type {number}\n * @constant\n */\nconst RGBADepthPacking = 3201;\n\n/**\n * The depth value is packed into 24 bit RGB.\n *\n * @type {number}\n * @constant\n */\nconst RGBDepthPacking = 3202;\n\n/**\n * The depth value is packed into 16 bit RG.\n *\n * @type {number}\n * @constant\n */\nconst RGDepthPacking = 3203;\n\n/**\n * Normal information is relative to the underlying surface.\n *\n * @type {number}\n * @constant\n */\nconst TangentSpaceNormalMap = 0;\n\n/**\n * Normal information is relative to the object orientation.\n *\n * @type {number}\n * @constant\n */\nconst ObjectSpaceNormalMap = 1;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\n\n/**\n * No color space.\n *\n * @type {string}\n * @constant\n */\nconst NoColorSpace = '';\n\n/**\n * sRGB color space.\n *\n * @type {string}\n * @constant\n */\nconst SRGBColorSpace = 'srgb';\n\n/**\n * sRGB-linear color space.\n *\n * @type {string}\n * @constant\n */\nconst LinearSRGBColorSpace = 'srgb-linear';\n\n/**\n * Linear transfer function.\n *\n * @type {string}\n * @constant\n */\nconst LinearTransfer = 'linear';\n\n/**\n * sRGB transfer function.\n *\n * @type {string}\n * @constant\n */\nconst SRGBTransfer = 'srgb';\n\n/**\n * No normal map packing.\n *\n * @type {string}\n * @constant\n */\nconst NoNormalPacking = '';\n\n/**\n * Normal RG packing.\n *\n * @type {string}\n * @constant\n */\nconst NormalRGPacking = 'rg';\n\n/**\n * Normal GA packing.\n *\n * @type {string}\n * @constant\n */\nconst NormalGAPacking = 'ga';\n\n/**\n * Sets the stencil buffer value to `0`.\n *\n * @type {number}\n * @constant\n */\nconst ZeroStencilOp = 0;\n\n/**\n * Keeps the current value.\n *\n * @type {number}\n * @constant\n */\nconst KeepStencilOp = 7680;\n\n/**\n * Sets the stencil buffer value to the specified reference value.\n *\n * @type {number}\n * @constant\n */\nconst ReplaceStencilOp = 7681;\n\n/**\n * Increments the current stencil buffer value. Clamps to the maximum representable unsigned value.\n *\n * @type {number}\n * @constant\n */\nconst IncrementStencilOp = 7682;\n\n/**\n * Decrements the current stencil buffer value. Clamps to `0`.\n *\n * @type {number}\n * @constant\n */\nconst DecrementStencilOp = 7683;\n\n/**\n * Increments the current stencil buffer value. Wraps stencil buffer value to zero when incrementing\n * the maximum representable unsigned value.\n *\n * @type {number}\n * @constant\n */\nconst IncrementWrapStencilOp = 34055;\n\n/**\n * Decrements the current stencil buffer value. Wraps stencil buffer value to the maximum representable\n * unsigned value when decrementing a stencil buffer value of `0`.\n *\n * @type {number}\n * @constant\n */\nconst DecrementWrapStencilOp = 34056;\n\n/**\n * Inverts the current stencil buffer value bitwise.\n *\n * @type {number}\n * @constant\n */\nconst InvertStencilOp = 5386;\n\n/**\n * Will never return true.\n *\n * @type {number}\n * @constant\n */\nconst NeverStencilFunc = 512;\n\n/**\n * Will return true if the stencil reference value is less than the current stencil value.\n *\n * @type {number}\n * @constant\n */\nconst LessStencilFunc = 513;\n\n/**\n * Will return true if the stencil reference value is equal to the current stencil value.\n *\n * @type {number}\n * @constant\n */\nconst EqualStencilFunc = 514;\n\n/**\n * Will return true if the stencil reference value is less than or equal to the current stencil value.\n *\n * @type {number}\n * @constant\n */\nconst LessEqualStencilFunc = 515;\n\n/**\n * Will return true if the stencil reference value is greater than the current stencil value.\n *\n * @type {number}\n * @constant\n */\nconst GreaterStencilFunc = 516;\n\n/**\n * Will return true if the stencil reference value is not equal to the current stencil value.\n *\n * @type {number}\n * @constant\n */\nconst NotEqualStencilFunc = 517;\n\n/**\n * Will return true if the stencil reference value is greater than or equal to the current stencil value.\n *\n * @type {number}\n * @constant\n */\nconst GreaterEqualStencilFunc = 518;\n\n/**\n * Will always return true.\n *\n * @type {number}\n * @constant\n */\nconst AlwaysStencilFunc = 519;\n\n/**\n * Never pass.\n *\n * @type {number}\n * @constant\n */\nconst NeverCompare = 512;\n\n/**\n * Pass if the incoming value is less than the texture value.\n *\n * @type {number}\n * @constant\n */\nconst LessCompare = 513;\n\n/**\n * Pass if the incoming value equals the texture value.\n *\n * @type {number}\n * @constant\n */\nconst EqualCompare = 514;\n\n/**\n * Pass if the incoming value is less than or equal to the texture value.\n *\n * @type {number}\n * @constant\n */\nconst LessEqualCompare = 515;\n\n/**\n * Pass if the incoming value is greater than the texture value.\n *\n * @type {number}\n * @constant\n */\nconst GreaterCompare = 516;\n\n/**\n * Pass if the incoming value is not equal to the texture value.\n *\n * @type {number}\n * @constant\n */\nconst NotEqualCompare = 517;\n\n/**\n * Pass if the incoming value is greater than or equal to the texture value.\n *\n * @type {number}\n * @constant\n */\nconst GreaterEqualCompare = 518;\n\n/**\n * Always pass.\n *\n * @type {number}\n * @constant\n */\nconst AlwaysCompare = 519;\n\n/**\n * The contents are intended to be specified once by the application, and used many\n * times as the source for drawing and image specification commands.\n *\n * @type {number}\n * @constant\n */\nconst StaticDrawUsage = 35044;\n\n/**\n * The contents are intended to be respecified repeatedly by the application, and\n * used many times as the source for drawing and image specification commands.\n *\n * @type {number}\n * @constant\n */\nconst DynamicDrawUsage = 35048;\n\n/**\n * The contents are intended to be specified once by the application, and used at most\n * a few times as the source for drawing and image specification commands.\n *\n * @type {number}\n * @constant\n */\nconst StreamDrawUsage = 35040;\n\n/**\n * The contents are intended to be specified once by reading data from the 3D API, and queried\n * many times by the application.\n *\n * @type {number}\n * @constant\n */\nconst StaticReadUsage = 35045;\n\n/**\n * The contents are intended to be respecified repeatedly by reading data from the 3D API, and queried\n * many times by the application.\n *\n * @type {number}\n * @constant\n */\nconst DynamicReadUsage = 35049;\n\n/**\n * The contents are intended to be specified once by reading data from the 3D API, and queried at most\n * a few times by the application\n *\n * @type {number}\n * @constant\n */\nconst StreamReadUsage = 35041;\n\n/**\n * The contents are intended to be specified once by reading data from the 3D API, and used many times as\n * the source for WebGL drawing and image specification commands.\n *\n * @type {number}\n * @constant\n */\nconst StaticCopyUsage = 35046;\n\n/**\n * The contents are intended to be respecified repeatedly by reading data from the 3D API, and used many times\n * as the source for WebGL drawing and image specification commands.\n *\n * @type {number}\n * @constant\n */\nconst DynamicCopyUsage = 35050;\n\n/**\n * The contents are intended to be specified once by reading data from the 3D API, and used at most a few times\n * as the source for WebGL drawing and image specification commands.\n *\n * @type {number}\n * @constant\n */\nconst StreamCopyUsage = 35042;\n\n/**\n * GLSL 1 shader code.\n *\n * @type {string}\n * @constant\n */\nconst GLSL1 = '100';\n\n/**\n * GLSL 3 shader code.\n *\n * @type {string}\n * @constant\n */\nconst GLSL3 = '300 es';\n\n/**\n * WebGL coordinate system.\n *\n * @type {number}\n * @constant\n */\nconst WebGLCoordinateSystem = 2000;\n\n/**\n * WebGPU coordinate system.\n *\n * @type {number}\n * @constant\n */\nconst WebGPUCoordinateSystem = 2001;\n\n/**\n * Represents the different timestamp query types.\n *\n * @type {ConstantsTimestampQuery}\n * @constant\n */\nconst TimestampQuery = {\n\tCOMPUTE: 'compute',\n\tRENDER: 'render'\n};\n\n/**\n * Represents mouse buttons and interaction types in context of controls.\n *\n * @type {ConstantsInterpolationSamplingType}\n * @constant\n */\nconst InterpolationSamplingType = {\n\tPERSPECTIVE: 'perspective',\n\tLINEAR: 'linear',\n\tFLAT: 'flat'\n};\n\n/**\n * Represents the different interpolation sampling modes.\n *\n * @type {ConstantsInterpolationSamplingMode}\n * @constant\n */\nconst InterpolationSamplingMode = {\n\tNORMAL: 'normal',\n\tCENTROID: 'centroid',\n\tSAMPLE: 'sample',\n\tFIRST: 'first',\n\tEITHER: 'either'\n};\n\n/**\n * Compatibility flags for features that may not be supported across all platforms.\n *\n * @type {Object}\n * @constant\n */\nconst Compatibility = {\n\tTEXTURE_COMPARE: 'depthTextureCompare'\n};\n\n/**\n * This type represents mouse buttons and interaction types in context of controls.\n *\n * @typedef {Object} ConstantsMouse\n * @property {number} MIDDLE - The left mouse button.\n * @property {number} LEFT - The middle mouse button.\n * @property {number} RIGHT - The right mouse button.\n * @property {number} ROTATE - A rotate interaction.\n * @property {number} DOLLY - A dolly interaction.\n * @property {number} PAN - A pan interaction.\n **/\n\n/**\n * This type represents touch interaction types in context of controls.\n *\n * @typedef {Object} ConstantsTouch\n * @property {number} ROTATE - A rotate interaction.\n * @property {number} PAN - A pan interaction.\n * @property {number} DOLLY_PAN - The dolly-pan interaction.\n * @property {number} DOLLY_ROTATE - A dolly-rotate interaction.\n **/\n\n/**\n * This type represents the different timestamp query types.\n *\n * @typedef {Object} ConstantsTimestampQuery\n * @property {string} COMPUTE - A `compute` timestamp query.\n * @property {string} RENDER - A `render` timestamp query.\n **/\n\n/**\n * Represents the different interpolation sampling types.\n *\n * @typedef {Object} ConstantsInterpolationSamplingType\n * @property {string} PERSPECTIVE - Perspective-correct interpolation.\n * @property {string} LINEAR - Linear interpolation.\n * @property {string} FLAT - Flat interpolation.\n */\n\n/**\n * Represents the different interpolation sampling modes.\n *\n * @typedef {Object} ConstantsInterpolationSamplingMode\n * @property {string} NORMAL - Normal sampling mode.\n * @property {string} CENTROID - Centroid sampling mode.\n * @property {string} SAMPLE - Sample-specific sampling mode.\n * @property {string} FIRST - Flat interpolation using the first vertex.\n * @property {string} EITHER - Flat interpolation using either vertex.\n */\n\n/**\n * Checks if an array contains values that require Uint32 representation.\n *\n * This function determines whether the array contains any values >= 65535,\n * which would require a Uint32Array rather than a Uint16Array for proper storage.\n * The function iterates from the end of the array, assuming larger values are\n * typically located at the end.\n *\n * @private\n * @param {Array<number>} array - The array to check.\n * @return {boolean} True if the array contains values >= 65535, false otherwise.\n */\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\n/**\n * Map of typed array constructor names to their constructors.\n * This mapping enables dynamic creation of typed arrays based on string type names.\n *\n * @private\n * @constant\n * @type {Object<string, TypedArrayConstructor>}\n */\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\n/**\n * Creates a typed array of the specified type from the given buffer.\n *\n * @private\n * @param {string} type - The name of the typed array type (e.g., 'Float32Array', 'Uint16Array').\n * @param {ArrayBuffer} buffer - The buffer to create the typed array from.\n * @return {TypedArray} A new typed array of the specified type.\n */\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\n/**\n * Returns `true` if the given object is a typed array.\n *\n * @param {any} array - The object to check.\n * @return {boolean} Whether the given object is a typed array.\n */\nfunction isTypedArray( array ) {\n\n\treturn ArrayBuffer.isView( array ) && ! ( array instanceof DataView );\n\n}\n\n/**\n * Creates an XHTML element with the specified tag name.\n *\n * This function uses the XHTML namespace to create DOM elements,\n * ensuring proper element creation in XML-based contexts.\n *\n * @private\n * @param {string} name - The tag name of the element to create (e.g., 'canvas', 'div').\n * @return {HTMLElement} The created XHTML element.\n */\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\n/**\n * Creates a canvas element configured for block display.\n *\n * This is a convenience function that creates a canvas element with\n * display style set to 'block', which is commonly used in three.js\n * rendering contexts to avoid inline element spacing issues.\n *\n * @return {HTMLCanvasElement} A canvas element with display set to 'block'.\n */\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\n/**\n * Internal cache for tracking warning messages to prevent duplicate warnings.\n *\n * @private\n * @type {Object<string, boolean>}\n */\nconst _cache = {};\n\n/**\n * Custom console function handler for intercepting log, warn, and error calls.\n *\n * @private\n * @type {Function|null}\n */\nlet _setConsoleFunction = null;\n\n/**\n * Sets a custom function to handle console output.\n *\n * This allows external code to intercept and handle console.log, console.warn,\n * and console.error calls made by three.js, which is useful for custom logging,\n * testing, or debugging workflows.\n *\n * @param {Function} fn - The function to handle console output. Should accept\n *                        (type, message, ...params) where type is 'log', 'warn', or 'error'.\n */\nfunction setConsoleFunction( fn ) {\n\n\t_setConsoleFunction = fn;\n\n}\n\n/**\n * Gets the currently set custom console function.\n *\n * @return {Function|null} The custom console function, or null if not set.\n */\nfunction getConsoleFunction() {\n\n\treturn _setConsoleFunction;\n\n}\n\n/**\n * Logs an informational message with the 'THREE.' prefix.\n *\n * If a custom console function is set via setConsoleFunction(), it will be used\n * instead of the native console.log. The first parameter is treated as the\n * method name and is automatically prefixed with 'THREE.'.\n *\n * @param {...any} params - The message components. The first param is used as\n *                          the method name and prefixed with 'THREE.'.\n */\nfunction log( ...params ) {\n\n\tconst message = 'THREE.' + params.shift();\n\n\tif ( _setConsoleFunction ) {\n\n\t\t_setConsoleFunction( 'log', message, ...params );\n\n\t} else {\n\n\t\tconsole.log( message, ...params );\n\n\t}\n\n}\n\n/**\n * Enhances log/warn/error messages related to TSL.\n *\n * @param {Array<any>} params - The original message parameters.\n * @returns {Array<any>} The filtered and enhanced message parameters.\n */\nfunction enhanceLogMessage( params ) {\n\n\tconst message = params[ 0 ];\n\n\tif ( typeof message === 'string' && message.startsWith( 'TSL:' ) ) {\n\n\t\tconst stackTrace = params[ 1 ];\n\n\t\tif ( stackTrace && stackTrace.isStackTrace ) {\n\n\t\t\tparams[ 0 ] += ' ' + stackTrace.getLocation();\n\n\t\t} else {\n\n\t\t\tparams[ 1 ] = 'Stack trace not available. Enable \"THREE.Node.captureStackTrace\" to capture stack traces.';\n\n\t\t}\n\n\t}\n\n\treturn params;\n\n}\n\n/**\n * Logs a warning message with the 'THREE.' prefix.\n *\n * If a custom console function is set via setConsoleFunction(), it will be used\n * instead of the native console.warn. The first parameter is treated as the\n * method name and is automatically prefixed with 'THREE.'.\n *\n * @param {...any} params - The message components. The first param is used as\n *                          the method name and prefixed with 'THREE.'.\n */\nfunction warn( ...params ) {\n\n\tparams = enhanceLogMessage( params );\n\n\tconst message = 'THREE.' + params.shift();\n\n\tif ( _setConsoleFunction ) {\n\n\t\t_setConsoleFunction( 'warn', message, ...params );\n\n\t} else {\n\n\t\tconst stackTrace = params[ 0 ];\n\n\t\tif ( stackTrace && stackTrace.isStackTrace ) {\n\n\t\t\tconsole.warn( stackTrace.getError( message ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( message, ...params );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Logs an error message with the 'THREE.' prefix.\n *\n * If a custom console function is set via setConsoleFunction(), it will be used\n * instead of the native console.error. The first parameter is treated as the\n * method name and is automatically prefixed with 'THREE.'.\n *\n * @param {...any} params - The message components. The first param is used as\n *                          the method name and prefixed with 'THREE.'.\n */\nfunction error( ...params ) {\n\n\tparams = enhanceLogMessage( params );\n\n\tconst message = 'THREE.' + params.shift();\n\n\tif ( _setConsoleFunction ) {\n\n\t\t_setConsoleFunction( 'error', message, ...params );\n\n\t} else {\n\n\t\tconst stackTrace = params[ 0 ];\n\n\t\tif ( stackTrace && stackTrace.isStackTrace ) {\n\n\t\t\tconsole.error( stackTrace.getError( message ) );\n\n\t\t} else {\n\n\t\t\tconsole.error( message, ...params );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Logs a warning message only once, preventing duplicate warnings.\n *\n * This function maintains an internal cache of warning messages and will only\n * output each unique warning message once. Useful for warnings that may be\n * triggered repeatedly but should only be shown to the user once.\n *\n * @param {...any} params - The warning message components.\n */\nfunction warnOnce( ...params ) {\n\n\tconst message = params.join( ' ' );\n\n\tif ( message in _cache ) return;\n\n\t_cache[ message ] = true;\n\n\twarn( ...params );\n\n}\n\n/**\n * Yields execution to the main thread to allow rendering and other tasks.\n * Uses scheduler.yield() when available (Chrome 115+), falls back to requestAnimationFrame.\n *\n * @return {Promise<void>}\n */\nfunction yieldToMain() {\n\n\tif ( typeof self !== 'undefined' && typeof self.scheduler !== 'undefined' && typeof self.scheduler.yield !== 'undefined' ) {\n\n\t\treturn self.scheduler.yield();\n\n\t}\n\n\treturn new Promise( resolve => {\n\n\t\trequestAnimationFrame( resolve );\n\n\t} );\n\n}\n\n/**\n * Asynchronously probes for WebGL sync object completion.\n *\n * This function creates a promise that resolves when the WebGL sync object\n * signals completion or rejects if the sync operation fails. It uses polling\n * at the specified interval to check the sync status without blocking the\n * main thread. This is useful for GPU-CPU synchronization in WebGL contexts.\n *\n * @private\n * @param {WebGL2RenderingContext} gl - The WebGL rendering context.\n * @param {WebGLSync} sync - The WebGL sync object to wait for.\n * @param {number} interval - The polling interval in milliseconds.\n * @return {Promise<void>} A promise that resolves when the sync completes or rejects if it fails.\n */\nfunction probeAsync( gl, sync, interval ) {\n\n\treturn new Promise( function ( resolve, reject ) {\n\n\t\tfunction probe() {\n\n\t\t\tswitch ( gl.clientWaitSync( sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0 ) ) {\n\n\t\t\t\tcase gl.WAIT_FAILED:\n\t\t\t\t\treject();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.TIMEOUT_EXPIRED:\n\t\t\t\t\tsetTimeout( probe, interval );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tresolve();\n\n\t\t\t}\n\n\t\t}\n\n\t\tsetTimeout( probe, interval );\n\n\t} );\n\n}\n\n/**\n * Used to select the correct depth functions\n * when reversed depth buffer is used.\n *\n * @private\n * @type {Object}\n */\nconst ReversedDepthFuncs = {\n\t[ NeverDepth ]: AlwaysDepth,\n\t[ LessDepth ]: GreaterDepth,\n\t[ EqualDepth ]: NotEqualDepth,\n\t[ LessEqualDepth ]: GreaterEqualDepth,\n\n\t[ AlwaysDepth ]: NeverDepth,\n\t[ GreaterDepth ]: LessDepth,\n\t[ NotEqualDepth ]: EqualDepth,\n\t[ GreaterEqualDepth ]: LessEqualDepth,\n};\n\n/**\n * This modules allows to dispatch event objects on custom JavaScript objects.\n *\n * Main repository: [eventdispatcher.js](https://github.com/mrdoob/eventdispatcher.js/)\n *\n * Code Example:\n * ```js\n * class Car extends EventDispatcher {\n * \tstart() {\n *\t\tthis.dispatchEvent( { type: 'start', message: 'vroom vroom!' } );\n *\t}\n *};\n *\n * // Using events with the custom object\n * const car = new Car();\n * car.addEventListener( 'start', function ( event ) {\n * \talert( event.message );\n * } );\n *\n * car.start();\n * ```\n */\nclass EventDispatcher {\n\n\t/**\n\t * Adds the given event listener to the given event type.\n\t *\n\t * @param {string} type - The type of event to listen to.\n\t * @param {Function} listener - The function that gets called when the event is fired.\n\t */\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === -1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns `true` if the given event listener has been added to the given event type.\n\t *\n\t * @param {string} type - The type of event.\n\t * @param {Function} listener - The listener to check.\n\t * @return {boolean} Whether the given event listener has been added to the given event type.\n\t */\n\thasEventListener( type, listener ) {\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners === undefined ) return false;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== -1;\n\n\t}\n\n\t/**\n\t * Removes the given event listener from the given event type.\n\t *\n\t * @param {string} type - The type of event.\n\t * @param {Function} listener - The listener to remove.\n\t */\n\tremoveEventListener( type, listener ) {\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners === undefined ) return;\n\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== -1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Dispatches an event object.\n\t *\n\t * @param {Object} event - The event that gets fired.\n\t */\n\tdispatchEvent( event ) {\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners === undefined ) return;\n\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n/**\n * Generate a [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)\n * (universally unique identifier).\n *\n * @return {string} The UUID.\n */\nfunction generateUUID() {\n\n\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\n/**\n * Clamps the given value between min and max.\n *\n * @param {number} value - The value to clamp.\n * @param {number} min - The min value.\n * @param {number} max - The max value.\n * @return {number} The clamped value.\n */\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n/**\n * Computes the Euclidean modulo of the given parameters that\n * is `( ( n % m ) + m ) % m`.\n *\n * @param {number} n - The first parameter.\n * @param {number} m - The second parameter.\n * @return {number} The Euclidean modulo.\n */\nfunction euclideanModulo( n, m ) {\n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n/**\n * Performs a linear mapping from range `<a1, a2>` to range `<b1, b2>`\n * for the given value. `a2` must be greater than `a1`.\n *\n * @param {number} x - The value to be mapped.\n * @param {number} a1 - Minimum value for range A.\n * @param {number} a2 - Maximum value for range A.\n * @param {number} b1 - Minimum value for range B.\n * @param {number} b2 - Maximum value for range B.\n * @return {number} The mapped value.\n */\nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n/**\n * Returns the percentage in the closed interval `[0, 1]` of the given value\n * between the start and end point.\n *\n * @param {number} x - The start point\n * @param {number} y - The end point.\n * @param {number} value - A value between start and end.\n * @return {number} The interpolation factor.\n */\nfunction inverseLerp( x, y, value ) {\n\n\t// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n/**\n * Returns a value linearly interpolated from two known points based on the given interval -\n * `t = 0` will return `x` and `t = 1` will return `y`.\n *\n * @param {number} x - The start point\n * @param {number} y - The end point.\n * @param {number} t - The interpolation factor in the closed interval `[0, 1]`.\n * @return {number} The interpolated value.\n */\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n/**\n * Smoothly interpolate a number from `x` to `y` in  a spring-like manner using a delta\n * time to maintain frame rate independent movement. For details, see\n * [Frame rate independent damping using lerp](http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/).\n *\n * @param {number} x - The current point.\n * @param {number} y - The target point.\n * @param {number} lambda - A higher lambda value will make the movement more sudden,\n * and a lower value will make the movement more gradual.\n * @param {number} dt - Delta time in seconds.\n * @return {number} The interpolated value.\n */\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n/**\n * Returns a value that alternates between `0` and the given `length` parameter.\n *\n * @param {number} x - The value to pingpong.\n * @param {number} [length=1] - The positive value the function will pingpong to.\n * @return {number} The alternated value.\n */\nfunction pingpong( x, length = 1 ) {\n\n\t// https://www.desmos.com/calculator/vcsjnyz7x4\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n/**\n * Returns a value in the range `[0,1]` that represents the percentage that `x` has\n * moved between `min` and `max`, but smoothed or slowed down the closer `x` is to\n * the `min` and `max`.\n *\n * See [Smoothstep](http://en.wikipedia.org/wiki/Smoothstep) for more details.\n *\n * @param {number} x - The value to evaluate based on its position between `min` and `max`.\n * @param {number} min - The min value. Any `x` value below `min` will be `0`. `min` must be lower than `max`.\n * @param {number} max - The max value. Any `x` value above `max` will be `1`. `max` must be greater than `min`.\n * @return {number} The alternated value.\n */\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\n/**\n * A [variation on smoothstep](https://en.wikipedia.org/wiki/Smoothstep#Variations)\n * that has zero 1st and 2nd order derivatives at `x=0` and `x=1`.\n *\n * @param {number} x - The value to evaluate based on its position between `min` and `max`.\n * @param {number} min - The min value. Any `x` value below `min` will be `0`. `min` must be lower than `max`.\n * @param {number} max - The max value. Any `x` value above `max` will be `1`. `max` must be greater than `min`.\n * @return {number} The alternated value.\n */\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n/**\n * Returns a random integer from `<low, high>` interval.\n *\n * @param {number} low - The lower value boundary.\n * @param {number} high - The upper value boundary\n * @return {number} A random integer.\n */\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n/**\n * Returns a random float from `<low, high>` interval.\n *\n * @param {number} low - The lower value boundary.\n * @param {number} high - The upper value boundary\n * @return {number} A random float.\n */\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n/**\n * Returns a random integer from `<-range/2, range/2>` interval.\n *\n * @param {number} range - Defines the value range.\n * @return {number} A random float.\n */\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n/**\n * Returns a deterministic pseudo-random float in the interval `[0, 1]`.\n *\n * @param {number} [s] - The integer seed.\n * @return {number} A random float.\n */\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} degrees - A value in degrees.\n * @return {number} The converted value in radians.\n */\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\n/**\n * Converts radians to degrees.\n *\n * @param {number} radians - A value in radians.\n * @return {number} The converted value in degrees.\n */\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\n/**\n * Returns `true` if the given number is a power of two.\n *\n * @param {number} value - The value to check.\n * @return {boolean} Whether the given number is a power of two or not.\n */\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\n/**\n * Returns the smallest power of two that is greater than or equal to the given number.\n *\n * @param {number} value - The value to find a POT for. Must be greater than `0`.\n * @return {number} The smallest power of two that is greater than or equal to the given number.\n */\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\n/**\n * Returns the largest power of two that is less than or equal to the given number.\n *\n * @param {number} value - The value to find a POT for. Must be greater than `0`.\n * @return {number} The largest power of two that is less than or equal to the given number.\n */\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\n/**\n * Sets the given quaternion from the [Intrinsic Proper Euler Angles](https://en.wikipedia.org/wiki/Euler_angles)\n * defined by the given angles and order.\n *\n * Rotations are applied to the axes in the order specified by order:\n * rotation by angle `a` is applied first, then by angle `b`, then by angle `c`.\n *\n * @param {Quaternion} q - The quaternion to set.\n * @param {number} a - The rotation applied to the first axis, in radians.\n * @param {number} b - The rotation applied to the second axis, in radians.\n * @param {number} c - The rotation applied to the third axis, in radians.\n * @param {('XYX'|'XZX'|'YXY'|'YZY'|'ZXZ'|'ZYZ')} order - A string specifying the axes order.\n */\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\twarn( 'MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\n/**\n * Denormalizes the given value according to the given typed array.\n *\n * @param {number} value - The value to denormalize.\n * @param {TypedArray} array - The typed array that defines the data type of the value.\n * @return {number} The denormalize (float) value in the range `[0,1]`.\n */\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, -1 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, -1 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, -1 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\n/**\n * Normalizes the given value according to the given typed array.\n *\n * @param {number} value - The float value in the range `[0,1]` to normalize.\n * @param {TypedArray} array - The typed array that defines the data type of the value.\n * @return {number} The normalize value.\n */\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\n/**\n * @class\n * @classdesc A collection of math utility functions.\n * @hideconstructor\n */\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\t/**\n\t * Generate a [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)\n\t * (universally unique identifier).\n\t *\n\t * @static\n\t * @method\n\t * @return {string} The UUID.\n\t */\n\tgenerateUUID: generateUUID,\n\t/**\n\t * Clamps the given value between min and max.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} value - The value to clamp.\n\t * @param {number} min - The min value.\n\t * @param {number} max - The max value.\n\t * @return {number} The clamped value.\n\t */\n\tclamp: clamp,\n\t/**\n\t * Computes the Euclidean modulo of the given parameters that\n\t * is `( ( n % m ) + m ) % m`.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} n - The first parameter.\n\t * @param {number} m - The second parameter.\n\t * @return {number} The Euclidean modulo.\n\t */\n\teuclideanModulo: euclideanModulo,\n\t/**\n\t * Performs a linear mapping from range `<a1, a2>` to range `<b1, b2>`\n\t * for the given value.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} x - The value to be mapped.\n\t * @param {number} a1 - Minimum value for range A.\n\t * @param {number} a2 - Maximum value for range A.\n\t * @param {number} b1 - Minimum value for range B.\n\t * @param {number} b2 - Maximum value for range B.\n\t * @return {number} The mapped value.\n\t */\n\tmapLinear: mapLinear,\n\t/**\n\t * Returns the percentage in the closed interval `[0, 1]` of the given value\n\t * between the start and end point.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} x - The start point\n\t * @param {number} y - The end point.\n\t * @param {number} value - A value between start and end.\n\t * @return {number} The interpolation factor.\n\t */\n\tinverseLerp: inverseLerp,\n\t/**\n\t * Returns a value linearly interpolated from two known points based on the given interval -\n\t * `t = 0` will return `x` and `t = 1` will return `y`.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} x - The start point\n\t * @param {number} y - The end point.\n\t * @param {number} t - The interpolation factor in the closed interval `[0, 1]`.\n\t * @return {number} The interpolated value.\n\t */\n\tlerp: lerp,\n\t/**\n\t * Smoothly interpolate a number from `x` to `y` in  a spring-like manner using a delta\n\t * time to maintain frame rate independent movement. For details, see\n\t * [Frame rate independent damping using lerp](http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/).\n\t *\n\t * @static\n\t * @method\n\t * @param {number} x - The current point.\n\t * @param {number} y - The target point.\n\t * @param {number} lambda - A higher lambda value will make the movement more sudden,\n\t * and a lower value will make the movement more gradual.\n\t * @param {number} dt - Delta time in seconds.\n\t * @return {number} The interpolated value.\n\t */\n\tdamp: damp,\n\t/**\n\t * Returns a value that alternates between `0` and the given `length` parameter.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} x - The value to pingpong.\n\t * @param {number} [length=1] - The positive value the function will pingpong to.\n\t * @return {number} The alternated value.\n\t */\n\tpingpong: pingpong,\n\t/**\n\t * Returns a value in the range `[0,1]` that represents the percentage that `x` has\n\t * moved between `min` and `max`, but smoothed or slowed down the closer `x` is to\n\t * the `min` and `max`.\n\t *\n\t * See [Smoothstep](http://en.wikipedia.org/wiki/Smoothstep) for more details.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} x - The value to evaluate based on its position between min and max.\n\t * @param {number} min - The min value. Any x value below min will be `0`.\n\t * @param {number} max - The max value. Any x value above max will be `1`.\n\t * @return {number} The alternated value.\n\t */\n\tsmoothstep: smoothstep,\n\t/**\n\t * A [variation on smoothstep](https://en.wikipedia.org/wiki/Smoothstep#Variations)\n\t * that has zero 1st and 2nd order derivatives at x=0 and x=1.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} x - The value to evaluate based on its position between min and max.\n\t * @param {number} min - The min value. Any x value below min will be `0`.\n\t * @param {number} max - The max value. Any x value above max will be `1`.\n\t * @return {number} The alternated value.\n\t */\n\tsmootherstep: smootherstep,\n\t/**\n\t * Returns a random integer from `<low, high>` interval.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} low - The lower value boundary.\n\t * @param {number} high - The upper value boundary\n\t * @return {number} A random integer.\n\t */\n\trandInt: randInt,\n\t/**\n\t * Returns a random float from `<low, high>` interval.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} low - The lower value boundary.\n\t * @param {number} high - The upper value boundary\n\t * @return {number} A random float.\n\t */\n\trandFloat: randFloat,\n\t/**\n\t * Returns a random integer from `<-range/2, range/2>` interval.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} range - Defines the value range.\n\t * @return {number} A random float.\n\t */\n\trandFloatSpread: randFloatSpread,\n\t/**\n\t * Returns a deterministic pseudo-random float in the interval `[0, 1]`.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} [s] - The integer seed.\n\t * @return {number} A random float.\n\t */\n\tseededRandom: seededRandom,\n\t/**\n\t * Converts degrees to radians.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} degrees - A value in degrees.\n\t * @return {number} The converted value in radians.\n\t */\n\tdegToRad: degToRad,\n\t/**\n\t * Converts radians to degrees.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} radians - A value in radians.\n\t * @return {number} The converted value in degrees.\n\t */\n\tradToDeg: radToDeg,\n\t/**\n\t * Returns `true` if the given number is a power of two.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} value - The value to check.\n\t * @return {boolean} Whether the given number is a power of two or not.\n\t */\n\tisPowerOfTwo: isPowerOfTwo,\n\t/**\n\t * Returns the smallest power of two that is greater than or equal to the given number.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} value - The value to find a POT for.\n\t * @return {number} The smallest power of two that is greater than or equal to the given number.\n\t */\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\t/**\n\t * Returns the largest power of two that is less than or equal to the given number.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} value - The value to find a POT for.\n\t * @return {number} The largest power of two that is less than or equal to the given number.\n\t */\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\t/**\n\t * Sets the given quaternion from the [Intrinsic Proper Euler Angles](https://en.wikipedia.org/wiki/Euler_angles)\n\t * defined by the given angles and order.\n\t *\n\t * Rotations are applied to the axes in the order specified by order:\n\t * rotation by angle `a` is applied first, then by angle `b`, then by angle `c`.\n\t *\n\t * @static\n\t * @method\n\t * @param {Quaternion} q - The quaternion to set.\n\t * @param {number} a - The rotation applied to the first axis, in radians.\n\t * @param {number} b - The rotation applied to the second axis, in radians.\n\t * @param {number} c - The rotation applied to the third axis, in radians.\n\t * @param {('XYX'|'XZX'|'YXY'|'YZY'|'ZXZ'|'ZYZ')} order - A string specifying the axes order.\n\t */\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\t/**\n\t * Normalizes the given value according to the given typed array.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} value - The float value in the range `[0,1]` to normalize.\n\t * @param {TypedArray} array - The typed array that defines the data type of the value.\n\t * @return {number} The normalize value.\n\t */\n\tnormalize: normalize,\n\t/**\n\t * Denormalizes the given value according to the given typed array.\n\t *\n\t * @static\n\t * @method\n\t * @param {number} value - The value to denormalize.\n\t * @param {TypedArray} array - The typed array that defines the data type of the value.\n\t * @return {number} The denormalize (float) value in the range `[0,1]`.\n\t */\n\tdenormalize: denormalize\n};\n\n/**\n * Class representing a 2D vector. A 2D vector is an ordered pair of numbers\n * (labeled x and y), which can be used to represent a number of things, such as:\n *\n * - A point in 2D space (i.e. a position on a plane).\n * - A direction and length across a plane. In three.js the length will\n * always be the Euclidean distance(straight-line distance) from `(0, 0)` to `(x, y)`\n * and the direction is also measured from `(0, 0)` towards `(x, y)`.\n * - Any arbitrary ordered pair of numbers.\n *\n * There are other things a 2D vector can be used to represent, such as\n * momentum vectors, complex numbers and so on, however these are the most\n * common uses in three.js.\n *\n * Iterating through a vector instance will yield its components `(x, y)` in\n * the corresponding order.\n * ```js\n * const a = new THREE.Vector2( 0, 1 );\n *\n * //no arguments; will be initialised to (0, 0)\n * const b = new THREE.Vector2( );\n *\n * const d = a.distanceTo( b );\n * ```\n */\nclass Vector2 {\n\n\tstatic {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tVector2.prototype.isVector2 = true;\n\n\t}\n\n\t/**\n\t * Constructs a new 2D vector.\n\t *\n\t * @param {number} [x=0] - The x value of this vector.\n\t * @param {number} [y=0] - The y value of this vector.\n\t */\n\tconstructor( x = 0, y = 0 ) {\n\n\t\t/**\n\t\t * The x value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.x = x;\n\n\t\t/**\n\t\t * The y value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.y = y;\n\n\t}\n\n\t/**\n\t * Alias for {@link Vector2#x}.\n\t *\n\t * @type {number}\n\t */\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\t/**\n\t * Alias for {@link Vector2#y}.\n\t *\n\t * @type {number}\n\t */\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\t/**\n\t * Sets the vector components.\n\t *\n\t * @param {number} x - The value of the x component.\n\t * @param {number} y - The value of the y component.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the same value.\n\t *\n\t * @param {number} scalar - The value to set for all vector components.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's x component to the given value\n\t *\n\t * @param {number} x - The value to set.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's y component to the given value\n\t *\n\t * @param {number} y - The value to set.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Allows to set a vector component with an index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y.\n\t * @param {number} value - The value to set.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the value of the vector component which matches the given index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y.\n\t * @return {number} A vector component value.\n\t */\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a new vector with copied values from this instance.\n\t *\n\t * @return {Vector2} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\t/**\n\t * Copies the values of the given vector to this instance.\n\t *\n\t * @param {Vector2} v - The vector to copy.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector to this instance.\n\t *\n\t * @param {Vector2} v - The vector to add.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given scalar value to all components of this instance.\n\t *\n\t * @param {number} s - The scalar to add.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector2} a - The first vector.\n\t * @param {Vector2} b - The second vector.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector scaled by the given factor to this instance.\n\t *\n\t * @param {Vector2} v - The vector.\n\t * @param {number} s - The factor that scales `v`.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vector from this instance.\n\t *\n\t * @param {Vector2} v - The vector to subtract.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given scalar value from all components of this instance.\n\t *\n\t * @param {number} s - The scalar to subtract.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector2} a - The first vector.\n\t * @param {Vector2} b - The second vector.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given vector with this instance.\n\t *\n\t * @param {Vector2} v - The vector to multiply.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given scalar value with all components of this instance.\n\t *\n\t * @param {number} scalar - The scalar to multiply.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Divides this instance by the given vector.\n\t *\n\t * @param {Vector2} v - The vector to divide.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Divides this vector by the given scalar.\n\t *\n\t * @param {number} scalar - The scalar to divide.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\t/**\n\t * Multiplies this vector (with an implicit 1 as the 3rd component) by\n\t * the given 3x3 matrix.\n\t *\n\t * @param {Matrix3} m - The matrix to apply.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x or y value is greater than the given vector's x or y\n\t * value, replace that value with the corresponding min value.\n\t *\n\t * @param {Vector2} v - The vector.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x or y value is less than the given vector's x or y\n\t * value, replace that value with the corresponding max value.\n\t *\n\t * @param {Vector2} v - The vector.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x or y value is greater than the max vector's x or y\n\t * value, it is replaced by the corresponding value.\n\t * If this vector's x or y value is less than the min vector's x or y value,\n\t * it is replaced by the corresponding value.\n\t *\n\t * @param {Vector2} min - The minimum x and y values.\n\t * @param {Vector2} max - The maximum x and y values in the desired range.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = clamp( this.x, min.x, max.x );\n\t\tthis.y = clamp( this.y, min.y, max.y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x or y values are greater than the max value, they are\n\t * replaced by the max value.\n\t * If this vector's x or y values are less than the min value, they are\n\t * replaced by the min value.\n\t *\n\t * @param {number} minVal - The minimum value the components will be clamped to.\n\t * @param {number} maxVal - The maximum value the components will be clamped to.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = clamp( this.x, minVal, maxVal );\n\t\tthis.y = clamp( this.y, minVal, maxVal );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's length is greater than the max value, it is replaced by\n\t * the max value.\n\t * If this vector's length is less than the min value, it is replaced by the\n\t * min value.\n\t *\n\t * @param {number} min - The minimum value the vector length will be clamped to.\n\t * @param {number} max - The maximum value the vector length will be clamped to.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( clamp( length, min, max ) );\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded down to the nearest integer value.\n\t *\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded up to the nearest integer value.\n\t *\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded to the nearest integer value\n\t *\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded towards zero (up if negative,\n\t * down if positive) to an integer value.\n\t *\n\t * @return {Vector2} A reference to this vector.\n\t */\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Inverts this vector - i.e. sets x = -x and y = -y.\n\t *\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the dot product of the given vector with this instance.\n\t *\n\t * @param {Vector2} v - The vector to compute the dot product with.\n\t * @return {number} The result of the dot product.\n\t */\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\t/**\n\t * Calculates the cross product of the given vector with this instance.\n\t *\n\t * @param {Vector2} v - The vector to compute the cross product with.\n\t * @return {number} The result of the cross product.\n\t */\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\t/**\n\t * Computes the square of the Euclidean length (straight-line length) from\n\t * (0, 0) to (x, y). If you are comparing the lengths of vectors, you should\n\t * compare the length squared instead as it is slightly more efficient to calculate.\n\t *\n\t * @return {number} The square length of this vector.\n\t */\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\t/**\n\t * Computes the  Euclidean length (straight-line length) from (0, 0) to (x, y).\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\t/**\n\t * Computes the Manhattan length of this vector.\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\t/**\n\t * Converts this vector to a unit vector - that is, sets it equal to a vector\n\t * with the same direction as this one, but with a vector length of `1`.\n\t *\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\t/**\n\t * Computes the angle in radians of this vector with respect to the positive x-axis.\n\t *\n\t * @return {number} The angle in radians.\n\t */\n\tangle() {\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\t/**\n\t * Returns the angle between the given vector and this instance in radians.\n\t *\n\t * @param {Vector2} v - The vector to compute the angle with.\n\t * @return {number} The angle in radians.\n\t */\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, -1, 1 ) );\n\n\t}\n\n\t/**\n\t * Computes the distance from the given vector to this instance.\n\t *\n\t * @param {Vector2} v - The vector to compute the distance to.\n\t * @return {number} The distance.\n\t */\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\t/**\n\t * Computes the squared distance from the given vector to this instance.\n\t * If you are just comparing the distance with another distance, you should compare\n\t * the distance squared instead as it is slightly more efficient to calculate.\n\t *\n\t * @param {Vector2} v - The vector to compute the squared distance to.\n\t * @return {number} The squared distance.\n\t */\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\t/**\n\t * Computes the Manhattan distance from the given vector to this instance.\n\t *\n\t * @param {Vector2} v - The vector to compute the Manhattan distance to.\n\t * @return {number} The Manhattan distance.\n\t */\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\t/**\n\t * Sets this vector to a vector with the same direction as this one, but\n\t * with the specified length.\n\t *\n\t * @param {number} length - The new length of this vector.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vector and this instance, where\n\t * alpha is the percent distance along the line - alpha = 0 will be this\n\t * vector, and alpha = 1 will be the given one.\n\t *\n\t * @param {Vector2} v - The vector to interpolate towards.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vectors, where alpha is the percent\n\t * distance along the line - alpha = 0 will be first vector, and alpha = 1 will\n\t * be the second one. The result is stored in this instance.\n\t *\n\t * @param {Vector2} v1 - The first vector.\n\t * @param {Vector2} v2 - The second vector.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this vector is equal with the given one.\n\t *\n\t * @param {Vector2} v - The vector to test for equality.\n\t * @return {boolean} Whether this vector is equal with the given one.\n\t */\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\t/**\n\t * Sets this vector's x value to be `array[ offset ]` and y\n\t * value to be `array[ offset + 1 ]`.\n\t *\n\t * @param {Array<number>} array - An array holding the vector component values.\n\t * @param {number} [offset=0] - The offset into the array.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the components of this vector to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the vector components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The vector components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Sets the components of this vector from the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute holding vector data.\n\t * @param {number} index - The index into the attribute.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Rotates this vector around the given center by the given angle.\n\t *\n\t * @param {Vector2} center - The point around which to rotate.\n\t * @param {number} angle - The angle to rotate, in radians.\n\t * @return {Vector2} A reference to this vector.\n\t */\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets each component of this vector to a pseudo-random value between `0` and\n\t * `1`, excluding `1`.\n\t *\n\t * @return {Vector2} A reference to this vector.\n\t */\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\n/**\n * Class for representing a Quaternion. Quaternions are used in three.js to represent rotations.\n *\n * Iterating through a vector instance will yield its components `(x, y, z, w)` in\n * the corresponding order.\n *\n * Note that three.js expects Quaternions to be normalized.\n * ```js\n * const quaternion = new THREE.Quaternion();\n * quaternion.setFromAxisAngle( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 );\n *\n * const vector = new THREE.Vector3( 1, 0, 0 );\n * vector.applyQuaternion( quaternion );\n * ```\n */\nclass Quaternion {\n\n\t/**\n\t * Constructs a new quaternion.\n\t *\n\t * @param {number} [x=0] - The x value of this quaternion.\n\t * @param {number} [y=0] - The y value of this quaternion.\n\t * @param {number} [z=0] - The z value of this quaternion.\n\t * @param {number} [w=1] - The w value of this quaternion.\n\t */\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\t/**\n\t * Interpolates between two quaternions via SLERP. This implementation assumes the\n\t * quaternion data are managed in flat arrays.\n\t *\n\t * @param {Array<number>} dst - The destination array.\n\t * @param {number} dstOffset - An offset into the destination array.\n\t * @param {Array<number>} src0 - The source array of the first quaternion.\n\t * @param {number} srcOffset0 - An offset into the first source array.\n\t * @param {Array<number>} src1 -  The source array of the second quaternion.\n\t * @param {number} srcOffset1 - An offset into the second source array.\n\t * @param {number} t - The interpolation factor. A value in the range `[0,1]` will interpolate. A value outside the range `[0,1]` will extrapolate.\n\t * @see {@link Quaternion#slerp}\n\t */\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tlet x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet dot = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1;\n\n\t\t\tif ( dot < 0 ) {\n\n\t\t\t\tx1 = - x1;\n\t\t\t\ty1 = - y1;\n\t\t\t\tz1 = - z1;\n\t\t\t\tw1 = - w1;\n\n\t\t\t\tdot = - dot;\n\n\t\t\t}\n\n\t\t\tlet s = 1 - t;\n\n\t\t\tif ( dot < 0.9995 ) {\n\n\t\t\t\t// slerp\n\n\t\t\t\tconst theta = Math.acos( dot );\n\t\t\t\tconst sin = Math.sin( theta );\n\n\t\t\t\ts = Math.sin( s * theta ) / sin;\n\t\t\t\tt = Math.sin( t * theta ) / sin;\n\n\t\t\t\tx0 = x0 * s + x1 * t;\n\t\t\t\ty0 = y0 * s + y1 * t;\n\t\t\t\tz0 = z0 * s + z1 * t;\n\t\t\t\tw0 = w0 * s + w1 * t;\n\n\t\t\t} else {\n\n\t\t\t\t// for small angles, lerp then normalize\n\n\t\t\t\tx0 = x0 * s + x1 * t;\n\t\t\t\ty0 = y0 * s + y1 * t;\n\t\t\t\tz0 = z0 * s + z1 * t;\n\t\t\t\tw0 = w0 * s + w1 * t;\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\t/**\n\t * Multiplies two quaternions. This implementation assumes the quaternion data are managed\n\t * in flat arrays.\n\t *\n\t * @param {Array<number>} dst - The destination array.\n\t * @param {number} dstOffset - An offset into the destination array.\n\t * @param {Array<number>} src0 - The source array of the first quaternion.\n\t * @param {number} srcOffset0 - An offset into the first source array.\n\t * @param {Array<number>} src1 -  The source array of the second quaternion.\n\t * @param {number} srcOffset1 - An offset into the second source array.\n\t * @return {Array<number>} The destination array.\n\t * @see {@link Quaternion#multiplyQuaternions}.\n\t */\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\t/**\n\t * The x value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The y value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The z value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The w value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 1\n\t */\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * Sets the quaternion components.\n\t *\n\t * @param {number} x - The x value of this quaternion.\n\t * @param {number} y - The y value of this quaternion.\n\t * @param {number} z - The z value of this quaternion.\n\t * @param {number} w - The w value of this quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new quaternion with copied values from this instance.\n\t *\n\t * @return {Quaternion} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\t/**\n\t * Copies the values of the given quaternion to this instance.\n\t *\n\t * @param {Quaternion} quaternion - The quaternion to copy.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion from the rotation specified by the given\n\t * Euler angles.\n\t *\n\t * @param {Euler} euler - The Euler angles.\n\t * @param {boolean} [update=true] - Whether the internal `onChange` callback should be executed or not.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromEuler( euler, update = true ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\twarn( 'Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion from the given axis and angle.\n\t *\n\t * @param {Vector3} axis - The normalized axis.\n\t * @param {number} angle - The angle in radians.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion from the given rotation matrix.\n\t *\n\t * @param {Matrix4} m - A 4x4 matrix of which the upper 3x3 of matrix is a pure rotation matrix (i.e. unscaled).\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion to the rotation required to rotate the direction vector\n\t * `vFrom` to the direction vector `vTo`.\n\t *\n\t * @param {Vector3} vFrom - The first (normalized) direction vector.\n\t * @param {Vector3} vTo - The second (normalized) direction vector.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < 1e-8 ) { // the epsilon value has been discussed in #31286\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\t/**\n\t * Returns the angle between this quaternion and the given one in radians.\n\t *\n\t * @param {Quaternion} q - The quaternion to compute the angle with.\n\t * @return {number} The angle in radians.\n\t */\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), -1, 1 ) ) );\n\n\t}\n\n\t/**\n\t * Rotates this quaternion by a given angular step to the given quaternion.\n\t * The method ensures that the final quaternion will not overshoot `q`.\n\t *\n\t * @param {Quaternion} q - The target quaternion.\n\t * @param {number} step - The angular step in radians.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion to the identity quaternion; that is, to the\n\t * quaternion that represents \"no rotation\".\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\t/**\n\t * Inverts this quaternion via {@link Quaternion#conjugate}. The\n\t * quaternion is assumed to have unit length.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tinvert() {\n\n\t\treturn this.conjugate();\n\n\t}\n\n\t/**\n\t * Returns the rotational conjugate of this quaternion. The conjugate of a\n\t * quaternion represents the same rotation in the opposite direction about\n\t * the rotational axis.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tconjugate() {\n\n\t\tthis._x *= -1;\n\t\tthis._y *= -1;\n\t\tthis._z *= -1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the dot product of this quaternion and the given one.\n\t *\n\t * @param {Quaternion} v - The quaternion to compute the dot product with.\n\t * @return {number} The result of the dot product.\n\t */\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\t/**\n\t * Computes the squared Euclidean length (straight-line length) of this quaternion,\n\t * considered as a 4 dimensional vector. This can be useful if you are comparing the\n\t * lengths of two quaternions, as this is a slightly more efficient calculation than\n\t * {@link Quaternion#length}.\n\t *\n\t * @return {number} The squared Euclidean length.\n\t */\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\t/**\n\t * Computes the Euclidean length (straight-line length) of this quaternion,\n\t * considered as a 4 dimensional vector.\n\t *\n\t * @return {number} The Euclidean length.\n\t */\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\t/**\n\t * Normalizes this quaternion - that is, calculated the quaternion that performs\n\t * the same rotation as this one, but has a length equal to `1`.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies this quaternion by the given one.\n\t *\n\t * @param {Quaternion} q - The quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\t/**\n\t * Pre-multiplies this quaternion by the given one.\n\t *\n\t * @param {Quaternion} q - The quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\t/**\n\t * Multiplies the given quaternions and stores the result in this instance.\n\t *\n\t * @param {Quaternion} a - The first quaternion.\n\t * @param {Quaternion} b - The second quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Performs a spherical linear interpolation between this quaternion and the target quaternion.\n\t *\n\t * @param {Quaternion} qb - The target quaternion.\n\t * @param {number} t - The interpolation factor. A value in the range `[0,1]` will interpolate. A value outside the range `[0,1]` will extrapolate.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tslerp( qb, t ) {\n\n\t\tlet x = qb._x, y = qb._y, z = qb._z, w = qb._w;\n\n\t\tlet dot = this.dot( qb );\n\n\t\tif ( dot < 0 ) {\n\n\t\t\tx = - x;\n\t\t\ty = - y;\n\t\t\tz = - z;\n\t\t\tw = - w;\n\n\t\t\tdot = - dot;\n\n\t\t}\n\n\t\tlet s = 1 - t;\n\n\t\tif ( dot < 0.9995 ) {\n\n\t\t\t// slerp\n\n\t\t\tconst theta = Math.acos( dot );\n\t\t\tconst sin = Math.sin( theta );\n\n\t\t\ts = Math.sin( s * theta ) / sin;\n\t\t\tt = Math.sin( t * theta ) / sin;\n\n\t\t\tthis._x = this._x * s + x * t;\n\t\t\tthis._y = this._y * s + y * t;\n\t\t\tthis._z = this._z * s + z * t;\n\t\t\tthis._w = this._w * s + w * t;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t} else {\n\n\t\t\t// for small angles, lerp then normalize\n\n\t\t\tthis._x = this._x * s + x * t;\n\t\t\tthis._y = this._y * s + y * t;\n\t\t\tthis._z = this._z * s + z * t;\n\t\t\tthis._w = this._w * s + w * t;\n\n\t\t\tthis.normalize(); // normalize calls _onChangeCallback()\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Performs a spherical linear interpolation between the given quaternions\n\t * and stores the result in this quaternion.\n\t *\n\t * @param {Quaternion} qa - The source quaternion.\n\t * @param {Quaternion} qb - The target quaternion.\n\t * @param {number} t - The interpolation factor in the closed interval `[0, 1]`.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\t/**\n\t * Sets this quaternion to a uniformly random, normalized quaternion.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\trandom() {\n\n\t\t// Ken Shoemake\n\t\t// Uniform random rotations\n\t\t// D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n\n\t\tconst theta1 = 2 * Math.PI * Math.random();\n\t\tconst theta2 = 2 * Math.PI * Math.random();\n\n\t\tconst x0 = Math.random();\n\t\tconst r1 = Math.sqrt( 1 - x0 );\n\t\tconst r2 = Math.sqrt( x0 );\n\n\t\treturn this.set(\n\t\t\tr1 * Math.sin( theta1 ),\n\t\t\tr1 * Math.cos( theta1 ),\n\t\t\tr2 * Math.sin( theta2 ),\n\t\t\tr2 * Math.cos( theta2 ),\n\t\t);\n\n\t}\n\n\t/**\n\t * Returns `true` if this quaternion is equal with the given one.\n\t *\n\t * @param {Quaternion} quaternion - The quaternion to test for equality.\n\t * @return {boolean} Whether this quaternion is equal with the given one.\n\t */\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\t/**\n\t * Sets this quaternion's components from the given array.\n\t *\n\t * @param {Array<number>} array - An array holding the quaternion component values.\n\t * @param {number} [offset=0] - The offset into the array.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the components of this quaternion to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the quaternion components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The quaternion components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Sets the components of this quaternion from the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute holding quaternion data.\n\t * @param {number} index - The index into the attribute.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * This methods defines the serialization result of this class. Returns the\n\t * numerical elements of this quaternion in an array of format `[x, y, z, w]`.\n\t *\n\t * @return {Array<number>} The serialized quaternion.\n\t */\n\ttoJSON() {\n\n\t\treturn this.toArray();\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\n/**\n * Class representing a 3D vector. A 3D vector is an ordered triplet of numbers\n * (labeled x, y and z), which can be used to represent a number of things, such as:\n *\n * - A point in 3D space.\n * - A direction and length in 3D space. In three.js the length will\n * always be the Euclidean distance(straight-line distance) from `(0, 0, 0)` to `(x, y, z)`\n * and the direction is also measured from `(0, 0, 0)` towards `(x, y, z)`.\n * - Any arbitrary ordered triplet of numbers.\n *\n * There are other things a 3D vector can be used to represent, such as\n * momentum vectors and so on, however these are the most\n * common uses in three.js.\n *\n * Iterating through a vector instance will yield its components `(x, y, z)` in\n * the corresponding order.\n * ```js\n * const a = new THREE.Vector3( 0, 1, 0 );\n *\n * //no arguments; will be initialised to (0, 0, 0)\n * const b = new THREE.Vector3( );\n *\n * const d = a.distanceTo( b );\n * ```\n */\nclass Vector3 {\n\n\tstatic {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tVector3.prototype.isVector3 = true;\n\n\t}\n\n\t/**\n\t * Constructs a new 3D vector.\n\t *\n\t * @param {number} [x=0] - The x value of this vector.\n\t * @param {number} [y=0] - The y value of this vector.\n\t * @param {number} [z=0] - The z value of this vector.\n\t */\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\t/**\n\t\t * The x value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.x = x;\n\n\t\t/**\n\t\t * The y value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.y = y;\n\n\t\t/**\n\t\t * The z value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.z = z;\n\n\t}\n\n\t/**\n\t * Sets the vector components.\n\t *\n\t * @param {number} x - The value of the x component.\n\t * @param {number} y - The value of the y component.\n\t * @param {number} z - The value of the z component.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the same value.\n\t *\n\t * @param {number} scalar - The value to set for all vector components.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's x component to the given value.\n\t *\n\t * @param {number} x - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's y component to the given value.\n\t *\n\t * @param {number} y - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's z component to the given value.\n\t *\n\t * @param {number} z - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Allows to set a vector component with an index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y, `2` equals to z.\n\t * @param {number} value - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the value of the vector component which matches the given index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y, `2` equals to z.\n\t * @return {number} A vector component value.\n\t */\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a new vector with copied values from this instance.\n\t *\n\t * @return {Vector3} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\t/**\n\t * Copies the values of the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to copy.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to add.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given scalar value to all components of this instance.\n\t *\n\t * @param {number} s - The scalar to add.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector scaled by the given factor to this instance.\n\t *\n\t * @param {Vector3|Vector4} v - The vector.\n\t * @param {number} s - The factor that scales `v`.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vector from this instance.\n\t *\n\t * @param {Vector3} v - The vector to subtract.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given scalar value from all components of this instance.\n\t *\n\t * @param {number} s - The scalar to subtract.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given vector with this instance.\n\t *\n\t * @param {Vector3} v - The vector to multiply.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given scalar value with all components of this instance.\n\t *\n\t * @param {number} scalar - The scalar to multiply.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given Euler rotation to this vector.\n\t *\n\t * @param {Euler} euler - The Euler angles.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion$5.setFromEuler( euler ) );\n\n\t}\n\n\t/**\n\t * Applies a rotation specified by an axis and an angle to this vector.\n\t *\n\t * @param {Vector3} axis - A normalized vector representing the rotation axis.\n\t * @param {number} angle - The angle in radians.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$5.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\t/**\n\t * Multiplies this vector with the given 3x3 matrix.\n\t *\n\t * @param {Matrix3} m - The 3x3 matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies this vector by the given normal matrix and normalizes\n\t * the result.\n\t *\n\t * @param {Matrix3} m - The normal matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\t/**\n\t * Multiplies this vector (with an implicit 1 in the 4th dimension) by m, and\n\t * divides by perspective.\n\t *\n\t * @param {Matrix4} m - The matrix to apply.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given Quaternion to this vector.\n\t *\n\t * @param {Quaternion} q - The Quaternion.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyQuaternion( q ) {\n\n\t\t// quaternion q is assumed to have unit length\n\n\t\tconst vx = this.x, vy = this.y, vz = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// t = 2 * cross( q.xyz, v );\n\t\tconst tx = 2 * ( qy * vz - qz * vy );\n\t\tconst ty = 2 * ( qz * vx - qx * vz );\n\t\tconst tz = 2 * ( qx * vy - qy * vx );\n\n\t\t// v + q.w * t + cross( q.xyz, t );\n\t\tthis.x = vx + qw * tx + qy * tz - qz * ty;\n\t\tthis.y = vy + qw * ty + qz * tx - qx * tz;\n\t\tthis.z = vz + qw * tz + qx * ty - qy * tx;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Projects this vector from world space into the camera's normalized\n\t * device coordinate (NDC) space.\n\t *\n\t * @param {Camera} camera - The camera.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\t/**\n\t * Unprojects this vector from the camera's normalized device coordinate (NDC)\n\t * space into world space.\n\t *\n\t * @param {Camera} camera - The camera.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\t/**\n\t * Transforms the direction of this vector by a matrix (the upper left 3 x 3\n\t * subset of the given 4x4 matrix and then normalizes the result.\n\t *\n\t * @param {Matrix4} m - The matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\t/**\n\t * Divides this instance by the given vector.\n\t *\n\t * @param {Vector3} v - The vector to divide.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Divides this vector by the given scalar.\n\t *\n\t * @param {number} scalar - The scalar to divide.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z value is greater than the given vector's x, y or z\n\t * value, replace that value with the corresponding min value.\n\t *\n\t * @param {Vector3} v - The vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z value is less than the given vector's x, y or z\n\t * value, replace that value with the corresponding max value.\n\t *\n\t * @param {Vector3} v - The vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z value is greater than the max vector's x, y or z\n\t * value, it is replaced by the corresponding value.\n\t * If this vector's x, y or z value is less than the min vector's x, y or z value,\n\t * it is replaced by the corresponding value.\n\t *\n\t * @param {Vector3} min - The minimum x, y and z values.\n\t * @param {Vector3} max - The maximum x, y and z values in the desired range.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = clamp( this.x, min.x, max.x );\n\t\tthis.y = clamp( this.y, min.y, max.y );\n\t\tthis.z = clamp( this.z, min.z, max.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z values are greater than the max value, they are\n\t * replaced by the max value.\n\t * If this vector's x, y or z values are less than the min value, they are\n\t * replaced by the min value.\n\t *\n\t * @param {number} minVal - The minimum value the components will be clamped to.\n\t * @param {number} maxVal - The maximum value the components will be clamped to.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = clamp( this.x, minVal, maxVal );\n\t\tthis.y = clamp( this.y, minVal, maxVal );\n\t\tthis.z = clamp( this.z, minVal, maxVal );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's length is greater than the max value, it is replaced by\n\t * the max value.\n\t * If this vector's length is less than the min value, it is replaced by the\n\t * min value.\n\t *\n\t * @param {number} min - The minimum value the vector length will be clamped to.\n\t * @param {number} max - The maximum value the vector length will be clamped to.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( clamp( length, min, max ) );\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded down to the nearest integer value.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded up to the nearest integer value.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded to the nearest integer value\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded towards zero (up if negative,\n\t * down if positive) to an integer value.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Inverts this vector - i.e. sets x = -x, y = -y and z = -z.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the dot product of the given vector with this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the dot product with.\n\t * @return {number} The result of the dot product.\n\t */\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t/**\n\t * Computes the square of the Euclidean length (straight-line length) from\n\t * (0, 0, 0) to (x, y, z). If you are comparing the lengths of vectors, you should\n\t * compare the length squared instead as it is slightly more efficient to calculate.\n\t *\n\t * @return {number} The square length of this vector.\n\t */\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\t/**\n\t * Computes the  Euclidean length (straight-line length) from (0, 0, 0) to (x, y, z).\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\t/**\n\t * Computes the Manhattan length of this vector.\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\t/**\n\t * Converts this vector to a unit vector - that is, sets it equal to a vector\n\t * with the same direction as this one, but with a vector length of `1`.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\t/**\n\t * Sets this vector to a vector with the same direction as this one, but\n\t * with the specified length.\n\t *\n\t * @param {number} length - The new length of this vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vector and this instance, where\n\t * alpha is the percent distance along the line - alpha = 0 will be this\n\t * vector, and alpha = 1 will be the given one.\n\t *\n\t * @param {Vector3} v - The vector to interpolate towards.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vectors, where alpha is the percent\n\t * distance along the line - alpha = 0 will be first vector, and alpha = 1 will\n\t * be the second one. The result is stored in this instance.\n\t *\n\t * @param {Vector3} v1 - The first vector.\n\t * @param {Vector3} v2 - The second vector.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the cross product of the given vector with this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the cross product with.\n\t * @return {Vector3} The result of the cross product.\n\t */\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\t/**\n\t * Calculates the cross product of the given vectors and stores the result\n\t * in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Projects this vector onto the given one.\n\t *\n\t * @param {Vector3} v - The vector to project to.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\t/**\n\t * Projects this vector onto a plane by subtracting this\n\t * vector projected onto the plane's normal from this vector.\n\t *\n\t * @param {Vector3} planeNormal - The plane normal.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\t/**\n\t * Reflects this vector off a plane orthogonal to the given normal vector.\n\t *\n\t * @param {Vector3} normal - The (normalized) normal vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\treflect( normal ) {\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\t/**\n\t * Returns the angle between the given vector and this instance in radians.\n\t *\n\t * @param {Vector3} v - The vector to compute the angle with.\n\t * @return {number} The angle in radians.\n\t */\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, -1, 1 ) );\n\n\t}\n\n\t/**\n\t * Computes the distance from the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the distance to.\n\t * @return {number} The distance.\n\t */\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\t/**\n\t * Computes the squared distance from the given vector to this instance.\n\t * If you are just comparing the distance with another distance, you should compare\n\t * the distance squared instead as it is slightly more efficient to calculate.\n\t *\n\t * @param {Vector3} v - The vector to compute the squared distance to.\n\t * @return {number} The squared distance.\n\t */\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\t/**\n\t * Computes the Manhattan distance from the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the Manhattan distance to.\n\t * @return {number} The Manhattan distance.\n\t */\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given spherical coordinates.\n\t *\n\t * @param {Spherical} s - The spherical coordinates.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given spherical coordinates.\n\t *\n\t * @param {number} radius - The radius.\n\t * @param {number} phi - The phi angle in radians.\n\t * @param {number} theta - The theta angle in radians.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given cylindrical coordinates.\n\t *\n\t * @param {Cylindrical} c - The cylindrical coordinates.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given cylindrical coordinates.\n\t *\n\t * @param {number} radius - The radius.\n\t * @param {number} theta - The theta angle in radians.\n\t * @param {number} y - The y value.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the position elements of the\n\t * given transformation matrix.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the scale elements of the\n\t * given transformation matrix.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components from the specified matrix column.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @param {number} index - The column index.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the specified matrix column.\n\t *\n\t * @param {Matrix3} m - The 3x3 matrix.\n\t * @param {number} index - The column index.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given Euler angles.\n\t *\n\t * @param {Euler} e - The Euler angles to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components from the RGB components of the\n\t * given color.\n\t *\n\t * @param {Color} c - The color to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromColor( c ) {\n\n\t\tthis.x = c.r;\n\t\tthis.y = c.g;\n\t\tthis.z = c.b;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this vector is equal with the given one.\n\t *\n\t * @param {Vector3} v - The vector to test for equality.\n\t * @return {boolean} Whether this vector is equal with the given one.\n\t */\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\t/**\n\t * Sets this vector's x value to be `array[ offset ]`, y value to be `array[ offset + 1 ]`\n\t * and z value to be `array[ offset + 2 ]`.\n\t *\n\t * @param {Array<number>} array - An array holding the vector component values.\n\t * @param {number} [offset=0] - The offset into the array.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the components of this vector to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the vector components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The vector components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Sets the components of this vector from the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute holding vector data.\n\t * @param {number} index - The index into the attribute.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets each component of this vector to a pseudo-random value between `0` and\n\t * `1`, excluding `1`.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this vector to a uniformly random point on a unit sphere.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\trandomDirection() {\n\n\t\t// https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst theta = Math.random() * Math.PI * 2;\n\t\tconst u = Math.random() * 2 - 1;\n\t\tconst c = Math.sqrt( 1 - u * u );\n\n\t\tthis.x = c * Math.cos( theta );\n\t\tthis.y = u;\n\t\tthis.z = c * Math.sin( theta );\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$5 = /*@__PURE__*/ new Quaternion();\n\n/**\n * Represents a 3x3 matrix.\n *\n * A Note on Row-Major and Column-Major Ordering:\n *\n * The constructor and {@link Matrix3#set} method take arguments in\n * [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)\n * order, while internally they are stored in the {@link Matrix3#elements} array in column-major order.\n * This means that calling:\n * ```js\n * const m = new THREE.Matrix();\n * m.set( 11, 12, 13,\n *        21, 22, 23,\n *        31, 32, 33 );\n * ```\n * will result in the elements array containing:\n * ```js\n * m.elements = [ 11, 21, 31,\n *                12, 22, 32,\n *                13, 23, 33 ];\n * ```\n * and internally all calculations are performed using column-major ordering.\n * However, as the actual ordering makes no difference mathematically and\n * most people are used to thinking about matrices in row-major order, the\n * three.js documentation shows matrices in row-major order. Just bear in\n * mind that if you are reading the source code, you'll have to take the\n * transpose of any matrices outlined here to make sense of the calculations.\n */\nclass Matrix3 {\n\n\tstatic {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t}\n\n\t/**\n\t * Constructs a new 3x3 matrix. The arguments are supposed to be\n\t * in row-major order. If no arguments are provided, the constructor\n\t * initializes the matrix as an identity matrix.\n\t *\n\t * @param {number} [n11] - 1-1 matrix element.\n\t * @param {number} [n12] - 1-2 matrix element.\n\t * @param {number} [n13] - 1-3 matrix element.\n\t * @param {number} [n21] - 2-1 matrix element.\n\t * @param {number} [n22] - 2-2 matrix element.\n\t * @param {number} [n23] - 2-3 matrix element.\n\t * @param {number} [n31] - 3-1 matrix element.\n\t * @param {number} [n32] - 3-2 matrix element.\n\t * @param {number} [n33] - 3-3 matrix element.\n\t */\n\tconstructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\t/**\n\t\t * A column-major list of matrix values.\n\t\t *\n\t\t * @type {Array<number>}\n\t\t */\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n21, n22, n23, n31, n32, n33 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the elements of the matrix.The arguments are supposed to be\n\t * in row-major order.\n\t *\n\t * @param {number} [n11] - 1-1 matrix element.\n\t * @param {number} [n12] - 1-2 matrix element.\n\t * @param {number} [n13] - 1-3 matrix element.\n\t * @param {number} [n21] - 2-1 matrix element.\n\t * @param {number} [n22] - 2-2 matrix element.\n\t * @param {number} [n23] - 2-3 matrix element.\n\t * @param {number} [n31] - 3-1 matrix element.\n\t * @param {number} [n32] - 3-2 matrix element.\n\t * @param {number} [n33] - 3-3 matrix element.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix to the 3x3 identity matrix.\n\t *\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the values of the given matrix to this instance.\n\t *\n\t * @param {Matrix3} m - The matrix to copy.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Extracts the basis of this matrix into the three axis vectors provided.\n\t *\n\t * @param {Vector3} xAxis - The basis's x axis.\n\t * @param {Vector3} yAxis - The basis's y axis.\n\t * @param {Vector3} zAxis - The basis's z axis.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Set this matrix to the upper 3x3 matrix of the given 4x4 matrix.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Post-multiplies this matrix by the given 3x3 matrix.\n\t *\n\t * @param {Matrix3} m - The matrix to multiply with.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\t/**\n\t * Pre-multiplies this matrix by the given 3x3 matrix.\n\t *\n\t * @param {Matrix3} m - The matrix to multiply with.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\t/**\n\t * Multiples the given 3x3 matrices and stores the result\n\t * in this matrix.\n\t *\n\t * @param {Matrix3} a - The first matrix.\n\t * @param {Matrix3} b - The second matrix.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies every component of the matrix by the given scalar.\n\t *\n\t * @param {number} s - The scalar.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes and returns the determinant of this matrix.\n\t *\n\t * @return {number} The determinant.\n\t */\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\t/**\n\t * Inverts this matrix, using the [analytic method](https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution).\n\t * You can not invert with a determinant of zero. If you attempt this, the method produces\n\t * a zero matrix instead.\n\t *\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Transposes this matrix in place.\n\t *\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes the normal matrix which is the inverse transpose of the upper\n\t * left 3x3 portion of the given 4x4 matrix.\n\t *\n\t * @param {Matrix4} matrix4 - The 4x4 matrix.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\t/**\n\t * Transposes this matrix into the supplied array, and returns itself unchanged.\n\t *\n\t * @param {Array<number>} r - An array to store the transposed matrix elements.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the UV transform matrix from offset, repeat, rotation, and center.\n\t *\n\t * @param {number} tx - Offset x.\n\t * @param {number} ty - Offset y.\n\t * @param {number} sx - Repeat x.\n\t * @param {number} sy - Repeat y.\n\t * @param {number} rotation - Rotation, in radians. Positive values rotate counterclockwise.\n\t * @param {number} cx - Center x of rotation.\n\t * @param {number} cy - Center y of rotation\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Scales this matrix with the given scalar values.\n\t *\n\t * @param {number} sx - The amount to scale in the X axis.\n\t * @param {number} sy - The amount to scale in the Y axis.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tscale( sx, sy ) {\n\n\t\tthis.premultiply( _m3.makeScale( sx, sy ) );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Rotates this matrix by the given angle.\n\t *\n\t * @param {number} theta - The rotation in radians.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\trotate( theta ) {\n\n\t\tthis.premultiply( _m3.makeRotation( - theta ) );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Translates this matrix by the given scalar values.\n\t *\n\t * @param {number} tx - The amount to translate in the X axis.\n\t * @param {number} ty - The amount to translate in the Y axis.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\ttranslate( tx, ty ) {\n\n\t\tthis.premultiply( _m3.makeTranslation( tx, ty ) );\n\n\t\treturn this;\n\n\t}\n\n\t// for 2D Transforms\n\n\t/**\n\t * Sets this matrix as a 2D translation transform.\n\t *\n\t * @param {number|Vector2} x - The amount to translate in the X axis or alternatively a translation vector.\n\t * @param {number} y - The amount to translate in the Y axis.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tmakeTranslation( x, y ) {\n\n\t\tif ( x.isVector2 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x.x,\n\t\t\t\t0, 1, x.y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x,\n\t\t\t\t0, 1, y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix as a 2D rotational transformation.\n\t *\n\t * @param {number} theta - The rotation in radians.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tmakeRotation( theta ) {\n\n\t\t// counterclockwise\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0,\n\t\t\ts, c, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix as a 2D scale transform.\n\t *\n\t * @param {number} x - The amount to scale in the X axis.\n\t * @param {number} y - The amount to scale in the Y axis.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tmakeScale( x, y ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0,\n\t\t\t0, y, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this matrix is equal with the given one.\n\t *\n\t * @param {Matrix3} matrix - The matrix to test for equality.\n\t * @return {boolean} Whether this matrix is equal with the given one.\n\t */\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Sets the elements of the matrix from the given array.\n\t *\n\t * @param {Array<number>} array - The matrix elements in column-major order.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Matrix3} A reference to this matrix.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the elements of this matrix to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the matrix elements in column-major order.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The matrix elements in column-major order.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Returns a matrix with copied values from this instance.\n\t *\n\t * @return {Matrix3} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\nconst LINEAR_REC709_TO_XYZ = /*@__PURE__*/ new Matrix3().set(\n\t0.4123908, 0.3575843, 0.1804808,\n\t0.2126390, 0.7151687, 0.0721923,\n\t0.0193308, 0.1191948, 0.9505322\n);\n\nconst XYZ_TO_LINEAR_REC709 = /*@__PURE__*/ new Matrix3().set(\n\t3.2409699, -1.5373832, -0.4986108,\n\t-0.9692436, 1.8759675, 0.0415551,\n\t0.0556301, -0.203977, 1.0569715\n);\n\nfunction createColorManagement() {\n\n\tconst ColorManagement = {\n\n\t\tenabled: true,\n\n\t\tworkingColorSpace: LinearSRGBColorSpace,\n\n\t\t/**\n\t\t * Implementations of supported color spaces.\n\t\t *\n\t\t * Required:\n\t\t *\t- primaries: chromaticity coordinates [ rx ry gx gy bx by ]\n\t\t *\t- whitePoint: reference white [ x y ]\n\t\t *\t- transfer: transfer function (pre-defined)\n\t\t *\t- toXYZ: Matrix3 RGB to XYZ transform\n\t\t *\t- fromXYZ: Matrix3 XYZ to RGB transform\n\t\t *\t- luminanceCoefficients: RGB luminance coefficients\n\t\t *\n\t\t * Optional:\n\t\t *  - outputColorSpaceConfig: { drawingBufferColorSpace: ColorSpace, toneMappingMode: 'extended' | 'standard' }\n\t\t *  - workingColorSpaceConfig: { unpackColorSpace: ColorSpace }\n\t\t *\n\t\t * Reference:\n\t\t * - https://www.russellcottrell.com/photo/matrixCalculator.htm\n\t\t */\n\t\tspaces: {},\n\n\t\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\t\tif ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\t\treturn color;\n\n\t\t\t}\n\n\t\t\tif ( this.spaces[ sourceColorSpace ].transfer === SRGBTransfer ) {\n\n\t\t\t\tcolor.r = SRGBToLinear( color.r );\n\t\t\t\tcolor.g = SRGBToLinear( color.g );\n\t\t\t\tcolor.b = SRGBToLinear( color.b );\n\n\t\t\t}\n\n\t\t\tif ( this.spaces[ sourceColorSpace ].primaries !== this.spaces[ targetColorSpace ].primaries ) {\n\n\t\t\t\tcolor.applyMatrix3( this.spaces[ sourceColorSpace ].toXYZ );\n\t\t\t\tcolor.applyMatrix3( this.spaces[ targetColorSpace ].fromXYZ );\n\n\t\t\t}\n\n\t\t\tif ( this.spaces[ targetColorSpace ].transfer === SRGBTransfer ) {\n\n\t\t\t\tcolor.r = LinearToSRGB( color.r );\n\t\t\t\tcolor.g = LinearToSRGB( color.g );\n\t\t\t\tcolor.b = LinearToSRGB( color.b );\n\n\t\t\t}\n\n\t\t\treturn color;\n\n\t\t},\n\n\t\tworkingToColorSpace: function ( color, targetColorSpace ) {\n\n\t\t\treturn this.convert( color, this.workingColorSpace, targetColorSpace );\n\n\t\t},\n\n\t\tcolorSpaceToWorking: function ( color, sourceColorSpace ) {\n\n\t\t\treturn this.convert( color, sourceColorSpace, this.workingColorSpace );\n\n\t\t},\n\n\t\tgetPrimaries: function ( colorSpace ) {\n\n\t\t\treturn this.spaces[ colorSpace ].primaries;\n\n\t\t},\n\n\t\tgetTransfer: function ( colorSpace ) {\n\n\t\t\tif ( colorSpace === NoColorSpace ) return LinearTransfer;\n\n\t\t\treturn this.spaces[ colorSpace ].transfer;\n\n\t\t},\n\n\t\tgetToneMappingMode: function ( colorSpace ) {\n\n\t\t\treturn this.spaces[ colorSpace ].outputColorSpaceConfig.toneMappingMode || 'standard';\n\n\t\t},\n\n\t\tgetLuminanceCoefficients: function ( target, colorSpace = this.workingColorSpace ) {\n\n\t\t\treturn target.fromArray( this.spaces[ colorSpace ].luminanceCoefficients );\n\n\t\t},\n\n\t\tdefine: function ( colorSpaces ) {\n\n\t\t\tObject.assign( this.spaces, colorSpaces );\n\n\t\t},\n\n\t\t// Internal APIs\n\n\t\t_getMatrix: function ( targetMatrix, sourceColorSpace, targetColorSpace ) {\n\n\t\t\treturn targetMatrix\n\t\t\t\t.copy( this.spaces[ sourceColorSpace ].toXYZ )\n\t\t\t\t.multiply( this.spaces[ targetColorSpace ].fromXYZ );\n\n\t\t},\n\n\t\t_getDrawingBufferColorSpace: function ( colorSpace ) {\n\n\t\t\treturn this.spaces[ colorSpace ].outputColorSpaceConfig.drawingBufferColorSpace;\n\n\t\t},\n\n\t\t_getUnpackColorSpace: function ( colorSpace = this.workingColorSpace ) {\n\n\t\t\treturn this.spaces[ colorSpace ].workingColorSpaceConfig.unpackColorSpace;\n\n\t\t},\n\n\t\t// Deprecated\n\n\t\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\t\twarnOnce( 'ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().' ); // @deprecated, r177\n\n\t\t\treturn ColorManagement.workingToColorSpace( color, targetColorSpace );\n\n\t\t},\n\n\t\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\t\twarnOnce( 'ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().' ); // @deprecated, r177\n\n\t\t\treturn ColorManagement.colorSpaceToWorking( color, sourceColorSpace );\n\n\t\t},\n\n\t};\n\n\t/******************************************************************************\n\t * sRGB definitions\n\t */\n\n\tconst REC709_PRIMARIES = [ 0.640, 0.330, 0.300, 0.600, 0.150, 0.060 ];\n\tconst REC709_LUMINANCE_COEFFICIENTS = [ 0.2126, 0.7152, 0.0722 ];\n\tconst D65 = [ 0.3127, 0.3290 ];\n\n\tColorManagement.define( {\n\n\t\t[ LinearSRGBColorSpace ]: {\n\t\t\tprimaries: REC709_PRIMARIES,\n\t\t\twhitePoint: D65,\n\t\t\ttransfer: LinearTransfer,\n\t\t\ttoXYZ: LINEAR_REC709_TO_XYZ,\n\t\t\tfromXYZ: XYZ_TO_LINEAR_REC709,\n\t\t\tluminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n\t\t\tworkingColorSpaceConfig: { unpackColorSpace: SRGBColorSpace },\n\t\t\toutputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n\t\t},\n\n\t\t[ SRGBColorSpace ]: {\n\t\t\tprimaries: REC709_PRIMARIES,\n\t\t\twhitePoint: D65,\n\t\t\ttransfer: SRGBTransfer,\n\t\t\ttoXYZ: LINEAR_REC709_TO_XYZ,\n\t\t\tfromXYZ: XYZ_TO_LINEAR_REC709,\n\t\t\tluminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n\t\t\toutputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n\t\t},\n\n\t} );\n\n\treturn ColorManagement;\n\n}\n\nconst ColorManagement = /*@__PURE__*/ createColorManagement();\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nlet _canvas;\n\n/**\n * A class containing utility functions for images.\n *\n * @hideconstructor\n */\nclass ImageUtils {\n\n\t/**\n\t * Returns a data URI containing a representation of the given image.\n\t *\n\t * @param {(HTMLImageElement|HTMLCanvasElement)} image - The image object.\n\t * @param {string} [type='image/png'] - Indicates the image format.\n\t * @return {string} The data URI.\n\t */\n\tstatic getDataURL( image, type = 'image/png' ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement === 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\treturn canvas.toDataURL( type );\n\n\t}\n\n\t/**\n\t * Converts the given sRGB image data to linear color space.\n\t *\n\t * @param {(HTMLImageElement|HTMLCanvasElement|ImageBitmap|Object)} image - The image object.\n\t * @return {HTMLCanvasElement|Object} The converted image.\n\t */\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\twarn( 'ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nlet _sourceId = 0;\n\n/**\n * Represents the data source of a texture.\n *\n * The main purpose of this class is to decouple the data definition from the texture\n * definition so the same data can be used with multiple texture instances.\n */\nclass Source {\n\n\t/**\n\t * Constructs a new video texture.\n\t *\n\t * @param {any} [data=null] - The data definition of a texture.\n\t */\n\tconstructor( data = null ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSource = true;\n\n\t\t/**\n\t\t * The ID of the source.\n\t\t *\n\t\t * @name Source#id\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tObject.defineProperty( this, 'id', { value: _sourceId ++ } );\n\n\t\t/**\n\t\t * The UUID of the source.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.uuid = generateUUID();\n\n\t\t/**\n\t\t * The data definition of a texture.\n\t\t *\n\t\t * @type {any}\n\t\t */\n\t\tthis.data = data;\n\n\t\t/**\n\t\t * This property is only relevant when {@link Source#needsUpdate} is set to `true` and\n\t\t * provides more control on how texture data should be processed. When `dataReady` is set\n\t\t * to `false`, the engine performs the memory allocation (if necessary) but does not transfer\n\t\t * the data into the GPU memory.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.dataReady = true;\n\n\t\t/**\n\t\t * This starts at `0` and counts how many times {@link Source#needsUpdate} is set to `true`.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default 0\n\t\t */\n\t\tthis.version = 0;\n\n\t}\n\n\t/**\n\t * Returns the dimensions of the source into the given target vector.\n\t *\n\t * @param {(Vector2|Vector3)} target - The target object the result is written into.\n\t * @return {(Vector2|Vector3)} The dimensions of the source.\n\t */\n\tgetSize( target ) {\n\n\t\tconst data = this.data;\n\n\t\tif ( ( typeof HTMLVideoElement !== 'undefined' ) && ( data instanceof HTMLVideoElement ) ) {\n\n\t\t\ttarget.set( data.videoWidth, data.videoHeight, 0 );\n\n\t\t} else if ( ( typeof VideoFrame !== 'undefined' ) && ( data instanceof VideoFrame ) ) {\n\n\t\t\ttarget.set( data.displayWidth, data.displayHeight, 0 );\n\n\t\t} else if ( data !== null ) {\n\n\t\t\ttarget.set( data.width, data.height, data.depth || 0 );\n\n\t\t} else {\n\n\t\t\ttarget.set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * When the property is set to `true`, the engine allocates the memory\n\t * for the texture (if necessary) and triggers the actual texture upload\n\t * to the GPU next time the source is used.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\t/**\n\t * Serializes the source into JSON.\n\t *\n\t * @param {?(Object|string)} meta - An optional value holding meta information about the serialization.\n\t * @return {Object} A JSON object representing the serialized source.\n\t * @see {@link ObjectLoader#parse}\n\t */\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\twarn( 'Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nlet _textureId = 0;\n\nconst _tempVec3 = /*@__PURE__*/ new Vector3();\n\n/**\n * Base class for all textures.\n *\n * Note: After the initial use of a texture, its dimensions, format, and type\n * cannot be changed. Instead, call {@link Texture#dispose} on the texture and instantiate a new one.\n *\n * @augments EventDispatcher\n */\nclass Texture extends EventDispatcher {\n\n\t/**\n\t * Constructs a new texture.\n\t *\n\t * @param {?Object} [image=Texture.DEFAULT_IMAGE] - The image holding the texture data.\n\t * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=LinearFilter] - The mag filter value.\n\t * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.\n\t * @param {number} [format=RGBAFormat] - The texture format.\n\t * @param {number} [type=UnsignedByteType] - The texture type.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t * @param {string} [colorSpace=NoColorSpace] - The color space.\n\t */\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isTexture = true;\n\n\t\t/**\n\t\t * The ID of the texture.\n\t\t *\n\t\t * @name Texture#id\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tObject.defineProperty( this, 'id', { value: _textureId ++ } );\n\n\t\t/**\n\t\t * The UUID of the texture.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.uuid = generateUUID();\n\n\t\t/**\n\t\t * The name of the texture.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The data definition of a texture. A reference to the data source can be\n\t\t * shared across textures. This is often useful in context of spritesheets\n\t\t * where multiple textures render the same data but with different texture\n\t\t * transformations.\n\t\t *\n\t\t * @type {Source}\n\t\t */\n\t\tthis.source = new Source( image );\n\n\t\t/**\n\t\t * An array holding user-defined mipmaps.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.mipmaps = [];\n\n\t\t/**\n\t\t * How the texture is applied to the object. The value `UVMapping`\n\t\t * is the default, where texture or uv coordinates are used to apply the map.\n\t\t *\n\t\t * @type {(UVMapping|CubeReflectionMapping|CubeRefractionMapping|EquirectangularReflectionMapping|EquirectangularRefractionMapping|CubeUVReflectionMapping)}\n\t\t * @default UVMapping\n\t\t*/\n\t\tthis.mapping = mapping;\n\n\t\t/**\n\t\t * Lets you select the uv attribute to map the texture to. `0` for `uv`,\n\t\t * `1` for `uv1`, `2` for `uv2` and `3` for `uv3`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.channel = 0;\n\n\t\t/**\n\t\t * This defines how the texture is wrapped horizontally and corresponds to\n\t\t * *U* in UV mapping.\n\t\t *\n\t\t * @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}\n\t\t * @default ClampToEdgeWrapping\n\t\t */\n\t\tthis.wrapS = wrapS;\n\n\t\t/**\n\t\t * This defines how the texture is wrapped horizontally and corresponds to\n\t\t * *V* in UV mapping.\n\t\t *\n\t\t * @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}\n\t\t * @default ClampToEdgeWrapping\n\t\t */\n\t\tthis.wrapT = wrapT;\n\n\t\t/**\n\t\t * How the texture is sampled when a texel covers more than one pixel.\n\t\t *\n\t\t * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}\n\t\t * @default LinearFilter\n\t\t */\n\t\tthis.magFilter = magFilter;\n\n\t\t/**\n\t\t * How the texture is sampled when a texel covers less than one pixel.\n\t\t *\n\t\t * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}\n\t\t * @default LinearMipmapLinearFilter\n\t\t */\n\t\tthis.minFilter = minFilter;\n\n\t\t/**\n\t\t * The number of samples taken along the axis through the pixel that has the\n\t\t * highest density of texels. By default, this value is `1`. A higher value\n\t\t * gives a less blurry result than a basic mipmap, at the cost of more\n\t\t * texture samples being used.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Texture.DEFAULT_ANISOTROPY\n\t\t */\n\t\tthis.anisotropy = anisotropy;\n\n\t\t/**\n\t\t * The format of the texture.\n\t\t *\n\t\t * @type {number}\n\t\t * @default RGBAFormat\n\t\t */\n\t\tthis.format = format;\n\n\t\t/**\n\t\t * The default internal format is derived from {@link Texture#format} and {@link Texture#type} and\n\t\t * defines how the texture data is going to be stored on the GPU.\n\t\t *\n\t\t * This property allows to overwrite the default format.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.internalFormat = null;\n\n\t\t/**\n\t\t * The data type of the texture.\n\t\t *\n\t\t * @type {number}\n\t\t * @default UnsignedByteType\n\t\t */\n\t\tthis.type = type;\n\n\t\t/**\n\t\t * How much a single repetition of the texture is offset from the beginning,\n\t\t * in each direction U and V. Typical range is `0.0` to `1.0`.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (0,0)\n\t\t */\n\t\tthis.offset = new Vector2( 0, 0 );\n\n\t\t/**\n\t\t * How many times the texture is repeated across the surface, in each\n\t\t * direction U and V. If repeat is set greater than `1` in either direction,\n\t\t * the corresponding wrap parameter should also be set to `RepeatWrapping`\n\t\t * or `MirroredRepeatWrapping` to achieve the desired tiling effect.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (1,1)\n\t\t */\n\t\tthis.repeat = new Vector2( 1, 1 );\n\n\t\t/**\n\t\t * The point around which rotation occurs. A value of `(0.5, 0.5)` corresponds\n\t\t * to the center of the texture. Default is `(0, 0)`, the lower left.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (0,0)\n\t\t */\n\t\tthis.center = new Vector2( 0, 0 );\n\n\t\t/**\n\t\t * How much the texture is rotated around the center point, in radians.\n\t\t * Positive values are counter-clockwise.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.rotation = 0;\n\n\t\t/**\n\t\t * Whether to update the texture's uv-transformation {@link Texture#matrix}\n\t\t * from the properties {@link Texture#offset}, {@link Texture#repeat},\n\t\t * {@link Texture#rotation}, and {@link Texture#center}.\n\t\t *\n\t\t * Set this to `false` if you are specifying the uv-transform matrix directly.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.matrixAutoUpdate = true;\n\n\t\t/**\n\t\t * The uv-transformation matrix of the texture.\n\t\t *\n\t\t * @type {Matrix3}\n\t\t */\n\t\tthis.matrix = new Matrix3();\n\n\t\t/**\n\t\t * Whether to generate mipmaps (if possible) for a texture.\n\t\t *\n\t\t * Set this to `false` if you are creating mipmaps manually.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.generateMipmaps = true;\n\n\t\t/**\n\t\t * If set to `true`, the alpha channel, if present, is multiplied into the\n\t\t * color channels when the texture is uploaded to the GPU.\n\t\t *\n\t\t * Note that this property has no effect when using `ImageBitmap`. You need to\n\t\t * configure premultiply alpha on bitmap creation instead.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.premultiplyAlpha = false;\n\n\t\t/**\n\t\t * If set to `true`, the texture is flipped along the vertical axis when\n\t\t * uploaded to the GPU.\n\t\t *\n\t\t * Note that this property has no effect when using `ImageBitmap`. You need to\n\t\t * configure the flip on bitmap creation instead.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.flipY = true;\n\n\t\t/**\n\t\t * Specifies the alignment requirements for the start of each pixel row in memory.\n\t\t * The allowable values are `1` (byte-alignment), `2` (rows aligned to even-numbered bytes),\n\t\t * `4` (word-alignment), and `8` (rows start on double-word boundaries).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 4\n\t\t */\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t/**\n\t\t * Textures containing color data should be annotated with `SRGBColorSpace` or `LinearSRGBColorSpace`.\n\t\t *\n\t\t * @type {string}\n\t\t * @default NoColorSpace\n\t\t */\n\t\tthis.colorSpace = colorSpace;\n\n\t\t/**\n\t\t * An object that can be used to store custom data about the texture. It\n\t\t * should not hold references to functions as these will not be cloned.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.userData = {};\n\n\t\t/**\n\t\t * This can be used to only update a subregion or specific rows of the texture (for example, just the\n\t\t * first 3 rows). Use the `addUpdateRange()` function to add ranges to this array.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.updateRanges = [];\n\n\t\t/**\n\t\t * This starts at `0` and counts how many times {@link Texture#needsUpdate} is set to `true`.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default 0\n\t\t */\n\t\tthis.version = 0;\n\n\t\t/**\n\t\t * A callback function, called when the texture is updated (e.g., when\n\t\t * {@link Texture#needsUpdate} has been set to true and then the texture is used).\n\t\t *\n\t\t * @type {?Function}\n\t\t * @default null\n\t\t */\n\t\tthis.onUpdate = null;\n\n\t\t/**\n\t\t * An optional back reference to the textures render target.\n\t\t *\n\t\t * @type {?(RenderTarget|WebGLRenderTarget)}\n\t\t * @default null\n\t\t */\n\t\tthis.renderTarget = null;\n\n\t\t/**\n\t\t * Indicates whether a texture belongs to a render target or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default false\n\t\t */\n\t\tthis.isRenderTargetTexture = false;\n\n\t\t/**\n\t\t * Indicates if a texture should be handled like a texture array.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default false\n\t\t */\n\t\tthis.isArrayTexture = image && image.depth && image.depth > 1 ? true : false;\n\n\t\t/**\n\t\t * Indicates whether this texture should be processed by `PMREMGenerator` or not\n\t\t * (only relevant for render target textures).\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default 0\n\t\t */\n\t\tthis.pmremVersion = 0;\n\n\t\t/**\n\t\t * Whether the texture should use one of the 16 bit integer formats which are normalized\n\t\t * to [0, 1] or [-1, 1] (depending on signed/unsigned) when sampled.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.normalized = false;\n\n\t}\n\n\t/**\n\t * The width of the texture in pixels.\n\t */\n\tget width() {\n\n\t\treturn this.source.getSize( _tempVec3 ).x;\n\n\t}\n\n\t/**\n\t * The height of the texture in pixels.\n\t */\n\tget height() {\n\n\t\treturn this.source.getSize( _tempVec3 ).y;\n\n\t}\n\n\t/**\n\t * The depth of the texture in pixels.\n\t */\n\tget depth() {\n\n\t\treturn this.source.getSize( _tempVec3 ).z;\n\n\t}\n\n\t/**\n\t * The image object holding the texture data.\n\t *\n\t * @type {?Object}\n\t */\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\t/**\n\t * Updates the texture transformation matrix from the properties {@link Texture#offset},\n\t * {@link Texture#repeat}, {@link Texture#rotation}, and {@link Texture#center}.\n\t */\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\t/**\n\t * Adds a range of data in the data texture to be updated on the GPU.\n\t *\n\t * @param {number} start - Position at which to start update.\n\t * @param {number} count - The number of components to update.\n\t */\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\t/**\n\t * Clears the update ranges.\n\t */\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\t/**\n\t * Returns a new texture with copied values from this instance.\n\t *\n\t * @return {Texture} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Copies the values of the given texture to this instance.\n\t *\n\t * @param {Texture} source - The texture to copy.\n\t * @return {Texture} A reference to this instance.\n\t */\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\t\tthis.channel = source.channel;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.colorSpace = source.colorSpace;\n\n\t\tthis.renderTarget = source.renderTarget;\n\t\tthis.isRenderTargetTexture = source.isRenderTargetTexture;\n\t\tthis.isArrayTexture = source.isArrayTexture;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this texture's properties based on `values`.\n\t * @param {Object} values - A container with texture parameters.\n\t */\n\tsetValues( values ) {\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\twarn( `Texture.setValues(): parameter '${ key }' has value of undefined.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\twarn( `Texture.setValues(): property '${ key }' does not exist.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( ( currentValue && newValue ) && ( currentValue.isVector2 && newValue.isVector2 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else if ( ( currentValue && newValue ) && ( currentValue.isVector3 && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else if ( ( currentValue && newValue ) && ( currentValue.isMatrix3 && newValue.isMatrix3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Serializes the texture into JSON.\n\t *\n\t * @param {?(Object|string)} meta - An optional value holding meta information about the serialization.\n\t * @return {Object} A JSON object representing the serialized texture.\n\t * @see {@link ObjectLoader#parse}\n\t */\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.7,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\t\t\tchannel: this.channel,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tinternalFormat: this.internalFormat,\n\t\t\ttype: this.type,\n\t\t\tnormalized: this.normalized,\n\t\t\tcolorSpace: this.colorSpace,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tgenerateMipmaps: this.generateMipmaps,\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t *\n\t * @fires Texture#dispose\n\t */\n\tdispose() {\n\n\t\t/**\n\t\t * Fires when the texture has been disposed of.\n\t\t *\n\t\t * @event Texture#dispose\n\t\t * @type {Object}\n\t\t */\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\t/**\n\t * Transforms the given uv vector with the textures uv transformation matrix.\n\t *\n\t * @param {Vector2} uv - The uv vector.\n\t * @return {Vector2} The transformed uv vector.\n\t */\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\t/**\n\t * Setting this property to `true` indicates the engine the texture\n\t * must be updated in the next render. This triggers a texture upload\n\t * to the GPU and ensures correct texture parameter configuration.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Setting this property to `true` indicates the engine the PMREM\n\t * must be regenerated.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsPMREMUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.pmremVersion ++;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * The default image for all textures.\n *\n * @static\n * @type {?Image}\n * @default null\n */\nTexture.DEFAULT_IMAGE = null;\n\n/**\n * The default mapping for all textures.\n *\n * @static\n * @type {number}\n * @default UVMapping\n */\nTexture.DEFAULT_MAPPING = UVMapping;\n\n/**\n * The default anisotropy value for all textures.\n *\n * @static\n * @type {number}\n * @default 1\n */\nTexture.DEFAULT_ANISOTROPY = 1;\n\n/**\n * Class representing a 4D vector. A 4D vector is an ordered quadruplet of numbers\n * (labeled x, y, z and w), which can be used to represent a number of things, such as:\n *\n * - A point in 4D space.\n * - A direction and length in 4D space. In three.js the length will\n * always be the Euclidean distance(straight-line distance) from `(0, 0, 0, 0)` to `(x, y, z, w)`\n * and the direction is also measured from `(0, 0, 0, 0)` towards `(x, y, z, w)`.\n * - Any arbitrary ordered quadruplet of numbers.\n *\n * There are other things a 4D vector can be used to represent, however these\n * are the most common uses in *three.js*.\n *\n * Iterating through a vector instance will yield its components `(x, y, z, w)` in\n * the corresponding order.\n * ```js\n * const a = new THREE.Vector4( 0, 1, 0, 0 );\n *\n * //no arguments; will be initialised to (0, 0, 0, 1)\n * const b = new THREE.Vector4( );\n *\n * const d = a.dot( b );\n * ```\n */\nclass Vector4 {\n\n\tstatic {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tVector4.prototype.isVector4 = true;\n\n\t}\n\n\t/**\n\t * Constructs a new 4D vector.\n\t *\n\t * @param {number} [x=0] - The x value of this vector.\n\t * @param {number} [y=0] - The y value of this vector.\n\t * @param {number} [z=0] - The z value of this vector.\n\t * @param {number} [w=1] - The w value of this vector.\n\t */\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\t/**\n\t\t * The x value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.x = x;\n\n\t\t/**\n\t\t * The y value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.y = y;\n\n\t\t/**\n\t\t * The z value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.z = z;\n\n\t\t/**\n\t\t * The w value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.w = w;\n\n\t}\n\n\t/**\n\t * Alias for {@link Vector4#z}.\n\t *\n\t * @type {number}\n\t */\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\t/**\n\t * Alias for {@link Vector4#w}.\n\t *\n\t * @type {number}\n\t */\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\t/**\n\t * Sets the vector components.\n\t *\n\t * @param {number} x - The value of the x component.\n\t * @param {number} y - The value of the y component.\n\t * @param {number} z - The value of the z component.\n\t * @param {number} w - The value of the w component.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the same value.\n\t *\n\t * @param {number} scalar - The value to set for all vector components.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's x component to the given value\n\t *\n\t * @param {number} x - The value to set.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's y component to the given value\n\t *\n\t * @param {number} y - The value to set.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's z component to the given value\n\t *\n\t * @param {number} z - The value to set.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's w component to the given value\n\t *\n\t * @param {number} w - The value to set.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Allows to set a vector component with an index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y,\n\t * `2` equals to z, `3` equals to w.\n\t * @param {number} value - The value to set.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the value of the vector component which matches the given index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y,\n\t * `2` equals to z, `3` equals to w.\n\t * @return {number} A vector component value.\n\t */\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a new vector with copied values from this instance.\n\t *\n\t * @return {Vector4} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\t/**\n\t * Copies the values of the given vector to this instance.\n\t *\n\t * @param {Vector3|Vector4} v - The vector to copy.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector to this instance.\n\t *\n\t * @param {Vector4} v - The vector to add.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given scalar value to all components of this instance.\n\t *\n\t * @param {number} s - The scalar to add.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector4} a - The first vector.\n\t * @param {Vector4} b - The second vector.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector scaled by the given factor to this instance.\n\t *\n\t * @param {Vector4} v - The vector.\n\t * @param {number} s - The factor that scales `v`.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vector from this instance.\n\t *\n\t * @param {Vector4} v - The vector to subtract.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given scalar value from all components of this instance.\n\t *\n\t * @param {number} s - The scalar to subtract.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector4} a - The first vector.\n\t * @param {Vector4} b - The second vector.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given vector with this instance.\n\t *\n\t * @param {Vector4} v - The vector to multiply.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given scalar value with all components of this instance.\n\t *\n\t * @param {number} scalar - The scalar to multiply.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies this vector with the given 4x4 matrix.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Divides this instance by the given vector.\n\t *\n\t * @param {Vector4} v - The vector to divide.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\t\tthis.w /= v.w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Divides this vector by the given scalar.\n\t *\n\t * @param {number} scalar - The scalar to divide.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\t/**\n\t * Sets the x, y and z components of this\n\t * vector to the quaternion's axis and w to the angle.\n\t *\n\t * @param {Quaternion} q - The Quaternion to set.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the x, y and z components of this\n\t * vector to the axis of rotation and w to the angle.\n\t *\n\t * @param {Matrix4} m - A 4x4 matrix of which the upper left 3x3 matrix is a pure rotation matrix.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t     ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t     ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the position elements of the\n\t * given transformation matrix.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\t\tthis.w = e[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y, z or w value is greater than the given vector's x, y, z or w\n\t * value, replace that value with the corresponding min value.\n\t *\n\t * @param {Vector4} v - The vector.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y, z or w value is less than the given vector's x, y, z or w\n\t * value, replace that value with the corresponding max value.\n\t *\n\t * @param {Vector4} v - The vector.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y, z or w value is greater than the max vector's x, y, z or w\n\t * value, it is replaced by the corresponding value.\n\t * If this vector's x, y, z or w value is less than the min vector's x, y, z or w value,\n\t * it is replaced by the corresponding value.\n\t *\n\t * @param {Vector4} min - The minimum x, y and z values.\n\t * @param {Vector4} max - The maximum x, y and z values in the desired range.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = clamp( this.x, min.x, max.x );\n\t\tthis.y = clamp( this.y, min.y, max.y );\n\t\tthis.z = clamp( this.z, min.z, max.z );\n\t\tthis.w = clamp( this.w, min.w, max.w );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y, z or w values are greater than the max value, they are\n\t * replaced by the max value.\n\t * If this vector's x, y, z or w values are less than the min value, they are\n\t * replaced by the min value.\n\t *\n\t * @param {number} minVal - The minimum value the components will be clamped to.\n\t * @param {number} maxVal - The maximum value the components will be clamped to.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = clamp( this.x, minVal, maxVal );\n\t\tthis.y = clamp( this.y, minVal, maxVal );\n\t\tthis.z = clamp( this.z, minVal, maxVal );\n\t\tthis.w = clamp( this.w, minVal, maxVal );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's length is greater than the max value, it is replaced by\n\t * the max value.\n\t * If this vector's length is less than the min value, it is replaced by the\n\t * min value.\n\t *\n\t * @param {number} min - The minimum value the vector length will be clamped to.\n\t * @param {number} max - The maximum value the vector length will be clamped to.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( clamp( length, min, max ) );\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded down to the nearest integer value.\n\t *\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded up to the nearest integer value.\n\t *\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded to the nearest integer value\n\t *\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded towards zero (up if negative,\n\t * down if positive) to an integer value.\n\t *\n\t * @return {Vector4} A reference to this vector.\n\t */\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\t\tthis.w = Math.trunc( this.w );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Inverts this vector - i.e. sets x = -x, y = -y, z = -z, w = -w.\n\t *\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the dot product of the given vector with this instance.\n\t *\n\t * @param {Vector4} v - The vector to compute the dot product with.\n\t * @return {number} The result of the dot product.\n\t */\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\t/**\n\t * Computes the square of the Euclidean length (straight-line length) from\n\t * (0, 0, 0, 0) to (x, y, z, w). If you are comparing the lengths of vectors, you should\n\t * compare the length squared instead as it is slightly more efficient to calculate.\n\t *\n\t * @return {number} The square length of this vector.\n\t */\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\t/**\n\t * Computes the  Euclidean length (straight-line length) from (0, 0, 0, 0) to (x, y, z, w).\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\t/**\n\t * Computes the Manhattan length of this vector.\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\t/**\n\t * Converts this vector to a unit vector - that is, sets it equal to a vector\n\t * with the same direction as this one, but with a vector length of `1`.\n\t *\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\t/**\n\t * Sets this vector to a vector with the same direction as this one, but\n\t * with the specified length.\n\t *\n\t * @param {number} length - The new length of this vector.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vector and this instance, where\n\t * alpha is the percent distance along the line - alpha = 0 will be this\n\t * vector, and alpha = 1 will be the given one.\n\t *\n\t * @param {Vector4} v - The vector to interpolate towards.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vectors, where alpha is the percent\n\t * distance along the line - alpha = 0 will be first vector, and alpha = 1 will\n\t * be the second one. The result is stored in this instance.\n\t *\n\t * @param {Vector4} v1 - The first vector.\n\t * @param {Vector4} v2 - The second vector.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this vector is equal with the given one.\n\t *\n\t * @param {Vector4} v - The vector to test for equality.\n\t * @return {boolean} Whether this vector is equal with the given one.\n\t */\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\t/**\n\t * Sets this vector's x value to be `array[ offset ]`, y value to be `array[ offset + 1 ]`,\n\t * z value to be `array[ offset + 2 ]`, w value to be `array[ offset + 3 ]`.\n\t *\n\t * @param {Array<number>} array - An array holding the vector component values.\n\t * @param {number} [offset=0] - The offset into the array.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the components of this vector to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the vector components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The vector components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Sets the components of this vector from the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute holding vector data.\n\t * @param {number} index - The index into the attribute.\n\t * @return {Vector4} A reference to this vector.\n\t */\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets each component of this vector to a pseudo-random value between `0` and\n\t * `1`, excluding `1`.\n\t *\n\t * @return {Vector4} A reference to this vector.\n\t */\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\n/**\n * A render target is a buffer where the video card draws pixels for a scene\n * that is being rendered in the background. It is used in different effects,\n * such as applying postprocessing to a rendered image before displaying it\n * on the screen.\n *\n * @augments EventDispatcher\n */\nclass RenderTarget extends EventDispatcher {\n\n\t/**\n\t * Render target options.\n\t *\n\t * @typedef {Object} RenderTarget~Options\n\t * @property {boolean} [generateMipmaps=false] - Whether to generate mipmaps or not.\n\t * @property {number} [magFilter=LinearFilter] - The mag filter.\n\t * @property {number} [minFilter=LinearFilter] - The min filter.\n\t * @property {number} [format=RGBAFormat] - The texture format.\n\t * @property {number} [type=UnsignedByteType] - The texture type.\n\t * @property {?string} [internalFormat=null] - The texture's internal format.\n\t * @property {number} [wrapS=ClampToEdgeWrapping] - The texture's uv wrapping mode.\n\t * @property {number} [wrapT=ClampToEdgeWrapping] - The texture's uv wrapping mode.\n\t * @property {number} [anisotropy=1] - The texture's anisotropy value.\n\t * @property {string} [colorSpace=NoColorSpace] - The texture's color space.\n\t * @property {boolean} [depthBuffer=true] - Whether to allocate a depth buffer or not.\n\t * @property {boolean} [stencilBuffer=false] - Whether to allocate a stencil buffer or not.\n\t * @property {boolean} [resolveDepthBuffer=true] - Whether to resolve the depth buffer or not.\n\t * @property {boolean} [resolveStencilBuffer=true] - Whether  to resolve the stencil buffer or not.\n\t * @property {?Texture} [depthTexture=null] - Reference to a depth texture.\n\t * @property {number} [samples=0] - The MSAA samples count.\n\t * @property {number} [count=1] - Defines the number of color attachments . Must be at least `1`.\n\t * @property {number} [depth=1] - The texture depth.\n\t * @property {boolean} [multiview=false] - Whether this target is used for multiview rendering.\n\t */\n\n\t/**\n\t * Constructs a new render target.\n\t *\n\t * @param {number} [width=1] - The width of the render target.\n\t * @param {number} [height=1] - The height of the render target.\n\t * @param {RenderTarget~Options} [options] - The configuration object.\n\t */\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper();\n\n\t\toptions = Object.assign( {\n\t\t\tgenerateMipmaps: false,\n\t\t\tinternalFormat: null,\n\t\t\tminFilter: LinearFilter,\n\t\t\tdepthBuffer: true,\n\t\t\tstencilBuffer: false,\n\t\t\tresolveDepthBuffer: true,\n\t\t\tresolveStencilBuffer: true,\n\t\t\tdepthTexture: null,\n\t\t\tsamples: 0,\n\t\t\tcount: 1,\n\t\t\tdepth: 1,\n\t\t\tmultiview: false\n\t\t}, options );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRenderTarget = true;\n\n\t\t/**\n\t\t * The width of the render target.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.width = width;\n\n\t\t/**\n\t\t * The height of the render target.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.height = height;\n\n\t\t/**\n\t\t * The depth of the render target.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.depth = options.depth;\n\n\t\t/**\n\t\t * A rectangular area inside the render target's viewport. Fragments that are\n\t\t * outside the area will be discarded.\n\t\t *\n\t\t * @type {Vector4}\n\t\t * @default (0,0,width,height)\n\t\t */\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\n\t\t/**\n\t\t * Indicates whether the scissor test should be enabled when rendering into\n\t\t * this render target or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.scissorTest = false;\n\n\t\t/**\n\t\t * A rectangular area representing the render target's viewport.\n\t\t *\n\t\t * @type {Vector4}\n\t\t * @default (0,0,width,height)\n\t\t */\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\t/**\n\t\t * An array of textures. Each color attachment is represented as a separate texture.\n\t\t * Has at least a single entry for the default color attachment.\n\t\t *\n\t\t * @type {Array<Texture>}\n\t\t */\n\t\tthis.textures = [];\n\n\t\tconst image = { width: width, height: height, depth: options.depth };\n\t\tconst texture = new Texture( image );\n\n\t\tconst count = options.count;\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.textures[ i ] = texture.clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\t\t\tthis.textures[ i ].renderTarget = this;\n\n\t\t}\n\n\t\tthis._setTextureOptions( options );\n\n\t\t/**\n\t\t * Whether to allocate a depth buffer or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.depthBuffer = options.depthBuffer;\n\n\t\t/**\n\t\t * Whether to allocate a stencil buffer or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.stencilBuffer = options.stencilBuffer;\n\n\t\t/**\n\t\t * Whether to resolve the depth buffer or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.resolveDepthBuffer = options.resolveDepthBuffer;\n\n\t\t/**\n\t\t * Whether to resolve the stencil buffer or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.resolveStencilBuffer = options.resolveStencilBuffer;\n\n\t\tthis._depthTexture = null;\n\t\tthis.depthTexture = options.depthTexture;\n\n\t\t/**\n\t\t * The number of MSAA samples.\n\t\t *\n\t\t * A value of `0` disables MSAA.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.samples = options.samples;\n\n\t\t/**\n\t\t * Whether to this target is used in multiview rendering.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.multiview = options.multiview;\n\n\t}\n\n\t_setTextureOptions( options = {} ) {\n\n\t\tconst values = {\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\tflipY: false,\n\t\t\tinternalFormat: null\n\t\t};\n\n\t\tif ( options.mapping !== undefined ) values.mapping = options.mapping;\n\t\tif ( options.wrapS !== undefined ) values.wrapS = options.wrapS;\n\t\tif ( options.wrapT !== undefined ) values.wrapT = options.wrapT;\n\t\tif ( options.wrapR !== undefined ) values.wrapR = options.wrapR;\n\t\tif ( options.magFilter !== undefined ) values.magFilter = options.magFilter;\n\t\tif ( options.minFilter !== undefined ) values.minFilter = options.minFilter;\n\t\tif ( options.format !== undefined ) values.format = options.format;\n\t\tif ( options.type !== undefined ) values.type = options.type;\n\t\tif ( options.anisotropy !== undefined ) values.anisotropy = options.anisotropy;\n\t\tif ( options.colorSpace !== undefined ) values.colorSpace = options.colorSpace;\n\t\tif ( options.flipY !== undefined ) values.flipY = options.flipY;\n\t\tif ( options.generateMipmaps !== undefined ) values.generateMipmaps = options.generateMipmaps;\n\t\tif ( options.internalFormat !== undefined ) values.internalFormat = options.internalFormat;\n\n\t\tfor ( let i = 0; i < this.textures.length; i ++ ) {\n\n\t\t\tconst texture = this.textures[ i ];\n\t\t\ttexture.setValues( values );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The texture representing the default color attachment.\n\t *\n\t * @type {Texture}\n\t */\n\tget texture() {\n\n\t\treturn this.textures[ 0 ];\n\n\t}\n\n\tset texture( value ) {\n\n\t\tthis.textures[ 0 ] = value;\n\n\t}\n\n\tset depthTexture( current ) {\n\n\t\tif ( this._depthTexture !== null ) this._depthTexture.renderTarget = null;\n\t\tif ( current !== null ) current.renderTarget = this;\n\n\t\tthis._depthTexture = current;\n\n\t}\n\n\t/**\n\t * Instead of saving the depth in a renderbuffer, a texture\n\t * can be used instead which is useful for further processing\n\t * e.g. in context of post-processing.\n\t *\n\t * @type {?DepthTexture}\n\t * @default null\n\t */\n\tget depthTexture() {\n\n\t\treturn this._depthTexture;\n\n\t}\n\n\t/**\n\t * Sets the size of this render target.\n\t *\n\t * @param {number} width - The width.\n\t * @param {number} height - The height.\n\t * @param {number} [depth=1] - The depth.\n\t */\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.textures.length; i < il; i ++ ) {\n\n\t\t\t\tthis.textures[ i ].image.width = width;\n\t\t\t\tthis.textures[ i ].image.height = height;\n\t\t\t\tthis.textures[ i ].image.depth = depth;\n\n\t\t\t\tif ( this.textures[ i ].isData3DTexture !== true ) { // Fix for #31693\n\n\t\t\t\t\t// TODO: Reconsider setting isArrayTexture flag here and in the ctor of Texture.\n\t\t\t\t\t// Maybe a method `isArrayTexture()` or just a getter could replace a flag since\n\t\t\t\t\t// both are evaluated on each call?\n\n\t\t\t\t\tthis.textures[ i ].isArrayTexture = this.textures[ i ].image.depth > 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\t/**\n\t * Returns a new render target with copied values from this instance.\n\t *\n\t * @return {RenderTarget} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Copies the settings of the given render target. This is a structural copy so\n\t * no resources are shared between render targets after the copy. That includes\n\t * all MRT textures and the depth texture.\n\t *\n\t * @param {RenderTarget} source - The render target to copy.\n\t * @return {RenderTarget} A reference to this instance.\n\t */\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.scissor.copy( source.scissor );\n\t\tthis.scissorTest = source.scissorTest;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.textures.length = 0;\n\n\t\tfor ( let i = 0, il = source.textures.length; i < il; i ++ ) {\n\n\t\t\tthis.textures[ i ] = source.textures[ i ].clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\t\t\tthis.textures[ i ].renderTarget = this;\n\n\t\t\t// ensure image object is not shared, see #20328\n\n\t\t\tconst image = Object.assign( {}, source.textures[ i ].image );\n\t\t\tthis.textures[ i ].source = new Source( image );\n\n\t\t}\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = source.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = source.resolveStencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.samples = source.samples;\n\t\tthis.multiview = source.multiview;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t *\n\t * @fires RenderTarget#dispose\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\n/**\n * A render target used in context of {@link WebGLRenderer}.\n *\n * @augments RenderTarget\n */\nclass WebGLRenderTarget extends RenderTarget {\n\n\t/**\n\t * Constructs a new 3D render target.\n\t *\n\t * @param {number} [width=1] - The width of the render target.\n\t * @param {number} [height=1] - The height of the render target.\n\t * @param {RenderTarget~Options} [options] - The configuration object.\n\t */\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWebGLRenderTarget = true;\n\n\t}\n\n}\n\n/**\n * Creates an array of textures directly from raw buffer data.\n *\n * @augments Texture\n */\nclass DataArrayTexture extends Texture {\n\n\t/**\n\t * Constructs a new data array texture.\n\t *\n\t * @param {?TypedArray} [data=null] - The buffer data.\n\t * @param {number} [width=1] - The width of the texture.\n\t * @param {number} [height=1] - The height of the texture.\n\t * @param {number} [depth=1] - The depth of the texture.\n\t */\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isDataArrayTexture = true;\n\n\t\t/**\n\t\t * The image definition of a data texture.\n\t\t *\n\t\t * @type {{data:TypedArray,width:number,height:number,depth:number}}\n\t\t */\n\t\tthis.image = { data, width, height, depth };\n\n\t\t/**\n\t\t * How the texture is sampled when a texel covers more than one pixel.\n\t\t *\n\t\t * Overwritten and set to `NearestFilter` by default.\n\t\t *\n\t\t * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}\n\t\t * @default NearestFilter\n\t\t */\n\t\tthis.magFilter = NearestFilter;\n\n\t\t/**\n\t\t * How the texture is sampled when a texel covers less than one pixel.\n\t\t *\n\t\t * Overwritten and set to `NearestFilter` by default.\n\t\t *\n\t\t * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}\n\t\t * @default NearestFilter\n\t\t */\n\t\tthis.minFilter = NearestFilter;\n\n\t\t/**\n\t\t * This defines how the texture is wrapped in the depth and corresponds to\n\t\t * *W* in UVW mapping.\n\t\t *\n\t\t * @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}\n\t\t * @default ClampToEdgeWrapping\n\t\t */\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\t/**\n\t\t * Whether to generate mipmaps (if possible) for a texture.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.generateMipmaps = false;\n\n\t\t/**\n\t\t * If set to `true`, the texture is flipped along the vertical axis when\n\t\t * uploaded to the GPU.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flipY = false;\n\n\t\t/**\n\t\t * Specifies the alignment requirements for the start of each pixel row in memory.\n\t\t *\n\t\t * Overwritten and set to `1` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default 1\n\t\t */\n\t\tthis.unpackAlignment = 1;\n\n\t\t/**\n\t\t * A set of all layers which need to be updated in the texture.\n\t\t *\n\t\t * @type {Set<number>}\n\t\t */\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\t/**\n\t * Describes that a specific layer of the texture needs to be updated.\n\t * Normally when {@link Texture#needsUpdate} is set to `true`, the\n\t * entire data texture array is sent to the GPU. Marking specific\n\t * layers will only transmit subsets of all mipmaps associated with a\n\t * specific depth in the array which is often much more performant.\n\t *\n\t * @param {number} layerIndex - The layer index that should be updated.\n\t */\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\t/**\n\t * Resets the layer updates registry.\n\t */\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\n/**\n * An array render target used in context of {@link WebGLRenderer}.\n *\n * @augments WebGLRenderTarget\n */\nclass WebGLArrayRenderTarget extends WebGLRenderTarget {\n\n\t/**\n\t * Constructs a new array render target.\n\t *\n\t * @param {number} [width=1] - The width of the render target.\n\t * @param {number} [height=1] - The height of the render target.\n\t * @param {number} [depth=1] - The height of the render target.\n\t * @param {RenderTarget~Options} [options] - The configuration object.\n\t */\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWebGLArrayRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\t/**\n\t\t * Overwritten with a different texture type.\n\t\t *\n\t\t * @type {DataArrayTexture}\n\t\t */\n\t\tthis.texture = new DataArrayTexture( null, width, height, depth );\n\t\tthis._setTextureOptions( options );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\n/**\n * Creates a three-dimensional texture from raw data, with parameters to\n * divide it into width, height, and depth.\n *\n * @augments Texture\n */\nclass Data3DTexture extends Texture {\n\n\t/**\n\t * Constructs a new data array texture.\n\t *\n\t * @param {?TypedArray} [data=null] - The buffer data.\n\t * @param {number} [width=1] - The width of the texture.\n\t * @param {number} [height=1] - The height of the texture.\n\t * @param {number} [depth=1] - The depth of the texture.\n\t */\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in Data3DTexture directly.\n\t\t//\n\t\t//\tconst texture = new THREE.Data3DTexture( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isData3DTexture = true;\n\n\t\t/**\n\t\t * The image definition of a data texture.\n\t\t *\n\t\t * @type {{data:TypedArray,width:number,height:number,depth:number}}\n\t\t */\n\t\tthis.image = { data, width, height, depth };\n\n\t\t/**\n\t\t * How the texture is sampled when a texel covers more than one pixel.\n\t\t *\n\t\t * Overwritten and set to `NearestFilter` by default.\n\t\t *\n\t\t * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}\n\t\t * @default NearestFilter\n\t\t */\n\t\tthis.magFilter = NearestFilter;\n\n\t\t/**\n\t\t * How the texture is sampled when a texel covers less than one pixel.\n\t\t *\n\t\t * Overwritten and set to `NearestFilter` by default.\n\t\t *\n\t\t * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}\n\t\t * @default NearestFilter\n\t\t */\n\t\tthis.minFilter = NearestFilter;\n\n\t\t/**\n\t\t * This defines how the texture is wrapped in the depth and corresponds to\n\t\t * *W* in UVW mapping.\n\t\t *\n\t\t * @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}\n\t\t * @default ClampToEdgeWrapping\n\t\t */\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\t/**\n\t\t * Whether to generate mipmaps (if possible) for a texture.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.generateMipmaps = false;\n\n\t\t/**\n\t\t * If set to `true`, the texture is flipped along the vertical axis when\n\t\t * uploaded to the GPU.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flipY = false;\n\n\t\t/**\n\t\t * Specifies the alignment requirements for the start of each pixel row in memory.\n\t\t *\n\t\t * Overwritten and set to `1` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default 1\n\t\t */\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\n/**\n * A 3D render target used in context of {@link WebGLRenderer}.\n *\n * @augments WebGLRenderTarget\n */\nclass WebGL3DRenderTarget extends WebGLRenderTarget {\n\n\t/**\n\t * Constructs a new 3D render target.\n\t *\n\t * @param {number} [width=1] - The width of the render target.\n\t * @param {number} [height=1] - The height of the render target.\n\t * @param {number} [depth=1] - The height of the render target.\n\t * @param {RenderTarget~Options} [options] - The configuration object.\n\t */\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWebGL3DRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\t/**\n\t\t * Overwritten with a different texture type.\n\t\t *\n\t\t * @type {Data3DTexture}\n\t\t */\n\t\tthis.texture = new Data3DTexture( null, width, height, depth );\n\t\tthis._setTextureOptions( options );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\n/**\n * Represents a 4x4 matrix.\n *\n * The most common use of a 4x4 matrix in 3D computer graphics is as a transformation matrix.\n * For an introduction to transformation matrices as used in WebGL, check out [this tutorial](https://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices)\n *\n * This allows a 3D vector representing a point in 3D space to undergo\n * transformations such as translation, rotation, shear, scale, reflection,\n * orthogonal or perspective projection and so on, by being multiplied by the\n * matrix. This is known as `applying` the matrix to the vector.\n *\n * A Note on Row-Major and Column-Major Ordering:\n *\n * The constructor and {@link Matrix3#set} method take arguments in\n * [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)\n * order, while internally they are stored in the {@link Matrix3#elements} array in column-major order.\n * This means that calling:\n * ```js\n * const m = new THREE.Matrix4();\n * m.set( 11, 12, 13, 14,\n *        21, 22, 23, 24,\n *        31, 32, 33, 34,\n *        41, 42, 43, 44 );\n * ```\n * will result in the elements array containing:\n * ```js\n * m.elements = [ 11, 21, 31, 41,\n *                12, 22, 32, 42,\n *                13, 23, 33, 43,\n *                14, 24, 34, 44 ];\n * ```\n * and internally all calculations are performed using column-major ordering.\n * However, as the actual ordering makes no difference mathematically and\n * most people are used to thinking about matrices in row-major order, the\n * three.js documentation shows matrices in row-major order. Just bear in\n * mind that if you are reading the source code, you'll have to take the\n * transpose of any matrices outlined here to make sense of the calculations.\n */\nclass Matrix4 {\n\n\tstatic {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t}\n\n\t/**\n\t * Constructs a new 4x4 matrix. The arguments are supposed to be\n\t * in row-major order. If no arguments are provided, the constructor\n\t * initializes the matrix as an identity matrix.\n\t *\n\t * @param {number} [n11] - 1-1 matrix element.\n\t * @param {number} [n12] - 1-2 matrix element.\n\t * @param {number} [n13] - 1-3 matrix element.\n\t * @param {number} [n14] - 1-4 matrix element.\n\t * @param {number} [n21] - 2-1 matrix element.\n\t * @param {number} [n22] - 2-2 matrix element.\n\t * @param {number} [n23] - 2-3 matrix element.\n\t * @param {number} [n24] - 2-4 matrix element.\n\t * @param {number} [n31] - 3-1 matrix element.\n\t * @param {number} [n32] - 3-2 matrix element.\n\t * @param {number} [n33] - 3-3 matrix element.\n\t * @param {number} [n34] - 3-4 matrix element.\n\t * @param {number} [n41] - 4-1 matrix element.\n\t * @param {number} [n42] - 4-2 matrix element.\n\t * @param {number} [n43] - 4-3 matrix element.\n\t * @param {number} [n44] - 4-4 matrix element.\n\t */\n\tconstructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\t/**\n\t\t * A column-major list of matrix values.\n\t\t *\n\t\t * @type {Array<number>}\n\t\t */\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the elements of the matrix.The arguments are supposed to be\n\t * in row-major order.\n\t *\n\t * @param {number} [n11] - 1-1 matrix element.\n\t * @param {number} [n12] - 1-2 matrix element.\n\t * @param {number} [n13] - 1-3 matrix element.\n\t * @param {number} [n14] - 1-4 matrix element.\n\t * @param {number} [n21] - 2-1 matrix element.\n\t * @param {number} [n22] - 2-2 matrix element.\n\t * @param {number} [n23] - 2-3 matrix element.\n\t * @param {number} [n24] - 2-4 matrix element.\n\t * @param {number} [n31] - 3-1 matrix element.\n\t * @param {number} [n32] - 3-2 matrix element.\n\t * @param {number} [n33] - 3-3 matrix element.\n\t * @param {number} [n34] - 3-4 matrix element.\n\t * @param {number} [n41] - 4-1 matrix element.\n\t * @param {number} [n42] - 4-2 matrix element.\n\t * @param {number} [n43] - 4-3 matrix element.\n\t * @param {number} [n44] - 4-4 matrix element.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix to the 4x4 identity matrix.\n\t *\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a matrix with copied values from this instance.\n\t *\n\t * @return {Matrix4} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\t/**\n\t * Copies the values of the given matrix to this instance.\n\t *\n\t * @param {Matrix4} m - The matrix to copy.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the translation component of the given matrix\n\t * into this matrix's translation component.\n\t *\n\t * @param {Matrix4} m - The matrix to copy the translation component.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Set the upper 3x3 elements of this matrix to the values of given 3x3 matrix.\n\t *\n\t * @param {Matrix3} m - The 3x3 matrix.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Extracts the basis of this matrix into the three axis vectors provided.\n\t *\n\t * @param {Vector3} xAxis - The basis's x axis.\n\t * @param {Vector3} yAxis - The basis's y axis.\n\t * @param {Vector3} zAxis - The basis's z axis.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\tif ( this.determinant() === 0 ) {\n\n\t\t\txAxis.set( 1, 0, 0 );\n\t\t\tyAxis.set( 0, 1, 0 );\n\t\t\tzAxis.set( 0, 0, 1 );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given basis vectors to this matrix.\n\t *\n\t * @param {Vector3} xAxis - The basis's x axis.\n\t * @param {Vector3} yAxis - The basis's y axis.\n\t * @param {Vector3} zAxis - The basis's z axis.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Extracts the rotation component of the given matrix\n\t * into this matrix's rotation component.\n\t *\n\t * Note: This method does not support reflection matrices.\n\t *\n\t * @param {Matrix4} m - The matrix.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\textractRotation( m ) {\n\n\t\tif ( m.determinant() === 0 ) {\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$7.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$7.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$7.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the rotation component (the upper left 3x3 matrix) of this matrix to\n\t * the rotation specified by the given Euler angles. The rest of\n\t * the matrix is set to the identity. Depending on the {@link Euler#order},\n\t * there are six possible outcomes. See [this page](https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix)\n\t * for a complete list.\n\t *\n\t * @param {Euler} euler - The Euler angles.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the rotation component of this matrix to the rotation specified by\n\t * the given Quaternion as outlined [here](https://en.wikipedia.org/wiki/Rotation_matrix#Quaternion)\n\t * The rest of the matrix is set to the identity.\n\t *\n\t * @param {Quaternion} q - The Quaternion.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\t/**\n\t * Sets the rotation component of the transformation matrix, looking from `eye` towards\n\t * `target`, and oriented by the up-direction.\n\t *\n\t * @param {Vector3} eye - The eye vector.\n\t * @param {Vector3} target - The target vector.\n\t * @param {Vector3} up - The up vector.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Post-multiplies this matrix by the given 4x4 matrix.\n\t *\n\t * @param {Matrix4} m - The matrix to multiply with.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\t/**\n\t * Pre-multiplies this matrix by the given 4x4 matrix.\n\t *\n\t * @param {Matrix4} m - The matrix to multiply with.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\t/**\n\t * Multiples the given 4x4 matrices and stores the result\n\t * in this matrix.\n\t *\n\t * @param {Matrix4} a - The first matrix.\n\t * @param {Matrix4} b - The second matrix.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies every component of the matrix by the given scalar.\n\t *\n\t * @param {number} s - The scalar.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes and returns the determinant of this matrix.\n\t *\n\t * Based on the method outlined [here](http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.html).\n\t *\n\t * @return {number} The determinant.\n\t */\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\tconst t11 = n23 * n34 - n24 * n33;\n\t\tconst t12 = n22 * n34 - n24 * n32;\n\t\tconst t13 = n22 * n33 - n23 * n32;\n\n\t\tconst t21 = n21 * n34 - n24 * n31;\n\t\tconst t22 = n21 * n33 - n23 * n31;\n\t\tconst t23 = n21 * n32 - n22 * n31;\n\n\t\treturn n11 * ( n42 * t11 - n43 * t12 + n44 * t13 ) -\n\t\t\tn12 * ( n41 * t11 - n43 * t21 + n44 * t22 ) +\n\t\t\tn13 * ( n41 * t12 - n42 * t21 + n44 * t23 ) -\n\t\t\tn14 * ( n41 * t13 - n42 * t22 + n43 * t23 );\n\n\t}\n\n\t/**\n\t * Transposes this matrix in place.\n\t *\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the position component for this matrix from the given vector,\n\t * without affecting the rest of the matrix.\n\t *\n\t * @param {number|Vector3} x - The x component of the vector or alternatively the vector object.\n\t * @param {number} y - The y component of the vector.\n\t * @param {number} z - The z component of the vector.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Inverts this matrix, using the [analytic method](https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution).\n\t * You can not invert with a determinant of zero. If you attempt this, the method produces\n\t * a zero matrix instead.\n\t *\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tinvert() {\n\n\t\t// based on https://github.com/toji/gl-matrix\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt1 = n11 * n22 - n21 * n12,\n\t\t\tt2 = n11 * n32 - n31 * n12,\n\t\t\tt3 = n11 * n42 - n41 * n12,\n\t\t\tt4 = n21 * n32 - n31 * n22,\n\t\t\tt5 = n21 * n42 - n41 * n22,\n\t\t\tt6 = n31 * n42 - n41 * n32,\n\t\t\tt7 = n13 * n24 - n23 * n14,\n\t\t\tt8 = n13 * n34 - n33 * n14,\n\t\t\tt9 = n13 * n44 - n43 * n14,\n\t\t\tt10 = n23 * n34 - n33 * n24,\n\t\t\tt11 = n23 * n44 - n43 * n24,\n\t\t\tt12 = n33 * n44 - n43 * n34;\n\n\t\tconst det = t1 * t12 - t2 * t11 + t3 * t10 + t4 * t9 - t5 * t8 + t6 * t7;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = ( n22 * t12 - n32 * t11 + n42 * t10 ) * detInv;\n\t\tte[ 1 ] = ( n31 * t11 - n21 * t12 - n41 * t10 ) * detInv;\n\t\tte[ 2 ] = ( n24 * t6 - n34 * t5 + n44 * t4 ) * detInv;\n\t\tte[ 3 ] = ( n33 * t5 - n23 * t6 - n43 * t4 ) * detInv;\n\n\t\tte[ 4 ] = ( n32 * t9 - n12 * t12 - n42 * t8 ) * detInv;\n\t\tte[ 5 ] = ( n11 * t12 - n31 * t9 + n41 * t8 ) * detInv;\n\t\tte[ 6 ] = ( n34 * t3 - n14 * t6 - n44 * t2 ) * detInv;\n\t\tte[ 7 ] = ( n13 * t6 - n33 * t3 + n43 * t2 ) * detInv;\n\n\t\tte[ 8 ] = ( n12 * t11 - n22 * t9 + n42 * t7 ) * detInv;\n\t\tte[ 9 ] = ( n21 * t9 - n11 * t11 - n41 * t7 ) * detInv;\n\t\tte[ 10 ] = ( n14 * t5 - n24 * t3 + n44 * t1 ) * detInv;\n\t\tte[ 11 ] = ( n23 * t3 - n13 * t5 - n43 * t1 ) * detInv;\n\n\t\tte[ 12 ] = ( n22 * t8 - n12 * t10 - n32 * t7 ) * detInv;\n\t\tte[ 13 ] = ( n11 * t10 - n21 * t8 + n31 * t7 ) * detInv;\n\t\tte[ 14 ] = ( n24 * t2 - n14 * t4 - n34 * t1 ) * detInv;\n\t\tte[ 15 ] = ( n13 * t4 - n23 * t2 + n33 * t1 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the columns of this matrix by the given vector.\n\t *\n\t * @param {Vector3} v - The scale vector.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Gets the maximum scale value of the three axes.\n\t *\n\t * @return {number} The maximum scale.\n\t */\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\t/**\n\t * Sets this matrix as a translation transform from the given vector.\n\t *\n\t * @param {number|Vector3} x - The amount to translate in the X axis or alternatively a translation vector.\n\t * @param {number} y - The amount to translate in the Y axis.\n\t * @param {number} z - The amount to translate in the z axis.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeTranslation( x, y, z ) {\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x.x,\n\t\t\t\t0, 1, 0, x.y,\n\t\t\t\t0, 0, 1, x.z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix as a rotational transformation around the X axis by\n\t * the given angle.\n\t *\n\t * @param {number} theta - The rotation in radians.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix as a rotational transformation around the Y axis by\n\t * the given angle.\n\t *\n\t * @param {number} theta - The rotation in radians.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix as a rotational transformation around the Z axis by\n\t * the given angle.\n\t *\n\t * @param {number} theta - The rotation in radians.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix as a rotational transformation around the given axis by\n\t * the given angle.\n\t *\n\t * This is a somewhat controversial but mathematically sound alternative to\n\t * rotating via Quaternions. See the discussion [here](https://www.gamedev.net/articles/programming/math-and-physics/do-we-really-need-quaternions-r1199).\n\t *\n\t * @param {Vector3} axis - The normalized rotation axis.\n\t * @param {number} angle - The rotation in radians.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix as a scale transformation.\n\t *\n\t * @param {number} x - The amount to scale in the X axis.\n\t * @param {number} y - The amount to scale in the Y axis.\n\t * @param {number} z - The amount to scale in the Z axis.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix as a shear transformation.\n\t *\n\t * @param {number} xy - The amount to shear X by Y.\n\t * @param {number} xz - The amount to shear X by Z.\n\t * @param {number} yx - The amount to shear Y by X.\n\t * @param {number} yz - The amount to shear Y by Z.\n\t * @param {number} zx - The amount to shear Z by X.\n\t * @param {number} zy - The amount to shear Z by Y.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this matrix to the transformation composed of the given position,\n\t * rotation (Quaternion) and scale.\n\t *\n\t * @param {Vector3} position - The position vector.\n\t * @param {Quaternion} quaternion - The rotation as a Quaternion.\n\t * @param {Vector3} scale - The scale vector.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Decomposes this matrix into its position, rotation and scale components\n\t * and provides the result in the given objects.\n\t *\n\t * Note: Not all matrices are decomposable in this way. For example, if an\n\t * object has a non-uniformly scaled parent, then the object's world matrix\n\t * may not be decomposable, and this method may not be appropriate.\n\t *\n\t * @param {Vector3} position - The position vector.\n\t * @param {Quaternion} quaternion - The rotation as a Quaternion.\n\t * @param {Vector3} scale - The scale vector.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\tconst det = this.determinant();\n\n\t\tif ( det === 0 ) {\n\n\t\t\tscale.set( 1, 1, 1 );\n\t\t\tquaternion.identity();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tlet sx = _v1$7.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$7.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$7.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determinant is negative, we need to invert one scale\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\t// scale the rotation part\n\t\t_m1$2.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$2.elements[ 0 ] *= invSX;\n\t\t_m1$2.elements[ 1 ] *= invSX;\n\t\t_m1$2.elements[ 2 ] *= invSX;\n\n\t\t_m1$2.elements[ 4 ] *= invSY;\n\t\t_m1$2.elements[ 5 ] *= invSY;\n\t\t_m1$2.elements[ 6 ] *= invSY;\n\n\t\t_m1$2.elements[ 8 ] *= invSZ;\n\t\t_m1$2.elements[ 9 ] *= invSZ;\n\t\t_m1$2.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$2 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates a perspective projection matrix. This is used internally by\n\t * {@link PerspectiveCamera#updateProjectionMatrix}.\n\n\t * @param {number} left - Left boundary of the viewing frustum at the near plane.\n\t * @param {number} right - Right boundary of the viewing frustum at the near plane.\n\t * @param {number} top - Top boundary of the viewing frustum at the near plane.\n\t * @param {number} bottom - Bottom boundary of the viewing frustum at the near plane.\n\t * @param {number} near - The distance from the camera to the near plane.\n\t * @param {number} far - The distance from the camera to the far plane.\n\t * @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.\n\t * @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\n\t\tlet c, d;\n\n\t\tif ( reversedDepth ) {\n\n\t\t\tc = near / ( far - near );\n\t\t\td = ( far * near ) / ( far - near );\n\n\t\t} else {\n\n\t\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\t\tc = - ( far + near ) / ( far - near );\n\t\t\t\td = ( -2 * far * near ) / ( far - near );\n\n\t\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\t\tc = - far / ( far - near );\n\t\t\t\td = ( - far * near ) / ( far - near );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t\t}\n\n\t\t}\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a; \tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b; \tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c; \tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = -1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates a orthographic projection matrix. This is used internally by\n\t * {@link OrthographicCamera#updateProjectionMatrix}.\n\n\t * @param {number} left - Left boundary of the viewing frustum at the near plane.\n\t * @param {number} right - Right boundary of the viewing frustum at the near plane.\n\t * @param {number} top - Top boundary of the viewing frustum at the near plane.\n\t * @param {number} bottom - Bottom boundary of the viewing frustum at the near plane.\n\t * @param {number} near - The distance from the camera to the near plane.\n\t * @param {number} far - The distance from the camera to the far plane.\n\t * @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.\n\t * @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tmakeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = 2 / ( right - left );\n\t\tconst y = 2 / ( top - bottom );\n\n\t\tconst a = - ( right + left ) / ( right - left );\n\t\tconst b = - ( top + bottom ) / ( top - bottom );\n\n\t\tlet c, d;\n\n\t\tif ( reversedDepth ) {\n\n\t\t\tc = 1 / ( far - near );\n\t\t\td = far / ( far - near );\n\n\t\t} else {\n\n\t\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\t\tc = -2 / ( far - near );\n\t\t\t\td = - ( far + near ) / ( far - near );\n\n\t\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\t\tc = -1 / ( far - near );\n\t\t\t\td = - near / ( far - near );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t\t}\n\n\t\t}\n\n\t\tte[ 0 ] = x;\t\tte[ 4 ] = 0;\t\tte[ 8 ] = 0; \t\tte[ 12 ] = a;\n\t\tte[ 1 ] = 0; \t\tte[ 5 ] = y;\t\tte[ 9 ] = 0; \t\tte[ 13 ] = b;\n\t\tte[ 2 ] = 0; \t\tte[ 6 ] = 0;\t\tte[ 10 ] = c;\t\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0; \t\tte[ 7 ] = 0;\t\tte[ 11 ] = 0;\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this matrix is equal with the given one.\n\t *\n\t * @param {Matrix4} matrix - The matrix to test for equality.\n\t * @return {boolean} Whether this matrix is equal with the given one.\n\t */\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Sets the elements of the matrix from the given array.\n\t *\n\t * @param {Array<number>} array - The matrix elements in column-major order.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Matrix4} A reference to this matrix.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the elements of this matrix to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the matrix elements in column-major order.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The matrix elements in column-major order.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$2 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\n/**\n * A class representing Euler angles.\n *\n * Euler angles describe a rotational transformation by rotating an object on\n * its various axes in specified amounts per axis, and a specified axis\n * order.\n *\n * Iterating through an instance will yield its components (x, y, z,\n * order) in the corresponding order.\n *\n * ```js\n * const a = new THREE.Euler( 0, 1, 1.57, 'XYZ' );\n * const b = new THREE.Vector3( 1, 0, 1 );\n * b.applyEuler(a);\n * ```\n */\nclass Euler {\n\n\t/**\n\t * Constructs a new euler instance.\n\t *\n\t * @param {number} [x=0] - The angle of the x axis in radians.\n\t * @param {number} [y=0] - The angle of the y axis in radians.\n\t * @param {number} [z=0] - The angle of the z axis in radians.\n\t * @param {string} [order=Euler.DEFAULT_ORDER] - A string representing the order that the rotations are applied.\n\t */\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\t/**\n\t * The angle of the x axis in radians.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The angle of the y axis in radians.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The angle of the z axis in radians.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * A string representing the order that the rotations are applied.\n\t *\n\t * @type {string}\n\t * @default 'XYZ'\n\t */\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * Sets the Euler components.\n\t *\n\t * @param {number} x - The angle of the x axis in radians.\n\t * @param {number} y - The angle of the y axis in radians.\n\t * @param {number} z - The angle of the z axis in radians.\n\t * @param {string} [order] - A string representing the order that the rotations are applied.\n\t * @return {Euler} A reference to this Euler instance.\n\t */\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new Euler instance with copied values from this instance.\n\t *\n\t * @return {Euler} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\t/**\n\t * Copies the values of the given Euler instance to this instance.\n\t *\n\t * @param {Euler} euler - The Euler instance to copy.\n\t * @return {Euler} A reference to this Euler instance.\n\t */\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the angles of this Euler instance from a pure rotation matrix.\n\t *\n\t * @param {Matrix4} m - A 4x4 matrix of which the upper 3x3 of matrix is a pure rotation matrix (i.e. unscaled).\n\t * @param {string} [order] - A string representing the order that the rotations are applied.\n\t * @param {boolean} [update=true] - Whether the internal `onChange` callback should be executed or not.\n\t * @return {Euler} A reference to this Euler instance.\n\t */\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, -1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, -1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, -1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, -1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, -1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, -1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\twarn( 'Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the angles of this Euler instance from a normalized quaternion.\n\t *\n\t * @param {Quaternion} q - A normalized Quaternion.\n\t * @param {string} [order] - A string representing the order that the rotations are applied.\n\t * @param {boolean} [update=true] - Whether the internal `onChange` callback should be executed or not.\n\t * @return {Euler} A reference to this Euler instance.\n\t */\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$2.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$2, order, update );\n\n\t}\n\n\t/**\n\t * Sets the angles of this Euler instance from the given vector.\n\t *\n\t * @param {Vector3} v - The vector.\n\t * @param {string} [order] - A string representing the order that the rotations are applied.\n\t * @return {Euler} A reference to this Euler instance.\n\t */\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\t/**\n\t * Resets the euler angle with a new order by creating a quaternion from this\n\t * euler angle and then setting this euler angle with the quaternion and the\n\t * new order.\n\t *\n\t * Warning: This discards revolution information.\n\t *\n\t * @param {string} [newOrder] - A string representing the new order that the rotations are applied.\n\t * @return {Euler} A reference to this Euler instance.\n\t */\n\treorder( newOrder ) {\n\n\t\t_quaternion$4.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$4, newOrder );\n\n\t}\n\n\t/**\n\t * Returns `true` if this Euler instance is equal with the given one.\n\t *\n\t * @param {Euler} euler - The Euler instance to test for equality.\n\t * @return {boolean} Whether this Euler instance is equal with the given one.\n\t */\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\t/**\n\t * Sets this Euler instance's components to values from the given array. The first three\n\t * entries of the array are assign to the x,y and z components. An optional fourth entry\n\t * defines the Euler order.\n\t *\n\t * @param {Array<number,number,number,?string>} array - An array holding the Euler component values.\n\t * @return {Euler} A reference to this Euler instance.\n\t */\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the components of this Euler instance to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number,number,number,string>} [array=[]] - The target array holding the Euler components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number,number,number,string>} The Euler components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n}\n\n/**\n * The default Euler angle order.\n *\n * @static\n * @type {string}\n * @default 'XYZ'\n */\nEuler.DEFAULT_ORDER = 'XYZ';\n\n/**\n * A layers object assigns an 3D object to 1 or more of 32\n * layers numbered `0` to `31` - internally the layers are stored as a\n * bit mask], and by default all 3D objects are a member of layer `0`.\n *\n * This can be used to control visibility - an object must share a layer with\n * a camera to be visible when that camera's view is\n * rendered.\n *\n * All classes that inherit from {@link Object3D} have an `layers` property which\n * is an instance of this class.\n */\nclass Layers {\n\n\t/**\n\t * Constructs a new layers instance, with membership\n\t * initially set to layer `0`.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * A bit mask storing which of the 32 layers this layers object is currently\n\t\t * a member of.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\t/**\n\t * Sets membership to the given layer, and remove membership all other layers.\n\t *\n\t * @param {number} layer - The layer to set.\n\t */\n\tset( layer ) {\n\n\t\tthis.mask = ( 1 << layer | 0 ) >>> 0;\n\n\t}\n\n\t/**\n\t * Adds membership of the given layer.\n\t *\n\t * @param {number} layer - The layer to enable.\n\t */\n\tenable( layer ) {\n\n\t\tthis.mask |= 1 << layer | 0;\n\n\t}\n\n\t/**\n\t * Adds membership to all layers.\n\t */\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\t/**\n\t * Toggles the membership of the given layer.\n\t *\n\t * @param {number} layer - The layer to toggle.\n\t */\n\ttoggle( layer ) {\n\n\t\tthis.mask ^= 1 << layer | 0;\n\n\t}\n\n\t/**\n\t * Removes membership of the given layer.\n\t *\n\t * @param {number} layer - The layer to enable.\n\t */\n\tdisable( layer ) {\n\n\t\tthis.mask &= ~ ( 1 << layer | 0 );\n\n\t}\n\n\t/**\n\t * Removes the membership from all layers.\n\t */\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\t/**\n\t * Returns `true` if this and the given layers object have at least one\n\t * layer in common.\n\t *\n\t * @param {Layers} layers - The layers to test.\n\t * @return {boolean } Whether this and the given layers object have at least one layer in common or not.\n\t */\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given layer is enabled.\n\t *\n\t * @param {number} layer - The layer to test.\n\t * @return {boolean } Whether the given layer is enabled or not.\n\t */\n\tisEnabled( layer ) {\n\n\t\treturn ( this.mask & ( 1 << layer | 0 ) ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$4 = /*@__PURE__*/ new Vector3();\nconst _scale$3 = /*@__PURE__*/ new Vector3();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\n/**\n * Fires when the object has been added to its parent object.\n *\n * @event Object3D#added\n * @type {Object}\n */\nconst _addedEvent = { type: 'added' };\n\n/**\n * Fires when the object has been removed from its parent object.\n *\n * @event Object3D#removed\n * @type {Object}\n */\nconst _removedEvent = { type: 'removed' };\n\n/**\n * Fires when a new child object has been added.\n *\n * @event Object3D#childadded\n * @type {Object}\n */\nconst _childaddedEvent = { type: 'childadded', child: null };\n\n/**\n * Fires when a child object has been removed.\n *\n * @event Object3D#childremoved\n * @type {Object}\n */\nconst _childremovedEvent = { type: 'childremoved', child: null };\n\n/**\n * This is the base class for most objects in three.js and provides a set of\n * properties and methods for manipulating objects in 3D space.\n *\n * @augments EventDispatcher\n */\nclass Object3D extends EventDispatcher {\n\n\t/**\n\t * Constructs a new 3D object.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isObject3D = true;\n\n\t\t/**\n\t\t * The ID of the 3D object.\n\t\t *\n\t\t * @name Object3D#id\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\t/**\n\t\t * The UUID of the 3D object.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.uuid = generateUUID();\n\n\t\t/**\n\t\t * The name of the 3D object.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The type property is used for detecting the object type\n\t\t * in context of serialization/deserialization.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.type = 'Object3D';\n\n\t\t/**\n\t\t * A reference to the parent object.\n\t\t *\n\t\t * @type {?Object3D}\n\t\t * @default null\n\t\t */\n\t\tthis.parent = null;\n\n\t\t/**\n\t\t * An array holding the child 3D objects of this instance.\n\t\t *\n\t\t * @type {Array<Object3D>}\n\t\t */\n\t\tthis.children = [];\n\n\t\t/**\n\t\t * Defines the `up` direction of the 3D object which influences\n\t\t * the orientation via methods like {@link Object3D#lookAt}.\n\t\t *\n\t\t * The default values for all 3D objects is defined by `Object3D.DEFAULT_UP`.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.up = Object3D.DEFAULT_UP.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\t/**\n\t\t\t * Represents the object's local position.\n\t\t\t *\n\t\t\t * @name Object3D#position\n\t\t\t * @type {Vector3}\n\t\t\t * @default (0,0,0)\n\t\t\t */\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\t/**\n\t\t\t * Represents the object's local rotation as Euler angles, in radians.\n\t\t\t *\n\t\t\t * @name Object3D#rotation\n\t\t\t * @type {Euler}\n\t\t\t * @default (0,0,0)\n\t\t\t */\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\t/**\n\t\t\t * Represents the object's local rotation as Quaternions.\n\t\t\t *\n\t\t\t * @name Object3D#quaternion\n\t\t\t * @type {Quaternion}\n\t\t\t */\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\t/**\n\t\t\t * Represents the object's local scale.\n\t\t\t *\n\t\t\t * @name Object3D#scale\n\t\t\t * @type {Vector3}\n\t\t\t * @default (1,1,1)\n\t\t\t */\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\t/**\n\t\t\t * Represents the object's model-view matrix.\n\t\t\t *\n\t\t\t * @name Object3D#modelViewMatrix\n\t\t\t * @type {Matrix4}\n\t\t\t */\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\t/**\n\t\t\t * Represents the object's normal matrix.\n\t\t\t *\n\t\t\t * @name Object3D#normalMatrix\n\t\t\t * @type {Matrix3}\n\t\t\t */\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\t/**\n\t\t * Represents the object's transformation matrix in local space.\n\t\t *\n\t\t * @type {Matrix4}\n\t\t */\n\t\tthis.matrix = new Matrix4();\n\n\t\t/**\n\t\t * Represents the object's transformation matrix in world space.\n\t\t * If the 3D object has no parent, then it's identical to the local transformation matrix\n\t\t *\n\t\t * @type {Matrix4}\n\t\t */\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\t/**\n\t\t * When set to `true`, the engine automatically computes the local matrix from position,\n\t\t * rotation and scale every frame. If set to `false`, the app is responsible for recomputing\n\t\t * the local matrix by calling `updateMatrix()`.\n\t\t *\n\t\t * The default values for all 3D objects is defined by `Object3D.DEFAULT_MATRIX_AUTO_UPDATE`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;\n\n\t\t/**\n\t\t * When set to `true`, the engine automatically computes the world matrix from the current local\n\t\t * matrix and the object's transformation hierarchy. If set to `false`, the app is responsible for\n\t\t * recomputing the world matrix by directly updating the `matrixWorld` property.\n\t\t *\n\t\t * The default values for all 3D objects is defined by `Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer\n\n\t\t/**\n\t\t * When set to `true`, it calculates the world matrix in that frame and resets this property\n\t\t * to `false`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t/**\n\t\t * The layer membership of the 3D object. The 3D object is only visible if it has\n\t\t * at least one layer in common with the camera in use. This property can also be\n\t\t * used to filter out unwanted objects in ray-intersection tests when using {@link Raycaster}.\n\t\t *\n\t\t * @type {Layers}\n\t\t */\n\t\tthis.layers = new Layers();\n\n\t\t/**\n\t\t * When set to `true`, the 3D object gets rendered.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.visible = true;\n\n\t\t/**\n\t\t * When set to `true`, the 3D object gets rendered into shadow maps.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.castShadow = false;\n\n\t\t/**\n\t\t * When set to `true`, the 3D object is affected by shadows in the scene.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.receiveShadow = false;\n\n\t\t/**\n\t\t * When set to `true`, the 3D object is honored by view frustum culling.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.frustumCulled = true;\n\n\t\t/**\n\t\t * This value allows the default rendering order of scene graph objects to be\n\t\t * overridden although opaque and transparent objects remain sorted independently.\n\t\t * When this property is set for an instance of {@link Group},all descendants\n\t\t * objects will be sorted and rendered together. Sorting is from lowest to highest\n\t\t * render order.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.renderOrder = 0;\n\n\t\t/**\n\t\t * An array holding the animation clips of the 3D object.\n\t\t *\n\t\t * @type {Array<AnimationClip>}\n\t\t */\n\t\tthis.animations = [];\n\n\t\t/**\n\t\t * Custom depth material to be used when rendering to the depth map. Can only be used\n\t\t * in context of meshes. When shadow-casting with a {@link DirectionalLight} or {@link SpotLight},\n\t\t * if you are modifying vertex positions in the vertex shader you must specify a custom depth\n\t\t * material for proper shadows.\n\t\t *\n\t\t * Only relevant in context of {@link WebGLRenderer}.\n\t\t *\n\t\t * @type {(Material|undefined)}\n\t\t * @default undefined\n\t\t */\n\t\tthis.customDepthMaterial = undefined;\n\n\t\t/**\n\t\t * Same as {@link Object3D#customDepthMaterial}, but used with {@link PointLight}.\n\t\t *\n\t\t * Only relevant in context of {@link WebGLRenderer}.\n\t\t *\n\t\t * @type {(Material|undefined)}\n\t\t * @default undefined\n\t\t */\n\t\tthis.customDistanceMaterial = undefined;\n\n\t\t/**\n\t\t * Whether the 3D object is supposed to be static or not. If set to `true`, it means\n\t\t * the 3D object is not going to be changed after the initial renderer. This includes\n\t\t * geometry and material settings. A static 3D object can be processed by the renderer\n\t\t * slightly faster since certain state checks can be bypassed.\n\t\t *\n\t\t * Only relevant in context of {@link WebGPURenderer}.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.static = false;\n\n\t\t/**\n\t\t * An object that can be used to store custom data about the 3D object. It\n\t\t * should not hold references to functions as these will not be cloned.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.userData = {};\n\n\t\t/**\n\t\t * The pivot point for rotation and scale transformations.\n\t\t * When set, rotation and scale are applied around this point\n\t\t * instead of the object's origin.\n\t\t *\n\t\t * @type {?Vector3}\n\t\t * @default null\n\t\t */\n\t\tthis.pivot = null;\n\n\t}\n\n\t/**\n\t * A callback that is executed immediately before a 3D object is rendered to a shadow map.\n\t *\n\t * @param {Renderer|WebGLRenderer} renderer - The renderer.\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Camera} camera - The camera that is used to render the scene.\n\t * @param {Camera} shadowCamera - The shadow camera.\n\t * @param {BufferGeometry} geometry - The 3D object's geometry.\n\t * @param {Material} depthMaterial - The depth material.\n\t * @param {Object} group - The geometry group data.\n\t */\n\tonBeforeShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\t/**\n\t * A callback that is executed immediately after a 3D object is rendered to a shadow map.\n\t *\n\t * @param {Renderer|WebGLRenderer} renderer - The renderer.\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Camera} camera - The camera that is used to render the scene.\n\t * @param {Camera} shadowCamera - The shadow camera.\n\t * @param {BufferGeometry} geometry - The 3D object's geometry.\n\t * @param {Material} depthMaterial - The depth material.\n\t * @param {Object} group - The geometry group data.\n\t */\n\tonAfterShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\t/**\n\t * A callback that is executed immediately before a 3D object is rendered.\n\t *\n\t * @param {Renderer|WebGLRenderer} renderer - The renderer.\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Camera} camera - The camera that is used to render the scene.\n\t * @param {BufferGeometry} geometry - The 3D object's geometry.\n\t * @param {Material} material - The 3D object's material.\n\t * @param {Object} group - The geometry group data.\n\t */\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\t/**\n\t * A callback that is executed immediately after a 3D object is rendered.\n\t *\n\t * @param {Renderer|WebGLRenderer} renderer - The renderer.\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Camera} camera - The camera that is used to render the scene.\n\t * @param {BufferGeometry} geometry - The 3D object's geometry.\n\t * @param {Material} material - The 3D object's material.\n\t * @param {Object} group - The geometry group data.\n\t */\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\t/**\n\t * Applies the given transformation matrix to the object and updates the object's position,\n\t * rotation and scale.\n\t *\n\t * @param {Matrix4} matrix - The transformation matrix.\n\t */\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\t/**\n\t * Applies a rotation represented by given the quaternion to the 3D object.\n\t *\n\t * @param {Quaternion} q - The quaternion.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given rotation represented as an axis/angle couple to the 3D object.\n\t *\n\t * @param {Vector3} axis - The (normalized) axis vector.\n\t * @param {number} angle - The angle in radians.\n\t */\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\t/**\n\t * Sets the given rotation represented as Euler angles to the 3D object.\n\t *\n\t * @param {Euler} euler - The Euler angles.\n\t */\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\t/**\n\t * Sets the given rotation represented as rotation matrix to the 3D object.\n\t *\n\t * @param {Matrix4} m - Although a 4x4 matrix is expected, the upper 3x3 portion must be\n\t * a pure rotation matrix (i.e, unscaled).\n\t */\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\t/**\n\t * Sets the given rotation represented as a Quaternion to the 3D object.\n\t *\n\t * @param {Quaternion} q - The Quaternion\n\t */\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\t/**\n\t * Rotates the 3D object along an axis in local space.\n\t *\n\t * @param {Vector3} axis - The (normalized) axis vector.\n\t * @param {number} angle - The angle in radians.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Rotates the 3D object along an axis in world space.\n\t *\n\t * @param {Vector3} axis - The (normalized) axis vector.\n\t * @param {number} angle - The angle in radians.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Rotates the 3D object around its X axis in local space.\n\t *\n\t * @param {number} angle - The angle in radians.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\t/**\n\t * Rotates the 3D object around its Y axis in local space.\n\t *\n\t * @param {number} angle - The angle in radians.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\t/**\n\t * Rotates the 3D object around its Z axis in local space.\n\t *\n\t * @param {number} angle - The angle in radians.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\t/**\n\t * Translate the 3D object by a distance along the given axis in local space.\n\t *\n\t * @param {Vector3} axis - The (normalized) axis vector.\n\t * @param {number} distance - The distance in world units.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$6.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$6.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Translate the 3D object by a distance along its X-axis in local space.\n\t *\n\t * @param {number} distance - The distance in world units.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\t/**\n\t * Translate the 3D object by a distance along its Y-axis in local space.\n\t *\n\t * @param {number} distance - The distance in world units.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\t/**\n\t * Translate the 3D object by a distance along its Z-axis in local space.\n\t *\n\t * @param {number} distance - The distance in world units.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\t/**\n\t * Converts the given vector from this 3D object's local space to world space.\n\t *\n\t * @param {Vector3} vector - The vector to convert.\n\t * @return {Vector3} The converted vector.\n\t */\n\tlocalToWorld( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\t/**\n\t * Converts the given vector from this 3D object's world space to local space.\n\t *\n\t * @param {Vector3} vector - The vector to convert.\n\t * @return {Vector3} The converted vector.\n\t */\n\tworldToLocal( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\t/**\n\t * Rotates the object to face a point in world space.\n\t *\n\t * This method does not support objects having non-uniformly-scaled parent(s).\n\t *\n\t * @param {number|Vector3} x - The x coordinate in world space. Alternatively, a vector representing a position in world space\n\t * @param {number} [y] - The y coordinate in world space.\n\t * @param {number} [z] - The z coordinate in world space.\n\t */\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$4.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position$4, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position$4, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Adds the given 3D object as a child to this 3D object. An arbitrary number of\n\t * objects may be added. Any current parent on an object passed in here will be\n\t * removed, since an object can have at most one parent.\n\t *\n\t * @fires Object3D#added\n\t * @fires Object3D#childadded\n\t * @param {Object3D} object - The 3D object to add.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\terror( 'Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tobject.removeFromParent();\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t\t_childaddedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t\t_childaddedEvent.child = null;\n\n\t\t} else {\n\n\t\t\terror( 'Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes the given 3D object as child from this 3D object.\n\t * An arbitrary number of objects may be removed.\n\t *\n\t * @fires Object3D#removed\n\t * @fires Object3D#childremoved\n\t * @param {Object3D} object - The 3D object to remove.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== -1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t\t_childremovedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childremovedEvent );\n\t\t\t_childremovedEvent.child = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes this 3D object from its current parent.\n\t *\n\t * @fires Object3D#removed\n\t * @fires Object3D#childremoved\n\t * @return {Object3D} A reference to this instance.\n\t */\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes all child objects.\n\t *\n\t * @fires Object3D#removed\n\t * @fires Object3D#childremoved\n\t * @return {Object3D} A reference to this instance.\n\t */\n\tclear() {\n\n\t\treturn this.remove( ... this.children );\n\n\t}\n\n\t/**\n\t * Adds the given 3D object as a child of this 3D object, while maintaining the object's world\n\t * transform. This method does not support scene graphs having non-uniformly-scaled nodes(s).\n\t *\n\t * @fires Object3D#added\n\t * @fires Object3D#childadded\n\t * @param {Object3D} object - The 3D object to attach.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tobject.removeFromParent();\n\t\tobject.parent = this;\n\t\tthis.children.push( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t_childaddedEvent.child = object;\n\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t_childaddedEvent.child = null;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Searches through the 3D object and its children, starting with the 3D object\n\t * itself, and returns the first with a matching ID.\n\t *\n\t * @param {number} id - The id.\n\t * @return {Object3D|undefined} The found 3D object. Returns `undefined` if no 3D object has been found.\n\t */\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\t/**\n\t * Searches through the 3D object and its children, starting with the 3D object\n\t * itself, and returns the first with a matching name.\n\t *\n\t * @param {string} name - The name.\n\t * @return {Object3D|undefined} The found 3D object. Returns `undefined` if no 3D object has been found.\n\t */\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\t/**\n\t * Searches through the 3D object and its children, starting with the 3D object\n\t * itself, and returns the first with a matching property value.\n\t *\n\t * @param {string} name - The name of the property.\n\t * @param {any} value - The value.\n\t * @return {Object3D|undefined} The found 3D object. Returns `undefined` if no 3D object has been found.\n\t */\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\t/**\n\t * Searches through the 3D object and its children, starting with the 3D object\n\t * itself, and returns all 3D objects with a matching property value.\n\t *\n\t * @param {string} name - The name of the property.\n\t * @param {any} value - The value.\n\t * @param {Array<Object3D>} result - The method stores the result in this array.\n\t * @return {Array<Object3D>} The found 3D objects.\n\t */\n\tgetObjectsByProperty( name, value, result = [] ) {\n\n\t\tif ( this[ name ] === value ) result.push( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].getObjectsByProperty( name, value, result );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Returns a vector representing the position of the 3D object in world space.\n\t *\n\t * @param {Vector3} target - The target vector the result is stored to.\n\t * @return {Vector3} The 3D object's position in world space.\n\t */\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\t/**\n\t * Returns a Quaternion representing the position of the 3D object in world space.\n\t *\n\t * @param {Quaternion} target - The target Quaternion the result is stored to.\n\t * @return {Quaternion} The 3D object's rotation in world space.\n\t */\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$4, target, _scale$3 );\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Returns a vector representing the scale of the 3D object in world space.\n\t *\n\t * @param {Vector3} target - The target vector the result is stored to.\n\t * @return {Vector3} The 3D object's scale in world space.\n\t */\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$4, _quaternion$3, target );\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Returns a vector representing the (\"look\") direction of the 3D object in world space.\n\t *\n\t * @param {Vector3} target - The target vector the result is stored to.\n\t * @return {Vector3} The 3D object's direction in world space.\n\t */\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\t/**\n\t * Abstract method to get intersections between a casted ray and this\n\t * 3D object. Renderable 3D objects such as {@link Mesh}, {@link Line} or {@link Points}\n\t * implement this method in order to use raycasting.\n\t *\n\t * @abstract\n\t * @param {Raycaster} raycaster - The raycaster.\n\t * @param {Array<Object>} intersects - An array holding the result of the method.\n\t */\n\traycast( /* raycaster, intersects */ ) {}\n\n\t/**\n\t * Executes the callback on this 3D object and all descendants.\n\t *\n\t * Note: Modifying the scene graph inside the callback is discouraged.\n\t *\n\t * @param {Function} callback - A callback function that allows to process the current 3D object.\n\t */\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Like {@link Object3D#traverse}, but the callback will only be executed for visible 3D objects.\n\t * Descendants of invisible 3D objects are not traversed.\n\t *\n\t * Note: Modifying the scene graph inside the callback is discouraged.\n\t *\n\t * @param {Function} callback - A callback function that allows to process the current 3D object.\n\t */\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Like {@link Object3D#traverse}, but the callback will only be executed for all ancestors.\n\t *\n\t * Note: Modifying the scene graph inside the callback is discouraged.\n\t *\n\t * @param {Function} callback - A callback function that allows to process the current 3D object.\n\t */\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the transformation matrix in local space by computing it from the current\n\t * position, rotation and scale values.\n\t */\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tconst pivot = this.pivot;\n\n\t\tif ( pivot !== null ) {\n\n\t\t\tconst px = pivot.x, py = pivot.y, pz = pivot.z;\n\t\t\tconst te = this.matrix.elements;\n\n\t\t\tte[ 12 ] += px - te[ 0 ] * px - te[ 4 ] * py - te[ 8 ] * pz;\n\t\t\tte[ 13 ] += py - te[ 1 ] * px - te[ 5 ] * py - te[ 9 ] * pz;\n\t\t\tte[ 14 ] += pz - te[ 2 ] * px - te[ 6 ] * py - te[ 10 ] * pz;\n\n\t\t}\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t/**\n\t * Updates the transformation matrix in world space of this 3D objects and its descendants.\n\t *\n\t * To ensure correct results, this method also recomputes the 3D object's transformation matrix in\n\t * local space. The computation of the local and world matrix can be controlled with the\n\t * {@link Object3D#matrixAutoUpdate} and {@link Object3D#matrixWorldAutoUpdate} flags which are both\n\t * `true` by default.  Set these flags to `false` if you need more control over the update matrix process.\n\t *\n\t * @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even\n\t * when {@link Object3D#matrixWorldNeedsUpdate} is `false`.\n\t */\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\tif ( this.parent === null ) {\n\n\t\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// make sure descendants are updated if required\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tchild.updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * An alternative version of {@link Object3D#updateMatrixWorld} with more control over the\n\t * update of ancestor and descendant nodes.\n\t *\n\t * @param {boolean} [updateParents=false] Whether ancestor nodes should be updated or not.\n\t * @param {boolean} [updateChildren=false] Whether descendant nodes should be updated or not.\n\t */\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// make sure descendants are updated\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Serializes the 3D object into JSON.\n\t *\n\t * @param {?(Object|string)} meta - An optional value holding meta information about the serialization.\n\t * @return {Object} A JSON object representing the serialized 3D object.\n\t * @see {@link ObjectLoader#parse}\n\t */\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.7,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( this.static !== false ) object.static = this.static;\n\t\tif ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\t\tobject.up = this.up.toArray();\n\n\t\tif ( this.pivot !== null ) object.pivot = this.pivot.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\tif ( this.morphTargetDictionary !== undefined ) object.morphTargetDictionary = Object.assign( {}, this.morphTargetDictionary );\n\t\tif ( this.morphTargetInfluences !== undefined ) object.morphTargetInfluences = this.morphTargetInfluences.slice();\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\tif ( this.isBatchedMesh ) {\n\n\t\t\tobject.type = 'BatchedMesh';\n\t\t\tobject.perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\t\tobject.sortObjects = this.sortObjects;\n\n\t\t\tobject.drawRanges = this._drawRanges;\n\t\t\tobject.reservedRanges = this._reservedRanges;\n\n\t\t\tobject.geometryInfo = this._geometryInfo.map( info => ( {\n\t\t\t\t...info,\n\t\t\t\tboundingBox: info.boundingBox ? info.boundingBox.toJSON() : undefined,\n\t\t\t\tboundingSphere: info.boundingSphere ? info.boundingSphere.toJSON() : undefined\n\t\t\t} ) );\n\t\t\tobject.instanceInfo = this._instanceInfo.map( info => ( { ...info } ) );\n\n\t\t\tobject.availableInstanceIds = this._availableInstanceIds.slice();\n\t\t\tobject.availableGeometryIds = this._availableGeometryIds.slice();\n\n\t\t\tobject.nextIndexStart = this._nextIndexStart;\n\t\t\tobject.nextVertexStart = this._nextVertexStart;\n\t\t\tobject.geometryCount = this._geometryCount;\n\n\t\t\tobject.maxInstanceCount = this._maxInstanceCount;\n\t\t\tobject.maxVertexCount = this._maxVertexCount;\n\t\t\tobject.maxIndexCount = this._maxIndexCount;\n\n\t\t\tobject.geometryInitialized = this._geometryInitialized;\n\n\t\t\tobject.matricesTexture = this._matricesTexture.toJSON( meta );\n\n\t\t\tobject.indirectTexture = this._indirectTexture.toJSON( meta );\n\n\t\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\t\tobject.colorsTexture = this._colorsTexture.toJSON( meta );\n\n\t\t\t}\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tobject.boundingSphere = this.boundingSphere.toJSON();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tobject.boundingBox = this.boundingBox.toJSON();\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a new 3D object with copied values from this instance.\n\t *\n\t * @param {boolean} [recursive=true] - When set to `true`, descendants of the 3D object are also cloned.\n\t * @return {Object3D} A clone of this instance.\n\t */\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\t/**\n\t * Copies the values of the given 3D object to this instance.\n\t *\n\t * @param {Object3D} source - The 3D object to copy.\n\t * @param {boolean} [recursive=true] - When set to `true`, descendants of the 3D object are cloned.\n\t * @return {Object3D} A reference to this instance.\n\t */\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.pivot = ( source.pivot !== null ) ? source.pivot.clone() : null;\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.static = source.static;\n\n\t\tthis.animations = source.animations.slice();\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * The default up direction for objects, also used as the default\n * position for {@link DirectionalLight} and {@link HemisphereLight}.\n *\n * @static\n * @type {Vector3}\n * @default (0,1,0)\n */\nObject3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );\n\n/**\n * The default setting for {@link Object3D#matrixAutoUpdate} for\n * newly created 3D objects.\n *\n * @static\n * @type {boolean}\n * @default true\n */\nObject3D.DEFAULT_MATRIX_AUTO_UPDATE = true;\n\n/**\n * The default setting for {@link Object3D#matrixWorldAutoUpdate} for\n * newly created 3D objects.\n *\n * @static\n * @type {boolean}\n * @default true\n */\nObject3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;\n\n/**\n * This is almost identical to an {@link Object3D}. Its purpose is to\n * make working with groups of objects syntactically clearer.\n *\n * ```js\n * // Create a group and add the two cubes.\n * // These cubes can now be rotated / scaled etc as a group.\n * const group = new THREE.Group();\n *\n * group.add( meshA );\n * group.add( meshB );\n *\n * scene.add( group );\n * ```\n *\n * @augments Object3D\n */\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nconst _moveEvent = { type: 'move' };\n\n/**\n * Class for representing a XR controller with its\n * different coordinate systems.\n *\n * @private\n */\nclass WebXRController {\n\n\t/**\n\t * Constructs a new XR controller.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * A group representing the target ray space\n\t\t * of the XR controller.\n\t\t *\n\t\t * @private\n\t\t * @type {?Group}\n\t\t * @default null\n\t\t */\n\t\tthis._targetRay = null;\n\n\t\t/**\n\t\t * A group representing the grip space\n\t\t * of the XR controller.\n\t\t *\n\t\t * @private\n\t\t * @type {?Group}\n\t\t * @default null\n\t\t */\n\t\tthis._grip = null;\n\n\t\t/**\n\t\t * A group representing the hand space\n\t\t * of the XR controller.\n\t\t *\n\t\t * @private\n\t\t * @type {?Group}\n\t\t * @default null\n\t\t */\n\t\tthis._hand = null;\n\n\t}\n\n\t/**\n\t * Returns a group representing the hand space of the XR controller.\n\t *\n\t * @return {Group} A group representing the hand space of the XR controller.\n\t */\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\t/**\n\t * Returns a group representing the target ray space of the XR controller.\n\t *\n\t * @return {Group} A group representing the target ray space of the XR controller.\n\t */\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\t/**\n\t * Returns a group representing the grip space of the XR controller.\n\t *\n\t * @return {Group} A group representing the grip space of the XR controller.\n\t */\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\t\t\tthis._grip.eventsEnabled = false;\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\t/**\n\t * Dispatches the given event to the groups representing\n\t * the different coordinate spaces of the XR controller.\n\t *\n\t * @param {Object} event - The event to dispatch.\n\t * @return {WebXRController} A reference to this instance.\n\t */\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Connects the controller with the given XR input source.\n\t *\n\t * @param {XRInputSource} inputSource - The input source.\n\t * @return {WebXRController} A reference to this instance.\n\t */\n\tconnect( inputSource ) {\n\n\t\tif ( inputSource && inputSource.hand ) {\n\n\t\t\tconst hand = this._hand;\n\n\t\t\tif ( hand ) {\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Initialize hand with joints when connected\n\t\t\t\t\tthis._getHandJoint( hand, inputjoint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Disconnects the controller from the given XR input source.\n\t *\n\t * @param {XRInputSource} inputSource - The input source.\n\t * @return {WebXRController} A reference to this instance.\n\t */\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Updates the controller with the given input source, XR frame and reference space.\n\t * This updates the transformations of the groups that represent the different\n\t * coordinate systems of the controller.\n\t *\n\t * @param {XRInputSource} inputSource - The input source.\n\t * @param {XRFrame} frame - The XR frame.\n\t * @param {XRReferenceSpace} referenceSpace - The reference space.\n\t * @return {WebXRController} A reference to this instance.\n\t */\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = this._getHandJoint( hand, inputjoint );\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.matrixWorldNeedsUpdate = true;\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\t\t\t\t\t\tgrip.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// grip update event if enabled\n\t\t\t\t\t\tif ( grip.eventsEnabled ) {\n\n\t\t\t\t\t\t\tgrip.dispatchEvent( {\n\t\t\t\t\t\t\t\ttype: 'gripUpdated',\n\t\t\t\t\t\t\t\tdata: inputSource,\n\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it\n\t\t\t\tif ( inputPose === null && gripPose !== null ) {\n\n\t\t\t\t\tinputPose = gripPose;\n\n\t\t\t\t}\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\t\t\t\t\ttargetRay.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a group representing the hand joint for the given input joint.\n\t *\n\t * @private\n\t * @param {Group} hand - The group representing the hand space.\n\t * @param {XRJointSpace} inputjoint - The hand joint data.\n\t * @return {Group} A group representing the hand joint for the given input joint.\n\t */\n\t_getHandJoint( hand, inputjoint ) {\n\n\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\tconst joint = new Group();\n\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\tjoint.visible = false;\n\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\n\t\t\thand.add( joint );\n\n\t\t}\n\n\t\treturn hand.joints[ inputjoint.jointName ];\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\n/**\n * A Color instance is represented by RGB components in the linear <i>working\n * color space</i>, which defaults to `LinearSRGBColorSpace`. Inputs\n * conventionally using `SRGBColorSpace` (such as hexadecimals and CSS\n * strings) are converted to the working color space automatically.\n *\n * ```js\n * // converted automatically from SRGBColorSpace to LinearSRGBColorSpace\n * const color = new THREE.Color().setHex( 0x112233 );\n * ```\n * Source color spaces may be specified explicitly, to ensure correct conversions.\n * ```js\n * // assumed already LinearSRGBColorSpace; no conversion\n * const color = new THREE.Color().setRGB( 0.5, 0.5, 0.5 );\n *\n * // converted explicitly from SRGBColorSpace to LinearSRGBColorSpace\n * const color = new THREE.Color().setRGB( 0.5, 0.5, 0.5, SRGBColorSpace );\n * ```\n * If THREE.ColorManagement is disabled, no conversions occur. For details,\n * see <i>Color management</i>. Iterating through a Color instance will yield\n * its components (r, g, b) in the corresponding order. A Color can be initialised\n * in any of the following ways:\n * ```js\n * //empty constructor - will default white\n * const color1 = new THREE.Color();\n *\n * //Hexadecimal color (recommended)\n * const color2 = new THREE.Color( 0xff0000 );\n *\n * //RGB string\n * const color3 = new THREE.Color(\"rgb(255, 0, 0)\");\n * const color4 = new THREE.Color(\"rgb(100%, 0%, 0%)\");\n *\n * //X11 color name - all 140 color names are supported.\n * //Note the lack of CamelCase in the name\n * const color5 = new THREE.Color( 'skyblue' );\n * //HSL string\n * const color6 = new THREE.Color(\"hsl(0, 100%, 50%)\");\n *\n * //Separate RGB values between 0 and 1\n * const color7 = new THREE.Color( 1, 0, 0 );\n * ```\n */\nclass Color {\n\n\t/**\n\t * Constructs a new color.\n\t *\n\t * Note that standard method of specifying color in three.js is with a hexadecimal triplet,\n\t * and that method is used throughout the rest of the documentation.\n\t *\n\t * @param {(number|string|Color)} [r] - The red component of the color. If `g` and `b` are\n\t * not provided, it can be hexadecimal triplet, a CSS-style string or another `Color` instance.\n\t * @param {number} [g] - The green component.\n\t * @param {number} [b] - The blue component.\n\t */\n\tconstructor( r, g, b ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isColor = true;\n\n\t\t/**\n\t\t * The red component.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.r = 1;\n\n\t\t/**\n\t\t * The green component.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.g = 1;\n\n\t\t/**\n\t\t * The blue component.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.b = 1;\n\n\t\treturn this.set( r, g, b );\n\n\t}\n\n\t/**\n\t * Sets the colors's components from the given values.\n\t *\n\t * @param {(number|string|Color)} [r] - The red component of the color. If `g` and `b` are\n\t * not provided, it can be hexadecimal triplet, a CSS-style string or another `Color` instance.\n\t * @param {number} [g] - The green component.\n\t * @param {number} [b] - The blue component.\n\t * @return {Color} A reference to this color.\n\t */\n\tset( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\n\t\t\tconst value = r;\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.setRGB( r, g, b );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the colors's components to the given scalar value.\n\t *\n\t * @param {number} scalar - The scalar value.\n\t * @return {Color} A reference to this color.\n\t */\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this color from a hexadecimal value.\n\t *\n\t * @param {number} hex - The hexadecimal value.\n\t * @param {string} [colorSpace=SRGBColorSpace] - The color space.\n\t * @return {Color} A reference to this color.\n\t */\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.colorSpaceToWorking( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this color from RGB values.\n\t *\n\t * @param {number} r - Red channel value between `0.0` and `1.0`.\n\t * @param {number} g - Green channel value between `0.0` and `1.0`.\n\t * @param {number} b - Blue channel value between `0.0` and `1.0`.\n\t * @param {string} [colorSpace=ColorManagement.workingColorSpace] - The color space.\n\t * @return {Color} A reference to this color.\n\t */\n\tsetRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.colorSpaceToWorking( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this color from RGB values.\n\t *\n\t * @param {number} h - Hue value between `0.0` and `1.0`.\n\t * @param {number} s - Saturation value between `0.0` and `1.0`.\n\t * @param {number} l - Lightness value between `0.0` and `1.0`.\n\t * @param {string} [colorSpace=ColorManagement.workingColorSpace] - The color space.\n\t * @return {Color} A reference to this color.\n\t */\n\tsetHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.colorSpaceToWorking( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this color from a CSS-style string. For example, `rgb(250, 0,0)`,\n\t * `rgb(100%, 0%, 0%)`, `hsl(0, 100%, 50%)`, `#ff0000`, `#f00`, or `red` ( or\n\t * any [X11 color name](https://en.wikipedia.org/wiki/X11_color_names#Color_name_chart) -\n\t * all 140 color names are supported).\n\t *\n\t * @param {string} style - Color as a CSS-style string.\n\t * @param {string} [colorSpace=SRGBColorSpace] - The color space.\n\t * @return {Color} A reference to this color.\n\t */\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\twarn( 'Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^(\\w+)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL(\n\t\t\t\t\t\t\tparseFloat( color[ 1 ] ) / 360,\n\t\t\t\t\t\t\tparseFloat( color[ 2 ] ) / 100,\n\t\t\t\t\t\t\tparseFloat( color[ 3 ] ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\twarn( 'Color: Unknown color model ' + style );\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\treturn this.setRGB(\n\t\t\t\t\tparseInt( hex.charAt( 0 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 1 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 2 ), 16 ) / 15,\n\t\t\t\t\tcolorSpace\n\t\t\t\t);\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\treturn this.setHex( parseInt( hex, 16 ), colorSpace );\n\n\t\t\t} else {\n\n\t\t\t\twarn( 'Color: Invalid hex color ' + style );\n\n\t\t\t}\n\n\t\t} else if ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this color from a color name. Faster than {@link Color#setStyle} if\n\t * you don't need the other CSS-style formats.\n\t *\n\t * For convenience, the list of names is exposed in `Color.NAMES` as a hash.\n\t * ```js\n\t * Color.NAMES.aliceblue // returns 0xF0F8FF\n\t * ```\n\t *\n\t * @param {string} style - The color name.\n\t * @param {string} [colorSpace=SRGBColorSpace] - The color space.\n\t * @return {Color} A reference to this color.\n\t */\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\twarn( 'Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new color with copied values from this instance.\n\t *\n\t * @return {Color} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\t/**\n\t * Copies the values of the given color to this instance.\n\t *\n\t * @param {Color} color - The color to copy.\n\t * @return {Color} A reference to this color.\n\t */\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the given color into this color, and then converts this color from\n\t * `SRGBColorSpace` to `LinearSRGBColorSpace`.\n\t *\n\t * @param {Color} color - The color to copy/convert.\n\t * @return {Color} A reference to this color.\n\t */\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the given color into this color, and then converts this color from\n\t * `LinearSRGBColorSpace` to `SRGBColorSpace`.\n\t *\n\t * @param {Color} color - The color to copy/convert.\n\t * @return {Color} A reference to this color.\n\t */\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Converts this color from `SRGBColorSpace` to `LinearSRGBColorSpace`.\n\t *\n\t * @return {Color} A reference to this color.\n\t */\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Converts this color from `LinearSRGBColorSpace` to `SRGBColorSpace`.\n\t *\n\t * @return {Color} A reference to this color.\n\t */\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the hexadecimal value of this color.\n\t *\n\t * @param {string} [colorSpace=SRGBColorSpace] - The color space.\n\t * @return {number} The hexadecimal value.\n\t */\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );\n\n\t\treturn Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );\n\n\t}\n\n\t/**\n\t * Returns the hexadecimal value of this color as a string (for example, 'FFFFFF').\n\t *\n\t * @param {string} [colorSpace=SRGBColorSpace] - The color space.\n\t * @return {string} The hexadecimal value as a string.\n\t */\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( -6 );\n\n\t}\n\n\t/**\n\t * Converts the colors RGB values into the HSL format and stores them into the\n\t * given target object.\n\t *\n\t * @param {{h:number,s:number,l:number}} target - The target object that is used to store the method's result.\n\t * @param {string} [colorSpace=ColorManagement.workingColorSpace] - The color space.\n\t * @return {{h:number,s:number,l:number}} The HSL representation of this color.\n\t */\n\tgetHSL( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Returns the RGB values of this color and stores them into the given target object.\n\t *\n\t * @param {Color} target - The target color that is used to store the method's result.\n\t * @param {string} [colorSpace=ColorManagement.workingColorSpace] - The color space.\n\t * @return {Color} The RGB representation of this color.\n\t */\n\tgetRGB( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );\n\n\t\ttarget.r = _color.r;\n\t\ttarget.g = _color.g;\n\t\ttarget.b = _color.b;\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Returns the value of this color as a CSS style string. Example: `rgb(255,0,0)`.\n\t *\n\t * @param {string} [colorSpace=SRGBColorSpace] - The color space.\n\t * @return {string} The CSS representation of this color.\n\t */\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;\n\n\t\t}\n\n\t\treturn `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;\n\n\t}\n\n\t/**\n\t * Adds the given HSL values to this color's values.\n\t * Internally, this converts the color's RGB values to HSL, adds HSL\n\t * and then converts the color back to RGB.\n\t *\n\t * @param {number} h - Hue value between `0.0` and `1.0`.\n\t * @param {number} s - Saturation value between `0.0` and `1.0`.\n\t * @param {number} l - Lightness value between `0.0` and `1.0`.\n\t * @return {Color} A reference to this color.\n\t */\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\treturn this.setHSL( _hslA.h + h, _hslA.s + s, _hslA.l + l );\n\n\t}\n\n\t/**\n\t * Adds the RGB values of the given color to the RGB values of this color.\n\t *\n\t * @param {Color} color - The color to add.\n\t * @return {Color} A reference to this color.\n\t */\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the RGB values of the given colors and stores the result in this instance.\n\t *\n\t * @param {Color} color1 - The first color.\n\t * @param {Color} color2 - The second color.\n\t * @return {Color} A reference to this color.\n\t */\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given scalar value to the RGB values of this color.\n\t *\n\t * @param {number} s - The scalar to add.\n\t * @return {Color} A reference to this color.\n\t */\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the RGB values of the given color from the RGB values of this color.\n\t *\n\t * @param {Color} color - The color to subtract.\n\t * @return {Color} A reference to this color.\n\t */\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the RGB values of the given color with the RGB values of this color.\n\t *\n\t * @param {Color} color - The color to multiply.\n\t * @return {Color} A reference to this color.\n\t */\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given scalar value with the RGB values of this color.\n\t *\n\t * @param {number} s - The scalar to multiply.\n\t * @return {Color} A reference to this color.\n\t */\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Linearly interpolates this color's RGB values toward the RGB values of the\n\t * given color. The alpha argument can be thought of as the ratio between\n\t * the two colors, where `0.0` is this color and `1.0` is the first argument.\n\t *\n\t * @param {Color} color - The color to converge on.\n\t * @param {number} alpha - The interpolation factor in the closed interval `[0,1]`.\n\t * @return {Color} A reference to this color.\n\t */\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given colors and stores the result in this instance.\n\t * The alpha argument can be thought of as the ratio between the two colors, where `0.0`\n\t * is the first and `1.0` is the second color.\n\t *\n\t * @param {Color} color1 - The first color.\n\t * @param {Color} color2 - The second color.\n\t * @param {number} alpha - The interpolation factor in the closed interval `[0,1]`.\n\t * @return {Color} A reference to this color.\n\t */\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Linearly interpolates this color's HSL values toward the HSL values of the\n\t * given color. It differs from {@link Color#lerp} by not interpolating straight\n\t * from one color to the other, but instead going through all the hues in between\n\t * those two colors. The alpha argument can be thought of as the ratio between\n\t * the two colors, where 0.0 is this color and 1.0 is the first argument.\n\t *\n\t * @param {Color} color - The color to converge on.\n\t * @param {number} alpha - The interpolation factor in the closed interval `[0,1]`.\n\t * @return {Color} A reference to this color.\n\t */\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the color's RGB components from the given 3D vector.\n\t *\n\t * @param {Vector3} v - The vector to set.\n\t * @return {Color} A reference to this color.\n\t */\n\tsetFromVector3( v ) {\n\n\t\tthis.r = v.x;\n\t\tthis.g = v.y;\n\t\tthis.b = v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Transforms this color with the given 3x3 matrix.\n\t *\n\t * @param {Matrix3} m - The matrix.\n\t * @return {Color} A reference to this color.\n\t */\n\tapplyMatrix3( m ) {\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\t\tconst e = m.elements;\n\n\t\tthis.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;\n\t\tthis.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;\n\t\tthis.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this color is equal with the given one.\n\t *\n\t * @param {Color} c - The color to test for equality.\n\t * @return {boolean} Whether this bounding color is equal with the given one.\n\t */\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\t/**\n\t * Sets this color's RGB components from the given array.\n\t *\n\t * @param {Array<number>} array - An array holding the RGB values.\n\t * @param {number} [offset=0] - The offset into the array.\n\t * @return {Color} A reference to this color.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the RGB components of this color to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the color components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The color components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Sets the components of this color from the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute holding color data.\n\t * @param {number} index - The index into the attribute.\n\t * @return {Color} A reference to this color.\n\t */\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * This methods defines the serialization result of this class. Returns the color\n\t * as a hexadecimal value.\n\t *\n\t * @return {number} The hexadecimal value.\n\t */\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nconst _color = /*@__PURE__*/ new Color();\n\n/**\n * A dictionary with X11 color names.\n *\n * Note that multiple words such as Dark Orange become the string 'darkorange'.\n *\n * @static\n * @type {Object}\n */\nColor.NAMES = _colorKeywords;\n\n/**\n * This class can be used to define an exponential squared fog,\n * which gives a clear view near the camera and a faster than exponentially\n * densening fog farther from the camera.\n *\n * ```js\n * const scene = new THREE.Scene();\n * scene.fog = new THREE.FogExp2( 0xcccccc, 0.002 );\n * ```\n */\nclass FogExp2 {\n\n\t/**\n\t * Constructs a new fog.\n\t *\n\t * @param {number|Color} color - The fog's color.\n\t * @param {number} [density=0.00025] - Defines how fast the fog will grow dense.\n\t */\n\tconstructor( color, density = 0.00025 ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isFogExp2 = true;\n\n\t\t/**\n\t\t * The name of the fog.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The fog's color.\n\t\t *\n\t\t * @type {Color}\n\t\t */\n\t\tthis.color = new Color( color );\n\n\t\t/**\n\t\t *  Defines how fast the fog will grow dense.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.00025\n\t\t */\n\t\tthis.density = density;\n\n\t}\n\n\t/**\n\t * Returns a new fog with copied values from this instance.\n\t *\n\t * @return {FogExp2} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\t/**\n\t * Serializes the fog into JSON.\n\t *\n\t * @param {?(Object|string)} meta - An optional value holding meta information about the serialization.\n\t * @return {Object} A JSON object representing the serialized fog\n\t */\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\n/**\n * This class can be used to define a linear fog that grows linearly denser\n * with the distance.\n *\n * ```js\n * const scene = new THREE.Scene();\n * scene.fog = new THREE.Fog( 0xcccccc, 10, 15 );\n * ```\n */\nclass Fog {\n\n\t/**\n\t * Constructs a new fog.\n\t *\n\t * @param {number|Color} color - The fog's color.\n\t * @param {number} [near=1] - The minimum distance to start applying fog.\n\t * @param {number} [far=1000] - The maximum distance at which fog stops being calculated and applied.\n\t */\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isFog = true;\n\n\t\t/**\n\t\t * The name of the fog.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The fog's color.\n\t\t *\n\t\t * @type {Color}\n\t\t */\n\t\tthis.color = new Color( color );\n\n\t\t/**\n\t\t * The minimum distance to start applying fog. Objects that are less than\n\t\t * `near` units from the active camera won't be affected by fog.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.near = near;\n\n\t\t/**\n\t\t * The maximum distance at which fog stops being calculated and applied.\n\t\t * Objects that are more than `far` units away from the active camera won't\n\t\t * be affected by fog.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1000\n\t\t */\n\t\tthis.far = far;\n\n\t}\n\n\t/**\n\t * Returns a new fog with copied values from this instance.\n\t *\n\t * @return {Fog} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\t/**\n\t * Serializes the fog into JSON.\n\t *\n\t * @param {?(Object|string)} meta - An optional value holding meta information about the serialization.\n\t * @return {Object} A JSON object representing the serialized fog\n\t */\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\n/**\n * Scenes allow you to set up what is to be rendered and where by three.js.\n * This is where you place 3D objects like meshes, lines or lights.\n *\n * @augments Object3D\n */\nclass Scene extends Object3D {\n\n\t/**\n\t * Constructs a new scene.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isScene = true;\n\n\t\tthis.type = 'Scene';\n\n\t\t/**\n\t\t * Defines the background of the scene. Valid inputs are:\n\t\t *\n\t\t * - A color for defining a uniform colored background.\n\t\t * - A texture for defining a (flat) textured background.\n\t\t * - Cube textures or equirectangular textures for defining a skybox.\n\t\t *\n\t\t * @type {?(Color|Texture)}\n\t\t * @default null\n\t\t */\n\t\tthis.background = null;\n\n\t\t/**\n\t\t * Sets the environment map for all physical materials in the scene. However,\n\t\t * it's not possible to overwrite an existing texture assigned to the `envMap`\n\t\t * material property.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.environment = null;\n\n\t\t/**\n\t\t * A fog instance defining the type of fog that affects everything\n\t\t * rendered in the scene.\n\t\t *\n\t\t * @type {?(Fog|FogExp2)}\n\t\t * @default null\n\t\t */\n\t\tthis.fog = null;\n\n\t\t/**\n\t\t * Sets the blurriness of the background. Only influences environment maps\n\t\t * assigned to {@link Scene#background}. Valid input is a float between `0`\n\t\t * and `1`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.backgroundBlurriness = 0;\n\n\t\t/**\n\t\t * Attenuates the color of the background. Only applies to background textures.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.backgroundIntensity = 1;\n\n\t\t/**\n\t\t * The rotation of the background in radians. Only influences environment maps\n\t\t * assigned to {@link Scene#background}.\n\t\t *\n\t\t * @type {Euler}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.backgroundRotation = new Euler();\n\n\t\t/**\n\t\t * Attenuates the color of the environment. Only influences environment maps\n\t\t * assigned to {@link Scene#environment}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.environmentIntensity = 1;\n\n\t\t/**\n\t\t * The rotation of the environment map in radians. Only influences physical materials\n\t\t * in the scene when {@link Scene#environment} is used.\n\t\t *\n\t\t * @type {Euler}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.environmentRotation = new Euler();\n\n\t\t/**\n\t\t * Forces everything in the scene to be rendered with the defined material. It is possible\n\t\t * to exclude materials from override by setting {@link Material#allowOverride} to `false`.\n\t\t *\n\t\t * @type {?Material}\n\t\t * @default null\n\t\t */\n\t\tthis.overrideMaterial = null;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tthis.backgroundBlurriness = source.backgroundBlurriness;\n\t\tthis.backgroundIntensity = source.backgroundIntensity;\n\t\tthis.backgroundRotation.copy( source.backgroundRotation );\n\n\t\tthis.environmentIntensity = source.environmentIntensity;\n\t\tthis.environmentRotation.copy( source.environmentRotation );\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\tif ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;\n\t\tif ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;\n\t\tdata.object.backgroundRotation = this.backgroundRotation.toArray();\n\n\t\tif ( this.environmentIntensity !== 1 ) data.object.environmentIntensity = this.environmentIntensity;\n\t\tdata.object.environmentRotation = this.environmentRotation.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _v2$4 = /*@__PURE__*/ new Vector3();\nconst _v3$2 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nconst _v40 = /*@__PURE__*/ new Vector4();\nconst _v41 = /*@__PURE__*/ new Vector4();\nconst _v42 = /*@__PURE__*/ new Vector4();\n\n/**\n * A geometric triangle as defined by three vectors representing its three corners.\n */\nclass Triangle {\n\n\t/**\n\t * Constructs a new triangle.\n\t *\n\t * @param {Vector3} [a=(0,0,0)] - The first corner of the triangle.\n\t * @param {Vector3} [b=(0,0,0)] - The second corner of the triangle.\n\t * @param {Vector3} [c=(0,0,0)] - The third corner of the triangle.\n\t */\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\t/**\n\t\t * The first corner of the triangle.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.a = a;\n\n\t\t/**\n\t\t * The second corner of the triangle.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.b = b;\n\n\t\t/**\n\t\t * The third corner of the triangle.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.c = c;\n\n\t}\n\n\t/**\n\t * Computes the normal vector of a triangle.\n\t *\n\t * @param {Vector3} a - The first corner of the triangle.\n\t * @param {Vector3} b - The second corner of the triangle.\n\t * @param {Vector3} c - The third corner of the triangle.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The triangle's normal.\n\t */\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$2.subVectors( a, b );\n\t\ttarget.cross( _v0$2 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t/**\n\t * Computes a barycentric coordinates from the given vector.\n\t * Returns `null` if the triangle is degenerate.\n\t *\n\t * @param {Vector3} point - A point in 3D space.\n\t * @param {Vector3} a - The first corner of the triangle.\n\t * @param {Vector3} b - The second corner of the triangle.\n\t * @param {Vector3} c - The third corner of the triangle.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {?Vector3} The barycentric coordinates for the given point\n\t */\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\n\t\t_v0$2.subVectors( c, a );\n\t\t_v1$5.subVectors( b, a );\n\t\t_v2$4.subVectors( point, a );\n\n\t\tconst dot00 = _v0$2.dot( _v0$2 );\n\t\tconst dot01 = _v0$2.dot( _v1$5 );\n\t\tconst dot02 = _v0$2.dot( _v2$4 );\n\t\tconst dot11 = _v1$5.dot( _v1$5 );\n\t\tconst dot12 = _v1$5.dot( _v2$4 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\ttarget.set( 0, 0, 0 );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given point, when projected onto the plane of the\n\t * triangle, lies within the triangle.\n\t *\n\t * @param {Vector3} point - The point in 3D space to test.\n\t * @param {Vector3} a - The first corner of the triangle.\n\t * @param {Vector3} b - The second corner of the triangle.\n\t * @param {Vector3} c - The third corner of the triangle.\n\t * @return {boolean} Whether the given point, when projected onto the plane of the\n\t * triangle, lies within the triangle or not.\n\t */\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\t// if the triangle is degenerate then we can't contain a point\n\t\tif ( this.getBarycoord( point, a, b, c, _v3$2 ) === null ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn ( _v3$2.x >= 0 ) && ( _v3$2.y >= 0 ) && ( ( _v3$2.x + _v3$2.y ) <= 1 );\n\n\t}\n\n\t/**\n\t * Computes the value barycentrically interpolated for the given point on the\n\t * triangle. Returns `null` if the triangle is degenerate.\n\t *\n\t * @param {Vector3} point - Position of interpolated point.\n\t * @param {Vector3} p1 - The first corner of the triangle.\n\t * @param {Vector3} p2 - The second corner of the triangle.\n\t * @param {Vector3} p3 - The third corner of the triangle.\n\t * @param {Vector3} v1 - Value to interpolate of first vertex.\n\t * @param {Vector3} v2 - Value to interpolate of second vertex.\n\t * @param {Vector3} v3 - Value to interpolate of third vertex.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {?Vector3} The interpolated value.\n\t */\n\tstatic getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {\n\n\t\tif ( this.getBarycoord( point, p1, p2, p3, _v3$2 ) === null ) {\n\n\t\t\ttarget.x = 0;\n\t\t\ttarget.y = 0;\n\t\t\tif ( 'z' in target ) target.z = 0;\n\t\t\tif ( 'w' in target ) target.w = 0;\n\t\t\treturn null;\n\n\t\t}\n\n\t\ttarget.setScalar( 0 );\n\t\ttarget.addScaledVector( v1, _v3$2.x );\n\t\ttarget.addScaledVector( v2, _v3$2.y );\n\t\ttarget.addScaledVector( v3, _v3$2.z );\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Computes the value barycentrically interpolated for the given attribute and indices.\n\t *\n\t * @param {BufferAttribute} attr - The attribute to interpolate.\n\t * @param {number} i1 - Index of first vertex.\n\t * @param {number} i2 - Index of second vertex.\n\t * @param {number} i3 - Index of third vertex.\n\t * @param {Vector3} barycoord - The barycoordinate value to use to interpolate.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The interpolated attribute value.\n\t */\n\tstatic getInterpolatedAttribute( attr, i1, i2, i3, barycoord, target ) {\n\n\t\t_v40.setScalar( 0 );\n\t\t_v41.setScalar( 0 );\n\t\t_v42.setScalar( 0 );\n\n\t\t_v40.fromBufferAttribute( attr, i1 );\n\t\t_v41.fromBufferAttribute( attr, i2 );\n\t\t_v42.fromBufferAttribute( attr, i3 );\n\n\t\ttarget.setScalar( 0 );\n\t\ttarget.addScaledVector( _v40, barycoord.x );\n\t\ttarget.addScaledVector( _v41, barycoord.y );\n\t\ttarget.addScaledVector( _v42, barycoord.z );\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Returns `true` if the triangle is oriented towards the given direction.\n\t *\n\t * @param {Vector3} a - The first corner of the triangle.\n\t * @param {Vector3} b - The second corner of the triangle.\n\t * @param {Vector3} c - The third corner of the triangle.\n\t * @param {Vector3} direction - The (normalized) direction vector.\n\t * @return {boolean} Whether the triangle is oriented towards the given direction or not.\n\t */\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$2.subVectors( c, b );\n\t\t_v1$5.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn _v0$2.cross( _v1$5 ).dot( direction ) < 0;\n\n\t}\n\n\t/**\n\t * Sets the triangle's vertices by copying the given values.\n\t *\n\t * @param {Vector3} a - The first corner of the triangle.\n\t * @param {Vector3} b - The second corner of the triangle.\n\t * @param {Vector3} c - The third corner of the triangle.\n\t * @return {Triangle} A reference to this triangle.\n\t */\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the triangle's vertices by copying the given array values.\n\t *\n\t * @param {Array<Vector3>} points - An array with 3D points.\n\t * @param {number} i0 - The array index representing the first corner of the triangle.\n\t * @param {number} i1 - The array index representing the second corner of the triangle.\n\t * @param {number} i2 - The array index representing the third corner of the triangle.\n\t * @return {Triangle} A reference to this triangle.\n\t */\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the triangle's vertices by copying the given attribute values.\n\t *\n\t * @param {BufferAttribute} attribute - A buffer attribute with 3D points data.\n\t * @param {number} i0 - The attribute index representing the first corner of the triangle.\n\t * @param {number} i1 - The attribute index representing the second corner of the triangle.\n\t * @param {number} i2 - The attribute index representing the third corner of the triangle.\n\t * @return {Triangle} A reference to this triangle.\n\t */\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new triangle with copied values from this instance.\n\t *\n\t * @return {Triangle} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Copies the values of the given triangle to this instance.\n\t *\n\t * @param {Triangle} triangle - The triangle to copy.\n\t * @return {Triangle} A reference to this triangle.\n\t */\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes the area of the triangle.\n\t *\n\t * @return {number} The triangle's area.\n\t */\n\tgetArea() {\n\n\t\t_v0$2.subVectors( this.c, this.b );\n\t\t_v1$5.subVectors( this.a, this.b );\n\n\t\treturn _v0$2.cross( _v1$5 ).length() * 0.5;\n\n\t}\n\n\t/**\n\t * Computes the midpoint of the triangle.\n\t *\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The triangle's midpoint.\n\t */\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\t/**\n\t * Computes the normal of the triangle.\n\t *\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The triangle's normal.\n\t */\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\t/**\n\t * Computes a plane the triangle lies within.\n\t *\n\t * @param {Plane} target - The target vector that is used to store the method's result.\n\t * @return {Plane} The plane the triangle lies within.\n\t */\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\t/**\n\t * Computes a barycentric coordinates from the given vector.\n\t * Returns `null` if the triangle is degenerate.\n\t *\n\t * @param {Vector3} point - A point in 3D space.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {?Vector3} The barycentric coordinates for the given point\n\t */\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\t/**\n\t * Computes the value barycentrically interpolated for the given point on the\n\t * triangle. Returns `null` if the triangle is degenerate.\n\t *\n\t * @param {Vector3} point - Position of interpolated point.\n\t * @param {Vector3} v1 - Value to interpolate of first vertex.\n\t * @param {Vector3} v2 - Value to interpolate of second vertex.\n\t * @param {Vector3} v3 - Value to interpolate of third vertex.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {?Vector3} The interpolated value.\n\t */\n\tgetInterpolation( point, v1, v2, v3, target ) {\n\n\t\treturn Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given point, when projected onto the plane of the\n\t * triangle, lies within the triangle.\n\t *\n\t * @param {Vector3} point - The point in 3D space to test.\n\t * @return {boolean} Whether the given point, when projected onto the plane of the\n\t * triangle, lies within the triangle or not.\n\t */\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\t/**\n\t * Returns `true` if the triangle is oriented towards the given direction.\n\t *\n\t * @param {Vector3} direction - The (normalized) direction vector.\n\t * @return {boolean} Whether the triangle is oriented towards the given direction or not.\n\t */\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\t/**\n\t * Returns `true` if this triangle intersects with the given box.\n\t *\n\t * @param {Box3} box - The box to intersect.\n\t * @return {boolean} Whether this triangle intersects with the given box or not.\n\t */\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\t/**\n\t * Returns the closest point on the triangle to the given point.\n\t *\n\t * @param {Vector3} p - The point to compute the closest point for.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The closest point on the triangle.\n\t */\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\t/**\n\t * Returns `true` if this triangle is equal with the given one.\n\t *\n\t * @param {Triangle} triangle - The triangle to test for equality.\n\t * @return {boolean} Whether this triangle is equal with the given one.\n\t */\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\n/**\n * Represents an axis-aligned bounding box (AABB) in 3D space.\n */\nclass Box3 {\n\n\t/**\n\t * Constructs a new bounding box.\n\t *\n\t * @param {Vector3} [min=(Infinity,Infinity,Infinity)] - A vector representing the lower boundary of the box.\n\t * @param {Vector3} [max=(-Infinity,-Infinity,-Infinity)] - A vector representing the upper boundary of the box.\n\t */\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBox3 = true;\n\n\t\t/**\n\t\t * The lower boundary of the box.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.min = min;\n\n\t\t/**\n\t\t * The upper boundary of the box.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.max = max;\n\n\t}\n\n\t/**\n\t * Sets the lower and upper boundaries of this box.\n\t * Please note that this method only copies the values from the given objects.\n\t *\n\t * @param {Vector3} min - The lower boundary of the box.\n\t * @param {Vector3} max - The upper boundary of the box.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the upper and lower bounds of this box so it encloses the position data\n\t * in the given array.\n\t *\n\t * @param {Array<number>} array - An array holding 3D position data.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tsetFromArray( array ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = array.length; i < il; i += 3 ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromArray( array, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the upper and lower bounds of this box so it encloses the position data\n\t * in the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - A buffer attribute holding 3D position data.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromBufferAttribute( attribute, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the upper and lower bounds of this box so it encloses the position data\n\t * in the given array.\n\t *\n\t * @param {Array<Vector3>} points - An array holding 3D position data as instances of {@link Vector3}.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Centers this box on the given center vector and sets this box's width, height and\n\t * depth to the given size values.\n\t *\n\t * @param {Vector3} center - The center of the box.\n\t * @param {Vector3} size - The x, y and z dimensions of the box.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes the world-axis-aligned bounding box for the given 3D object\n\t * (including its children), accounting for the object's, and children's,\n\t * world transforms. The function may result in a larger box than strictly necessary.\n\t *\n\t * @param {Object3D} object - The 3D object to compute the bounding box for.\n\t * @param {boolean} [precise=false] - If set to `true`, the method computes the smallest\n\t * world-axis-aligned bounding box at the expense of more computation.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\t/**\n\t * Returns a new box with copied values from this instance.\n\t *\n\t * @return {Box3} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Copies the values of the given box to this instance.\n\t *\n\t * @param {Box3} box - The box to copy.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Makes this box empty which means in encloses a zero space in 3D.\n\t *\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns true if this box includes zero points within its bounds.\n\t * Note that a box with equal lower and upper bounds still includes one\n\t * point, the one both bounds share.\n\t *\n\t * @return {boolean} Whether this box is empty or not.\n\t */\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\t/**\n\t * Returns the center point of this box.\n\t *\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The center point.\n\t */\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\t/**\n\t * Returns the dimensions of this box.\n\t *\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The size.\n\t */\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\t/**\n\t * Expands the boundaries of this box to include the given point.\n\t *\n\t * @param {Vector3} point - The point that should be included by the bounding box.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Expands this box equilaterally by the given vector. The width of this\n\t * box will be expanded by the x component of the vector in both\n\t * directions. The height of this box will be expanded by the y component of\n\t * the vector in both directions. The depth of this box will be\n\t * expanded by the z component of the vector in both directions.\n\t *\n\t * @param {Vector3} vector - The vector that should expand the bounding box.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Expands each dimension of the box by the given scalar. If negative, the\n\t * dimensions of the box will be contracted.\n\t *\n\t * @param {number} scalar - The scalar value that should expand the bounding box.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Expands the boundaries of this box to include the given 3D object and\n\t * its children, accounting for the object's, and children's, world\n\t * transforms. The function may result in a larger box than strictly\n\t * necessary (unless the precise parameter is set to true).\n\t *\n\t * @param {Object3D} object - The 3D object that should expand the bounding box.\n\t * @param {boolean} precise - If set to `true`, the method expands the bounding box\n\t * as little as necessary at the expense of more computation.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t// precise AABB computation based on vertex data requires at least a position attribute.\n\t\t\t// instancing isn't supported so far and uses the normal (conservative) code path.\n\n\t\t\tif ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true ) {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tif ( object.isMesh === true ) {\n\n\t\t\t\t\t\tobject.getVertexPosition( i, _vector$b );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_vector$b.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_vector$b.applyMatrix4( object.matrixWorld );\n\t\t\t\t\tthis.expandByPoint( _vector$b );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( object.boundingBox !== undefined ) {\n\n\t\t\t\t\t// object-level bounding box\n\n\t\t\t\t\tif ( object.boundingBox === null ) {\n\n\t\t\t\t\t\tobject.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( object.boundingBox );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// geometry-level bounding box\n\n\t\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( geometry.boundingBox );\n\n\t\t\t\t}\n\n\t\t\t\t_box$4.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box$4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given point lies within or on the boundaries of this box.\n\t *\n\t * @param {Vector3} point - The point to test.\n\t * @return {boolean} Whether the bounding box contains the given point or not.\n\t */\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y &&\n\t\t\tpoint.z >= this.min.z && point.z <= this.max.z;\n\n\t}\n\n\t/**\n\t * Returns `true` if this bounding box includes the entirety of the given bounding box.\n\t * If this box and the given one are identical, this function also returns `true`.\n\t *\n\t * @param {Box3} box - The bounding box to test.\n\t * @return {boolean} Whether the bounding box contains the given bounding box or not.\n\t */\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\t/**\n\t * Returns a point as a proportion of this box's width, height and depth.\n\t *\n\t * @param {Vector3} point - A point in 3D space.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} A point as a proportion of this box's width, height and depth.\n\t */\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\t/**\n\t * Returns `true` if the given bounding box intersects with this bounding box.\n\t *\n\t * @param {Box3} box - The bounding box to test.\n\t * @return {boolean} Whether the given bounding box intersects with this bounding box.\n\t */\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y &&\n\t\t\tbox.max.z >= this.min.z && box.min.z <= this.max.z;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given bounding sphere intersects with this bounding box.\n\t *\n\t * @param {Sphere} sphere - The bounding sphere to test.\n\t * @return {boolean} Whether the given bounding sphere intersects with this bounding box.\n\t */\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given plane intersects with this bounding box.\n\t *\n\t * @param {Plane} plane - The plane to test.\n\t * @return {boolean} Whether the given plane intersects with this bounding box.\n\t */\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given triangle intersects with this bounding box.\n\t *\n\t * @param {Triangle} triangle - The triangle to test.\n\t * @return {boolean} Whether the given triangle intersects with this bounding box.\n\t */\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$1.subVectors( triangle.a, _center );\n\t\t_v1$4.subVectors( triangle.b, _center );\n\t\t_v2$3.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$4, _v0$1 );\n\t\t_f1.subVectors( _v2$3, _v1$4 );\n\t\t_f2.subVectors( _v0$1, _v2$3 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$1, _v1$4, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$1, _v1$4, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$1, _v1$4, _v2$3, _extents );\n\n\t}\n\n\t/**\n\t * Clamps the given point within the bounds of this box.\n\t *\n\t * @param {Vector3} point - The point to clamp.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The clamped point.\n\t */\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\t/**\n\t * Returns the euclidean distance from any edge of this box to the specified point. If\n\t * the given point lies inside of this box, the distance will be `0`.\n\t *\n\t * @param {Vector3} point - The point to compute the distance to.\n\t * @return {number} The euclidean distance.\n\t */\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$b ).distanceTo( point );\n\n\t}\n\n\t/**\n\t * Returns a bounding sphere that encloses this bounding box.\n\t *\n\t * @param {Sphere} target - The target sphere that is used to store the method's result.\n\t * @return {Sphere} The bounding sphere that encloses this bounding box.\n\t */\n\tgetBoundingSphere( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\ttarget.makeEmpty();\n\n\t\t} else {\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Computes the intersection of this bounding box and the given one, setting the upper\n\t * bound of this box to the lesser of the two boxes' upper bounds and the\n\t * lower bound of this box to the greater of the two boxes' lower bounds. If\n\t * there's no overlap, makes this box empty.\n\t *\n\t * @param {Box3} box - The bounding box to intersect with.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes the union of this box and another and the given one, setting the upper\n\t * bound of this box to the greater of the two boxes' upper bounds and the\n\t * lower bound of this box to the lesser of the two boxes' lower bounds.\n\t *\n\t * @param {Box3} box - The bounding box that will be unioned with this instance.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Transforms this bounding box by the given 4x4 transformation matrix.\n\t *\n\t * @param {Matrix4} matrix - The transformation matrix.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given offset to both the upper and lower bounds of this bounding box,\n\t * effectively moving it in 3D space.\n\t *\n\t * @param {Vector3} offset - The offset that should be used to translate the bounding box.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this bounding box is equal with the given one.\n\t *\n\t * @param {Box3} box - The box to test for equality.\n\t * @return {boolean} Whether this bounding box is equal with the given one.\n\t */\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n\t/**\n\t * Returns a serialized structure of the bounding box.\n\t *\n\t * @return {Object} Serialized structure with fields representing the object state.\n\t */\n\ttoJSON() {\n\n\t\treturn {\n\t\t\tmin: this.min.toArray(),\n\t\t\tmax: this.max.toArray()\n\t\t};\n\n\t}\n\n\t/**\n\t * Returns a serialized structure of the bounding box.\n\t *\n\t * @param {Object} json - The serialized json to set the box from.\n\t * @return {Box3} A reference to this bounding box.\n\t */\n\tfromJSON( json ) {\n\n\t\tthis.min.fromArray( json.min );\n\t\tthis.max.fromArray( json.max );\n\t\treturn this;\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$4 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n\nconst _tables = /*@__PURE__*/ _generateTables();\n\nfunction _generateTables() {\n\n\t// float32 to float16 helpers\n\n\tconst buffer = new ArrayBuffer( 4 );\n\tconst floatView = new Float32Array( buffer );\n\tconst uint32View = new Uint32Array( buffer );\n\n\tconst baseTable = new Uint32Array( 512 );\n\tconst shiftTable = new Uint32Array( 512 );\n\n\tfor ( let i = 0; i < 256; ++ i ) {\n\n\t\tconst e = i - 127;\n\n\t\t// very small number (0, -0)\n\n\t\tif ( e < -27 ) {\n\n\t\t\tbaseTable[ i ] = 0x0000;\n\t\t\tbaseTable[ i | 0x100 ] = 0x8000;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// small number (denorm)\n\n\t\t} else if ( e < -14 ) {\n\n\t\t\tbaseTable[ i ] = 0x0400 >> ( - e - 14 );\n\t\t\tbaseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;\n\t\t\tshiftTable[ i ] = - e - 1;\n\t\t\tshiftTable[ i | 0x100 ] = - e - 1;\n\n\t\t\t// normal number\n\n\t\t} else if ( e <= 15 ) {\n\n\t\t\tbaseTable[ i ] = ( e + 15 ) << 10;\n\t\t\tbaseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t\t// large number (Infinity, -Infinity)\n\n\t\t} else if ( e < 128 ) {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// stay (NaN, Infinity, -Infinity)\n\n\t\t} else {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t}\n\n\t}\n\n\t// float16 to float32 helpers\n\n\tconst mantissaTable = new Uint32Array( 2048 );\n\tconst exponentTable = new Uint32Array( 64 );\n\tconst offsetTable = new Uint32Array( 64 );\n\n\tfor ( let i = 1; i < 1024; ++ i ) {\n\n\t\tlet m = i << 13; // zero pad mantissa bits\n\t\tlet e = 0; // zero exponent\n\n\t\t// normalized\n\t\twhile ( ( m & 0x00800000 ) === 0 ) {\n\n\t\t\tm <<= 1;\n\t\t\te -= 0x00800000; // decrement exponent\n\n\t\t}\n\n\t\tm &= -8388609; // clear leading 1 bit\n\t\te += 0x38800000; // adjust bias\n\n\t\tmantissaTable[ i ] = m | e;\n\n\t}\n\n\tfor ( let i = 1024; i < 2048; ++ i ) {\n\n\t\tmantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );\n\n\t}\n\n\tfor ( let i = 1; i < 31; ++ i ) {\n\n\t\texponentTable[ i ] = i << 23;\n\n\t}\n\n\texponentTable[ 31 ] = 0x47800000;\n\texponentTable[ 32 ] = 0x80000000;\n\n\tfor ( let i = 33; i < 63; ++ i ) {\n\n\t\texponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );\n\n\t}\n\n\texponentTable[ 63 ] = 0xc7800000;\n\n\tfor ( let i = 1; i < 64; ++ i ) {\n\n\t\tif ( i !== 32 ) {\n\n\t\t\toffsetTable[ i ] = 1024;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tfloatView: floatView,\n\t\tuint32View: uint32View,\n\t\tbaseTable: baseTable,\n\t\tshiftTable: shiftTable,\n\t\tmantissaTable: mantissaTable,\n\t\texponentTable: exponentTable,\n\t\toffsetTable: offsetTable\n\t};\n\n}\n\n/**\n * Returns a half precision floating point value (FP16) from the given single\n * precision floating point value (FP32).\n *\n * @param {number} val - A single precision floating point value.\n * @return {number} The FP16 value.\n */\nfunction toHalfFloat( val ) {\n\n\tif ( Math.abs( val ) > 65504 ) warn( 'DataUtils.toHalfFloat(): Value out of range.' );\n\n\tval = clamp( val, -65504, 65504 );\n\n\t_tables.floatView[ 0 ] = val;\n\tconst f = _tables.uint32View[ 0 ];\n\tconst e = ( f >> 23 ) & 0x1ff;\n\treturn _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );\n\n}\n\n/**\n * Returns a single precision floating point value (FP32) from the given half\n * precision floating point value (FP16).\n *\n * @param {number} val - A half precision floating point value.\n * @return {number} The FP32 value.\n */\nfunction fromHalfFloat( val ) {\n\n\tconst m = val >> 10;\n\t_tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];\n\treturn _tables.floatView[ 0 ];\n\n}\n\n/**\n * A class containing utility functions for data.\n *\n * @hideconstructor\n */\nclass DataUtils {\n\n\t/**\n\t * Returns a half precision floating point value (FP16) from the given single\n\t * precision floating point value (FP32).\n\t *\n\t * @param {number} val - A single precision floating point value.\n\t * @return {number} The FP16 value.\n\t */\n\tstatic toHalfFloat( val ) {\n\n\t\treturn toHalfFloat( val );\n\n\t}\n\n\t/**\n\t * Returns a single precision floating point value (FP32) from the given half\n\t * precision floating point value (FP16).\n\t *\n\t * @param {number} val - A half precision floating point value.\n\t * @return {number} The FP32 value.\n\t */\n\tstatic fromHalfFloat( val ) {\n\n\t\treturn fromHalfFloat( val );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nlet _id$2 = 0;\n\n/**\n * This class stores data for an attribute (such as vertex positions, face\n * indices, normals, colors, UVs, and any custom attributes ) associated with\n * a geometry, which allows for more efficient passing of data to the GPU.\n *\n * When working with vector-like data, the `fromBufferAttribute( attribute, index )`\n * helper methods on vector and color class might be helpful. E.g. {@link Vector3#fromBufferAttribute}.\n */\nclass BufferAttribute extends EventDispatcher {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {TypedArray} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized = false ) {\n\n\t\tsuper();\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBufferAttribute = true;\n\n\t\t/**\n\t\t * The ID of the buffer attribute.\n\t\t *\n\t\t * @name BufferAttribute#id\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tObject.defineProperty( this, 'id', { value: _id$2 ++ } );\n\n\t\t/**\n\t\t * The name of the buffer attribute.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The array holding the attribute data. It should have `itemSize * numVertices`\n\t\t * elements, where `numVertices` is the number of vertices in the associated geometry.\n\t\t *\n\t\t * @type {TypedArray}\n\t\t */\n\t\tthis.array = array;\n\n\t\t/**\n\t\t * The number of values of the array that should be associated with a particular vertex.\n\t\t * For instance, if this attribute is storing a 3-component vector (such as a position,\n\t\t * normal, or color), then the value should be `3`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.itemSize = itemSize;\n\n\t\t/**\n\t\t * Represents the number of items this buffer attribute stores. It is internally computed\n\t\t * by dividing the `array` length by the `itemSize`.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\n\t\t/**\n\t\t * Applies to integer data only. Indicates how the underlying data in the buffer maps to\n\t\t * the values in the GLSL code. For instance, if `array` is an instance of `UInt16Array`,\n\t\t * and `normalized` is `true`, the values `0 - +65535` in the array data will be mapped to\n\t\t * `0.0f - +1.0f` in the GLSL attribute. If `normalized` is `false`, the values will be converted\n\t\t * to floats unmodified, i.e. `65535` becomes `65535.0f`.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.normalized = normalized;\n\n\t\t/**\n\t\t * Defines the intended usage pattern of the data store for optimization purposes.\n\t\t *\n\t\t * Note: After the initial use of a buffer, its usage cannot be changed. Instead,\n\t\t * instantiate a new one and set the desired usage before the next render.\n\t\t *\n\t\t * @type {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)}\n\t\t * @default StaticDrawUsage\n\t\t */\n\t\tthis.usage = StaticDrawUsage;\n\n\t\t/**\n\t\t * This can be used to only update some components of stored vectors (for example, just the\n\t\t * component related to color). Use the `addUpdateRange()` function to add ranges to this array.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.updateRanges = [];\n\n\t\t/**\n\t\t * Configures the bound GPU type for use in shaders.\n\t\t *\n\t\t * Note: this only has an effect for integer arrays and is not configurable for float arrays.\n\t\t * For lower precision float types, use `Float16BufferAttribute`.\n\t\t *\n\t\t * @type {(FloatType|IntType)}\n\t\t * @default FloatType\n\t\t */\n\t\tthis.gpuType = FloatType;\n\n\t\t/**\n\t\t * A version number, incremented every time the `needsUpdate` is set to `true`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.version = 0;\n\n\t}\n\n\t/**\n\t * A callback function that is executed after the renderer has transferred the attribute\n\t * array data to the GPU.\n\t */\n\tonUploadCallback() {}\n\n\t/**\n\t * Flag to indicate that this attribute has changed and should be re-sent to\n\t * the GPU. Set this to `true` when you modify the value of the array.\n\t *\n\t * @type {number}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\t/**\n\t * Sets the usage of this buffer attribute.\n\t *\n\t * @param {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)} value - The usage to set.\n\t * @return {BufferAttribute} A reference to this buffer attribute.\n\t */\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds a range of data in the data array to be updated on the GPU.\n\t *\n\t * @param {number} start - Position at which to start update.\n\t * @param {number} count - The number of components to update.\n\t */\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\t/**\n\t * Clears the update ranges.\n\t */\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\t/**\n\t * Copies the values of the given buffer attribute to this instance.\n\t *\n\t * @param {BufferAttribute} source - The buffer attribute to copy.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\t\tthis.gpuType = source.gpuType;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies a vector from the given buffer attribute to this one. The start\n\t * and destination position in the attribute buffers are represented by the\n\t * given indices.\n\t *\n\t * @param {number} index1 - The destination index into this buffer attribute.\n\t * @param {BufferAttribute} attribute - The buffer attribute to copy from.\n\t * @param {number} index2 - The source index into the given buffer attribute.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the given array data into this buffer attribute.\n\t *\n\t * @param {(TypedArray|Array)} array - The array to copy.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given 3x3 matrix to the given attribute. Works with\n\t * item size `2` and `3`.\n\t *\n\t * @param {Matrix3} m - The matrix to apply.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$a.fromBufferAttribute( this, i );\n\t\t\t\t_vector$a.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$a.x, _vector$a.y, _vector$a.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given 4x4 matrix to the given attribute. Only works with\n\t * item size `3`.\n\t *\n\t * @param {Matrix4} m - The matrix to apply.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$a.fromBufferAttribute( this, i );\n\n\t\t\t_vector$a.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$a.x, _vector$a.y, _vector$a.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given 3x3 normal matrix to the given attribute. Only works with\n\t * item size `3`.\n\t *\n\t * @param {Matrix3} m - The normal matrix to apply.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$a.fromBufferAttribute( this, i );\n\n\t\t\t_vector$a.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$a.x, _vector$a.y, _vector$a.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given 4x4 matrix to the given attribute. Only works with\n\t * item size `3` and with direction vectors.\n\t *\n\t * @param {Matrix4} m - The matrix to apply.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$a.fromBufferAttribute( this, i );\n\n\t\t\t_vector$a.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$a.x, _vector$a.y, _vector$a.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given array data in the buffer attribute.\n\t *\n\t * @param {(TypedArray|Array)} value - The array data to set.\n\t * @param {number} [offset=0] - The offset in this buffer attribute's array.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the given component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} component - The component index.\n\t * @return {number} The returned value.\n\t */\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.itemSize + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\t/**\n\t * Sets the given value to the given component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} component - The component index.\n\t * @param {number} value - The value to set.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.array[ index * this.itemSize + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the x component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @return {number} The x component.\n\t */\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\t/**\n\t * Sets the x component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} x - The value to set.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the y component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @return {number} The y component.\n\t */\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\t/**\n\t * Sets the y component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} y - The value to set.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the z component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @return {number} The z component.\n\t */\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\t/**\n\t * Sets the z component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} z - The value to set.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the w component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @return {number} The w component.\n\t */\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\t/**\n\t * Sets the w component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} w - The value to set.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the x and y component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} x - The value for the x component to set.\n\t * @param {number} y - The value for the y component to set.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the x, y and z component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} x - The value for the x component to set.\n\t * @param {number} y - The value for the y component to set.\n\t * @param {number} z - The value for the z component to set.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the x, y, z and w component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} x - The value for the x component to set.\n\t * @param {number} y - The value for the y component to set.\n\t * @param {number} z - The value for the z component to set.\n\t * @param {number} w - The value for the w component to set.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given callback function that is executed after the Renderer has transferred\n\t * the attribute array data to the GPU. Can be used to perform clean-up operations after\n\t * the upload when attribute data are not needed anymore on the CPU side.\n\t *\n\t * @param {Function} callback - The `onUpload()` callback.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new buffer attribute with copied values from this instance.\n\t *\n\t * @return {BufferAttribute} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\t/**\n\t * Serializes the buffer attribute into JSON.\n\t *\n\t * @return {Object} A JSON object representing the serialized buffer attribute.\n\t */\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Disposes of the buffer attribute. Available only in {@link WebGPURenderer}.\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\n/**\n * Convenient class that can be used when creating a `Int8` buffer attribute with\n * a plain `Array` instance.\n *\n * @augments BufferAttribute\n */\nclass Int8BufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {(Array<number>|Int8Array)} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\n/**\n * Convenient class that can be used when creating a `UInt8` buffer attribute with\n * a plain `Array` instance.\n *\n * @augments BufferAttribute\n */\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {(Array<number>|Uint8Array)} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\n/**\n * Convenient class that can be used when creating a `UInt8Clamped` buffer attribute with\n * a plain `Array` instance.\n *\n * @augments BufferAttribute\n */\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {(Array<number>|Uint8ClampedArray)} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\n/**\n * Convenient class that can be used when creating a `Int16` buffer attribute with\n * a plain `Array` instance.\n *\n * @augments BufferAttribute\n */\nclass Int16BufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {(Array<number>|Int16Array)} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\n/**\n * Convenient class that can be used when creating a `UInt16` buffer attribute with\n * a plain `Array` instance.\n *\n * @augments BufferAttribute\n */\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {(Array<number>|Uint16Array)} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\n/**\n * Convenient class that can be used when creating a `Int32` buffer attribute with\n * a plain `Array` instance.\n *\n * @augments BufferAttribute\n */\nclass Int32BufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {(Array<number>|Int32Array)} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\n/**\n * Convenient class that can be used when creating a `UInt32` buffer attribute with\n * a plain `Array` instance.\n *\n * @augments BufferAttribute\n */\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {(Array<number>|Uint32Array)} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\n/**\n * Convenient class that can be used when creating a `Float16` buffer attribute with\n * a plain `Array` instance.\n *\n * This class automatically converts to and from FP16 via `Uint16Array` since `Float16Array`\n * browser support is still problematic.\n *\n * @augments BufferAttribute\n */\nclass Float16BufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {(Array<number>|Uint16Array)} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t\tthis.isFloat16BufferAttribute = true;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = fromHalfFloat( this.array[ index * this.itemSize ] );\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = toHalfFloat( x );\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = fromHalfFloat( this.array[ index * this.itemSize + 1 ] );\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = fromHalfFloat( this.array[ index * this.itemSize + 2 ] );\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = fromHalfFloat( this.array[ index * this.itemSize + 3 ] );\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\t\tthis.array[ index + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Convenient class that can be used when creating a `Float32` buffer attribute with\n * a plain `Array` instance.\n *\n * @augments BufferAttribute\n */\nclass Float32BufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new buffer attribute.\n\t *\n\t * @param {(Array<number>|Float32Array)} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nconst _box$3 = /*@__PURE__*/ new Box3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\n\n/**\n * An analytical 3D sphere defined by a center and radius. This class is mainly\n * used as a Bounding Sphere for 3D objects.\n */\nclass Sphere {\n\n\t/**\n\t * Constructs a new sphere.\n\t *\n\t * @param {Vector3} [center=(0,0,0)] - The center of the sphere\n\t * @param {number} [radius=-1] - The radius of the sphere.\n\t */\n\tconstructor( center = new Vector3(), radius = -1 ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSphere = true;\n\n\t\t/**\n\t\t * The center of the sphere\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.center = center;\n\n\t\t/**\n\t\t * The radius of the sphere.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.radius = radius;\n\n\t}\n\n\t/**\n\t * Sets the sphere's components by copying the given values.\n\t *\n\t * @param {Vector3} center - The center.\n\t * @param {number} radius - The radius.\n\t * @return {Sphere} A reference to this sphere.\n\t */\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes the minimum bounding sphere for list of points.\n\t * If the optional center point is given, it is used as the sphere's\n\t * center. Otherwise, the center of the axis-aligned bounding box\n\t * encompassing the points is calculated.\n\t *\n\t * @param {Array<Vector3>} points - A list of points in 3D space.\n\t * @param {Vector3} [optionalCenter] - The center of the sphere.\n\t * @return {Sphere} A reference to this sphere.\n\t */\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$3.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the values of the given sphere to this instance.\n\t *\n\t * @param {Sphere} sphere - The sphere to copy.\n\t * @return {Sphere} A reference to this sphere.\n\t */\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if the sphere is empty (the radius set to a negative number).\n\t *\n\t * Spheres with a radius of `0` contain only their center point and are not\n\t * considered to be empty.\n\t *\n\t * @return {boolean} Whether this sphere is empty or not.\n\t */\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\t/**\n\t * Makes this sphere empty which means in encloses a zero space in 3D.\n\t *\n\t * @return {Sphere} A reference to this sphere.\n\t */\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = -1;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this sphere contains the given point inclusive of\n\t * the surface of the sphere.\n\t *\n\t * @param {Vector3} point - The point to check.\n\t * @return {boolean} Whether this sphere contains the given point or not.\n\t */\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\t/**\n\t * Returns the closest distance from the boundary of the sphere to the\n\t * given point. If the sphere contains the point, the distance will\n\t * be negative.\n\t *\n\t * @param {Vector3} point - The point to compute the distance to.\n\t * @return {number} The distance to the point.\n\t */\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\t/**\n\t * Returns `true` if this sphere intersects with the given one.\n\t *\n\t * @param {Sphere} sphere - The sphere to test.\n\t * @return {boolean} Whether this sphere intersects with the given one or not.\n\t */\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\t/**\n\t * Returns `true` if this sphere intersects with the given box.\n\t *\n\t * @param {Box3} box - The box to test.\n\t * @return {boolean} Whether this sphere intersects with the given box or not.\n\t */\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\t/**\n\t * Returns `true` if this sphere intersects with the given plane.\n\t *\n\t * @param {Plane} plane - The plane to test.\n\t * @return {boolean} Whether this sphere intersects with the given plane or not.\n\t */\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\t/**\n\t * Clamps a point within the sphere. If the point is outside the sphere, it\n\t * will clamp it to the closest point on the edge of the sphere. Points\n\t * already inside the sphere will not be affected.\n\t *\n\t * @param {Vector3} point - The plane to clamp.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The clamped point.\n\t */\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Returns a bounding box that encloses this sphere.\n\t *\n\t * @param {Box3} target - The target box that is used to store the method's result.\n\t * @return {Box3} The bounding box that encloses this sphere.\n\t */\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Transforms this sphere with the given 4x4 transformation matrix.\n\t *\n\t * @param {Matrix4} matrix - The transformation matrix.\n\t * @return {Sphere} A reference to this sphere.\n\t */\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Translates the sphere's center by the given offset.\n\t *\n\t * @param {Vector3} offset - The offset.\n\t * @return {Sphere} A reference to this sphere.\n\t */\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Expands the boundaries of this sphere to include the given point.\n\t *\n\t * @param {Vector3} point - The point to include.\n\t * @return {Sphere} A reference to this sphere.\n\t */\n\texpandByPoint( point ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.center.copy( point );\n\n\t\t\tthis.radius = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_v1$3.subVectors( point, this.center );\n\n\t\tconst lengthSq = _v1$3.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t// calculate the minimal sphere\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\n\t\t\tconst delta = ( length - this.radius ) * 0.5;\n\n\t\t\tthis.center.addScaledVector( _v1$3, delta / length );\n\n\t\t\tthis.radius += delta;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Expands this sphere to enclose both the original sphere and the given sphere.\n\t *\n\t * @param {Sphere} sphere - The sphere to include.\n\t * @return {Sphere} A reference to this sphere.\n\t */\n\tunion( sphere ) {\n\n\t\tif ( sphere.isEmpty() ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.copy( sphere );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t this.radius = Math.max( this.radius, sphere.radius );\n\n\t\t} else {\n\n\t\t\t_v2$2.subVectors( sphere.center, this.center ).setLength( sphere.radius );\n\n\t\t\tthis.expandByPoint( _v1$3.copy( sphere.center ).add( _v2$2 ) );\n\n\t\t\tthis.expandByPoint( _v1$3.copy( sphere.center ).sub( _v2$2 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this sphere is equal with the given one.\n\t *\n\t * @param {Sphere} sphere - The sphere to test for equality.\n\t * @return {boolean} Whether this bounding sphere is equal with the given one.\n\t */\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\t/**\n\t * Returns a new sphere with copied values from this instance.\n\t *\n\t * @return {Sphere} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Returns a serialized structure of the bounding sphere.\n\t *\n\t * @return {Object} Serialized structure with fields representing the object state.\n\t */\n\ttoJSON() {\n\n\t\treturn {\n\t\t\tradius: this.radius,\n\t\t\tcenter: this.center.toArray()\n\t\t};\n\n\t}\n\n\t/**\n\t * Returns a serialized structure of the bounding sphere.\n\t *\n\t * @param {Object} json - The serialized json to set the sphere from.\n\t * @return {Sphere} A reference to this bounding sphere.\n\t */\n\tfromJSON( json ) {\n\n\t\tthis.radius = json.radius;\n\t\tthis.center.fromArray( json.center );\n\t\treturn this;\n\n\t}\n\n}\n\nlet _id$1 = 0;\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$9 = /*@__PURE__*/ new Vector3();\n\n/**\n * A representation of mesh, line, or point geometry. Includes vertex\n * positions, face indices, normals, colors, UVs, and custom attributes\n * within buffers, reducing the cost of passing all this data to the GPU.\n *\n * ```js\n * const geometry = new THREE.BufferGeometry();\n * // create a simple square shape. We duplicate the top left and bottom right\n * // vertices because each vertex needs to appear once per triangle.\n * const vertices = new Float32Array( [\n * \t-1.0, -1.0,  1.0, // v0\n * \t 1.0, -1.0,  1.0, // v1\n * \t 1.0,  1.0,  1.0, // v2\n *\n * \t 1.0,  1.0,  1.0, // v3\n * \t-1.0,  1.0,  1.0, // v4\n * \t-1.0, -1.0,  1.0  // v5\n * ] );\n * // itemSize = 3 because there are 3 values (components) per vertex\n * geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );\n * const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );\n * const mesh = new THREE.Mesh( geometry, material );\n * ```\n *\n * @augments EventDispatcher\n */\nclass BufferGeometry extends EventDispatcher {\n\n\t/**\n\t * Constructs a new geometry.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBufferGeometry = true;\n\n\t\t/**\n\t\t * The ID of the geometry.\n\t\t *\n\t\t * @name BufferGeometry#id\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tObject.defineProperty( this, 'id', { value: _id$1 ++ } );\n\n\t\t/**\n\t\t * The UUID of the geometry.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.uuid = generateUUID();\n\n\t\t/**\n\t\t * The name of the geometry.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\t/**\n\t\t * Allows for vertices to be re-used across multiple triangles; this is\n\t\t * called using \"indexed triangles\". Each triangle is associated with the\n\t\t * indices of three vertices. This attribute therefore stores the index of\n\t\t * each vertex for each triangular face. If this attribute is not set, the\n\t\t * renderer assumes that each three contiguous positions represent a single triangle.\n\t\t *\n\t\t * @type {?BufferAttribute}\n\t\t * @default null\n\t\t */\n\t\tthis.index = null;\n\n\t\t/**\n\t\t * A (storage) buffer attribute which was generated with a compute shader and\n\t\t * now defines indirect draw calls.\n\t\t *\n\t\t * Can only be used with {@link WebGPURenderer} and a WebGPU backend.\n\t\t *\n\t\t * @type {?BufferAttribute}\n\t\t * @default null\n\t\t */\n\t\tthis.indirect = null;\n\n\t\t/**\n\t\t * The offset, in bytes, into the indirect drawing buffer where the value data begins. If an array is provided, multiple indirect draw calls will be made for each offset.\n\t\t *\n\t\t * Can only be used with {@link WebGPURenderer} and a WebGPU backend.\n\t\t *\n\t\t * @type {number|Array<number>}\n\t\t * @default 0\n\t\t */\n\t\tthis.indirectOffset = 0;\n\n\t\t/**\n\t\t * This dictionary has as id the name of the attribute to be set and as value\n\t\t * the buffer attribute to set it to. Rather than accessing this property directly,\n\t\t * use `setAttribute()` and `getAttribute()` to access attributes of this geometry.\n\t\t *\n\t\t * @type {Object<string,(BufferAttribute|InterleavedBufferAttribute)>}\n\t\t */\n\t\tthis.attributes = {};\n\n\t\t/**\n\t\t * This dictionary holds the morph targets of the geometry.\n\t\t *\n\t\t * Note: Once the geometry has been rendered, the morph attribute data cannot\n\t\t * be changed. You will have to call `dispose()`, and create a new geometry instance.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.morphAttributes = {};\n\n\t\t/**\n\t\t * Used to control the morph target behavior; when set to `true`, the morph\n\t\t * target data is treated as relative offsets, rather than as absolute\n\t\t * positions/normals.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.morphTargetsRelative = false;\n\n\t\t/**\n\t\t * Split the geometry into groups, each of which will be rendered in a\n\t\t * separate draw call. This allows an array of materials to be used with the geometry.\n\t\t *\n\t\t * Use `addGroup()` and `clearGroups()` to edit groups, rather than modifying this array directly.\n\t\t *\n\t\t * Every vertex and index must belong to exactly one group — groups must not share vertices or\n\t\t * indices, and must not leave vertices or indices unused.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.groups = [];\n\n\t\t/**\n\t\t * Bounding box for the geometry which can be calculated with `computeBoundingBox()`.\n\t\t *\n\t\t * @type {?Box3}\n\t\t * @default null\n\t\t */\n\t\tthis.boundingBox = null;\n\n\t\t/**\n\t\t * Bounding sphere for the geometry which can be calculated with `computeBoundingSphere()`.\n\t\t *\n\t\t * @type {?Sphere}\n\t\t * @default null\n\t\t */\n\t\tthis.boundingSphere = null;\n\n\t\t/**\n\t\t * Determines the part of the geometry to render. This should not be set directly,\n\t\t * instead use `setDrawRange()`.\n\t\t *\n\t\t * @type {{start:number,count:number}}\n\t\t */\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\t/**\n\t\t * An object that can be used to store custom data about the geometry.\n\t\t * It should not hold references to functions as these will not be cloned.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.userData = {};\n\n\t}\n\n\t/**\n\t * Returns the index of this geometry.\n\t *\n\t * @return {?BufferAttribute} The index. Returns `null` if no index is defined.\n\t */\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\t/**\n\t * Sets the given index to this geometry.\n\t *\n\t * @param {Array<number>|BufferAttribute} index - The index to set.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given indirect attribute to this geometry.\n\t *\n\t * @param {BufferAttribute} indirect - The attribute holding indirect draw calls.\n\t * @param {number|Array<number>} [indirectOffset=0] - The offset, in bytes, into the indirect drawing buffer where the value data begins. If an array is provided, multiple indirect draw calls will be made for each offset.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tsetIndirect( indirect, indirectOffset = 0 ) {\n\n\t\tthis.indirect = indirect;\n\t\tthis.indirectOffset = indirectOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the indirect attribute of this geometry.\n\t *\n\t * @return {?BufferAttribute} The indirect attribute. Returns `null` if no indirect attribute is defined.\n\t */\n\tgetIndirect() {\n\n\t\treturn this.indirect;\n\n\t}\n\n\t/**\n\t * Returns the buffer attribute for the given name.\n\t *\n\t * @param {string} name - The attribute name.\n\t * @return {BufferAttribute|InterleavedBufferAttribute|undefined} The buffer attribute.\n\t * Returns `undefined` if not attribute has been found.\n\t */\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\t/**\n\t * Sets the given attribute for the given name.\n\t *\n\t * @param {string} name - The attribute name.\n\t * @param {BufferAttribute|InterleavedBufferAttribute} attribute - The attribute to set.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Deletes the attribute for the given name.\n\t *\n\t * @param {string} name - The attribute name to delete.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this geometry has an attribute for the given name.\n\t *\n\t * @param {string} name - The attribute name.\n\t * @return {boolean} Whether this geometry has an attribute for the given name or not.\n\t */\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\t/**\n\t * Adds a group to this geometry.\n\t *\n\t * @param {number} start - The first element in this draw call. That is the first\n\t * vertex for non-indexed geometry, otherwise the first triangle index.\n\t * @param {number} count - Specifies how many vertices (or indices) are part of this group.\n\t * @param {number} [materialIndex=0] - The material array index to use.\n\t */\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Clears all groups.\n\t */\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\t/**\n\t * Sets the draw range for this geometry.\n\t *\n\t * @param {number} start - The first vertex for non-indexed geometry, otherwise the first triangle index.\n\t * @param {number} count - For non-indexed BufferGeometry, `count` is the number of vertices to render.\n\t * For indexed BufferGeometry, `count` is the number of indices to render.\n\t */\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\t/**\n\t * Applies the given 4x4 transformation matrix to the geometry.\n\t *\n\t * @param {Matrix4} matrix - The matrix to apply.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the rotation represented by the Quaternion to the geometry.\n\t *\n\t * @param {Quaternion} q - The Quaternion to apply.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tapplyQuaternion( q ) {\n\n\t\t_m1.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Rotates the geometry about the X axis. This is typically done as a one time\n\t * operation, and not during a loop. Use {@link Object3D#rotation} for typical\n\t * real-time mesh rotation.\n\t *\n\t * @param {number} angle - The angle in radians.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Rotates the geometry about the Y axis. This is typically done as a one time\n\t * operation, and not during a loop. Use {@link Object3D#rotation} for typical\n\t * real-time mesh rotation.\n\t *\n\t * @param {number} angle - The angle in radians.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Rotates the geometry about the Z axis. This is typically done as a one time\n\t * operation, and not during a loop. Use {@link Object3D#rotation} for typical\n\t * real-time mesh rotation.\n\t *\n\t * @param {number} angle - The angle in radians.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Translates the geometry. This is typically done as a one time\n\t * operation, and not during a loop. Use {@link Object3D#position} for typical\n\t * real-time mesh rotation.\n\t *\n\t * @param {number} x - The x offset.\n\t * @param {number} y - The y offset.\n\t * @param {number} z - The z offset.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Scales the geometry. This is typically done as a one time\n\t * operation, and not during a loop. Use {@link Object3D#scale} for typical\n\t * real-time mesh rotation.\n\t *\n\t * @param {number} x - The x scale.\n\t * @param {number} y - The y scale.\n\t * @param {number} z - The z scale.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Rotates the geometry to face a point in 3D space. This is typically done as a one time\n\t * operation, and not during a loop. Use {@link Object3D#lookAt} for typical\n\t * real-time mesh rotation.\n\t *\n\t * @param {Vector3} vector - The target point.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Center the geometry based on its bounding box.\n\t *\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Defines a geometry by creating a `position` attribute based on the given array of points. The array\n\t * can hold 2D or 3D vectors. When using two-dimensional data, the `z` coordinate for all vertices is\n\t * set to `0`.\n\t *\n\t * If the method is used with an existing `position` attribute, the vertex data are overwritten with the\n\t * data from the array. The length of the array must match the vertex count.\n\t *\n\t * @param {Array<Vector2>|Array<Vector3>} points - The points.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tsetFromPoints( points ) {\n\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute === undefined ) {\n\n\t\t\tconst position = [];\n\n\t\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tconst point = points[ i ];\n\t\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\t} else {\n\n\t\t\tconst l = Math.min( points.length, positionAttribute.count ); // make sure data do not exceed buffer size\n\n\t\t\tfor ( let i = 0; i < l; i ++ ) {\n\n\t\t\t\tconst point = points[ i ];\n\t\t\t\tpositionAttribute.setXYZ( i, point.x, point.y, point.z || 0 );\n\n\t\t\t}\n\n\t\t\tif ( points.length > positionAttribute.count ) {\n\n\t\t\t\twarn( 'BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry.' );\n\n\t\t\t}\n\n\t\t\tpositionAttribute.needsUpdate = true;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes the bounding box of the geometry, and updates the `boundingBox` member.\n\t * The bounding box is not computed by the engine; it must be computed by your app.\n\t * You may need to recompute the bounding box if the geometry vertices are modified.\n\t */\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\terror( 'BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$9.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$9 );\n\n\t\t\t\t\t\t_vector$9.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$9 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\terror( 'BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Computes the bounding sphere of the geometry, and updates the `boundingSphere` member.\n\t * The engine automatically computes the bounding sphere when it is needed, e.g., for ray casting or view frustum culling.\n\t * You may need to recompute the bounding sphere if the geometry vertices are modified.\n\t */\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\terror( 'BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$9.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$9 );\n\n\t\t\t\t\t\t_vector$9.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$9 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$9 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$9.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$9.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$9 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\terror( 'BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Calculates and adds a tangent attribute to this geometry.\n\t *\n\t * The computation is only supported for indexed geometries and if position, normal, and uv attributes\n\t * are defined. When using a tangent space normal map, prefer the MikkTSpace algorithm provided by\n\t * {@link BufferGeometryUtils#computeMikkTSpaceTangents} instead.\n\t */\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\terror( 'BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst positionAttribute = attributes.position;\n\t\tconst normalAttribute = attributes.normal;\n\t\tconst uvAttribute = attributes.uv;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * positionAttribute.count ), 4 ) );\n\n\t\t}\n\n\t\tconst tangentAttribute = this.getAttribute( 'tangent' );\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( positionAttribute, a );\n\t\t\tvB.fromBufferAttribute( positionAttribute, b );\n\t\t\tvC.fromBufferAttribute( positionAttribute, c );\n\n\t\t\tuvA.fromBufferAttribute( uvAttribute, a );\n\t\t\tuvB.fromBufferAttribute( uvAttribute, b );\n\t\t\tuvC.fromBufferAttribute( uvAttribute, c );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: index.count\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindex.getX( j + 0 ),\n\t\t\t\t\tindex.getX( j + 1 ),\n\t\t\t\t\tindex.getX( j + 2 )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromBufferAttribute( normalAttribute, v );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? -1 : 1.0;\n\n\t\t\ttangentAttribute.setXYZW( v, tmp.x, tmp.y, tmp.z, w );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( index.getX( j + 0 ) );\n\t\t\t\thandleVertex( index.getX( j + 1 ) );\n\t\t\t\thandleVertex( index.getX( j + 2 ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Computes vertex normals for the given vertex data. For indexed geometries, the method sets\n\t * each vertex normal to be the average of the face normals of the faces that share that vertex.\n\t * For non-indexed geometries, vertices are not shared, and the method sets each vertex normal\n\t * to be the same as the face normal.\n\t */\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Ensures every normal vector in a geometry will have a magnitude of `1`. This will\n\t * correct lighting on the geometry surfaces.\n\t */\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$9.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a new non-index version of this indexed geometry. If the geometry\n\t * is already non-indexed, the method is a NOOP.\n\t *\n\t * @return {BufferGeometry} The non-indexed version of this indexed geometry.\n\t */\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\twarn( 'BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\t/**\n\t * Serializes the geometry into JSON.\n\t *\n\t * @return {Object} A JSON object representing the serialized geometry.\n\t */\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.7,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = boundingSphere.toJSON();\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Returns a new geometry with copied values from this instance.\n\t *\n\t * @return {BufferGeometry} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Copies the values of the given geometry to this instance.\n\t *\n\t * @param {BufferGeometry} source - The geometry to copy.\n\t * @return {BufferGeometry} A reference to this instance.\n\t */\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone() );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t *\n\t * @fires BufferGeometry#dispose\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\n/**\n * \"Interleaved\" means that multiple attributes, possibly of different types,\n * (e.g., position, normal, uv, color) are packed into a single array buffer.\n *\n * An introduction into interleaved arrays can be found here: [Interleaved array basics](https://blog.tojicode.com/2011/05/interleaved-array-basics.html)\n */\nclass InterleavedBuffer {\n\n\t/**\n\t * Constructs a new interleaved buffer.\n\t *\n\t * @param {TypedArray} array - A typed array with a shared buffer storing attribute data.\n\t * @param {number} stride - The number of typed-array elements per vertex.\n\t */\n\tconstructor( array, stride ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isInterleavedBuffer = true;\n\n\t\t/**\n\t\t * A typed array with a shared buffer storing attribute data.\n\t\t *\n\t\t * @type {TypedArray}\n\t\t */\n\t\tthis.array = array;\n\n\t\t/**\n\t\t * The number of typed-array elements per vertex.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.stride = stride;\n\n\t\t/**\n\t\t * The total number of elements in the array\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\t/**\n\t\t * Defines the intended usage pattern of the data store for optimization purposes.\n\t\t *\n\t\t * Note: After the initial use of a buffer, its usage cannot be changed. Instead,\n\t\t * instantiate a new one and set the desired usage before the next render.\n\t\t *\n\t\t * @type {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)}\n\t\t * @default StaticDrawUsage\n\t\t */\n\t\tthis.usage = StaticDrawUsage;\n\n\t\t/**\n\t\t * This can be used to only update some components of stored vectors (for example, just the\n\t\t * component related to color). Use the `addUpdateRange()` function to add ranges to this array.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.updateRanges = [];\n\n\t\t/**\n\t\t * A version number, incremented every time the `needsUpdate` is set to `true`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.version = 0;\n\n\t\t/**\n\t\t * The UUID of the interleaved buffer.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\t/**\n\t * A callback function that is executed after the renderer has transferred the attribute array\n\t * data to the GPU.\n\t */\n\tonUploadCallback() {}\n\n\t/**\n\t * Flag to indicate that this attribute has changed and should be re-sent to\n\t * the GPU. Set this to `true` when you modify the value of the array.\n\t *\n\t * @type {number}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\t/**\n\t * Sets the usage of this interleaved buffer.\n\t *\n\t * @param {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)} value - The usage to set.\n\t * @return {InterleavedBuffer} A reference to this interleaved buffer.\n\t */\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds a range of data in the data array to be updated on the GPU.\n\t *\n\t * @param {number} start - Position at which to start update.\n\t * @param {number} count - The number of components to update.\n\t */\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\t/**\n\t * Clears the update ranges.\n\t */\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\t/**\n\t * Copies the values of the given interleaved buffer to this instance.\n\t *\n\t * @param {InterleavedBuffer} source - The interleaved buffer to copy.\n\t * @return {InterleavedBuffer} A reference to this instance.\n\t */\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies a vector from the given interleaved buffer to this one. The start\n\t * and destination position in the attribute buffers are represented by the\n\t * given indices.\n\t *\n\t * @param {number} index1 - The destination index into this interleaved buffer.\n\t * @param {InterleavedBuffer} interleavedBuffer - The interleaved buffer to copy from.\n\t * @param {number} index2 - The source index into the given interleaved buffer.\n\t * @return {InterleavedBuffer} A reference to this instance.\n\t */\n\tcopyAt( index1, interleavedBuffer, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= interleavedBuffer.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = interleavedBuffer.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given array data in the interleaved buffer.\n\t *\n\t * @param {(TypedArray|Array)} value - The array data to set.\n\t * @param {number} [offset=0] - The offset in this interleaved buffer's array.\n\t * @return {InterleavedBuffer} A reference to this instance.\n\t */\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new interleaved buffer with copied values from this instance.\n\t *\n\t * @param {Object} [data] - An object with shared array buffers that allows to retain shared structures.\n\t * @return {InterleavedBuffer} A clone of this instance.\n\t */\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\t/**\n\t * Sets the given callback function that is executed after the Renderer has transferred\n\t * the array data to the GPU. Can be used to perform clean-up operations after\n\t * the upload when data are not needed anymore on the CPU side.\n\t *\n\t * @param {Function} callback - The `onUpload()` callback.\n\t * @return {InterleavedBuffer} A reference to this instance.\n\t */\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Serializes the interleaved buffer into JSON.\n\t *\n\t * @param {Object} [data] - An optional value holding meta information about the serialization.\n\t * @return {Object} A JSON object representing the serialized interleaved buffer.\n\t */\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\n/**\n * An alternative version of a buffer attribute with interleaved data. Interleaved\n * attributes share a common interleaved data storage ({@link InterleavedBuffer}) and refer with\n * different offsets into the buffer.\n */\nclass InterleavedBufferAttribute {\n\n\t/**\n\t * Constructs a new interleaved buffer attribute.\n\t *\n\t * @param {InterleavedBuffer} interleavedBuffer - The buffer holding the interleaved data.\n\t * @param {number} itemSize - The item size.\n\t * @param {number} offset - The attribute offset into the buffer.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isInterleavedBufferAttribute = true;\n\n\t\t/**\n\t\t * The name of the buffer attribute.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The buffer holding the interleaved data.\n\t\t *\n\t\t * @type {InterleavedBuffer}\n\t\t */\n\t\tthis.data = interleavedBuffer;\n\n\t\t/**\n\t\t * The item size, see {@link BufferAttribute#itemSize}.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.itemSize = itemSize;\n\n\t\t/**\n\t\t * The attribute offset into the buffer.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.offset = offset;\n\n\t\t/**\n\t\t * Whether the data are normalized or not, see {@link BufferAttribute#normalized}\n\t\t *\n\t\t * @type {InterleavedBuffer}\n\t\t */\n\t\tthis.normalized = normalized;\n\n\t}\n\n\t/**\n\t * The item count of this buffer attribute.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\t/**\n\t * The array holding the interleaved buffer attribute data.\n\t *\n\t * @type {TypedArray}\n\t */\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\t/**\n\t * Flag to indicate that this attribute has changed and should be re-sent to\n\t * the GPU. Set this to `true` when you modify the value of the array.\n\t *\n\t * @type {number}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\t/**\n\t * Applies the given 4x4 matrix to the given attribute. Only works with\n\t * item size `3`.\n\t *\n\t * @param {Matrix4} m - The matrix to apply.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( this, i );\n\n\t\t\t_vector$8.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given 3x3 normal matrix to the given attribute. Only works with\n\t * item size `3`.\n\t *\n\t * @param {Matrix3} m - The normal matrix to apply.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( this, i );\n\n\t\t\t_vector$8.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given 4x4 matrix to the given attribute. Only works with\n\t * item size `3` and with direction vectors.\n\t *\n\t * @param {Matrix4} m - The matrix to apply.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( this, i );\n\n\t\t\t_vector$8.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the given component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} component - The component index.\n\t * @return {number} The returned value.\n\t */\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.data.stride + this.offset + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\t/**\n\t * Sets the given value to the given component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} component - The component index.\n\t * @param {number} value - The value to set.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the x component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} x - The value to set.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the y component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} y - The value to set.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the z component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} z - The value to set.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the w component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} w - The value to set.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the x component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @return {number} The x component.\n\t */\n\tgetX( index ) {\n\n\t\tlet x = this.data.array[ index * this.data.stride + this.offset ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\t/**\n\t * Returns the y component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @return {number} The y component.\n\t */\n\tgetY( index ) {\n\n\t\tlet y = this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\t/**\n\t * Returns the z component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @return {number} The z component.\n\t */\n\tgetZ( index ) {\n\n\t\tlet z = this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\t/**\n\t * Returns the w component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @return {number} The w component.\n\t */\n\tgetW( index ) {\n\n\t\tlet w = this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\t/**\n\t * Sets the x and y component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} x - The value for the x component to set.\n\t * @param {number} y - The value for the y component to set.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the x, y and z component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} x - The value for the x component to set.\n\t * @param {number} y - The value for the y component to set.\n\t * @param {number} z - The value for the z component to set.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the x, y, z and w component of the vector at the given index.\n\t *\n\t * @param {number} index - The index into the buffer attribute.\n\t * @param {number} x - The value for the x component to set.\n\t * @param {number} y - The value for the y component to set.\n\t * @param {number} z - The value for the z component to set.\n\t * @param {number} w - The value for the w component to set.\n\t * @return {InterleavedBufferAttribute} A reference to this instance.\n\t */\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new buffer attribute with copied values from this instance.\n\t *\n\t * If no parameter is provided, cloning an interleaved buffer attribute will de-interleave buffer data.\n\t *\n\t * @param {Object} [data] - An object with interleaved buffers that allows to retain the interleaved property.\n\t * @return {BufferAttribute|InterleavedBufferAttribute} A clone of this instance.\n\t */\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tlog( 'InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Serializes the buffer attribute into JSON.\n\t *\n\t * If no parameter is provided, cloning an interleaved buffer attribute will de-interleave buffer data.\n\t *\n\t * @param {Object} [data] - An optional value holding meta information about the serialization.\n\t * @return {Object} A JSON object representing the serialized buffer attribute.\n\t */\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tlog( 'InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// de-interleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interleaved attribute\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nlet _materialId = 0;\n\n/**\n * Abstract base class for materials.\n *\n * Materials define the appearance of renderable 3D objects.\n *\n * @abstract\n * @augments EventDispatcher\n */\nclass Material extends EventDispatcher {\n\n\t/**\n\t * Constructs a new material.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMaterial = true;\n\n\t\t/**\n\t\t * The ID of the material.\n\t\t *\n\t\t * @name Material#id\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tObject.defineProperty( this, 'id', { value: _materialId ++ } );\n\n\t\t/**\n\t\t * The UUID of the material.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.uuid = generateUUID();\n\n\t\t/**\n\t\t * The name of the material.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The type property is used for detecting the object type\n\t\t * in context of serialization/deserialization.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.type = 'Material';\n\n\t\t/**\n\t\t * Defines the blending type of the material.\n\t\t *\n\t\t * It must be set to `CustomBlending` if custom blending properties like\n\t\t * {@link Material#blendSrc}, {@link Material#blendDst} or {@link Material#blendEquation}\n\t\t * should have any effect.\n\t\t *\n\t\t * @type {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending)}\n\t\t * @default NormalBlending\n\t\t */\n\t\tthis.blending = NormalBlending;\n\n\t\t/**\n\t\t * Defines which side of faces will be rendered - front, back or both.\n\t\t *\n\t\t * @type {(FrontSide|BackSide|DoubleSide)}\n\t\t * @default FrontSide\n\t\t */\n\t\tthis.side = FrontSide;\n\n\t\t/**\n\t\t * If set to `true`, vertex colors should be used.\n\t\t *\n\t\t * The engine supports RGB and RGBA vertex colors depending on whether a three (RGB) or\n\t\t * four (RGBA) component color buffer attribute is used.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.vertexColors = false;\n\n\t\t/**\n\t\t * Defines how transparent the material is.\n\t\t * A value of `0.0` indicates fully transparent, `1.0` is fully opaque.\n\t\t *\n\t\t * If the {@link Material#transparent} is not set to `true`,\n\t\t * the material will remain fully opaque and this value will only affect its color.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.opacity = 1;\n\n\t\t/**\n\t\t * Defines whether this material is transparent. This has an effect on\n\t\t * rendering as transparent objects need special treatment and are rendered\n\t\t * after non-transparent objects.\n\t\t *\n\t\t * When set to true, the extent to which the material is transparent is\n\t\t * controlled by {@link Material#opacity}.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.transparent = false;\n\n\t\t/**\n\t\t * Enables alpha hashed transparency, an alternative to {@link Material#transparent} or\n\t\t * {@link Material#alphaTest}. The material will not be rendered if opacity is lower than\n\t\t * a random threshold. Randomization introduces some grain or noise, but approximates alpha\n\t\t * blending without the associated problems of sorting. Using TAA can reduce the resulting noise.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.alphaHash = false;\n\n\t\t/**\n\t\t * Defines the blending source factor.\n\t\t *\n\t\t * @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}\n\t\t * @default SrcAlphaFactor\n\t\t */\n\t\tthis.blendSrc = SrcAlphaFactor;\n\n\t\t/**\n\t\t * Defines the blending destination factor.\n\t\t *\n\t\t * @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}\n\t\t * @default OneMinusSrcAlphaFactor\n\t\t */\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\n\t\t/**\n\t\t * Defines the blending equation.\n\t\t *\n\t\t * @type {(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}\n\t\t * @default AddEquation\n\t\t */\n\t\tthis.blendEquation = AddEquation;\n\n\t\t/**\n\t\t * Defines the blending source alpha factor.\n\t\t *\n\t\t * @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}\n\t\t * @default null\n\t\t */\n\t\tthis.blendSrcAlpha = null;\n\n\t\t/**\n\t\t * Defines the blending destination alpha factor.\n\t\t *\n\t\t * @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}\n\t\t * @default null\n\t\t */\n\t\tthis.blendDstAlpha = null;\n\n\t\t/**\n\t\t * Defines the blending equation of the alpha channel.\n\t\t *\n\t\t * @type {?(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}\n\t\t * @default null\n\t\t */\n\t\tthis.blendEquationAlpha = null;\n\n\t\t/**\n\t\t * Represents the RGB values of the constant blend color.\n\t\t *\n\t\t * This property has only an effect when using custom blending with `ConstantColor` or `OneMinusConstantColor`.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.blendColor = new Color( 0, 0, 0 );\n\n\t\t/**\n\t\t * Represents the alpha value of the constant blend color.\n\t\t *\n\t\t * This property has only an effect when using custom blending with `ConstantAlpha` or `OneMinusConstantAlpha`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.blendAlpha = 0;\n\n\t\t/**\n\t\t * Defines the depth function.\n\t\t *\n\t\t * @type {(NeverDepth|AlwaysDepth|LessDepth|LessEqualDepth|EqualDepth|GreaterEqualDepth|GreaterDepth|NotEqualDepth)}\n\t\t * @default LessEqualDepth\n\t\t */\n\t\tthis.depthFunc = LessEqualDepth;\n\n\t\t/**\n\t\t * Whether to have depth test enabled when rendering this material.\n\t\t * When the depth test is disabled, the depth write will also be implicitly disabled.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.depthTest = true;\n\n\t\t/**\n\t\t * Whether rendering this material has any effect on the depth buffer.\n\t\t *\n\t\t * When drawing 2D overlays it can be useful to disable the depth writing in\n\t\t * order to layer several things together without creating z-index artifacts.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.depthWrite = true;\n\n\t\t/**\n\t\t * The bit mask to use when writing to the stencil buffer.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0xff\n\t\t */\n\t\tthis.stencilWriteMask = 0xff;\n\n\t\t/**\n\t\t * The stencil comparison function to use.\n\t\t *\n\t\t * @type {NeverStencilFunc|LessStencilFunc|EqualStencilFunc|LessEqualStencilFunc|GreaterStencilFunc|NotEqualStencilFunc|GreaterEqualStencilFunc|AlwaysStencilFunc}\n\t\t * @default AlwaysStencilFunc\n\t\t */\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\n\t\t/**\n\t\t * The value to use when performing stencil comparisons or stencil operations.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.stencilRef = 0;\n\n\t\t/**\n\t\t * The bit mask to use when comparing against the stencil buffer.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0xff\n\t\t */\n\t\tthis.stencilFuncMask = 0xff;\n\n\t\t/**\n\t\t * Which stencil operation to perform when the comparison function returns `false`.\n\t\t *\n\t\t * @type {ZeroStencilOp|KeepStencilOp|ReplaceStencilOp|IncrementStencilOp|DecrementStencilOp|IncrementWrapStencilOp|DecrementWrapStencilOp|InvertStencilOp}\n\t\t * @default KeepStencilOp\n\t\t */\n\t\tthis.stencilFail = KeepStencilOp;\n\n\t\t/**\n\t\t * Which stencil operation to perform when the comparison function returns\n\t\t * `true` but the depth test fails.\n\t\t *\n\t\t * @type {ZeroStencilOp|KeepStencilOp|ReplaceStencilOp|IncrementStencilOp|DecrementStencilOp|IncrementWrapStencilOp|DecrementWrapStencilOp|InvertStencilOp}\n\t\t * @default KeepStencilOp\n\t\t */\n\t\tthis.stencilZFail = KeepStencilOp;\n\n\t\t/**\n\t\t * Which stencil operation to perform when the comparison function returns\n\t\t * `true` and the depth test passes.\n\t\t *\n\t\t * @type {ZeroStencilOp|KeepStencilOp|ReplaceStencilOp|IncrementStencilOp|DecrementStencilOp|IncrementWrapStencilOp|DecrementWrapStencilOp|InvertStencilOp}\n\t\t * @default KeepStencilOp\n\t\t */\n\t\tthis.stencilZPass = KeepStencilOp;\n\n\t\t/**\n\t\t * Whether stencil operations are performed against the stencil buffer. In\n\t\t * order to perform writes or comparisons against the stencil buffer this\n\t\t * value must be `true`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.stencilWrite = false;\n\n\t\t/**\n\t\t * User-defined clipping planes specified as THREE.Plane objects in world\n\t\t * space. These planes apply to the objects this material is attached to.\n\t\t * Points in space whose signed distance to the plane is negative are clipped\n\t\t * (not rendered). This requires {@link WebGLRenderer#localClippingEnabled} to\n\t\t * be `true`.\n\t\t *\n\t\t * @type {?Array<Plane>}\n\t\t * @default null\n\t\t */\n\t\tthis.clippingPlanes = null;\n\n\t\t/**\n\t\t * Changes the behavior of clipping planes so that only their intersection is\n\t\t * clipped, rather than their union.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clipIntersection = false;\n\n\t\t/**\n\t\t * Defines whether to clip shadows according to the clipping planes specified\n\t\t * on this material.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clipShadows = false;\n\n\t\t/**\n\t\t * Defines which side of faces cast shadows. If `null`, the side casting shadows\n\t\t * is determined as follows:\n\t\t *\n\t\t * - When {@link Material#side} is set to `FrontSide`, the back side cast shadows.\n\t\t * - When {@link Material#side} is set to `BackSide`, the front side cast shadows.\n\t\t * - When {@link Material#side} is set to `DoubleSide`, both sides cast shadows.\n\t\t *\n\t\t * @type {?(FrontSide|BackSide|DoubleSide)}\n\t\t * @default null\n\t\t */\n\t\tthis.shadowSide = null;\n\n\t\t/**\n\t\t * Whether to render the material's color.\n\t\t *\n\t\t * This can be used in conjunction with {@link Object3D#renderOder} to create invisible\n\t\t * objects that occlude other objects.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.colorWrite = true;\n\n\t\t/**\n\t\t * Override the renderer's default precision for this material.\n\t\t *\n\t\t * @type {?('highp'|'mediump'|'lowp')}\n\t\t * @default null\n\t\t */\n\t\tthis.precision = null;\n\n\t\t/**\n\t\t * Whether to use polygon offset or not. When enabled, each fragment's depth value will\n\t\t * be offset after it is interpolated from the depth values of the appropriate vertices.\n\t\t * The offset is added before the depth test is performed and before the value is written\n\t\t * into the depth buffer.\n\t\t *\n\t\t * Can be useful for rendering hidden-line images, for applying decals to surfaces, and for\n\t\t * rendering solids with highlighted edges.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.polygonOffset = false;\n\n\t\t/**\n\t\t * Specifies a scale factor that is used to create a variable depth offset for each polygon.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.polygonOffsetFactor = 0;\n\n\t\t/**\n\t\t * Is multiplied by an implementation-specific value to create a constant depth offset.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\t/**\n\t\t * Whether to apply dithering to the color to remove the appearance of banding.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.dithering = false;\n\n\t\t/**\n\t\t * Whether alpha to coverage should be enabled or not. Can only be used with MSAA-enabled contexts\n\t\t * (meaning when the renderer was created with *antialias* parameter set to `true`). Enabling this\n\t\t * will smooth aliasing on clip plane edges and alphaTest-clipped edges.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.alphaToCoverage = false;\n\n\t\t/**\n\t\t * Whether to premultiply the alpha (transparency) value.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.premultipliedAlpha = false;\n\n\t\t/**\n\t\t * Whether double-sided, transparent objects should be rendered with a single pass or not.\n\t\t *\n\t\t * The engine renders double-sided, transparent objects with two draw calls (back faces first,\n\t\t * then front faces) to mitigate transparency artifacts. There are scenarios however where this\n\t\t * approach produces no quality gains but still doubles draw calls e.g. when rendering flat\n\t\t * vegetation like grass sprites. In these cases, set the `forceSinglePass` flag to `true` to\n\t\t * disable the two pass rendering to avoid performance issues.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.forceSinglePass = false;\n\n\t\t/**\n\t\t * Whether it's possible to override the material with {@link Scene#overrideMaterial} or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.allowOverride = true;\n\n\t\t/**\n\t\t * Defines whether 3D objects using this material are visible.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.visible = true;\n\n\t\t/**\n\t\t * Defines whether this material is tone mapped according to the renderer's tone mapping setting.\n\t\t *\n\t\t * It is ignored when rendering to a render target or using post processing or when using\n\t\t * `WebGPURenderer`. In all these cases, all materials are honored by tone mapping.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.toneMapped = true;\n\n\t\t/**\n\t\t * An object that can be used to store custom data about the Material. It\n\t\t * should not hold references to functions as these will not be cloned.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.userData = {};\n\n\t\t/**\n\t\t * This starts at `0` and counts how many times {@link Material#needsUpdate} is set to `true`.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default 0\n\t\t */\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\t/**\n\t * Sets the alpha value to be used when running an alpha test. The material\n\t * will not be rendered if the opacity is lower than this value.\n\t *\n\t * @type {number}\n\t * @readonly\n\t * @default 0\n\t */\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\t/**\n\t * An optional callback that is executed immediately before the material is used to render a 3D object.\n\t *\n\t * This method can only be used when rendering with {@link WebGLRenderer}.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {Scene} scene - The scene.\n\t * @param {Camera} camera - The camera that is used to render the scene.\n\t * @param {BufferGeometry} geometry - The 3D object's geometry.\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Object} group - The geometry group data.\n\t */\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}\n\n\t/**\n\t * An optional callback that is executed immediately before the shader\n\t * program is compiled. This function is called with the shader source code\n\t * as a parameter. Useful for the modification of built-in materials.\n\t *\n\t * This method can only be used when rendering with {@link WebGLRenderer}. The\n\t * recommended approach when customizing materials is to use `WebGPURenderer` with the new\n\t * Node Material system and [TSL](https://github.com/mrdoob/three.js/wiki/Three.js-Shading-Language).\n\t *\n\t * @param {{vertexShader:string,fragmentShader:string,uniforms:Object}} shaderobject - The object holds the uniforms and the vertex and fragment shader source.\n\t * @param {WebGLRenderer} renderer - A reference to the renderer.\n\t */\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\t/**\n\t * In case {@link Material#onBeforeCompile} is used, this callback can be used to identify\n\t * values of settings used in `onBeforeCompile()`, so three.js can reuse a cached\n\t * shader or recompile the shader for this material as needed.\n\t *\n\t * This method can only be used when rendering with {@link WebGLRenderer}.\n\t *\n\t * @return {string} The custom program cache key.\n\t */\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\t/**\n\t * This method can be used to set default values from parameter objects.\n\t * It is a generic implementation so it can be used with different types\n\t * of materials.\n\t *\n\t * @param {Object} [values] - The material values to set.\n\t */\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\twarn( `Material: parameter '${ key }' has value of undefined.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\twarn( `Material: '${ key }' is not a property of THREE.${ this.type }.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Serializes the material into JSON.\n\t *\n\t * @param {?(Object|string)} meta - An optional value holding meta information about the serialization.\n\t * @return {Object} A JSON object representing the serialized material.\n\t * @see {@link ObjectLoader#parse}\n\t */\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.7,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== undefined && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.sheenColorMap && this.sheenColorMap.isTexture ) {\n\n\t\t\tdata.sheenColorMap = this.sheenColorMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.sheenRoughnessMap && this.sheenRoughnessMap.isTexture ) {\n\n\t\t\tdata.sheenRoughnessMap = this.sheenRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.dispersion !== undefined ) data.dispersion = this.dispersion;\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.anisotropy !== undefined ) data.anisotropy = this.anisotropy;\n\t\tif ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;\n\n\t\tif ( this.anisotropyMap && this.anisotropyMap.isTexture ) {\n\n\t\t\tdata.anisotropyMap = this.anisotropyMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapRotation !== undefined ) data.envMapRotation = this.envMapRotation.toArray();\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors === true ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = true;\n\n\t\tif ( this.blendSrc !== SrcAlphaFactor ) data.blendSrc = this.blendSrc;\n\t\tif ( this.blendDst !== OneMinusSrcAlphaFactor ) data.blendDst = this.blendDst;\n\t\tif ( this.blendEquation !== AddEquation ) data.blendEquation = this.blendEquation;\n\t\tif ( this.blendSrcAlpha !== null ) data.blendSrcAlpha = this.blendSrcAlpha;\n\t\tif ( this.blendDstAlpha !== null ) data.blendDstAlpha = this.blendDstAlpha;\n\t\tif ( this.blendEquationAlpha !== null ) data.blendEquationAlpha = this.blendEquationAlpha;\n\t\tif ( this.blendColor && this.blendColor.isColor ) data.blendColor = this.blendColor.getHex();\n\t\tif ( this.blendAlpha !== 0 ) data.blendAlpha = this.blendAlpha;\n\n\t\tif ( this.depthFunc !== LessEqualDepth ) data.depthFunc = this.depthFunc;\n\t\tif ( this.depthTest === false ) data.depthTest = this.depthTest;\n\t\tif ( this.depthWrite === false ) data.depthWrite = this.depthWrite;\n\t\tif ( this.colorWrite === false ) data.colorWrite = this.colorWrite;\n\n\t\tif ( this.stencilWriteMask !== 0xff ) data.stencilWriteMask = this.stencilWriteMask;\n\t\tif ( this.stencilFunc !== AlwaysStencilFunc ) data.stencilFunc = this.stencilFunc;\n\t\tif ( this.stencilRef !== 0 ) data.stencilRef = this.stencilRef;\n\t\tif ( this.stencilFuncMask !== 0xff ) data.stencilFuncMask = this.stencilFuncMask;\n\t\tif ( this.stencilFail !== KeepStencilOp ) data.stencilFail = this.stencilFail;\n\t\tif ( this.stencilZFail !== KeepStencilOp ) data.stencilZFail = this.stencilZFail;\n\t\tif ( this.stencilZPass !== KeepStencilOp ) data.stencilZPass = this.stencilZPass;\n\t\tif ( this.stencilWrite === true ) data.stencilWrite = this.stencilWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaHash === true ) data.alphaHash = true;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = true;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;\n\t\tif ( this.forceSinglePass === true ) data.forceSinglePass = true;\n\t\tif ( this.allowOverride === false ) data.allowOverride = false;\n\n\t\tif ( this.wireframe === true ) data.wireframe = true;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Returns a new material with copied values from this instance.\n\t *\n\t * @return {Material} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Copies the values of the given material to this instance.\n\t *\n\t * @param {Material} source - The material to copy.\n\t * @return {Material} A reference to this instance.\n\t */\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\t\tthis.blendColor.copy( source.blendColor );\n\t\tthis.blendAlpha = source.blendAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaHash = source.alphaHash;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\t\tthis.forceSinglePass = source.forceSinglePass;\n\t\tthis.allowOverride = source.allowOverride;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t *\n\t * @fires Material#dispose\n\t */\n\tdispose() {\n\n\t\t/**\n\t\t * Fires when the material has been disposed of.\n\t\t *\n\t\t * @event Material#dispose\n\t\t * @type {Object}\n\t\t */\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\t/**\n\t * Setting this property to `true` indicates the engine the material\n\t * needs to be recompiled.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\n/**\n * A material for rendering instances of {@link Sprite}.\n *\n * ```js\n * const map = new THREE.TextureLoader().load( 'textures/sprite.png' );\n * const material = new THREE.SpriteMaterial( { map: map, color: 0xffffff } );\n *\n * const sprite = new THREE.Sprite( material );\n * sprite.scale.set(200, 200, 1)\n * scene.add( sprite );\n * ```\n *\n * @augments Material\n */\nclass SpriteMaterial extends Material {\n\n\t/**\n\t * Constructs a new sprite material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSpriteMaterial = true;\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.color = new Color( 0xffffff );\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map\n\t\t * color is modulated by the diffuse `color`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * The rotation of the sprite in radians.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.rotation = 0;\n\n\t\t/**\n\t\t * Specifies whether size of the sprite is attenuated by the camera depth (perspective camera only).\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.sizeAttenuation = true;\n\n\t\t/**\n\t\t * Overwritten since sprite materials are transparent\n\t\t * by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.transparent = true;\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\n/**\n * A sprite is a plane that always faces towards the camera, generally with a\n * partially transparent texture applied.\n *\n * Sprites do not cast shadows, setting {@link Object3D#castShadow} to `true` will\n * have no effect.\n *\n * ```js\n * const map = new THREE.TextureLoader().load( 'sprite.png' );\n * const material = new THREE.SpriteMaterial( { map: map } );\n *\n * const sprite = new THREE.Sprite( material );\n * scene.add( sprite );\n * ```\n *\n * @augments Object3D\n */\nclass Sprite extends Object3D {\n\n\t/**\n\t * Constructs a new sprite.\n\t *\n\t * @param {(SpriteMaterial|SpriteNodeMaterial)} [material] - The sprite material.\n\t */\n\tconstructor( material = new SpriteMaterial() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSprite = true;\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t-0.5, -0.5, 0, 0, 0,\n\t\t\t\t0.5, -0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t-0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\t/**\n\t\t * The sprite geometry.\n\t\t *\n\t\t * @type {BufferGeometry}\n\t\t */\n\t\tthis.geometry = _geometry;\n\n\t\t/**\n\t\t * The sprite material.\n\t\t *\n\t\t * @type {(SpriteMaterial|SpriteNodeMaterial)}\n\t\t */\n\t\tthis.material = material;\n\n\t\t/**\n\t\t * The sprite's anchor point, and the point around which the sprite rotates.\n\t\t * A value of `(0.5, 0.5)` corresponds to the midpoint of the sprite. A value\n\t\t * of `(0, 0)` corresponds to the lower left corner of the sprite.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (0.5,0.5)\n\t\t */\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t\t/**\n\t\t * The number of instances of this sprite.\n\t\t * Can only be used with {@link WebGPURenderer}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.count = 1;\n\n\t}\n\n\t/**\n\t * Computes intersection points between a casted ray and this sprite.\n\t *\n\t * @param {Raycaster} raycaster - The raycaster.\n\t * @param {Array<Object>} intersects - The target array that holds the intersection points.\n\t */\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\terror( 'Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA$1.set( -0.5, -0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB$1.set( 0.5, -0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB$1.set( -0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getInterpolation( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\n/**\n * A component for providing a basic Level of Detail (LOD) mechanism.\n *\n * Every LOD level is associated with an object, and rendering can be switched\n * between them at the distances specified. Typically you would create, say,\n * three meshes, one for far away (low detail), one for mid range (medium\n * detail) and one for close up (high detail).\n *\n * ```js\n * const lod = new THREE.LOD();\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n *\n * //Create spheres with 3 levels of detail and create new LOD levels for them\n * for( let i = 0; i < 3; i++ ) {\n *\n * \tconst geometry = new THREE.IcosahedronGeometry( 10, 3 - i );\n * \tconst mesh = new THREE.Mesh( geometry, material );\n * \tlod.addLevel( mesh, i * 75 );\n *\n * }\n *\n * scene.add( lod );\n * ```\n *\n * @augments Object3D\n */\nclass LOD extends Object3D {\n\n\t/**\n\t * Constructs a new LOD.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLOD = true;\n\n\t\t/**\n\t\t * The current LOD index.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\t/**\n\t\t\t * This array holds the LOD levels.\n\t\t\t *\n\t\t\t * @name LOD#levels\n\t\t\t * @type {Array<{object:Object3D,distance:number,hysteresis:number}>}\n\t\t\t */\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t}\n\t\t} );\n\n\t\t/**\n\t\t * Whether the LOD object is updated automatically by the renderer per frame\n\t\t * or not. If set to `false`, you have to call {@link LOD#update} in the\n\t\t * render loop by yourself.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance, level.hysteresis );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds a mesh that will display at a certain distance and greater. Typically\n\t * the further away the distance, the lower the detail on the mesh.\n\t *\n\t * @param {Object3D} object - The 3D object to display at this level.\n\t * @param {number} [distance=0] - The distance at which to display this level of detail.\n\t * @param {number} [hysteresis=0] - Threshold used to avoid flickering at LOD boundaries, as a fraction of distance.\n\t * @return {LOD} A reference to this instance.\n\t */\n\taddLevel( object, distance = 0, hysteresis = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes an existing level, based on the distance from the camera.\n\t * Returns `true` when the level has been removed. Otherwise `false`.\n\t *\n\t * @param {number} distance - Distance of the level to remove.\n\t * @return {boolean} Whether the level has been removed or not.\n\t */\n\tremoveLevel( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0; i < levels.length; i ++ ) {\n\n\t\t\tif ( levels[ i ].distance === distance ) {\n\n\t\t\t\tconst removedElements = levels.splice( i, 1 );\n\t\t\t\tthis.remove( removedElements[ 0 ].object );\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns the currently active LOD level index.\n\t *\n\t * @return {number} The current active LOD level index.\n\t */\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\t/**\n\t * Returns a reference to the first 3D object that is greater than\n\t * the given distance.\n\t *\n\t * @param {number} distance - The LOD distance.\n\t * @return {?Object3D} The found 3D object. `null` if no 3D object has been found.\n\t */\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance < levelDistance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Computes intersection points between a casted ray and this LOD.\n\t *\n\t * @param {Raycaster} raycaster - The raycaster.\n\t * @param {Array<Object>} intersects - The target array that holds the intersection points.\n\t */\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the LOD by computing which LOD level should be visible according\n\t * to the current distance of the given camera.\n\t *\n\t * @param {Camera} camera - The camera the scene is rendered with.\n\t */\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance >= levelDistance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance,\n\t\t\t\thysteresis: level.hysteresis\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _vector$7 = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\n/**\n * A ray that emits from an origin in a certain direction. The class is used by\n * {@link Raycaster} to assist with raycasting. Raycasting is used for\n * mouse picking (working out what objects in the 3D space the mouse is over)\n * amongst other things.\n */\nclass Ray {\n\n\t/**\n\t * Constructs a new ray.\n\t *\n\t * @param {Vector3} [origin=(0,0,0)] - The origin of the ray.\n\t * @param {Vector3} [direction=(0,0,-1)] - The (normalized) direction of the ray.\n\t */\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, -1 ) ) {\n\n\t\t/**\n\t\t * The origin of the ray.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.origin = origin;\n\n\t\t/**\n\t\t * The (normalized) direction of the ray.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.direction = direction;\n\n\t}\n\n\t/**\n\t * Sets the ray's components by copying the given values.\n\t *\n\t * @param {Vector3} origin - The origin.\n\t * @param {Vector3} direction - The direction.\n\t * @return {Ray} A reference to this ray.\n\t */\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the values of the given ray to this instance.\n\t *\n\t * @param {Ray} ray - The ray to copy.\n\t * @return {Ray} A reference to this ray.\n\t */\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a vector that is located at a given distance along this ray.\n\t *\n\t * @param {number} t - The distance along the ray to retrieve a position for.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} A position on the ray.\n\t */\n\tat( t, target ) {\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, t );\n\n\t}\n\n\t/**\n\t * Adjusts the direction of the ray to point at the given vector in world space.\n\t *\n\t * @param {Vector3} v - The target position.\n\t * @return {Ray} A reference to this ray.\n\t */\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Shift the origin of this ray along its direction by the given distance.\n\t *\n\t * @param {number} t - The distance along the ray to interpolate.\n\t * @return {Ray} A reference to this ray.\n\t */\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$7 ) );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the point along this ray that is closest to the given point.\n\t *\n\t * @param {Vector3} point - A point in 3D space to get the closet location on the ray for.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The closest point on this ray.\n\t */\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t}\n\n\t/**\n\t * Returns the distance of the closest approach between this ray and the given point.\n\t *\n\t * @param {Vector3} point - A point in 3D space to compute the distance to.\n\t * @return {number} The distance.\n\t */\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\t/**\n\t * Returns the squared distance of the closest approach between this ray and the given point.\n\t *\n\t * @param {Vector3} point - A point in 3D space to compute the distance to.\n\t * @return {number} The squared distance.\n\t */\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$7.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$7.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t\treturn _vector$7.distanceToSquared( point );\n\n\t}\n\n\t/**\n\t * Returns the squared distance between this ray and the given line segment.\n\t *\n\t * @param {Vector3} v0 - The start point of the line segment.\n\t * @param {Vector3} v1 - The end point of the line segment.\n\t * @param {Vector3} [optionalPointOnRay] - When provided, it receives the point on this ray that is closest to the segment.\n\t * @param {Vector3} [optionalPointOnSegment] - When provided, it receives the point on the line segment that is closest to this ray.\n\t * @return {number} The squared distance.\n\t */\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\t/**\n\t * Intersects this ray with the given sphere, returning the intersection\n\t * point or `null` if there is no intersection.\n\t *\n\t * @param {Sphere} sphere - The sphere to intersect.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {?Vector3} The intersection point.\n\t */\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$7.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$7.dot( this.direction );\n\t\tconst d2 = _vector$7.dot( _vector$7 ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if t1 is behind the ray - if so, return null\n\t\tif ( t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\t/**\n\t * Returns `true` if this ray intersects with the given sphere.\n\t *\n\t * @param {Sphere} sphere - The sphere to intersect.\n\t * @return {boolean} Whether this ray intersects with the given sphere or not.\n\t */\n\tintersectsSphere( sphere ) {\n\n\t\tif ( sphere.radius < 0 ) return false; // handle empty spheres, see #31187\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\t/**\n\t * Computes the distance from the ray's origin to the given plane. Returns `null` if the ray\n\t * does not intersect with the plane.\n\t *\n\t * @param {Plane} plane - The plane to compute the distance to.\n\t * @return {?number} Whether this ray intersects with the given sphere or not.\n\t */\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\t/**\n\t * Intersects this ray with the given plane, returning the intersection\n\t * point or `null` if there is no intersection.\n\t *\n\t * @param {Plane} plane - The plane to intersect.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {?Vector3} The intersection point.\n\t */\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\t/**\n\t * Returns `true` if this ray intersects with the given plane.\n\t *\n\t * @param {Plane} plane - The plane to intersect.\n\t * @return {boolean} Whether this ray intersects with the given plane or not.\n\t */\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Intersects this ray with the given bounding box, returning the intersection\n\t * point or `null` if there is no intersection.\n\t *\n\t * @param {Box3} box - The box to intersect.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {?Vector3} The intersection point.\n\t */\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\t/**\n\t * Returns `true` if this ray intersects with the given box.\n\t *\n\t * @param {Box3} box - The box to intersect.\n\t * @return {boolean} Whether this ray intersects with the given box or not.\n\t */\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$7 ) !== null;\n\n\t}\n\n\t/**\n\t * Intersects this ray with the given triangle, returning the intersection\n\t * point or `null` if there is no intersection.\n\t *\n\t * @param {Vector3} a - The first vertex of the triangle.\n\t * @param {Vector3} b - The second vertex of the triangle.\n\t * @param {Vector3} c - The third vertex of the triangle.\n\t * @param {boolean} backfaceCulling - Whether to use backface culling or not.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {?Vector3} The intersection point.\n\t */\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t//   |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t//   |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t//   |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = -1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\t/**\n\t * Transforms this ray with the given 4x4 transformation matrix.\n\t *\n\t * @param {Matrix4} matrix4 - The transformation matrix.\n\t * @return {Ray} A reference to this ray.\n\t */\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this ray is equal with the given one.\n\t *\n\t * @param {Ray} ray - The ray to test for equality.\n\t * @return {boolean} Whether this ray is equal with the given one.\n\t */\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\t/**\n\t * Returns a new ray with copied values from this instance.\n\t *\n\t * @return {Ray} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * A material for drawing geometries in a simple shaded (flat or wireframe) way.\n *\n * This material is not affected by lights.\n *\n * @augments Material\n * @demo scenes/material-browser.html#MeshBasicMaterial\n */\nclass MeshBasicMaterial extends Material {\n\n\t/**\n\t * Constructs a new mesh basic material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map\n\t\t * color is modulated by the diffuse `color`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The light map. Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.lightMap = null;\n\n\t\t/**\n\t\t * Intensity of the baked light.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\t/**\n\t\t * The red channel of this texture is used as the ambient occlusion map.\n\t\t * Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.aoMap = null;\n\n\t\t/**\n\t\t * Intensity of the ambient occlusion effect. Range is `[0,1]`, where `0`\n\t\t * disables ambient occlusion. Where intensity is `1` and the AO map's\n\t\t * red channel is also `1`, ambient light is fully occluded on a surface.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\t/**\n\t\t * Specular map used by the material.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.specularMap = null;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * The environment map.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.envMap = null;\n\n\t\t/**\n\t\t * The rotation of the environment map in radians.\n\t\t *\n\t\t * @type {Euler}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.envMapRotation = new Euler();\n\n\t\t/**\n\t\t * How to combine the result of the surface's color with the environment map, if any.\n\t\t *\n\t\t * When set to `MixOperation`, the {@link MeshBasicMaterial#reflectivity} is used to\n\t\t * blend between the two colors.\n\t\t *\n\t\t * @type {(MultiplyOperation|MixOperation|AddOperation)}\n\t\t * @default MultiplyOperation\n\t\t */\n\t\tthis.combine = MultiplyOperation;\n\n\t\t/**\n\t\t * How much the environment map affects the surface.\n\t\t * The valid range is between `0` (no reflections) and `1` (full reflections).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.reflectivity = 1;\n\n\t\t/**\n\t\t * The index of refraction (IOR) of air (approximately 1) divided by the\n\t\t * index of refraction of the material. It is used with environment mapping\n\t\t * modes {@link CubeRefractionMapping} and {@link EquirectangularRefractionMapping}.\n\t\t * The refraction ratio should not exceed `1`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.98\n\t\t */\n\t\tthis.refractionRatio = 0.98;\n\n\t\t/**\n\t\t * Renders the geometry as a wireframe.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.wireframe = false;\n\n\t\t/**\n\t\t * Controls the thickness of the wireframe.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.wireframeLinewidth = 1;\n\n\t\t/**\n\t\t * Defines appearance of wireframe ends.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinecap = 'round';\n\n\t\t/**\n\t\t * Defines appearance of wireframe joints.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix$3 = /*@__PURE__*/ new Matrix4();\nconst _ray$3 = /*@__PURE__*/ new Ray();\nconst _sphere$6 = /*@__PURE__*/ new Sphere();\nconst _sphereHitAt = /*@__PURE__*/ new Vector3();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\n/**\n * Class representing triangular polygon mesh based objects.\n *\n * ```js\n * const geometry = new THREE.BoxGeometry( 1, 1, 1 );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const mesh = new THREE.Mesh( geometry, material );\n * scene.add( mesh );\n * ```\n *\n * @augments Object3D\n */\nclass Mesh extends Object3D {\n\n\t/**\n\t * Constructs a new mesh.\n\t *\n\t * @param {BufferGeometry} [geometry] - The mesh geometry.\n\t * @param {Material|Array<Material>} [material] - The mesh material.\n\t */\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\t/**\n\t\t * The mesh geometry.\n\t\t *\n\t\t * @type {BufferGeometry}\n\t\t */\n\t\tthis.geometry = geometry;\n\n\t\t/**\n\t\t * The mesh material.\n\t\t *\n\t\t * @type {Material|Array<Material>}\n\t\t * @default MeshBasicMaterial\n\t\t */\n\t\tthis.material = material;\n\n\t\t/**\n\t\t * A dictionary representing the morph targets in the geometry. The key is the\n\t\t * morph targets name, the value its attribute index. This member is `undefined`\n\t\t * by default and only set when morph targets are detected in the geometry.\n\t\t *\n\t\t * @type {Object<string,number>|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.morphTargetDictionary = undefined;\n\n\t\t/**\n\t\t * An array of weights typically in the range `[0,1]` that specify how much of the morph\n\t\t * is applied. This member is `undefined` by default and only set when morph targets are\n\t\t * detected in the geometry.\n\t\t *\n\t\t * @type {Array<number>|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.morphTargetInfluences = undefined;\n\n\t\t/**\n\t\t * The number of instances of this mesh.\n\t\t * Can only be used with {@link WebGPURenderer}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.count = 1;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the values of {@link Mesh#morphTargetDictionary} and {@link Mesh#morphTargetInfluences}\n\t * to make sure existing morph targets can influence this 3D object.\n\t */\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the local-space position of the vertex at the given index, taking into\n\t * account the current animation state of both morph targets and skinning.\n\t *\n\t * @param {number} index - The vertex index.\n\t * @param {Vector3} target - The target object that is used to store the method's result.\n\t * @return {Vector3} The vertex position in local space.\n\t */\n\tgetVertexPosition( index, target ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\n\t\ttarget.fromBufferAttribute( position, index );\n\n\t\tconst morphInfluences = this.morphTargetInfluences;\n\n\t\tif ( morphPosition && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morphAttribute, index );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( target ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttarget.add( _morphA );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Computes intersection points between a casted ray and this line.\n\t *\n\t * @param {Raycaster} raycaster - The raycaster.\n\t * @param {Array<Object>} intersects - The target array that holds the intersection points.\n\t */\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$6.copy( geometry.boundingSphere );\n\t\t_sphere$6.applyMatrix4( matrixWorld );\n\n\t\t// check distance from ray origin to bounding sphere\n\n\t\t_ray$3.copy( raycaster.ray ).recast( raycaster.near );\n\n\t\tif ( _sphere$6.containsPoint( _ray$3.origin ) === false ) {\n\n\t\t\tif ( _ray$3.intersectSphere( _sphere$6, _sphereHitAt ) === null ) return;\n\n\t\t\tif ( _ray$3.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;\n\n\t\t}\n\n\t\t// convert ray to local space of mesh\n\n\t\t_inverseMatrix$3.copy( matrixWorld ).invert();\n\t\t_ray$3.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$3 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$3.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$3 );\n\n\t}\n\n\t_computeIntersections( raycaster, intersects, rayLocalSpace ) {\n\n\t\tlet intersection;\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv1 = geometry.attributes.uv1;\n\t\tconst normal = geometry.attributes.normal;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection$1( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, normal, a, b, c ) {\n\n\tobject.getVertexPosition( a, _vA );\n\tobject.getVertexPosition( b, _vB );\n\tobject.getVertexPosition( c, _vC );\n\n\tconst intersection = checkIntersection$1( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tconst barycoord = new Vector3();\n\t\tTriangle.getBarycoord( _intersectionPoint, _vA, _vB, _vC, barycoord );\n\n\t\tif ( uv ) {\n\n\t\t\tintersection.uv = Triangle.getInterpolatedAttribute( uv, a, b, c, barycoord, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\tintersection.uv1 = Triangle.getInterpolatedAttribute( uv1, a, b, c, barycoord, new Vector2() );\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\tintersection.normal = Triangle.getInterpolatedAttribute( normal, a, b, c, barycoord, new Vector3() );\n\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( -1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\t\tintersection.barycoord = barycoord;\n\n\t}\n\n\treturn intersection;\n\n}\n\nconst _baseVector = /*@__PURE__*/ new Vector4();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector4 = /*@__PURE__*/ new Vector4();\nconst _matrix4 = /*@__PURE__*/ new Matrix4();\nconst _vertex = /*@__PURE__*/ new Vector3();\n\nconst _sphere$5 = /*@__PURE__*/ new Sphere();\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\n\n/**\n * A mesh that has a {@link Skeleton} that can then be used to animate the\n * vertices of the geometry with skinning/skeleton animation.\n *\n * Next to a valid skeleton, the skinned mesh requires skin indices and weights\n * as buffer attributes in its geometry. These attribute define which bones affect a single\n * vertex to a certain extend.\n *\n * Typically skinned meshes are not created manually but loaders like {@link GLTFLoader}\n * or {@link FBXLoader } import respective models.\n *\n * @augments Mesh\n * @demo scenes/bones-browser.html\n */\nclass SkinnedMesh extends Mesh {\n\n\t/**\n\t * Constructs a new skinned mesh.\n\t *\n\t * @param {BufferGeometry} [geometry] - The mesh geometry.\n\t * @param {Material|Array<Material>} [material] - The mesh material.\n\t */\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSkinnedMesh = true;\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\t/**\n\t\t * `AttachedBindMode` means the skinned mesh shares the same world space as the skeleton.\n\t\t * This is not true when using `DetachedBindMode` which is useful when sharing a skeleton\n\t\t * across multiple skinned meshes.\n\t\t *\n\t\t * @type {(AttachedBindMode|DetachedBindMode)}\n\t\t * @default AttachedBindMode\n\t\t */\n\t\tthis.bindMode = AttachedBindMode;\n\n\t\t/**\n\t\t * The base matrix that is used for the bound bone transforms.\n\t\t *\n\t\t * @type {Matrix4}\n\t\t */\n\t\tthis.bindMatrix = new Matrix4();\n\n\t\t/**\n\t\t * The base matrix that is used for resetting the bound bone transforms.\n\t\t *\n\t\t * @type {Matrix4}\n\t\t */\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t\t/**\n\t\t * The bounding box of the skinned mesh. Can be computed via {@link SkinnedMesh#computeBoundingBox}.\n\t\t *\n\t\t * @type {?Box3}\n\t\t * @default null\n\t\t */\n\t\tthis.boundingBox = null;\n\n\t\t/**\n\t\t * The bounding sphere of the skinned mesh. Can be computed via {@link SkinnedMesh#computeBoundingSphere}.\n\t\t *\n\t\t * @type {?Sphere}\n\t\t * @default null\n\t\t */\n\t\tthis.boundingSphere = null;\n\n\t}\n\n\t/**\n\t * Computes the bounding box of the skinned mesh, and updates {@link SkinnedMesh#boundingBox}.\n\t * The bounding box is not automatically computed by the engine; this method must be called by your app.\n\t * If the skinned mesh is animated, the bounding box should be recomputed per frame in order to reflect\n\t * the current animation state.\n\t */\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingBox.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Computes the bounding sphere of the skinned mesh, and updates {@link SkinnedMesh#boundingSphere}.\n\t * The bounding sphere is automatically computed by the engine once when it is needed, e.g., for ray casting\n\t * and view frustum culling. If the skinned mesh is animated, the bounding sphere should be recomputed\n\t * per frame in order to reflect the current animation state.\n\t */\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingSphere.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$5.copy( this.boundingSphere );\n\t\t_sphere$5.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$5 ) === false ) return;\n\n\t\t// convert ray to local space of skinned mesh\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( this.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$2 );\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tsuper.getVertexPosition( index, target );\n\n\t\tthis.applyBoneTransform( index, target );\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Binds the given skeleton to the skinned mesh.\n\t *\n\t * @param {Skeleton} skeleton - The skeleton to bind.\n\t * @param {Matrix4} [bindMatrix] - The bind matrix. If no bind matrix is provided,\n\t * the skinned mesh's world matrix will be used instead.\n\t */\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\t/**\n\t * This method sets the skinned mesh in the rest pose).\n\t */\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\t/**\n\t * Normalizes the skin weights which are defined as a buffer attribute\n\t * in the skinned mesh's geometry.\n\t */\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.fromBufferAttribute( skinWeight, i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === AttachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === DetachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\twarn( 'SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies the bone transform associated with the given index to the given\n\t * vector. Can be used to transform positions or direction vectors by providing\n\t * a Vector4 with 1 or 0 in the w component respectively. Returns the updated vector.\n\t *\n\t * @param {number} index - The vertex index.\n\t * @param {Vector3|Vector4} target - The target object that is used to store the method's result.\n\t * @return {Vector3|Vector4} The updated vertex attribute data.\n\t */\n\tapplyBoneTransform( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\tif ( target.isVector4 ) {\n\n\t\t\t_baseVector.copy( target );\n\t\t\ttarget.set( 0, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_baseVector.set( ...target, 1 );\n\t\t\ttarget.set( 0, 0, 0 );\n\n\t\t}\n\n\t\t_baseVector.applyMatrix4( this.bindMatrix );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector4.copy( _baseVector ).applyMatrix4( _matrix4 ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( target.isVector4 ) {\n\n\t\t\t// ensure the homogenous coordinate remains unchanged after vector operations\n\t\t\ttarget.w = _baseVector.w;\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\n/**\n * A bone which is part of a {@link Skeleton}. The skeleton in turn is used by\n * the {@link SkinnedMesh}.\n *\n * ```js\n * const root = new THREE.Bone();\n * const child = new THREE.Bone();\n *\n * root.add( child );\n * child.position.y = 5;\n * ```\n *\n * @augments Object3D\n */\nclass Bone extends Object3D {\n\n\t/**\n\t * Constructs a new bone.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBone = true;\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\n/**\n * Creates a texture directly from raw buffer data.\n *\n * The interpretation of the data depends on type and format: If the type is\n * `UnsignedByteType`, a `Uint8Array` will be useful for addressing the\n * texel data. If the format is `RGBAFormat`, data needs four values for\n * one texel; Red, Green, Blue and Alpha (typically the opacity).\n *\n * @augments Texture\n */\nclass DataTexture extends Texture {\n\n\t/**\n\t * Constructs a new data texture.\n\t *\n\t * @param {?TypedArray} [data=null] - The buffer data.\n\t * @param {number} [width=1] - The width of the texture.\n\t * @param {number} [height=1] - The height of the texture.\n\t * @param {number} [format=RGBAFormat] - The texture format.\n\t * @param {number} [type=UnsignedByteType] - The texture type.\n\t * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=NearestFilter] - The mag filter value.\n\t * @param {number} [minFilter=NearestFilter] - The min filter value.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t * @param {string} [colorSpace=NoColorSpace] - The color space.\n\t */\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isDataTexture = true;\n\n\t\t/**\n\t\t * The image definition of a data texture.\n\t\t *\n\t\t * @type {{data:TypedArray,width:number,height:number}}\n\t\t */\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\t/**\n\t\t * Whether to generate mipmaps (if possible) for a texture.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.generateMipmaps = false;\n\n\t\t/**\n\t\t * If set to `true`, the texture is flipped along the vertical axis when\n\t\t * uploaded to the GPU.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flipY = false;\n\n\t\t/**\n\t\t * Specifies the alignment requirements for the start of each pixel row in memory.\n\t\t *\n\t\t * Overwritten and set to `1` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default 1\n\t\t */\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\n/**\n * Class for representing the armatures in `three.js`. The skeleton\n * is defined by a hierarchy of bones.\n *\n * ```js\n * const bones = [];\n *\n * const shoulder = new THREE.Bone();\n * const elbow = new THREE.Bone();\n * const hand = new THREE.Bone();\n *\n * shoulder.add( elbow );\n * elbow.add( hand );\n *\n * bones.push( shoulder , elbow, hand);\n *\n * shoulder.position.y = -5;\n * elbow.position.y = 0;\n * hand.position.y = 5;\n *\n * const armSkeleton = new THREE.Skeleton( bones );\n * ```\n */\nclass Skeleton {\n\n\t/**\n\t * Constructs a new skeleton.\n\t *\n\t * @param {Array<Bone>} [bones] - An array of bones.\n\t * @param {Array<Matrix4>} [boneInverses] - An array of bone inverse matrices.\n\t * If not provided, these matrices will be computed automatically via {@link Skeleton#calculateInverses}.\n\t */\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\t/**\n\t\t * An array of bones defining the skeleton.\n\t\t *\n\t\t * @type {Array<Bone>}\n\t\t */\n\t\tthis.bones = bones.slice( 0 );\n\n\t\t/**\n\t\t * An array of bone inverse matrices.\n\t\t *\n\t\t * @type {Array<Matrix4>}\n\t\t */\n\t\tthis.boneInverses = boneInverses;\n\n\t\t/**\n\t\t * An array buffer holding the bone data.\n\t\t * Input data for {@link Skeleton#boneTexture}.\n\t\t *\n\t\t * @type {?Float32Array}\n\t\t * @default null\n\t\t */\n\t\tthis.boneMatrices = null;\n\n\t\t/**\n\t\t * An array buffer holding the bone data of the previous frame.\n\t\t * Required for computing velocity. Maintained in {@link SkinningNode}.\n\t\t *\n\t\t * @type {?Float32Array}\n\t\t * @default null\n\t\t */\n\t\tthis.previousBoneMatrices = null;\n\n\t\t/**\n\t\t * A texture holding the bone data for use\n\t\t * in the vertex shader.\n\t\t *\n\t\t * @type {?DataTexture}\n\t\t * @default null\n\t\t */\n\t\tthis.boneTexture = null;\n\n\t\tthis.init();\n\n\t}\n\n\t/**\n\t * Initializes the skeleton. This method gets automatically called by the constructor\n\t * but depending on how the skeleton is created it might be necessary to call this method\n\t * manually.\n\t */\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\twarn( 'Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Computes the bone inverse matrices. This method resets {@link Skeleton#boneInverses}\n\t * and fills it with new matrices.\n\t */\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Resets the skeleton to the base pose.\n\t */\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Resets the skeleton to the base pose.\n\t */\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a new skeleton with copied values from this instance.\n\t *\n\t * @return {Skeleton} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\t/**\n\t * Computes a data texture for passing bone data to the vertex shader.\n\t *\n\t * @return {Skeleton} A reference of this instance.\n\t */\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t//      RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t//  with  8x8  pixel texture max   16 bones * 4 pixels =  (8 * 8)\n\t\t//       16x16 pixel texture max   64 bones * 4 pixels = (16 * 16)\n\t\t//       32x32 pixel texture max  256 bones * 4 pixels = (32 * 32)\n\t\t//       64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\tboneTexture.needsUpdate = true;\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Searches through the skeleton's bone array and returns the first with a\n\t * matching name.\n\t *\n\t * @param {string} name - The name of the bone.\n\t * @return {Bone|undefined} The found bone. `undefined` if no bone has been found.\n\t */\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Setups the skeleton by the given JSON and bones.\n\t *\n\t * @param {Object} json - The skeleton as serialized JSON.\n\t * @param {Object<string, Bone>} bones - An array of bones.\n\t * @return {Skeleton} A reference of this instance.\n\t */\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\twarn( 'Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Serializes the skeleton into JSON.\n\t *\n\t * @return {Object} A JSON object representing the serialized skeleton.\n\t * @see {@link ObjectLoader#parse}\n\t */\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.7,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * An instanced version of a buffer attribute.\n *\n * @augments BufferAttribute\n */\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new instanced buffer attribute.\n\t *\n\t * @param {TypedArray} array - The array holding the attribute data.\n\t * @param {number} itemSize - The item size.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t * @param {number} [meshPerAttribute=1] - How often a value of this buffer attribute should be repeated.\n\t */\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isInstancedBufferAttribute = true;\n\n\t\t/**\n\t\t * Defines how often a value of this buffer attribute should be repeated. A\n\t\t * value of one means that each value of the instanced attribute is used for\n\t\t * a single instance. A value of two means that each value is used for two\n\t\t * consecutive instances (and so on).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _box3 = /*@__PURE__*/ new Box3();\nconst _identity = /*@__PURE__*/ new Matrix4();\nconst _mesh$1 = /*@__PURE__*/ new Mesh();\nconst _sphere$4 = /*@__PURE__*/ new Sphere();\n\n/**\n * A special version of a mesh with instanced rendering support. Use\n * this class if you have to render a large number of objects with the same\n * geometry and material(s) but with different world transformations. The usage\n * of 'InstancedMesh' will help you to reduce the number of draw calls and thus\n * improve the overall rendering performance in your application.\n *\n * @augments Mesh\n */\nclass InstancedMesh extends Mesh {\n\n\t/**\n\t * Constructs a new instanced mesh.\n\t *\n\t * @param {BufferGeometry} [geometry] - The mesh geometry.\n\t * @param {Material|Array<Material>} [material] - The mesh material.\n\t * @param {number} count - The number of instances.\n\t */\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isInstancedMesh = true;\n\n\t\t/**\n\t\t * Represents the local transformation of all instances. You have to set its\n\t\t * {@link BufferAttribute#needsUpdate} flag to true if you modify instanced data\n\t\t * via {@link InstancedMesh#setMatrixAt}.\n\t\t *\n\t\t * @type {InstancedBufferAttribute}\n\t\t */\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\n\t\t/**\n\t\t * Represents the local transformation of all instances of the previous frame.\n\t\t * Required for computing velocity. Maintained in {@link InstanceNode}.\n\t\t *\n\t\t * @type {?InstancedBufferAttribute}\n\t\t * @default null\n\t\t */\n\t\tthis.previousInstanceMatrix = null;\n\n\t\t/**\n\t\t * Represents the color of all instances. You have to set its\n\t\t * {@link BufferAttribute#needsUpdate} flag to true if you modify instanced data\n\t\t * via {@link InstancedMesh#setColorAt}.\n\t\t *\n\t\t * @type {?InstancedBufferAttribute}\n\t\t * @default null\n\t\t */\n\t\tthis.instanceColor = null;\n\n\t\t/**\n\t\t * Represents the morph target weights of all instances. You have to set its\n\t\t * {@link Texture#needsUpdate} flag to true if you modify instanced data\n\t\t * via {@link InstancedMesh#setMorphAt}.\n\t\t *\n\t\t * @type {?DataTexture}\n\t\t * @default null\n\t\t */\n\t\tthis.morphTexture = null;\n\n\t\t/**\n\t\t * The number of instances.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.count = count;\n\n\t\t/**\n\t\t * The bounding box of the instanced mesh. Can be computed via {@link InstancedMesh#computeBoundingBox}.\n\t\t *\n\t\t * @type {?Box3}\n\t\t * @default null\n\t\t */\n\t\tthis.boundingBox = null;\n\n\t\t/**\n\t\t * The bounding sphere of the instanced mesh. Can be computed via {@link InstancedMesh#computeBoundingSphere}.\n\t\t *\n\t\t * @type {?Sphere}\n\t\t * @default null\n\t\t */\n\t\tthis.boundingSphere = null;\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.setMatrixAt( i, _identity );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Computes the bounding box of the instanced mesh, and updates {@link InstancedMesh#boundingBox}.\n\t * The bounding box is not automatically computed by the engine; this method must be called by your app.\n\t * You may need to recompute the bounding box if an instance is transformed via {@link InstancedMesh#setMatrixAt}.\n\t */\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_box3.copy( geometry.boundingBox ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingBox.union( _box3 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Computes the bounding sphere of the instanced mesh, and updates {@link InstancedMesh#boundingSphere}\n\t * The engine automatically computes the bounding sphere when it is needed, e.g., for ray casting or view frustum culling.\n\t * You may need to recompute the bounding sphere if an instance is transformed via {@link InstancedMesh#setMatrixAt}.\n\t */\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_sphere$4.copy( geometry.boundingSphere ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingSphere.union( _sphere$4 );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.previousInstanceMatrix !== null ) this.previousInstanceMatrix = source.previousInstanceMatrix.clone();\n\n\t\tif ( source.morphTexture !== null ) this.morphTexture = source.morphTexture.clone();\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Gets the color of the defined instance.\n\t *\n\t * @param {number} index - The instance index.\n\t * @param {Color} color - The target object that is used to store the method's result.\n\t * @return {Color} A reference to the target color.\n\t */\n\tgetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\treturn color.setRGB( 1, 1, 1 );\n\n\t\t} else {\n\n\t\t\treturn color.fromArray( this.instanceColor.array, index * 3 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Gets the local transformation matrix of the defined instance.\n\t *\n\t * @param {number} index - The instance index.\n\t * @param {Matrix4} matrix - The target object that is used to store the method's result.\n\t * @return {Matrix4} A reference to the target matrix.\n\t */\n\tgetMatrixAt( index, matrix ) {\n\n\t\treturn matrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\t/**\n\t * Gets the morph target weights of the defined instance.\n\t *\n\t * @param {number} index - The instance index.\n\t * @param {Mesh} object - The target object that is used to store the method's result.\n\t */\n\tgetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tconst len = objectInfluences.length + 1; // All influences + the baseInfluenceSum\n\n\t\tconst dataIndex = index * len + 1; // Skip the baseInfluenceSum at the beginning\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tobjectInfluences[ i ] = array[ dataIndex + i ];\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh$1.geometry = this.geometry;\n\t\t_mesh$1.material = this.material;\n\n\t\tif ( _mesh$1.material === undefined ) return;\n\n\t\t// test with bounding sphere first\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$4.copy( this.boundingSphere );\n\t\t_sphere$4.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$4 ) === false ) return;\n\n\t\t// now test each instance\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh$1.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh$1.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the given color to the defined instance. Make sure you set the `needsUpdate` flag of\n\t * {@link InstancedMesh#instanceColor} to `true` after updating all the colors.\n\t *\n\t * @param {number} index - The instance index.\n\t * @param {Color} color - The instance color.\n\t * @return {InstancedMesh} A reference to this instanced mesh.\n\t */\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ).fill( 1 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given local transformation matrix to the defined instance. Make sure you set the `needsUpdate` flag of\n\t * {@link InstancedMesh#instanceMatrix} to `true` after updating all the matrices.\n\t *\n\t * @param {number} index - The instance index.\n\t * @param {Matrix4} matrix - The local transformation.\n\t * @return {InstancedMesh} A reference to this instanced mesh.\n\t */\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the morph target weights to the defined instance. Make sure you set the `needsUpdate` flag of\n\t * {@link InstancedMesh#morphTexture} to `true` after updating all the influences.\n\t *\n\t * @param {number} index - The instance index.\n\t * @param {Mesh} object -  A mesh which `morphTargetInfluences` property containing the morph target weights\n\t * of a single instance.\n\t * @return {InstancedMesh} A reference to this instanced mesh.\n\t */\n\tsetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst len = objectInfluences.length + 1; // morphBaseInfluence + all influences\n\n\t\tif ( this.morphTexture === null ) {\n\n\t\t\tthis.morphTexture = new DataTexture( new Float32Array( len * this.count ), len, this.count, RedFormat, FloatType );\n\n\t\t}\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t}\n\n\t\tconst morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tconst dataIndex = len * index;\n\n\t\tarray[ dataIndex ] = morphBaseInfluence;\n\n\t\tarray.set( objectInfluences, dataIndex + 1 );\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\tif ( this.morphTexture !== null ) {\n\n\t\t\tthis.morphTexture.dispose();\n\t\t\tthis.morphTexture = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\n/**\n * A two dimensional surface that extends infinitely in 3D space, represented\n * in [Hessian normal form](http://mathworld.wolfram.com/HessianNormalForm.html)\n * by a unit length normal vector and a constant.\n */\nclass Plane {\n\n\t/**\n\t * Constructs a new plane.\n\t *\n\t * @param {Vector3} [normal=(1,0,0)] - A unit length vector defining the normal of the plane.\n\t * @param {number} [constant=0] - The signed distance from the origin to the plane.\n\t */\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPlane = true;\n\n\t\t/**\n\t\t * A unit length vector defining the normal of the plane.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.normal = normal;\n\n\t\t/**\n\t\t * The signed distance from the origin to the plane.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.constant = constant;\n\n\t}\n\n\t/**\n\t * Sets the plane components by copying the given values.\n\t *\n\t * @param {Vector3} normal - The normal.\n\t * @param {number} constant - The constant.\n\t * @return {Plane} A reference to this plane.\n\t */\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the plane components by defining `x`, `y`, `z` as the\n\t * plane normal and `w` as the constant.\n\t *\n\t * @param {number} x - The value for the normal's x component.\n\t * @param {number} y - The value for the normal's y component.\n\t * @param {number} z - The value for the normal's z component.\n\t * @param {number} w - The constant value.\n\t * @return {Plane} A reference to this plane.\n\t */\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the plane from the given normal and coplanar point (that is a point\n\t * that lies onto the plane).\n\t *\n\t * @param {Vector3} normal - The normal.\n\t * @param {Vector3} point - A coplanar point.\n\t * @return {Plane} A reference to this plane.\n\t */\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the plane from three coplanar points. The winding order is\n\t * assumed to be counter-clockwise, and determines the direction of\n\t * the plane normal.\n\t *\n\t * @param {Vector3} a - The first coplanar point.\n\t * @param {Vector3} b - The second coplanar point.\n\t * @param {Vector3} c - The third coplanar point.\n\t * @return {Plane} A reference to this plane.\n\t */\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the values of the given plane to this instance.\n\t *\n\t * @param {Plane} plane - The plane to copy.\n\t * @return {Plane} A reference to this plane.\n\t */\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Normalizes the plane normal and adjusts the constant accordingly.\n\t *\n\t * @return {Plane} A reference to this plane.\n\t */\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Negates both the plane normal and the constant.\n\t *\n\t * @return {Plane} A reference to this plane.\n\t */\n\tnegate() {\n\n\t\tthis.constant *= -1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the signed distance from the given point to this plane.\n\t *\n\t * @param {Vector3} point - The point to compute the distance for.\n\t * @return {number} The signed distance.\n\t */\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\t/**\n\t * Returns the signed distance from the given sphere to this plane.\n\t *\n\t * @param {Sphere} sphere - The sphere to compute the distance for.\n\t * @return {number} The signed distance.\n\t */\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\t/**\n\t * Projects a the given point onto the plane.\n\t *\n\t * @param {Vector3} point - The point to project.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The projected point on the plane.\n\t */\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );\n\n\t}\n\n\t/**\n\t * Returns the intersection point of the passed line and the plane. Returns\n\t * `null` if the line does not intersect. Returns the line's starting point if\n\t * the line is coplanar with the plane.\n\t *\n\t * @param {Line3} line - The line to compute the intersection for.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @param {boolean} [clampToLine=true] - Whether to clamp the intersection to the line segment.\n\t * @return {?Vector3} The intersection point. Returns `null` if no intersection is detected.\n\t */\n\tintersectLine( line, target, clampToLine = true ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( ( clampToLine === true ) && ( t < 0 || t > 1 ) ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( line.start ).addScaledVector( direction, t );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given line segment intersects with (passes through) the plane.\n\t *\n\t * @param {Line3} line - The line to test.\n\t * @return {boolean} Whether the given line segment intersects with the plane or not.\n\t */\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given bounding box intersects with the plane.\n\t *\n\t * @param {Box3} box - The bounding box to test.\n\t * @return {boolean} Whether the given bounding box intersects with the plane or not.\n\t */\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given bounding sphere intersects with the plane.\n\t *\n\t * @param {Sphere} sphere - The bounding sphere to test.\n\t * @return {boolean} Whether the given bounding sphere intersects with the plane or not.\n\t */\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\t/**\n\t * Returns a coplanar vector to the plane, by calculating the\n\t * projection of the normal at the origin onto the plane.\n\t *\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The coplanar point.\n\t */\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\t/**\n\t * Apply a 4x4 matrix to the plane. The matrix must be an affine, homogeneous transform.\n\t *\n\t * The optional normal matrix can be pre-computed like so:\n\t * ```js\n\t * const optionalNormalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );\n\t * ```\n\t *\n\t * @param {Matrix4} matrix - The transformation matrix.\n\t * @param {Matrix4} [optionalNormalMatrix] - A pre-computed normal matrix.\n\t * @return {Plane} A reference to this plane.\n\t */\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Translates the plane by the distance defined by the given offset vector.\n\t * Note that this only affects the plane constant and will not affect the normal vector.\n\t *\n\t * @param {Vector3} offset - The offset vector.\n\t * @return {Plane} A reference to this plane.\n\t */\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this plane is equal with the given one.\n\t *\n\t * @param {Plane} plane - The plane to test for equality.\n\t * @return {boolean} Whether this plane is equal with the given one.\n\t */\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\t/**\n\t * Returns a new plane with copied values from this instance.\n\t *\n\t * @return {Plane} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\nconst _defaultSpriteCenter = /*@__PURE__*/ new Vector2( 0.5, 0.5 );\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\n/**\n * Frustums are used to determine what is inside the camera's field of view.\n * They help speed up the rendering process - objects which lie outside a camera's\n * frustum can safely be excluded from rendering.\n *\n * This class is mainly intended for use internally by a renderer.\n */\nclass Frustum {\n\n\t/**\n\t * Constructs a new frustum.\n\t *\n\t * @param {Plane} [p0] - The first plane that encloses the frustum.\n\t * @param {Plane} [p1] - The second plane that encloses the frustum.\n\t * @param {Plane} [p2] - The third plane that encloses the frustum.\n\t * @param {Plane} [p3] - The fourth plane that encloses the frustum.\n\t * @param {Plane} [p4] - The fifth plane that encloses the frustum.\n\t * @param {Plane} [p5] - The sixth plane that encloses the frustum.\n\t */\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\t/**\n\t\t * This array holds the planes that enclose the frustum.\n\t\t *\n\t\t * @type {Array<Plane>}\n\t\t */\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\t/**\n\t * Sets the frustum planes by copying the given planes.\n\t *\n\t * @param {Plane} [p0] - The first plane that encloses the frustum.\n\t * @param {Plane} [p1] - The second plane that encloses the frustum.\n\t * @param {Plane} [p2] - The third plane that encloses the frustum.\n\t * @param {Plane} [p3] - The fourth plane that encloses the frustum.\n\t * @param {Plane} [p4] - The fifth plane that encloses the frustum.\n\t * @param {Plane} [p5] - The sixth plane that encloses the frustum.\n\t * @return {Frustum} A reference to this frustum.\n\t */\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the values of the given frustum to this instance.\n\t *\n\t * @param {Frustum} frustum - The frustum to copy.\n\t * @return {Frustum} A reference to this frustum.\n\t */\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the frustum planes from the given projection matrix.\n\t *\n\t * @param {Matrix4} m - The projection matrix.\n\t * @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} coordinateSystem - The coordinate system.\n\t * @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.\n\t * @return {Frustum} A reference to this frustum.\n\t */\n\tsetFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\n\t\tif ( reversedDepth ) {\n\n\t\t\tplanes[ 4 ].setComponents( me2, me6, me10, me14 ).normalize(); // far\n\t\t\tplanes[ 5 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); // near\n\n\t\t} else {\n\n\t\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); // far\n\n\t\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); // near\n\n\t\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\t\tplanes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize(); // near\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if the 3D object's bounding sphere is intersecting this frustum.\n\t *\n\t * Note that the 3D object must have a geometry so that the bounding sphere can be calculated.\n\t *\n\t * @param {Object3D} object - The 3D object to test.\n\t * @return {boolean} Whether the 3D object's bounding sphere is intersecting this frustum or not.\n\t */\n\tintersectsObject( object ) {\n\n\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\n\t\t\t_sphere$3.copy( object.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$3.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t}\n\n\t\treturn this.intersectsSphere( _sphere$3 );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given sprite is intersecting this frustum.\n\t *\n\t * @param {Sprite} sprite - The sprite to test.\n\t * @return {boolean} Whether the sprite is intersecting this frustum or not.\n\t */\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$3.center.set( 0, 0, 0 );\n\n\t\tconst offset = _defaultSpriteCenter.distanceTo( sprite.center );\n\n\t\t_sphere$3.radius = 0.7071067811865476 + offset;\n\t\t_sphere$3.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$3 );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given bounding sphere is intersecting this frustum.\n\t *\n\t * @param {Sphere} sphere - The bounding sphere to test.\n\t * @return {boolean} Whether the bounding sphere is intersecting this frustum or not.\n\t */\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given bounding box is intersecting this frustum.\n\t *\n\t * @param {Box3} box - The bounding box to test.\n\t * @return {boolean} Whether the bounding box is intersecting this frustum or not.\n\t */\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$6.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$6.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$6.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$6 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given point lies within the frustum.\n\t *\n\t * @param {Vector3} point - The point to test.\n\t * @return {boolean} Whether the point lies within this frustum or not.\n\t */\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Returns a new frustum with copied values from this instance.\n\t *\n\t * @return {Frustum} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _frustum$1 = /*@__PURE__*/ new Frustum();\n\n/**\n * FrustumArray is used to determine if an object is visible in at least one camera\n * from an array of cameras. This is particularly useful for multi-view renderers.\n*/\nclass FrustumArray {\n\n\t/**\n\t * Constructs a new frustum array.\n\t *\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * The coordinate system to use.\n\t\t *\n\t\t * @type {WebGLCoordinateSystem|WebGPUCoordinateSystem}\n\t\t * @default WebGLCoordinateSystem\n\t\t */\n\t\tthis.coordinateSystem = WebGLCoordinateSystem;\n\n\t}\n\n\t/**\n\t * Returns `true` if the 3D object's bounding sphere is intersecting any frustum\n\t * from the camera array.\n\t *\n\t * @param {Object3D} object - The 3D object to test.\n\t * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.\n\t * @return {boolean} Whether the 3D object is visible in any camera.\n\t */\n\tintersectsObject( object, cameraArray ) {\n\n\t\tif ( ! cameraArray.isArrayCamera || cameraArray.cameras.length === 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < cameraArray.cameras.length; i ++ ) {\n\n\t\t\tconst camera = cameraArray.cameras[ i ];\n\n\t\t\t_projScreenMatrix$1.multiplyMatrices(\n\t\t\t\tcamera.projectionMatrix,\n\t\t\t\tcamera.matrixWorldInverse\n\t\t\t);\n\n\t\t\t_frustum$1.setFromProjectionMatrix(\n\t\t\t\t_projScreenMatrix$1,\n\t\t\t\tcamera.coordinateSystem,\n\t\t\t\tcamera.reversedDepth\n\t\t\t);\n\n\t\t\tif ( _frustum$1.intersectsObject( object ) ) {\n\n\t\t\t\treturn true; // Object is visible in at least one camera\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false; // Not visible in any camera\n\n\t}\n\n\t/**\n\t * Returns `true` if the given sprite is intersecting any frustum\n\t * from the camera array.\n\t *\n\t * @param {Sprite} sprite - The sprite to test.\n\t * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.\n\t * @return {boolean} Whether the sprite is visible in any camera.\n\t */\n\tintersectsSprite( sprite, cameraArray ) {\n\n\t\tif ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < cameraArray.cameras.length; i ++ ) {\n\n\t\t\tconst camera = cameraArray.cameras[ i ];\n\n\t\t\t_projScreenMatrix$1.multiplyMatrices(\n\t\t\t\tcamera.projectionMatrix,\n\t\t\t\tcamera.matrixWorldInverse\n\t\t\t);\n\n\t\t\t_frustum$1.setFromProjectionMatrix(\n\t\t\t\t_projScreenMatrix$1,\n\t\t\t\tcamera.coordinateSystem,\n\t\t\t\tcamera.reversedDepth\n\t\t\t);\n\n\t\t\tif ( _frustum$1.intersectsSprite( sprite ) ) {\n\n\t\t\t\treturn true; // Sprite is visible in at least one camera\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false; // Not visible in any camera\n\n\t}\n\n\t/**\n\t * Returns `true` if the given bounding sphere is intersecting any frustum\n\t * from the camera array.\n\t *\n\t * @param {Sphere} sphere - The bounding sphere to test.\n\t * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.\n\t * @return {boolean} Whether the sphere is visible in any camera.\n\t */\n\tintersectsSphere( sphere, cameraArray ) {\n\n\t\tif ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < cameraArray.cameras.length; i ++ ) {\n\n\t\t\tconst camera = cameraArray.cameras[ i ];\n\n\t\t\t_projScreenMatrix$1.multiplyMatrices(\n\t\t\t\tcamera.projectionMatrix,\n\t\t\t\tcamera.matrixWorldInverse\n\t\t\t);\n\n\t\t\t_frustum$1.setFromProjectionMatrix(\n\t\t\t\t_projScreenMatrix$1,\n\t\t\t\tcamera.coordinateSystem,\n\t\t\t\tcamera.reversedDepth\n\t\t\t);\n\n\t\t\tif ( _frustum$1.intersectsSphere( sphere ) ) {\n\n\t\t\t\treturn true; // Sphere is visible in at least one camera\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false; // Not visible in any camera\n\n\t}\n\n\t/**\n\t * Returns `true` if the given bounding box is intersecting any frustum\n\t * from the camera array.\n\t *\n\t * @param {Box3} box - The bounding box to test.\n\t * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.\n\t * @return {boolean} Whether the box is visible in any camera.\n\t */\n\tintersectsBox( box, cameraArray ) {\n\n\t\tif ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < cameraArray.cameras.length; i ++ ) {\n\n\t\t\tconst camera = cameraArray.cameras[ i ];\n\n\t\t\t_projScreenMatrix$1.multiplyMatrices(\n\t\t\t\tcamera.projectionMatrix,\n\t\t\t\tcamera.matrixWorldInverse\n\t\t\t);\n\n\t\t\t_frustum$1.setFromProjectionMatrix(\n\t\t\t\t_projScreenMatrix$1,\n\t\t\t\tcamera.coordinateSystem,\n\t\t\t\tcamera.reversedDepth\n\t\t\t);\n\n\t\t\tif ( _frustum$1.intersectsBox( box ) ) {\n\n\t\t\t\treturn true; // Box is visible in at least one camera\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false; // Not visible in any camera\n\n\t}\n\n\t/**\n\t * Returns `true` if the given point lies within any frustum\n\t * from the camera array.\n\t *\n\t * @param {Vector3} point - The point to test.\n\t * @param {Object} cameraArray - An object with a cameras property containing an array of cameras.\n\t * @return {boolean} Whether the point is visible in any camera.\n\t */\n\tcontainsPoint( point, cameraArray ) {\n\n\t\tif ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < cameraArray.cameras.length; i ++ ) {\n\n\t\t\tconst camera = cameraArray.cameras[ i ];\n\n\t\t\t_projScreenMatrix$1.multiplyMatrices(\n\t\t\t\tcamera.projectionMatrix,\n\t\t\t\tcamera.matrixWorldInverse\n\t\t\t);\n\n\t\t\t_frustum$1.setFromProjectionMatrix(\n\t\t\t\t_projScreenMatrix$1,\n\t\t\t\tcamera.coordinateSystem,\n\t\t\t\tcamera.reversedDepth\n\t\t\t);\n\n\t\t\tif ( _frustum$1.containsPoint( point ) ) {\n\n\t\t\t\treturn true; // Point is visible in at least one camera\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false; // Not visible in any camera\n\n\t}\n\n\t/**\n\t * Returns a new frustum array with copied values from this instance.\n\t *\n\t * @return {FrustumArray} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new FrustumArray();\n\n\t}\n\n}\n\nfunction ascIdSort( a, b ) {\n\n\treturn a - b;\n\n}\n\nfunction sortOpaque( a, b ) {\n\n\treturn a.z - b.z;\n\n}\n\nfunction sortTransparent( a, b ) {\n\n\treturn b.z - a.z;\n\n}\n\nclass MultiDrawRenderList {\n\n\tconstructor() {\n\n\t\tthis.index = 0;\n\t\tthis.pool = [];\n\t\tthis.list = [];\n\n\t}\n\n\tpush( start, count, z, index ) {\n\n\t\tconst pool = this.pool;\n\t\tconst list = this.list;\n\t\tif ( this.index >= pool.length ) {\n\n\t\t\tpool.push( {\n\n\t\t\t\tstart: -1,\n\t\t\t\tcount: -1,\n\t\t\t\tz: -1,\n\t\t\t\tindex: -1,\n\n\t\t\t} );\n\n\t\t}\n\n\t\tconst item = pool[ this.index ];\n\t\tlist.push( item );\n\t\tthis.index ++;\n\n\t\titem.start = start;\n\t\titem.count = count;\n\t\titem.z = z;\n\t\titem.index = index;\n\n\t}\n\n\treset() {\n\n\t\tthis.list.length = 0;\n\t\tthis.index = 0;\n\n\t}\n\n}\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _whiteColor = /*@__PURE__*/ new Color( 1, 1, 1 );\nconst _frustum = /*@__PURE__*/ new Frustum();\nconst _frustumArray = /*@__PURE__*/ new FrustumArray();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _forward$1 = /*@__PURE__*/ new Vector3();\nconst _temp = /*@__PURE__*/ new Vector3();\nconst _renderList = /*@__PURE__*/ new MultiDrawRenderList();\nconst _mesh = /*@__PURE__*/ new Mesh();\nconst _batchIntersects = [];\n\n// copies data from attribute \"src\" into \"target\" starting at \"targetOffset\"\nfunction copyAttributeData( src, target, targetOffset = 0 ) {\n\n\tconst itemSize = target.itemSize;\n\tif ( src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor ) {\n\n\t\t// use the component getters and setters if the array data cannot\n\t\t// be copied directly\n\t\tconst vertexCount = src.count;\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\ttarget.setComponent( i + targetOffset, c, src.getComponent( i, c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// faster copy approach using typed array set function\n\t\ttarget.array.set( src.array, targetOffset * itemSize );\n\n\t}\n\n\ttarget.needsUpdate = true;\n\n}\n\n// safely copies array contents to a potentially smaller array\nfunction copyArrayContents( src, target ) {\n\n\tif ( src.constructor !== target.constructor ) {\n\n\t\t// if arrays are of a different type (eg due to index size increasing) then data must be per-element copied\n\t\tconst len = Math.min( src.length, target.length );\n\t\tfor ( let i = 0; i < len; i ++ ) {\n\n\t\t\ttarget[ i ] = src[ i ];\n\n\t\t}\n\n\t} else {\n\n\t\t// if the arrays use the same data layout we can use a fast block copy\n\t\tconst len = Math.min( src.length, target.length );\n\t\ttarget.set( new src.constructor( src.buffer, 0, len ) );\n\n\t}\n\n}\n\n/**\n * A special version of a mesh with multi draw batch rendering support. Use\n * this class if you have to render a large number of objects with the same\n * material but with different geometries or world transformations. The usage of\n * `BatchedMesh` will help you to reduce the number of draw calls and thus improve the overall\n * rendering performance in your application.\n *\n * ```js\n * const box = new THREE.BoxGeometry( 1, 1, 1 );\n * const sphere = new THREE.SphereGeometry( 1, 12, 12 );\n * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );\n *\n * // initialize and add geometries into the batched mesh\n * const batchedMesh = new BatchedMesh( 10, 5000, 10000, material );\n * const boxGeometryId = batchedMesh.addGeometry( box );\n * const sphereGeometryId = batchedMesh.addGeometry( sphere );\n *\n * // create instances of those geometries\n * const boxInstancedId1 = batchedMesh.addInstance( boxGeometryId );\n * const boxInstancedId2 = batchedMesh.addInstance( boxGeometryId );\n *\n * const sphereInstancedId1 = batchedMesh.addInstance( sphereGeometryId );\n * const sphereInstancedId2 = batchedMesh.addInstance( sphereGeometryId );\n *\n * // position the geometries\n * batchedMesh.setMatrixAt( boxInstancedId1, boxMatrix1 );\n * batchedMesh.setMatrixAt( boxInstancedId2, boxMatrix2 );\n *\n * batchedMesh.setMatrixAt( sphereInstancedId1, sphereMatrix1 );\n * batchedMesh.setMatrixAt( sphereInstancedId2, sphereMatrix2 );\n *\n * scene.add( batchedMesh );\n * ```\n *\n * @augments Mesh\n */\nclass BatchedMesh extends Mesh {\n\n\t/**\n\t * Constructs a new batched mesh.\n\t *\n\t * @param {number} maxInstanceCount - The maximum number of individual instances planned to be added and rendered.\n\t * @param {number} maxVertexCount - The maximum number of vertices to be used by all unique geometries.\n\t * @param {number} [maxIndexCount=maxVertexCount*2] - The maximum number of indices to be used by all unique geometries\n\t * @param {Material|Array<Material>} [material] - The mesh material.\n\t */\n\tconstructor( maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {\n\n\t\tsuper( new BufferGeometry(), material );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBatchedMesh = true;\n\n\t\t/**\n\t\t * When set ot `true`, the individual objects of a batch are frustum culled.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.perObjectFrustumCulled = true;\n\n\t\t/**\n\t\t * When set to `true`, the individual objects of a batch are sorted to improve overdraw-related artifacts.\n\t\t * If the material is marked as \"transparent\" objects are rendered back to front and if not then they are\n\t\t * rendered front to back.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.sortObjects = true;\n\n\t\t/**\n\t\t * The bounding box of the batched mesh. Can be computed via {@link BatchedMesh#computeBoundingBox}.\n\t\t *\n\t\t * @type {?Box3}\n\t\t * @default null\n\t\t */\n\t\tthis.boundingBox = null;\n\n\t\t/**\n\t\t * The bounding sphere of the batched mesh. Can be computed via {@link BatchedMesh#computeBoundingSphere}.\n\t\t *\n\t\t * @type {?Sphere}\n\t\t * @default null\n\t\t */\n\t\tthis.boundingSphere = null;\n\n\t\t/**\n\t\t * Takes a sort a function that is run before render. The function takes a list of instances to\n\t\t * sort and a camera. The objects in the list include a \"z\" field to perform a depth-ordered\n\t\t * sort with.\n\t\t *\n\t\t * @type {?Function}\n\t\t * @default null\n\t\t */\n\t\tthis.customSort = null;\n\n\t\t// stores visible, active, and geometry id per instance and reserved buffer ranges for geometries\n\t\tthis._instanceInfo = [];\n\t\tthis._geometryInfo = [];\n\n\t\t// instance, geometry ids that have been set as inactive, and are available to be overwritten\n\t\tthis._availableInstanceIds = [];\n\t\tthis._availableGeometryIds = [];\n\n\t\t// used to track where the next point is that geometry should be inserted\n\t\tthis._nextIndexStart = 0;\n\t\tthis._nextVertexStart = 0;\n\t\tthis._geometryCount = 0;\n\n\t\t// flags\n\t\tthis._visibilityChanged = true;\n\t\tthis._geometryInitialized = false;\n\n\t\t// cached user options\n\t\tthis._maxInstanceCount = maxInstanceCount;\n\t\tthis._maxVertexCount = maxVertexCount;\n\t\tthis._maxIndexCount = maxIndexCount;\n\n\t\t// buffers for multi draw\n\t\tthis._multiDrawCounts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawStarts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawCount = 0;\n\n\t\t// Local matrix per geometry by using data texture\n\t\tthis._matricesTexture = null;\n\t\tthis._indirectTexture = null;\n\t\tthis._colorsTexture = null;\n\n\t\tthis._initMatricesTexture();\n\t\tthis._initIndirectTexture();\n\n\t}\n\n\t/**\n\t * The maximum number of individual instances that can be stored in the batch.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget maxInstanceCount() {\n\n\t\treturn this._maxInstanceCount;\n\n\t}\n\n\t/**\n\t * The instance count.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget instanceCount() {\n\n\t\treturn this._instanceInfo.length - this._availableInstanceIds.length;\n\n\t}\n\n\t/**\n\t * The number of unused vertices.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget unusedVertexCount() {\n\n\t\treturn this._maxVertexCount - this._nextVertexStart;\n\n\t}\n\n\t/**\n\t * The number of unused indices.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget unusedIndexCount() {\n\n\t\treturn this._maxIndexCount - this._nextIndexStart;\n\n\t}\n\n\t_initMatricesTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t//      RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t//  with  8x8  pixel texture max   16 matrices * 4 pixels =  (8 * 8)\n\t\t//       16x16 pixel texture max   64 matrices * 4 pixels = (16 * 16)\n\t\t//       32x32 pixel texture max  256 matrices * 4 pixels = (32 * 32)\n\t\t//       64x64 pixel texture max 1024 matrices * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst matricesArray = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tconst matricesTexture = new DataTexture( matricesArray, size, size, RGBAFormat, FloatType );\n\n\t\tthis._matricesTexture = matricesTexture;\n\n\t}\n\n\t_initIndirectTexture() {\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount );\n\t\tsize = Math.ceil( size );\n\n\t\tconst indirectArray = new Uint32Array( size * size );\n\t\tconst indirectTexture = new DataTexture( indirectArray, size, size, RedIntegerFormat, UnsignedIntType );\n\n\t\tthis._indirectTexture = indirectTexture;\n\n\t}\n\n\t_initColorsTexture() {\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount );\n\t\tsize = Math.ceil( size );\n\n\t\t// 4 floats per RGBA pixel initialized to white\n\t\tconst colorsArray = new Float32Array( size * size * 4 ).fill( 1 );\n\t\tconst colorsTexture = new DataTexture( colorsArray, size, size, RGBAFormat, FloatType );\n\t\tcolorsTexture.colorSpace = ColorManagement.workingColorSpace;\n\n\t\tthis._colorsTexture = colorsTexture;\n\n\t}\n\n\t_initializeGeometry( reference ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst maxVertexCount = this._maxVertexCount;\n\t\tconst maxIndexCount = this._maxIndexCount;\n\t\tif ( this._geometryInitialized === false ) {\n\n\t\t\tfor ( const attributeName in reference.attributes ) {\n\n\t\t\t\tconst srcAttribute = reference.getAttribute( attributeName );\n\t\t\t\tconst { array, itemSize, normalized } = srcAttribute;\n\n\t\t\t\tconst dstArray = new array.constructor( maxVertexCount * itemSize );\n\t\t\t\tconst dstAttribute = new BufferAttribute( dstArray, itemSize, normalized );\n\n\t\t\t\tgeometry.setAttribute( attributeName, dstAttribute );\n\n\t\t\t}\n\n\t\t\tif ( reference.getIndex() !== null ) {\n\n\t\t\t\t// Reserve last u16 index for primitive restart.\n\t\t\t\tconst indexArray = maxVertexCount > 65535\n\t\t\t\t\t? new Uint32Array( maxIndexCount )\n\t\t\t\t\t: new Uint16Array( maxIndexCount );\n\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indexArray, 1 ) );\n\n\t\t\t}\n\n\t\t\tthis._geometryInitialized = true;\n\n\t\t}\n\n\t}\n\n\t// Make sure the geometry is compatible with the existing combined geometry attributes\n\t_validateGeometry( geometry ) {\n\n\t\t// check to ensure the geometries are using consistent attributes and indices\n\t\tconst batchGeometry = this.geometry;\n\t\tif ( Boolean( geometry.getIndex() ) !== Boolean( batchGeometry.getIndex() ) ) {\n\n\t\t\tthrow new Error( 'THREE.BatchedMesh: All geometries must consistently have \"index\".' );\n\n\t\t}\n\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\tif ( ! geometry.hasAttribute( attributeName ) ) {\n\n\t\t\t\tthrow new Error( `THREE.BatchedMesh: Added geometry missing \"${ attributeName }\". All geometries must have consistent attributes.` );\n\n\t\t\t}\n\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tif ( srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized ) {\n\n\t\t\t\tthrow new Error( 'THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Validates the instance defined by the given ID.\n\t *\n\t * @param {number} instanceId - The instance to validate.\n\t */\n\tvalidateInstanceId( instanceId ) {\n\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tif ( instanceId < 0 || instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {\n\n\t\t\tthrow new Error( `THREE.BatchedMesh: Invalid instanceId ${instanceId}. Instance is either out of range or has been deleted.` );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Validates the geometry defined by the given ID.\n\t *\n\t * @param {number} geometryId - The geometry to validate.\n\t */\n\tvalidateGeometryId( geometryId ) {\n\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tif ( geometryId < 0 || geometryId >= geometryInfoList.length || geometryInfoList[ geometryId ].active === false ) {\n\n\t\t\tthrow new Error( `THREE.BatchedMesh: Invalid geometryId ${geometryId}. Geometry is either out of range or has been deleted.` );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Takes a sort a function that is run before render. The function takes a list of instances to\n\t * sort and a camera. The objects in the list include a \"z\" field to perform a depth-ordered sort with.\n\t *\n\t * @param {Function} func - The custom sort function.\n\t * @return {BatchedMesh} A reference to this batched mesh.\n\t */\n\tsetCustomSort( func ) {\n\n\t\tthis.customSort = func;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes the bounding box, updating {@link BatchedMesh#boundingBox}.\n\t * Bounding boxes aren't computed by default. They need to be explicitly computed,\n\t * otherwise they are `null`.\n\t */\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst boundingBox = this.boundingBox;\n\t\tconst instanceInfo = this._instanceInfo;\n\n\t\tboundingBox.makeEmpty();\n\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( instanceInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingBox.union( _box$1 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Computes the bounding sphere, updating {@link BatchedMesh#boundingSphere}.\n\t * Bounding spheres aren't computed by default. They need to be explicitly computed,\n\t * otherwise they are `null`.\n\t */\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\t\tconst instanceInfo = this._instanceInfo;\n\n\t\tboundingSphere.makeEmpty();\n\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( instanceInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingSphere.union( _sphere$2 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Adds a new instance to the batch using the geometry of the given ID and returns\n\t * a new id referring to the new instance to be used by other functions.\n\t *\n\t * @param {number} geometryId - The ID of a previously added geometry via {@link BatchedMesh#addGeometry}.\n\t * @return {number} The instance ID.\n\t */\n\taddInstance( geometryId ) {\n\n\t\tconst atCapacity = this._instanceInfo.length >= this.maxInstanceCount;\n\n\t\t// ensure we're not over geometry\n\t\tif ( atCapacity && this._availableInstanceIds.length === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\tconst instanceInfo = {\n\t\t\tvisible: true,\n\t\t\tactive: true,\n\t\t\tgeometryIndex: geometryId,\n\t\t};\n\n\t\tlet drawId = null;\n\n\t\t// Prioritize using previously freed instance ids\n\t\tif ( this._availableInstanceIds.length > 0 ) {\n\n\t\t\tthis._availableInstanceIds.sort( ascIdSort );\n\n\t\t\tdrawId = this._availableInstanceIds.shift();\n\t\t\tthis._instanceInfo[ drawId ] = instanceInfo;\n\n\t\t} else {\n\n\t\t\tdrawId = this._instanceInfo.length;\n\t\t\tthis._instanceInfo.push( instanceInfo );\n\n\t\t}\n\n\t\tconst matricesTexture = this._matricesTexture;\n\t\t_matrix$1.identity().toArray( matricesTexture.image.data, drawId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tif ( colorsTexture ) {\n\n\t\t\t_whiteColor.toArray( colorsTexture.image.data, drawId * 4 );\n\t\t\tcolorsTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tthis._visibilityChanged = true;\n\t\treturn drawId;\n\n\t}\n\n\t/**\n\t * Adds the given geometry to the batch and returns the associated\n\t * geometry id referring to it to be used in other functions.\n\t *\n\t * @param {BufferGeometry} geometry - The geometry to add.\n\t * @param {number} [reservedVertexCount=-1] - Optional parameter specifying the amount of\n\t * vertex buffer space to reserve for the added geometry. This is necessary if it is planned\n\t * to set a new geometry at this index at a later time that is larger than the original geometry.\n\t * Defaults to the length of the given geometry vertex buffer.\n\t * @param {number} [reservedIndexCount=-1] - Optional parameter specifying the amount of index\n\t * buffer space to reserve for the added geometry. This is necessary if it is planned to set a\n\t * new geometry at this index at a later time that is larger than the original geometry. Defaults to\n\t * the length of the given geometry index buffer.\n\t * @return {number} The geometry ID.\n\t */\n\taddGeometry( geometry, reservedVertexCount = -1, reservedIndexCount = -1 ) {\n\n\t\tthis._initializeGeometry( geometry );\n\n\t\tthis._validateGeometry( geometry );\n\n\t\tconst geometryInfo = {\n\t\t\t// geometry information\n\t\t\tvertexStart: -1,\n\t\t\tvertexCount: -1,\n\t\t\treservedVertexCount: -1,\n\n\t\t\tindexStart: -1,\n\t\t\tindexCount: -1,\n\t\t\treservedIndexCount: -1,\n\n\t\t\t// draw range information\n\t\t\tstart: -1,\n\t\t\tcount: -1,\n\n\t\t\t// state\n\t\t\tboundingBox: null,\n\t\t\tboundingSphere: null,\n\t\t\tactive: true,\n\t\t};\n\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tgeometryInfo.vertexStart = this._nextVertexStart;\n\t\tgeometryInfo.reservedVertexCount = reservedVertexCount === -1 ? geometry.getAttribute( 'position' ).count : reservedVertexCount;\n\n\t\tconst index = geometry.getIndex();\n\t\tconst hasIndex = index !== null;\n\t\tif ( hasIndex ) {\n\n\t\t\tgeometryInfo.indexStart = this._nextIndexStart;\n\t\t\tgeometryInfo.reservedIndexCount = reservedIndexCount === -1 ? index.count : reservedIndexCount;\n\n\t\t}\n\n\t\tif (\n\t\t\tgeometryInfo.indexStart !== -1 &&\n\t\t\tgeometryInfo.indexStart + geometryInfo.reservedIndexCount > this._maxIndexCount ||\n\t\t\tgeometryInfo.vertexStart + geometryInfo.reservedVertexCount > this._maxVertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.' );\n\n\t\t}\n\n\t\t// update id\n\t\tlet geometryId;\n\t\tif ( this._availableGeometryIds.length > 0 ) {\n\n\t\t\tthis._availableGeometryIds.sort( ascIdSort );\n\n\t\t\tgeometryId = this._availableGeometryIds.shift();\n\t\t\tgeometryInfoList[ geometryId ] = geometryInfo;\n\n\n\t\t} else {\n\n\t\t\tgeometryId = this._geometryCount;\n\t\t\tthis._geometryCount ++;\n\t\t\tgeometryInfoList.push( geometryInfo );\n\n\t\t}\n\n\t\t// update the geometry\n\t\tthis.setGeometryAt( geometryId, geometry );\n\n\t\t// increment the next geometry position\n\t\tthis._nextIndexStart = geometryInfo.indexStart + geometryInfo.reservedIndexCount;\n\t\tthis._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount;\n\n\t\treturn geometryId;\n\n\t}\n\n\t/**\n\t * Replaces the geometry at the given ID with the provided geometry. Throws an error if there\n\t * is not enough space reserved for geometry. Calling this will change all instances that are\n\t * rendering that geometry.\n\t *\n\t * @param {number} geometryId - The ID of the geometry that should be replaced with the given geometry.\n\t * @param {BufferGeometry} geometry - The new geometry.\n\t * @return {number} The geometry ID.\n\t */\n\tsetGeometryAt( geometryId, geometry ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\tthrow new Error( 'THREE.BatchedMesh: Maximum geometry count reached.' );\n\n\t\t}\n\n\t\tthis._validateGeometry( geometry );\n\n\t\tconst batchGeometry = this.geometry;\n\t\tconst hasIndex = batchGeometry.getIndex() !== null;\n\t\tconst dstIndex = batchGeometry.getIndex();\n\t\tconst srcIndex = geometry.getIndex();\n\t\tconst geometryInfo = this._geometryInfo[ geometryId ];\n\t\tif (\n\t\t\thasIndex &&\n\t\t\tsrcIndex.count > geometryInfo.reservedIndexCount ||\n\t\t\tgeometry.attributes.position.count > geometryInfo.reservedVertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'THREE.BatchedMesh: Reserved space not large enough for provided geometry.' );\n\n\t\t}\n\n\t\t// copy geometry buffer data over\n\t\tconst vertexStart = geometryInfo.vertexStart;\n\t\tconst reservedVertexCount = geometryInfo.reservedVertexCount;\n\t\tgeometryInfo.vertexCount = geometry.getAttribute( 'position' ).count;\n\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\t// copy attribute data\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tcopyAttributeData( srcAttribute, dstAttribute, vertexStart );\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tconst itemSize = srcAttribute.itemSize;\n\t\t\tfor ( let i = srcAttribute.count, l = reservedVertexCount; i < l; i ++ ) {\n\n\t\t\t\tconst index = vertexStart + i;\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tdstAttribute.setComponent( index, c, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdstAttribute.needsUpdate = true;\n\t\t\tdstAttribute.addUpdateRange( vertexStart * itemSize, reservedVertexCount * itemSize );\n\n\t\t}\n\n\t\t// copy index\n\t\tif ( hasIndex ) {\n\n\t\t\tconst indexStart = geometryInfo.indexStart;\n\t\t\tconst reservedIndexCount = geometryInfo.reservedIndexCount;\n\t\t\tgeometryInfo.indexCount = geometry.getIndex().count;\n\n\t\t\t// copy index data over\n\t\t\tfor ( let i = 0; i < srcIndex.count; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart + srcIndex.getX( i ) );\n\n\t\t\t}\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tfor ( let i = srcIndex.count, l = reservedIndexCount; i < l; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart );\n\n\t\t\t}\n\n\t\t\tdstIndex.needsUpdate = true;\n\t\t\tdstIndex.addUpdateRange( indexStart, geometryInfo.reservedIndexCount );\n\n\t\t}\n\n\t\t// update the draw range\n\t\tgeometryInfo.start = hasIndex ? geometryInfo.indexStart : geometryInfo.vertexStart;\n\t\tgeometryInfo.count = hasIndex ? geometryInfo.indexCount : geometryInfo.vertexCount;\n\n\t\t// store the bounding boxes\n\t\tgeometryInfo.boundingBox = null;\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tgeometryInfo.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tgeometryInfo.boundingSphere = null;\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tgeometryInfo.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tthis._visibilityChanged = true;\n\t\treturn geometryId;\n\n\t}\n\n\t/**\n\t * Deletes the geometry defined by the given ID from this batch. Any instances referencing\n\t * this geometry will also be removed as a side effect.\n\t *\n\t * @param {number} geometryId - The ID of the geometry to remove from the batch.\n\t * @return {BatchedMesh} A reference to this batched mesh.\n\t */\n\tdeleteGeometry( geometryId ) {\n\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tif ( geometryId >= geometryInfoList.length || geometryInfoList[ geometryId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t// delete any instances associated with this geometry\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( instanceInfo[ i ].active && instanceInfo[ i ].geometryIndex === geometryId ) {\n\n\t\t\t\tthis.deleteInstance( i );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometryInfoList[ geometryId ].active = false;\n\t\tthis._availableGeometryIds.push( geometryId );\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Deletes an existing instance from the batch using the given ID.\n\t *\n\t * @param {number} instanceId - The ID of the instance to remove from the batch.\n\t * @return {BatchedMesh} A reference to this batched mesh.\n\t */\n\tdeleteInstance( instanceId ) {\n\n\t\tthis.validateInstanceId( instanceId );\n\n\t\tthis._instanceInfo[ instanceId ].active = false;\n\t\tthis._availableInstanceIds.push( instanceId );\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Repacks the sub geometries in BatchedMesh to remove any unused space remaining from\n\t * previously deleted geometry, freeing up space to add new geometry.\n\t *\n\t * @return {BatchedMesh} A reference to this batched mesh.\n\t */\n\toptimize() {\n\n\t\t// track the next indices to copy data to\n\t\tlet nextVertexStart = 0;\n\t\tlet nextIndexStart = 0;\n\n\t\t// Iterate over all geometry ranges in order sorted from earliest in the geometry buffer to latest\n\t\t// in the geometry buffer. Because draw range objects can be reused there is no guarantee of their order.\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tconst indices = geometryInfoList\n\t\t\t.map( ( e, i ) => i )\n\t\t\t.sort( ( a, b ) => {\n\n\t\t\t\treturn geometryInfoList[ a ].vertexStart - geometryInfoList[ b ].vertexStart;\n\n\t\t\t} );\n\n\t\tconst geometry = this.geometry;\n\t\tfor ( let i = 0, l = geometryInfoList.length; i < l; i ++ ) {\n\n\t\t\t// if a geometry range is inactive then don't copy anything\n\t\t\tconst index = indices[ i ];\n\t\t\tconst geometryInfo = geometryInfoList[ index ];\n\t\t\tif ( geometryInfo.active === false ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// if a geometry contains an index buffer then shift it, as well\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tif ( geometryInfo.indexStart !== nextIndexStart ) {\n\n\t\t\t\t\tconst { indexStart, vertexStart, reservedIndexCount } = geometryInfo;\n\t\t\t\t\tconst index = geometry.index;\n\t\t\t\t\tconst array = index.array;\n\n\t\t\t\t\t// shift the index pointers based on how the vertex data will shift\n\t\t\t\t\t// adjusting the index must happen first so the original vertex start value is available\n\t\t\t\t\tconst elementDelta = nextVertexStart - vertexStart;\n\t\t\t\t\tfor ( let j = indexStart; j < indexStart + reservedIndexCount; j ++ ) {\n\n\t\t\t\t\t\tarray[ j ] = array[ j ] + elementDelta;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tindex.array.copyWithin( nextIndexStart, indexStart, indexStart + reservedIndexCount );\n\t\t\t\t\tindex.addUpdateRange( nextIndexStart, reservedIndexCount );\n\t\t\t\t\tindex.needsUpdate = true;\n\n\t\t\t\t\tgeometryInfo.indexStart = nextIndexStart;\n\n\t\t\t\t}\n\n\t\t\t\tnextIndexStart += geometryInfo.reservedIndexCount;\n\n\t\t\t}\n\n\t\t\t// if a geometry needs to be moved then copy attribute data to overwrite unused space\n\t\t\tif ( geometryInfo.vertexStart !== nextVertexStart ) {\n\n\t\t\t\tconst { vertexStart, reservedVertexCount } = geometryInfo;\n\t\t\t\tconst attributes = geometry.attributes;\n\t\t\t\tfor ( const key in attributes ) {\n\n\t\t\t\t\tconst attribute = attributes[ key ];\n\t\t\t\t\tconst { array, itemSize } = attribute;\n\t\t\t\t\tarray.copyWithin( nextVertexStart * itemSize, vertexStart * itemSize, ( vertexStart + reservedVertexCount ) * itemSize );\n\t\t\t\t\tattribute.addUpdateRange( nextVertexStart * itemSize, reservedVertexCount * itemSize );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometryInfo.vertexStart = nextVertexStart;\n\n\t\t\t}\n\n\t\t\tnextVertexStart += geometryInfo.reservedVertexCount;\n\t\t\tgeometryInfo.start = geometry.index ? geometryInfo.indexStart : geometryInfo.vertexStart;\n\n\t\t}\n\n\t\tthis._nextIndexStart = nextIndexStart;\n\t\tthis._nextVertexStart = nextVertexStart;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the bounding box for the given geometry.\n\t *\n\t * @param {number} geometryId - The ID of the geometry to return the bounding box for.\n\t * @param {Box3} target - The target object that is used to store the method's result.\n\t * @return {?Box3} The geometry's bounding box. Returns `null` if no geometry has been found for the given ID.\n\t */\n\tgetBoundingBoxAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding box\n\t\tconst geometry = this.geometry;\n\t\tconst geometryInfo = this._geometryInfo[ geometryId ];\n\t\tif ( geometryInfo.boundingBox === null ) {\n\n\t\t\tconst box = new Box3();\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tfor ( let i = geometryInfo.start, l = geometryInfo.start + geometryInfo.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\tbox.expandByPoint( _vector$5.fromBufferAttribute( position, iv ) );\n\n\t\t\t}\n\n\t\t\tgeometryInfo.boundingBox = box;\n\n\t\t}\n\n\t\ttarget.copy( geometryInfo.boundingBox );\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Returns the bounding sphere for the given geometry.\n\t *\n\t * @param {number} geometryId - The ID of the geometry to return the bounding sphere for.\n\t * @param {Sphere} target - The target object that is used to store the method's result.\n\t * @return {?Sphere} The geometry's bounding sphere. Returns `null` if no geometry has been found for the given ID.\n\t */\n\tgetBoundingSphereAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding sphere\n\t\tconst geometry = this.geometry;\n\t\tconst geometryInfo = this._geometryInfo[ geometryId ];\n\t\tif ( geometryInfo.boundingSphere === null ) {\n\n\t\t\tconst sphere = new Sphere();\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 );\n\t\t\t_box$1.getCenter( sphere.center );\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tlet maxRadiusSq = 0;\n\t\t\tfor ( let i = geometryInfo.start, l = geometryInfo.start + geometryInfo.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\t_vector$5.fromBufferAttribute( position, iv );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, sphere.center.distanceToSquared( _vector$5 ) );\n\n\t\t\t}\n\n\t\t\tsphere.radius = Math.sqrt( maxRadiusSq );\n\t\t\tgeometryInfo.boundingSphere = sphere;\n\n\t\t}\n\n\t\ttarget.copy( geometryInfo.boundingSphere );\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Sets the given local transformation matrix to the defined instance.\n\t * Negatively scaled matrices are not supported.\n\t *\n\t * @param {number} instanceId - The ID of an instance to set the matrix of.\n\t * @param {Matrix4} matrix - A 4x4 matrix representing the local transformation of a single instance.\n\t * @return {BatchedMesh} A reference to this batched mesh.\n\t */\n\tsetMatrixAt( instanceId, matrix ) {\n\n\t\tthis.validateInstanceId( instanceId );\n\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tmatrix.toArray( matricesArray, instanceId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the local transformation matrix of the defined instance.\n\t *\n\t * @param {number} instanceId - The ID of an instance to get the matrix of.\n\t * @param {Matrix4} matrix - The target object that is used to store the method's result.\n\t * @return {Matrix4} The instance's local transformation matrix.\n\t */\n\tgetMatrixAt( instanceId, matrix ) {\n\n\t\tthis.validateInstanceId( instanceId );\n\t\treturn matrix.fromArray( this._matricesTexture.image.data, instanceId * 16 );\n\n\t}\n\n\t/**\n\t * Sets the given color to the defined instance.\n\t *\n\t * @param {number} instanceId - The ID of an instance to set the color of.\n\t * @param {Color|Vector4} color - The color to set the instance to. Use a `Vector4` to also define alpha.\n\t * @return {BatchedMesh} A reference to this batched mesh.\n\t */\n\tsetColorAt( instanceId, color ) {\n\n\t\tthis.validateInstanceId( instanceId );\n\n\t\tif ( this._colorsTexture === null ) {\n\n\t\t\tthis._initColorsTexture();\n\n\t\t}\n\n\t\tcolor.toArray( this._colorsTexture.image.data, instanceId * 4 );\n\t\tthis._colorsTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the color of the defined instance.\n\t *\n\t * @param {number} instanceId - The ID of an instance to get the color of.\n\t * @param {Color|Vector4} color - The target object that is used to store the method's result.\n\t * @return {Color|Vector4} The instance's color.  Use a `Vector4` to also retrieve alpha.\n\t */\n\tgetColorAt( instanceId, color ) {\n\n\t\tthis.validateInstanceId( instanceId );\n\t\tif ( this._colorsTexture === null ) {\n\n\t\t\tif ( color.isVector4 ) {\n\n\t\t\t\treturn color.set( 1, 1, 1, 1 );\n\n\t\t\t} else {\n\n\t\t\t\treturn color.setRGB( 1, 1, 1 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn color.fromArray( this._colorsTexture.image.data, instanceId * 4 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the visibility of the instance.\n\t *\n\t * @param {number} instanceId - The id of the instance to set the visibility of.\n\t * @param {boolean} visible - Whether the instance is visible or not.\n\t * @return {BatchedMesh} A reference to this batched mesh.\n\t */\n\tsetVisibleAt( instanceId, visible ) {\n\n\t\tthis.validateInstanceId( instanceId );\n\n\t\tif ( this._instanceInfo[ instanceId ].visible === visible ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis._instanceInfo[ instanceId ].visible = visible;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the visibility state of the defined instance.\n\t *\n\t * @param {number} instanceId - The ID of an instance to get the visibility state of.\n\t * @return {boolean} Whether the instance is visible or not.\n\t */\n\tgetVisibleAt( instanceId ) {\n\n\t\tthis.validateInstanceId( instanceId );\n\n\t\treturn this._instanceInfo[ instanceId ].visible;\n\n\t}\n\n\t/**\n\t * Sets the geometry ID of the instance at the given index.\n\t *\n\t * @param {number} instanceId - The ID of the instance to set the geometry ID of.\n\t * @param {number} geometryId - The geometry ID to be use by the instance.\n\t * @return {BatchedMesh} A reference to this batched mesh.\n\t */\n\tsetGeometryIdAt( instanceId, geometryId ) {\n\n\t\tthis.validateInstanceId( instanceId );\n\t\tthis.validateGeometryId( geometryId );\n\n\t\tthis._instanceInfo[ instanceId ].geometryIndex = geometryId;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the geometry ID of the defined instance.\n\t *\n\t * @param {number} instanceId - The ID of an instance to get the geometry ID of.\n\t * @return {number} The instance's geometry ID.\n\t */\n\tgetGeometryIdAt( instanceId ) {\n\n\t\tthis.validateInstanceId( instanceId );\n\n\t\treturn this._instanceInfo[ instanceId ].geometryIndex;\n\n\t}\n\n\t/**\n\t * Get the range representing the subset of triangles related to the attached geometry,\n\t * indicating the starting offset and count, or `null` if invalid.\n\t *\n\t * @param {number} geometryId - The id of the geometry to get the range of.\n\t * @param {Object} [target] - The target object that is used to store the method's result.\n\t * @return {{\n\t * \tvertexStart:number,vertexCount:number,reservedVertexCount:number,\n\t * \tindexStart:number,indexCount:number,reservedIndexCount:number,\n\t * \tstart:number,count:number\n\t * }} The result object with range data.\n\t */\n\tgetGeometryRangeAt( geometryId, target = {} ) {\n\n\t\tthis.validateGeometryId( geometryId );\n\n\t\tconst geometryInfo = this._geometryInfo[ geometryId ];\n\t\ttarget.vertexStart = geometryInfo.vertexStart;\n\t\ttarget.vertexCount = geometryInfo.vertexCount;\n\t\ttarget.reservedVertexCount = geometryInfo.reservedVertexCount;\n\n\t\ttarget.indexStart = geometryInfo.indexStart;\n\t\ttarget.indexCount = geometryInfo.indexCount;\n\t\ttarget.reservedIndexCount = geometryInfo.reservedIndexCount;\n\n\t\ttarget.start = geometryInfo.start;\n\t\ttarget.count = geometryInfo.count;\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Resizes the necessary buffers to support the provided number of instances.\n\t * If the provided arguments shrink the number of instances but there are not enough\n\t * unused Ids at the end of the list then an error is thrown.\n\t *\n\t * @param {number} maxInstanceCount - The max number of individual instances that can be added and rendered by the batch.\n\t*/\n\tsetInstanceCount( maxInstanceCount ) {\n\n\t\t// shrink the available instances as much as possible\n\t\tconst availableInstanceIds = this._availableInstanceIds;\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tavailableInstanceIds.sort( ascIdSort );\n\t\twhile ( availableInstanceIds[ availableInstanceIds.length - 1 ] === instanceInfo.length - 1 ) {\n\n\t\t\tinstanceInfo.pop();\n\t\t\tavailableInstanceIds.pop();\n\n\t\t}\n\n\t\t// throw an error if it can't be shrunk to the desired size\n\t\tif ( maxInstanceCount < instanceInfo.length ) {\n\n\t\t\tthrow new Error( `BatchedMesh: Instance ids outside the range ${ maxInstanceCount } are being used. Cannot shrink instance count.` );\n\n\t\t}\n\n\t\t// copy the multi draw counts\n\t\tconst multiDrawCounts = new Int32Array( maxInstanceCount );\n\t\tconst multiDrawStarts = new Int32Array( maxInstanceCount );\n\t\tcopyArrayContents( this._multiDrawCounts, multiDrawCounts );\n\t\tcopyArrayContents( this._multiDrawStarts, multiDrawStarts );\n\n\t\tthis._multiDrawCounts = multiDrawCounts;\n\t\tthis._multiDrawStarts = multiDrawStarts;\n\t\tthis._maxInstanceCount = maxInstanceCount;\n\n\t\t// update texture data for instance sampling\n\t\tconst indirectTexture = this._indirectTexture;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst colorsTexture = this._colorsTexture;\n\n\t\tindirectTexture.dispose();\n\t\tthis._initIndirectTexture();\n\t\tcopyArrayContents( indirectTexture.image.data, this._indirectTexture.image.data );\n\n\t\tmatricesTexture.dispose();\n\t\tthis._initMatricesTexture();\n\t\tcopyArrayContents( matricesTexture.image.data, this._matricesTexture.image.data );\n\n\t\tif ( colorsTexture ) {\n\n\t\t\tcolorsTexture.dispose();\n\t\t\tthis._initColorsTexture();\n\t\t\tcopyArrayContents( colorsTexture.image.data, this._colorsTexture.image.data );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Resizes the available space in the batch's vertex and index buffer attributes to the provided sizes.\n\t * If the provided arguments shrink the geometry buffers but there is not enough unused space at the\n\t * end of the geometry attributes then an error is thrown.\n\t *\n\t * @param {number} maxVertexCount - The maximum number of vertices to be used by all unique geometries to resize to.\n\t * @param {number} maxIndexCount - The maximum number of indices to be used by all unique geometries to resize to.\n\t*/\n\tsetGeometrySize( maxVertexCount, maxIndexCount ) {\n\n\t\t// Check if we can shrink to the requested vertex attribute size\n\t\tconst validRanges = [ ...this._geometryInfo ].filter( info => info.active );\n\t\tconst requiredVertexLength = Math.max( ...validRanges.map( range => range.vertexStart + range.reservedVertexCount ) );\n\t\tif ( requiredVertexLength > maxVertexCount ) {\n\n\t\t\tthrow new Error( `BatchedMesh: Geometry vertex values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );\n\n\t\t}\n\n\t\t// Check if we can shrink to the requested index attribute size\n\t\tif ( this.geometry.index ) {\n\n\t\t\tconst requiredIndexLength = Math.max( ...validRanges.map( range => range.indexStart + range.reservedIndexCount ) );\n\t\t\tif ( requiredIndexLength > maxIndexCount ) {\n\n\t\t\t\tthrow new Error( `BatchedMesh: Geometry index values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\t// dispose of the previous geometry\n\t\tconst oldGeometry = this.geometry;\n\t\toldGeometry.dispose();\n\n\t\t// recreate the geometry needed based on the previous variant\n\t\tthis._maxVertexCount = maxVertexCount;\n\t\tthis._maxIndexCount = maxIndexCount;\n\n\t\tif ( this._geometryInitialized ) {\n\n\t\t\tthis._geometryInitialized = false;\n\t\t\tthis.geometry = new BufferGeometry();\n\t\t\tthis._initializeGeometry( oldGeometry );\n\n\t\t}\n\n\t\t// copy data from the previous geometry\n\t\tconst geometry = this.geometry;\n\t\tif ( oldGeometry.index ) {\n\n\t\t\tcopyArrayContents( oldGeometry.index.array, geometry.index.array );\n\n\t\t}\n\n\t\tfor ( const key in oldGeometry.attributes ) {\n\n\t\t\tcopyArrayContents( oldGeometry.attributes[ key ].array, geometry.attributes[ key ].array );\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst batchGeometry = this.geometry;\n\n\t\t// iterate over each geometry\n\t\t_mesh.material = this.material;\n\t\t_mesh.geometry.index = batchGeometry.index;\n\t\t_mesh.geometry.attributes = batchGeometry.attributes;\n\t\tif ( _mesh.geometry.boundingBox === null ) {\n\n\t\t\t_mesh.geometry.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( _mesh.geometry.boundingSphere === null ) {\n\n\t\t\t_mesh.geometry.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( ! instanceInfo[ i ].visible || ! instanceInfo[ i ].active ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\t\t\tconst geometryInfo = geometryInfoList[ geometryId ];\n\t\t\t_mesh.geometry.setDrawRange( geometryInfo.start, geometryInfo.count );\n\n\t\t\t// get the intersects\n\t\t\tthis.getMatrixAt( i, _mesh.matrixWorld ).premultiply( matrixWorld );\n\t\t\tthis.getBoundingBoxAt( geometryId, _mesh.geometry.boundingBox );\n\t\t\tthis.getBoundingSphereAt( geometryId, _mesh.geometry.boundingSphere );\n\t\t\t_mesh.raycast( raycaster, _batchIntersects );\n\n\t\t\t// add batch id to the intersects\n\t\t\tfor ( let j = 0, l = _batchIntersects.length; j < l; j ++ ) {\n\n\t\t\t\tconst intersect = _batchIntersects[ j ];\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersect.batchId = i;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_batchIntersects.length = 0;\n\n\t\t}\n\n\t\t_mesh.material = null;\n\t\t_mesh.geometry.index = null;\n\t\t_mesh.geometry.attributes = {};\n\t\t_mesh.geometry.setDrawRange( 0, Infinity );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.geometry = source.geometry.clone();\n\t\tthis.perObjectFrustumCulled = source.perObjectFrustumCulled;\n\t\tthis.sortObjects = source.sortObjects;\n\t\tthis.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;\n\t\tthis.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;\n\n\t\tthis._geometryInfo = source._geometryInfo.map( info => ( {\n\t\t\t...info,\n\n\t\t\tboundingBox: info.boundingBox !== null ? info.boundingBox.clone() : null,\n\t\t\tboundingSphere: info.boundingSphere !== null ? info.boundingSphere.clone() : null,\n\t\t} ) );\n\t\tthis._instanceInfo = source._instanceInfo.map( info => ( { ...info } ) );\n\n\t\tthis._availableInstanceIds = source._availableInstanceIds.slice();\n\t\tthis._availableGeometryIds = source._availableGeometryIds.slice();\n\n\t\tthis._nextIndexStart = source._nextIndexStart;\n\t\tthis._nextVertexStart = source._nextVertexStart;\n\t\tthis._geometryCount = source._geometryCount;\n\n\t\tthis._maxInstanceCount = source._maxInstanceCount;\n\t\tthis._maxVertexCount = source._maxVertexCount;\n\t\tthis._maxIndexCount = source._maxIndexCount;\n\n\t\tthis._geometryInitialized = source._geometryInitialized;\n\t\tthis._multiDrawCounts = source._multiDrawCounts.slice();\n\t\tthis._multiDrawStarts = source._multiDrawStarts.slice();\n\n\t\tthis._indirectTexture = source._indirectTexture.clone();\n\t\tthis._indirectTexture.image.data = this._indirectTexture.image.data.slice();\n\n\t\tthis._matricesTexture = source._matricesTexture.clone();\n\t\tthis._matricesTexture.image.data = this._matricesTexture.image.data.slice();\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture = source._colorsTexture.clone();\n\t\t\tthis._colorsTexture.image.data = this._colorsTexture.image.data.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\t// Assuming the geometry is not shared with other meshes\n\t\tthis.geometry.dispose();\n\n\t\tthis._matricesTexture.dispose();\n\t\tthis._matricesTexture = null;\n\n\t\tthis._indirectTexture.dispose();\n\t\tthis._indirectTexture = null;\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture.dispose();\n\t\t\tthis._colorsTexture = null;\n\n\t\t}\n\n\t}\n\n\tonBeforeRender( renderer, scene, camera, geometry, material/*, _group*/ ) {\n\n\t\t// if visibility has not changed and frustum culling and object sorting is not required\n\t\t// then skip iterating over all items\n\t\tif ( ! this._visibilityChanged && ! this.perObjectFrustumCulled && ! this.sortObjects ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// the indexed version of the multi draw function requires specifying the start\n\t\t// offset in bytes.\n\t\tconst index = geometry.getIndex();\n\t\tlet bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;\n\n\n\t\t// the \"wireframe\" attribute implicitly creates a line attribute in the renderer, which is double\n\t\t// the vertices to draw (3 lines per triangle) so we multiply the draw counts / starts and make\n\t\t// assumptions about the index buffer byte size.\n\t\tlet multiDrawMultiplier = 1;\n\t\tif ( material.wireframe ) {\n\n\t\t\tmultiDrawMultiplier = 2;\n\t\t\tbytesPerElement = geometry.attributes.position.count > 65535 ? 4 : 2;\n\n\t\t}\n\n\t\tconst instanceInfo = this._instanceInfo;\n\t\tconst multiDrawStarts = this._multiDrawStarts;\n\t\tconst multiDrawCounts = this._multiDrawCounts;\n\t\tconst geometryInfoList = this._geometryInfo;\n\t\tconst perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\tconst indirectTexture = this._indirectTexture;\n\t\tconst indirectArray = indirectTexture.image.data;\n\n\t\tconst frustum = camera.isArrayCamera ? _frustumArray : _frustum;\n\t\t// prepare the frustum in the local frame\n\t\tif ( perObjectFrustumCulled && ! camera.isArrayCamera ) {\n\n\t\t\t_matrix$1\n\t\t\t\t.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )\n\t\t\t\t.multiply( this.matrixWorld );\n\n\t\t\t_frustum.setFromProjectionMatrix(\n\t\t\t\t_matrix$1,\n\t\t\t\tcamera.coordinateSystem,\n\t\t\t\tcamera.reversedDepth\n\t\t\t);\n\n\t\t}\n\n\t\tlet multiDrawCount = 0;\n\t\tif ( this.sortObjects ) {\n\n\t\t\t// get the camera position in the local frame\n\t\t\t_matrix$1.copy( this.matrixWorld ).invert();\n\t\t\t_vector$5.setFromMatrixPosition( camera.matrixWorld ).applyMatrix4( _matrix$1 );\n\t\t\t_forward$1.set( 0, 0, -1 ).transformDirection( camera.matrixWorld ).transformDirection( _matrix$1 );\n\n\t\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( instanceInfo[ i ].visible && instanceInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\tculled = ! frustum.intersectsSphere( _sphere$2, camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\t// get the distance from camera used for sorting\n\t\t\t\t\t\tconst geometryInfo = geometryInfoList[ geometryId ];\n\t\t\t\t\t\tconst z = _temp.subVectors( _sphere$2.center, _vector$5 ).dot( _forward$1 );\n\t\t\t\t\t\t_renderList.push( geometryInfo.start, geometryInfo.count, z, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Sort the draw ranges and prep for rendering\n\t\t\tconst list = _renderList.list;\n\t\t\tconst customSort = this.customSort;\n\t\t\tif ( customSort === null ) {\n\n\t\t\t\tlist.sort( material.transparent ? sortTransparent : sortOpaque );\n\n\t\t\t} else {\n\n\t\t\t\tcustomSort.call( this, list, camera );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = list.length; i < l; i ++ ) {\n\n\t\t\t\tconst item = list[ i ];\n\t\t\t\tmultiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement * multiDrawMultiplier;\n\t\t\t\tmultiDrawCounts[ multiDrawCount ] = item.count * multiDrawMultiplier;\n\t\t\t\tindirectArray[ multiDrawCount ] = item.index;\n\t\t\t\tmultiDrawCount ++;\n\n\t\t\t}\n\n\t\t\t_renderList.reset();\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( instanceInfo[ i ].visible && instanceInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = instanceInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\t\t\t\tculled = ! frustum.intersectsSphere( _sphere$2, camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\tconst geometryInfo = geometryInfoList[ geometryId ];\n\t\t\t\t\t\tmultiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement * multiDrawMultiplier;\n\t\t\t\t\t\tmultiDrawCounts[ multiDrawCount ] = geometryInfo.count * multiDrawMultiplier;\n\t\t\t\t\t\tindirectArray[ multiDrawCount ] = i;\n\t\t\t\t\t\tmultiDrawCount ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tindirectTexture.needsUpdate = true;\n\t\tthis._multiDrawCount = multiDrawCount;\n\t\tthis._visibilityChanged = false;\n\n\t}\n\n\tonBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial/* , group */ ) {\n\n\t\tthis.onBeforeRender( renderer, null, shadowCamera, geometry, depthMaterial );\n\n\t}\n\n}\n\n/**\n * A material for rendering line primitives.\n *\n * Materials define the appearance of renderable 3D objects.\n *\n * ```js\n * const material = new THREE.LineBasicMaterial( { color: 0xffffff } );\n * ```\n *\n * @augments Material\n */\nclass LineBasicMaterial extends Material {\n\n\t/**\n\t * Constructs a new line basic material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineBasicMaterial = true;\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.color = new Color( 0xffffff );\n\n\t\t/**\n\t\t * Sets the color of the lines using data from a texture. The texture map\n\t\t * color is modulated by the diffuse `color`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * Controls line thickness or lines.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}. WebGL and WebGPU\n\t\t * ignore this setting and always render line primitives with a\n\t\t * width of one pixel.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.linewidth = 1;\n\n\t\t/**\n\t\t * Defines appearance of line ends.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('butt'|'round'|'square')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.linecap = 'round';\n\n\t\t/**\n\t\t * Defines appearance of line joints.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.linejoin = 'round';\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vStart = /*@__PURE__*/ new Vector3();\nconst _vEnd = /*@__PURE__*/ new Vector3();\n\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nconst _intersectPointOnRay = /*@__PURE__*/ new Vector3();\nconst _intersectPointOnSegment = /*@__PURE__*/ new Vector3();\n\n/**\n * A continuous line. The line are rendered by connecting consecutive\n * vertices with straight lines.\n *\n * ```js\n * const material = new THREE.LineBasicMaterial( { color: 0x0000ff } );\n *\n * const points = [];\n * points.push( new THREE.Vector3( - 10, 0, 0 ) );\n * points.push( new THREE.Vector3( 0, 10, 0 ) );\n * points.push( new THREE.Vector3( 10, 0, 0 ) );\n *\n * const geometry = new THREE.BufferGeometry().setFromPoints( points );\n *\n * const line = new THREE.Line( geometry, material );\n * scene.add( line );\n * ```\n *\n * @augments Object3D\n */\nclass Line extends Object3D {\n\n\t/**\n\t * Constructs a new line.\n\t *\n\t * @param {BufferGeometry} [geometry] - The line geometry.\n\t * @param {Material|Array<Material>} [material] - The line material.\n\t */\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLine = true;\n\n\t\tthis.type = 'Line';\n\n\t\t/**\n\t\t * The line geometry.\n\t\t *\n\t\t * @type {BufferGeometry}\n\t\t */\n\t\tthis.geometry = geometry;\n\n\t\t/**\n\t\t * The line material.\n\t\t *\n\t\t * @type {Material|Array<Material>}\n\t\t * @default LineBasicMaterial\n\t\t */\n\t\tthis.material = material;\n\n\t\t/**\n\t\t * A dictionary representing the morph targets in the geometry. The key is the\n\t\t * morph targets name, the value its attribute index. This member is `undefined`\n\t\t * by default and only set when morph targets are detected in the geometry.\n\t\t *\n\t\t * @type {Object<string,number>|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.morphTargetDictionary = undefined;\n\n\t\t/**\n\t\t * An array of weights typically in the range `[0,1]` that specify how much of the morph\n\t\t * is applied. This member is `undefined` by default and only set when morph targets are\n\t\t * detected in the geometry.\n\t\t *\n\t\t * @type {Array<number>|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.morphTargetInfluences = undefined;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes an array of distance values which are necessary for rendering dashed lines.\n\t * For each vertex in the geometry, the method calculates the cumulative length from the\n\t * current point to the very beginning of the line.\n\t *\n\t * @return {Line} A reference to this line.\n\t */\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t_vStart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t_vEnd.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += _vStart.distanceTo( _vEnd );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\twarn( 'Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes intersection points between a casted ray and this line.\n\t *\n\t * @param {Raycaster} raycaster - The raycaster.\n\t * @param {Array<Object>} intersects - The target array that holds the intersection points.\n\t */\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b, i );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst a = index.getX( end - 1 );\n\t\t\t\tconst b = index.getX( start );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b, end - 1 );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, i, i + 1, i );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, end - 1, start, end - 1 );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the values of {@link Line#morphTargetDictionary} and {@link Line#morphTargetInfluences}\n\t * to make sure existing morph targets can influence this 3D object.\n\t */\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, raycaster, ray, thresholdSq, a, b, i ) {\n\n\tconst positionAttribute = object.geometry.attributes.position;\n\n\t_vStart.fromBufferAttribute( positionAttribute, a );\n\t_vEnd.fromBufferAttribute( positionAttribute, b );\n\n\tconst distSq = ray.distanceSqToSegment( _vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment );\n\n\tif ( distSq > thresholdSq ) return;\n\n\t_intersectPointOnRay.applyMatrix4( object.matrixWorld ); // Move back to world space for distance calculation\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectPointOnRay );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\treturn {\n\n\t\tdistance: distance,\n\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t// point: raycaster.ray.at( distance ),\n\t\tpoint: _intersectPointOnSegment.clone().applyMatrix4( object.matrixWorld ),\n\t\tindex: i,\n\t\tface: null,\n\t\tfaceIndex: null,\n\t\tbarycoord: null,\n\t\tobject: object\n\n\t};\n\n}\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\n/**\n * A series of lines drawn between pairs of vertices.\n *\n * @augments Line\n */\nclass LineSegments extends Line {\n\n\t/**\n\t * Constructs a new line segments.\n\t *\n\t * @param {BufferGeometry} [geometry] - The line geometry.\n\t * @param {Material|Array<Material>} [material] - The line material.\n\t */\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineSegments = true;\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [];\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\twarn( 'LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A continuous line. This is nearly the same as {@link Line} the only difference\n * is that the last vertex is connected with the first vertex in order to close\n * the line to form a loop.\n *\n * @augments Line\n */\nclass LineLoop extends Line {\n\n\t/**\n\t * Constructs a new line loop.\n\t *\n\t * @param {BufferGeometry} [geometry] - The line geometry.\n\t * @param {Material|Array<Material>} [material] - The line material.\n\t */\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineLoop = true;\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\n/**\n * A material for rendering point primitives.\n *\n * Materials define the appearance of renderable 3D objects.\n *\n * ```js\n * const vertices = [];\n *\n * for ( let i = 0; i < 10000; i ++ ) {\n * \tconst x = THREE.MathUtils.randFloatSpread( 2000 );\n * \tconst y = THREE.MathUtils.randFloatSpread( 2000 );\n * \tconst z = THREE.MathUtils.randFloatSpread( 2000 );\n *\n * \tvertices.push( x, y, z );\n * }\n *\n * const geometry = new THREE.BufferGeometry();\n * geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );\n * const material = new THREE.PointsMaterial( { color: 0x888888 } );\n * const points = new THREE.Points( geometry, material );\n * scene.add( points );\n * ```\n *\n * @augments Material\n */\nclass PointsMaterial extends Material {\n\n\t/**\n\t * Constructs a new points material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPointsMaterial = true;\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.color = new Color( 0xffffff );\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map\n\t\t * color is modulated by the diffuse `color`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * Defines the size of the points in pixels.\n\t\t *\n\t\t * Might be capped if the value exceeds hardware dependent parameters like [gl.ALIASED_POINT_SIZE_RANGE](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getParamete).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.size = 1;\n\n\t\t/**\n\t\t * Specifies whether size of individual points is attenuated by the camera depth (perspective camera only).\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.sizeAttenuation = true;\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$3 = /*@__PURE__*/ new Vector3();\n\n/**\n * A class for displaying points or point clouds.\n *\n * @augments Object3D\n */\nclass Points extends Object3D {\n\n\t/**\n\t * Constructs a new point cloud.\n\t *\n\t * @param {BufferGeometry} [geometry] - The points geometry.\n\t * @param {Material|Array<Material>} [material] - The points material.\n\t */\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPoints = true;\n\n\t\tthis.type = 'Points';\n\n\t\t/**\n\t\t * The points geometry.\n\t\t *\n\t\t * @type {BufferGeometry}\n\t\t */\n\t\tthis.geometry = geometry;\n\n\t\t/**\n\t\t * The line material.\n\t\t *\n\t\t * @type {Material|Array<Material>}\n\t\t * @default PointsMaterial\n\t\t */\n\t\tthis.material = material;\n\n\t\t/**\n\t\t * A dictionary representing the morph targets in the geometry. The key is the\n\t\t * morph targets name, the value its attribute index. This member is `undefined`\n\t\t * by default and only set when morph targets are detected in the geometry.\n\t\t *\n\t\t * @type {Object<string,number>|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.morphTargetDictionary = undefined;\n\n\t\t/**\n\t\t * An array of weights typically in the range `[0,1]` that specify how much of the morph\n\t\t * is applied. This member is `undefined` by default and only set when morph targets are\n\t\t * detected in the geometry.\n\t\t *\n\t\t * @type {Array<number>|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.morphTargetInfluences = undefined;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes intersection points between a casted ray and this point cloud.\n\t *\n\t * @param {Raycaster} raycaster - The raycaster.\n\t * @param {Array<Object>} intersects - The target array that holds the intersection points.\n\t */\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t_position$3.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\ttestPoint( _position$3, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t_position$3.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\ttestPoint( _position$3, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the values of {@link Points#morphTargetDictionary} and {@link Points#morphTargetInfluences}\n\t * to make sure existing morph targets can influence this 3D object.\n\t */\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tfaceIndex: null,\n\t\t\tbarycoord: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * A texture for use with a video.\n *\n * ```js\n * // assuming you have created a HTML video element with id=\"video\"\n * const video = document.getElementById( 'video' );\n * const texture = new THREE.VideoTexture( video );\n * ```\n *\n * Note: When using video textures with {@link WebGPURenderer}, {@link Texture#colorSpace} must be\n * set to THREE.SRGBColorSpace.\n *\n * Note: After the initial use of a texture, its dimensions, format, and type\n * cannot be changed. Instead, call {@link Texture#dispose} on the texture and instantiate a new one.\n *\n * @augments Texture\n */\nclass VideoTexture extends Texture {\n\n\t/**\n\t * Constructs a new video texture.\n\t *\n\t * @param {HTMLVideoElement} video - The video element to use as a data source for the texture.\n\t * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=LinearFilter] - The mag filter value.\n\t * @param {number} [minFilter=LinearFilter] - The min filter value.\n\t * @param {number} [format=RGBAFormat] - The texture format.\n\t * @param {number} [type=UnsignedByteType] - The texture type.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t */\n\tconstructor( video, mapping, wrapS, wrapT, magFilter = LinearFilter, minFilter = LinearFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isVideoTexture = true;\n\n\t\t/**\n\t\t * Whether to generate mipmaps (if possible) for a texture.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.generateMipmaps = false;\n\n\t\t/**\n\t\t * The video frame request callback identifier, which is a positive integer.\n\t\t *\n\t\t * Value of 0 represents no scheduled rVFC.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t */\n\t\tthis._requestVideoFrameCallbackId = 0;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tscope._requestVideoFrameCallbackId = video.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tthis._requestVideoFrameCallbackId = video.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\t/**\n\t * This method is called automatically by the renderer and sets {@link Texture#needsUpdate}\n\t * to `true` every time a new frame is available.\n\t *\n\t * Only relevant if `requestVideoFrameCallback` is not supported in the browser.\n\t */\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this._requestVideoFrameCallbackId !== 0 ) {\n\n\t\t\tthis.source.data.cancelVideoFrameCallback( this._requestVideoFrameCallbackId );\n\n\t\t\tthis._requestVideoFrameCallbackId = 0;\n\n\t\t}\n\n\t\tsuper.dispose();\n\n\t}\n\n}\n\n/**\n * This class can be used as an alternative way to define video data. Instead of using\n * an instance of `HTMLVideoElement` like with `VideoTexture`, `VideoFrameTexture` expects each frame is\n * defined manually via {@link VideoFrameTexture#setFrame}. A typical use case for this module is when\n * video frames are decoded with the WebCodecs API.\n *\n * ```js\n * const texture = new THREE.VideoFrameTexture();\n * texture.setFrame( frame );\n * ```\n *\n * @augments VideoTexture\n */\nclass VideoFrameTexture extends VideoTexture {\n\n\t/**\n\t * Constructs a new video frame texture.\n\t *\n\t * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=LinearFilter] - The mag filter value.\n\t * @param {number} [minFilter=LinearFilter] - The min filter value.\n\t * @param {number} [format=RGBAFormat] - The texture format.\n\t * @param {number} [type=UnsignedByteType] - The texture type.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t */\n\tconstructor( mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( {}, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isVideoFrameTexture = true;\n\n\t}\n\n\t/**\n\t * This method overwritten with an empty implementation since\n\t * this type of texture is updated via `setFrame()`.\n\t */\n\tupdate() {}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this ); // restoring Texture.clone()\n\n\t}\n\n\t/**\n\t * Sets the current frame of the video. This will automatically update the texture\n\t * so the data can be used for rendering.\n\t *\n\t * @param {VideoFrame} frame - The video frame.\n\t */\n\tsetFrame( frame ) {\n\n\t\tthis.image = frame;\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * This class can only be used in combination with `copyFramebufferToTexture()` methods\n * of renderers. It extracts the contents of the current bound framebuffer and provides it\n * as a texture for further usage.\n *\n * ```js\n * const pixelRatio = window.devicePixelRatio;\n * const textureSize = 128 * pixelRatio;\n *\n * const frameTexture = new FramebufferTexture( textureSize, textureSize );\n *\n * // calculate start position for copying part of the frame data\n * const vector = new Vector2();\n * vector.x = ( window.innerWidth * pixelRatio / 2 ) - ( textureSize / 2 );\n * vector.y = ( window.innerHeight * pixelRatio / 2 ) - ( textureSize / 2 );\n *\n * renderer.render( scene, camera );\n *\n * // copy part of the rendered frame into the framebuffer texture\n * renderer.copyFramebufferToTexture( frameTexture, vector );\n * ```\n *\n * @augments Texture\n */\nclass FramebufferTexture extends Texture {\n\n\t/**\n\t * Constructs a new framebuffer texture.\n\t *\n\t * @param {number} [width] - The width of the texture.\n\t * @param {number} [height] - The height of the texture.\n\t */\n\tconstructor( width, height ) {\n\n\t\tsuper( { width, height } );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isFramebufferTexture = true;\n\n\t\t/**\n\t\t * How the texture is sampled when a texel covers more than one pixel.\n\t\t *\n\t\t * Overwritten and set to `NearestFilter` by default to disable filtering.\n\t\t *\n\t\t * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}\n\t\t * @default NearestFilter\n\t\t */\n\t\tthis.magFilter = NearestFilter;\n\n\t\t/**\n\t\t * How the texture is sampled when a texel covers less than one pixel.\n\t\t *\n\t\t * Overwritten and set to `NearestFilter` by default to disable filtering.\n\t\t *\n\t\t * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}\n\t\t * @default NearestFilter\n\t\t */\n\t\tthis.minFilter = NearestFilter;\n\n\t\t/**\n\t\t * Whether to generate mipmaps (if possible) for a texture.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * Creates a texture based on data in compressed form.\n *\n * These texture are usually loaded with {@link CompressedTextureLoader}.\n *\n * @augments Texture\n */\nclass CompressedTexture extends Texture {\n\n\t/**\n\t * Constructs a new compressed texture.\n\t *\n\t * @param {Array<Object>} mipmaps - This array holds for all mipmaps (including the bases mip)\n\t * the data and dimensions.\n\t * @param {number} width - The width of the texture.\n\t * @param {number} height - The height of the texture.\n\t * @param {number} [format=RGBAFormat] - The texture format.\n\t * @param {number} [type=UnsignedByteType] - The texture type.\n\t * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=LinearFilter] - The mag filter value.\n\t * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t * @param {string} [colorSpace=NoColorSpace] - The color space.\n\t */\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCompressedTexture = true;\n\n\t\t/**\n\t\t * The image property of a compressed texture just defines its dimensions.\n\t\t *\n\t\t * @type {{width:number,height:number}}\n\t\t */\n\t\tthis.image = { width: width, height: height };\n\n\t\t/**\n\t\t * This array holds for all mipmaps (including the bases mip) the data and dimensions.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.mipmaps = mipmaps;\n\n\t\t/**\n\t\t * If set to `true`, the texture is flipped along the vertical axis when\n\t\t * uploaded to the GPU.\n\t\t *\n\t\t * Overwritten and set to `false` by default since it is not possible to\n\t\t * flip compressed textures.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t * @readonly\n\t\t */\n\t\tthis.flipY = false;\n\n\t\t/**\n\t\t * Whether to generate mipmaps (if possible) for a texture.\n\t\t *\n\t\t * Overwritten and set to `false` by default since it is not\n\t\t * possible to generate mipmaps for compressed data. Mipmaps\n\t\t * must be embedded in the compressed texture file.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t * @readonly\n\t\t */\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\n/**\n * Creates a texture 2D array based on data in compressed form.\n *\n * These texture are usually loaded with {@link CompressedTextureLoader}.\n *\n * @augments CompressedTexture\n */\nclass CompressedArrayTexture extends CompressedTexture {\n\n\t/**\n\t * Constructs a new compressed array texture.\n\t *\n\t * @param {Array<Object>} mipmaps - This array holds for all mipmaps (including the bases mip)\n\t * the data and dimensions.\n\t * @param {number} width - The width of the texture.\n\t * @param {number} height - The height of the texture.\n\t * @param {number} depth - The depth of the texture.\n\t * @param {number} [format=RGBAFormat] - The min filter value.\n\t * @param {number} [type=UnsignedByteType] - The min filter value.\n\t */\n\tconstructor( mipmaps, width, height, depth, format, type ) {\n\n\t\tsuper( mipmaps, width, height, format, type );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCompressedArrayTexture = true;\n\n\t\t/**\n\t\t * The image property of a compressed texture just defines its dimensions.\n\t\t *\n\t\t * @name CompressedArrayTexture#image\n\t\t * @type {{width:number,height:number,depth:number}}\n\t\t */\n\t\tthis.image.depth = depth;\n\n\t\t/**\n\t\t * This defines how the texture is wrapped in the depth and corresponds to\n\t\t * *W* in UVW mapping.\n\t\t *\n\t\t * @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}\n\t\t * @default ClampToEdgeWrapping\n\t\t */\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\t/**\n\t\t * A set of all layers which need to be updated in the texture.\n\t\t *\n\t\t * @type {Set<number>}\n\t\t */\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\t/**\n\t * Describes that a specific layer of the texture needs to be updated.\n\t * Normally when {@link Texture#needsUpdate} is set to `true`, the\n\t * entire compressed texture array is sent to the GPU. Marking specific\n\t * layers will only transmit subsets of all mipmaps associated with a\n\t * specific depth in the array which is often much more performant.\n\t *\n\t * @param {number} layerIndex - The layer index that should be updated.\n\t */\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\t/**\n\t * Resets the layer updates registry.\n\t */\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\n/**\n * Creates a cube texture based on data in compressed form.\n *\n * These texture are usually loaded with {@link CompressedTextureLoader}.\n *\n * @augments CompressedTexture\n */\nclass CompressedCubeTexture extends CompressedTexture {\n\n\t/**\n\t * Constructs a new compressed texture.\n\t *\n\t * @param {Array<CompressedTexture>} images - An array of compressed textures.\n\t * @param {number} [format=RGBAFormat] - The texture format.\n\t * @param {number} [type=UnsignedByteType] - The texture type.\n\t */\n\tconstructor( images, format, type ) {\n\n\t\tsuper( undefined, images[ 0 ].width, images[ 0 ].height, format, type, CubeReflectionMapping );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCompressedCubeTexture = true;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.image = images;\n\n\t}\n\n}\n\n/**\n * Creates a cube texture made up of six images.\n *\n * ```js\n * const loader = new THREE.CubeTextureLoader();\n * loader.setPath( 'textures/cube/pisa/' );\n *\n * const textureCube = loader.load( [\n * \t'px.png', 'nx.png', 'py.png', 'ny.png', 'pz.png', 'nz.png'\n * ] );\n *\n * const material = new THREE.MeshBasicMaterial( { color: 0xffffff, envMap: textureCube } );\n * ```\n *\n * @augments Texture\n */\nclass CubeTexture extends Texture {\n\n\t/**\n\t * Constructs a new cube texture.\n\t *\n\t * @param {Array<Image>} [images=[]] - An array holding a image for each side of a cube.\n\t * @param {number} [mapping=CubeReflectionMapping] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=LinearFilter] - The mag filter value.\n\t * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.\n\t * @param {number} [format=RGBAFormat] - The texture format.\n\t * @param {number} [type=UnsignedByteType] - The texture type.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t * @param {string} [colorSpace=NoColorSpace] - The color space value.\n\t */\n\tconstructor( images = [], mapping = CubeReflectionMapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCubeTexture = true;\n\n\t\t/**\n\t\t * If set to `true`, the texture is flipped along the vertical axis when\n\t\t * uploaded to the GPU.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flipY = false;\n\n\t}\n\n\t/**\n\t * Alias for {@link CubeTexture#image}.\n\t *\n\t * @type {Array<Image>}\n\t */\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\n/**\n * Creates a texture from a canvas element.\n *\n * This is almost the same as the base texture class, except that it sets {@link Texture#needsUpdate}\n * to `true` immediately since a canvas can directly be used for rendering.\n *\n * @augments Texture\n */\nclass CanvasTexture extends Texture {\n\n\t/**\n\t * Constructs a new texture.\n\t *\n\t * @param {HTMLCanvasElement} [canvas] - The HTML canvas element.\n\t * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=LinearFilter] - The mag filter value.\n\t * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.\n\t * @param {number} [format=RGBAFormat] - The texture format.\n\t * @param {number} [type=UnsignedByteType] - The texture type.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t */\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCanvasTexture = true;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * Creates a texture from an HTML element.\n *\n * This is almost the same as the base texture class, except that it sets {@link Texture#needsUpdate}\n * to `true` immediately and listens for the parent canvas's paint events to trigger updates.\n *\n * @augments Texture\n */\nclass HTMLTexture extends Texture {\n\n\t/**\n\t * Constructs a new texture.\n\t *\n\t * @param {HTMLElement} [element] - The HTML element.\n\t * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=LinearFilter] - The mag filter value.\n\t * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.\n\t * @param {number} [format=RGBAFormat] - The texture format.\n\t * @param {number} [type=UnsignedByteType] - The texture type.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t */\n\tconstructor( element, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( element, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isHTMLTexture = true;\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.needsUpdate = true;\n\n\t\tconst parent = element ? element.parentNode : null;\n\n\t\tif ( parent !== null && 'requestPaint' in parent ) {\n\n\t\t\tparent.onpaint = () => {\n\n\t\t\t\tthis.needsUpdate = true;\n\n\t\t\t};\n\n\t\t\tparent.requestPaint();\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tconst parent = this.image ? this.image.parentNode : null;\n\n\t\tif ( parent !== null && 'onpaint' in parent ) {\n\n\t\t\tparent.onpaint = null;\n\n\t\t}\n\n\t\tsuper.dispose();\n\n\t}\n\n}\n\n/**\n * This class can be used to automatically save the depth information of a\n * rendering into a texture.\n *\n * @augments Texture\n */\nclass DepthTexture extends Texture {\n\n\t/**\n\t * Constructs a new depth texture.\n\t *\n\t * @param {number} width - The width of the texture.\n\t * @param {number} height - The height of the texture.\n\t * @param {number} [type=UnsignedIntType] - The texture type.\n\t * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=LinearFilter] - The mag filter value.\n\t * @param {number} [minFilter=LinearFilter] - The min filter value.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t * @param {number} [format=DepthFormat] - The texture format.\n\t * @param {number} [depth=1] - The depth of the texture.\n\t */\n\tconstructor( width, height, type = UnsignedIntType, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat, depth = 1 ) {\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tconst image = { width: width, height: height, depth: depth };\n\n\t\tsuper( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isDepthTexture = true;\n\n\t\t/**\n\t\t * If set to `true`, the texture is flipped along the vertical axis when\n\t\t * uploaded to the GPU.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flipY = false;\n\n\t\t/**\n\t\t * Whether to generate mipmaps (if possible) for a texture.\n\t\t *\n\t\t * Overwritten and set to `false` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.generateMipmaps = false;\n\n\t\t/**\n\t\t * Code corresponding to the depth compare function.\n\t\t *\n\t\t * @type {?(NeverCompare|LessCompare|EqualCompare|LessEqualCompare|GreaterCompare|NotEqualCompare|GreaterEqualCompare|AlwaysCompare)}\n\t\t * @default null\n\t\t */\n\t\tthis.compareFunction = null;\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.source = new Source( Object.assign( {}, source.image ) ); // see #30540\n\t\tthis.compareFunction = source.compareFunction;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.compareFunction !== null ) data.compareFunction = this.compareFunction;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * This class can be used to automatically save the depth information of a\n * cube rendering into a cube texture with depth format. Used for PointLight shadows.\n *\n * @augments DepthTexture\n */\nclass CubeDepthTexture extends DepthTexture {\n\n\t/**\n\t * Constructs a new cube depth texture.\n\t *\n\t * @param {number} size - The size (width and height) of each cube face.\n\t * @param {number} [type=UnsignedIntType] - The texture type.\n\t * @param {number} [mapping=CubeReflectionMapping] - The texture mapping.\n\t * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.\n\t * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.\n\t * @param {number} [magFilter=NearestFilter] - The mag filter value.\n\t * @param {number} [minFilter=NearestFilter] - The min filter value.\n\t * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.\n\t * @param {number} [format=DepthFormat] - The texture format.\n\t */\n\tconstructor( size, type = UnsignedIntType, mapping = CubeReflectionMapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {\n\n\t\t// Create 6 identical image descriptors for the cube faces\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\t// Call DepthTexture constructor with width, height\n\t\tsuper( size, size, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format );\n\n\t\t// Replace the single image with the array of 6 images\n\t\tthis.image = images;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCubeDepthTexture = true;\n\n\t\t/**\n\t\t * Set to true for cube texture handling in WebGLTextures.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCubeTexture = true;\n\n\t}\n\n\t/**\n\t * Alias for {@link CubeDepthTexture#image}.\n\t *\n\t * @type {Array<Image>}\n\t */\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\n/**\n * Represents a texture created externally with the same renderer context.\n *\n * This may be a texture from a protected media stream, device camera feed,\n * or other data feeds like a depth sensor.\n *\n * Note that this class is only supported in {@link WebGLRenderer}, and in\n * the {@link WebGPURenderer} WebGPU backend.\n *\n * @augments Texture\n */\nclass ExternalTexture extends Texture {\n\n\t/**\n\t * Creates a new raw texture.\n\t *\n\t * @param {?(WebGLTexture|GPUTexture)} [sourceTexture=null] - The external texture.\n\t */\n\tconstructor( sourceTexture = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The external source texture.\n\t\t *\n\t\t * @type {?(WebGLTexture|GPUTexture)}\n\t\t * @default null\n\t\t */\n\t\tthis.sourceTexture = sourceTexture;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isExternalTexture = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sourceTexture = source.sourceTexture;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A geometry class for a rectangular cuboid with a given width, height, and depth.\n * On creation, the cuboid is centred on the origin, with each edge parallel to one\n * of the axes.\n *\n * ```js\n * const geometry = new THREE.BoxGeometry( 1, 1, 1 );\n * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );\n * const cube = new THREE.Mesh( geometry, material );\n * scene.add( cube );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#BoxGeometry\n */\nclass BoxGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new box geometry.\n\t *\n\t * @param {number} [width=1] - The width. That is, the length of the edges parallel to the X axis.\n\t * @param {number} [height=1] - The height. That is, the length of the edges parallel to the Y axis.\n\t * @param {number} [depth=1] - The depth. That is, the length of the edges parallel to the Z axis.\n\t * @param {number} [widthSegments=1] - Number of segmented rectangular faces along the width of the sides.\n\t * @param {number} [heightSegments=1] - Number of segmented rectangular faces along the height of the sides.\n\t * @param {number} [depthSegments=1] - Number of segmented rectangular faces along the depth of the sides.\n\t */\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', -1, -1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, -1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, -1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, -1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', -1, -1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : -1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {BoxGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * A geometry class for representing a capsule.\n *\n * ```js\n * const geometry = new THREE.CapsuleGeometry( 1, 1, 4, 8, 1 );\n * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );\n * const capsule = new THREE.Mesh( geometry, material );\n * scene.add( capsule );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#CapsuleGeometry\n */\nclass CapsuleGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new capsule geometry.\n\t *\n\t * @param {number} [radius=1] - Radius of the capsule.\n\t * @param {number} [height=1] - Height of the middle section.\n\t * @param {number} [capSegments=4] - Number of curve segments used to build each cap.\n\t * @param {number} [radialSegments=8] - Number of segmented faces around the circumference of the capsule. Must be an integer >= 3.\n\t * @param {number} [heightSegments=1] - Number of rows of faces along the height of the middle section. Must be an integer >= 1.\n\t */\n\tconstructor( radius = 1, height = 1, capSegments = 4, radialSegments = 8, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CapsuleGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tcapSegments: capSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t};\n\n\t\theight = Math.max( 0, height );\n\t\tcapSegments = Math.max( 1, Math.floor( capSegments ) );\n\t\tradialSegments = Math.max( 3, Math.floor( radialSegments ) );\n\t\theightSegments = Math.max( 1, Math.floor( heightSegments ) );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst halfHeight = height / 2;\n\t\tconst capArcLength = ( Math.PI / 2 ) * radius;\n\t\tconst cylinderPartLength = height;\n\t\tconst totalArcLength = 2 * capArcLength + cylinderPartLength;\n\n\t\tconst numVerticalSegments = capSegments * 2 + heightSegments;\n\t\tconst verticesPerRow = radialSegments + 1;\n\n\t\tconst normal = new Vector3();\n\t\tconst vertex = new Vector3();\n\n\t\t// generate vertices, normals, and uvs\n\n\t\tfor ( let iy = 0; iy <= numVerticalSegments; iy ++ ) {\n\n\t\t\tlet currentArcLength = 0;\n\t\t\tlet profileY = 0;\n\t\t\tlet profileRadius = 0;\n\t\t\tlet normalYComponent = 0;\n\n\t\t\tif ( iy <= capSegments ) {\n\n\t\t\t\t// bottom cap\n\t\t\t\tconst segmentProgress = iy / capSegments;\n\t\t\t\tconst angle = ( segmentProgress * Math.PI ) / 2;\n\t\t\t\tprofileY = - halfHeight - radius * Math.cos( angle );\n\t\t\t\tprofileRadius = radius * Math.sin( angle );\n\t\t\t\tnormalYComponent = - radius * Math.cos( angle );\n\t\t\t\tcurrentArcLength = segmentProgress * capArcLength;\n\n\t\t\t} else if ( iy <= capSegments + heightSegments ) {\n\n\t\t\t\t// middle section\n\t\t\t\tconst segmentProgress = ( iy - capSegments ) / heightSegments;\n\t\t\t\tprofileY = - halfHeight + segmentProgress * height;\n\t\t\t\tprofileRadius = radius;\n\t\t\t\tnormalYComponent = 0;\n\t\t\t\tcurrentArcLength = capArcLength + segmentProgress * cylinderPartLength;\n\n\t\t\t} else {\n\n\t\t\t\t// top cap\n\t\t\t\tconst segmentProgress =\n\t\t\t\t\t( iy - capSegments - heightSegments ) / capSegments;\n\t\t\t\tconst angle = ( segmentProgress * Math.PI ) / 2;\n\t\t\t\tprofileY = halfHeight + radius * Math.sin( angle );\n\t\t\t\tprofileRadius = radius * Math.cos( angle );\n\t\t\t\tnormalYComponent = radius * Math.sin( angle );\n\t\t\t\tcurrentArcLength =\n\t\t\t\t\tcapArcLength + cylinderPartLength + segmentProgress * capArcLength;\n\n\t\t\t}\n\n\t\t\tconst v = Math.max( 0, Math.min( 1, currentArcLength / totalArcLength ) );\n\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy === 0 ) {\n\n\t\t\t\tuOffset = 0.5 / radialSegments;\n\n\t\t\t} else if ( iy === numVerticalSegments ) {\n\n\t\t\t\tuOffset = -0.5 / radialSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= radialSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / radialSegments;\n\t\t\t\tconst theta = u * Math.PI * 2;\n\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - profileRadius * cosTheta;\n\t\t\t\tvertex.y = profileY;\n\t\t\t\tvertex.z = profileRadius * sinTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.set(\n\t\t\t\t\t- profileRadius * cosTheta,\n\t\t\t\t\tnormalYComponent,\n\t\t\t\t\tprofileRadius * sinTheta\n\t\t\t\t);\n\t\t\t\tnormal.normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, v );\n\n\t\t\t}\n\n\t\t\tif ( iy > 0 ) {\n\n\t\t\t\tconst prevIndexRow = ( iy - 1 ) * verticesPerRow;\n\t\t\t\tfor ( let ix = 0; ix < radialSegments; ix ++ ) {\n\n\t\t\t\t\tconst i1 = prevIndexRow + ix;\n\t\t\t\t\tconst i2 = prevIndexRow + ix + 1;\n\t\t\t\t\tconst i3 = iy * verticesPerRow + ix;\n\t\t\t\t\tconst i4 = iy * verticesPerRow + ix + 1;\n\n\t\t\t\t\tindices.push( i1, i2, i3 );\n\t\t\t\t\tindices.push( i2, i4, i3 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {CapsuleGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new CapsuleGeometry( data.radius, data.height, data.capSegments, data.radialSegments, data.heightSegments );\n\n\t}\n\n}\n\n/**\n * A simple shape of Euclidean geometry. It is constructed from a\n * number of triangular segments that are oriented around a central point and\n * extend as far out as a given radius. It is built counter-clockwise from a\n * start angle and a given central angle. It can also be used to create\n * regular polygons, where the number of segments determines the number of\n * sides.\n *\n * ```js\n * const geometry = new THREE.CircleGeometry( 5, 32 );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const circle = new THREE.Mesh( geometry, material );\n * scene.add( circle )\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#CircleGeometry\n */\nclass CircleGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new circle geometry.\n\t *\n\t * @param {number} [radius=1] - Radius of the circle.\n\t * @param {number} [segments=32] - Number of segments (triangles), minimum = `3`.\n\t * @param {number} [thetaStart=0] - Start angle for first segment in radians.\n\t * @param {number} [thetaLength=Math.PI*2] - The central angle, often called theta,\n\t * of the circular sector in radians. The default value results in a complete circle.\n\t */\n\tconstructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {CircleGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\n/**\n * A geometry class for representing a cylinder.\n *\n * ```js\n * const geometry = new THREE.CylinderGeometry( 5, 5, 20, 32 );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const cylinder = new THREE.Mesh( geometry, material );\n * scene.add( cylinder );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#CylinderGeometry\n */\nclass CylinderGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new cylinder geometry.\n\t *\n\t * @param {number} [radiusTop=1] - Radius of the cylinder at the top.\n\t * @param {number} [radiusBottom=1] - Radius of the cylinder at the bottom.\n\t * @param {number} [height=1] - Height of the cylinder.\n\t * @param {number} [radialSegments=32] - Number of segmented faces around the circumference of the cylinder.\n\t * @param {number} [heightSegments=1] - Number of rows of faces along the height of the cylinder.\n\t * @param {boolean} [openEnded=false] - Whether the base of the cylinder is open or capped.\n\t * @param {number} [thetaStart=0] - Start angle for first segment, in radians.\n\t * @param {number} [thetaLength=Math.PI*2] - The central angle, often called theta, of the circular sector, in radians.\n\t * The default value results in a complete cylinder.\n\t */\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CylinderGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tif ( radiusTop > 0 || y !== 0 ) {\n\n\t\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\t\tgroupCount += 3;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( radiusBottom > 0 || y !== heightSegments - 1 ) {\n\n\t\t\t\t\t\tindices.push( b, c, d );\n\t\t\t\t\t\tgroupCount += 3;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : -1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {CylinderGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\n/**\n * A geometry class for representing a cone.\n *\n * ```js\n * const geometry = new THREE.ConeGeometry( 5, 20, 32 );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const cone = new THREE.Mesh(geometry, material );\n * scene.add( cone );\n * ```\n *\n * @augments CylinderGeometry\n * @demo scenes/geometry-browser.html#ConeGeometry\n */\nclass ConeGeometry extends CylinderGeometry {\n\n\t/**\n\t * Constructs a new cone geometry.\n\t *\n\t * @param {number} [radius=1] - Radius of the cone base.\n\t * @param {number} [height=1] - Height of the cone.\n\t * @param {number} [radialSegments=32] - Number of segmented faces around the circumference of the cone.\n\t * @param {number} [heightSegments=1] - Number of rows of faces along the height of the cone.\n\t * @param {boolean} [openEnded=false] - Whether the base of the cone is open or capped.\n\t * @param {number} [thetaStart=0] - Start angle for first segment, in radians.\n\t * @param {number} [thetaLength=Math.PI*2] - The central angle, often called theta, of the circular sector, in radians.\n\t * The default value results in a complete cone.\n\t */\n\tconstructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {ConeGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\n/**\n * A polyhedron is a solid in three dimensions with flat faces. This class\n * will take an array of vertices, project them onto a sphere, and then\n * divide them up to the desired level of detail.\n *\n * @augments BufferGeometry\n */\nclass PolyhedronGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new polyhedron geometry.\n\t *\n\t * @param {Array<number>} [vertices] - A flat array of vertices describing the base shape.\n\t * @param {Array<number>} [indices] - A flat array of indices describing the base shape.\n\t * @param {number} [radius=1] - The radius of the shape.\n\t * @param {number} [detail=0] - How many levels to subdivide the geometry. The more detail, the smoother the shape.\n\t */\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivision with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {PolyhedronGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.detail );\n\n\t}\n\n}\n\n/**\n * A geometry class for representing a dodecahedron.\n *\n * ```js\n * const geometry = new THREE.DodecahedronGeometry();\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const dodecahedron = new THREE.Mesh( geometry, material );\n * scene.add( dodecahedron );\n * ```\n *\n * @augments PolyhedronGeometry\n * @demo scenes/geometry-browser.html#DodecahedronGeometry\n */\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\t/**\n\t * Constructs a new dodecahedron geometry.\n\t *\n\t * @param {number} [radius=1] - Radius of the dodecahedron.\n\t * @param {number} [detail=0] - Setting this to a value greater than `0` adds vertices making it no longer a dodecahedron.\n\t */\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t-1, -1, -1,\t-1, -1, 1,\n\t\t\t-1, 1, -1, -1, 1, 1,\n\t\t\t1, -1, -1, 1, -1, 1,\n\t\t\t1, 1, -1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {DodecahedronGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\nconst _triangle = /*@__PURE__*/ new Triangle();\n\n/**\n * Can be used as a helper object to view the edges of a geometry.\n *\n * ```js\n * const geometry = new THREE.BoxGeometry();\n * const edges = new THREE.EdgesGeometry( geometry );\n * const line = new THREE.LineSegments( edges );\n * scene.add( line );\n * ```\n *\n * Note: It is not yet possible to serialize/deserialize instances of this class.\n *\n * @augments BufferGeometry\n */\nclass EdgesGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new edges geometry.\n\t *\n\t * @param {?BufferGeometry} [geometry=null] - The geometry.\n\t * @param {number} [thresholdAngle=1] - An edge is only rendered if the angle (in degrees)\n\t * between the face normals of the adjoining faces exceeds this value.\n\t */\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * An abstract base class for creating an analytic curve object that contains methods\n * for interpolation.\n *\n * @abstract\n */\nclass Curve {\n\n\t/**\n\t * Constructs a new curve.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * The type property is used for detecting the object type\n\t\t * in context of serialization/deserialization.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.type = 'Curve';\n\n\t\t/**\n\t\t * This value determines the amount of divisions when calculating the\n\t\t * cumulative segment lengths of a curve via {@link Curve#getLengths}. To ensure\n\t\t * precision when using methods like {@link Curve#getSpacedPoints}, it is\n\t\t * recommended to increase the value of this property if the curve is very large.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 200\n\t\t */\n\t\tthis.arcLengthDivisions = 200;\n\n\t\t/**\n\t\t * Must be set to `true` if the curve parameters have changed.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsUpdate = false;\n\n\t\t/**\n\t\t * An internal cache that holds precomputed curve length values.\n\t\t *\n\t\t * @private\n\t\t * @type {?Array<number>}\n\t\t * @default null\n\t\t */\n\t\tthis.cacheArcLengths = null;\n\n\t}\n\n\t/**\n\t * This method returns a vector in 2D or 3D space (depending on the curve definition)\n\t * for the given interpolation factor.\n\t *\n\t * @abstract\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {(Vector2|Vector3)} The position on the curve. It can be a 2D or 3D vector depending on the curve definition.\n\t */\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\twarn( 'Curve: .getPoint() not implemented.' );\n\n\t}\n\n\t/**\n\t * This method returns a vector in 2D or 3D space (depending on the curve definition)\n\t * for the given interpolation factor. Unlike {@link Curve#getPoint}, this method honors the length\n\t * of the curve which equidistant samples.\n\t *\n\t * @param {number} u - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {(Vector2|Vector3)} The position on the curve. It can be a 2D or 3D vector depending on the curve definition.\n\t */\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t/**\n\t * This method samples the curve via {@link Curve#getPoint} and returns an array of points representing\n\t * the curve shape.\n\t *\n\t * @param {number} [divisions=5] - The number of divisions.\n\t * @return {Array<(Vector2|Vector3)>} An array holding the sampled curve values. The number of points is `divisions + 1`.\n\t */\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\t/**\n\t * This method samples the curve via {@link Curve#getPointAt} and returns an array of points representing\n\t * the curve shape. Unlike {@link Curve#getPoints}, this method returns equi-spaced points across the entire\n\t * curve.\n\t *\n\t * @param {number} [divisions=5] - The number of divisions.\n\t * @return {Array<(Vector2|Vector3)>} An array holding the sampled curve values. The number of points is `divisions + 1`.\n\t */\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t/**\n\t * Returns the total arc length of the curve.\n\t *\n\t * @return {number} The length of the curve.\n\t */\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t/**\n\t * Returns an array of cumulative segment lengths of the curve.\n\t *\n\t * @param {number} [divisions=this.arcLengthDivisions] - The number of divisions.\n\t * @return {Array<number>} An array holding the cumulative segment lengths.\n\t */\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\t/**\n\t * Update the cumulative segment distance cache. The method must be called\n\t * every time curve parameters are changed. If an updated curve is part of a\n\t * composed curve like {@link CurvePath}, this method must be called on the\n\t * composed curve, too.\n\t */\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t/**\n\t * Given an interpolation factor in the range `[0,1]`, this method returns an updated\n\t * interpolation factor in the same range that can be ued to sample equidistant points\n\t * from a curve.\n\t *\n\t * @param {number} u - The interpolation factor.\n\t * @param {?number} distance - An optional distance on the curve.\n\t * @return {number} The updated interpolation factor.\n\t */\n\tgetUtoTmapping( u, distance = null ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t/**\n\t * Returns a unit vector tangent for the given interpolation factor.\n\t * If the derived curve does not implement its tangent derivation,\n\t * two points a small delta apart will be used to find its gradient\n\t * which seems to give a reasonable approximation.\n\t *\n\t * @param {number} t - The interpolation factor.\n\t * @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {(Vector2|Vector3)} The tangent vector.\n\t */\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\t/**\n\t * Same as {@link Curve#getTangent} but with equidistant samples.\n\t *\n\t * @param {number} u - The interpolation factor.\n\t * @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {(Vector2|Vector3)} The tangent vector.\n\t * @see {@link Curve#getPointAt}\n\t */\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\t/**\n\t * Generates the Frenet Frames. Requires a curve definition in 3D space. Used\n\t * in geometries like {@link TubeGeometry} or {@link ExtrudeGeometry}.\n\t *\n\t * @param {number} segments - The number of segments.\n\t * @param {boolean} [closed=false] - Whether the curve is closed or not.\n\t * @return {{tangents: Array<Vector3>, normals: Array<Vector3>, binormals: Array<Vector3>}} The Frenet Frames.\n\t */\n\tcomputeFrenetFrames( segments, closed = false ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), -1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), -1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\t/**\n\t * Returns a new curve with copied values from this instance.\n\t *\n\t * @return {Curve} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Copies the values of the given curve to this instance.\n\t *\n\t * @param {Curve} source - The curve to copy.\n\t * @return {Curve} A reference to this curve.\n\t */\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Serializes the curve into JSON.\n\t *\n\t * @return {Object} A JSON object representing the serialized curve.\n\t * @see {@link ObjectLoader#parse}\n\t */\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.7,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Deserializes the curve from the given JSON.\n\t *\n\t * @param {Object} json - The JSON holding the serialized curve.\n\t * @return {Curve} A reference to this curve.\n\t */\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A curve representing an ellipse.\n *\n * ```js\n * const curve = new THREE.EllipseCurve(\n * \t0, 0,\n * \t10, 10,\n * \t0, 2 * Math.PI,\n * \tfalse,\n * \t0\n * );\n *\n * const points = curve.getPoints( 50 );\n * const geometry = new THREE.BufferGeometry().setFromPoints( points );\n *\n * const material = new THREE.LineBasicMaterial( { color: 0xff0000 } );\n *\n * // Create the final object to add to the scene\n * const ellipse = new THREE.Line( geometry, material );\n * ```\n *\n * @augments Curve\n */\nclass EllipseCurve extends Curve {\n\n\t/**\n\t * Constructs a new ellipse curve.\n\t *\n\t * @param {number} [aX=0] - The X center of the ellipse.\n\t * @param {number} [aY=0] - The Y center of the ellipse.\n\t * @param {number} [xRadius=1] - The radius of the ellipse in the x direction.\n\t * @param {number} [yRadius=1] - The radius of the ellipse in the y direction.\n\t * @param {number} [aStartAngle=0] - The start angle of the curve in radians starting from the positive X axis.\n\t * @param {number} [aEndAngle=Math.PI*2] - The end angle of the curve in radians starting from the positive X axis.\n\t * @param {boolean} [aClockwise=false] - Whether the ellipse is drawn clockwise or not.\n\t * @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.\n\t */\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isEllipseCurve = true;\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\t/**\n\t\t * The X center of the ellipse.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.aX = aX;\n\n\t\t/**\n\t\t * The Y center of the ellipse.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.aY = aY;\n\n\t\t/**\n\t\t * The radius of the ellipse in the x direction.\n\t\t * Setting the this value equal to the {@link EllipseCurve#yRadius} will result in a circle.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.xRadius = xRadius;\n\n\t\t/**\n\t\t * The radius of the ellipse in the y direction.\n\t\t * Setting the this value equal to the {@link EllipseCurve#xRadius} will result in a circle.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.yRadius = yRadius;\n\n\t\t/**\n\t\t * The start angle of the curve in radians starting from the positive X axis.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.aStartAngle = aStartAngle;\n\n\t\t/**\n\t\t * The end angle of the curve in radians starting from the positive X axis.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Math.PI*2\n\t\t */\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\t/**\n\t\t * Whether the ellipse is drawn clockwise or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.aClockwise = aClockwise;\n\n\t\t/**\n\t\t * The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\t/**\n\t * Returns a point on the curve.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {Vector2} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector2} The position on the curve.\n\t */\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A curve representing an arc.\n *\n * @augments EllipseCurve\n */\nclass ArcCurve extends EllipseCurve {\n\n\t/**\n\t * Constructs a new arc curve.\n\t *\n\t * @param {number} [aX=0] - The X center of the ellipse.\n\t * @param {number} [aY=0] - The Y center of the ellipse.\n\t * @param {number} [aRadius=1] - The radius of the ellipse in the x direction.\n\t * @param {number} [aStartAngle=0] - The start angle of the curve in radians starting from the positive X axis.\n\t * @param {number} [aEndAngle=Math.PI*2] - The end angle of the curve in radians starting from the positive X axis.\n\t * @param {boolean} [aClockwise=false] - Whether the ellipse is drawn clockwise or not.\n\t */\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isArcCurve = true;\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\nfunction CubicPoly() {\n\n\t/**\n\t * Centripetal CatmullRom Curve - which is useful for avoiding\n\t* cusps and self-intersections in non-uniform catmull rom curves.\n\t* http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n\t*\n\t* curve.type accepts centripetal(default), chordal and catmullrom\n\t* curve.tension is used for catmullrom which defaults to 0.5\n\t*/\n\n\t/*\n\tBased on an optimized c++ solution in\n\t- http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n\t- http://ideone.com/NoEbVM\n\n\tThis CubicPoly class could be used for reusing some variables and calculations,\n\tbut for three.js curve use, it could be possible inlined and flatten into a single function call\n\twhich can be placed in CurveUtils.\n\t*/\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t *   p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t *   p(0) = x0, p(1) = x1\n\t *  and\n\t *   p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = -3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = /*@__PURE__*/ new Vector3();\nconst tmp2 = /*@__PURE__*/ new Vector3();\nconst px = /*@__PURE__*/ new CubicPoly();\nconst py = /*@__PURE__*/ new CubicPoly();\nconst pz = /*@__PURE__*/ new CubicPoly();\n\n/**\n * A curve representing a Catmull-Rom spline.\n *\n * ```js\n * //Create a closed wavey loop\n * const curve = new THREE.CatmullRomCurve3( [\n * \tnew THREE.Vector3( -10, 0, 10 ),\n * \tnew THREE.Vector3( -5, 5, 5 ),\n * \tnew THREE.Vector3( 0, 0, 0 ),\n * \tnew THREE.Vector3( 5, -5, 5 ),\n * \tnew THREE.Vector3( 10, 0, 10 )\n * ] );\n *\n * const points = curve.getPoints( 50 );\n * const geometry = new THREE.BufferGeometry().setFromPoints( points );\n *\n * const material = new THREE.LineBasicMaterial( { color: 0xff0000 } );\n *\n * // Create the final object to add to the scene\n * const curveObject = new THREE.Line( geometry, material );\n * ```\n *\n * @augments Curve\n */\nclass CatmullRomCurve3 extends Curve {\n\n\t/**\n\t * Constructs a new Catmull-Rom curve.\n\t *\n\t * @param {Array<Vector3>} [points] - An array of 3D points defining the curve.\n\t * @param {boolean} [closed=false] - Whether the curve is closed or not.\n\t * @param {('centripetal'|'chordal'|'catmullrom')} [curveType='centripetal'] - The curve type.\n\t * @param {number} [tension=0.5] - Tension of the curve.\n\t */\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCatmullRomCurve3 = true;\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\t/**\n\t\t * An array of 3D points defining the curve.\n\t\t *\n\t\t * @type {Array<Vector3>}\n\t\t */\n\t\tthis.points = points;\n\n\t\t/**\n\t\t * Whether the curve is closed or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.closed = closed;\n\n\t\t/**\n\t\t * The curve type.\n\t\t *\n\t\t * @type {('centripetal'|'chordal'|'catmullrom')}\n\t\t * @default 'centripetal'\n\t\t */\n\t\tthis.curveType = curveType;\n\n\t\t/**\n\t\t * Tension of the curve.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.5\n\t\t */\n\t\tthis.tension = tension;\n\n\t}\n\n\t/**\n\t * Returns a point on the curve.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector3} The position on the curve.\n\t */\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp2.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp2;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Interpolations contains spline and Bézier functions internally used by concrete curve classes.\n *\n * Bezier Curves formulas obtained from: https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n *\n * @module Interpolations\n */\n\n/**\n * Computes a point on a Catmull-Rom spline.\n *\n * @param {number} t - The interpolation factor.\n * @param {number} p0 - The first control point.\n * @param {number} p1 - The second control point.\n * @param {number} p2 - The third control point.\n * @param {number} p3 - The fourth control point.\n * @return {number} The calculated point on a Catmull-Rom spline.\n */\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( -3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\n/**\n * Computes a point on a Quadratic Bezier curve.\n *\n * @param {number} t - The interpolation factor.\n * @param {number} p0 - The first control point.\n * @param {number} p1 - The second control point.\n * @param {number} p2 - The third control point.\n * @return {number} The calculated point on a Quadratic Bezier curve.\n */\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\n/**\n * Computes a point on a Cubic Bezier curve.\n *\n * @param {number} t - The interpolation factor.\n * @param {number} p0 - The first control point.\n * @param {number} p1 - The second control point.\n * @param {number} p2 - The third control point.\n * @param {number} p3 - The fourth control point.\n * @return {number} The calculated point on a Cubic Bezier curve.\n */\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\n/**\n * A curve representing a 2D Cubic Bezier curve.\n *\n * ```js\n * const curve = new THREE.CubicBezierCurve(\n * \tnew THREE.Vector2( - 0, 0 ),\n * \tnew THREE.Vector2( - 5, 15 ),\n * \tnew THREE.Vector2( 20, 15 ),\n * \tnew THREE.Vector2( 10, 0 )\n * );\n *\n * const points = curve.getPoints( 50 );\n * const geometry = new THREE.BufferGeometry().setFromPoints( points );\n *\n * const material = new THREE.LineBasicMaterial( { color: 0xff0000 } );\n *\n * // Create the final object to add to the scene\n * const curveObject = new THREE.Line( geometry, material );\n * ```\n *\n * @augments Curve\n */\nclass CubicBezierCurve extends Curve {\n\n\t/**\n\t * Constructs a new Cubic Bezier curve.\n\t *\n\t * @param {Vector2} [v0] - The start point.\n\t * @param {Vector2} [v1] - The first control point.\n\t * @param {Vector2} [v2] - The second control point.\n\t * @param {Vector2} [v3] - The end point.\n\t */\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCubicBezierCurve = true;\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\t/**\n\t\t * The start point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v0 = v0;\n\n\t\t/**\n\t\t * The first control point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v1 = v1;\n\n\t\t/**\n\t\t * The second control point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v2 = v2;\n\n\t\t/**\n\t\t * The end point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v3 = v3;\n\n\t}\n\n\t/**\n\t * Returns a point on the curve.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {Vector2} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector2} The position on the curve.\n\t */\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A curve representing a 3D Cubic Bezier curve.\n *\n * @augments Curve\n */\nclass CubicBezierCurve3 extends Curve {\n\n\t/**\n\t * Constructs a new Cubic Bezier curve.\n\t *\n\t * @param {Vector3} [v0] - The start point.\n\t * @param {Vector3} [v1] - The first control point.\n\t * @param {Vector3} [v2] - The second control point.\n\t * @param {Vector3} [v3] - The end point.\n\t */\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCubicBezierCurve3 = true;\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\t/**\n\t\t * The start point.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.v0 = v0;\n\n\t\t/**\n\t\t * The first control point.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.v1 = v1;\n\n\t\t/**\n\t\t * The second control point.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.v2 = v2;\n\n\t\t/**\n\t\t * The end point.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.v3 = v3;\n\n\t}\n\n\t/**\n\t * Returns a point on the curve.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector3} The position on the curve.\n\t */\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A curve representing a 2D line segment.\n *\n * @augments Curve\n */\nclass LineCurve extends Curve {\n\n\t/**\n\t * Constructs a new line curve.\n\t *\n\t * @param {Vector2} [v1] - The start point.\n\t * @param {Vector2} [v2] - The end point.\n\t */\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineCurve = true;\n\n\t\tthis.type = 'LineCurve';\n\n\t\t/**\n\t\t * The start point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v1 = v1;\n\n\t\t/**\n\t\t * The end point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v2 = v2;\n\n\t}\n\n\t/**\n\t * Returns a point on the line.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the line. Must be in the range `[0,1]`.\n\t * @param {Vector2} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector2} The position on the line.\n\t */\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector2() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A curve representing a 3D line segment.\n *\n * @augments Curve\n */\nclass LineCurve3 extends Curve {\n\n\t/**\n\t * Constructs a new line curve.\n\t *\n\t * @param {Vector3} [v1] - The start point.\n\t * @param {Vector3} [v2] - The end point.\n\t */\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.type = 'LineCurve3';\n\n\t\t/**\n\t\t * The start point.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.v1 = v1;\n\n\t\t/**\n\t\t * The end point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v2 = v2;\n\n\t}\n\n\t/**\n\t * Returns a point on the line.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the line. Must be in the range `[0,1]`.\n\t * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector3} The position on the line.\n\t */\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A curve representing a 2D Quadratic Bezier curve.\n *\n * ```js\n * const curve = new THREE.QuadraticBezierCurve(\n * \tnew THREE.Vector2( - 10, 0 ),\n * \tnew THREE.Vector2( 20, 15 ),\n * \tnew THREE.Vector2( 10, 0 )\n * )\n *\n * const points = curve.getPoints( 50 );\n * const geometry = new THREE.BufferGeometry().setFromPoints( points );\n *\n * const material = new THREE.LineBasicMaterial( { color: 0xff0000 } );\n *\n * // Create the final object to add to the scene\n * const curveObject = new THREE.Line( geometry, material );\n * ```\n *\n * @augments Curve\n */\nclass QuadraticBezierCurve extends Curve {\n\n\t/**\n\t * Constructs a new Quadratic Bezier curve.\n\t *\n\t * @param {Vector2} [v0] - The start point.\n\t * @param {Vector2} [v1] - The control point.\n\t * @param {Vector2} [v2] - The end point.\n\t */\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isQuadraticBezierCurve = true;\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\t/**\n\t\t * The start point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v0 = v0;\n\n\t\t/**\n\t\t * The control point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v1 = v1;\n\n\t\t/**\n\t\t * The end point.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.v2 = v2;\n\n\t}\n\n\t/**\n\t * Returns a point on the curve.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {Vector2} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector2} The position on the curve.\n\t */\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A curve representing a 3D Quadratic Bezier curve.\n *\n * @augments Curve\n */\nclass QuadraticBezierCurve3 extends Curve {\n\n\t/**\n\t * Constructs a new Quadratic Bezier curve.\n\t *\n\t * @param {Vector3} [v0] - The start point.\n\t * @param {Vector3} [v1] - The control point.\n\t * @param {Vector3} [v2] - The end point.\n\t */\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isQuadraticBezierCurve3 = true;\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\t/**\n\t\t * The start point.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.v0 = v0;\n\n\t\t/**\n\t\t * The control point.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.v1 = v1;\n\n\t\t/**\n\t\t * The end point.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.v2 = v2;\n\n\t}\n\n\t/**\n\t * Returns a point on the curve.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector3} The position on the curve.\n\t */\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A curve representing a 2D spline curve.\n *\n * ```js\n * // Create a sine-like wave\n * const curve = new THREE.SplineCurve( [\n * \tnew THREE.Vector2( -10, 0 ),\n * \tnew THREE.Vector2( -5, 5 ),\n * \tnew THREE.Vector2( 0, 0 ),\n * \tnew THREE.Vector2( 5, -5 ),\n * \tnew THREE.Vector2( 10, 0 )\n * ] );\n *\n * const points = curve.getPoints( 50 );\n * const geometry = new THREE.BufferGeometry().setFromPoints( points );\n *\n * const material = new THREE.LineBasicMaterial( { color: 0xff0000 } );\n *\n * // Create the final object to add to the scene\n * const splineObject = new THREE.Line( geometry, material );\n * ```\n *\n * @augments Curve\n */\nclass SplineCurve extends Curve {\n\n\t/**\n\t * Constructs a new 2D spline curve.\n\t *\n\t * @param {Array<Vector2>} [points] -  An array of 2D points defining the curve.\n\t */\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSplineCurve = true;\n\n\t\tthis.type = 'SplineCurve';\n\n\t\t/**\n\t\t * An array of 2D points defining the curve.\n\t\t *\n\t\t * @type {Array<Vector2>}\n\t\t */\n\t\tthis.points = points;\n\n\t}\n\n\t/**\n\t * Returns a point on the curve.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {Vector2} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector2} The position on the curve.\n\t */\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**\n * A base class extending {@link Curve}. `CurvePath` is simply an\n * array of connected curves, but retains the API of a curve.\n *\n * @augments Curve\n */\nclass CurvePath extends Curve {\n\n\t/**\n\t * Constructs a new curve path.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\t/**\n\t\t * An array of curves defining the\n\t\t * path.\n\t\t *\n\t\t * @type {Array<Curve>}\n\t\t */\n\t\tthis.curves = [];\n\n\t\t/**\n\t\t * Whether the path should automatically be closed\n\t\t * by a line curve.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.autoClose = false;\n\n\t}\n\n\t/**\n\t * Adds a curve to this curve path.\n\t *\n\t * @param {Curve} curve - The curve to add.\n\t */\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\t/**\n\t * Adds a line curve to close the path.\n\t *\n\t * @return {CurvePath} A reference to this curve path.\n\t */\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tconst lineType = ( startPoint.isVector2 === true ) ? 'LineCurve' : 'LineCurve3';\n\t\t\tthis.curves.push( new Curves[ lineType ]( endPoint, startPoint ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * This method returns a vector in 2D or 3D space (depending on the curve definitions)\n\t * for the given interpolation factor.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {?(Vector2|Vector3)} The position on the curve. It can be a 2D or 3D vector depending on the curve definition.\n\t */\n\tgetPoint( t, optionalTarget ) {\n\n\t\t// To get accurate point with reference to\n\t\t// entire path distance at time t,\n\t\t// following has to be done:\n\n\t\t// 1. Length of each sub path have to be known\n\t\t// 2. Locate and identify type of curve\n\t\t// 3. Get t for the curve\n\t\t// 4. Return curve.getPointAt(t')\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 <d\n\n\t}\n\n\tgetLength() {\n\n\t\t// We cannot use the default THREE.Curve getPoint() with getLength() because in\n\t\t// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath\n\t\t// getPoint() depends on getLength\n\n\t\tconst lens = this.getCurveLengths();\n\t\treturn lens[ lens.length - 1 ];\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\t// cacheLengths must be recalculated.\n\n\t\tthis.needsUpdate = true;\n\t\tthis.cacheLengths = null;\n\t\tthis.getCurveLengths();\n\n\t}\n\n\t/**\n\t * Returns list of cumulative curve lengths of the defined curves.\n\t *\n\t * @return {Array<number>} The curve lengths.\n\t */\n\tgetCurveLengths() {\n\n\t\t// Compute lengths and cache them\n\t\t// We cannot overwrite getLengths() because UtoT mapping uses it.\n\t\t// We use cache values if curves and cache array are same length\n\n\t\tif ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {\n\n\t\t\treturn this.cacheLengths;\n\n\t\t}\n\n\t\t// Get length of sub-curve\n\t\t// Push sums into cached array\n\n\t\tconst lengths = [];\n\t\tlet sums = 0;\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tsums += this.curves[ i ].getLength();\n\t\t\tlengths.push( sums );\n\n\t\t}\n\n\t\tthis.cacheLengths = lengths;\n\n\t\treturn lengths;\n\n\t}\n\n\tgetSpacedPoints( divisions = 40 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let i = 0; i <= divisions; i ++ ) {\n\n\t\t\tpoints.push( this.getPoint( i / divisions ) );\n\n\t\t}\n\n\t\tif ( this.autoClose ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tgetPoints( divisions = 12 ) {\n\n\t\tconst points = [];\n\t\tlet last;\n\n\t\tfor ( let i = 0, curves = this.curves; i < curves.length; i ++ ) {\n\n\t\t\tconst curve = curves[ i ];\n\t\t\tconst resolution = curve.isEllipseCurve ? divisions * 2\n\t\t\t\t: ( curve.isLineCurve || curve.isLineCurve3 ) ? 1\n\t\t\t\t\t: curve.isSplineCurve ? divisions * curve.points.length\n\t\t\t\t\t\t: divisions;\n\n\t\t\tconst pts = curve.getPoints( resolution );\n\n\t\t\tfor ( let j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\tconst point = pts[ j ];\n\n\t\t\t\tif ( last && last.equals( point ) ) continue; // ensures no consecutive points are duplicates\n\n\t\t\t\tpoints.push( point );\n\t\t\t\tlast = point;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.autoClose && points.length > 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A 2D path representation. The class provides methods for creating paths\n * and contours of 2D shapes similar to the 2D Canvas API.\n *\n * ```js\n * const path = new THREE.Path();\n *\n * path.lineTo( 0, 0.8 );\n * path.quadraticCurveTo( 0, 1, 0.2, 1 );\n * path.lineTo( 1, 1 );\n *\n * const points = path.getPoints();\n *\n * const geometry = new THREE.BufferGeometry().setFromPoints( points );\n * const material = new THREE.LineBasicMaterial( { color: 0xffffff } );\n *\n * const line = new THREE.Line( geometry, material );\n * scene.add( line );\n * ```\n *\n * @augments CurvePath\n */\nclass Path extends CurvePath {\n\n\t/**\n\t * Constructs a new path.\n\t *\n\t * @param {Array<Vector2>} [points] - An array of 2D points defining the path.\n\t */\n\tconstructor( points ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Path';\n\n\t\t/**\n\t\t * The current offset of the path. Any new curve added will start here.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a path from the given list of points. The points are added\n\t * to the path as instances of {@link LineCurve}.\n\t *\n\t * @param {Array<Vector2>} points - An array of 2D points.\n\t * @return {Path} A reference to this path.\n\t */\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Moves {@link Path#currentPoint} to the given point.\n\t *\n\t * @param {number} x - The x coordinate.\n\t * @param {number} y - The y coordinate.\n\t * @return {Path} A reference to this path.\n\t */\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an instance of {@link LineCurve} to the path by connecting\n\t * the current point with the given one.\n\t *\n\t * @param {number} x - The x coordinate of the end point.\n\t * @param {number} y - The y coordinate of the end point.\n\t * @return {Path} A reference to this path.\n\t */\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an instance of {@link QuadraticBezierCurve} to the path by connecting\n\t * the current point with the given one.\n\t *\n\t * @param {number} aCPx - The x coordinate of the control point.\n\t * @param {number} aCPy - The y coordinate of the control point.\n\t * @param {number} aX - The x coordinate of the end point.\n\t * @param {number} aY - The y coordinate of the end point.\n\t * @return {Path} A reference to this path.\n\t */\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an instance of {@link CubicBezierCurve} to the path by connecting\n\t * the current point with the given one.\n\t *\n\t * @param {number} aCP1x - The x coordinate of the first control point.\n\t * @param {number} aCP1y - The y coordinate of the first control point.\n\t * @param {number} aCP2x - The x coordinate of the second control point.\n\t * @param {number} aCP2y - The y coordinate of the second control point.\n\t * @param {number} aX - The x coordinate of the end point.\n\t * @param {number} aY - The y coordinate of the end point.\n\t * @return {Path} A reference to this path.\n\t */\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an instance of {@link SplineCurve} to the path by connecting\n\t * the current point with the given list of points.\n\t *\n\t * @param {Array<Vector2>} pts - An array of points in 2D space.\n\t * @return {Path} A reference to this path.\n\t */\n\tsplineThru( pts ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an arc as an instance of {@link EllipseCurve} to the path, positioned relative\n\t * to the current point.\n\t *\n\t * @param {number} [aX=0] - The x coordinate of the center of the arc offsetted from the previous curve.\n\t * @param {number} [aY=0] - The y coordinate of the center of the arc offsetted from the previous curve.\n\t * @param {number} [aRadius=1] - The radius of the arc.\n\t * @param {number} [aStartAngle=0] - The start angle in radians.\n\t * @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.\n\t * @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.\n\t * @return {Path} A reference to this path.\n\t */\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an absolutely positioned arc as an instance of {@link EllipseCurve} to the path.\n\t *\n\t * @param {number} [aX=0] - The x coordinate of the center of the arc.\n\t * @param {number} [aY=0] - The y coordinate of the center of the arc.\n\t * @param {number} [aRadius=1] - The radius of the arc.\n\t * @param {number} [aStartAngle=0] - The start angle in radians.\n\t * @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.\n\t * @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.\n\t * @return {Path} A reference to this path.\n\t */\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an ellipse as an instance of {@link EllipseCurve} to the path, positioned relative\n\t * to the current point\n\t *\n\t * @param {number} [aX=0] - The x coordinate of the center of the ellipse offsetted from the previous curve.\n\t * @param {number} [aY=0] - The y coordinate of the center of the ellipse offsetted from the previous curve.\n\t * @param {number} [xRadius=1] - The radius of the ellipse in the x axis.\n\t * @param {number} [yRadius=1] - The radius of the ellipse in the y axis.\n\t * @param {number} [aStartAngle=0] - The start angle in radians.\n\t * @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.\n\t * @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.\n\t * @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.\n\t * @return {Path} A reference to this path.\n\t */\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an absolutely positioned ellipse as an instance of {@link EllipseCurve} to the path.\n\t *\n\t * @param {number} [aX=0] - The x coordinate of the absolute center of the ellipse.\n\t * @param {number} [aY=0] - The y coordinate of the absolute center of the ellipse.\n\t * @param {number} [xRadius=1] - The radius of the ellipse in the x axis.\n\t * @param {number} [yRadius=1] - The radius of the ellipse in the y axis.\n\t * @param {number} [aStartAngle=0] - The start angle in radians.\n\t * @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.\n\t * @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.\n\t * @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.\n\t * @return {Path} A reference to this path.\n\t */\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Defines an arbitrary 2d shape plane using paths with optional holes. It\n * can be used with {@link ExtrudeGeometry}, {@link ShapeGeometry}, to get\n * points, or to get triangulated faces.\n *\n * ```js\n * const heartShape = new THREE.Shape();\n *\n * heartShape.moveTo( 25, 25 );\n * heartShape.bezierCurveTo( 25, 25, 20, 0, 0, 0 );\n * heartShape.bezierCurveTo( - 30, 0, - 30, 35, - 30, 35 );\n * heartShape.bezierCurveTo( - 30, 55, - 10, 77, 25, 95 );\n * heartShape.bezierCurveTo( 60, 77, 80, 55, 80, 35 );\n * heartShape.bezierCurveTo( 80, 35, 80, 0, 50, 0 );\n * heartShape.bezierCurveTo( 35, 0, 25, 25, 25, 25 );\n *\n * const extrudeSettings = {\n * \tdepth: 8,\n * \tbevelEnabled: true,\n * \tbevelSegments: 2,\n * \tsteps: 2,\n * \tbevelSize: 1,\n * \tbevelThickness: 1\n * };\n *\n * const geometry = new THREE.ExtrudeGeometry( heartShape, extrudeSettings );\n * const mesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial() );\n * ```\n *\n * @augments Path\n */\nclass Shape extends Path {\n\n\t/**\n\t * Constructs a new shape.\n\t *\n\t * @param {Array<Vector2>} [points] - An array of 2D points defining the shape.\n\t */\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\t/**\n\t\t * The UUID of the shape.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\t/**\n\t\t * Defines the holes in the shape. Hole definitions must use the\n\t\t * opposite winding order (CW/CCW) than the outer shape.\n\t\t *\n\t\t * @type {Array<Path>}\n\t\t * @readonly\n\t\t */\n\t\tthis.holes = [];\n\n\t}\n\n\t/**\n\t * Returns an array representing each contour of the holes\n\t * as a list of 2D points.\n\t *\n\t * @param {number} divisions - The fineness of the result.\n\t * @return {Array<Array<Vector2>>} The holes as a series of 2D points.\n\t */\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\t/**\n\t * Returns an object that holds contour data for the shape and its holes as\n\t * arrays of 2D points.\n\t *\n\t * @param {number} divisions - The fineness of the result.\n\t * @return {{shape:Array<Vector2>,holes:Array<Array<Vector2>>}} An object with contour data.\n\t */\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* eslint-disable */\n// copy of mapbox/earcut version 3.0.2\n// https://github.com/mapbox/earcut/tree/v3.0.2\n\nfunction earcut(data, holeIndices, dim = 2) {\n\n    const hasHoles = holeIndices && holeIndices.length;\n    const outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n    let outerNode = linkedList(data, 0, outerLen, dim, true);\n    const triangles = [];\n\n    if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n    let minX, minY, invSize;\n\n    if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n    // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n    if (data.length > 80 * dim) {\n        minX = data[0];\n        minY = data[1];\n        let maxX = minX;\n        let maxY = minY;\n\n        for (let i = dim; i < outerLen; i += dim) {\n            const x = data[i];\n            const y = data[i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n        }\n\n        // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n        invSize = Math.max(maxX - minX, maxY - minY);\n        invSize = invSize !== 0 ? 32767 / invSize : 0;\n    }\n\n    earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n    return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n    let last;\n\n    if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n        for (let i = start; i < end; i += dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n    } else {\n        for (let i = end - dim; i >= start; i -= dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n    }\n\n    if (last && equals(last, last.next)) {\n        removeNode(last);\n        last = last.next;\n    }\n\n    return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n    if (!start) return start;\n    if (!end) end = start;\n\n    let p = start,\n        again;\n    do {\n        again = false;\n\n        if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n            removeNode(p);\n            p = end = p.prev;\n            if (p === p.next) break;\n            again = true;\n\n        } else {\n            p = p.next;\n        }\n    } while (again || p !== end);\n\n    return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n    if (!ear) return;\n\n    // interlink polygon nodes in z-order\n    if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n    let stop = ear;\n\n    // iterate through ears, slicing them one by one\n    while (ear.prev !== ear.next) {\n        const prev = ear.prev;\n        const next = ear.next;\n\n        if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n            triangles.push(prev.i, ear.i, next.i); // cut off the triangle\n\n            removeNode(ear);\n\n            // skipping the next vertex leads to less sliver triangles\n            ear = next.next;\n            stop = next.next;\n\n            continue;\n        }\n\n        ear = next;\n\n        // if we looped through the whole remaining polygon and can't find any more ears\n        if (ear === stop) {\n            // try filtering points and slicing again\n            if (!pass) {\n                earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n            // if this didn't work, try curing all small self-intersections locally\n            } else if (pass === 1) {\n                ear = cureLocalIntersections(filterPoints(ear), triangles);\n                earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n            // as a last resort, try splitting the remaining polygon into two\n            } else if (pass === 2) {\n                splitEarcut(ear, triangles, dim, minX, minY, invSize);\n            }\n\n            break;\n        }\n    }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n    const a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    // now make sure we don't have other points inside the potential ear\n    const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n    // triangle bbox\n    const x0 = Math.min(ax, bx, cx),\n        y0 = Math.min(ay, by, cy),\n        x1 = Math.max(ax, bx, cx),\n        y1 = Math.max(ay, by, cy);\n\n    let p = c.next;\n    while (p !== a) {\n        if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.next;\n    }\n\n    return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n    const a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n    // triangle bbox\n    const x0 = Math.min(ax, bx, cx),\n        y0 = Math.min(ay, by, cy),\n        x1 = Math.max(ax, bx, cx),\n        y1 = Math.max(ay, by, cy);\n\n    // z-order range for the current triangle bbox;\n    const minZ = zOrder(x0, y0, minX, minY, invSize),\n        maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n    let p = ear.prevZ,\n        n = ear.nextZ;\n\n    // look for points inside the triangle in both directions\n    while (p && p.z >= minZ && n && n.z <= maxZ) {\n        if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n\n        if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n        n = n.nextZ;\n    }\n\n    // look for remaining points in decreasing z-order\n    while (p && p.z >= minZ) {\n        if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n    }\n\n    // look for remaining points in increasing z-order\n    while (n && n.z <= maxZ) {\n        if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n        n = n.nextZ;\n    }\n\n    return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles) {\n    let p = start;\n    do {\n        const a = p.prev,\n            b = p.next.next;\n\n        if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n            triangles.push(a.i, p.i, b.i);\n\n            // remove two nodes involved\n            removeNode(p);\n            removeNode(p.next);\n\n            p = start = b;\n        }\n        p = p.next;\n    } while (p !== start);\n\n    return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n    // look for a valid diagonal that divides the polygon into two\n    let a = start;\n    do {\n        let b = a.next.next;\n        while (b !== a.prev) {\n            if (a.i !== b.i && isValidDiagonal(a, b)) {\n                // split the polygon in two by the diagonal\n                let c = splitPolygon(a, b);\n\n                // filter colinear points around the cuts\n                a = filterPoints(a, a.next);\n                c = filterPoints(c, c.next);\n\n                // run earcut on each half\n                earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n                earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n                return;\n            }\n            b = b.next;\n        }\n        a = a.next;\n    } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n    const queue = [];\n\n    for (let i = 0, len = holeIndices.length; i < len; i++) {\n        const start = holeIndices[i] * dim;\n        const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n        const list = linkedList(data, start, end, dim, false);\n        if (list === list.next) list.steiner = true;\n        queue.push(getLeftmost(list));\n    }\n\n    queue.sort(compareXYSlope);\n\n    // process holes from left to right\n    for (let i = 0; i < queue.length; i++) {\n        outerNode = eliminateHole(queue[i], outerNode);\n    }\n\n    return outerNode;\n}\n\nfunction compareXYSlope(a, b) {\n    let result = a.x - b.x;\n    // when the left-most point of 2 holes meet at a vertex, sort the holes counterclockwise so that when we find\n    // the bridge to the outer shell is always the point that they meet at.\n    if (result === 0) {\n        result = a.y - b.y;\n        if (result === 0) {\n            const aSlope = (a.next.y - a.y) / (a.next.x - a.x);\n            const bSlope = (b.next.y - b.y) / (b.next.x - b.x);\n            result = aSlope - bSlope;\n        }\n    }\n    return result;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole(hole, outerNode) {\n    const bridge = findHoleBridge(hole, outerNode);\n    if (!bridge) {\n        return outerNode;\n    }\n\n    const bridgeReverse = splitPolygon(bridge, hole);\n\n    // filter collinear points around the cuts\n    filterPoints(bridgeReverse, bridgeReverse.next);\n    return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n    let p = outerNode;\n    const hx = hole.x;\n    const hy = hole.y;\n    let qx = -Infinity;\n    let m;\n\n    // find a segment intersected by a ray from the hole's leftmost point to the left;\n    // segment's endpoint with lesser x will be potential connection point\n    // unless they intersect at a vertex, then choose the vertex\n    if (equals(hole, p)) return p;\n    do {\n        if (equals(hole, p.next)) return p.next;\n        else if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n            const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n            if (x <= hx && x > qx) {\n                qx = x;\n                m = p.x < p.next.x ? p : p.next;\n                if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n            }\n        }\n        p = p.next;\n    } while (p !== outerNode);\n\n    if (!m) return null;\n\n    // look for points inside the triangle of hole point, segment intersection and endpoint;\n    // if there are no points found, we have a valid connection;\n    // otherwise choose the point of the minimum angle with the ray as connection point\n\n    const stop = m;\n    const mx = m.x;\n    const my = m.y;\n    let tanMin = Infinity;\n\n    p = m;\n\n    do {\n        if (hx >= p.x && p.x >= mx && hx !== p.x &&\n                pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n            const tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n            if (locallyInside(p, hole) &&\n                (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n                m = p;\n                tanMin = tan;\n            }\n        }\n\n        p = p.next;\n    } while (p !== stop);\n\n    return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n    return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n    let p = start;\n    do {\n        if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n        p.prevZ = p.prev;\n        p.nextZ = p.next;\n        p = p.next;\n    } while (p !== start);\n\n    p.prevZ.nextZ = null;\n    p.prevZ = null;\n\n    sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n    let numMerges;\n    let inSize = 1;\n\n    do {\n        let p = list;\n        let e;\n        list = null;\n        let tail = null;\n        numMerges = 0;\n\n        while (p) {\n            numMerges++;\n            let q = p;\n            let pSize = 0;\n            for (let i = 0; i < inSize; i++) {\n                pSize++;\n                q = q.nextZ;\n                if (!q) break;\n            }\n            let qSize = inSize;\n\n            while (pSize > 0 || (qSize > 0 && q)) {\n\n                if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n                    e = p;\n                    p = p.nextZ;\n                    pSize--;\n                } else {\n                    e = q;\n                    q = q.nextZ;\n                    qSize--;\n                }\n\n                if (tail) tail.nextZ = e;\n                else list = e;\n\n                e.prevZ = tail;\n                tail = e;\n            }\n\n            p = q;\n        }\n\n        tail.nextZ = null;\n        inSize *= 2;\n\n    } while (numMerges > 1);\n\n    return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n    // coords are transformed into non-negative 15-bit integer range\n    x = (x - minX) * invSize | 0;\n    y = (y - minY) * invSize | 0;\n\n    x = (x | (x << 8)) & 0x00FF00FF;\n    x = (x | (x << 4)) & 0x0F0F0F0F;\n    x = (x | (x << 2)) & 0x33333333;\n    x = (x | (x << 1)) & 0x55555555;\n\n    y = (y | (y << 8)) & 0x00FF00FF;\n    y = (y | (y << 4)) & 0x0F0F0F0F;\n    y = (y | (y << 2)) & 0x33333333;\n    y = (y | (y << 1)) & 0x55555555;\n\n    return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n    let p = start,\n        leftmost = start;\n    do {\n        if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n        p = p.next;\n    } while (p !== start);\n\n    return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n    return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n           (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n           (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a point lies within a convex triangle but false if its equal to the first point of the triangle\nfunction pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, px, py) {\n    return !(ax === px && ay === py) && pointInTriangle(ax, ay, bx, by, cx, cy, px, py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n    return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // doesn't intersect other edges\n           (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n            (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n            equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n    return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n    return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n    const o1 = sign(area(p1, q1, p2));\n    const o2 = sign(area(p1, q1, q2));\n    const o3 = sign(area(p2, q2, p1));\n    const o4 = sign(area(p2, q2, q1));\n\n    if (o1 !== o2 && o3 !== o4) return true; // general case\n\n    if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n    if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n    if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n    if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n    return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n    return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n    return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n    let p = a;\n    do {\n        if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n                intersects(p, p.next, a, b)) return true;\n        p = p.next;\n    } while (p !== a);\n\n    return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n    return area(a.prev, a, a.next) < 0 ?\n        area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n        area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n    let p = a;\n    let inside = false;\n    const px = (a.x + b.x) / 2;\n    const py = (a.y + b.y) / 2;\n    do {\n        if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n                (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n            inside = !inside;\n        p = p.next;\n    } while (p !== a);\n\n    return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n    const a2 = createNode(a.i, a.x, a.y),\n        b2 = createNode(b.i, b.x, b.y),\n        an = a.next,\n        bp = b.prev;\n\n    a.next = b;\n    b.prev = a;\n\n    a2.next = an;\n    an.prev = a2;\n\n    b2.next = a2;\n    a2.prev = b2;\n\n    bp.next = b2;\n    b2.prev = bp;\n\n    return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n    const p = createNode(i, x, y);\n\n    if (!last) {\n        p.prev = p;\n        p.next = p;\n\n    } else {\n        p.next = last.next;\n        p.prev = last;\n        last.next.prev = p;\n        last.next = p;\n    }\n    return p;\n}\n\nfunction removeNode(p) {\n    p.next.prev = p.prev;\n    p.prev.next = p.next;\n\n    if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n    if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction createNode(i, x, y) {\n    return {\n        i, // vertex index in coordinates array\n        x, y, // vertex coordinates\n        prev: null, // previous and next vertex nodes in a polygon ring\n        next: null,\n        z: 0, // z-order curve value\n        prevZ: null, // previous and next nodes in z-order\n        nextZ: null,\n        steiner: false // indicates whether this is a steiner point\n    };\n}\n\nfunction signedArea(data, start, end, dim) {\n    let sum = 0;\n    for (let i = start, j = end - dim; i < end; i += dim) {\n        sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n        j = i;\n    }\n    return sum;\n}\n\n/**\n * An implementation of the earcut polygon triangulation algorithm.\n * The code is a port of [mapbox/earcut](https://github.com/mapbox/earcut).\n *\n * @see https://github.com/mapbox/earcut\n */\nclass Earcut {\n\n\t/**\n\t * Triangulates the given shape definition by returning an array of triangles.\n\t *\n\t * @param {Array<number>} data - An array with 2D points.\n\t * @param {Array<number>} holeIndices - An array with indices defining holes.\n\t * @param {number} [dim=2] - The number of coordinates per vertex in the input array.\n\t * @return {Array<number>} An array representing the triangulated faces. Each face is defined by three consecutive numbers\n\t * representing vertex indices.\n\t */\n\tstatic triangulate( data, holeIndices, dim = 2 ) {\n\n\t\treturn earcut( data, holeIndices, dim );\n\n\t}\n\n}\n\n/**\n * A class containing utility functions for shapes.\n *\n * @hideconstructor\n */\nclass ShapeUtils {\n\n\t/**\n\t * Calculate area of a ( 2D ) contour polygon.\n\t *\n\t * @param {Array<Vector2>} contour - An array of 2D points.\n\t * @return {number} The area.\n\t */\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given contour uses a clockwise winding order.\n\t *\n\t * @param {Array<Vector2>} pts - An array of 2D points defining a polygon.\n\t * @return {boolean} Whether the given contour uses a clockwise winding order or not.\n\t */\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\t/**\n\t * Triangulates the given shape definition.\n\t *\n\t * @param {Array<Vector2>} contour - An array of 2D points defining the contour.\n\t * @param {Array<Array<Vector2>>} holes - An array that holds arrays of 2D points defining the holes.\n\t * @return {Array<Array<number>>} An array that holds for each face definition an array with three indices.\n\t */\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * ```js\n * const length = 12, width = 8;\n *\n * const shape = new THREE.Shape();\n * shape.moveTo( 0,0 );\n * shape.lineTo( 0, width );\n * shape.lineTo( length, width );\n * shape.lineTo( length, 0 );\n * shape.lineTo( 0, 0 );\n *\n * const geometry = new THREE.ExtrudeGeometry( shape );\n * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );\n * const mesh = new THREE.Mesh( geometry, material ) ;\n * scene.add( mesh );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#ExtrudeGeometry\n */\nclass ExtrudeGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new extrude geometry.\n\t *\n\t * @param {Shape|Array<Shape>} [shapes] - A shape or an array of shapes.\n\t * @param {ExtrudeGeometry~Options} [options] - The extrude settings.\n\t */\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( -0.5, 0.5 ), new Vector2( -0.5, -0.5 ), new Vector2( 0.5, -0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tconst depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\tconst isClosed = extrudePath.isCatmullRomCurve3 ? extrudePath.closed : false;\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, isClosed );\n\n\t\t\t\t// log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/**Merges index-adjacent points that are within a threshold distance of each other. Array is modified in-place. Threshold distance is empirical, and scaled based on the magnitude of point coordinates.\n\t\t\t * @param {Array<Vector2>} points\n\t\t\t*/\n\t\t\tfunction mergeOverlappingPoints( points ) {\n\n\t\t\t\tconst THRESHOLD = 1e-10;\n\t\t\t\tconst THRESHOLD_SQ = THRESHOLD * THRESHOLD;\n\t\t\t\tlet prevPos = points[ 0 ];\n\t\t\t\tfor ( let i = 1; i <= points.length; i ++ ) {\n\n\t\t\t\t\tconst currentIndex = i % points.length;\n\t\t\t\t\tconst currentPos = points[ currentIndex ];\n\t\t\t\t\tconst dx = currentPos.x - prevPos.x;\n\t\t\t\t\tconst dy = currentPos.y - prevPos.y;\n\t\t\t\t\tconst distSq = dx * dx + dy * dy;\n\n\t\t\t\t\tconst scalingFactorSqrt = Math.max(\n\t\t\t\t\t\tMath.abs( currentPos.x ),\n\t\t\t\t\t\tMath.abs( currentPos.y ),\n\t\t\t\t\t\tMath.abs( prevPos.x ),\n\t\t\t\t\t\tMath.abs( prevPos.y )\n\t\t\t\t\t);\n\t\t\t\t\tconst thresholdSqScaled = THRESHOLD_SQ * scalingFactorSqrt * scalingFactorSqrt;\n\t\t\t\t\tif ( distSq <= thresholdSqScaled ) {\n\n\t\t\t\t\t\tpoints.splice( currentIndex, 1 );\n\t\t\t\t\t\ti --;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tprevPos = currentPos;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmergeOverlappingPoints( vertices );\n\t\t\tholes.forEach( mergeOverlappingPoints );\n\n\t\t\tconst numHoles = holes.length;\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0; h < numHoles; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) error( 'ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn pt.clone().addScaledVector( vec, size );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t//   shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t//  adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t//  but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t//  (j)---(i)---(k)\n\t\t\t\t// log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = numHoles; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t//  (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\t\t\tlet faces;\n\n\t\t\tif ( bevelSegments === 0 ) {\n\n\t\t\t\tfaces = ShapeUtils.triangulateShape( contour, holes );\n\n\t\t\t} else {\n\n\t\t\t\tconst contractedContourVertices = [];\n\t\t\t\tconst expandedHoleVertices = [];\n\n\t\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t\t// contract shape\n\n\t\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\t\t\t\t\t\tif ( t === 0 ) contractedContourVertices.push( vert );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// expand holes\n\n\t\t\t\t\tfor ( let h = 0, hl = numHoles; h < hl; h ++ ) {\n\n\t\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\t\t\t\t\t\tconst oneHoleVertices = [];\n\t\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\t\t\t\t\t\t\tif ( t === 0 ) oneHoleVertices.push( vert );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( t === 0 ) expandedHoleVertices.push( oneHoleVertices );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfaces = ShapeUtils.triangulateShape( contractedContourVertices, expandedHoleVertices );\n\n\t\t\t}\n\n\t\t\tconst flen = faces.length;\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t/////  Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @param {Array<Shape>} shapes - An array of shapes.\n\t * @return {ExtrudeGeometry} A new instance.\n\t */\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tdata.options = Object.assign( {}, options );\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\n/**\n * A geometry class for representing an icosahedron.\n *\n * ```js\n * const geometry = new THREE.IcosahedronGeometry();\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const icosahedron = new THREE.Mesh( geometry, material );\n * scene.add( icosahedron );\n * ```\n *\n * @augments PolyhedronGeometry\n * @demo scenes/geometry-browser.html#IcosahedronGeometry\n */\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\t/**\n\t * Constructs a new icosahedron geometry.\n\t *\n\t * @param {number} [radius=1] - Radius of the icosahedron.\n\t * @param {number} [detail=0] - Setting this to a value greater than `0` adds vertices making it no longer a icosahedron.\n\t */\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t-1, t, 0, \t1, t, 0, \t-1, - t, 0, \t1, - t, 0,\n\t\t\t0, -1, t, \t0, 1, t,\t0, -1, - t, \t0, 1, - t,\n\t\t\tt, 0, -1, \tt, 0, 1, \t- t, 0, -1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {IcosahedronGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\n/**\n * Creates meshes with axial symmetry like vases. The lathe rotates around the Y axis.\n *\n * ```js\n * const points = [];\n * for ( let i = 0; i < 10; i ++ ) {\n * \tpoints.push( new THREE.Vector2( Math.sin( i * 0.2 ) * 10 + 5, ( i - 5 ) * 2 ) );\n * }\n * const geometry = new THREE.LatheGeometry( points );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const lathe = new THREE.Mesh( geometry, material );\n * scene.add( lathe );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#LatheGeometry\n */\nclass LatheGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new lathe geometry.\n\t *\n\t * @param {Array<Vector2|Vector3>} [points] - An array of points in 2D space. The x-coordinate of each point\n\t * must be greater than zero.\n\t * @param {number} [segments=12] - The number of circumference segments to generate.\n\t * @param {number} [phiStart=0] - The starting angle in radians.\n\t * @param {number} [phiLength=Math.PI*2] - The radian (0 to 2PI) range of the lathed section 2PI is a\n\t * closed lathe, less than 2PI is a portion.\n\t */\n\tconstructor( points = [ new Vector2( 0, -0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\t\tconst initNormals = [];\n\t\tconst normals = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tconst normal = new Vector3();\n\t\tconst curNormal = new Vector3();\n\t\tconst prevNormal = new Vector3();\n\t\tlet dx = 0;\n\t\tlet dy = 0;\n\n\t\t// pre-compute normals for initial \"meridian\"\n\n\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\tswitch ( j ) {\n\n\t\t\t\tcase 0:\t\t\t\t// special handling for 1st vertex on path\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tprevNormal.copy( normal );\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ( points.length - 1 ):\t// special handling for last Vertex on path\n\n\t\t\t\t\tinitNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\t\t\t// default handling for all vertices in between\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tcurNormal.copy( normal );\n\n\t\t\t\t\tnormal.x += prevNormal.x;\n\t\t\t\t\tnormal.y += prevNormal.y;\n\t\t\t\t\tnormal.z += prevNormal.z;\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tprevNormal.copy( curNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices, uvs and normals\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// normal\n\n\t\t\t\tconst x = initNormals[ 3 * j + 0 ] * sin;\n\t\t\t\tconst y = initNormals[ 3 * j + 1 ];\n\t\t\t\tconst z = initNormals[ 3 * j + 0 ] * cos;\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( c, d, b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {LatheGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\n/**\n * A geometry class for representing an octahedron.\n *\n * ```js\n * const geometry = new THREE.OctahedronGeometry();\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const octahedron = new THREE.Mesh( geometry, material );\n * scene.add( octahedron );\n * ```\n *\n * @augments PolyhedronGeometry\n * @demo scenes/geometry-browser.html#OctahedronGeometry\n */\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\t/**\n\t * Constructs a new octahedron geometry.\n\t *\n\t * @param {number} [radius=1] - Radius of the octahedron.\n\t * @param {number} [detail=0] - Setting this to a value greater than `0` adds vertices making it no longer a octahedron.\n\t */\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t-1, 0, 0,\t0, 1, 0,\n\t\t\t0, -1, 0, \t0, 0, 1,\t0, 0, -1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {OctahedronGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\n/**\n * A geometry class for representing a plane.\n *\n * ```js\n * const geometry = new THREE.PlaneGeometry( 1, 1 );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00, side: THREE.DoubleSide } );\n * const plane = new THREE.Mesh( geometry, material );\n * scene.add( plane );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#PlaneGeometry\n */\nclass PlaneGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new plane geometry.\n\t *\n\t * @param {number} [width=1] - The width along the X axis.\n\t * @param {number} [height=1] - The height along the Y axis\n\t * @param {number} [widthSegments=1] - The number of segments along the X axis.\n\t * @param {number} [heightSegments=1] - The number of segments along the Y axis.\n\t */\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {PlaneGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\n/**\n * A class for generating a two-dimensional ring geometry.\n *\n * ```js\n * const geometry = new THREE.RingGeometry( 1, 5, 32 );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00, side: THREE.DoubleSide } );\n * const mesh = new THREE.Mesh( geometry, material );\n * scene.add( mesh );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#RingGeometry\n */\nclass RingGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new ring geometry.\n\t *\n\t * @param {number} [innerRadius=0.5] - The inner radius of the ring.\n\t * @param {number} [outerRadius=1] - The outer radius of the ring.\n\t * @param {number} [thetaSegments=32] - Number of segments. A higher number means the ring will be more round. Minimum is `3`.\n\t * @param {number} [phiSegments=1] - Number of segments per ring segment. Minimum is `1`.\n\t * @param {number} [thetaStart=0] - Starting angle in radians.\n\t * @param {number} [thetaLength=Math.PI*2] - Central angle in radians.\n\t */\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {RingGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\n/**\n * Creates an one-sided polygonal geometry from one or more path shapes.\n *\n * ```js\n * const arcShape = new THREE.Shape()\n *\t.moveTo( 5, 1 )\n *\t.absarc( 1, 1, 4, 0, Math.PI * 2, false );\n *\n * const geometry = new THREE.ShapeGeometry( arcShape );\n * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00, side: THREE.DoubleSide } );\n * const mesh = new THREE.Mesh( geometry, material ) ;\n * scene.add( mesh );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#ShapeGeometry\n */\nclass ShapeGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new shape geometry.\n\t *\n\t * @param {Shape|Array<Shape>} [shapes] - A shape or an array of shapes.\n\t * @param {number} [curveSegments=12] - Number of segments per shape.\n\t */\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( -0.5, -0.5 ), new Vector2( 0.5, -0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @param {Array<Shape>} shapes - An array of shapes.\n\t * @return {ShapeGeometry} A new instance.\n\t */\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\n/**\n * A class for generating a sphere geometry.\n *\n * ```js\n * const geometry = new THREE.SphereGeometry( 15, 32, 16 );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const sphere = new THREE.Mesh( geometry, material );\n * scene.add( sphere );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#SphereGeometry\n */\nclass SphereGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new sphere geometry.\n\t *\n\t * @param {number} [radius=1] - The sphere radius.\n\t * @param {number} [widthSegments=32] - The number of horizontal segments. Minimum value is `3`.\n\t * @param {number} [heightSegments=16] - The number of vertical segments. Minimum value is `2`.\n\t * @param {number} [phiStart=0] - The horizontal starting angle in radians.\n\t * @param {number} [phiLength=Math.PI*2] - The horizontal sweep angle size.\n\t * @param {number} [thetaStart=0] - The vertical starting angle in radians.\n\t * @param {number} [thetaLength=Math.PI] - The vertical sweep angle size.\n\t */\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SphereGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy === 0 && thetaStart === 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy === heightSegments && thetaEnd === Math.PI ) {\n\n\t\t\t\tuOffset = -0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {SphereGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\n/**\n * A geometry class for representing an tetrahedron.\n *\n * ```js\n * const geometry = new THREE.TetrahedronGeometry();\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const tetrahedron = new THREE.Mesh( geometry, material );\n * scene.add( tetrahedron );\n * ```\n *\n * @augments PolyhedronGeometry\n * @demo scenes/geometry-browser.html#TetrahedronGeometry\n */\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\t/**\n\t * Constructs a new tetrahedron geometry.\n\t *\n\t * @param {number} [radius=1] - Radius of the tetrahedron.\n\t * @param {number} [detail=0] - Setting this to a value greater than `0` adds vertices making it no longer a tetrahedron.\n\t */\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t-1, -1, 1, \t-1, 1, -1, \t1, -1, -1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {TetrahedronGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\n/**\n * A geometry class for representing an torus.\n *\n * ```js\n * const geometry = new THREE.TorusGeometry( 10, 3, 16, 100 );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const torus = new THREE.Mesh( geometry, material );\n * scene.add( torus );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#TorusGeometry\n */\nclass TorusGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new torus geometry.\n\t *\n\t * @param {number} [radius=1] - Radius of the torus, from the center of the torus to the center of the tube.\n\t * @param {number} [tube=0.4] - Radius of the tube. Must be smaller than `radius`.\n\t * @param {number} [radialSegments=12] - The number of radial segments.\n\t * @param {number} [tubularSegments=48] - The number of tubular segments.\n\t * @param {number} [arc=Math.PI*2] - Central angle in radians.\n\t * @param {number} [thetaStart=0] - Start of the tubular sweep in radians.\n\t * @param {number} [thetaLength=Math.PI*2] - Length of the tubular sweep in radians.\n\t */\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength,\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tconst v = thetaStart + ( j / radialSegments ) * thetaLength;\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {TorusGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\n/**\n * Creates a torus knot, the particular shape of which is defined by a pair\n * of coprime integers, p and q. If p and q are not coprime, the result will\n * be a torus link.\n *\n * ```js\n * const geometry = new THREE.TorusKnotGeometry( 10, 3, 100, 16 );\n * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );\n * const torusKnot = new THREE.Mesh( geometry, material );\n * scene.add( torusKnot );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#TorusKnotGeometry\n */\nclass TorusKnotGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new torus knot geometry.\n\t *\n\t * @param {number} [radius=1] - Radius of the torus knot.\n\t * @param {number} [tube=0.4] - Radius of the tube.\n\t * @param {number} [tubularSegments=64] - The number of tubular segments.\n\t * @param {number} [radialSegments=8] - The number of radial segments.\n\t * @param {number} [p=2] - This value determines, how many times the geometry winds around its axis of rotational symmetry.\n\t * @param {number} [q=3] - This value determines, how many times the geometry winds around a circle in the interior of the torus.\n\t */\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segment\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectors, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {TorusKnotGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\n/**\n * Creates a tube that extrudes along a 3D curve.\n *\n * ```js\n * class CustomSinCurve extends THREE.Curve {\n *\n * \tgetPoint( t, optionalTarget = new THREE.Vector3() ) {\n *\n * \t\tconst tx = t * 3 - 1.5;\n * \t\tconst ty = Math.sin( 2 * Math.PI * t );\n * \t\tconst tz = 0;\n *\n * \t\treturn optionalTarget.set( tx, ty, tz );\n * \t}\n *\n * }\n *\n * const path = new CustomSinCurve( 10 );\n * const geometry = new THREE.TubeGeometry( path, 20, 2, 8, false );\n * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );\n * const mesh = new THREE.Mesh( geometry, material );\n * scene.add( mesh );\n * ```\n *\n * @augments BufferGeometry\n * @demo scenes/geometry-browser.html#TubeGeometry\n */\nclass TubeGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new tube geometry.\n\t *\n\t * @param {Curve} [path=QuadraticBezierCurve3] - A 3D curve defining the path of the tube.\n\t * @param {number} [tubularSegments=64] - The number of segments that make up the tube.\n\t * @param {number} [radius=1] -The radius of the tube.\n\t * @param {number} [radialSegments=8] - The number of segments that make up the cross-section.\n\t * @param {boolean} [closed=false] - Whether the tube is closed or not.\n\t */\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( -1, -1, 0 ), new Vector3( -1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TubeGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of this class from the given\n\t * JSON object.\n\t *\n\t * @param {Object} data - A JSON object representing the serialized geometry.\n\t * @return {TubeGeometry} A new instance.\n\t */\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\n/**\n * Can be used as a helper object to visualize a geometry as a wireframe.\n *\n * ```js\n * const geometry = new THREE.SphereGeometry();\n *\n * const wireframe = new THREE.WireframeGeometry( geometry );\n *\n * const line = new THREE.LineSegments( wireframe );\n * line.material.depthWrite = false;\n * line.material.opacity = 0.25;\n * line.material.transparent = true;\n *\n * scene.add( line );\n * ```\n *\n * Note: It is not yet possible to serialize/deserialize instances of this class.\n *\n * @augments BufferGeometry\n */\nclass WireframeGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new wireframe geometry.\n\t *\n\t * @param {?BufferGeometry} [geometry=null] - The geometry.\n\t */\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\t/**\n\t\t * Holds the constructor parameters that have been\n\t\t * used to generate the geometry. Any modification\n\t\t * after instantiation does not change the geometry.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1 );\n\t\tedges.add( hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tCapsuleGeometry: CapsuleGeometry,\n\tCircleGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\n/**\n * This material can receive shadows, but otherwise is completely transparent.\n *\n * ```js\n * const geometry = new THREE.PlaneGeometry( 2000, 2000 );\n * geometry.rotateX( - Math.PI / 2 );\n *\n * const material = new THREE.ShadowMaterial();\n * material.opacity = 0.2;\n *\n * const plane = new THREE.Mesh( geometry, material );\n * plane.position.y = -200;\n * plane.receiveShadow = true;\n * scene.add( plane );\n * ```\n *\n * @augments Material\n */\nclass ShadowMaterial extends Material {\n\n\t/**\n\t * Constructs a new shadow material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isShadowMaterial = true;\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.color = new Color( 0x000000 );\n\n\t\t/**\n\t\t * Overwritten since shadow materials are transparent\n\t\t * by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.transparent = true;\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Provides utility functions for managing uniforms.\n *\n * @module UniformsUtils\n */\n\n/**\n * Clones the given uniform definitions by performing a deep-copy. That means\n * if the value of a uniform refers to an object like a Vector3 or Texture,\n * the cloned uniform will refer to a new object reference.\n *\n * @param {Object} src - An object representing uniform definitions.\n * @return {Object} The cloned uniforms.\n */\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( isThreeObject( property ) ) {\n\n\t\t\t\tif ( property.isRenderTargetTexture ) {\n\n\t\t\t\t\twarn( 'UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().' );\n\t\t\t\t\tdst[ u ][ p ] = null;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t\t}\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tif ( isThreeObject( property[ 0 ] ) ) {\n\n\t\t\t\t\tconst clonedProperty = [];\n\n\t\t\t\t\tfor ( let i = 0, l = property.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tclonedProperty[ i ] = property[ i ].clone();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdst[ u ][ p ] = clonedProperty;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\n/**\n * Merges the given uniform definitions into a single object. Since the\n * method internally uses cloneUniforms(), it performs a deep-copy when\n * producing the merged uniform definitions.\n *\n * @param {Array} uniforms - An array of objects containing uniform definitions.\n * @return {Object} The merged uniforms.\n */\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nfunction isThreeObject( property ) {\n\n\treturn ( property && ( property.isColor ||\n\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\tproperty.isTexture || property.isQuaternion ) );\n\n}\n\nfunction cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction getUnlitUniformColorSpace( renderer ) {\n\n\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\tif ( currentRenderTarget === null ) {\n\n\t\t// https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398\n\t\treturn renderer.outputColorSpace;\n\n\t}\n\n\t// https://github.com/mrdoob/three.js/issues/27868\n\tif ( currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\treturn currentRenderTarget.texture.colorSpace;\n\n\t}\n\n\treturn ColorManagement.workingColorSpace;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n/**\n * A material rendered with custom shaders. A shader is a small program written in GLSL.\n * that runs on the GPU. You may want to use a custom shader if you need to implement an\n * effect not included with any of the built-in materials.\n *\n * There are the following notes to bear in mind when using a `ShaderMaterial`:\n *\n * - `ShaderMaterial` can only be used with {@link WebGLRenderer}.\n * - Built in attributes and uniforms are passed to the shaders along with your code. If\n * you don't want that, use {@link RawShaderMaterial} instead.\n * - You can use the directive `#pragma unroll_loop_start` and `#pragma unroll_loop_end`\n * in order to unroll a `for` loop in GLSL by the shader preprocessor. The directive has\n * to be placed right above the loop. The loop formatting has to correspond to a defined standard.\n *   - The loop has to be [normalized](https://en.wikipedia.org/wiki/Normalized_loop).\n *   - The loop variable has to be *i*.\n *   - The value `UNROLLED_LOOP_INDEX` will be replaced with the explicitly\n * value of *i* for the given iteration and can be used in preprocessor\n * statements.\n *\n * ```js\n * const material = new THREE.ShaderMaterial( {\n * \tuniforms: {\n * \t\ttime: { value: 1.0 },\n * \t\tresolution: { value: new THREE.Vector2() }\n * \t},\n * \tvertexShader: document.getElementById( 'vertexShader' ).textContent,\n * \tfragmentShader: document.getElementById( 'fragmentShader' ).textContent\n * } );\n * ```\n *\n * @augments Material\n */\nclass ShaderMaterial extends Material {\n\n\t/**\n\t * Constructs a new shader material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\t/**\n\t\t * Defines custom constants using `#define` directives within the GLSL code\n\t\t * for both the vertex shader and the fragment shader; each key/value pair\n\t\t * yields another directive.\n\t\t * ```js\n\t\t * defines: {\n\t\t * \tFOO: 15,\n\t\t * \tBAR: true\n\t\t * }\n\t\t * ```\n\t\t * Yields the lines:\n\t\t * ```\n\t\t * #define FOO 15\n\t\t * #define BAR true\n\t\t * ```\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.defines = {};\n\n\t\t/**\n\t\t * An object of the form:\n\t\t * ```js\n\t\t * {\n\t\t * \t\"uniform1\": { value: 1.0 },\n\t\t * \t\"uniform2\": { value: 2 }\n\t\t * }\n\t\t * ```\n\t\t * specifying the uniforms to be passed to the shader code; keys are uniform\n\t\t * names, values are definitions of the form\n\t\t * ```\n\t\t * {\n\t\t * \tvalue: 1.0\n\t\t * }\n\t\t * ```\n\t\t * where `value` is the value of the uniform. Names must match the name of\n\t\t * the uniform, as defined in the GLSL code. Note that uniforms are refreshed\n\t\t * on every frame, so updating the value of the uniform will immediately\n\t\t * update the value available to the GLSL code.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.uniforms = {};\n\n\t\t/**\n\t\t * An array holding uniforms groups for configuring UBOs.\n\t\t *\n\t\t * @type {Array<UniformsGroup>}\n\t\t */\n\t\tthis.uniformsGroups = [];\n\n\t\t/**\n\t\t * Vertex shader GLSL code. This is the actual code for the shader.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.vertexShader = default_vertex;\n\n\t\t/**\n\t\t * Fragment shader GLSL code. This is the actual code for the shader.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.fragmentShader = default_fragment;\n\n\t\t/**\n\t\t * Controls line thickness or lines.\n\t\t *\n\t\t * WebGL and WebGPU ignore this setting and always render line primitives with a\n\t\t * width of one pixel.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.linewidth = 1;\n\n\t\t/**\n\t\t * Renders the geometry as a wireframe.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.wireframe = false;\n\n\t\t/**\n\t\t * Controls the thickness of the wireframe.\n\t\t *\n\t\t * WebGL and WebGPU ignore this property and always render\n\t\t * 1 pixel wide lines.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.wireframeLinewidth = 1;\n\n\t\t/**\n\t\t * Defines whether the material color is affected by global fog settings; `true`\n\t\t * to pass fog uniforms to the shader.\n\t\t *\n\t\t * Setting this property to `true` requires the definition of fog uniforms. It is\n\t\t * recommended to use `UniformsUtils.merge()` to combine the custom shader uniforms\n\t\t * with predefined fog uniforms.\n\t\t *\n\t\t * ```js\n\t\t * const material = new ShaderMaterial( {\n\t\t *     uniforms: UniformsUtils.merge( [ UniformsLib[ 'fog' ], shaderUniforms ] );\n\t\t *     vertexShader: vertexShader,\n\t\t *     fragmentShader: fragmentShader,\n\t\t *     fog: true\n\t\t * } );\n\t\t * ```\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.fog = false;\n\n\t\t/**\n\t\t * Defines whether this material uses lighting; `true` to pass uniform data\n\t\t * related to lighting to this shader.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.lights = false;\n\n\t\t/**\n\t\t * Defines whether this material supports clipping; `true` to let the renderer\n\t\t * pass the clippingPlanes uniform.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clipping = false;\n\n\t\t/**\n\t\t * Overwritten and set to `true` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.forceSinglePass = true;\n\n\t\t/**\n\t\t * This object allows to enable certain WebGL 2 extensions.\n\t\t *\n\t\t * - clipCullDistance: set to `true` to use vertex shader clipping\n\t\t * - multiDraw: set to `true` to use vertex shader multi_draw / enable gl_DrawID\n\t\t *\n\t\t * @type {{clipCullDistance:false,multiDraw:false}}\n\t\t */\n\t\tthis.extensions = {\n\t\t\tclipCullDistance: false, // set to use vertex shader clipping\n\t\t\tmultiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID\n\t\t};\n\n\t\t/**\n\t\t * When the rendered geometry doesn't include these attributes but the\n\t\t * material does, these default values will be passed to the shaders. This\n\t\t * avoids errors when buffer data is missing.\n\t\t *\n\t\t * - color: [ 1, 1, 1 ]\n\t\t * - uv: [ 0, 0 ]\n\t\t * - uv1: [ 0, 0 ]\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv1': [ 0, 0 ]\n\t\t};\n\n\t\t/**\n\t\t * If set, this calls [gl.bindAttribLocation](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bindAttribLocation)\n\t\t * to bind a generic vertex index to an attribute variable.\n\t\t *\n\t\t * @type {string|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.index0AttributeName = undefined;\n\n\t\t/**\n\t\t * Can be used to force a uniform update while changing uniforms in\n\t\t * {@link Object3D#onBeforeRender}.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\t/**\n\t\t * Defines the GLSL version of custom shader code.\n\t\t *\n\t\t * @type {?(GLSL1|GLSL3)}\n\t\t * @default null\n\t\t */\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\tthis.defaultAttributeValues = Object.assign( {}, source.defaultAttributeValues );\n\n\t\tthis.index0AttributeName = source.index0AttributeName;\n\n\t\tthis.uniformsNeedUpdate = source.uniformsNeedUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tdata.lights = this.lights;\n\t\tdata.clipping = this.clipping;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * This class works just like {@link ShaderMaterial}, except that definitions\n * of built-in uniforms and attributes are not automatically prepended to the\n * GLSL shader code.\n *\n * `RawShaderMaterial` can only be used with {@link WebGLRenderer}.\n *\n * @augments ShaderMaterial\n */\nclass RawShaderMaterial extends ShaderMaterial {\n\n\t/**\n\t * Constructs a new raw shader material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRawShaderMaterial = true;\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\n/**\n * A standard physically based material, using Metallic-Roughness workflow.\n *\n * Physically based rendering (PBR) has recently become the standard in many\n * 3D applications, such as [Unity](https://blogs.unity3d.com/2014/10/29/physically-based-shading-in-unity-5-a-primer/),\n * [Unreal](https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/) and\n * [3D Studio Max](http://area.autodesk.com/blogs/the-3ds-max-blog/what039s-new-for-rendering-in-3ds-max-2017).\n *\n * This approach differs from older approaches in that instead of using\n * approximations for the way in which light interacts with a surface, a\n * physically correct model is used. The idea is that, instead of tweaking\n * materials to look good under specific lighting, a material can be created\n * that will react 'correctly' under all lighting scenarios.\n *\n * In practice this gives a more accurate and realistic looking result than\n * the {@link MeshLambertMaterial} or {@link MeshPhongMaterial}, at the cost of\n * being somewhat more computationally expensive. `MeshStandardMaterial` uses per-fragment\n * shading.\n *\n * Note that for best results you should always specify an environment map when using this material.\n *\n * For a non-technical introduction to the concept of PBR and how to set up a\n * PBR material, check out these articles by the people at [marmoset](https://www.marmoset.co):\n *\n * - [Basic Theory of Physically Based Rendering](https://www.marmoset.co/posts/basic-theory-of-physically-based-rendering/)\n * - [Physically Based Rendering and You Can Too](https://www.marmoset.co/posts/physically-based-rendering-and-you-can-too/)\n *\n * Technical details of the approach used in three.js (and most other PBR systems) can be found is this\n * [paper from Disney](https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf)\n * (pdf), by Brent Burley.\n *\n * @augments Material\n * @demo scenes/material-browser.html#MeshStandardMaterial\n */\nclass MeshStandardMaterial extends Material {\n\n\t/**\n\t * Constructs a new mesh standard material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshStandardMaterial = true;\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\t/**\n\t\t * How rough the material appears. `0.0` means a smooth mirror reflection, `1.0`\n\t\t * means fully diffuse. If `roughnessMap` is also provided,\n\t\t * both values are multiplied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.roughness = 1.0;\n\n\t\t/**\n\t\t * How much the material is like a metal. Non-metallic materials such as wood\n\t\t * or stone use `0.0`, metallic use `1.0`, with nothing (usually) in between.\n\t\t * A value between `0.0` and `1.0` could be used for a rusty metal look.\n\t\t * If `metalnessMap` is also provided, both values are multiplied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.metalness = 0.0;\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map\n\t\t * color is modulated by the diffuse `color`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The light map. Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.lightMap = null;\n\n\t\t/**\n\t\t * Intensity of the baked light.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\t/**\n\t\t * The red channel of this texture is used as the ambient occlusion map.\n\t\t * Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.aoMap = null;\n\n\t\t/**\n\t\t * Intensity of the ambient occlusion effect. Range is `[0,1]`, where `0`\n\t\t * disables ambient occlusion. Where intensity is `1` and the AO map's\n\t\t * red channel is also `1`, ambient light is fully occluded on a surface.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\t/**\n\t\t * Emissive (light) color of the material, essentially a solid color\n\t\t * unaffected by other lighting.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.emissive = new Color( 0x000000 );\n\n\t\t/**\n\t\t * Intensity of the emissive light. Modulates the emissive color.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.emissiveIntensity = 1.0;\n\n\t\t/**\n\t\t * Set emissive (glow) map. The emissive map color is modulated by the\n\t\t * emissive color and the emissive intensity. If you have an emissive map,\n\t\t * be sure to set the emissive color to something other than black.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.emissiveMap = null;\n\n\t\t/**\n\t\t * The texture to create a bump map. The black and white values map to the\n\t\t * perceived depth in relation to the lights. Bump doesn't actually affect\n\t\t * the geometry of the object, only the lighting. If a normal map is defined\n\t\t * this will be ignored.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.bumpMap = null;\n\n\t\t/**\n\t\t * How much the bump map affects the material. Typical range is `[0,1]`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.bumpScale = 1;\n\n\t\t/**\n\t\t * The texture to create a normal map. The RGB values affect the surface\n\t\t * normal for each pixel fragment and change the way the color is lit. Normal\n\t\t * maps do not change the actual shape of the surface, only the lighting. In\n\t\t * case the material has a normal map authored using the left handed\n\t\t * convention, the `y` component of `normalScale` should be negated to compensate\n\t\t * for the different handedness.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.normalMap = null;\n\n\t\t/**\n\t\t * The type of normal map.\n\t\t *\n\t\t * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}\n\t\t * @default TangentSpaceNormalMap\n\t\t */\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\n\t\t/**\n\t\t * How much the normal map affects the material. Typical value range is `[0,1]`.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (1,1)\n\t\t */\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\t/**\n\t\t * The displacement map affects the position of the mesh's vertices. Unlike\n\t\t * other maps which only affect the light and shade of the material the\n\t\t * displaced vertices can cast shadows, block other objects, and otherwise\n\t\t * act as real geometry. The displacement texture is an image where the value\n\t\t * of each pixel (white being the highest) is mapped against, and\n\t\t * repositions, the vertices of the mesh.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.displacementMap = null;\n\n\t\t/**\n\t\t * How much the displacement map affects the mesh (where black is no\n\t\t * displacement, and white is maximum displacement). Without a displacement\n\t\t * map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementScale = 1;\n\n\t\t/**\n\t\t * The offset of the displacement map's values on the mesh's vertices.\n\t\t * The bias is added to the scaled sample of the displacement map.\n\t\t * Without a displacement map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementBias = 0;\n\n\t\t/**\n\t\t * The green channel of this texture is used to alter the roughness of the\n\t\t * material.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.roughnessMap = null;\n\n\t\t/**\n\t\t * The blue channel of this texture is used to alter the metalness of the\n\t\t * material.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.metalnessMap = null;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * The environment map. To ensure a physically correct rendering, environment maps\n\t\t * are internally pre-processed with {@link PMREMGenerator}.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.envMap = null;\n\n\t\t/**\n\t\t * The rotation of the environment map in radians.\n\t\t *\n\t\t * @type {Euler}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.envMapRotation = new Euler();\n\n\t\t/**\n\t\t * Scales the effect of the environment map by multiplying its color.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.envMapIntensity = 1.0;\n\n\t\t/**\n\t\t * Renders the geometry as a wireframe.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.wireframe = false;\n\n\t\t/**\n\t\t * Controls the thickness of the wireframe.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.wireframeLinewidth = 1;\n\n\t\t/**\n\t\t * Defines appearance of wireframe ends.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinecap = 'round';\n\n\t\t/**\n\t\t * Defines appearance of wireframe joints.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\t/**\n\t\t * Whether the material is rendered with flat shading or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flatShading = false;\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * An extension of the {@link MeshStandardMaterial}, providing more advanced\n * physically-based rendering properties:\n *\n * - Anisotropy: Ability to represent the anisotropic property of materials\n * as observable with brushed metals.\n * - Clearcoat: Some materials — like car paints, carbon fiber, and wet surfaces — require\n * a clear, reflective layer on top of another layer that may be irregular or rough.\n * Clearcoat approximates this effect, without the need for a separate transparent surface.\n * - Iridescence: Allows to render the effect where hue varies  depending on the viewing\n * angle and illumination angle. This can be seen on soap bubbles, oil films, or on the\n * wings of many insects.\n * - Physically-based transparency: One limitation of {@link Material#opacity} is that highly\n * transparent materials are less reflective. Physically-based transmission provides a more\n * realistic option for thin, transparent surfaces like glass.\n * - Advanced reflectivity: More flexible reflectivity for non-metallic materials.\n * - Sheen: Can be used for representing cloth and fabric materials.\n *\n * As a result of these complex shading features, `MeshPhysicalMaterial` has a\n * higher performance cost, per pixel, than other three.js materials. Most\n * effects are disabled by default, and add cost as they are enabled. For\n * best results, always specify an environment map when using this material.\n *\n * @augments MeshStandardMaterial\n * @demo scenes/material-browser.html#MeshPhysicalMaterial\n */\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\t/**\n\t * Constructs a new mesh physical material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshPhysicalMaterial = true;\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\t/**\n\t\t * The rotation of the anisotropy in tangent, bitangent space, measured in radians\n\t\t * counter-clockwise from the tangent. When `anisotropyMap` is present, this\n\t\t * property provides additional rotation to the vectors in the texture.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.anisotropyRotation = 0;\n\n\t\t/**\n\t\t * Red and green channels represent the anisotropy direction in `[-1, 1]` tangent,\n\t\t * bitangent space, to be rotated by `anisotropyRotation`. The blue channel\n\t\t * contains strength as `[0, 1]` to be multiplied by `anisotropy`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.anisotropyMap = null;\n\n\t\t/**\n\t\t * The red channel of this texture is multiplied against `clearcoat`,\n\t\t * for per-pixel control over a coating's intensity.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.clearcoatMap = null;\n\n\t\t/**\n\t\t * Roughness of the clear coat layer, from `0.0` to `1.0`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.clearcoatRoughness = 0.0;\n\n\t\t/**\n\t\t * The green channel of this texture is multiplied against\n\t\t * `clearcoatRoughness`, for per-pixel control over a coating's roughness.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.clearcoatRoughnessMap = null;\n\n\t\t/**\n\t\t * How much `clearcoatNormalMap` affects the clear coat layer, from\n\t\t * `(0,0)` to `(1,1)`.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (1,1)\n\t\t */\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\n\t\t/**\n\t\t * Can be used to enable independent normals for the clear coat layer.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.clearcoatNormalMap = null;\n\n\t\t/**\n\t\t * Index-of-refraction for non-metallic materials, from `1.0` to `2.333`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1.5\n\t\t */\n\t\tthis.ior = 1.5;\n\n\t\t/**\n\t\t * Degree of reflectivity, from `0.0` to `1.0`. Default is `0.5`, which\n\t\t * corresponds to an index-of-refraction of `1.5`.\n\t\t *\n\t\t * This models the reflectivity of non-metallic materials. It has no effect\n\t\t * when `metalness` is `1.0`\n\t\t *\n\t\t * @name MeshPhysicalMaterial#reflectivity\n\t\t * @type {number}\n\t\t * @default 0.5\n\t\t */\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\t/**\n\t\t * The red channel of this texture is multiplied against `iridescence`, for per-pixel\n\t\t * control over iridescence.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.iridescenceMap = null;\n\n\t\t/**\n\t\t * Strength of the iridescence RGB color shift effect, represented by an index-of-refraction.\n\t\t * Between `1.0` to `2.333`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1.3\n\t\t */\n\t\tthis.iridescenceIOR = 1.3;\n\n\t\t/**\n\t\t *Array of exactly 2 elements, specifying minimum and maximum thickness of the iridescence layer.\n\t\t Thickness of iridescence layer has an equivalent effect of the one `thickness` has on `ior`.\n\t\t *\n\t\t * @type {Array<number,number>}\n\t\t * @default [100,400]\n\t\t */\n\t\tthis.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t/**\n\t\t * A texture that defines the thickness of the iridescence layer, stored in the green channel.\n\t\t * Minimum and maximum values of thickness are defined by `iridescenceThicknessRange` array:\n\t\t * - `0.0` in the green channel will result in thickness equal to first element of the array.\n\t\t * - `1.0` in the green channel will result in thickness equal to second element of the array.\n\t\t * - Values in-between will linearly interpolate between the elements of the array.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.iridescenceThicknessMap = null;\n\n\t\t/**\n\t\t * The sheen tint.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.sheenColor = new Color( 0x000000 );\n\n\t\t/**\n\t\t * The RGB channels of this texture are multiplied against  `sheenColor`, for per-pixel control\n\t\t * over sheen tint.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.sheenColorMap = null;\n\n\t\t/**\n\t\t * Roughness of the sheen layer, from `0.0` to `1.0`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.sheenRoughness = 1.0;\n\n\t\t/**\n\t\t * The alpha channel of this texture is multiplied against `sheenRoughness`, for per-pixel control\n\t\t * over sheen roughness.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.sheenRoughnessMap = null;\n\n\t\t/**\n\t\t * The red channel of this texture is multiplied against `transmission`, for per-pixel control over\n\t\t * optical transparency.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.transmissionMap = null;\n\n\t\t/**\n\t\t * The thickness of the volume beneath the surface. The value is given in the\n\t\t * coordinate space of the mesh. If the value is `0` the material is\n\t\t * thin-walled. Otherwise the material is a volume boundary.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.thickness = 0;\n\n\t\t/**\n\t\t * A texture that defines the thickness, stored in the green channel. This will\n\t\t * be multiplied by `thickness`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.thicknessMap = null;\n\n\t\t/**\n\t\t * Density of the medium given as the average distance that light travels in\n\t\t * the medium before interacting with a particle. The value is given in world\n\t\t * space units, and must be greater than zero.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.attenuationDistance = Infinity;\n\n\t\t/**\n\t\t * The color that white light turns into due to absorption when reaching the\n\t\t * attenuation distance.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\t/**\n\t\t * A float that scales the amount of specular reflection for non-metals only.\n\t\t * When set to zero, the model is effectively Lambertian. From `0.0` to `1.0`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.specularIntensity = 1.0;\n\n\t\t/**\n\t\t * The alpha channel of this texture is multiplied against `specularIntensity`,\n\t\t * for per-pixel control over specular intensity.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.specularIntensityMap = null;\n\n\t\t/**\n\t\t * Tints the specular reflection at normal incidence for non-metals only.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\n\t\t/**\n\t\t * The RGB channels of this texture are multiplied against `specularColor`,\n\t\t * for per-pixel control over specular color.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.specularColorMap = null;\n\n\t\tthis._anisotropy = 0;\n\t\tthis._clearcoat = 0;\n\t\tthis._dispersion = 0;\n\t\tthis._iridescence = 0;\n\t\tthis._sheen = 0.0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * The anisotropy strength, from `0.0` to `1.0`.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget anisotropy() {\n\n\t\treturn this._anisotropy;\n\n\t}\n\n\tset anisotropy( value ) {\n\n\t\tif ( this._anisotropy > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._anisotropy = value;\n\n\t}\n\n\t/**\n\t * Represents the intensity of the clear coat layer, from `0.0` to `1.0`. Use\n\t * clear coat related properties to enable multilayer materials that have a\n\t * thin translucent layer over the base layer.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\t/**\n\t * The intensity of the iridescence layer, simulating RGB color shift based on the angle between\n\t * the surface and the viewer, from `0.0` to `1.0`.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget iridescence() {\n\n\t\treturn this._iridescence;\n\n\t}\n\n\tset iridescence( value ) {\n\n\t\tif ( this._iridescence > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._iridescence = value;\n\n\t}\n\n\t/**\n\t * Defines the strength of the angular separation of colors (chromatic aberration) transmitting\n\t * through a relatively clear volume. Any value zero or larger is valid, the typical range of\n\t * realistic values is `[0, 1]`. This property can be only be used with transmissive objects.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget dispersion() {\n\n\t\treturn this._dispersion;\n\n\t}\n\n\tset dispersion( value ) {\n\n\t\tif ( this._dispersion > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._dispersion = value;\n\n\t}\n\n\t/**\n\t * The intensity of the sheen layer, from `0.0` to `1.0`.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\t/**\n\t * Degree of transmission (or optical transparency), from `0.0` to `1.0`.\n\t *\n\t * Thin, transparent or semitransparent, plastic or glass materials remain\n\t * largely reflective even if they are fully transmissive. The transmission\n\t * property can be used to model these materials.\n\t *\n\t * When transmission is non-zero, `opacity` should be  set to `1`.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.anisotropy = source.anisotropy;\n\t\tthis.anisotropyRotation = source.anisotropyRotation;\n\t\tthis.anisotropyMap = source.anisotropyMap;\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.dispersion = source.dispersion;\n\t\tthis.ior = source.ior;\n\n\t\tthis.iridescence = source.iridescence;\n\t\tthis.iridescenceMap = source.iridescenceMap;\n\t\tthis.iridescenceIOR = source.iridescenceIOR;\n\t\tthis.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];\n\t\tthis.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A material for shiny surfaces with specular highlights.\n *\n * The material uses a non-physically based [Blinn-Phong](https://en.wikipedia.org/wiki/Blinn-Phong_shading_model)\n * model for calculating reflectance. Unlike the Lambertian model used in the\n * {@link MeshLambertMaterial} this can simulate shiny surfaces with specular\n * highlights (such as varnished wood). `MeshPhongMaterial` uses per-fragment shading.\n *\n * Performance will generally be greater when using this material over the\n * {@link MeshStandardMaterial} or {@link MeshPhysicalMaterial}, at the cost of\n * some graphical accuracy.\n *\n * @augments Material\n * @demo scenes/material-browser.html#MeshPhongMaterial\n */\nclass MeshPhongMaterial extends Material {\n\n\t/**\n\t * Constructs a new mesh phong material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshPhongMaterial = true;\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\t/**\n\t\t * Specular color of the material. The default color is set to `0x111111` (very dark grey)\n\t\t *\n\t\t * This defines how shiny the material is and the color of its shine.\n\t\t *\n\t\t * @type {Color}\n\t\t */\n\t\tthis.specular = new Color( 0x111111 );\n\n\t\t/**\n\t\t * How shiny the specular highlight is; a higher value gives a sharper highlight.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 30\n\t\t */\n\t\tthis.shininess = 30;\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map\n\t\t * color is modulated by the diffuse `color`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The light map. Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.lightMap = null;\n\n\t\t/**\n\t\t * Intensity of the baked light.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\t/**\n\t\t * The red channel of this texture is used as the ambient occlusion map.\n\t\t * Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.aoMap = null;\n\n\t\t/**\n\t\t * Intensity of the ambient occlusion effect. Range is `[0,1]`, where `0`\n\t\t * disables ambient occlusion. Where intensity is `1` and the AO map's\n\t\t * red channel is also `1`, ambient light is fully occluded on a surface.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\t/**\n\t\t * Emissive (light) color of the material, essentially a solid color\n\t\t * unaffected by other lighting.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.emissive = new Color( 0x000000 );\n\n\t\t/**\n\t\t * Intensity of the emissive light. Modulates the emissive color.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.emissiveIntensity = 1.0;\n\n\t\t/**\n\t\t * Set emissive (glow) map. The emissive map color is modulated by the\n\t\t * emissive color and the emissive intensity. If you have an emissive map,\n\t\t * be sure to set the emissive color to something other than black.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.emissiveMap = null;\n\n\t\t/**\n\t\t * The texture to create a bump map. The black and white values map to the\n\t\t * perceived depth in relation to the lights. Bump doesn't actually affect\n\t\t * the geometry of the object, only the lighting. If a normal map is defined\n\t\t * this will be ignored.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.bumpMap = null;\n\n\t\t/**\n\t\t * How much the bump map affects the material. Typical range is `[0,1]`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.bumpScale = 1;\n\n\t\t/**\n\t\t * The texture to create a normal map. The RGB values affect the surface\n\t\t * normal for each pixel fragment and change the way the color is lit. Normal\n\t\t * maps do not change the actual shape of the surface, only the lighting. In\n\t\t * case the material has a normal map authored using the left handed\n\t\t * convention, the `y` component of `normalScale` should be negated to compensate\n\t\t * for the different handedness.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.normalMap = null;\n\n\t\t/**\n\t\t * The type of normal map.\n\t\t *\n\t\t * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}\n\t\t * @default TangentSpaceNormalMap\n\t\t */\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\n\t\t/**\n\t\t * How much the normal map affects the material. Typical value range is `[0,1]`.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (1,1)\n\t\t */\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\t/**\n\t\t * The displacement map affects the position of the mesh's vertices. Unlike\n\t\t * other maps which only affect the light and shade of the material the\n\t\t * displaced vertices can cast shadows, block other objects, and otherwise\n\t\t * act as real geometry. The displacement texture is an image where the value\n\t\t * of each pixel (white being the highest) is mapped against, and\n\t\t * repositions, the vertices of the mesh.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.displacementMap = null;\n\n\t\t/**\n\t\t * How much the displacement map affects the mesh (where black is no\n\t\t * displacement, and white is maximum displacement). Without a displacement\n\t\t * map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementScale = 1;\n\n\t\t/**\n\t\t * The offset of the displacement map's values on the mesh's vertices.\n\t\t * The bias is added to the scaled sample of the displacement map.\n\t\t * Without a displacement map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementBias = 0;\n\n\t\t/**\n\t\t * The specular map value affects both how much the specular surface\n\t\t * highlight contributes and how much of the environment map affects the\n\t\t * surface.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.specularMap = null;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * The environment map.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.envMap = null;\n\n\t\t/**\n\t\t * The rotation of the environment map in radians.\n\t\t *\n\t\t * @type {Euler}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.envMapRotation = new Euler();\n\n\t\t/**\n\t\t * How to combine the result of the surface's color with the environment map, if any.\n\t\t *\n\t\t * When set to `MixOperation`, the {@link MeshBasicMaterial#reflectivity} is used to\n\t\t * blend between the two colors.\n\t\t *\n\t\t * @type {(MultiplyOperation|MixOperation|AddOperation)}\n\t\t * @default MultiplyOperation\n\t\t */\n\t\tthis.combine = MultiplyOperation;\n\n\t\t/**\n\t\t * How much the environment map affects the surface.\n\t\t * The valid range is between `0` (no reflections) and `1` (full reflections).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.reflectivity = 1;\n\n\t\t/**\n\t\t * Scales the effect of the environment map by multiplying its color.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.envMapIntensity = 1.0;\n\n\t\t/**\n\t\t * The index of refraction (IOR) of air (approximately 1) divided by the\n\t\t * index of refraction of the material. It is used with environment mapping\n\t\t * modes {@link CubeRefractionMapping} and {@link EquirectangularRefractionMapping}.\n\t\t * The refraction ratio should not exceed `1`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.98\n\t\t */\n\t\tthis.refractionRatio = 0.98;\n\n\t\t/**\n\t\t * Renders the geometry as a wireframe.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.wireframe = false;\n\n\t\t/**\n\t\t * Controls the thickness of the wireframe.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.wireframeLinewidth = 1;\n\n\t\t/**\n\t\t * Defines appearance of wireframe ends.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinecap = 'round';\n\n\t\t/**\n\t\t * Defines appearance of wireframe joints.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\t/**\n\t\t * Whether the material is rendered with flat shading or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flatShading = false;\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A material implementing toon shading.\n *\n * @augments Material\n * @demo scenes/material-browser.html#MeshToonMaterial\n */\nclass MeshToonMaterial extends Material {\n\n\t/**\n\t * Constructs a new mesh toon material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshToonMaterial = true;\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.color = new Color( 0xffffff );\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map\n\t\t * color is modulated by the diffuse `color`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * Gradient map for toon shading. It's required to set\n\t\t * {@link Texture#minFilter} and {@link Texture#magFilter} to {@link NearestFilter}\n\t\t * when using this type of texture.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.gradientMap = null;\n\n\t\t/**\n\t\t * The light map. Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.lightMap = null;\n\n\t\t/**\n\t\t * Intensity of the baked light.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\t/**\n\t\t * The red channel of this texture is used as the ambient occlusion map.\n\t\t * Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.aoMap = null;\n\n\t\t/**\n\t\t * Intensity of the ambient occlusion effect. Range is `[0,1]`, where `0`\n\t\t * disables ambient occlusion. Where intensity is `1` and the AO map's\n\t\t * red channel is also `1`, ambient light is fully occluded on a surface.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\t/**\n\t\t * Emissive (light) color of the material, essentially a solid color\n\t\t * unaffected by other lighting.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.emissive = new Color( 0x000000 );\n\n\t\t/**\n\t\t * Intensity of the emissive light. Modulates the emissive color.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.emissiveIntensity = 1.0;\n\n\t\t/**\n\t\t * Set emissive (glow) map. The emissive map color is modulated by the\n\t\t * emissive color and the emissive intensity. If you have an emissive map,\n\t\t * be sure to set the emissive color to something other than black.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.emissiveMap = null;\n\n\t\t/**\n\t\t * The texture to create a bump map. The black and white values map to the\n\t\t * perceived depth in relation to the lights. Bump doesn't actually affect\n\t\t * the geometry of the object, only the lighting. If a normal map is defined\n\t\t * this will be ignored.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.bumpMap = null;\n\n\t\t/**\n\t\t * How much the bump map affects the material. Typical range is `[0,1]`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.bumpScale = 1;\n\n\t\t/**\n\t\t * The texture to create a normal map. The RGB values affect the surface\n\t\t * normal for each pixel fragment and change the way the color is lit. Normal\n\t\t * maps do not change the actual shape of the surface, only the lighting. In\n\t\t * case the material has a normal map authored using the left handed\n\t\t * convention, the `y` component of `normalScale` should be negated to compensate\n\t\t * for the different handedness.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.normalMap = null;\n\n\t\t/**\n\t\t * The type of normal map.\n\t\t *\n\t\t * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}\n\t\t * @default TangentSpaceNormalMap\n\t\t */\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\n\t\t/**\n\t\t * How much the normal map affects the material. Typical value range is `[0,1]`.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (1,1)\n\t\t */\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\t/**\n\t\t * The displacement map affects the position of the mesh's vertices. Unlike\n\t\t * other maps which only affect the light and shade of the material the\n\t\t * displaced vertices can cast shadows, block other objects, and otherwise\n\t\t * act as real geometry. The displacement texture is an image where the value\n\t\t * of each pixel (white being the highest) is mapped against, and\n\t\t * repositions, the vertices of the mesh.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.displacementMap = null;\n\n\t\t/**\n\t\t * How much the displacement map affects the mesh (where black is no\n\t\t * displacement, and white is maximum displacement). Without a displacement\n\t\t * map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementScale = 1;\n\n\t\t/**\n\t\t * The offset of the displacement map's values on the mesh's vertices.\n\t\t * The bias is added to the scaled sample of the displacement map.\n\t\t * Without a displacement map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementBias = 0;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * Renders the geometry as a wireframe.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.wireframe = false;\n\n\t\t/**\n\t\t * Controls the thickness of the wireframe.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.wireframeLinewidth = 1;\n\n\t\t/**\n\t\t * Defines appearance of wireframe ends.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinecap = 'round';\n\n\t\t/**\n\t\t * Defines appearance of wireframe joints.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A material that maps the normal vectors to RGB colors.\n *\n * @augments Material\n * @demo scenes/material-browser.html#MeshNormalMaterial\n */\nclass MeshNormalMaterial extends Material {\n\n\t/**\n\t * Constructs a new mesh normal material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshNormalMaterial = true;\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\t/**\n\t\t * The texture to create a bump map. The black and white values map to the\n\t\t * perceived depth in relation to the lights. Bump doesn't actually affect\n\t\t * the geometry of the object, only the lighting. If a normal map is defined\n\t\t * this will be ignored.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.bumpMap = null;\n\n\t\t/**\n\t\t * How much the bump map affects the material. Typical range is `[0,1]`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.bumpScale = 1;\n\n\t\t/**\n\t\t * The texture to create a normal map. The RGB values affect the surface\n\t\t * normal for each pixel fragment and change the way the color is lit. Normal\n\t\t * maps do not change the actual shape of the surface, only the lighting. In\n\t\t * case the material has a normal map authored using the left handed\n\t\t * convention, the `y` component of `normalScale` should be negated to compensate\n\t\t * for the different handedness.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.normalMap = null;\n\n\t\t/**\n\t\t * The type of normal map.\n\t\t *\n\t\t * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}\n\t\t * @default TangentSpaceNormalMap\n\t\t */\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\n\t\t/**\n\t\t * How much the normal map affects the material. Typical value range is `[0,1]`.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (1,1)\n\t\t */\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\t/**\n\t\t * The displacement map affects the position of the mesh's vertices. Unlike\n\t\t * other maps which only affect the light and shade of the material the\n\t\t * displaced vertices can cast shadows, block other objects, and otherwise\n\t\t * act as real geometry. The displacement texture is an image where the value\n\t\t * of each pixel (white being the highest) is mapped against, and\n\t\t * repositions, the vertices of the mesh.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.displacementMap = null;\n\n\t\t/**\n\t\t * How much the displacement map affects the mesh (where black is no\n\t\t * displacement, and white is maximum displacement). Without a displacement\n\t\t * map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementScale = 1;\n\n\t\t/**\n\t\t * The offset of the displacement map's values on the mesh's vertices.\n\t\t * The bias is added to the scaled sample of the displacement map.\n\t\t * Without a displacement map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementBias = 0;\n\n\t\t/**\n\t\t * Renders the geometry as a wireframe.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.wireframe = false;\n\n\t\t/**\n\t\t * Controls the thickness of the wireframe.\n\t\t *\n\t\t * WebGL and WebGPU ignore this property and always render\n\t\t * 1 pixel wide lines.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.wireframeLinewidth = 1;\n\n\t\t/**\n\t\t * Whether the material is rendered with flat shading or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A material for non-shiny surfaces, without specular highlights.\n *\n * The material uses a non-physically based [Lambertian](https://en.wikipedia.org/wiki/Lambertian_reflectance)\n * model for calculating reflectance. This can simulate some surfaces (such\n * as untreated wood or stone) well, but cannot simulate shiny surfaces with\n * specular highlights (such as varnished wood). `MeshLambertMaterial` uses per-fragment\n * shading.\n *\n * Due to the simplicity of the reflectance and illumination models,\n * performance will be greater when using this material over the\n * {@link MeshPhongMaterial}, {@link MeshStandardMaterial} or\n * {@link MeshPhysicalMaterial}, at the cost of some graphical accuracy.\n *\n * @augments Material\n * @demo scenes/material-browser.html#MeshLambertMaterial\n */\nclass MeshLambertMaterial extends Material {\n\n\t/**\n\t * Constructs a new mesh lambert material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshLambertMaterial = true;\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map\n\t\t * color is modulated by the diffuse `color`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The light map. Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.lightMap = null;\n\n\t\t/**\n\t\t * Intensity of the baked light.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\t/**\n\t\t * The red channel of this texture is used as the ambient occlusion map.\n\t\t * Requires a second set of UVs.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.aoMap = null;\n\n\t\t/**\n\t\t * Intensity of the ambient occlusion effect. Range is `[0,1]`, where `0`\n\t\t * disables ambient occlusion. Where intensity is `1` and the AO map's\n\t\t * red channel is also `1`, ambient light is fully occluded on a surface.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\t/**\n\t\t * Emissive (light) color of the material, essentially a solid color\n\t\t * unaffected by other lighting.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.emissive = new Color( 0x000000 );\n\n\t\t/**\n\t\t * Intensity of the emissive light. Modulates the emissive color.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.emissiveIntensity = 1.0;\n\n\t\t/**\n\t\t * Set emissive (glow) map. The emissive map color is modulated by the\n\t\t * emissive color and the emissive intensity. If you have an emissive map,\n\t\t * be sure to set the emissive color to something other than black.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.emissiveMap = null;\n\n\t\t/**\n\t\t * The texture to create a bump map. The black and white values map to the\n\t\t * perceived depth in relation to the lights. Bump doesn't actually affect\n\t\t * the geometry of the object, only the lighting. If a normal map is defined\n\t\t * this will be ignored.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.bumpMap = null;\n\n\t\t/**\n\t\t * How much the bump map affects the material. Typical range is `[0,1]`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.bumpScale = 1;\n\n\t\t/**\n\t\t * The texture to create a normal map. The RGB values affect the surface\n\t\t * normal for each pixel fragment and change the way the color is lit. Normal\n\t\t * maps do not change the actual shape of the surface, only the lighting. In\n\t\t * case the material has a normal map authored using the left handed\n\t\t * convention, the `y` component of `normalScale` should be negated to compensate\n\t\t * for the different handedness.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.normalMap = null;\n\n\t\t/**\n\t\t * The type of normal map.\n\t\t *\n\t\t * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}\n\t\t * @default TangentSpaceNormalMap\n\t\t */\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\n\t\t/**\n\t\t * How much the normal map affects the material. Typical value range is `[0,1]`.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (1,1)\n\t\t */\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\t/**\n\t\t * The displacement map affects the position of the mesh's vertices. Unlike\n\t\t * other maps which only affect the light and shade of the material the\n\t\t * displaced vertices can cast shadows, block other objects, and otherwise\n\t\t * act as real geometry. The displacement texture is an image where the value\n\t\t * of each pixel (white being the highest) is mapped against, and\n\t\t * repositions, the vertices of the mesh.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.displacementMap = null;\n\n\t\t/**\n\t\t * How much the displacement map affects the mesh (where black is no\n\t\t * displacement, and white is maximum displacement). Without a displacement\n\t\t * map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementScale = 1;\n\n\t\t/**\n\t\t * The offset of the displacement map's values on the mesh's vertices.\n\t\t * The bias is added to the scaled sample of the displacement map.\n\t\t * Without a displacement map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementBias = 0;\n\n\t\t/**\n\t\t * Specular map used by the material.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.specularMap = null;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * The environment map.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.envMap = null;\n\n\t\t/**\n\t\t * The rotation of the environment map in radians.\n\t\t *\n\t\t * @type {Euler}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.envMapRotation = new Euler();\n\n\t\t/**\n\t\t * How to combine the result of the surface's color with the environment map, if any.\n\t\t *\n\t\t * When set to `MixOperation`, the {@link MeshBasicMaterial#reflectivity} is used to\n\t\t * blend between the two colors.\n\t\t *\n\t\t * @type {(MultiplyOperation|MixOperation|AddOperation)}\n\t\t * @default MultiplyOperation\n\t\t */\n\t\tthis.combine = MultiplyOperation;\n\n\t\t/**\n\t\t * How much the environment map affects the surface.\n\t\t * The valid range is between `0` (no reflections) and `1` (full reflections).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.reflectivity = 1;\n\n\t\t/**\n\t\t * Scales the effect of the environment map by multiplying its color.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.envMapIntensity = 1.0;\n\n\t\t/**\n\t\t * The index of refraction (IOR) of air (approximately 1) divided by the\n\t\t * index of refraction of the material. It is used with environment mapping\n\t\t * modes {@link CubeRefractionMapping} and {@link EquirectangularRefractionMapping}.\n\t\t * The refraction ratio should not exceed `1`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.98\n\t\t */\n\t\tthis.refractionRatio = 0.98;\n\n\t\t/**\n\t\t * Renders the geometry as a wireframe.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.wireframe = false;\n\n\t\t/**\n\t\t * Controls the thickness of the wireframe.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.wireframeLinewidth = 1;\n\n\t\t/**\n\t\t * Defines appearance of wireframe ends.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinecap = 'round';\n\n\t\t/**\n\t\t * Defines appearance of wireframe joints.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {('round'|'bevel'|'miter')}\n\t\t * @default 'round'\n\t\t */\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\t/**\n\t\t * Whether the material is rendered with flat shading or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flatShading = false;\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A material for drawing geometry by depth. Depth is based off of the camera\n * near and far plane. White is nearest, black is farthest.\n *\n * @augments Material\n * @demo scenes/material-browser.html#MeshDepthMaterial\n */\nclass MeshDepthMaterial extends Material {\n\n\t/**\n\t * Constructs a new mesh depth material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshDepthMaterial = true;\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\t/**\n\t\t * Type for depth packing.\n\t\t *\n\t\t * @type {(BasicDepthPacking|RGBADepthPacking|RGBDepthPacking|RGDepthPacking)}\n\t\t * @default BasicDepthPacking\n\t\t */\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * The displacement map affects the position of the mesh's vertices. Unlike\n\t\t * other maps which only affect the light and shade of the material the\n\t\t * displaced vertices can cast shadows, block other objects, and otherwise\n\t\t * act as real geometry. The displacement texture is an image where the value\n\t\t * of each pixel (white being the highest) is mapped against, and\n\t\t * repositions, the vertices of the mesh.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.displacementMap = null;\n\n\t\t/**\n\t\t * How much the displacement map affects the mesh (where black is no\n\t\t * displacement, and white is maximum displacement). Without a displacement\n\t\t * map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementScale = 1;\n\n\t\t/**\n\t\t * The offset of the displacement map's values on the mesh's vertices.\n\t\t * The bias is added to the scaled sample of the displacement map.\n\t\t * Without a displacement map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementBias = 0;\n\n\t\t/**\n\t\t * Renders the geometry as a wireframe.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.wireframe = false;\n\n\t\t/**\n\t\t * Controls the thickness of the wireframe.\n\t\t *\n\t\t * WebGL and WebGPU ignore this property and always render\n\t\t * 1 pixel wide lines.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A material used internally for implementing shadow mapping with\n * point lights.\n *\n * Can also be used to customize the shadow casting of an object by assigning\n * an instance of `MeshDistanceMaterial` to {@link Object3D#customDistanceMaterial}.\n * The following examples demonstrates this approach in order to ensure\n * transparent parts of objects do not cast shadows.\n *\n * @augments Material\n */\nclass MeshDistanceMaterial extends Material {\n\n\t/**\n\t * Constructs a new mesh distance material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshDistanceMaterial = true;\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * The displacement map affects the position of the mesh's vertices. Unlike\n\t\t * other maps which only affect the light and shade of the material the\n\t\t * displaced vertices can cast shadows, block other objects, and otherwise\n\t\t * act as real geometry. The displacement texture is an image where the value\n\t\t * of each pixel (white being the highest) is mapped against, and\n\t\t * repositions, the vertices of the mesh.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.displacementMap = null;\n\n\t\t/**\n\t\t * How much the displacement map affects the mesh (where black is no\n\t\t * displacement, and white is maximum displacement). Without a displacement\n\t\t * map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementScale = 1;\n\n\t\t/**\n\t\t * The offset of the displacement map's values on the mesh's vertices.\n\t\t * The bias is added to the scaled sample of the displacement map.\n\t\t * Without a displacement map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementBias = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * This material is defined by a MatCap (or Lit Sphere) texture, which encodes the\n * material color and shading.\n *\n * `MeshMatcapMaterial` does not respond to lights since the matcap image file encodes\n * baked lighting. It will cast a shadow onto an object that receives shadows\n * (and shadow clipping works), but it will not self-shadow or receive\n * shadows.\n *\n * @augments Material\n * @demo scenes/material-browser.html#MeshMatcapMaterial\n */\nclass MeshMatcapMaterial extends Material {\n\n\t/**\n\t * Constructs a new mesh matcap material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshMatcapMaterial = true;\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\t/**\n\t\t * Color of the material.\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (1,1,1)\n\t\t */\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\t/**\n\t\t * The matcap map.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.matcap = null;\n\n\t\t/**\n\t\t * The color map. May optionally include an alpha channel, typically combined\n\t\t * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map\n\t\t * color is modulated by the diffuse `color`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The texture to create a bump map. The black and white values map to the\n\t\t * perceived depth in relation to the lights. Bump doesn't actually affect\n\t\t * the geometry of the object, only the lighting. If a normal map is defined\n\t\t * this will be ignored.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.bumpMap = null;\n\n\t\t/**\n\t\t * How much the bump map affects the material. Typical range is `[0,1]`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.bumpScale = 1;\n\n\t\t/**\n\t\t * The texture to create a normal map. The RGB values affect the surface\n\t\t * normal for each pixel fragment and change the way the color is lit. Normal\n\t\t * maps do not change the actual shape of the surface, only the lighting. In\n\t\t * case the material has a normal map authored using the left handed\n\t\t * convention, the `y` component of `normalScale` should be negated to compensate\n\t\t * for the different handedness.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.normalMap = null;\n\n\t\t/**\n\t\t * The type of normal map.\n\t\t *\n\t\t * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}\n\t\t * @default TangentSpaceNormalMap\n\t\t */\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\n\t\t/**\n\t\t * How much the normal map affects the material. Typical value range is `[0,1]`.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (1,1)\n\t\t */\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\t/**\n\t\t * The displacement map affects the position of the mesh's vertices. Unlike\n\t\t * other maps which only affect the light and shade of the material the\n\t\t * displaced vertices can cast shadows, block other objects, and otherwise\n\t\t * act as real geometry. The displacement texture is an image where the value\n\t\t * of each pixel (white being the highest) is mapped against, and\n\t\t * repositions, the vertices of the mesh.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.displacementMap = null;\n\n\t\t/**\n\t\t * How much the displacement map affects the mesh (where black is no\n\t\t * displacement, and white is maximum displacement). Without a displacement\n\t\t * map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementScale = 1;\n\n\t\t/**\n\t\t * The offset of the displacement map's values on the mesh's vertices.\n\t\t * The bias is added to the scaled sample of the displacement map.\n\t\t * Without a displacement map set, this value is not applied.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.displacementBias = 0;\n\n\t\t/**\n\t\t * The alpha map is a grayscale texture that controls the opacity across the\n\t\t * surface (black: fully transparent; white: fully opaque).\n\t\t *\n\t\t * Only the color of the texture is used, ignoring the alpha channel if one\n\t\t * exists. For RGB and RGBA textures, the renderer will use the green channel\n\t\t * when sampling this texture due to the extra bit of precision provided for\n\t\t * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and\n\t\t * luminance/alpha textures will also still work as expected.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaMap = null;\n\n\t\t/**\n\t\t * Renders the geometry as a wireframe.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.wireframe = false;\n\n\t\t/**\n\t\t * Controls the thickness of the wireframe.\n\t\t *\n\t\t * Can only be used with {@link SVGRenderer}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.wireframeLinewidth = 1;\n\n\t\t/**\n\t\t * Whether the material is rendered with flat shading or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.flatShading = false;\n\n\t\t/**\n\t\t * Whether the material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A material for rendering line primitives.\n *\n * Materials define the appearance of renderable 3D objects.\n *\n * ```js\n * const material = new THREE.LineDashedMaterial( {\n * \tcolor: 0xffffff,\n * \tscale: 1,\n * \tdashSize: 3,\n * \tgapSize: 1,\n * } );\n * ```\n *\n * @augments LineBasicMaterial\n */\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\t/**\n\t * Constructs a new line dashed material.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineDashedMaterial = true;\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\t/**\n\t\t * The scale of the dashed part of a line.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.scale = 1;\n\n\t\t/**\n\t\t * The size of the dash. This is both the gap with the stroke.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 3\n\t\t */\n\t\tthis.dashSize = 3;\n\n\t\t/**\n\t\t * The size of the gap.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Converts an array to a specific type.\n *\n * @param {TypedArray|Array} array - The array to convert.\n * @param {TypedArray.constructor} type - The constructor of a typed array that defines the new type.\n * @return {TypedArray} The converted array.\n */\nfunction convertArray( array, type ) {\n\n\tif ( ! array || array.constructor === type ) return array;\n\n\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\treturn new type( array ); // create typed array\n\n\t}\n\n\treturn Array.prototype.slice.call( array ); // create Array\n\n}\n\n/**\n * Returns an array by which times and values can be sorted.\n *\n * @param {Array<number>} times - The keyframe time values.\n * @return {Array<number>} The array.\n */\nfunction getKeyframeOrder( times ) {\n\n\tfunction compareTime( i, j ) {\n\n\t\treturn times[ i ] - times[ j ];\n\n\t}\n\n\tconst n = times.length;\n\tconst result = new Array( n );\n\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\tresult.sort( compareTime );\n\n\treturn result;\n\n}\n\n/**\n * Sorts the given array by the previously computed order via `getKeyframeOrder()`.\n *\n * @param {Array<number>} values - The values to sort.\n * @param {number} stride - The stride.\n * @param {Array<number>} order - The sort order.\n * @return {Array<number>} The sorted values.\n */\nfunction sortedArray( values, stride, order ) {\n\n\tconst nValues = values.length;\n\tconst result = new values.constructor( nValues );\n\n\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\tconst srcOffset = order[ i ] * stride;\n\n\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * Used for parsing AOS keyframe formats.\n *\n * @param {Array<number>} jsonKeys - A list of JSON keyframes.\n * @param {Array<number>} times - This array will be filled with keyframe times by this function.\n * @param {Array<number>} values - This array will be filled with keyframe values by this function.\n * @param {string} valuePropertyName - The name of the property to use.\n */\nfunction flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\tlet i = 1, key = jsonKeys[ 0 ];\n\n\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\tkey = jsonKeys[ i ++ ];\n\n\t}\n\n\tif ( key === undefined ) return; // no data\n\n\tlet value = key[ valuePropertyName ];\n\tif ( value === undefined ) return; // no data\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( ...value ); // push all elements\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else if ( value.toArray !== undefined ) {\n\n\t\t// ...assume THREE.Math-ish\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else {\n\n\t\t// otherwise push as-is\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( value );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t}\n\n}\n\n/**\n * Creates a new clip, containing only the segment of the original clip between the given frames.\n *\n * @param {AnimationClip} sourceClip - The values to sort.\n * @param {string} name - The name of the clip.\n * @param {number} startFrame - The start frame.\n * @param {number} endFrame - The end frame.\n * @param {number} [fps=30] - The FPS.\n * @return {AnimationClip} The new sub clip.\n */\nfunction subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\tconst clip = sourceClip.clone();\n\n\tclip.name = name;\n\n\tconst tracks = [];\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tconst track = clip.tracks[ i ];\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( times.length === 0 ) continue;\n\n\t\ttrack.times = convertArray( times, track.times.constructor );\n\t\ttrack.values = convertArray( values, track.values.constructor );\n\n\t\ttracks.push( track );\n\n\t}\n\n\tclip.tracks = tracks;\n\n\t// find minimum .times value across all tracks in the trimmed clip\n\n\tlet minStartTime = Infinity;\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t}\n\n\t}\n\n\t// shift all tracks such that clip begins at t=0\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tclip.tracks[ i ].shift( -1 * minStartTime );\n\n\t}\n\n\tclip.resetDuration();\n\n\treturn clip;\n\n}\n\n/**\n * Converts the keyframes of the given animation clip to an additive format.\n *\n * @param {AnimationClip} targetClip - The clip to make additive.\n * @param {number} [referenceFrame=0] - The reference frame.\n * @param {AnimationClip} [referenceClip=targetClip] - The reference clip.\n * @param {number} [fps=30] - The FPS.\n * @return {AnimationClip} The updated clip which is now additive.\n */\nfunction makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\tif ( fps <= 0 ) fps = 30;\n\n\tconst numTracks = referenceClip.tracks.length;\n\tconst referenceTime = referenceFrame / fps;\n\n\t// Make each track's values relative to the values at the reference frame\n\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t// Skip this track if it's non-numeric\n\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t} );\n\n\t\tif ( targetTrack === undefined ) continue;\n\n\t\tlet referenceOffset = 0;\n\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t}\n\n\t\tlet targetOffset = 0;\n\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t}\n\n\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\tlet referenceValue;\n\n\t\t// Find the value to subtract out of the track\n\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else {\n\n\t\t\t// Interpolate to the reference value\n\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\treferenceValue = interpolant.resultBuffer.slice( startIndex, endIndex );\n\n\t\t}\n\n\t\t// Conjugate the quaternion\n\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t}\n\n\t\t// Subtract the reference value from all of the track values\n\n\t\tconst numTimes = targetTrack.times.length;\n\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart,\n\t\t\t\t\treferenceValue,\n\t\t\t\t\t0,\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\treturn targetClip;\n\n}\n\n/**\n * A class with various methods to assist with animations.\n *\n * @hideconstructor\n */\nclass AnimationUtils {\n\n\t/**\n\t * Converts an array to a specific type\n\t *\n\t * @static\n\t * @param {TypedArray|Array} array - The array to convert.\n\t * @param {TypedArray.constructor} type - The constructor of a type array.\n\t * @return {TypedArray} The converted array\n\t */\n\tstatic convertArray( array, type ) {\n\n\t\treturn convertArray( array, type );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given object is a typed array.\n\t *\n\t * @static\n\t * @param {any} object - The object to check.\n\t * @return {boolean} Whether the given object is a typed array.\n\t */\n\tstatic isTypedArray( object ) {\n\n\t\treturn isTypedArray( object );\n\n\t}\n\n\t/**\n\t * Returns an array by which times and values can be sorted.\n\t *\n\t * @static\n\t * @param {Array<number>} times - The keyframe time values.\n\t * @return {Array<number>} The array.\n\t */\n\tstatic getKeyframeOrder( times ) {\n\n\t\treturn getKeyframeOrder( times );\n\n\t}\n\n\t/**\n\t * Sorts the given array by the previously computed order via `getKeyframeOrder()`.\n\t *\n\t * @static\n\t * @param {Array<number>} values - The values to sort.\n\t * @param {number} stride - The stride.\n\t * @param {Array<number>} order - The sort order.\n\t * @return {Array<number>} The sorted values.\n\t */\n\tstatic sortedArray( values, stride, order ) {\n\n\t\treturn sortedArray( values, stride, order );\n\n\t}\n\n\t/**\n\t * Used for parsing AOS keyframe formats.\n\t *\n\t * @static\n\t * @param {Array<number>} jsonKeys - A list of JSON keyframes.\n\t * @param {Array<number>} times - This array will be filled with keyframe times by this method.\n\t * @param {Array<number>} values - This array will be filled with keyframe values by this method.\n\t * @param {string} valuePropertyName - The name of the property to use.\n\t */\n\tstatic flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tflattenJSON( jsonKeys, times, values, valuePropertyName );\n\n\t}\n\n\t/**\n\t * Creates a new clip, containing only the segment of the original clip between the given frames.\n\t *\n\t * @static\n\t * @param {AnimationClip} sourceClip - The values to sort.\n\t * @param {string} name - The name of the clip.\n\t * @param {number} startFrame - The start frame.\n\t * @param {number} endFrame - The end frame.\n\t * @param {number} [fps=30] - The FPS.\n\t * @return {AnimationClip} The new sub clip.\n\t */\n\tstatic subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\treturn subclip( sourceClip, name, startFrame, endFrame, fps );\n\n\t}\n\n\t/**\n\t * Converts the keyframes of the given animation clip to an additive format.\n\t *\n\t * @static\n\t * @param {AnimationClip} targetClip - The clip to make additive.\n\t * @param {number} [referenceFrame=0] - The reference frame.\n\t * @param {AnimationClip} [referenceClip=targetClip] - The reference clip.\n\t * @param {number} [fps=30] - The FPS.\n\t * @return {AnimationClip} The updated clip which is now additive.\n\t */\n\tstatic makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\treturn makeClipAdditive( targetClip, referenceFrame, referenceClip, fps );\n\n\t}\n\n}\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References: {@link http://www.oodesign.com/template-method-pattern.html}\n *\n * @abstract\n */\nclass Interpolant {\n\n\t/**\n\t * Constructs a new interpolant.\n\t *\n\t * @param {TypedArray} parameterPositions - The parameter positions hold the interpolation factors.\n\t * @param {TypedArray} sampleValues - The sample values.\n\t * @param {number} sampleSize - The sample size\n\t * @param {TypedArray} [resultBuffer] - The result buffer.\n\t */\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\t/**\n\t\t * The parameter positions.\n\t\t *\n\t\t * @type {TypedArray}\n\t\t */\n\t\tthis.parameterPositions = parameterPositions;\n\n\t\t/**\n\t\t * A cache index.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis._cachedIndex = 0;\n\n\t\t/**\n\t\t * The result buffer.\n\t\t *\n\t\t * @type {TypedArray}\n\t\t */\n\t\tthis.resultBuffer = resultBuffer !== undefined ? resultBuffer : new sampleValues.constructor( sampleSize );\n\n\t\t/**\n\t\t * The sample values.\n\t\t *\n\t\t * @type {TypedArray}\n\t\t */\n\t\tthis.sampleValues = sampleValues;\n\n\t\t/**\n\t\t * The value size.\n\t\t *\n\t\t * @type {TypedArray}\n\t\t */\n\t\tthis.valueSize = sampleSize;\n\n\t\t/**\n\t\t * The interpolation settings.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.settings = null;\n\n\t\t/**\n\t\t * The default settings object.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\t/**\n\t * Evaluate the interpolant at position `t`.\n\t *\n\t * @param {number} t - The interpolation factor.\n\t * @return {TypedArray} The result buffer.\n\t */\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\t/**\n\t * Returns the interpolation settings.\n\t *\n\t * @return {Object} The interpolation settings.\n\t */\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\t/**\n\t * Copies a sample value to the result buffer.\n\t *\n\t * @param {number} index - An index into the sample value buffer.\n\t * @return {TypedArray} The result buffer.\n\t */\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Copies a sample value to the result buffer.\n\t *\n\t * @abstract\n\t * @param {number} i1 - An index into the sample value buffer.\n\t * @param {number} t0 - The previous interpolation factor.\n\t * @param {number} t - The current interpolation factor.\n\t * @param {number} t1 - The next interpolation factor.\n\t * @return {TypedArray} The result buffer.\n\t */\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\t/**\n\t * Optional method that is executed when the interval has changed.\n\t *\n\t * @param {number} i1 - An index into the sample value buffer.\n\t * @param {number} t0 - The previous interpolation factor.\n\t * @param {number} t - The current interpolation factor.\n\t */\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n *\n * @augments Interpolant\n */\nclass CubicInterpolant extends Interpolant {\n\n\t/**\n\t * Constructs a new cubic interpolant.\n\t *\n\t * @param {TypedArray} parameterPositions - The parameter positions hold the interpolation factors.\n\t * @param {TypedArray} sampleValues - The sample values.\n\t * @param {number} sampleSize - The sample size\n\t * @param {TypedArray} [resultBuffer] - The result buffer.\n\t */\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = -0;\n\t\tthis._offsetPrev = -0;\n\t\tthis._weightNext = -0;\n\t\tthis._offsetNext = -0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( -1.5 - 2 * wP ) * pp + ( -0.5 + wP ) * p + 1;\n\t\tconst s1 = ( -1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A basic linear interpolant.\n *\n * @augments Interpolant\n */\nclass LinearInterpolant extends Interpolant {\n\n\t/**\n\t * Constructs a new linear interpolant.\n\t *\n\t * @param {TypedArray} parameterPositions - The parameter positions hold the interpolation factors.\n\t * @param {TypedArray} sampleValues - The sample values.\n\t * @param {number} sampleSize - The sample size\n\t * @param {TypedArray} [resultBuffer] - The result buffer.\n\t */\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * Interpolant that evaluates to the sample value at the position preceding\n * the parameter.\n *\n * @augments Interpolant\n */\nclass DiscreteInterpolant extends Interpolant {\n\n\t/**\n\t * Constructs a new discrete interpolant.\n\t *\n\t * @param {TypedArray} parameterPositions - The parameter positions hold the interpolation factors.\n\t * @param {TypedArray} sampleValues - The sample values.\n\t * @param {number} sampleSize - The sample size\n\t * @param {TypedArray} [resultBuffer] - The result buffer.\n\t */\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\n/**\n * A Bezier interpolant using cubic Bezier curves with 2D control points.\n *\n * This interpolant supports the COLLADA/Maya style of Bezier animation where\n * each keyframe has explicit in/out tangent control points specified as\n * 2D coordinates (time, value).\n *\n * The tangent data must be provided via the `settings` object:\n * - `settings.inTangents`: Float32Array with [time, value] pairs per keyframe per component\n * - `settings.outTangents`: Float32Array with [time, value] pairs per keyframe per component\n *\n * For a track with N keyframes and stride S:\n * - Each tangent array has N * S * 2 values\n * - Layout: [k0_c0_time, k0_c0_value, k0_c1_time, k0_c1_value, ..., k0_cS_time, k0_cS_value,\n *            k1_c0_time, k1_c0_value, ...]\n *\n * @augments Interpolant\n */\nclass BezierInterpolant extends Interpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst offset1 = i1 * stride;\n\t\tconst offset0 = offset1 - stride;\n\n\t\tconst settings = this.settings || this.DefaultSettings_;\n\t\tconst inTangents = settings.inTangents;\n\t\tconst outTangents = settings.outTangents;\n\n\t\t// If no tangent data, fall back to linear interpolation\n\t\tif ( ! inTangents || ! outTangents ) {\n\n\t\t\tconst weight1 = ( t - t0 ) / ( t1 - t0 );\n\t\t\tconst weight0 = 1 - weight1;\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] = values[ offset0 + i ] * weight0 + values[ offset1 + i ] * weight1;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tconst tangentStride = stride * 2;\n\t\tconst i0 = i1 - 1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst v0 = values[ offset0 + i ];\n\t\t\tconst v1 = values[ offset1 + i ];\n\n\t\t\t// outTangent of previous keyframe (C0)\n\t\t\tconst outTangentOffset = i0 * tangentStride + i * 2;\n\t\t\tconst c0x = outTangents[ outTangentOffset ];\n\t\t\tconst c0y = outTangents[ outTangentOffset + 1 ];\n\n\t\t\t// inTangent of current keyframe (C1)\n\t\t\tconst inTangentOffset = i1 * tangentStride + i * 2;\n\t\t\tconst c1x = inTangents[ inTangentOffset ];\n\t\t\tconst c1y = inTangents[ inTangentOffset + 1 ];\n\n\t\t\t// Solve for Bezier parameter s where Bx(s) = t using Newton-Raphson\n\t\t\tlet s = ( t - t0 ) / ( t1 - t0 );\n\t\t\tlet s2, s3, oneMinusS, oneMinusS2, oneMinusS3;\n\n\t\t\tfor ( let iter = 0; iter < 8; iter ++ ) {\n\n\t\t\t\ts2 = s * s;\n\t\t\t\ts3 = s2 * s;\n\t\t\t\toneMinusS = 1 - s;\n\t\t\t\toneMinusS2 = oneMinusS * oneMinusS;\n\t\t\t\toneMinusS3 = oneMinusS2 * oneMinusS;\n\n\t\t\t\t// Bezier X(s) = (1-s)³·t0 + 3(1-s)²s·c0x + 3(1-s)s²·c1x + s³·t1\n\t\t\t\tconst bx = oneMinusS3 * t0 + 3 * oneMinusS2 * s * c0x + 3 * oneMinusS * s2 * c1x + s3 * t1;\n\n\t\t\t\tconst error = bx - t;\n\t\t\t\tif ( Math.abs( error ) < 1e-10 ) break;\n\n\t\t\t\t// Derivative dX/ds\n\t\t\t\tconst dbx = 3 * oneMinusS2 * ( c0x - t0 ) + 6 * oneMinusS * s * ( c1x - c0x ) + 3 * s2 * ( t1 - c1x );\n\t\t\t\tif ( Math.abs( dbx ) < 1e-10 ) break;\n\n\t\t\t\ts = s - error / dbx;\n\t\t\t\ts = Math.max( 0, Math.min( 1, s ) );\n\n\t\t\t}\n\n\t\t\t// Evaluate Bezier Y(s)\n\t\t\tresult[ i ] = oneMinusS3 * v0 + 3 * oneMinusS2 * s * c0y + 3 * oneMinusS * s2 * c1y + s3 * v1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * Represents a timed sequence of keyframes, which are composed of lists of\n * times and related values, and which are used to animate a specific property\n * of an object.\n */\nclass KeyframeTrack {\n\n\t/**\n\t * Constructs a new keyframe track.\n\t *\n\t * @param {string} name - The keyframe track's name.\n\t * @param {Array<number>} times - A list of keyframe times.\n\t * @param {Array<number|string|boolean>} values - A list of keyframe values.\n\t * @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth|InterpolateBezier)} [interpolation] - The interpolation type.\n\t */\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\t/**\n\t\t * The track's name can refer to morph targets or bones or\n\t\t * possibly other values within an animated object. See {@link PropertyBinding#parseTrackName}\n\t\t * for the forms of strings that can be parsed for property binding.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * The keyframe times.\n\t\t *\n\t\t * @type {Float32Array}\n\t\t */\n\t\tthis.times = convertArray( times, this.TimeBufferType );\n\n\t\t/**\n\t\t * The keyframe values.\n\t\t *\n\t\t * @type {Float32Array}\n\t\t */\n\t\tthis.values = convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t/**\n\t * Converts the keyframe track to JSON.\n\t *\n\t * @static\n\t * @param {KeyframeTrack} track - The keyframe track to serialize.\n\t * @return {Object} The serialized keyframe track as JSON.\n\t */\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': convertArray( track.times, Array ),\n\t\t\t\t'values': convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\t/**\n\t * Factory method for creating a new discrete interpolant.\n\t *\n\t * @static\n\t * @param {TypedArray} [result] - The result buffer.\n\t * @return {DiscreteInterpolant} The new interpolant.\n\t */\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\t/**\n\t * Factory method for creating a new linear interpolant.\n\t *\n\t * @static\n\t * @param {TypedArray} [result] - The result buffer.\n\t * @return {LinearInterpolant} The new interpolant.\n\t */\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\t/**\n\t * Factory method for creating a new smooth interpolant.\n\t *\n\t * @static\n\t * @param {TypedArray} [result] - The result buffer.\n\t * @return {CubicInterpolant} The new interpolant.\n\t */\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\t/**\n\t * Factory method for creating a new Bezier interpolant.\n\t *\n\t * The Bezier interpolant requires tangent data to be set via the `settings` property\n\t * on the track before creating the interpolant. The settings should contain:\n\t * - `inTangents`: Float32Array with [time, value] pairs per keyframe per component\n\t * - `outTangents`: Float32Array with [time, value] pairs per keyframe per component\n\t *\n\t * @static\n\t * @param {TypedArray} [result] - The result buffer.\n\t * @return {BezierInterpolant} The new interpolant.\n\t */\n\tInterpolantFactoryMethodBezier( result ) {\n\n\t\tconst interpolant = new BezierInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t// Pass tangent data from track settings to interpolant\n\t\tif ( this.settings ) {\n\n\t\t\tinterpolant.settings = this.settings;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t/**\n\t * Defines the interpolation factor method for this keyframe track.\n\t *\n\t * @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth|InterpolateBezier)} interpolation - The interpolation type.\n\t * @return {KeyframeTrack} A reference to this keyframe track.\n\t */\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateBezier:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodBezier;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\twarn( 'KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the current interpolation type.\n\t *\n\t * @return {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth|InterpolateBezier)} The interpolation type.\n\t */\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t\tcase this.InterpolantFactoryMethodBezier:\n\n\t\t\t\treturn InterpolateBezier;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the value size.\n\t *\n\t * @return {number} The value size.\n\t */\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t/**\n\t * Moves all keyframes either forward or backward in time.\n\t *\n\t * @param {number} timeOffset - The offset to move the time values.\n\t * @return {KeyframeTrack} A reference to this keyframe track.\n\t */\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Scale all keyframe times by a factor (useful for frame - seconds conversions).\n\t *\n\t * @param {number} timeScale - The time scale.\n\t * @return {KeyframeTrack} A reference to this keyframe track.\n\t */\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes keyframes before and after animation without changing any values within the defined time range.\n\t *\n\t * Note: The method does not shift around keys to the start of the track time, because for interpolated\n\t * keys this will change their values\n\t *\n\t * @param {number} startTime - The start time.\n\t * @param {number} endTime - The end time.\n\t * @return {KeyframeTrack} A reference to this keyframe track.\n\t */\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== -1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = times.slice( from, to );\n\t\t\tthis.values = this.values.slice( from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Performs minimal validation on the keyframe track. Returns `true` if the values\n\t * are valid.\n\t *\n\t * @return {boolean} Whether the keyframes are valid or not.\n\t */\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\terror( 'KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\terror( 'KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\terror( 'KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\terror( 'KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\terror( 'KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t/**\n\t * Optimizes this keyframe track by removing equivalent sequential keys (which are\n\t * common in morph target sequences).\n\t *\n\t * @return {KeyframeTrack} A reference to this keyframe track.\n\t */\n\toptimize() {\n\n\t\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = this.times.slice(),\n\t\t\tvalues = this.values.slice(),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = times.slice( 0, writeIndex );\n\t\t\tthis.values = values.slice( 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new keyframe track with copied values from this instance.\n\t *\n\t * @return {KeyframeTrack} A clone of this instance.\n\t */\n\tclone() {\n\n\t\tconst times = this.times.slice();\n\t\tconst values = this.values.slice();\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\n/**\n * The value type name.\n *\n * @type {string}\n * @default ''\n */\nKeyframeTrack.prototype.ValueTypeName = '';\n\n/**\n * The time buffer type of this keyframe track.\n *\n * @type {TypedArray|Array}\n * @default Float32Array.constructor\n */\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\n\n/**\n * The value buffer type of this keyframe track.\n *\n * @type {TypedArray|Array}\n * @default Float32Array.constructor\n */\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\n\n/**\n * The default interpolation type of this keyframe track.\n *\n * @type {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth|InterpolateBezier)}\n * @default InterpolateLinear\n */\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A track for boolean keyframe values.\n *\n * @augments KeyframeTrack\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {\n\n\t/**\n\t * Constructs a new boolean keyframe track.\n\t *\n\t * This keyframe track type has no `interpolation` parameter because the\n\t * interpolation is always discrete.\n\t *\n\t * @param {string} name - The keyframe track's name.\n\t * @param {Array<number>} times - A list of keyframe times.\n\t * @param {Array<boolean>} values - A list of keyframe values.\n\t */\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\n/**\n * The value type name.\n *\n * @type {string}\n * @default 'bool'\n */\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\n\n/**\n * The value buffer type of this keyframe track.\n *\n * @type {TypedArray|Array}\n * @default Array.constructor\n */\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\n\n/**\n * The default interpolation type of this keyframe track.\n *\n * @type {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)}\n * @default InterpolateDiscrete\n */\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A track for color keyframe values.\n *\n * @augments KeyframeTrack\n */\nclass ColorKeyframeTrack extends KeyframeTrack {\n\n\t/**\n\t * Constructs a new color keyframe track.\n\t *\n\t * @param {string} name - The keyframe track's name.\n\t * @param {Array<number>} times - A list of keyframe times.\n\t * @param {Array<number>} values - A list of keyframe values.\n\t * @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} [interpolation] - The interpolation type.\n\t */\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tsuper( name, times, values, interpolation );\n\n\t}\n\n}\n\n/**\n * The value type name.\n *\n * @type {string}\n * @default 'color'\n */\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A track for numeric keyframe values.\n *\n * @augments KeyframeTrack\n */\nclass NumberKeyframeTrack extends KeyframeTrack {\n\n\t/**\n\t * Constructs a new number keyframe track.\n\t *\n\t * @param {string} name - The keyframe track's name.\n\t * @param {Array<number>} times - A list of keyframe times.\n\t * @param {Array<number>} values - A list of keyframe values.\n\t * @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} [interpolation] - The interpolation type.\n\t */\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tsuper( name, times, values, interpolation );\n\n\t}\n\n}\n\n/**\n * The value type name.\n *\n * @type {string}\n * @default 'number'\n */\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n *\n * @augments Interpolant\n */\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\t/**\n\t * Constructs a new SLERP interpolant.\n\t *\n\t * @param {TypedArray} parameterPositions - The parameter positions hold the interpolation factors.\n\t * @param {TypedArray} sampleValues - The sample values.\n\t * @param {number} sampleSize - The sample size\n\t * @param {TypedArray} [resultBuffer] - The result buffer.\n\t */\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A track for Quaternion keyframe values.\n *\n * @augments KeyframeTrack\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\t/**\n\t * Constructs a new Quaternion keyframe track.\n\t *\n\t * @param {string} name - The keyframe track's name.\n\t * @param {Array<number>} times - A list of keyframe times.\n\t * @param {Array<number>} values - A list of keyframe values.\n\t * @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} [interpolation] - The interpolation type.\n\t */\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tsuper( name, times, values, interpolation );\n\n\t}\n\n\t/**\n\t * Overwritten so the method returns Quaternion based interpolant.\n\t *\n\t * @static\n\t * @param {TypedArray} [result] - The result buffer.\n\t * @return {QuaternionLinearInterpolant} The new interpolant.\n\t */\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\n/**\n * The value type name.\n *\n * @type {string}\n * @default 'quaternion'\n */\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\n// DefaultInterpolation is inherited;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A track for string keyframe values.\n *\n * @augments KeyframeTrack\n */\nclass StringKeyframeTrack extends KeyframeTrack {\n\n\t/**\n\t * Constructs a new string keyframe track.\n\t *\n\t * This keyframe track type has no `interpolation` parameter because the\n\t * interpolation is always discrete.\n\t *\n\t * @param {string} name - The keyframe track's name.\n\t * @param {Array<number>} times - A list of keyframe times.\n\t * @param {Array<string>} values - A list of keyframe values.\n\t */\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\n/**\n * The value type name.\n *\n * @type {string}\n * @default 'string'\n */\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\n\n/**\n * The value buffer type of this keyframe track.\n *\n * @type {TypedArray|Array}\n * @default Array.constructor\n */\nStringKeyframeTrack.prototype.ValueBufferType = Array;\n\n/**\n * The default interpolation type of this keyframe track.\n *\n * @type {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)}\n * @default InterpolateDiscrete\n */\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A track for vector keyframe values.\n *\n * @augments KeyframeTrack\n */\nclass VectorKeyframeTrack extends KeyframeTrack {\n\n\t/**\n\t * Constructs a new vector keyframe track.\n\t *\n\t * @param {string} name - The keyframe track's name.\n\t * @param {Array<number>} times - A list of keyframe times.\n\t * @param {Array<number>} values - A list of keyframe values.\n\t * @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} [interpolation] - The interpolation type.\n\t */\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tsuper( name, times, values, interpolation );\n\n\t}\n\n}\n\n/**\n * The value type name.\n *\n * @type {string}\n * @default 'vector'\n */\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\n/**\n * A reusable set of keyframe tracks which represent an animation.\n */\nclass AnimationClip {\n\n\t/**\n\t * Constructs a new animation clip.\n\t *\n\t * Note: Instead of instantiating an AnimationClip directly with the constructor, you can\n\t * use the static interface of this class for creating clips. In most cases though, animation clips\n\t * will automatically be created by loaders when importing animated 3D assets.\n\t *\n\t * @param {string} [name=''] - The clip's name.\n\t * @param {number} [duration=-1] - The clip's duration in seconds. If a negative value is passed,\n\t * the duration will be calculated from the passed keyframes.\n\t * @param {Array<KeyframeTrack>} tracks - An array of keyframe tracks.\n\t * @param {(NormalAnimationBlendMode|AdditiveAnimationBlendMode)} [blendMode=NormalAnimationBlendMode] - Defines how the animation\n\t * is blended/combined when two or more animations are simultaneously played.\n\t */\n\tconstructor( name = '', duration = -1, tracks = [], blendMode = NormalAnimationBlendMode ) {\n\n\t\t/**\n\t\t * The clip's name.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t *  An array of keyframe tracks.\n\t\t *\n\t\t * @type {Array<KeyframeTrack>}\n\t\t */\n\t\tthis.tracks = tracks;\n\n\t\t/**\n\t\t * The clip's duration in seconds.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.duration = duration;\n\n\t\t/**\n\t\t * Defines how the animation is blended/combined when two or more animations\n\t\t * are simultaneously played.\n\t\t *\n\t\t * @type {(NormalAnimationBlendMode|AdditiveAnimationBlendMode)}\n\t\t */\n\t\tthis.blendMode = blendMode;\n\n\t\t/**\n\t\t * The UUID of the animation clip.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.uuid = generateUUID();\n\n\t\t/**\n\t\t * An object that can be used to store custom data about the animation clip.\n\t\t * It should not hold references to functions as these will not be cloned.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.userData = {};\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Factory method for creating an animation clip from the given JSON.\n\t *\n\t * @static\n\t * @param {Object} json - The serialized animation clip.\n\t * @return {AnimationClip} The new animation clip.\n\t */\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\tclip.userData = JSON.parse( json.userData || '{}' );\n\n\t\treturn clip;\n\n\t}\n\n\t/**\n\t * Serializes the given animation clip into JSON.\n\t *\n\t * @static\n\t * @param {AnimationClip} clip - The animation clip to serialize.\n\t * @return {Object} The JSON object.\n\t */\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode,\n\t\t\t'userData': JSON.stringify( clip.userData ),\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\t/**\n\t * Returns a new animation clip from the passed morph targets array of a\n\t * geometry, taking a name and the number of frames per second.\n\t *\n\t * Note: The fps parameter is required, but the animation speed can be\n\t * overridden via {@link AnimationAction#setDuration}.\n\t *\n\t * @static\n\t * @param {string} name - The name of the animation clip.\n\t * @param {Array<Object>} morphTargetSequence - A sequence of morph targets.\n\t * @param {number} fps - The Frames-Per-Second value.\n\t * @param {boolean} noLoop - Whether the clip should be no loop or not.\n\t * @return {AnimationClip} The new animation clip.\n\t */\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = getKeyframeOrder( times );\n\t\t\ttimes = sortedArray( times, 1, order );\n\t\t\tvalues = sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, -1, tracks );\n\n\t}\n\n\t/**\n\t * Searches for an animation clip by name, taking as its first parameter\n\t * either an array of clips, or a mesh or geometry that contains an\n\t * array named \"animations\" property.\n\t *\n\t * @static\n\t * @param {(Array<AnimationClip>|Object3D)} objectOrClipArray - The array or object to search through.\n\t * @param {string} name - The name to search for.\n\t * @return {?AnimationClip} The found animation clip. Returns `null` if no clip has been found.\n\t */\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Returns an array of new AnimationClips created from the morph target\n\t * sequences of a geometry, trying to sort morph target names into\n\t * animation-group-based patterns like \"Walk_001, Walk_002, Run_001, Run_002...\".\n\t *\n\t * See {@link MD2Loader#parse} as an example for how the method should be used.\n\t *\n\t * @static\n\t * @param {Array<Object>} morphTargets - A sequence of morph targets.\n\t * @param {number} fps - The Frames-Per-Second value.\n\t * @param {boolean} noLoop - Whether the clip should be no loop or not.\n\t * @return {Array<AnimationClip>} An array of new animation clips.\n\t */\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t/**\n\t * Parses the `animation.hierarchy` format and returns a new animation clip.\n\t *\n\t * @static\n\t * @deprecated since r175.\n\t * @param {Object} animation - A serialized animation clip as JSON.\n\t * @param {Array<Bone>} bones - An array of bones.\n\t * @return {?AnimationClip} The new animation clip.\n\t */\n\tstatic parseAnimation( animation, bones ) {\n\n\t\twarn( 'AnimationClip: parseAnimation() is deprecated and will be removed with r185' );\n\n\t\tif ( ! animation ) {\n\n\t\t\terror( 'AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tflattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || -1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = -1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * fps;\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\t/**\n\t * Sets the duration of this clip to the duration of its longest keyframe track.\n\t *\n\t * @return {AnimationClip} A reference to this animation clip.\n\t */\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Trims all tracks to the clip's duration.\n\t *\n\t * @return {AnimationClip} A reference to this animation clip.\n\t */\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Performs minimal validation on each track in the clip. Returns `true` if all\n\t * tracks are valid.\n\t *\n\t * @return {boolean} Whether the clip's keyframes are valid or not.\n\t */\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t/**\n\t * Optimizes each track by removing equivalent sequential keys (which are\n\t * common in morph target sequences).\n\t *\n\t * @return {AnimationClip} A reference to this animation clip.\n\t */\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new animation clip with copied values from this instance.\n\t *\n\t * @return {AnimationClip} A clone of this instance.\n\t */\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\tconst clip = new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t\tclip.userData = JSON.parse( JSON.stringify( this.userData ) );\n\n\t\treturn clip;\n\n\t}\n\n\t/**\n\t * Serializes this animation clip into JSON.\n\t *\n\t * @return {Object} The JSON object.\n\t */\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tflattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\n/**\n * @class\n * @classdesc A simple caching system, used internally by {@link FileLoader}.\n * To enable caching across all loaders that use {@link FileLoader}, add `THREE.Cache.enabled = true.` once in your app.\n * @hideconstructor\n */\nconst Cache = {\n\n\t/**\n\t * Whether caching is enabled or not.\n\t *\n\t * @static\n\t * @type {boolean}\n\t * @default false\n\t */\n\tenabled: false,\n\n\t/**\n\t * A dictionary that holds cached files.\n\t *\n\t * @static\n\t * @type {Object<string,Object>}\n\t */\n\tfiles: {},\n\n\t/**\n\t * Adds a cache entry with a key to reference the file. If this key already\n\t * holds a file, it is overwritten.\n\t *\n\t * @static\n\t * @param {string} key - The key to reference the cached file.\n\t * @param {Object} file -  The file to be cached.\n\t */\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\tif ( isBlobURL( key ) ) return;\n\n\t\t// log( 'Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\t/**\n\t * Gets the cached value for the given key.\n\t *\n\t * @static\n\t * @param {string} key - The key to reference the cached file.\n\t * @return {Object|undefined} The cached file. If the key does not exist `undefined` is returned.\n\t */\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\tif ( isBlobURL( key ) ) return;\n\n\t\t// log( 'Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\t/**\n\t * Removes the cached file associated with the given key.\n\t *\n\t * @static\n\t * @param {string} key - The key to reference the cached file.\n\t */\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\t/**\n\t * Remove all values from the cache.\n\t *\n\t * @static\n\t */\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\n/**\n * Returns true if the given cache key contains the blob: scheme.\n *\n * @private\n * @param {string} key - The cache key.\n * @return {boolean} Whether the given cache key contains the blob: scheme or not.\n */\nfunction isBlobURL( key ) {\n\n\ttry {\n\n\t\tconst urlString = key.slice( key.indexOf( ':' ) + 1 ); // remove type identifier\n\n\t\tconst url = new URL( urlString );\n\t\treturn url.protocol === 'blob:';\n\n\t} catch ( e ) {\n\n\t\t// If the string is not a valid URL, it throws an error\n\t\treturn false;\n\n\t}\n\n}\n\n/**\n * Handles and keeps track of loaded and pending data. A default global\n * instance of this class is created and used by loaders if not supplied\n * manually.\n *\n * In general that should be sufficient, however there are times when it can\n * be useful to have separate loaders - for example if you want to show\n * separate loading bars for objects and textures.\n *\n * ```js\n * const manager = new THREE.LoadingManager();\n * manager.onLoad = () => console.log( 'Loading complete!' );\n *\n * const loader1 = new OBJLoader( manager );\n * const loader2 = new ColladaLoader( manager );\n * ```\n */\nclass LoadingManager {\n\n\t/**\n\t * Constructs a new loading manager.\n\t *\n\t * @param {Function} [onLoad] - Executes when all items have been loaded.\n\t * @param {Function} [onProgress] - Executes when single items have been loaded.\n\t * @param {Function} [onError] - Executes when an error occurs.\n\t */\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\t/**\n\t\t * Executes when an item starts loading.\n\t\t *\n\t\t * @type {Function|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.onStart = undefined;\n\n\t\t/**\n\t\t * Executes when all items have been loaded.\n\t\t *\n\t\t * @type {Function|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.onLoad = onLoad;\n\n\t\t/**\n\t\t * Executes when single items have been loaded.\n\t\t *\n\t\t * @type {Function|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.onProgress = onProgress;\n\n\t\t/**\n\t\t * Executes when an error occurs.\n\t\t *\n\t\t * @type {Function|undefined}\n\t\t * @default undefined\n\t\t */\n\t\tthis.onError = onError;\n\n\t\t/**\n\t\t * Used for aborting ongoing requests in loaders using this manager.\n\t\t *\n\t\t * @private\n\t\t * @type {AbortController | null}\n\t\t */\n\t\tthis._abortController = null;\n\n\t\t/**\n\t\t * This should be called by any loader using the manager when the loader\n\t\t * starts loading an item.\n\t\t *\n\t\t * @param {string} url - The URL to load.\n\t\t */\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\t/**\n\t\t * This should be called by any loader using the manager when the loader\n\t\t * ended loading an item.\n\t\t *\n\t\t * @param {string} url - The URL of the loaded item.\n\t\t */\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * This should be called by any loader using the manager when the loader\n\t\t * encounters an error when loading an item.\n\t\t *\n\t\t * @param {string} url - The URL of the item that produces an error.\n\t\t */\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Given a URL, uses the URL modifier callback (if any) and returns a\n\t\t * resolved URL. If no URL modifier is set, returns the original URL.\n\t\t *\n\t\t * @param {string} url - The URL to load.\n\t\t * @return {string} The resolved URL.\n\t\t */\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\t/**\n\t\t * If provided, the callback will be passed each resource URL before a\n\t\t * request is sent. The callback may return the original URL, or a new URL to\n\t\t * override loading behavior. This behavior can be used to load assets from\n\t\t * .ZIP files, drag-and-drop APIs, and Data URIs.\n\t\t *\n\t\t * ```js\n\t\t * const blobs = {'fish.gltf': blob1, 'diffuse.png': blob2, 'normal.png': blob3};\n\t\t *\n\t\t * const manager = new THREE.LoadingManager();\n\t\t *\n\t\t * // Initialize loading manager with URL callback.\n\t\t * const objectURLs = [];\n\t\t * manager.setURLModifier( ( url ) => {\n\t\t *\n\t\t * \turl = URL.createObjectURL( blobs[ url ] );\n\t\t * \tobjectURLs.push( url );\n\t\t * \treturn url;\n\t\t *\n\t\t * } );\n\t\t *\n\t\t * // Load as usual, then revoke the blob URLs.\n\t\t * const loader = new GLTFLoader( manager );\n\t\t * loader.load( 'fish.gltf', (gltf) => {\n\t\t *\n\t\t * \tscene.add( gltf.scene );\n\t\t * \tobjectURLs.forEach( ( url ) => URL.revokeObjectURL( url ) );\n\t\t *\n\t\t * } );\n\t\t * ```\n\t\t *\n\t\t * @param {function(string):string} transform - URL modifier callback. Called with an URL and must return a resolved URL.\n\t\t * @return {LoadingManager} A reference to this loading manager.\n\t\t */\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\t/**\n\t\t * Registers a loader with the given regular expression. Can be used to\n\t\t * define what loader should be used in order to load specific files. A\n\t\t * typical use case is to overwrite the default loader for textures.\n\t\t *\n\t\t * ```js\n\t\t * // add handler for TGA textures\n\t\t * manager.addHandler( /\\.tga$/i, new TGALoader() );\n\t\t * ```\n\t\t *\n\t\t * @param {string} regex - A regular expression.\n\t\t * @param {Loader} loader - A loader that should handle matched cases.\n\t\t * @return {LoadingManager} A reference to this loading manager.\n\t\t */\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\t/**\n\t\t * Removes the loader for the given regular expression.\n\t\t *\n\t\t * @param {string} regex - A regular expression.\n\t\t * @return {LoadingManager} A reference to this loading manager.\n\t\t */\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== -1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\t/**\n\t\t * Can be used to retrieve the registered loader for the given file path.\n\t\t *\n\t\t * @param {string} file - The file path.\n\t\t * @return {?Loader} The registered loader. Returns `null` if no loader was found.\n\t\t */\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t\t/**\n\t\t * Can be used to abort ongoing loading requests in loaders using this manager.\n\t\t * The abort only works if the loaders implement {@link Loader#abort} and `AbortSignal.any()`\n\t\t * is supported in the browser.\n\t\t *\n\t\t * @return {LoadingManager} A reference to this loading manager.\n\t\t */\n\t\tthis.abort = function () {\n\n\n\t\t\tthis.abortController.abort();\n\t\t\tthis._abortController = null;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}\n\n\t// TODO: Revert this back to a single member variable once this issue has been fixed\n\t// https://github.com/cloudflare/workerd/issues/3657\n\n\t/**\n\t * Used for aborting ongoing requests in loaders using this manager.\n\t *\n\t * @type {AbortController}\n\t */\n\tget abortController() {\n\n\t\tif ( ! this._abortController ) {\n\n\t\t\tthis._abortController = new AbortController();\n\n\t\t}\n\n\t\treturn this._abortController;\n\n\t}\n\n}\n\n/**\n * The global default loading manager.\n *\n * @constant\n * @type {LoadingManager}\n */\nconst DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\n/**\n * Abstract base class for loaders.\n *\n * @abstract\n */\nclass Loader {\n\n\t/**\n\t * Constructs a new loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\t/**\n\t\t * The loading manager.\n\t\t *\n\t\t * @type {LoadingManager}\n\t\t * @default DefaultLoadingManager\n\t\t */\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\t/**\n\t\t * The crossOrigin string to implement CORS for loading the url from a\n\t\t * different domain that allows CORS.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'anonymous'\n\t\t */\n\t\tthis.crossOrigin = 'anonymous';\n\n\t\t/**\n\t\t * Whether the XMLHttpRequest uses credentials.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.withCredentials = false;\n\n\t\t/**\n\t\t * The base path from which the asset will be loaded.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.path = '';\n\n\t\t/**\n\t\t * The base path from which additional resources like textures will be loaded.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.resourcePath = '';\n\n\t\t/**\n\t\t * The [request header](https://developer.mozilla.org/en-US/docs/Glossary/Request_header)\n\t\t * used in HTTP request.\n\t\t *\n\t\t * @type {Object<string, any>}\n\t\t */\n\t\tthis.requestHeader = {};\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method needs to be implemented by all concrete loaders. It holds the\n\t * logic for loading assets from the backend.\n\t *\n\t * @abstract\n\t * @param {string} url - The path/URL of the file to be loaded.\n\t * @param {Function} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} [onProgress] - Executed while the loading is in progress.\n\t * @param {onErrorCallback} [onError] - Executed when errors occur.\n\t */\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\t/**\n\t * A async version of {@link Loader#load}.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded.\n\t * @param {onProgressCallback} [onProgress] - Executed while the loading is in progress.\n\t * @return {Promise} A Promise that resolves when the asset has been loaded.\n\t */\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * This method needs to be implemented by all concrete loaders. It holds the\n\t * logic for parsing the asset into three.js entities.\n\t *\n\t * @abstract\n\t * @param {any} data - The data to parse.\n\t */\n\tparse( /* data */ ) {}\n\n\t/**\n\t * Sets the `crossOrigin` String to implement CORS for loading the URL\n\t * from a different domain that allows CORS.\n\t *\n\t * @param {string} crossOrigin - The `crossOrigin` value.\n\t * @return {Loader} A reference to this instance.\n\t */\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Whether the XMLHttpRequest uses credentials such as cookies, authorization\n\t * headers or TLS client certificates, see [XMLHttpRequest.withCredentials](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials).\n\t *\n\t * Note: This setting has no effect if you are loading files locally or from the same domain.\n\t *\n\t * @param {boolean} value - The `withCredentials` value.\n\t * @return {Loader} A reference to this instance.\n\t */\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the base path for the asset.\n\t *\n\t * @param {string} path - The base path.\n\t * @return {Loader} A reference to this instance.\n\t */\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the base path for dependent resources like textures.\n\t *\n\t * @param {string} resourcePath - The resource path.\n\t * @return {Loader} A reference to this instance.\n\t */\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given request header.\n\t *\n\t * @param {Object} requestHeader - A [request header](https://developer.mozilla.org/en-US/docs/Glossary/Request_header)\n\t * for configuring the HTTP request.\n\t * @return {Loader} A reference to this instance.\n\t */\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * This method can be implemented in loaders for aborting ongoing requests.\n\t *\n\t * @abstract\n\t * @return {Loader} A reference to this instance.\n\t */\n\tabort() {\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Callback for onProgress in loaders.\n *\n * @callback onProgressCallback\n * @param {ProgressEvent} event - An instance of `ProgressEvent` that represents the current loading status.\n */\n\n/**\n * Callback for onError in loaders.\n *\n * @callback onErrorCallback\n * @param {Error} error - The error which occurred during the loading process.\n */\n\n/**\n * The default material name that is used by loaders\n * when creating materials for loaded 3D objects.\n *\n * Note: Not all loaders might honor this setting.\n *\n * @static\n * @type {string}\n * @default '__DEFAULT'\n */\nLoader.DEFAULT_MATERIAL_NAME = '__DEFAULT';\n\nconst loading = {};\n\nclass HttpError extends Error {\n\n\tconstructor( message, response ) {\n\n\t\tsuper( message );\n\t\tthis.response = response;\n\n\t}\n\n}\n\n/**\n * A low level class for loading resources with the Fetch API, used internally by\n * most loaders. It can also be used directly to load any file type that does\n * not have a loader.\n *\n * This loader supports caching. If you want to use it, add `THREE.Cache.enabled = true;`\n * once to your application.\n *\n * ```js\n * const loader = new THREE.FileLoader();\n * const data = await loader.loadAsync( 'example.txt' );\n * ```\n *\n * @augments Loader\n */\nclass FileLoader extends Loader {\n\n\t/**\n\t * Constructs a new file loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * The expected mime type. Valid values can be found\n\t\t * [here](https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#mimetype)\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.mimeType = '';\n\n\t\t/**\n\t\t * The expected response type.\n\t\t *\n\t\t * @type {('arraybuffer'|'blob'|'document'|'json'|'')}\n\t\t * @default ''\n\t\t */\n\t\tthis.responseType = '';\n\n\t\t/**\n\t\t * Used for aborting requests.\n\t\t *\n\t\t * @private\n\t\t * @type {AbortController}\n\t\t */\n\t\tthis._abortController = new AbortController();\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and pass the loaded response to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(any)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} [onProgress] - Executed while the loading is in progress.\n\t * @param {onErrorCallback} [onError] - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( `file:${url}` );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\tsignal: ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal\n\t\t} );\n\n\t\t// record states ( avoid data race )\n\t\tconst mimeType = this.mimeType;\n\t\tconst responseType = this.responseType;\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\twarn( 'FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n\t\t\t\t\tif ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {\n\n\t\t\t\t\t\treturn response;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\n\t\t\t\t\t// Nginx needs X-File-Size check\n\t\t\t\t\t// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n\t\t\t\t\tconst contentLength = response.headers.get( 'X-File-Size' ) || response.headers.get( 'Content-Length' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\tconst stream = new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}, ( e ) => {\n\n\t\t\t\t\t\t\t\t\tcontroller.error( e );\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn new Response( stream );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new HttpError( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`, response );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( response => {\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( mimeType === '' ) {\n\n\t\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// sniff encoding\n\t\t\t\t\t\t\tconst re = /charset=\"?([^;\"\\s]*)\"?/i;\n\t\t\t\t\t\t\tconst exec = re.exec( mimeType );\n\t\t\t\t\t\t\tconst label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;\n\t\t\t\t\t\t\tconst decoder = new TextDecoder( label );\n\t\t\t\t\t\t\treturn response.arrayBuffer().then( ab => decoder.decode( ab ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( `file:${url}`, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tif ( callbacks === undefined ) {\n\n\t\t\t\t\t// When onLoad was called and url was deleted in `loading`\n\t\t\t\t\tthis.manager.itemError( url );\n\t\t\t\t\tthrow err;\n\n\t\t\t\t}\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t} )\n\t\t\t.finally( () => {\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\t/**\n\t * Sets the expected response type.\n\t *\n\t * @param {('arraybuffer'|'blob'|'document'|'json'|'')} value - The response type.\n\t * @return {FileLoader} A reference to this file loader.\n\t */\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the expected mime type of the loaded file.\n\t *\n\t * @param {string} value - The mime type.\n\t * @return {FileLoader} A reference to this file loader.\n\t */\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Aborts ongoing fetch requests.\n\t *\n\t * @return {FileLoader} A reference to this instance.\n\t */\n\tabort() {\n\n\t\tthis._abortController.abort();\n\t\tthis._abortController = new AbortController();\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Class for loading animation clips in the JSON format. The files are internally\n * loaded via {@link FileLoader}.\n *\n * ```js\n * const loader = new THREE.AnimationLoader();\n * const animations = await loader.loadAsync( 'animations/animation.js' );\n * ```\n *\n * @augments Loader\n */\nclass AnimationLoader extends Loader {\n\n\t/**\n\t * Constructs a new animation loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and pass the loaded animations as an array\n\t * holding instances of {@link AnimationClip} to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Array<AnimationClip>)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\terror( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Parses the given JSON object and returns an array of animation clips.\n\t *\n\t * @param {Object} json - The serialized animation clips.\n\t * @return {Array<AnimationClip>} The parsed animation clips.\n\t */\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract base class for loading compressed texture formats S3TC, ASTC or ETC.\n * Textures are internally loaded via {@link FileLoader}.\n *\n * Derived classes have to implement the `parse()` method which holds the parsing\n * for the respective format.\n *\n * @abstract\n * @augments Loader\n */\nclass CompressedTextureLoader extends Loader {\n\n\t/**\n\t * Constructs a new compressed texture loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded compressed texture\n\t * to the `onLoad()` callback. The method also returns a new texture object which can\n\t * directly be used for material creation. If you do it this way, the texture\n\t * may pop up in your scene once the respective loading process is finished.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(CompressedTexture)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t * @return {CompressedTexture} The compressed texture.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nconst _loading = new WeakMap();\n\n/**\n * A loader for loading images. The class loads images with the HTML `Image` API.\n *\n * ```js\n * const loader = new THREE.ImageLoader();\n * const image = await loader.loadAsync( 'image.png' );\n * ```\n * Please note that `ImageLoader` has dropped support for progress\n * events in `r84`. For an `ImageLoader` that supports progress events, see\n * [this thread](https://github.com/mrdoob/three.js/issues/10439#issuecomment-275785639).\n *\n * @augments Loader\n */\nclass ImageLoader extends Loader {\n\n\t/**\n\t * Constructs a new image loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded image\n\t * to the `onLoad()` callback. The method also returns a new `Image` object which can\n\t * directly be used for texture creation. If you do it this way, the texture\n\t * may pop up in your scene once the respective loading process is finished.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Image)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Unsupported in this loader.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t * @return {Image} The image.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( `image:${url}` );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tif ( cached.complete === true ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tlet arr = _loading.get( cached );\n\n\t\t\t\tif ( arr === undefined ) {\n\n\t\t\t\t\tarr = [];\n\t\t\t\t\t_loading.set( cached, arr );\n\n\t\t\t\t}\n\n\t\t\t\tarr.push( { onLoad, onError } );\n\n\t\t\t}\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\t//\n\n\t\t\tconst callbacks = _loading.get( this ) || [];\n\n\t\t\tfor ( let i = 0; i < callbacks.length; i ++ ) {\n\n\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\tif ( callback.onLoad ) callback.onLoad( this );\n\n\t\t\t}\n\n\t\t\t_loading.delete( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tCache.remove( `image:${url}` );\n\n\t\t\t//\n\n\t\t\tconst callbacks = _loading.get( this ) || [];\n\n\t\t\tfor ( let i = 0; i < callbacks.length; i ++ ) {\n\n\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t}\n\n\t\t\t_loading.delete( this );\n\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.slice( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tCache.add( `image:${url}`, image );\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\n/**\n * Class for loading cube textures. Images are internally loaded via {@link ImageLoader}.\n *\n * The loader returns an instance of {@link CubeTexture} and expects the cube map to\n * be defined as six separate images representing the sides of a cube. Other cube map definitions\n * like vertical and horizontal cross, column and row layouts are not supported.\n *\n * Note that, by convention, cube maps are specified in a coordinate system\n * in which positive-x is to the right when looking up the positive-z axis --\n * in other words, using a left-handed coordinate system. Since three.js uses\n * a right-handed coordinate system, environment maps used in three.js will\n * have pos-x and neg-x swapped.\n *\n * The loaded cube texture is in sRGB color space. Meaning {@link Texture#colorSpace}\n * is set to `SRGBColorSpace` by default.\n *\n * ```js\n * const loader = new THREE.CubeTextureLoader().setPath( 'textures/cubeMaps/' );\n * const cubeTexture = await loader.loadAsync( [\n * \t'px.png', 'nx.png', 'py.png', 'ny.png', 'pz.png', 'nz.png'\n * ] );\n * scene.background = cubeTexture;\n * ```\n *\n * @augments Loader\n */\nclass CubeTextureLoader extends Loader {\n\n\t/**\n\t * Constructs a new cube texture loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and pass the fully loaded cube texture\n\t * to the `onLoad()` callback. The method also returns a new cube texture object which can\n\t * directly be used for material creation. If you do it this way, the cube texture\n\t * may pop up in your scene once the respective loading process is finished.\n\t *\n\t * @param {Array<string>} urls - Array of 6 URLs to images, one for each side of the\n\t * cube texture. The urls should be specified in the following order: pos-x,\n\t * neg-x, pos-y, neg-y, pos-z, neg-z. An array of data URIs are allowed as well.\n\t * @param {function(CubeTexture)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Unsupported in this loader.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t * @return {CubeTexture} The cube texture.\n\t */\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract base class for loading binary texture formats RGBE, EXR or TGA.\n * Textures are internally loaded via {@link FileLoader}.\n *\n * Derived classes have to implement the `parse()` method which holds the parsing\n * for the respective format.\n *\n * @abstract\n * @augments Loader\n */\nclass DataTextureLoader extends Loader {\n\n\t/**\n\t * Constructs a new data texture loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded data texture\n\t * to the `onLoad()` callback. The method also returns a new texture object which can\n\t * directly be used for material creation. If you do it this way, the texture\n\t * may pop up in your scene once the respective loading process is finished.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(DataTexture)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t * @return {DataTexture} The data texture.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tlet texData;\n\n\t\t\ttry {\n\n\t\t\t\ttexData = scope.parse( buffer );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError !== undefined ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\terror( e );\n\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = texData.colorSpace;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Class for loading textures. Images are internally\n * loaded via {@link ImageLoader}.\n *\n * ```js\n * const loader = new THREE.TextureLoader();\n * const texture = await loader.loadAsync( 'textures/land_ocean_ice_cloud_2048.jpg' );\n *\n * const material = new THREE.MeshBasicMaterial( { map:texture } );\n * ```\n * Please note that `TextureLoader` has dropped support for progress\n * events in `r84`. For a `TextureLoader` that supports progress events, see\n * [this thread](https://github.com/mrdoob/three.js/issues/10439#issuecomment-293260145).\n *\n * @augments Loader\n */\nclass TextureLoader extends Loader {\n\n\t/**\n\t * Constructs a new texture loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and pass the fully loaded texture\n\t * to the `onLoad()` callback. The method also returns a new texture object which can\n\t * directly be used for material creation. If you do it this way, the texture\n\t * may pop up in your scene once the respective loading process is finished.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Texture)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Unsupported in this loader.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t * @return {Texture} The texture.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract base class for lights - all other light types inherit the\n * properties and methods described here.\n *\n * @abstract\n * @augments Object3D\n */\nclass Light extends Object3D {\n\n\t/**\n\t * Constructs a new light.\n\t *\n\t * @param {(number|Color|string)} [color=0xffffff] - The light's color.\n\t * @param {number} [intensity=1] - The light's strength/intensity.\n\t */\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLight = true;\n\n\t\tthis.type = 'Light';\n\n\t\t/**\n\t\t * The light's color.\n\t\t *\n\t\t * @type {Color}\n\t\t */\n\t\tthis.color = new Color( color );\n\n\t\t/**\n\t\t * The light's intensity.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.intensity = intensity;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * A light source positioned directly above the scene, with color fading from\n * the sky color to the ground color.\n *\n * This light cannot be used to cast shadows.\n *\n * ```js\n * const light = new THREE.HemisphereLight( 0xffffbb, 0x080820, 1 );\n * scene.add( light );\n * ```\n *\n * @augments Light\n */\nclass HemisphereLight extends Light {\n\n\t/**\n\t * Constructs a new hemisphere light.\n\t *\n\t * @param {(number|Color|string)} [skyColor=0xffffff] - The light's sky color.\n\t * @param {(number|Color|string)} [groundColor=0xffffff] - The light's ground color.\n\t * @param {number} [intensity=1] - The light's strength/intensity.\n\t */\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isHemisphereLight = true;\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\t/**\n\t\t * The light's ground color.\n\t\t *\n\t\t * @type {Color}\n\t\t */\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.groundColor = this.groundColor.getHex();\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\n/**\n * Abstract base class for light shadow classes. These classes\n * represent the shadow configuration for different light types.\n *\n * @abstract\n */\nclass LightShadow {\n\n\t/**\n\t * Constructs a new light shadow.\n\t *\n\t * @param {Camera} camera - The light's view of the world.\n\t */\n\tconstructor( camera ) {\n\n\t\t/**\n\t\t * The light's view of the world.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * The intensity of the shadow. The default is `1`.\n\t\t * Valid values are in the range `[0, 1]`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.intensity = 1;\n\n\t\t/**\n\t\t * Shadow map bias, how much to add or subtract from the normalized depth\n\t\t * when deciding whether a surface is in shadow.\n\t\t *\n\t\t * The default is `0`. Very tiny adjustments here (in the order of `0.0001`)\n\t\t * may help reduce artifacts in shadows.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.bias = 0;\n\n\t\t/**\n\t\t * A node version of `bias`. Only supported with `WebGPURenderer`.\n\t\t *\n\t\t * If a bias node is defined, `bias` has no effect.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.biasNode = null;\n\n\t\t/**\n\t\t * Defines how much the position used to query the shadow map is offset along\n\t\t * the object normal. The default is `0`. Increasing this value can be used to\n\t\t * reduce shadow acne especially in large scenes where light shines onto\n\t\t * geometry at a shallow angle. The cost is that shadows may appear distorted.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.normalBias = 0;\n\n\t\t/**\n\t\t * Setting this to values greater than 1 will blur the edges of the shadow.\n\t\t * High values will cause unwanted banding effects in the shadows - a greater\n\t\t * map size will allow for a higher value to be used here before these effects\n\t\t * become visible.\n\t\t *\n\t\t * The property has no effect when the shadow map type is `BasicShadowMap`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.radius = 1;\n\n\t\t/**\n\t\t * The amount of samples to use when blurring a VSM shadow map.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 8\n\t\t */\n\t\tthis.blurSamples = 8;\n\n\t\t/**\n\t\t * Defines the width and height of the shadow map. Higher values give better quality\n\t\t * shadows at the cost of computation time. Values must be powers of two.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (512,512)\n\t\t */\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\t/**\n\t\t * The type of shadow texture. The default is `UnsignedByteType`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default UnsignedByteType\n\t\t */\n\t\tthis.mapType = UnsignedByteType;\n\n\t\t/**\n\t\t * The depth map generated using the internal camera; a location beyond a\n\t\t * pixel's depth is in shadow. Computed internally during rendering.\n\t\t *\n\t\t * @type {?RenderTarget}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * The distribution map generated using the internal camera; an occlusion is\n\t\t * calculated based on the distribution of depths. Computed internally during\n\t\t * rendering.\n\t\t *\n\t\t * @type {?RenderTarget}\n\t\t * @default null\n\t\t */\n\t\tthis.mapPass = null;\n\n\t\t/**\n\t\t * Model to shadow camera space, to compute location and depth in shadow map.\n\t\t * This is computed internally during rendering.\n\t\t *\n\t\t * @type {Matrix4}\n\t\t */\n\t\tthis.matrix = new Matrix4();\n\n\t\t/**\n\t\t * Enables automatic updates of the light's shadow. If you do not require dynamic\n\t\t * lighting / shadows, you may set this to `false`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoUpdate = true;\n\n\t\t/**\n\t\t * When set to `true`, shadow maps will be updated in the next `render` call.\n\t\t * If you have set {@link LightShadow#autoUpdate} to `false`, you will need to\n\t\t * set this property to `true` and then make a render call to update the light's shadow.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\t/**\n\t * Used internally by the renderer to get the number of viewports that need\n\t * to be rendered for this shadow.\n\t *\n\t * @return {number} The viewport count.\n\t */\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\t/**\n\t * Gets the shadow cameras frustum. Used internally by the renderer to cull objects.\n\t *\n\t * @return {Frustum} The shadow camera frustum.\n\t */\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\t/**\n\t * Update the matrices for the camera and shadow, used internally by the renderer.\n\t *\n\t * @param {Light} light - The light for which the shadow is being rendered.\n\t */\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix, shadowCamera.coordinateSystem, shadowCamera.reversedDepth );\n\n\t\tif ( shadowCamera.coordinateSystem === WebGPUCoordinateSystem || shadowCamera.reversedDepth ) {\n\n\t\t\tshadowMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 1.0, 0.0, // Identity Z (preserving the correct [0, 1] range from the projection matrix)\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tshadowMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t}\n\n\t\tshadowMatrix.multiply( _projScreenMatrix );\n\n\t}\n\n\t/**\n\t * Returns a viewport definition for the given viewport index.\n\t *\n\t * @param {number} viewportIndex - The viewport index.\n\t * @return {Vector4} The viewport.\n\t */\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\t/**\n\t * Returns the frame extends.\n\t *\n\t * @return {Vector2} The frame extends.\n\t */\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Copies the values of the given light shadow instance to this instance.\n\t *\n\t * @param {LightShadow} source - The light shadow to copy.\n\t * @return {LightShadow} A reference to this light shadow instance.\n\t */\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.intensity = source.intensity;\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.needsUpdate = source.needsUpdate;\n\t\tthis.normalBias = source.normalBias;\n\t\tthis.blurSamples = source.blurSamples;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\tthis.biasNode = source.biasNode;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new light shadow instance with copied values from this instance.\n\t *\n\t * @return {LightShadow} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Serializes the light shadow into JSON.\n\t *\n\t * @return {Object} A JSON object representing the serialized light shadow.\n\t * @see {@link ObjectLoader#parse}\n\t */\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.intensity !== 1 ) object.intensity = this.intensity;\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nconst _position$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\n\n/**\n * Abstract base class for cameras. This class should always be inherited\n * when you build a new camera.\n *\n * @abstract\n * @augments Object3D\n */\nclass Camera extends Object3D {\n\n\t/**\n\t * Constructs a new camera.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\t/**\n\t\t * The inverse of the camera's world matrix.\n\t\t *\n\t\t * @type {Matrix4}\n\t\t */\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\t/**\n\t\t * The camera's projection matrix.\n\t\t *\n\t\t * @type {Matrix4}\n\t\t */\n\t\tthis.projectionMatrix = new Matrix4();\n\n\t\t/**\n\t\t * The inverse of the camera's projection matrix.\n\t\t *\n\t\t * @type {Matrix4}\n\t\t */\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t\t/**\n\t\t * The coordinate system in which the camera is used.\n\t\t *\n\t\t * @type {(WebGLCoordinateSystem|WebGPUCoordinateSystem)}\n\t\t */\n\t\tthis.coordinateSystem = WebGLCoordinateSystem;\n\n\t\tthis._reversedDepth = false;\n\n\t}\n\n\t/**\n\t * The flag that indicates whether the camera uses a reversed depth buffer.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t */\n\tget reversedDepth() {\n\n\t\treturn this._reversedDepth;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\tthis.coordinateSystem = source.coordinateSystem;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a vector representing the (\"look\") direction of the 3D object in world space.\n\t *\n\t * This method is overwritten since cameras have a different forward vector compared to other\n\t * 3D objects. A camera looks down its local, negative z-axis by default.\n\t *\n\t * @param {Vector3} target - The target vector the result is stored to.\n\t * @return {Vector3} The 3D object's direction in world space.\n\t */\n\tgetWorldDirection( target ) {\n\n\t\treturn super.getWorldDirection( target ).negate();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\t// exclude scale from view matrix to be glTF conform\n\n\t\tthis.matrixWorld.decompose( _position$2, _quaternion$2, _scale$2 );\n\n\t\tif ( _scale$2.x === 1 && _scale$2.y === 1 && _scale$2.z === 1 ) {\n\n\t\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else {\n\n\t\t\tthis.matrixWorldInverse.compose( _position$2, _quaternion$2, _scale$2.set( 1, 1, 1 ) ).invert();\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\t// exclude scale from view matrix to be glTF conform\n\n\t\tthis.matrixWorld.decompose( _position$2, _quaternion$2, _scale$2 );\n\n\t\tif ( _scale$2.x === 1 && _scale$2.y === 1 && _scale$2.z === 1 ) {\n\n\t\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else {\n\n\t\t\tthis.matrixWorldInverse.compose( _position$2, _quaternion$2, _scale$2.set( 1, 1, 1 ) ).invert();\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _v3$1 = /*@__PURE__*/ new Vector3();\nconst _minTarget = /*@__PURE__*/ new Vector2();\nconst _maxTarget = /*@__PURE__*/ new Vector2();\n\n/**\n * Camera that uses [perspective projection](https://en.wikipedia.org/wiki/Perspective_(graphical)).\n *\n * This projection mode is designed to mimic the way the human eye sees. It\n * is the most common projection mode used for rendering a 3D scene.\n *\n * ```js\n * const camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );\n * scene.add( camera );\n * ```\n *\n * @augments Camera\n */\nclass PerspectiveCamera extends Camera {\n\n\t/**\n\t * Constructs a new perspective camera.\n\t *\n\t * @param {number} [fov=50] - The vertical field of view.\n\t * @param {number} [aspect=1] - The aspect ratio.\n\t * @param {number} [near=0.1] - The camera's near plane.\n\t * @param {number} [far=2000] - The camera's far plane.\n\t */\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\t/**\n\t\t * The vertical field of view, from bottom to top of view,\n\t\t * in degrees.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 50\n\t\t */\n\t\tthis.fov = fov;\n\n\t\t/**\n\t\t * The zoom factor of the camera.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.zoom = 1;\n\n\t\t/**\n\t\t * The camera's near plane. The valid range is greater than `0`\n\t\t * and less than the current value of {@link PerspectiveCamera#far}.\n\t\t *\n\t\t * Note that, unlike for the {@link OrthographicCamera}, `0` is <em>not</em> a\n\t\t * valid value for a perspective camera's near plane.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.1\n\t\t */\n\t\tthis.near = near;\n\n\t\t/**\n\t\t * The camera's far plane. Must be greater than the\n\t\t * current value of {@link PerspectiveCamera#near}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 2000\n\t\t */\n\t\tthis.far = far;\n\n\t\t/**\n\t\t * Object distance used for stereoscopy and depth-of-field effects. This\n\t\t * parameter does not influence the projection matrix unless a\n\t\t * {@link StereoCamera} is being used.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 10\n\t\t */\n\t\tthis.focus = 10;\n\n\t\t/**\n\t\t * The aspect ratio, usually the canvas width / canvas height.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.aspect = aspect;\n\n\t\t/**\n\t\t * Represents the frustum window specification. This property should not be edited\n\t\t * directly but via {@link PerspectiveCamera#setViewOffset} and {@link PerspectiveCamera#clearViewOffset}.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.view = null;\n\n\t\t/**\n\t\t * Film size used for the larger axis. Default is `35` (millimeters). This\n\t\t * parameter does not influence the projection matrix unless {@link PerspectiveCamera#filmOffset}\n\t\t * is set to a nonzero value.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 35\n\t\t */\n\t\tthis.filmGauge = 35;\n\n\t\t/**\n\t\t * Horizontal off-center offset in the same unit as {@link PerspectiveCamera#filmGauge}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.filmOffset = 0;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current {@link PerspectiveCamera#filmGauge}.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * @param {number} focalLength - Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Returns the focal length from the current {@link PerspectiveCamera#fov} and\n\t * {@link PerspectiveCamera#filmGauge}.\n\t *\n\t * @return {number} The computed focal length.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\t/**\n\t * Returns the current vertical field of view angle in degrees considering {@link PerspectiveCamera#zoom}.\n\t *\n\t * @return {number} The effective FOV.\n\t */\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\t/**\n\t * Returns the width of the image on the film. If {@link PerspectiveCamera#aspect} is greater than or\n\t * equal to one (landscape format), the result equals {@link PerspectiveCamera#filmGauge}.\n\t *\n\t * @return {number} The film width.\n\t */\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Returns the height of the image on the film. If {@link PerspectiveCamera#aspect} is greater than or\n\t * equal to one (landscape format), the result equals {@link PerspectiveCamera#filmGauge}.\n\t *\n\t * @return {number} The film width.\n\t */\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Sets `minTarget` and `maxTarget` to the coordinates of the lower-left and upper-right corners of the view rectangle.\n\t *\n\t * @param {number} distance - The viewing distance.\n\t * @param {Vector2} minTarget - The lower-left corner of the view rectangle is written into this vector.\n\t * @param {Vector2} maxTarget - The upper-right corner of the view rectangle is written into this vector.\n\t */\n\tgetViewBounds( distance, minTarget, maxTarget ) {\n\n\t\t_v3$1.set( -1, -1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tminTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t\t_v3$1.set( 1, 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tmaxTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t}\n\n\t/**\n\t * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction.\n\t *\n\t * @param {number} distance - The viewing distance.\n\t * @param {Vector2} target - The target vector that is used to store result where x is width and y is height.\n\t * @returns {Vector2} The view size.\n\t */\n\tgetViewSize( distance, target ) {\n\n\t\tthis.getViewBounds( distance, _minTarget, _maxTarget );\n\n\t\treturn target.subVectors( _maxTarget, _minTarget );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *```\n\t *   +---+---+---+\n\t *   | A | B | C |\n\t *   +---+---+---+\n\t *   | D | E | F |\n\t *   +---+---+---+\n\t *```\n\t * then for each monitor you would call it like this:\n\t *```js\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * // --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * // --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * // --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * // --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * // --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * // --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t * ```\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t *\n\t * @param {number} fullWidth - The full width of multiview setup.\n\t * @param {number} fullHeight - The full height of multiview setup.\n\t * @param {number} x - The horizontal offset of the subcamera.\n\t * @param {number} y - The vertical offset of the subcamera.\n\t * @param {number} width - The width of subcamera.\n\t * @param {number} height - The height of subcamera.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Removes the view offset from the projection matrix.\n\t */\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Updates the camera's projection matrix. Must be called after any change of\n\t * camera properties.\n\t */\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = -0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far, this.coordinateSystem, this.reversedDepth );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Represents the shadow configuration of directional lights.\n *\n * @augments LightShadow\n */\nclass SpotLightShadow extends LightShadow {\n\n\t/**\n\t * Constructs a new spot light shadow.\n\t */\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSpotLightShadow = true;\n\n\t\t/**\n\t\t * Used to focus the shadow camera. The camera's field of view is set as a\n\t\t * percentage of the spotlight's field-of-view. Range is `[0, 1]`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.focus = 1;\n\n\t\t/**\n\t\t * Texture aspect ratio.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.aspect = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = ( this.mapSize.width / this.mapSize.height ) * this.aspect;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * This light gets emitted from a single point in one direction, along a cone\n * that increases in size the further from the light it gets.\n *\n * This light can cast shadows - see the {@link SpotLightShadow} for details.\n *\n * ```js\n * // white spotlight shining from the side, modulated by a texture\n * const spotLight = new THREE.SpotLight( 0xffffff );\n * spotLight.position.set( 100, 1000, 100 );\n * spotLight.map = new THREE.TextureLoader().load( url );\n *\n * spotLight.castShadow = true;\n * spotLight.shadow.mapSize.width = 1024;\n * spotLight.shadow.mapSize.height = 1024;\n * spotLight.shadow.camera.near = 500;\n * spotLight.shadow.camera.far = 4000;\n * spotLight.shadow.camera.fov = 30;s\n * ```\n *\n * @augments Light\n */\nclass SpotLight extends Light {\n\n\t/**\n\t * Constructs a new spot light.\n\t *\n\t * @param {(number|Color|string)} [color=0xffffff] - The light's color.\n\t * @param {number} [intensity=1] - The light's strength/intensity measured in candela (cd).\n\t * @param {number} [distance=0] - Maximum range of the light. `0` means no limit.\n\t * @param {number} [angle=Math.PI/3] - Maximum angle of light dispersion from its direction whose upper bound is `Math.PI/2`.\n\t * @param {number} [penumbra=0] - Percent of the spotlight cone that is attenuated due to penumbra. Value range is `[0,1]`.\n\t * @param {number} [decay=2] - The amount the light dims along the distance of the light.\n\t */\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSpotLight = true;\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\t/**\n\t\t * The spot light points from its position to the\n\t\t * target's position.\n\t\t *\n\t\t * For the target's position to be changed to anything other\n\t\t * than the default, it must be added to the scene.\n\t\t *\n\t\t * It is also possible to set the target to be another 3D object\n\t\t * in the scene. The light will now track the target object.\n\t\t *\n\t\t * @type {Object3D}\n\t\t */\n\t\tthis.target = new Object3D();\n\n\t\t/**\n\t\t * Maximum range of the light. `0` means no limit.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.distance = distance;\n\n\t\t/**\n\t\t * Maximum angle of light dispersion from its direction whose upper bound is `Math.PI/2`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Math.PI/3\n\t\t */\n\t\tthis.angle = angle;\n\n\t\t/**\n\t\t * Percent of the spotlight cone that is attenuated due to penumbra.\n\t\t * Value range is `[0,1]`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.penumbra = penumbra;\n\n\t\t/**\n\t\t * The amount the light dims along the distance of the light. In context of\n\t\t * physically-correct rendering the default value should not be changed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 2\n\t\t */\n\t\tthis.decay = decay;\n\n\t\t/**\n\t\t * A texture used to modulate the color of the light. The spot light\n\t\t * color is mixed with the RGB value of this texture, with a ratio\n\t\t * corresponding to its alpha value. The cookie-like masking effect is\n\t\t * reproduced using pixel values (0, 0, 0, 1-cookie_value).\n\t\t *\n\t\t * *Warning*: This property is disabled if {@link Object3D#castShadow} is set to `false`.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.map = null;\n\n\t\t/**\n\t\t * This property holds the light's shadow configuration.\n\t\t *\n\t\t * @type {SpotLightShadow}\n\t\t */\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\t/**\n\t * The light's power. Power is the luminous power of the light measured in lumens (lm).\n\t *  Changing the power will also change the light's intensity.\n\t *\n\t * @type {number}\n\t */\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\t\tthis.map = source.map;\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.distance = this.distance;\n\t\tdata.object.angle = this.angle;\n\t\tdata.object.decay = this.decay;\n\t\tdata.object.penumbra = this.penumbra;\n\n\t\tdata.object.target = this.target.uuid;\n\n\t\tif ( this.map && this.map.isTexture ) data.object.map = this.map.toJSON( meta ).uuid;\n\n\t\tdata.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Represents the shadow configuration of point lights.\n *\n * @augments LightShadow\n */\nclass PointLightShadow extends LightShadow {\n\n\t/**\n\t * Constructs a new point light shadow.\n\t */\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPointLightShadow = true;\n\n\t}\n\n}\n\n/**\n * A light that gets emitted from a single point in all directions. A common\n * use case for this is to replicate the light emitted from a bare\n * lightbulb.\n *\n * This light can cast shadows - see the {@link PointLightShadow} for details.\n *\n * ```js\n * const light = new THREE.PointLight( 0xff0000, 1, 100 );\n * light.position.set( 50, 50, 50 );\n * scene.add( light );\n * ```\n *\n * @augments Light\n */\nclass PointLight extends Light {\n\n\t/**\n\t * Constructs a new point light.\n\t *\n\t * @param {(number|Color|string)} [color=0xffffff] - The light's color.\n\t * @param {number} [intensity=1] - The light's strength/intensity measured in candela (cd).\n\t * @param {number} [distance=0] - Maximum range of the light. `0` means no limit.\n\t * @param {number} [decay=2] - The amount the light dims along the distance of the light.\n\t */\n\tconstructor( color, intensity, distance = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPointLight = true;\n\n\t\tthis.type = 'PointLight';\n\n\t\t/**\n\t\t * When distance is zero, light will attenuate according to inverse-square\n\t\t * law to infinite distance. When distance is non-zero, light will attenuate\n\t\t * according to inverse-square law until near the distance cutoff, where it\n\t\t * will then attenuate quickly and smoothly to 0. Inherently, cutoffs are not\n\t\t * physically correct.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.distance = distance;\n\n\t\t/**\n\t\t * The amount the light dims along the distance of the light. In context of\n\t\t * physically-correct rendering the default value should not be changed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 2\n\t\t */\n\t\tthis.decay = decay;\n\n\t\t/**\n\t\t * This property holds the light's shadow configuration.\n\t\t *\n\t\t * @type {PointLightShadow}\n\t\t */\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\t/**\n\t * The light's power. Power is the luminous power of the light measured in lumens (lm).\n\t * Changing the power will also change the light's intensity.\n\t *\n\t * @type {number}\n\t */\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.distance = this.distance;\n\t\tdata.object.decay = this.decay;\n\n\t\tdata.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Camera that uses [orthographic projection](https://en.wikipedia.org/wiki/Orthographic_projection).\n *\n * In this projection mode, an object's size in the rendered image stays\n * constant regardless of its distance from the camera. This can be useful\n * for rendering 2D scenes and UI elements, amongst other things.\n *\n * ```js\n * const camera = new THREE.OrthographicCamera( width / - 2, width / 2, height / 2, height / - 2, 1, 1000 );\n * scene.add( camera );\n * ```\n *\n * @augments Camera\n */\nclass OrthographicCamera extends Camera {\n\n\t/**\n\t * Constructs a new orthographic camera.\n\t *\n\t * @param {number} [left=-1] - The left plane of the camera's frustum.\n\t * @param {number} [right=1] - The right plane of the camera's frustum.\n\t * @param {number} [top=1] - The top plane of the camera's frustum.\n\t * @param {number} [bottom=-1] - The bottom plane of the camera's frustum.\n\t * @param {number} [near=0.1] - The camera's near plane.\n\t * @param {number} [far=2000] - The camera's far plane.\n\t */\n\tconstructor( left = -1, right = 1, top = 1, bottom = -1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\t/**\n\t\t * The zoom factor of the camera.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.zoom = 1;\n\n\t\t/**\n\t\t * Represents the frustum window specification. This property should not be edited\n\t\t * directly but via {@link PerspectiveCamera#setViewOffset} and {@link PerspectiveCamera#clearViewOffset}.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.view = null;\n\n\t\t/**\n\t\t * The left plane of the camera's frustum.\n\t\t *\n\t\t * @type {number}\n\t\t * @default -1\n\t\t */\n\t\tthis.left = left;\n\n\t\t/**\n\t\t * The right plane of the camera's frustum.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.right = right;\n\n\t\t/**\n\t\t * The top plane of the camera's frustum.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.top = top;\n\n\t\t/**\n\t\t * The bottom plane of the camera's frustum.\n\t\t *\n\t\t * @type {number}\n\t\t * @default -1\n\t\t */\n\t\tthis.bottom = bottom;\n\n\t\t/**\n\t\t * The camera's near plane. The valid range is greater than `0`\n\t\t * and less than the current value of {@link OrthographicCamera#far}.\n\t\t *\n\t\t * Note that, unlike for the {@link PerspectiveCamera}, `0` is a\n\t\t * valid value for an orthographic camera's near plane.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.1\n\t\t */\n\t\tthis.near = near;\n\n\t\t/**\n\t\t * The camera's far plane. Must be greater than the\n\t\t * current value of {@link OrthographicCamera#near}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 2000\n\t\t */\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * @param {number} fullWidth - The full width of multiview setup.\n\t * @param {number} fullHeight - The full height of multiview setup.\n\t * @param {number} x - The horizontal offset of the subcamera.\n\t * @param {number} y - The vertical offset of the subcamera.\n\t * @param {number} width - The width of subcamera.\n\t * @param {number} height - The height of subcamera.\n\t * @see {@link PerspectiveCamera#setViewOffset}\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Removes the view offset from the projection matrix.\n\t */\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Updates the camera's projection matrix. Must be called after any change of\n\t * camera properties.\n\t */\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far, this.coordinateSystem, this.reversedDepth );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Represents the shadow configuration of directional lights.\n *\n * @augments LightShadow\n */\nclass DirectionalLightShadow extends LightShadow {\n\n\t/**\n\t * Constructs a new directional light shadow.\n\t */\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( -5, 5, 5, -5, 0.5, 500 ) );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isDirectionalLightShadow = true;\n\n\t}\n\n}\n\n/**\n * A light that gets emitted in a specific direction. This light will behave\n * as though it is infinitely far away and the rays produced from it are all\n * parallel. The common use case for this is to simulate daylight; the sun is\n * far enough away that its position can be considered to be infinite, and\n * all light rays coming from it are parallel.\n *\n * A common point of confusion for directional lights is that setting the\n * rotation has no effect. This is because three.js's DirectionalLight is the\n * equivalent to what is often called a 'Target Direct Light' in other\n * applications.\n *\n * This means that its direction is calculated as pointing from the light's\n * {@link Object3D#position} to the {@link DirectionalLight#target} position\n * (as opposed to a 'Free Direct Light' that just has a rotation\n * component).\n *\n * This light can cast shadows - see the {@link DirectionalLightShadow} for details.\n *\n * ```js\n * // White directional light at half intensity shining from the top.\n * const directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );\n * scene.add( directionalLight );\n * ```\n *\n * @augments Light\n */\nclass DirectionalLight extends Light {\n\n\t/**\n\t * Constructs a new directional light.\n\t *\n\t * @param {(number|Color|string)} [color=0xffffff] - The light's color.\n\t * @param {number} [intensity=1] - The light's strength/intensity.\n\t */\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isDirectionalLight = true;\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\t/**\n\t\t * The directional light points from its position to the\n\t\t * target's position.\n\t\t *\n\t\t * For the target's position to be changed to anything other\n\t\t * than the default, it must be added to the scene.\n\t\t *\n\t\t * It is also possible to set the target to be another 3D object\n\t\t * in the scene. The light will now track the target object.\n\t\t *\n\t\t * @type {Object3D}\n\t\t */\n\t\tthis.target = new Object3D();\n\n\t\t/**\n\t\t * This property holds the light's shadow configuration.\n\t\t *\n\t\t * @type {DirectionalLightShadow}\n\t\t */\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.shadow = this.shadow.toJSON();\n\t\tdata.object.target = this.target.uuid;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * This light globally illuminates all objects in the scene equally.\n *\n * It cannot be used to cast shadows as it does not have a direction.\n *\n * ```js\n * const light = new THREE.AmbientLight( 0x404040 ); // soft white light\n * scene.add( light );\n * ```\n *\n * @augments Light\n */\nclass AmbientLight extends Light {\n\n\t/**\n\t * Constructs a new ambient light.\n\t *\n\t * @param {(number|Color|string)} [color=0xffffff] - The light's color.\n\t * @param {number} [intensity=1] - The light's strength/intensity.\n\t */\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isAmbientLight = true;\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\n/**\n * This class emits light uniformly across the face a rectangular plane.\n * This light type can be used to simulate light sources such as bright\n * windows or strip lighting.\n *\n * Important Notes:\n *\n * - There is no shadow support.\n * - Only PBR materials are supported.\n * - You have to include `RectAreaLightUniformsLib` (`WebGLRenderer`) or `RectAreaLightTexturesLib` (`WebGPURenderer`)\n * into your app and init the uniforms/textures.\n *\n * ```js\n * RectAreaLightUniformsLib.init(); // only relevant for WebGLRenderer\n * THREE.RectAreaLightNode.setLTC( RectAreaLightTexturesLib.init() ); //  only relevant for WebGPURenderer\n *\n * const intensity = 1; const width = 10; const height = 10;\n * const rectLight = new THREE.RectAreaLight( 0xffffff, intensity, width, height );\n * rectLight.position.set( 5, 5, 0 );\n * rectLight.lookAt( 0, 0, 0 );\n * scene.add( rectLight )\n * ```\n *\n * @augments Light\n */\nclass RectAreaLight extends Light {\n\n\t/**\n\t * Constructs a new area light.\n\t *\n\t * @param {(number|Color|string)} [color=0xffffff] - The light's color.\n\t * @param {number} [intensity=1] - The light's strength/intensity.\n\t * @param {number} [width=10] - The width of the light.\n\t * @param {number} [height=10] - The height of the light.\n\t */\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRectAreaLight = true;\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\t/**\n\t\t * The width of the light.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 10\n\t\t */\n\t\tthis.width = width;\n\n\t\t/**\n\t\t * The height of the light.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 10\n\t\t */\n\t\tthis.height = height;\n\n\t}\n\n\t/**\n\t * The light's power. Power is the luminous power of the light measured in lumens (lm).\n\t * Changing the power will also change the light's intensity.\n\t *\n\t * @type {number}\n\t */\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Represents a third-order spherical harmonics (SH). Light probes use this class\n * to encode lighting information.\n *\n * - Primary reference: {@link https://graphics.stanford.edu/papers/envmap/envmap.pdf}\n * - Secondary reference: {@link https://www.ppsloan.org/publications/StupidSH36.pdf}\n */\nclass SphericalHarmonics3 {\n\n\t/**\n\t * Constructs a new spherical harmonics.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSphericalHarmonics3 = true;\n\n\t\t/**\n\t\t * An array holding the (9) SH coefficients.\n\t\t *\n\t\t * @type {Array<Vector3>}\n\t\t */\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the given SH coefficients to this instance by copying\n\t * the values.\n\t *\n\t * @param {Array<Vector3>} coefficients - The SH coefficients.\n\t * @return {SphericalHarmonics3} A reference to this spherical harmonics.\n\t */\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets all SH coefficients to `0`.\n\t *\n\t * @return {SphericalHarmonics3} A reference to this spherical harmonics.\n\t */\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the radiance in the direction of the given normal.\n\t *\n\t * @param {Vector3} normal - The normal vector (assumed to be unit length)\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The radiance.\n\t */\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Returns the irradiance (radiance convolved with cosine lobe) in the\n\t * direction of the given normal.\n\t *\n\t * @param {Vector3} normal - The normal vector (assumed to be unit length)\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The irradiance.\n\t */\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Adds the given SH to this instance.\n\t *\n\t * @param {SphericalHarmonics3} sh - The SH to add.\n\t * @return {SphericalHarmonics3} A reference to this spherical harmonics.\n\t */\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * A convenience method for performing {@link SphericalHarmonics3#add} and\n\t * {@link SphericalHarmonics3#scale} at once.\n\t *\n\t * @param {SphericalHarmonics3} sh - The SH to add.\n\t * @param {number} s - The scale factor.\n\t * @return {SphericalHarmonics3} A reference to this spherical harmonics.\n\t */\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Scales this SH by the given scale factor.\n\t *\n\t * @param {number} s - The scale factor.\n\t * @return {SphericalHarmonics3} A reference to this spherical harmonics.\n\t */\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Linear interpolates between the given SH and this instance by the given\n\t * alpha factor.\n\t *\n\t * @param {SphericalHarmonics3} sh - The SH to interpolate with.\n\t * @param {number} alpha - The alpha factor.\n\t * @return {SphericalHarmonics3} A reference to this spherical harmonics.\n\t */\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this spherical harmonics is equal with the given one.\n\t *\n\t * @param {SphericalHarmonics3} sh - The spherical harmonics to test for equality.\n\t * @return {boolean} Whether this spherical harmonics is equal with the given one.\n\t */\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Copies the values of the given spherical harmonics to this instance.\n\t *\n\t * @param {SphericalHarmonics3} sh - The spherical harmonics to copy.\n\t * @return {SphericalHarmonics3} A reference to this spherical harmonics.\n\t */\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\t/**\n\t * Returns a new spherical harmonics with copied values from this instance.\n\t *\n\t * @return {SphericalHarmonics3} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Sets the SH coefficients of this instance from the given array.\n\t *\n\t * @param {Array<number>} array - An array holding the SH coefficients.\n\t * @param {number} [offset=0] - The array offset where to start copying.\n\t * @return {SphericalHarmonics3} A clone of this instance.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns an array with the SH coefficients, or copies them into the provided\n\t * array. The coefficients are represented as numbers.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array.\n\t * @param {number} [offset=0] - The array offset where to start copying.\n\t * @return {Array<number>} An array with flat SH coefficients.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Computes the SH basis for the given normal vector.\n\t *\n\t * @param {Vector3} normal - The normal.\n\t * @param {Array<number>} shBasis - The target array holding the SH basis.\n\t */\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\n/**\n * Light probes are an alternative way of adding light to a 3D scene. Unlike\n * classical light sources (e.g. directional, point or spot lights), light\n * probes do not emit light. Instead they store information about light\n * passing through 3D space. During rendering, the light that hits a 3D\n * object is approximated by using the data from the light probe.\n *\n * Light probes are usually created from (radiance) environment maps. The\n * class {@link LightProbeGenerator} can be used to create light probes from\n * cube textures or render targets. However, light estimation data could also\n * be provided in other forms e.g. by WebXR. This enables the rendering of\n * augmented reality content that reacts to real world lighting.\n *\n * The current probe implementation in three.js supports so-called diffuse\n * light probes. This type of light probe is functionally equivalent to an\n * irradiance environment map.\n *\n * @augments Light\n */\nclass LightProbe extends Light {\n\n\t/**\n\t * Constructs a new light probe.\n\t *\n\t * @param {SphericalHarmonics3} sh - The spherical harmonics which represents encoded lighting information.\n\t * @param {number} [intensity=1] - The light's strength/intensity.\n\t */\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLightProbe = true;\n\n\t\t/**\n\t\t * A light probe uses spherical harmonics to encode lighting information.\n\t\t *\n\t\t * @type {SphericalHarmonics3}\n\t\t */\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Class for loading materials. The files are internally\n * loaded via {@link FileLoader}.\n *\n * ```js\n * const loader = new THREE.MaterialLoader();\n * const material = await loader.loadAsync( 'material.json' );\n * ```\n * This loader does not support node materials. Use {@link NodeMaterialLoader} instead.\n *\n * @augments Loader\n */\nclass MaterialLoader extends Loader {\n\n\t/**\n\t * Constructs a new material loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * A dictionary holding textures used by the material.\n\t\t *\n\t\t * @type {Object<string,Texture>}\n\t\t */\n\t\tthis.textures = {};\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and pass the loaded material to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Material)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\terror( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Parses the given JSON object and returns a material.\n\t *\n\t * @param {Object} json - The serialized material.\n\t * @return {Material} The parsed material.\n\t */\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\twarn( 'MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = this.createMaterialFromType( json.type );\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.dispersion !== undefined ) material.dispersion = json.dispersion;\n\t\tif ( json.iridescence !== undefined ) material.iridescence = json.iridescence;\n\t\tif ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;\n\t\tif ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.anisotropy !== undefined ) material.anisotropy = json.anisotropy;\n\t\tif ( json.anisotropyRotation !== undefined ) material.anisotropyRotation = json.anisotropyRotation;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.alphaHash !== undefined ) material.alphaHash = json.alphaHash;\n\t\tif ( json.depthFunc !== undefined ) material.depthFunc = json.depthFunc;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.blendSrc !== undefined ) material.blendSrc = json.blendSrc;\n\t\tif ( json.blendDst !== undefined ) material.blendDst = json.blendDst;\n\t\tif ( json.blendEquation !== undefined ) material.blendEquation = json.blendEquation;\n\t\tif ( json.blendSrcAlpha !== undefined ) material.blendSrcAlpha = json.blendSrcAlpha;\n\t\tif ( json.blendDstAlpha !== undefined ) material.blendDstAlpha = json.blendDstAlpha;\n\t\tif ( json.blendEquationAlpha !== undefined ) material.blendEquationAlpha = json.blendEquationAlpha;\n\t\tif ( json.blendColor !== undefined && material.blendColor !== undefined ) material.blendColor.setHex( json.blendColor );\n\t\tif ( json.blendAlpha !== undefined ) material.blendAlpha = json.blendAlpha;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== undefined ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\t\tif ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;\n\t\tif ( json.allowOverride !== undefined ) material.allowOverride = json.allowOverride;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors > 0;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.lights !== undefined ) material.lights = json.lights;\n\t\tif ( json.clipping !== undefined ) material.clipping = json.clipping;\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapRotation !== undefined ) material.envMapRotation.fromArray( json.envMapRotation );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap );\n\t\tif ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\tif ( json.anisotropyMap !== undefined ) material.anisotropyMap = getTexture( json.anisotropyMap );\n\n\t\tif ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );\n\t\tif ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );\n\n\t\treturn material;\n\n\t}\n\n\t/**\n\t * Textures are not embedded in the material JSON so they have\n\t * to be injected before the loading process starts.\n\t *\n\t * @param {Object} value - A dictionary holding textures for material properties.\n\t * @return {MaterialLoader} A reference to this material loader.\n\t */\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates a material for the given type.\n\t *\n\t * @param {string} type - The material type.\n\t * @return {Material} The new material.\n\t */\n\tcreateMaterialFromType( type ) {\n\n\t\treturn MaterialLoader.createMaterialFromType( type );\n\n\t}\n\n\t/**\n\t * Creates a material for the given type.\n\t *\n\t * @static\n\t * @param {string} type - The material type.\n\t * @return {Material} The new material.\n\t */\n\tstatic createMaterialFromType( type ) {\n\n\t\tconst materialLib = {\n\t\t\tShadowMaterial,\n\t\t\tSpriteMaterial,\n\t\t\tRawShaderMaterial,\n\t\t\tShaderMaterial,\n\t\t\tPointsMaterial,\n\t\t\tMeshPhysicalMaterial,\n\t\t\tMeshStandardMaterial,\n\t\t\tMeshPhongMaterial,\n\t\t\tMeshToonMaterial,\n\t\t\tMeshNormalMaterial,\n\t\t\tMeshLambertMaterial,\n\t\t\tMeshDepthMaterial,\n\t\t\tMeshDistanceMaterial,\n\t\t\tMeshBasicMaterial,\n\t\t\tMeshMatcapMaterial,\n\t\t\tLineDashedMaterial,\n\t\t\tLineBasicMaterial,\n\t\t\tMaterial\n\t\t};\n\n\t\treturn new materialLib[ type ]();\n\n\t}\n\n}\n\n/**\n * A class with loader utility functions.\n */\nclass LoaderUtils {\n\n\t/**\n\t * Extracts the base URL from the given URL.\n\t *\n\t * @param {string} url -The URL to extract the base URL from.\n\t * @return {string} The extracted base URL.\n\t */\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === -1 ) return './';\n\n\t\treturn url.slice( 0, index + 1 );\n\n\t}\n\n\t/**\n\t * Resolves relative URLs against the given path. Absolute paths, data urls,\n\t * and blob URLs will be returned as is. Invalid URLs will return an empty\n\t * string.\n\t *\n\t * @param {string} url -The URL to resolve.\n\t * @param {string} path - The base path for relative URLs to be resolved against.\n\t * @return {string} The resolved URL.\n\t */\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\n/**\n * An instanced version of a geometry.\n */\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new instanced buffer geometry.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isInstancedBufferGeometry = true;\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\n\t\t/**\n\t\t * The instance count.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Class for loading geometries. The files are internally\n * loaded via {@link FileLoader}.\n *\n * ```js\n * const loader = new THREE.BufferGeometryLoader();\n * const geometry = await loader.loadAsync( 'models/json/pressure.json' );\n *\n * const material = new THREE.MeshBasicMaterial( { color: 0xF5F5F5 } );\n * const object = new THREE.Mesh( geometry, material );\n * scene.add( object );\n * ```\n *\n * @augments Loader\n */\nclass BufferGeometryLoader extends Loader {\n\n\t/**\n\t * Constructs a new geometry loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and pass the loaded geometry to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(BufferGeometry)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\terror( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Parses the given JSON object and returns a geometry.\n\t *\n\t * @param {Object} json - The serialized geometry.\n\t * @return {BufferGeometry} The parsed geometry.\n\t */\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tgeometry.boundingSphere = new Sphere().fromJSON( boundingSphere );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nconst _customGeometries = {};\n\n/**\n * A loader for loading a JSON resource in the [JSON Object/Scene format](https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4).\n * The files are internally loaded via {@link FileLoader}.\n *\n * ```js\n * const loader = new THREE.ObjectLoader();\n * const obj = await loader.loadAsync( 'models/json/example.json' );\n * scene.add( obj );\n *\n * // Alternatively, to parse a previously loaded JSON structure\n * const object = await loader.parseAsync( a_json_object );\n * scene.add( object );\n * ```\n *\n * @augments Loader\n */\nclass ObjectLoader extends Loader {\n\n\t/**\n\t * Constructs a new object loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and pass the loaded 3D object to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Object3D)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( e );\n\n\t\t\t\terror( 'ObjectLoader: Can\\'t parse ' + url + '.', e.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\\'t load ' + url ) );\n\n\t\t\t\terror( 'ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Async version of {@link ObjectLoader#load}.\n\t *\n\t * @async\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @return {Promise<Object3D>} A Promise that resolves with the loaded 3D object.\n\t */\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tlet json;\n\n\t\ttry {\n\n\t\t\tjson = JSON.parse( text );\n\n\t\t} catch ( e ) {\n\n\t\t\tthrow new Error( 'ObjectLoader: Can\\'t parse ' + url + '. ' + e.message );\n\n\t\t}\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\t/**\n\t * Parses the given JSON. This is used internally by {@link ObjectLoader#load}\n\t * but can also be used directly to parse a previously loaded JSON structure.\n\t *\n\t * @param {Object} json - The serialized 3D object.\n\t * @param {onLoad} onLoad - Executed when all resources (e.g. textures) have been fully loaded.\n\t * @return {Object3D} The parsed 3D object.\n\t */\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ].data instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\t/**\n\t * Async version of {@link ObjectLoader#parse}.\n\t *\n\t * @param {Object} json - The serialized 3D object.\n\t * @return {Promise<Object3D>} A Promise that resolves with the parsed 3D object.\n\t */\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\treturn object;\n\n\t}\n\n\t/**\n\t * Registers the given geometry at the internal\n\t * geometry library.\n\t *\n\t * @static\n\t * @param {string} type - The geometry type.\n\t * @param {BufferGeometry.constructor} geometryClass - The geometry class.\n\t */\n\tstatic registerGeometry( type, geometryClass ) {\n\n\t\t_customGeometries[ type ] = geometryClass;\n\n\t}\n\n\t// internals\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else if ( data.type in _customGeometries ) {\n\n\t\t\t\t\t\t\tgeometry = _customGeometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\twarn( `ObjectLoader: Unknown geometry type \"${ data.type }\". Use .registerGeometry() before starting the deserialization process.` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\twarn( 'ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\twarn( 'ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\twarn( 'ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tconst source = images[ data.image ];\n\t\t\t\tconst image = source.data;\n\n\t\t\t\tlet texture;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture();\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.source = source;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\t\t\t\tif ( data.channel !== undefined ) texture.channel = data.channel;\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.internalFormat !== undefined ) texture.internalFormat = data.internalFormat;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.colorSpace !== undefined ) texture.colorSpace = data.colorSpace;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps;\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\t\t\t\tif ( data.compareFunction !== undefined ) texture.compareFunction = data.compareFunction;\n\t\t\t\tif ( data.normalized !== undefined ) texture.normalized = data.normalized;\n\n\t\t\t\tif ( data.userData !== undefined ) texture.userData = data.userData;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\twarn( 'ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\twarn( 'ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\twarn( 'ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\twarn( 'ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.fog.name !== '' ) {\n\n\t\t\t\t\t\tobject.fog.name = data.fog.name;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;\n\t\t\t\tif ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;\n\t\t\t\tif ( data.backgroundRotation !== undefined ) object.backgroundRotation.fromArray( data.backgroundRotation );\n\n\t\t\t\tif ( data.environmentIntensity !== undefined ) object.environmentIntensity = data.environmentIntensity;\n\t\t\t\tif ( data.environmentRotation !== undefined ) object.environmentRotation.fromArray( data.environmentRotation );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tconst sh = new SphericalHarmonics3().fromArray( data.sh );\n\t\t\t\tobject = new LightProbe( sh, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'BatchedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new BatchedMesh( data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material );\n\t\t\t\tobject.geometry = geometry;\n\t\t\t\tobject.perObjectFrustumCulled = data.perObjectFrustumCulled;\n\t\t\t\tobject.sortObjects = data.sortObjects;\n\n\t\t\t\tobject._drawRanges = data.drawRanges;\n\t\t\t\tobject._reservedRanges = data.reservedRanges;\n\n\t\t\t\tobject._geometryInfo = data.geometryInfo.map( info => {\n\n\t\t\t\t\tlet box = null;\n\t\t\t\t\tlet sphere = null;\n\t\t\t\t\tif ( info.boundingBox !== undefined ) {\n\n\t\t\t\t\t\tbox = new Box3().fromJSON( info.boundingBox );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( info.boundingSphere !== undefined ) {\n\n\t\t\t\t\t\tsphere = new Sphere().fromJSON( info.boundingSphere );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...info,\n\t\t\t\t\t\tboundingBox: box,\n\t\t\t\t\t\tboundingSphere: sphere\n\t\t\t\t\t};\n\n\t\t\t\t} );\n\t\t\t\tobject._instanceInfo = data.instanceInfo;\n\n\t\t\t\tobject._availableInstanceIds = data._availableInstanceIds;\n\t\t\t\tobject._availableGeometryIds = data._availableGeometryIds;\n\n\t\t\t\tobject._nextIndexStart = data.nextIndexStart;\n\t\t\t\tobject._nextVertexStart = data.nextVertexStart;\n\t\t\t\tobject._geometryCount = data.geometryCount;\n\n\t\t\t\tobject._maxInstanceCount = data.maxInstanceCount;\n\t\t\t\tobject._maxVertexCount = data.maxVertexCount;\n\t\t\t\tobject._maxIndexCount = data.maxIndexCount;\n\n\t\t\t\tobject._geometryInitialized = data.geometryInitialized;\n\n\t\t\t\tobject._matricesTexture = getTexture( data.matricesTexture.uuid );\n\n\t\t\t\tobject._indirectTexture = getTexture( data.indirectTexture.uuid );\n\n\t\t\t\tif ( data.colorsTexture !== undefined ) {\n\n\t\t\t\t\tobject._colorsTexture = getTexture( data.colorsTexture.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.boundingSphere !== undefined ) {\n\n\t\t\t\t\tobject.boundingSphere = new Sphere().fromJSON( data.boundingSphere );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.boundingBox !== undefined ) {\n\n\t\t\t\t\tobject.boundingBox = new Box3().fromJSON( data.boundingBox );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.up !== undefined ) object.up.fromArray( data.up );\n\n\t\tif ( data.pivot !== undefined ) object.pivot = new Vector3().fromArray( data.pivot );\n\n\t\tif ( data.morphTargetDictionary !== undefined ) object.morphTargetDictionary = Object.assign( {}, data.morphTargetDictionary );\n\t\tif ( data.morphTargetInfluences !== undefined ) object.morphTargetInfluences = data.morphTargetInfluences.slice();\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.intensity !== undefined ) object.shadow.intensity = data.shadow.intensity;\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.static !== undefined ) object.static = data.static;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance, level.hysteresis );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\twarn( 'ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tbindLightTargets( object ) {\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isDirectionalLight || child.isSpotLight ) {\n\n\t\t\t\tconst uuid = child.target;\n\n\t\t\t\tconst target = object.getObjectByProperty( 'uuid', uuid );\n\n\t\t\t\tif ( target !== undefined ) {\n\n\t\t\t\t\tchild.target = target;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.target = new Object3D();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nconst _errorMap = new WeakMap();\n\n/**\n * A loader for loading images as an [ImageBitmap](https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap).\n * An `ImageBitmap` provides an asynchronous and resource efficient pathway to prepare\n * textures for rendering.\n *\n * Note that {@link Texture#flipY} and {@link Texture#premultiplyAlpha} are ignored with image bitmaps.\n * These options need to be configured via {@link ImageBitmapLoader#setOptions} prior to loading,\n * unlike regular images which can be configured on the Texture to set these options on GPU upload instead.\n *\n * To match the default behaviour of {@link Texture}, the following options are needed:\n *\n * ```js\n * { imageOrientation: 'flipY', premultiplyAlpha: 'none' }\n * ```\n *\n * Also note that unlike {@link FileLoader}, this loader will only avoid multiple concurrent requests to the same URL if {@link Cache} is enabled.\n *\n * ```js\n * const loader = new THREE.ImageBitmapLoader();\n * loader.setOptions( { imageOrientation: 'flipY' } ); // set options if needed\n * const imageBitmap = await loader.loadAsync( 'image.png' );\n *\n * const texture = new THREE.Texture( imageBitmap );\n * texture.needsUpdate = true;\n * ```\n *\n * @augments Loader\n */\nclass ImageBitmapLoader extends Loader {\n\n\t/**\n\t * Constructs a new image bitmap loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isImageBitmapLoader = true;\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\twarn( 'ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\twarn( 'ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\t/**\n\t\t * Represents the loader options.\n\t\t *\n\t\t * @type {Object}\n\t\t * @default {premultiplyAlpha:'none'}\n\t\t */\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t\t/**\n\t\t * Used for aborting requests.\n\t\t *\n\t\t * @private\n\t\t * @type {AbortController}\n\t\t */\n\t\tthis._abortController = new AbortController();\n\n\t}\n\n\t/**\n\t * Sets the given loader options. The structure of the object must match the `options` parameter of\n\t * [createImageBitmap](https://developer.mozilla.org/en-US/docs/Web/API/Window/createImageBitmap).\n\t *\n\t * Note: When caching is enabled, the cache key is based on the URL only. Loading the same URL with\n\t * different options will return the cached result of the first request.\n\t *\n\t * @param {Object} options - The loader options to set.\n\t * @return {ImageBitmapLoader} A reference to this image bitmap loader.\n\t */\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and pass the loaded image bitmap to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(ImageBitmap)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Unsupported in this loader.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( `image-bitmap:${url}` );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\t// If cached is a promise, wait for it to resolve\n\t\t\tif ( cached.then ) {\n\n\t\t\t\tcached.then( imageBitmap => {\n\n\t\t\t\t\t// check if there is an error for the cached promise\n\n\t\t\t\t\tif ( _errorMap.has( cached ) === true ) {\n\n\t\t\t\t\t\tif ( onError ) onError( _errorMap.get( cached ) );\n\n\t\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// If cached is not a promise (i.e., it's already an imageBitmap)\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\t\tfetchOptions.signal = ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal;\n\n\t\tconst promise = fetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( `image-bitmap:${url}`, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\t_errorMap.set( promise, e );\n\n\t\t\tCache.remove( `image-bitmap:${url}` );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tCache.add( `image-bitmap:${url}`, promise );\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n\t/**\n\t * Aborts ongoing fetch requests.\n\t *\n\t * @return {ImageBitmapLoader} A reference to this instance.\n\t */\n\tabort() {\n\n\t\tthis._abortController.abort();\n\t\tthis._abortController = new AbortController();\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet _context;\n\n/**\n * Manages the global audio context in the engine.\n *\n * @hideconstructor\n */\nclass AudioContext {\n\n\t/**\n\t * Returns the global native audio context.\n\t *\n\t * @return {Window.AudioContext} The native audio context.\n\t */\n\tstatic getContext() {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t}\n\n\t/**\n\t * Allows to set the global native audio context from outside.\n\t *\n\t * @param {Window.AudioContext} value - The native context to set.\n\t */\n\tstatic setContext( value ) {\n\n\t\t_context = value;\n\n\t}\n\n}\n\n/**\n * Class for loading audio buffers. Audios are internally\n * loaded via {@link FileLoader}.\n *\n * ```js\n * const audioListener = new THREE.AudioListener();\n * const ambientSound = new THREE.Audio( audioListener );\n *\n * const loader = new THREE.AudioLoader();\n * const audioBuffer = await loader.loadAsync( 'audio/ambient_ocean.ogg' );\n *\n * ambientSound.setBuffer( audioBuffer );\n * ambientSound.play();\n * ```\n *\n * @augments Loader\n */\nclass AudioLoader extends Loader {\n\n\t/**\n\t * Constructs a new audio loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded audio buffer\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(AudioBuffer)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\n\t\t\t\tconst decodeUrl = url + '#decode';\n\t\t\t\tscope.manager.itemStart( decodeUrl ); // prevent loading manager from completing too early, see #33378\n\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\t\t\t\t\tscope.manager.itemEnd( decodeUrl );\n\n\t\t\t\t} ).catch( function ( e ) {\n\n\t\t\t\t\thandleError( e );\n\t\t\t\t\tscope.manager.itemEnd( decodeUrl );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\thandleError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\tfunction handleError( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\terror( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\n\t\t}\n\n\t}\n\n}\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\nconst _projectionMatrix = /*@__PURE__*/ new Matrix4();\n\n/**\n * A special type of camera that uses two perspective cameras with\n * stereoscopic projection. Can be used for rendering stereo effects\n * like [3D Anaglyph](https://en.wikipedia.org/wiki/Anaglyph_3D) or\n * [Parallax Barrier](https://en.wikipedia.org/wiki/parallax_barrier).\n */\nclass StereoCamera {\n\n\t/**\n\t * Constructs a new stereo camera.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * The type property is used for detecting the object type\n\t\t * in context of serialization/deserialization.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.type = 'StereoCamera';\n\n\t\t/**\n\t\t * The aspect.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.aspect = 1;\n\n\t\t/**\n\t\t * The eye separation which represents the distance\n\t\t * between the left and right camera.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.064\n\t\t */\n\t\tthis.eyeSep = 0.064;\n\n\t\t/**\n\t\t * The camera representing the left eye. This is added to layer `1` so objects to be\n\t\t * rendered by the left camera must also be added to this layer.\n\t\t *\n\t\t * @type {PerspectiveCamera}\n\t\t */\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\t/**\n\t\t * The camera representing the right eye. This is added to layer `2` so objects to be\n\t\t * rendered by the right camera must also be added to this layer.\n\t\t *\n\t\t * @type {PerspectiveCamera}\n\t\t */\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\t/**\n\t * Updates the stereo camera based on the given perspective camera.\n\t *\n\t * @param {PerspectiveCamera} camera - The perspective camera.\n\t */\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t_projectionMatrix.copy( camera.projectionMatrix );\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( _projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( _projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nconst fov = -90; // negative fov is not an error\nconst aspect = 1;\n\n/**\n * A special type of camera that is positioned in 3D space to render its surroundings into a\n * cube render target. The render target can then be used as an environment map for rendering\n * realtime reflections in your scene.\n *\n * ```js\n * // Create cube render target\n * const cubeRenderTarget = new THREE.WebGLCubeRenderTarget( 256, { generateMipmaps: true, minFilter: THREE.LinearMipmapLinearFilter } );\n *\n * // Create cube camera\n * const cubeCamera = new THREE.CubeCamera( 1, 100000, cubeRenderTarget );\n * scene.add( cubeCamera );\n *\n * // Create car\n * const chromeMaterial = new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: cubeRenderTarget.texture } );\n * const car = new THREE.Mesh( carGeometry, chromeMaterial );\n * scene.add( car );\n *\n * // Update the render target cube\n * car.visible = false;\n * cubeCamera.position.copy( car.position );\n * cubeCamera.update( renderer, scene );\n *\n * // Render the scene\n * car.visible = true;\n * renderer.render( scene, camera );\n * ```\n *\n * @augments Object3D\n */\nclass CubeCamera extends Object3D {\n\n\t/**\n\t * Constructs a new cube camera.\n\t *\n\t * @param {number} near - The camera's near plane.\n\t * @param {number} far - The camera's far plane.\n\t * @param {WebGLCubeRenderTarget} renderTarget - The cube render target.\n\t */\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\t/**\n\t\t * A reference to the cube render target.\n\t\t *\n\t\t * @type {WebGLCubeRenderTarget}\n\t\t */\n\t\tthis.renderTarget = renderTarget;\n\n\t\t/**\n\t\t * The current active coordinate system.\n\t\t *\n\t\t * @type {?(WebGLCoordinateSystem|WebGPUCoordinateSystem)}\n\t\t * @default null\n\t\t */\n\t\tthis.coordinateSystem = null;\n\n\t\t/**\n\t\t * The current active mipmap level\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.activeMipmapLevel = 0;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\t/**\n\t * Must be called when the coordinate system of the cube camera is changed.\n\t */\n\tupdateCoordinateSystem() {\n\n\t\tconst coordinateSystem = this.coordinateSystem;\n\n\t\tconst cameras = this.children.concat();\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = cameras;\n\n\t\tfor ( const camera of cameras ) this.remove( camera );\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, 1, 0 );\n\t\t\tcameraPX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, 1, 0 );\n\t\t\tcameraNX.lookAt( -1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, -1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, 1 );\n\t\t\tcameraNY.lookAt( 0, -1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, -1 );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, -1, 0 );\n\t\t\tcameraPX.lookAt( -1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, -1, 0 );\n\t\t\tcameraNX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, -1 );\n\t\t\tcameraNY.lookAt( 0, -1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, -1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, -1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, -1 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tfor ( const camera of cameras ) {\n\n\t\t\tthis.add( camera );\n\n\t\t\tcamera.updateMatrixWorld();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Calling this method will render the given scene with the given renderer\n\t * into the cube render target of the camera.\n\t *\n\t * @param {(Renderer|WebGLRenderer)} renderer - The renderer.\n\t * @param {Scene} scene - The scene to render.\n\t */\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst { renderTarget, activeMipmapLevel } = this;\n\n\t\tif ( this.coordinateSystem !== renderer.coordinateSystem ) {\n\n\t\t\tthis.coordinateSystem = renderer.coordinateSystem;\n\n\t\t\tthis.updateCoordinateSystem();\n\n\t\t}\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst currentActiveCubeFace = renderer.getActiveCubeFace();\n\t\tconst currentActiveMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\t// https://github.com/mrdoob/three.js/issues/31413#issuecomment-3095966812\n\n\t\tlet reversedDepthBuffer = false;\n\n\t\tif ( renderer.isWebGLRenderer === true ) {\n\n\t\t\treversedDepthBuffer = renderer.state.buffers.depth.getReversed();\n\n\t\t} else {\n\n\t\t\treversedDepthBuffer = renderer.reversedDepthBuffer;\n\n\t\t}\n\n\t\trenderer.setRenderTarget( renderTarget, 0, activeMipmapLevel );\n\t\tif ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth();\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1, activeMipmapLevel );\n\t\tif ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth();\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2, activeMipmapLevel );\n\t\tif ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth();\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3, activeMipmapLevel );\n\t\tif ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth();\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4, activeMipmapLevel );\n\t\tif ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth();\n\t\trenderer.render( scene, cameraPZ );\n\n\t\t// mipmaps are generated during the last call of render()\n\t\t// at this point, all sides of the cube render target are defined\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5, activeMipmapLevel );\n\t\tif ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth();\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\trenderTarget.texture.needsPMREMUpdate = true;\n\n\t}\n\n}\n\n/**\n * This type of camera can be used in order to efficiently render a scene with a\n * predefined set of cameras. This is an important performance aspect for\n * rendering VR scenes.\n *\n * An instance of `ArrayCamera` always has an array of sub cameras. It's mandatory\n * to define for each sub camera the `viewport` property which determines the\n * part of the viewport that is rendered with this camera.\n *\n * @augments PerspectiveCamera\n */\nclass ArrayCamera extends PerspectiveCamera {\n\n\t/**\n\t * Constructs a new array camera.\n\t *\n\t * @param {Array<PerspectiveCamera>} [array=[]] - An array of perspective sub cameras.\n\t */\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isArrayCamera = true;\n\n\t\t/**\n\t\t * Whether this camera is used with multiview rendering or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default false\n\t\t */\n\t\tthis.isMultiViewCamera = false;\n\n\t\t/**\n\t\t * An array of perspective sub cameras.\n\t\t *\n\t\t * @type {Array<PerspectiveCamera>}\n\t\t */\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\n/**\n * This class is an alternative to {@link Clock} with a different API design and behavior.\n * The goal is to avoid the conceptual flaws that became apparent in `Clock` over time.\n *\n * - `Timer` has an `update()` method that updates its internal state. That makes it possible to\n * call `getDelta()` and `getElapsed()` multiple times per simulation step without getting different values.\n * - The class can make use of the Page Visibility API to avoid large time delta values when the app\n * is inactive (e.g. tab switched or browser hidden).\n *\n * ```js\n * const timer = new Timer();\n * timer.connect( document ); // use Page Visibility API\n * ```\n */\nclass Timer {\n\n\t/**\n\t * Constructs a new timer.\n\t */\n\tconstructor() {\n\n\t\tthis._previousTime = 0;\n\t\tthis._currentTime = 0;\n\t\tthis._startTime = performance.now();\n\n\t\tthis._delta = 0;\n\t\tthis._elapsed = 0;\n\n\t\tthis._timescale = 1;\n\n\t\tthis._document = null;\n\t\tthis._pageVisibilityHandler = null;\n\n\t}\n\n\t/**\n\t * Connect the timer to the given document.Calling this method is not mandatory to\n\t * use the timer but enables the usage of the Page Visibility API to avoid large time\n\t * delta values.\n\t *\n\t * @param {Document} document - The document.\n\t */\n\tconnect( document ) {\n\n\t\tthis._document = document;\n\n\t\t// use Page Visibility API to avoid large time delta values\n\n\t\tif ( document.hidden !== undefined ) {\n\n\t\t\tthis._pageVisibilityHandler = handleVisibilityChange.bind( this );\n\n\t\t\tdocument.addEventListener( 'visibilitychange', this._pageVisibilityHandler, false );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disconnects the timer from the DOM and also disables the usage of the Page Visibility API.\n\t */\n\tdisconnect() {\n\n\t\tif ( this._pageVisibilityHandler !== null ) {\n\n\t\t\tthis._document.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );\n\t\t\tthis._pageVisibilityHandler = null;\n\n\t\t}\n\n\t\tthis._document = null;\n\n\t}\n\n\t/**\n\t * Returns the time delta in seconds.\n\t *\n\t * @return {number} The time delta in second.\n\t */\n\tgetDelta() {\n\n\t\treturn this._delta / 1000;\n\n\t}\n\n\t/**\n\t * Returns the elapsed time in seconds.\n\t *\n\t * @return {number} The elapsed time in second.\n\t */\n\tgetElapsed() {\n\n\t\treturn this._elapsed / 1000;\n\n\t}\n\n\t/**\n\t * Returns the timescale.\n\t *\n\t * @return {number} The timescale.\n\t */\n\tgetTimescale() {\n\n\t\treturn this._timescale;\n\n\t}\n\n\t/**\n\t * Sets the given timescale which scale the time delta computation\n\t * in `update()`.\n\t *\n\t * @param {number} timescale - The timescale to set.\n\t * @return {Timer} A reference to this timer.\n\t */\n\tsetTimescale( timescale ) {\n\n\t\tthis._timescale = timescale;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Resets the time computation for the current simulation step.\n\t *\n\t * @return {Timer} A reference to this timer.\n\t */\n\treset() {\n\n\t\tthis._currentTime = performance.now() - this._startTime;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Can be used to free all internal resources. Usually called when\n\t * the timer instance isn't required anymore.\n\t */\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\t/**\n\t * Updates the internal state of the timer. This method should be called\n\t * once per simulation step and before you perform queries against the timer\n\t * (e.g. via `getDelta()`).\n\t *\n\t * @param {number} timestamp - The current time in milliseconds. Can be obtained\n\t * from the `requestAnimationFrame` callback argument. If not provided, the current\n\t * time will be determined with `performance.now`.\n\t * @return {Timer} A reference to this timer.\n\t */\n\tupdate( timestamp ) {\n\n\t\tif ( this._pageVisibilityHandler !== null && this._document.hidden === true ) {\n\n\t\t\tthis._delta = 0;\n\n\t\t} else {\n\n\t\t\tthis._previousTime = this._currentTime;\n\t\t\tthis._currentTime = ( timestamp !== undefined ? timestamp : performance.now() ) - this._startTime;\n\n\t\t\tthis._delta = ( this._currentTime - this._previousTime ) * this._timescale;\n\t\t\tthis._elapsed += this._delta; // _elapsed is the accumulation of all previous deltas\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction handleVisibilityChange() {\n\n\tif ( this._document.hidden === false ) this.reset();\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\n\nconst _forward = /*@__PURE__*/ new Vector3();\nconst _up = /*@__PURE__*/ new Vector3();\n\n/**\n * The class represents a virtual listener of the all positional and non-positional audio effects\n * in the scene. A three.js application usually creates a single listener. It is a mandatory\n * constructor parameter for audios entities like {@link Audio} and {@link PositionalAudio}.\n *\n * In most cases, the listener object is a child of the camera. So the 3D transformation of the\n * camera represents the 3D transformation of the listener.\n *\n * @augments Object3D\n */\nclass AudioListener extends Object3D {\n\n\t/**\n\t * Constructs a new audio listener.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\t/**\n\t\t * The native audio context.\n\t\t *\n\t\t * @type {AudioContext}\n\t\t * @readonly\n\t\t */\n\t\tthis.context = AudioContext.getContext();\n\n\t\t/**\n\t\t * The gain node used for volume control.\n\t\t *\n\t\t * @type {GainNode}\n\t\t * @readonly\n\t\t */\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\t/**\n\t\t * An optional filter.\n\t\t *\n\t\t * Defined via {@link AudioListener#setFilter}.\n\t\t *\n\t\t * @type {?AudioNode}\n\t\t * @default null\n\t\t * @readonly\n\t\t */\n\t\tthis.filter = null;\n\n\t\t/**\n\t\t * Time delta values required for `linearRampToValueAtTime()` usage.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t * @readonly\n\t\t */\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._timer = new Timer();\n\n\t}\n\n\t/**\n\t * Returns the listener's input node.\n\t *\n\t * This method is used by other audio nodes to connect to this listener.\n\t *\n\t * @return {GainNode} The input node.\n\t */\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\t/**\n\t * Removes the current filter from this listener.\n\t *\n\t * @return {AudioListener} A reference to this listener.\n\t */\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the current set filter.\n\t *\n\t * @return {?AudioNode} The filter.\n\t */\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\t/**\n\t * Sets the given filter to this listener.\n\t *\n\t * @param {AudioNode} value - The filter to set.\n\t * @return {AudioListener} A reference to this listener.\n\t */\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the applications master volume.\n\t *\n\t * @return {number} The master volume.\n\t */\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\t/**\n\t * Sets the applications master volume. This volume setting affects\n\t * all audio nodes in the scene.\n\t *\n\t * @param {number} value - The master volume to set.\n\t * @return {AudioListener} A reference to this listener.\n\t */\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis._timer.update();\n\n\t\tconst listener = this.context.listener;\n\n\t\tthis.timeDelta = this._timer.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t// the initial forward and up directions must be orthogonal\n\t\t_forward.set( 0, 0, -1 ).applyQuaternion( _quaternion$1 );\n\t\t_up.set( 0, 1, 0 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _forward.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _forward.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _forward.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( _up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( _up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( _up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _forward.x, _forward.y, _forward.z, _up.x, _up.y, _up.z );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Represents a non-positional ( global ) audio object.\n *\n * This and related audio modules make use of the [Web Audio API](https://www.w3.org/TR/webaudio-1.1/).\n *\n * ```js\n * // create an AudioListener and add it to the camera\n * const listener = new THREE.AudioListener();\n * camera.add( listener );\n *\n * // create a global audio source\n * const sound = new THREE.Audio( listener );\n *\n * // load a sound and set it as the Audio object's buffer\n * const audioLoader = new THREE.AudioLoader();\n * audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {\n * \tsound.setBuffer( buffer );\n * \tsound.setLoop( true );\n * \tsound.setVolume( 0.5 );\n * \tsound.play();\n * });\n * ```\n *\n * @augments Object3D\n */\nclass Audio extends Object3D {\n\n\t/**\n\t * Constructs a new audio.\n\t *\n\t * @param {AudioListener} listener - The global audio listener.\n\t */\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\t/**\n\t\t * The global audio listener.\n\t\t *\n\t\t * @type {AudioListener}\n\t\t * @readonly\n\t\t */\n\t\tthis.listener = listener;\n\n\t\t/**\n\t\t * The audio context.\n\t\t *\n\t\t * @type {AudioContext}\n\t\t * @readonly\n\t\t */\n\t\tthis.context = listener.context;\n\n\t\t/**\n\t\t * The gain node used for volume control.\n\t\t *\n\t\t * @type {GainNode}\n\t\t * @readonly\n\t\t */\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\t/**\n\t\t * Whether to start playback automatically or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.autoplay = false;\n\n\t\t/**\n\t\t * A reference to an audio buffer.\n\t\t *\n\t\t * Defined via {@link Audio#setBuffer}.\n\t\t *\n\t\t * @type {?AudioBuffer}\n\t\t * @default null\n\t\t * @readonly\n\t\t */\n\t\tthis.buffer = null;\n\n\t\t/**\n\t\t * Modify pitch, measured in cents. +/- 100 is a semitone.\n\t\t * +/- 1200 is an octave.\n\t\t *\n\t\t * Defined via {@link Audio#setDetune}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t * @readonly\n\t\t */\n\t\tthis.detune = 0;\n\n\t\t/**\n\t\t * Whether the audio should loop or not.\n\t\t *\n\t\t * Defined via {@link Audio#setLoop}.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t * @readonly\n\t\t */\n\t\tthis.loop = false;\n\n\t\t/**\n\t\t * Defines where in the audio buffer the replay should\n\t\t * start, in seconds.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.loopStart = 0;\n\n\t\t/**\n\t\t * Defines where in the audio buffer the replay should\n\t\t * stop, in seconds.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.loopEnd = 0;\n\n\t\t/**\n\t\t * An offset to the time within the audio buffer the playback\n\t\t * should begin, in seconds.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.offset = 0;\n\n\t\t/**\n\t\t * Overrides the default duration of the audio.\n\t\t *\n\t\t * @type {undefined|number}\n\t\t * @default undefined\n\t\t */\n\t\tthis.duration = undefined;\n\n\t\t/**\n\t\t * The playback speed.\n\t\t *\n\t\t * Defined via {@link Audio#setPlaybackRate}.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default 1\n\t\t */\n\t\tthis.playbackRate = 1;\n\n\t\t/**\n\t\t * Indicates whether the audio is playing or not.\n\t\t *\n\t\t * This flag will be automatically set when using {@link Audio#play},\n\t\t * {@link Audio#pause}, {@link Audio#stop}.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default false\n\t\t */\n\t\tthis.isPlaying = false;\n\n\t\t/**\n\t\t * Indicates whether the audio playback can be controlled\n\t\t * with method like {@link Audio#play} or {@link Audio#pause}.\n\t\t *\n\t\t * This flag will be automatically set when audio sources are\n\t\t * defined.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.hasPlaybackControl = true;\n\n\t\t/**\n\t\t * Holds a reference to the current audio source.\n\t\t *\n\t\t * The property is automatically by one of the `set*()` methods.\n\t\t *\n\t\t * @type {?AudioNode}\n\t\t * @readonly\n\t\t * @default null\n\t\t */\n\t\tthis.source = null;\n\n\t\t/**\n\t\t * Defines the source type.\n\t\t *\n\t\t * The property is automatically set by one of the `set*()` methods.\n\t\t *\n\t\t * @type {('empty'|'audioNode'|'mediaNode'|'mediaStreamNode'|'buffer')}\n\t\t * @readonly\n\t\t * @default 'empty'\n\t\t */\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\t/**\n\t\t * Can be used to apply a variety of low-order filters to create\n\t\t * more complex sound effects e.g. via `BiquadFilterNode`.\n\t\t *\n\t\t * The property is automatically set by {@link Audio#setFilters}.\n\t\t *\n\t\t * @type {Array<AudioNode>}\n\t\t * @readonly\n\t\t */\n\t\tthis.filters = [];\n\n\t}\n\n\t/**\n\t * Returns the output audio node.\n\t *\n\t * @return {GainNode} The output node.\n\t */\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\t/**\n\t * Sets the given audio node as the source of this instance.\n\t *\n\t * {@link Audio#sourceType} is set to `audioNode` and {@link Audio#hasPlaybackControl} to `false`.\n\t *\n\t * @param {AudioNode} audioNode - The audio node like an instance of `OscillatorNode`.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given media element as the source of this instance.\n\t *\n\t * {@link Audio#sourceType} is set to `mediaNode` and {@link Audio#hasPlaybackControl} to `false`.\n\t *\n\t * @param {HTMLMediaElement} mediaElement - The media element.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given media stream as the source of this instance.\n\t *\n\t * {@link Audio#sourceType} is set to `mediaStreamNode` and {@link Audio#hasPlaybackControl} to `false`.\n\t *\n\t * @param {MediaStream} mediaStream - The media stream.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given audio buffer as the source of this instance.\n\t *\n\t * {@link Audio#sourceType} is set to `buffer` and {@link Audio#hasPlaybackControl} to `true`.\n\t *\n\t * @param {AudioBuffer} audioBuffer - The audio buffer.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Starts the playback of the audio.\n\t *\n\t * Can only be used with compatible audio sources that allow playback control.\n\t *\n\t * @param {number} [delay=0] - The delay, in seconds, at which the audio should start playing.\n\t * @return {Audio|undefined} A reference to this instance.\n\t */\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\twarn( 'Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\twarn( 'Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\t/**\n\t * Pauses the playback of the audio.\n\t *\n\t * Can only be used with compatible audio sources that allow playback control.\n\t *\n\t * @return {Audio|undefined} A reference to this instance.\n\t */\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\twarn( 'Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Stops the playback of the audio.\n\t *\n\t * Can only be used with compatible audio sources that allow playback control.\n\t *\n\t * @param {number} [delay=0] - The delay, in seconds, at which the audio should stop playing.\n\t * @return {Audio|undefined} A reference to this instance.\n\t */\n\tstop( delay = 0 ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\twarn( 'Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tif ( this.source !== null ) {\n\n\t\t\tthis.source.stop( this.context.currentTime + delay );\n\t\t\tthis.source.onended = null;\n\n\t\t}\n\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Connects to the audio source. This is used internally on\n\t * initialisation and when setting / removing filters.\n\t *\n\t * @return {Audio} A reference to this instance.\n\t */\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Disconnects to the audio source. This is used internally on\n\t * initialisation and when setting / removing filters.\n\t *\n\t * @return {Audio|undefined} A reference to this instance.\n\t */\n\tdisconnect() {\n\n\t\tif ( this._connected === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the current set filters.\n\t *\n\t * @return {Array<AudioNode>} The list of filters.\n\t */\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\t/**\n\t * Sets an array of filters and connects them with the audio source.\n\t *\n\t * @param {Array<AudioNode>} [value] - A list of filters.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Defines the detuning of oscillation in cents.\n\t *\n\t * @param {number} value - The detuning of oscillation in cents.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.isPlaying === true && this.source.detune !== undefined ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the detuning of oscillation in cents.\n\t *\n\t * @return {number} The detuning of oscillation in cents.\n\t */\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\t/**\n\t * Returns the first filter in the list of filters.\n\t *\n\t * @return {AudioNode|undefined} The first filter in the list of filters.\n\t */\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\t/**\n\t * Applies a single filter node to the audio.\n\t *\n\t * @param {AudioNode} [filter] - The filter to set.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\t/**\n\t * Sets the playback rate.\n\t *\n\t * Can only be used with compatible audio sources that allow playback control.\n\t *\n\t * @param {number} [value] - The playback rate to set.\n\t * @return {Audio|undefined} A reference to this instance.\n\t */\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\twarn( 'Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the current playback rate.\n\n\t * @return {number} The playback rate.\n\t */\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\t/**\n\t * Automatically called when playback finished.\n\t */\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\t\tthis._progress = 0;\n\n\t}\n\n\t/**\n\t * Returns the loop flag.\n\t *\n\t * Can only be used with compatible audio sources that allow playback control.\n\t *\n\t * @return {boolean} Whether the audio should loop or not.\n\t */\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\twarn( 'Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\t/**\n\t * Sets the loop flag.\n\t *\n\t * Can only be used with compatible audio sources that allow playback control.\n\t *\n\t * @param {boolean} value - Whether the audio should loop or not.\n\t * @return {Audio|undefined} A reference to this instance.\n\t */\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\twarn( 'Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the loop start value which defines where in the audio buffer the replay should\n\t * start, in seconds.\n\t *\n\t * @param {number} value - The loop start value.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the loop end value which defines where in the audio buffer the replay should\n\t * stop, in seconds.\n\t *\n\t * @param {number} value - The loop end value.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the volume.\n\t *\n\t * @return {number} The volume.\n\t */\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\t/**\n\t * Sets the volume.\n\t *\n\t * @param {number} value - The volume to set.\n\t * @return {Audio} A reference to this instance.\n\t */\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.sourceType !== 'buffer' ) {\n\n\t\t\twarn( 'Audio: Audio source type cannot be copied.' );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.autoplay = source.autoplay;\n\n\t\tthis.buffer = source.buffer;\n\t\tthis.detune = source.detune;\n\t\tthis.loop = source.loop;\n\t\tthis.loopStart = source.loopStart;\n\t\tthis.loopEnd = source.loopEnd;\n\t\tthis.offset = source.offset;\n\t\tthis.duration = source.duration;\n\t\tthis.playbackRate = source.playbackRate;\n\t\tthis.hasPlaybackControl = source.hasPlaybackControl;\n\t\tthis.sourceType = source.sourceType;\n\n\t\tthis.filters = source.filters.slice();\n\n\t\treturn this;\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor( this.listener ).copy( this, recursive );\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\n/**\n * Represents a positional audio object.\n *\n * ```js\n * // create an AudioListener and add it to the camera\n * const listener = new THREE.AudioListener();\n * camera.add( listener );\n *\n * // create the PositionalAudio object (passing in the listener)\n * const sound = new THREE.PositionalAudio( listener );\n *\n * // load a sound and set it as the PositionalAudio object's buffer\n * const audioLoader = new THREE.AudioLoader();\n * audioLoader.load( 'sounds/song.ogg', function( buffer ) {\n * \tsound.setBuffer( buffer );\n * \tsound.setRefDistance( 20 );\n * \tsound.play();\n * });\n *\n * // create an object for the sound to play from\n * const sphere = new THREE.SphereGeometry( 20, 32, 16 );\n * const material = new THREE.MeshPhongMaterial( { color: 0xff2200 } );\n * const mesh = new THREE.Mesh( sphere, material );\n * scene.add( mesh );\n *\n * // finally add the sound to the mesh\n * mesh.add( sound );\n *\n * @augments Audio\n */\nclass PositionalAudio extends Audio {\n\n\t/**\n\t * Constructs a positional audio.\n\t *\n\t * @param {AudioListener} listener - The global audio listener.\n\t */\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\t/**\n\t\t * The panner node represents the location, direction, and behavior of an audio\n\t\t * source in 3D space.\n\t\t *\n\t\t * @type {PannerNode}\n\t\t * @readonly\n\t\t */\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tconnect() {\n\n\t\tsuper.connect();\n\n\t\tthis.panner.connect( this.gain );\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tsuper.disconnect();\n\n\t\tthis.panner.disconnect( this.gain );\n\n\t\treturn this;\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\t/**\n\t * Returns the current reference distance.\n\t *\n\t * @return {number} The reference distance.\n\t */\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\t/**\n\t * Defines the reference distance for reducing volume as the audio source moves\n\t * further from the listener – i.e. the distance at which the volume reduction\n\t * starts taking effect.\n\t *\n\t * @param {number} value - The reference distance to set.\n\t * @return {PositionalAudio} A reference to this instance.\n\t */\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the current rolloff factor.\n\t *\n\t * @return {number} The rolloff factor.\n\t */\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\t/**\n\t * Defines how quickly the volume is reduced as the source moves away from the listener.\n\t *\n\t * @param {number} value - The rolloff factor.\n\t * @return {PositionalAudio} A reference to this instance.\n\t */\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the current distance model.\n\t *\n\t * @return {('linear'|'inverse'|'exponential')} The distance model.\n\t */\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\t/**\n\t * Defines which algorithm to use to reduce the volume of the audio source\n\t * as it moves away from the listener.\n\t *\n\t * Read [the spec](https://www.w3.org/TR/webaudio-1.1/#enumdef-distancemodeltype)\n\t * for more details.\n\t *\n\t * @param {('linear'|'inverse'|'exponential')} value - The distance model to set.\n\t * @return {PositionalAudio} A reference to this instance.\n\t */\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the current max distance.\n\t *\n\t * @return {number} The max distance.\n\t */\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\t/**\n\t * Defines the maximum distance between the audio source and the listener,\n\t * after which the volume is not reduced any further.\n\t *\n\t * This value is used only by the `linear` distance model.\n\t *\n\t * @param {number} value - The max distance.\n\t * @return {PositionalAudio} A reference to this instance.\n\t */\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the directional cone in which the audio can be listened.\n\t *\n\t * @param {number} coneInnerAngle - An angle, in degrees, of a cone inside of which there will be no volume reduction.\n\t * @param {number} coneOuterAngle - An angle, in degrees, of a cone outside of which the volume will be reduced by a constant value, defined by the `coneOuterGain` parameter.\n\t * @param {number} coneOuterGain - The amount of volume reduction outside the cone defined by the `coneOuterAngle`. When set to `0`, no sound can be heard.\n\t * @return {PositionalAudio} A reference to this instance.\n\t */\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * This class can be used to analyse audio data.\n *\n * ```js\n * // create an AudioListener and add it to the camera\n * const listener = new THREE.AudioListener();\n * camera.add( listener );\n *\n * // create an Audio source\n * const sound = new THREE.Audio( listener );\n *\n * // load a sound and set it as the Audio object's buffer\n * const audioLoader = new THREE.AudioLoader();\n * audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {\n * \tsound.setBuffer( buffer );\n * \tsound.setLoop(true);\n * \tsound.setVolume(0.5);\n * \tsound.play();\n * });\n *\n * // create an AudioAnalyser, passing in the sound and desired fftSize\n * const analyser = new THREE.AudioAnalyser( sound, 32 );\n *\n * // get the average frequency of the sound\n * const data = analyser.getAverageFrequency();\n * ```\n */\nclass AudioAnalyser {\n\n\t/**\n\t * Constructs a new audio analyzer.\n\t *\n\t * @param {Audio} audio - The audio to analyze.\n\t * @param {number} [fftSize=2048] - The window size in samples that is used when performing a Fast Fourier Transform (FFT) to get frequency domain data.\n\t */\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\t/**\n\t\t * The global audio listener.\n\t\t *\n\t\t * @type {AnalyserNode}\n\t\t */\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\t/**\n\t\t * Holds the analyzed data.\n\t\t *\n\t\t * @type {Uint8Array}\n\t\t */\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\t/**\n\t * Returns an array with frequency data of the audio.\n\t *\n\t * Each item in the array represents the decibel value for a specific frequency.\n\t * The frequencies are spread linearly from 0 to 1/2 of the sample rate.\n\t * For example, for 48000 sample rate, the last item of the array will represent\n\t * the decibel value for 24000 Hz.\n\t *\n\t * @return {Uint8Array} The frequency data.\n\t */\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\t/**\n\t * Returns the average of the frequencies returned by {@link AudioAnalyser#getFrequencyData}.\n\t *\n\t * @return {number} The average frequency.\n\t */\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\n/**\n * Buffered scene graph property that allows weighted accumulation; used internally.\n */\nclass PropertyMixer {\n\n\t/**\n\t * Constructs a new property mixer.\n\t *\n\t * @param {PropertyBinding} binding - The property binding.\n\t * @param {string} typeName - The keyframe track type name.\n\t * @param {number} valueSize - The keyframe track value size.\n\t */\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\t/**\n\t\t * The property binding.\n\t\t *\n\t\t * @type {PropertyBinding}\n\t\t */\n\t\tthis.binding = binding;\n\n\t\t/**\n\t\t * The keyframe track value size.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\t/**\n\t\t * Accumulated weight of the property binding.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.cumulativeWeight = 0;\n\n\t\t/**\n\t\t * Accumulated additive weight of the property binding.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\t/**\n\t\t * Number of active keyframe tracks currently using this property binding.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.useCount = 0;\n\n\t\t/**\n\t\t * Number of keyframe tracks referencing this property binding.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t/**\n\t * Accumulates data in the `incoming` region into `accu<i>`.\n\t *\n\t * @param {number} accuIndex - The accumulation index.\n\t * @param {number} weight - The weight.\n\t */\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t/**\n\t * Accumulates data in the `incoming` region into `add`.\n\t *\n\t * @param {number} weight - The weight.\n\t */\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t/**\n\t * Applies the state of `accu<i>` to the binding when accus differ.\n\t *\n\t * @param {number} accuIndex - The accumulation index.\n\t */\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Remembers the state of the bound property and copy it to both accus.\n\t */\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t/**\n\t * Applies the state previously taken via {@link PropertyMixer#saveOriginalState} to the binding.\n\t */\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t// internals\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\n\n\n/**\n * This holds a reference to a real property in the scene graph; used internally.\n */\nclass PropertyBinding {\n\n\t/**\n\t * Constructs a new property binding.\n\t *\n\t * @param {Object} rootNode - The root node.\n\t * @param {string} path - The path.\n\t * @param {?Object} [parsedPath] - The parsed path.\n\t */\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\t/**\n\t\t * The object path to the animated property.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.path = path;\n\n\t\t/**\n\t\t * An object holding information about the path.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\t/**\n\t\t * The object owns the animated property.\n\t\t *\n\t\t * @type {?Object}\n\t\t */\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );\n\n\t\t/**\n\t\t * The root node.\n\t\t *\n\t\t * @type {Object3D|Skeleton}\n\t\t */\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\t/**\n\t * Factory method for creating a property binding from the given parameters.\n\t *\n\t * @static\n\t * @param {Object} root - The root node.\n\t * @param {string} path - The path.\n\t * @param {?Object} [parsedPath] - The parsed path.\n\t * @return {PropertyBinding|Composite} The created property binding or composite.\n\t */\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name - Node name to be sanitized.\n\t * @return {string} The sanitized node name.\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\t/**\n\t * Parses the given track name (an object path to an animated property) and\n\t * returns an object with information about the path. Matches strings in the following forms:\n\t *\n\t * - nodeName.property\n\t * - nodeName.property[accessor]\n\t * - nodeName.material.property[accessor]\n\t * - uuid.property[accessor]\n\t * - uuid.objectName[objectIndex].propertyName[propertyIndex]\n\t * - parentName/nodeName.property\n\t * - parentName/parentName/nodeName.property[index]\n\t * - .bone[Armature.DEF_cog].position\n\t * - scene:helium_balloon_model:helium_balloon_model.position\n\t *\n\t * @static\n\t * @param {string} trackName - The track name to parse.\n\t * @return {Object} The parsed track name as an object.\n\t */\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( matches === null ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== -1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== -1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\t/**\n\t * Searches for a node in the hierarchy of the given root object by the given\n\t * node name.\n\t *\n\t * @static\n\t * @param {Object} root - The root object.\n\t * @param {string|number} nodeName - The name of the node.\n\t * @return {?Object} The found node. Returns `null` if no object was found.\n\t */\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === -1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t/**\n\t * Creates a getter / setter pair for the property tracked by this binding.\n\t */\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName );\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\twarn( 'PropertyBinding: No target node found for track: ' + this.path + '.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\terror( 'PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\terror( 'PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\terror( 'PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map':\n\n\t\t\t\t\tif ( 'map' in targetObject ) {\n\n\t\t\t\t\t\ttargetObject = targetObject.map;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\terror( 'PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.map ) {\n\n\t\t\t\t\t\terror( 'PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.map;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\terror( 'PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\terror( 'PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\terror( 'PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.isMaterial === true ) {\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.isObject3D === true ) {\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\terror( 'PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\terror( 'PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\t/**\n\t * Unbinds the property.\n\t */\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n * - Instead pass this object as 'root'.\n * - You can also add and remove objects later when the mixer is running.\n *\n * Note:\n *\n * - Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the all objects in the group.\n * - A single property can either be controlled through a target group or directly, but not both.\n */\nclass AnimationObjectGroup {\n\n\t/**\n\t * Constructs a new animation group.\n\t *\n\t * @param {...Object3D} arguments - An arbitrary number of 3D objects that share the same animation state.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isAnimationObjectGroup = true;\n\n\t\t/**\n\t\t * The UUID of the 3D object.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t */\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/**\n\t * Adds an arbitrary number of objects to this animation group.\n\t *\n\t * @param {...Object3D} arguments - The 3D objects to add.\n\t */\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\terror( 'AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t/**\n\t * Removes an arbitrary number of objects to this animation group\n\t *\n\t * @param {...Object3D} arguments - The 3D objects to remove.\n\t */\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t/**\n\t * Deallocates all memory resources for the passed 3D objects of this animation group.\n\t *\n\t * @param {...Object3D} arguments - The 3D objects to uncache.\n\t */\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * An instance of `AnimationAction` schedules the playback of an animation which is\n * stored in {@link AnimationClip}.\n */\nclass AnimationAction {\n\n\t/**\n\t * Constructs a new animation action.\n\t *\n\t * @param {AnimationMixer} mixer - The mixer that is controlled by this action.\n\t * @param {AnimationClip} clip - The animation clip that holds the actual keyframes.\n\t * @param {?Object3D} [localRoot=null] - The root object on which this action is performed.\n\t * @param {(NormalAnimationBlendMode|AdditiveAnimationBlendMode)} [blendMode] - The blend mode.\n\t */\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\n\t\t/**\n\t\t * Defines how the animation is blended/combined when two or more animations\n\t\t * are simultaneously played.\n\t\t *\n\t\t * @type {(NormalAnimationBlendMode|AdditiveAnimationBlendMode)}\n\t\t */\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\n\t\t\t// preserve interpolant settings (like tangent data from BezierInterpolant)\n\n\t\t\tif ( interpolant.settings ) {\n\n\t\t\t\tObject.assign( interpolantSettings, interpolant.settings );\n\n\t\t\t}\n\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\t/**\n\t\t * The loop mode, set via {@link AnimationAction#setLoop}.\n\t\t *\n\t\t * @type {(LoopRepeat|LoopOnce|LoopPingPong)}\n\t\t * @default LoopRepeat\n\t\t */\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = -1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t/**\n\t\t * The local time of this action (in seconds, starting with `0`).\n\t\t *\n\t\t * The value gets clamped or wrapped to `[0,clip.duration]` (according to the\n\t\t * loop state).\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.time = 0;\n\n\t\t/**\n\t\t * Scaling factor for the {@link AnimationAction#time}. A value of `0` causes the\n\t\t * animation to pause. Negative values cause the animation to play backwards.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\t/**\n\t\t * The degree of influence of this action (in the interval `[0, 1]`). Values\n\t\t * between `0` (no impact) and `1` (full impact) can be used to blend between\n\t\t * several actions.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\t/**\n\t\t * The number of repetitions of the performed clip over the course of this action.\n\t\t * Can be set via {@link AnimationAction#setLoop}.\n\t\t *\n\t\t * Setting this number has no effect if {@link AnimationAction#loop} is set to\n\t\t * `THREE:LoopOnce`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.repetitions = Infinity;\n\n\t\t/**\n\t\t * If set to `true`, the playback of the action is paused.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.paused = false;\n\n\t\t/**\n\t\t * If set to `false`, the action is disabled so it has no impact.\n\t\t *\n\t\t * When the action is re-enabled, the animation continues from its current\n\t\t * time (setting `enabled` to `false` doesn't reset the action).\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enabled = true;\n\n\t\t/**\n\t\t * If set to true the animation will automatically be paused on its last frame.\n\t\t *\n\t\t * If set to false, {@link AnimationAction#enabled} will automatically be switched\n\t\t * to `false` when the last loop of the action has finished, so that this action has\n\t\t * no further impact.\n\t\t *\n\t\t * Note: This member has no impact if the action is interrupted (it\n\t\t * has only an effect if its last loop has really finished).\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clampWhenFinished = false;\n\n\t\t/**\n\t\t * Enables smooth interpolation without separate clips for start, loop and end.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.zeroSlopeAtStart = true;\n\n\t\t/**\n\t\t * Enables smooth interpolation without separate clips for start, loop and end.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.zeroSlopeAtEnd = true;\n\n\t}\n\n\t/**\n\t * Starts the playback of the animation.\n\t *\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Stops the playback of the animation.\n\t *\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\t/**\n\t * Resets the playback of the animation.\n\t *\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = -1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\t/**\n\t * Returns `true` if the animation is running.\n\t *\n\t * @return {boolean} Whether the animation is running or not.\n\t */\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t/**\n\t * Returns `true` when {@link AnimationAction#play} has been called.\n\t *\n\t * @return {boolean} Whether the animation is scheduled or not.\n\t */\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\t/**\n\t * Defines the time when the animation should start.\n\t *\n\t * @param {number} time - The start time in seconds.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Configures the loop settings for this action.\n\t *\n\t * @param {(LoopRepeat|LoopOnce|LoopPingPong)} mode - The loop mode.\n\t * @param {number} repetitions - The number of repetitions.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the effective weight of this action.\n\t *\n\t * An action has no effect and thus an effective weight of zero when the\n\t * action is disabled.\n\t *\n\t * @param {number} weight - The weight to set.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t/**\n\t * Returns the effective weight of this action.\n\t *\n\t * @return {number} The effective weight.\n\t */\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\t/**\n\t * Fades the animation in by increasing its weight gradually from `0` to `1`,\n\t * within the passed time interval.\n\t *\n\t * @param {number} duration - The duration of the fade.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\t/**\n\t * Fades the animation out by decreasing its weight gradually from `1` to `0`,\n\t * within the passed time interval.\n\t *\n\t * @param {number} duration - The duration of the fade.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\t/**\n\t * Causes this action to fade in and the given action to fade out,\n\t * within the passed time interval.\n\t *\n\t * @param {AnimationAction} fadeOutAction - The animation action to fade out.\n\t * @param {number} duration - The duration of the fade.\n\t * @param {boolean} [warp=false] - Whether warping should be used or not.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tcrossFadeFrom( fadeOutAction, duration, warp = false ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp === true ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Causes this action to fade out and the given action to fade in,\n\t * within the passed time interval.\n\t *\n\t * @param {AnimationAction} fadeInAction - The animation action to fade in.\n\t * @param {number} duration - The duration of the fade.\n\t * @param {boolean} [warp=false] - Whether warping should be used or not.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tcrossFadeTo( fadeInAction, duration, warp = false ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\t/**\n\t * Stops any fading which is applied to this action.\n\t *\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the effective time scale of this action.\n\t *\n\t * An action has no effect and thus an effective time scale of zero when the\n\t * action is paused.\n\t *\n\t * @param {number} timeScale - The time scale to set.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t/**\n\t * Returns the effective time scale of this action.\n\t *\n\t * @return {number} The effective time scale.\n\t */\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\t/**\n\t * Sets the duration for a single loop of this action.\n\t *\n\t * @param {number} duration - The duration to set.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t/**\n\t * Synchronizes this action with the passed other action.\n\t *\n\t * @param {AnimationAction} action - The action to sync with.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t/**\n\t * Decelerates this animation's speed to `0` within the passed time interval.\n\t *\n\t * @param {number} duration - The duration.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\t/**\n\t * Changes the playback speed, within the passed time interval, by modifying\n\t * {@link AnimationAction#timeScale} gradually from `startTimeScale` to\n\t * `endTimeScale`.\n\t *\n\t * @param {number} startTimeScale - The start time scale.\n\t * @param {number} endTimeScale - The end time scale.\n\t * @param {number} duration - The duration.\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Stops any scheduled warping which is applied to this action.\n\t *\n\t * @return {AnimationAction} A reference to this animation action.\n\t */\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the animation mixer of this animation action.\n\t *\n\t * @return {AnimationMixer} The animation mixer.\n\t */\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\t/**\n\t * Returns the animation clip of this animation action.\n\t *\n\t * @return {AnimationClip} The animation clip.\n\t */\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\t/**\n\t * Returns the root object of this animation action.\n\t *\n\t * @return {Object3D} The root object.\n\t */\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Internal\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\tdeltaTime = 0;\n\n\t\t\t} else {\n\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === -1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === -1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? -1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === -1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : -1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis._loopCount = loopCount;\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _controlInterpolantsResultBuffer = new Float32Array( 1 );\n\n/**\n * `AnimationMixer` is a player for animations on a particular object in\n * the scene. When multiple objects in the scene are animated independently,\n * one `AnimationMixer` may be used for each object.\n */\nclass AnimationMixer extends EventDispatcher {\n\n\t/**\n\t * Constructs a new animation mixer.\n\t *\n\t * @param {Object3D} root - The object whose animations shall be played by this mixer.\n\t */\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\n\t\t/**\n\t\t * The global mixer time (in seconds; starting with `0` on the mixer's creation).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.time = 0;\n\n\t\t/**\n\t\t * A scaling factor for the global time.\n\t\t *\n\t\t * Note: Setting this member to `0` and later back to `1` is a\n\t\t * possibility to pause/unpause all actions that are controlled by this\n\t\t * mixer.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.timeScale = 1.0;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions |  inactive actions  ]\n\t\t// [  active actions >| inactive actions ]\n\t\t//                 s        a\n\t\t//                  <-swap->\n\t\t//                 a        s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [  active actions  | inactive actions ]\n\t\t// [ active actions |< inactive actions  ]\n\t\t//        a        s\n\t\t//         <-swap->\n\t\t//        s        a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, _controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t/**\n\t * Returns an instance of {@link AnimationAction} for the passed clip.\n\t *\n\t * If an action fitting the clip and root parameters doesn't yet exist, it\n\t * will be created by this method. Calling this method several times with the\n\t * same clip and root parameters always returns the same action.\n\t *\n\t * @param {AnimationClip|string} clip - An animation clip or alternatively the name of the animation clip.\n\t * @param {Object3D} [optionalRoot] - An alternative root object.\n\t * @param {(NormalAnimationBlendMode|AdditiveAnimationBlendMode)} [blendMode] - The blend mode.\n\t * @return {?AnimationAction} The animation action.\n\t */\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t/**\n\t * Returns an existing animation action for the passed clip.\n\t *\n\t * @param {AnimationClip|string} clip - An animation clip or alternatively the name of the animation clip.\n\t * @param {Object3D} [optionalRoot] - An alternative root object.\n\t * @return {?AnimationAction} The animation action. Returns `null` if no action was found.\n\t */\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Deactivates all previously scheduled actions on this mixer.\n\t *\n\t * @return {AnimationMixer} A reference to this animation mixer.\n\t */\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Advances the global mixer time and updates the animation.\n\t *\n\t * This is usually done in the render loop by passing the delta\n\t * time from {@link Clock} or {@link Timer}.\n\t *\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @return {AnimationMixer} A reference to this animation mixer.\n\t */\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the global mixer to a specific time and updates the animation accordingly.\n\t *\n\t * This is useful when you need to jump to an exact time in an animation. The\n\t * input parameter will be scaled by {@link AnimationMixer#timeScale}\n\t *\n\t * @param {number} time - The time to set in seconds.\n\t * @return {AnimationMixer} A reference to this animation mixer.\n\t */\n\tsetTime( time ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( time ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t/**\n\t * Returns this mixer's root object.\n\t *\n\t * @return {Object3D} The mixer's root object.\n\t */\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t/**\n\t * Deallocates all memory resources for a clip. Before using this method make\n\t * sure to call {@link AnimationAction#stop} for all related actions.\n\t *\n\t * @param {AnimationClip} clip - The clip to uncache.\n\t */\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Deallocates all memory resources for a root object. Before using this\n\t * method make sure to call {@link AnimationAction#stop} for all related\n\t * actions or alternatively {@link AnimationMixer#stopAllAction} when the\n\t * mixer operates on a single root.\n\t *\n\t * @param {Object3D} root - The root object to uncache.\n\t */\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Deallocates all memory resources for an action. The action is identified by the\n\t * given clip and an optional root object. Before using this method make\n\t * sure to call {@link AnimationAction#stop} to deactivate the action.\n\t *\n\t * @param {AnimationClip|string} clip - An animation clip or alternatively the name of the animation clip.\n\t * @param {Object3D} [optionalRoot] - An alternative root object.\n\t */\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Represents a 3D render target.\n *\n * @augments RenderTarget\n */\nclass RenderTarget3D extends RenderTarget {\n\n\t/**\n\t * Constructs a new 3D render target.\n\t *\n\t * @param {number} [width=1] - The width of the render target.\n\t * @param {number} [height=1] - The height of the render target.\n\t * @param {number} [depth=1] - The height of the render target.\n\t * @param {RenderTarget~Options} [options] - The configuration object.\n\t */\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRenderTarget3D = true;\n\n\t\tthis.depth = depth;\n\n\t\t/**\n\t\t * Overwritten with a different texture type.\n\t\t *\n\t\t * @type {Data3DTexture}\n\t\t */\n\t\tthis.texture = new Data3DTexture( null, width, height, depth );\n\t\tthis._setTextureOptions( options );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\n/**\n * Represents a uniform which is a global shader variable. They are passed to shader programs.\n *\n * When declaring a uniform of a {@link ShaderMaterial}, it is declared by value or by object.\n * ```js\n * uniforms: {\n * \ttime: { value: 1.0 },\n * \tresolution: new Uniform( new Vector2() )\n * };\n * ```\n * Since this class can only be used in context of {@link ShaderMaterial}, it is only supported\n * in {@link WebGLRenderer}.\n */\nclass Uniform {\n\n\t/**\n\t * Constructs a new uniform.\n\t *\n\t * @param {any} value - The uniform value.\n\t */\n\tconstructor( value ) {\n\n\t\t/**\n\t\t * The uniform value.\n\t\t *\n\t\t * @type {any}\n\t\t */\n\t\tthis.value = value;\n\n\t}\n\n\t/**\n\t * Returns a new uniform with copied values from this instance.\n\t * If the value has a `clone()` method, the value is cloned as well.\n\t *\n\t * @return {Uniform} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nlet _id = 0;\n\n/**\n * A class for managing multiple uniforms in a single group. The renderer will process\n * such a definition as a single UBO.\n *\n * Since this class can only be used in context of {@link ShaderMaterial}, it is only supported\n * in {@link WebGLRenderer}.\n *\n * @augments EventDispatcher\n */\nclass UniformsGroup extends EventDispatcher {\n\n\t/**\n\t * Constructs a new uniforms group.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isUniformsGroup = true;\n\n\t\t/**\n\t\t * The ID of the 3D object.\n\t\t *\n\t\t * @name UniformsGroup#id\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\t/**\n\t\t * The name of the uniforms group.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The buffer usage.\n\t\t *\n\t\t * @type {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)}\n\t\t * @default StaticDrawUsage\n\t\t */\n\t\tthis.usage = StaticDrawUsage;\n\n\t\t/**\n\t\t * An array holding the uniforms.\n\t\t *\n\t\t * @type {Array<Uniform>}\n\t\t */\n\t\tthis.uniforms = [];\n\n\t}\n\n\t/**\n\t * Adds the given uniform to this uniforms group.\n\t *\n\t * @param {Uniform} uniform - The uniform to add.\n\t * @return {UniformsGroup} A reference to this uniforms group.\n\t */\n\tadd( uniform ) {\n\n\t\tthis.uniforms.push( uniform );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes the given uniform from this uniforms group.\n\t *\n\t * @param {Uniform} uniform - The uniform to remove.\n\t * @return {UniformsGroup} A reference to this uniforms group.\n\t */\n\tremove( uniform ) {\n\n\t\tconst index = this.uniforms.indexOf( uniform );\n\n\t\tif ( index !== -1 ) this.uniforms.splice( index, 1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the name of this uniforms group.\n\t *\n\t * @param {string} name - The name to set.\n\t * @return {UniformsGroup} A reference to this uniforms group.\n\t */\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the usage of this uniforms group.\n\t *\n\t * @param {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)} value - The usage to set.\n\t * @return {UniformsGroup} A reference to this uniforms group.\n\t */\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t *\n\t * @fires Texture#dispose\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\t/**\n\t * Copies the values of the given uniforms group to this instance.\n\t *\n\t * @param {UniformsGroup} source - The uniforms group to copy.\n\t * @return {UniformsGroup} A reference to this uniforms group.\n\t */\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.usage = source.usage;\n\n\t\tconst uniformsSource = source.uniforms;\n\n\t\tthis.uniforms.length = 0;\n\n\t\tfor ( let i = 0, l = uniformsSource.length; i < l; i ++ ) {\n\n\t\t\tconst uniforms = Array.isArray( uniformsSource[ i ] ) ? uniformsSource[ i ] : [ uniformsSource[ i ] ];\n\n\t\t\tfor ( let j = 0; j < uniforms.length; j ++ ) {\n\n\t\t\t\tthis.uniforms.push( uniforms[ j ].clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new uniforms group with copied values from this instance.\n\t *\n\t * @return {UniformsGroup} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * An instanced version of an interleaved buffer.\n *\n * @augments InterleavedBuffer\n */\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\t/**\n\t * Constructs a new instanced interleaved buffer.\n\t *\n\t * @param {TypedArray} array - A typed array with a shared buffer storing attribute data.\n\t * @param {number} stride - The number of typed-array elements per vertex.\n\t * @param {number} [meshPerAttribute=1] - Defines how often a value of this interleaved buffer should be repeated.\n\t */\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isInstancedInterleavedBuffer = true;\n\n\t\t/**\n\t\t * Defines how often a value of this buffer attribute should be repeated,\n\t\t * see {@link InstancedBufferAttribute#meshPerAttribute}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\n/**\n * An alternative version of a buffer attribute with more control over the VBO.\n *\n * The renderer does not construct a VBO for this kind of attribute. Instead, it uses\n * whatever VBO is passed in constructor and can later be altered via the `buffer` property.\n *\n * The most common use case for this class is when some kind of GPGPU calculation interferes\n * or even produces the VBOs in question.\n *\n * Notice that this class can only be used with {@link WebGLRenderer}.\n */\nclass GLBufferAttribute {\n\n\t/**\n\t * Constructs a new GL buffer attribute.\n\t *\n\t * @param {WebGLBuffer} buffer - The native WebGL buffer.\n\t * @param {number} type - The native data type (e.g. `gl.FLOAT`).\n\t * @param {number} itemSize - The item size.\n\t * @param {number} elementSize - The corresponding size (in bytes) for the given `type` parameter.\n\t * @param {number} count - The expected number of vertices in VBO.\n\t * @param {boolean} [normalized=false] - Whether the data are normalized or not.\n\t */\n\tconstructor( buffer, type, itemSize, elementSize, count, normalized = false ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isGLBufferAttribute = true;\n\n\t\t/**\n\t\t * The name of the buffer attribute.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The native WebGL buffer.\n\t\t *\n\t\t * @type {WebGLBuffer}\n\t\t */\n\t\tthis.buffer = buffer;\n\n\t\t/**\n\t\t * The native data type.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.type = type;\n\n\t\t/**\n\t\t * The item size, see {@link BufferAttribute#itemSize}.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.itemSize = itemSize;\n\n\t\t/**\n\t\t * The corresponding size (in bytes) for the given `type` parameter.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.elementSize = elementSize;\n\n\t\t/**\n\t\t * The expected number of vertices in VBO.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.count = count;\n\n\t\t/**\n\t\t * Applies to integer data only. Indicates how the underlying data in the buffer maps to\n\t\t * the values in the GLSL code. For instance, if `buffer` contains data of `gl.UNSIGNED_SHORT`,\n\t\t * and `normalized` is `true`, the values `0 - +65535` in the buffer data will be mapped to\n\t\t * `0.0f - +1.0f` in the GLSL attribute. If `normalized` is `false`, the values will be converted\n\t\t * to floats unmodified, i.e. `65535` becomes `65535.0f`.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.normalized = normalized;\n\n\t\t/**\n\t\t * A version number, incremented every time the `needsUpdate` is set to `true`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.version = 0;\n\n\t}\n\n\t/**\n\t * Flag to indicate that this attribute has changed and should be re-sent to\n\t * the GPU. Set this to `true` when you modify the value of the array.\n\t *\n\t * @type {number}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\t/**\n\t * Sets the given native WebGL buffer.\n\t *\n\t * @param {WebGLBuffer} buffer - The buffer to set.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given native data type and element size.\n\t *\n\t * @param {number} type - The native data type (e.g. `gl.FLOAT`).\n\t * @param {number} elementSize - The corresponding size (in bytes) for the given `type` parameter.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the item size.\n\t *\n\t * @param {number} itemSize - The item size.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the count (the expected number of vertices in VBO).\n\t *\n\t * @param {number} count - The count.\n\t * @return {BufferAttribute} A reference to this instance.\n\t */\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\n/**\n * This class is designed to assist with raycasting. Raycasting is used for\n * mouse picking (working out what objects in the 3d space the mouse is over)\n * amongst other things.\n */\nclass Raycaster {\n\n\t/**\n\t * Constructs a new raycaster.\n\t *\n\t * @param {Vector3} origin - The origin vector where the ray casts from.\n\t * @param {Vector3} direction - The (normalized) direction vector that gives direction to the ray.\n\t * @param {number} [near=0] - All results returned are further away than near. Near can't be negative.\n\t * @param {number} [far=Infinity] - All results returned are closer than far. Far can't be lower than near.\n\t */\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\t/**\n\t\t * The ray used for raycasting.\n\t\t *\n\t\t * @type {Ray}\n\t\t */\n\t\tthis.ray = new Ray( origin, direction );\n\n\t\t/**\n\t\t * All results returned are further away than near. Near can't be negative.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.near = near;\n\n\t\t/**\n\t\t * All results returned are closer than far. Far can't be lower than near.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.far = far;\n\n\t\t/**\n\t\t * The camera to use when raycasting against view-dependent objects such as\n\t\t * billboarded objects like sprites. This field can be set manually or\n\t\t * is set when calling `setFromCamera()`.\n\t\t *\n\t\t * @type {?Camera}\n\t\t * @default null\n\t\t */\n\t\tthis.camera = null;\n\n\t\t/**\n\t\t * Allows to selectively ignore 3D objects when performing intersection tests.\n\t\t * The following code example ensures that only 3D objects on layer `1` will be\n\t\t * honored by raycaster.\n\t\t * ```js\n\t\t * raycaster.layers.set( 1 );\n\t\t * object.layers.enable( 1 );\n\t\t * ```\n\t\t *\n\t\t * @type {Layers}\n\t\t */\n\t\tthis.layers = new Layers();\n\n\n\t\t/**\n\t\t * A parameter object that configures the raycasting. It has the structure:\n\t\t *\n\t\t * ```\n\t\t * {\n\t\t * \tMesh: {},\n\t\t * \tLine: { threshold: 1 },\n\t\t * \tLOD: {},\n\t\t * \tPoints: { threshold: 1 },\n\t\t * \tSprite: {}\n\t\t * }\n\t\t * ```\n\t\t * Where `threshold` is the precision of the raycaster when intersecting objects, in world units.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\t/**\n\t * Updates the ray with a new origin and direction by copying the values from the arguments.\n\t *\n\t * @param {Vector3} origin - The origin vector where the ray casts from.\n\t * @param {Vector3} direction - The (normalized) direction vector that gives direction to the ray.\n\t */\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\t/**\n\t * Uses the given coordinates and camera to compute a new origin and direction for the internal ray.\n\t *\n\t * @param {Vector2} coords - 2D coordinates of the mouse, in normalized device coordinates (NDC).\n\t * X and Y components should be between `-1` and `1`.\n\t * @param {Camera} camera - The camera from which the ray should originate.\n\t */\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, -1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\terror( 'Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uses the given WebXR controller to compute a new origin and direction for the internal ray.\n\t *\n\t * @param {WebXRController} controller - The controller to copy the position and direction from.\n\t * @return {Raycaster} A reference to this raycaster.\n\t */\n\tsetFromXRController( controller ) {\n\n\t\t_matrix.identity().extractRotation( controller.matrixWorld );\n\n\t\tthis.ray.origin.setFromMatrixPosition( controller.matrixWorld );\n\t\tthis.ray.direction.set( 0, 0, -1 ).applyMatrix4( _matrix );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The intersection point of a raycaster intersection test.\n\t * @typedef {Object} Raycaster~Intersection\n\t * @property {number} distance - The distance from the ray's origin to the intersection point.\n\t * @property {number} distanceToRay -  Some 3D objects e.g. {@link Points} provide the distance of the\n\t * intersection to the nearest point on the ray. For other objects it will be `undefined`.\n\t * @property {Vector3} point - The intersection point, in world coordinates.\n\t * @property {Object} face - The face that has been intersected.\n\t * @property {number} faceIndex - The face index.\n\t * @property {Object3D} object - The 3D object that has been intersected.\n\t * @property {Vector2} uv - U,V coordinates at point of intersection.\n\t * @property {Vector2} uv1 - Second set of U,V coordinates at point of intersection.\n\t * @property {Vector3} normal - Interpolated normal vector at point of intersection.\n\t * @property {number} instanceId - The index number of the instance where the ray\n\t * intersects the {@link InstancedMesh}.\n\t */\n\n\t/**\n\t * Checks all intersection between the ray and the object with or without the\n\t * descendants. Intersections are returned sorted by distance, closest first.\n\t *\n\t * `Raycaster` delegates to the `raycast()` method of the passed 3D object, when\n\t * evaluating whether the ray intersects the object or not. This allows meshes to respond\n\t * differently to ray casting than lines or points.\n\t *\n\t * Note that for meshes, faces must be pointed towards the origin of the ray in order\n\t * to be detected; intersections of the ray passing through the back of a face will not\n\t * be detected. To raycast against both faces of an object, you'll want to set  {@link Material#side}\n\t * to `THREE.DoubleSide`.\n\t *\n\t * @param {Object3D} object - The 3D object to check for intersection with the ray.\n\t * @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.\n\t * Otherwise it only checks intersection with the object.\n\t * @param {Array<Raycaster~Intersection>} [intersects=[]] The target array that holds the result of the method.\n\t * @return {Array<Raycaster~Intersection>} An array holding the intersection points.\n\t */\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersect( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\t/**\n\t * Checks all intersection between the ray and the objects with or without\n\t * the descendants. Intersections are returned sorted by distance, closest first.\n\t *\n\t * @param {Array<Object3D>} objects - The 3D objects to check for intersection with the ray.\n\t * @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.\n\t * Otherwise it only checks intersection with the object.\n\t * @param {Array<Raycaster~Intersection>} [intersects=[]] The target array that holds the result of the method.\n\t * @return {Array<Raycaster~Intersection>} An array holding the intersection points.\n\t */\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersect( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersect( object, raycaster, intersects, recursive ) {\n\n\tlet propagate = true;\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tconst result = object.raycast( raycaster, intersects );\n\n\t\tif ( result === false ) propagate = false;\n\n\t}\n\n\tif ( propagate === true && recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersect( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Class for keeping track of time.\n *\n * @deprecated since r183.\n */\nclass Clock {\n\n\t/**\n\t * Constructs a new clock.\n\t *\n\t * @deprecated since 183.\n\t * @param {boolean} [autoStart=true] - Whether to automatically start the clock when\n\t * `getDelta()` is called for the first time.\n\t */\n\tconstructor( autoStart = true ) {\n\n\t\t/**\n\t\t * If set to `true`, the clock starts automatically when `getDelta()` is called\n\t\t * for the first time.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoStart = autoStart;\n\n\t\t/**\n\t\t * Holds the time at which the clock's `start()` method was last called.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.startTime = 0;\n\n\t\t/**\n\t\t * Holds the time at which the clock's `start()`, `getElapsedTime()` or\n\t\t * `getDelta()` methods were last called.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.oldTime = 0;\n\n\t\t/**\n\t\t * Keeps track of the total time that the clock has been running.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.elapsedTime = 0;\n\n\t\t/**\n\t\t * Whether the clock is running or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.running = false;\n\n\t\twarn( 'Clock: This module has been deprecated. Please use THREE.Timer instead.' ); // @deprecated, r183\n\n\t}\n\n\t/**\n\t * Starts the clock. When `autoStart` is set to `true`, the method is automatically\n\t * called by the class.\n\t */\n\tstart() {\n\n\t\tthis.startTime = performance.now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\t/**\n\t * Stops the clock.\n\t */\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\t/**\n\t * Returns the elapsed time in seconds.\n\t *\n\t * @return {number} The elapsed time.\n\t */\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\t/**\n\t * Returns the delta time in seconds.\n\t *\n\t * @return {number} The delta time.\n\t */\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = performance.now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\n/**\n * This class can be used to represent points in 3D space as\n * [Spherical coordinates](https://en.wikipedia.org/wiki/Spherical_coordinate_system).\n */\nclass Spherical {\n\n\t/**\n\t * Constructs a new spherical.\n\t *\n\t * @param {number} [radius=1] - The radius, or the Euclidean distance (straight-line distance) from the point to the origin.\n\t * @param {number} [phi=0] - The polar angle in radians from the y (up) axis.\n\t * @param {number} [theta=0] - The equator/azimuthal angle in radians around the y (up) axis.\n\t */\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\t/**\n\t\t * The radius, or the Euclidean distance (straight-line distance) from the point to the origin.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.radius = radius;\n\n\t\t/**\n\t\t * The polar angle in radians from the y (up) axis.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.phi = phi;\n\n\t\t/**\n\t\t * The equator/azimuthal angle in radians around the y (up) axis.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.theta = theta;\n\n\t}\n\n\t/**\n\t * Sets the spherical components by copying the given values.\n\t *\n\t * @param {number} radius - The radius.\n\t * @param {number} phi - The polar angle.\n\t * @param {number} theta - The azimuthal angle.\n\t * @return {Spherical} A reference to this spherical.\n\t */\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the values of the given spherical to this instance.\n\t *\n\t * @param {Spherical} other - The spherical to copy.\n\t * @return {Spherical} A reference to this spherical.\n\t */\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Restricts the polar angle [page:.phi phi] to be between `0.000001` and pi -\n\t * `0.000001`.\n\t *\n\t * @return {Spherical} A reference to this spherical.\n\t */\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = clamp( this.phi, EPS, Math.PI - EPS );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the spherical components from the given vector which is assumed to hold\n\t * Cartesian coordinates.\n\t *\n\t * @param {Vector3} v - The vector to set.\n\t * @return {Spherical} A reference to this spherical.\n\t */\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\t/**\n\t * Sets the spherical components from the given Cartesian coordinates.\n\t *\n\t * @param {number} x - The x value.\n\t * @param {number} y - The y value.\n\t * @param {number} z - The z value.\n\t * @return {Spherical} A reference to this spherical.\n\t */\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, -1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new spherical with copied values from this instance.\n\t *\n\t * @return {Spherical} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * This class can be used to represent points in 3D space as\n * [Cylindrical coordinates](https://en.wikipedia.org/wiki/Cylindrical_coordinate_system).\n */\nclass Cylindrical {\n\n\t/**\n\t * Constructs a new cylindrical.\n\t *\n\t * @param {number} [radius=1] - The distance from the origin to a point in the x-z plane.\n\t * @param {number} [theta=0] - A counterclockwise angle in the x-z plane measured in radians from the positive z-axis.\n\t * @param {number} [y=0] - The height above the x-z plane.\n\t */\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\t/**\n\t\t * The distance from the origin to a point in the x-z plane.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.radius = radius;\n\n\t\t/**\n\t\t * A counterclockwise angle in the x-z plane measured in radians from the positive z-axis.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.theta = theta;\n\n\t\t/**\n\t\t * The height above the x-z plane.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.y = y;\n\n\t}\n\n\t/**\n\t * Sets the cylindrical components by copying the given values.\n\t *\n\t * @param {number} radius - The radius.\n\t * @param {number} theta - The theta angle.\n\t * @param {number} y - The height value.\n\t * @return {Cylindrical} A reference to this cylindrical.\n\t */\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the values of the given cylindrical to this instance.\n\t *\n\t * @param {Cylindrical} other - The cylindrical to copy.\n\t * @return {Cylindrical} A reference to this cylindrical.\n\t */\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the cylindrical components from the given vector which is assumed to hold\n\t * Cartesian coordinates.\n\t *\n\t * @param {Vector3} v - The vector to set.\n\t * @return {Cylindrical} A reference to this cylindrical.\n\t */\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\t/**\n\t * Sets the cylindrical components from the given Cartesian coordinates.\n\t *\n\t * @param {number} x - The x value.\n\t * @param {number} y - The x value.\n\t * @param {number} z - The x value.\n\t * @return {Cylindrical} A reference to this cylindrical.\n\t */\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new cylindrical with copied values from this instance.\n\t *\n\t * @return {Cylindrical} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Represents a 2x2 matrix.\n *\n * A Note on Row-Major and Column-Major Ordering:\n *\n * The constructor and {@link Matrix2#set} method take arguments in\n * [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)\n * order, while internally they are stored in the {@link Matrix2#elements} array in column-major order.\n * This means that calling:\n * ```js\n * const m = new THREE.Matrix2();\n * m.set( 11, 12,\n *        21, 22 );\n * ```\n * will result in the elements array containing:\n * ```js\n * m.elements = [ 11, 21,\n *                12, 22 ];\n * ```\n * and internally all calculations are performed using column-major ordering.\n * However, as the actual ordering makes no difference mathematically and\n * most people are used to thinking about matrices in row-major order, the\n * three.js documentation shows matrices in row-major order. Just bear in\n * mind that if you are reading the source code, you'll have to take the\n * transpose of any matrices outlined here to make sense of the calculations.\n */\nclass Matrix2 {\n\n\tstatic {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tMatrix2.prototype.isMatrix2 = true;\n\n\t}\n\n\t/**\n\t * Constructs a new 2x2 matrix. The arguments are supposed to be\n\t * in row-major order. If no arguments are provided, the constructor\n\t * initializes the matrix as an identity matrix.\n\t *\n\t * @param {number} [n11] - 1-1 matrix element.\n\t * @param {number} [n12] - 1-2 matrix element.\n\t * @param {number} [n21] - 2-1 matrix element.\n\t * @param {number} [n22] - 2-2 matrix element.\n\t */\n\tconstructor( n11, n12, n21, n22 ) {\n\n\t\t/**\n\t\t * A column-major list of matrix values.\n\t\t *\n\t\t * @type {Array<number>}\n\t\t */\n\t\tthis.elements = [\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n21, n22 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets this matrix to the 2x2 identity matrix.\n\t *\n\t * @return {Matrix2} A reference to this matrix.\n\t */\n\tidentity() {\n\n\t\tthis.set(\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the elements of the matrix from the given array.\n\t *\n\t * @param {Array<number>} array - The matrix elements in column-major order.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Matrix2} A reference to this matrix.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the elements of the matrix.The arguments are supposed to be\n\t * in row-major order.\n\t *\n\t * @param {number} n11 - 1-1 matrix element.\n\t * @param {number} n12 - 1-2 matrix element.\n\t * @param {number} n21 - 2-1 matrix element.\n\t * @param {number} n22 - 2-2 matrix element.\n\t * @return {Matrix2} A reference to this matrix.\n\t */\n\tset( n11, n12, n21, n22 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 2 ] = n12;\n\t\tte[ 1 ] = n21; te[ 3 ] = n22;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\n/**\n * Represents an axis-aligned bounding box (AABB) in 2D space.\n */\nclass Box2 {\n\n\t/**\n\t * Constructs a new bounding box.\n\t *\n\t * @param {Vector2} [min=(Infinity,Infinity)] - A vector representing the lower boundary of the box.\n\t * @param {Vector2} [max=(-Infinity,-Infinity)] - A vector representing the upper boundary of the box.\n\t */\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBox2 = true;\n\n\t\t/**\n\t\t * The lower boundary of the box.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.min = min;\n\n\t\t/**\n\t\t * The upper boundary of the box.\n\t\t *\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis.max = max;\n\n\t}\n\n\t/**\n\t * Sets the lower and upper boundaries of this box.\n\t * Please note that this method only copies the values from the given objects.\n\t *\n\t * @param {Vector2} min - The lower boundary of the box.\n\t * @param {Vector2} max - The upper boundary of the box.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the upper and lower bounds of this box so it encloses the position data\n\t * in the given array.\n\t *\n\t * @param {Array<Vector2>} points - An array holding 2D position data as instances of {@link Vector2}.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Centers this box on the given center vector and sets this box's width, height and\n\t * depth to the given size values.\n\t *\n\t * @param {Vector2} center - The center of the box.\n\t * @param {Vector2} size - The x and y dimensions of the box.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new box with copied values from this instance.\n\t *\n\t * @return {Box2} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\t/**\n\t * Copies the values of the given box to this instance.\n\t *\n\t * @param {Box2} box - The box to copy.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Makes this box empty which means in encloses a zero space in 2D.\n\t *\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns true if this box includes zero points within its bounds.\n\t * Note that a box with equal lower and upper bounds still includes one\n\t * point, the one both bounds share.\n\t *\n\t * @return {boolean} Whether this box is empty or not.\n\t */\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\t/**\n\t * Returns the center point of this box.\n\t *\n\t * @param {Vector2} target - The target vector that is used to store the method's result.\n\t * @return {Vector2} The center point.\n\t */\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\t/**\n\t * Returns the dimensions of this box.\n\t *\n\t * @param {Vector2} target - The target vector that is used to store the method's result.\n\t * @return {Vector2} The size.\n\t */\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\t/**\n\t * Expands the boundaries of this box to include the given point.\n\t *\n\t * @param {Vector2} point - The point that should be included by the bounding box.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Expands this box equilaterally by the given vector. The width of this\n\t * box will be expanded by the x component of the vector in both\n\t * directions. The height of this box will be expanded by the y component of\n\t * the vector in both directions.\n\t *\n\t * @param {Vector2} vector - The vector that should expand the bounding box.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Expands each dimension of the box by the given scalar. If negative, the\n\t * dimensions of the box will be contracted.\n\t *\n\t * @param {number} scalar - The scalar value that should expand the bounding box.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given point lies within or on the boundaries of this box.\n\t *\n\t * @param {Vector2} point - The point to test.\n\t * @return {boolean} Whether the bounding box contains the given point or not.\n\t */\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y;\n\n\t}\n\n\t/**\n\t * Returns `true` if this bounding box includes the entirety of the given bounding box.\n\t * If this box and the given one are identical, this function also returns `true`.\n\t *\n\t * @param {Box2} box - The bounding box to test.\n\t * @return {boolean} Whether the bounding box contains the given bounding box or not.\n\t */\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\t/**\n\t * Returns a point as a proportion of this box's width and height.\n\t *\n\t * @param {Vector2} point - A point in 2D space.\n\t * @param {Vector2} target - The target vector that is used to store the method's result.\n\t * @return {Vector2} A point as a proportion of this box's width and height.\n\t */\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\t/**\n\t * Returns `true` if the given bounding box intersects with this bounding box.\n\t *\n\t * @param {Box2} box - The bounding box to test.\n\t * @return {boolean} Whether the given bounding box intersects with this bounding box.\n\t */\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y;\n\n\t}\n\n\t/**\n\t * Clamps the given point within the bounds of this box.\n\t *\n\t * @param {Vector2} point - The point to clamp.\n\t * @param {Vector2} target - The target vector that is used to store the method's result.\n\t * @return {Vector2} The clamped point.\n\t */\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\t/**\n\t * Returns the euclidean distance from any edge of this box to the specified point. If\n\t * the given point lies inside of this box, the distance will be `0`.\n\t *\n\t * @param {Vector2} point - The point to compute the distance to.\n\t * @return {number} The euclidean distance.\n\t */\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$4 ).distanceTo( point );\n\n\t}\n\n\t/**\n\t * Computes the intersection of this bounding box and the given one, setting the upper\n\t * bound of this box to the lesser of the two boxes' upper bounds and the\n\t * lower bound of this box to the greater of the two boxes' lower bounds. If\n\t * there's no overlap, makes this box empty.\n\t *\n\t * @param {Box2} box - The bounding box to intersect with.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes the union of this box and another and the given one, setting the upper\n\t * bound of this box to the greater of the two boxes' upper bounds and the\n\t * lower bound of this box to the lesser of the two boxes' lower bounds.\n\t *\n\t * @param {Box2} box - The bounding box that will be unioned with this instance.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given offset to both the upper and lower bounds of this bounding box,\n\t * effectively moving it in 2D space.\n\t *\n\t * @param {Vector2} offset - The offset that should be used to translate the bounding box.\n\t * @return {Box2} A reference to this bounding box.\n\t */\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this bounding box is equal with the given one.\n\t *\n\t * @param {Box2} box - The box to test for equality.\n\t * @return {boolean} Whether this bounding box is equal with the given one.\n\t */\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nconst _d1 = /*@__PURE__*/ new Vector3();\nconst _d2 = /*@__PURE__*/ new Vector3();\nconst _r = /*@__PURE__*/ new Vector3();\nconst _c1 = /*@__PURE__*/ new Vector3();\nconst _c2 = /*@__PURE__*/ new Vector3();\n\n/**\n * An analytical line segment in 3D space represented by a start and end point.\n */\nclass Line3 {\n\n\t/**\n\t * Constructs a new line segment.\n\t *\n\t * @param {Vector3} [start=(0,0,0)] - Start of the line segment.\n\t * @param {Vector3} [end=(0,0,0)] - End of the line segment.\n\t */\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\t/**\n\t\t * Start of the line segment.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.start = start;\n\n\t\t/**\n\t\t * End of the line segment.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.end = end;\n\n\t}\n\n\t/**\n\t * Sets the start and end values by copying the given vectors.\n\t *\n\t * @param {Vector3} start - The start point.\n\t * @param {Vector3} end - The end point.\n\t * @return {Line3} A reference to this line segment.\n\t */\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Copies the values of the given line segment to this instance.\n\t *\n\t * @param {Line3} line - The line segment to copy.\n\t * @return {Line3} A reference to this line segment.\n\t */\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the center of the line segment.\n\t *\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The center point.\n\t */\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\t/**\n\t * Returns the delta vector of the line segment's start and end point.\n\t *\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The delta vector.\n\t */\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\t/**\n\t * Returns the squared Euclidean distance between the line' start and end point.\n\t *\n\t * @return {number} The squared Euclidean distance.\n\t */\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\t/**\n\t * Returns the Euclidean distance between the line' start and end point.\n\t *\n\t * @return {number} The Euclidean distance.\n\t */\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\t/**\n\t * Returns a vector at a certain position along the line segment.\n\t *\n\t * @param {number} t - A value between `[0,1]` to represent a position along the line segment.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The delta vector.\n\t */\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\t/**\n\t * Returns a point parameter based on the closest point as projected on the line segment.\n\t *\n\t * @param {Vector3} point - The point for which to return a point parameter.\n\t * @param {boolean} clampToLine - Whether to clamp the result to the range `[0,1]` or not.\n\t * @return {number} The point parameter.\n\t */\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\n\t\tif ( startEnd2 === 0 ) return 0;\n\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\t/**\n\t * Returns the closest point on the line for a given point.\n\t *\n\t * @param {Vector3} point - The point to compute the closest point on the line for.\n\t * @param {boolean} clampToLine - Whether to clamp the result to the range `[0,1]` or not.\n\t * @param {Vector3} target - The target vector that is used to store the method's result.\n\t * @return {Vector3} The closest point on the line.\n\t */\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\t/**\n\t * Returns the closest squared distance between this line segment and the given one.\n\t *\n\t * @param {Line3} line - The line segment to compute the closest squared distance to.\n\t * @param {Vector3} [c1] - The closest point on this line segment.\n\t * @param {Vector3} [c2] - The closest point on the given line segment.\n\t * @return {number} The squared distance between this line segment and the given one.\n\t */\n\tdistanceSqToLine3( line, c1 = _c1, c2 = _c2 ) {\n\n\t\t// from Real-Time Collision Detection by Christer Ericson, chapter 5.1.9\n\n\t\t// Computes closest points C1 and C2 of S1(s)=P1+s*(Q1-P1) and\n\t\t// S2(t)=P2+t*(Q2-P2), returning s and t. Function result is squared\n\t\t// distance between between S1(s) and S2(t)\n\n\t\tconst EPSILON = 1e-8 * 1e-8; // must be squared since we compare squared length\n\t\tlet s, t;\n\n\t\tconst p1 = this.start;\n\t\tconst p2 = line.start;\n\t\tconst q1 = this.end;\n\t\tconst q2 = line.end;\n\n\t\t_d1.subVectors( q1, p1 ); // Direction vector of segment S1\n\t\t_d2.subVectors( q2, p2 ); // Direction vector of segment S2\n\t\t_r.subVectors( p1, p2 );\n\n\t\tconst a = _d1.dot( _d1 ); // Squared length of segment S1, always nonnegative\n\t\tconst e = _d2.dot( _d2 ); // Squared length of segment S2, always nonnegative\n\t\tconst f = _d2.dot( _r );\n\n\t\t// Check if either or both segments degenerate into points\n\n\t\tif ( a <= EPSILON && e <= EPSILON ) {\n\n\t\t\t// Both segments degenerate into points\n\n\t\t\tc1.copy( p1 );\n\t\t\tc2.copy( p2 );\n\n\t\t\tc1.sub( c2 );\n\n\t\t\treturn c1.dot( c1 );\n\n\t\t}\n\n\t\tif ( a <= EPSILON ) {\n\n\t\t\t// First segment degenerates into a point\n\n\t\t\ts = 0;\n\t\t\tt = f / e; // s = 0 => t = (b*s + f) / e = f / e\n\t\t\tt = clamp( t, 0, 1 );\n\n\n\t\t} else {\n\n\t\t\tconst c = _d1.dot( _r );\n\n\t\t\tif ( e <= EPSILON ) {\n\n\t\t\t\t// Second segment degenerates into a point\n\n\t\t\t\tt = 0;\n\t\t\t\ts = clamp( - c / a, 0, 1 ); // t = 0 => s = (b*t - c) / a = -c / a\n\n\t\t\t} else {\n\n\t\t\t\t// The general nondegenerate case starts here\n\n\t\t\t\tconst b = _d1.dot( _d2 );\n\t\t\t\tconst denom = a * e - b * b; // Always nonnegative\n\n\t\t\t\t// If segments not parallel, compute closest point on L1 to L2 and\n\t\t\t\t// clamp to segment S1. Else pick arbitrary s (here 0)\n\n\t\t\t\tif ( denom !== 0 ) {\n\n\t\t\t\t\ts = clamp( ( b * f - c * e ) / denom, 0, 1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ts = 0;\n\n\t\t\t\t}\n\n\t\t\t\t// Compute point on L2 closest to S1(s) using\n\t\t\t\t// t = Dot((P1 + D1*s) - P2,D2) / Dot(D2,D2) = (b*s + f) / e\n\n\t\t\t\tt = ( b * s + f ) / e;\n\n\t\t\t\t// If t in [0,1] done. Else clamp t, recompute s for the new value\n\t\t\t\t// of t using s = Dot((P2 + D2*t) - P1,D1) / Dot(D1,D1)= (t*b - c) / a\n\t\t\t\t// and clamp s to [0, 1]\n\n\t\t\t\tif ( t < 0 ) {\n\n\t\t\t\t\tt = 0.;\n\t\t\t\t\ts = clamp( - c / a, 0, 1 );\n\n\t\t\t\t} else if ( t > 1 ) {\n\n\t\t\t\t\tt = 1;\n\t\t\t\t\ts = clamp( ( b - c ) / a, 0, 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tc1.copy( p1 ).addScaledVector( _d1, s );\n\t\tc2.copy( p2 ).addScaledVector( _d2, t );\n\n\t\treturn c1.distanceToSquared( c2 );\n\n\t}\n\n\t/**\n\t * Applies a 4x4 transformation matrix to this line segment.\n\t *\n\t * @param {Matrix4} matrix - The transformation matrix.\n\t * @return {Line3} A reference to this line segment.\n\t */\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this line segment is equal with the given one.\n\t *\n\t * @param {Line3} line - The line segment to test for equality.\n\t * @return {boolean} Whether this line segment is equal with the given one.\n\t */\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\t/**\n\t * Returns a new line segment with copied values from this instance.\n\t *\n\t * @return {Line3} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\n/**\n * This displays a cone shaped helper object for a {@link SpotLight}.\n *\n * When the spot light or its target are transformed or light properties are\n * changed, it's necessary to call the `update()` method of the respective helper.\n *\n * ```js\n * const spotLight = new THREE.SpotLight( 0xffffff );\n * spotLight.position.set( 10, 10, 10 );\n * scene.add( spotLight );\n *\n * const spotLightHelper = new THREE.SpotLightHelper( spotLight );\n * scene.add( spotLightHelper );\n * ```\n *\n * @augments Object3D\n */\nclass SpotLightHelper extends Object3D {\n\n\t/**\n\t * Constructs a new spot light helper.\n\t *\n\t * @param {HemisphereLight} light - The light to be visualized.\n\t * @param {number|Color|string} [color] - The helper's color. If not set, the helper will take\n\t * the color of the light.\n\t */\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The light being visualized.\n\t\t *\n\t\t * @type {SpotLight}\n\t\t */\n\t\tthis.light = light;\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\t/**\n\t\t * The color parameter passed in the constructor.\n\t\t * If not set, the helper will take the color of the light.\n\t\t *\n\t\t * @type {number|Color|string}\n\t\t */\n\t\tthis.color = color;\n\n\t\tthis.type = 'SpotLightHelper';\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t-1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, -1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\t/**\n\t * Updates the helper to match the position and direction of the\n\t * light being visualized.\n\t */\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t// update the local matrix based on the parent and light target transforms\n\t\tif ( this.parent ) {\n\n\t\t\tthis.parent.updateWorldMatrix( true );\n\n\t\t\tthis.matrix\n\t\t\t\t.copy( this.parent.matrixWorld )\n\t\t\t\t.invert()\n\t\t\t\t.multiply( this.light.matrixWorld );\n\n\t\t} else {\n\n\t\t\tthis.matrix.copy( this.light.matrixWorld );\n\n\t\t}\n\n\t\tthis.matrixWorld.copy( this.light.matrixWorld );\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n/**\n * A helper object to assist with visualizing a {@link Skeleton}.\n *\n * ```js\n * const helper = new THREE.SkeletonHelper( skinnedMesh );\n * scene.add( helper );\n * ```\n *\n * @augments LineSegments\n */\nclass SkeletonHelper extends LineSegments {\n\n\t/**\n\t * Constructs a new skeleton helper.\n\t *\n\t * @param {Object3D} object -  Usually an instance of {@link SkinnedMesh}. However, any 3D object\n\t * can be used if it represents a hierarchy of bones (see {@link Bone}).\n\t */\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( 0, 0, 0 );\n\t\t\t\tcolors.push( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.type = 'SkeletonHelper';\n\n\t\t/**\n\t\t * The object being visualized.\n\t\t *\n\t\t * @type {Object3D}\n\t\t */\n\t\tthis.root = object;\n\n\t\t/**\n\t\t * The list of bones that the helper visualizes.\n\t\t *\n\t\t * @type {Array<Bone>}\n\t\t */\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\t// colors\n\n\t\tconst color1 = new Color( 0x0000ff );\n\t\tconst color2 = new Color( 0x00ff00 );\n\n\t\tthis.setColors( color1, color2 );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\t/**\n\t * Defines the colors of the helper.\n\t *\n\t * @param {Color} color1 - The first line color for each bone.\n\t * @param {Color} color2 - The second line color for each bone.\n\t * @return {SkeletonHelper} A reference to this helper.\n\t */\n\tsetColors( color1, color2 ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\tfor ( let i = 0; i < colorAttribute.count; i += 2 ) {\n\n\t\t\tcolorAttribute.setXYZ( i, color1.r, color1.g, color1.b );\n\t\t\tcolorAttribute.setXYZ( i + 1, color2.r, color2.g, color2.b );\n\n\t\t}\n\n\t\tcolorAttribute.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object.isBone === true ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push( ...getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\n/**\n * This displays a helper object consisting of a spherical mesh for\n * visualizing an instance of {@link PointLight}.\n *\n * ```js\n * const pointLight = new THREE.PointLight( 0xff0000, 1, 100 );\n * pointLight.position.set( 10, 10, 10 );\n * scene.add( pointLight );\n *\n * const sphereSize = 1;\n * const pointLightHelper = new THREE.PointLightHelper( pointLight, sphereSize );\n * scene.add( pointLightHelper );\n * ```\n *\n * @augments Mesh\n */\nclass PointLightHelper extends Mesh {\n\n\t/**\n\t * Constructs a new point light helper.\n\t *\n\t * @param {PointLight} light - The light to be visualized.\n\t * @param {number} [sphereSize=1] - The size of the sphere helper.\n\t * @param {number|Color|string} [color] - The helper's color. If not set, the helper will take\n\t * the color of the light.\n\t */\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\t/**\n\t\t * The light being visualized.\n\t\t *\n\t\t * @type {PointLight}\n\t\t */\n\t\tthis.light = light;\n\n\t\t/**\n\t\t * The color parameter passed in the constructor.\n\t\t * If not set, the helper will take the color of the light.\n\t\t *\n\t\t * @type {number|Color|string}\n\t\t */\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\t/**\n\t * Updates the helper to match the position of the\n\t * light being visualized.\n\t */\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\n/**\n * Creates a visual aid consisting of a spherical mesh for a\n * given {@link HemisphereLight}.\n *\n * When the hemisphere light is transformed or its light properties are changed,\n * it's necessary to call the `update()` method of the respective helper.\n *\n * ```js\n * const light = new THREE.HemisphereLight( 0xffffbb, 0x080820, 1 );\n * const helper = new THREE.HemisphereLightHelper( light, 5 );\n * scene.add( helper );\n * ```\n *\n * @augments Object3D\n */\nclass HemisphereLightHelper extends Object3D {\n\n\t/**\n\t * Constructs a new hemisphere light helper.\n\t *\n\t * @param {HemisphereLight} light - The light to be visualized.\n\t * @param {number} [size=1] - The size of the mesh used to visualize the light.\n\t * @param {number|Color|string} [color] - The helper's color. If not set, the helper will take\n\t * the color of the light.\n\t */\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The light being visualized.\n\t\t *\n\t\t * @type {HemisphereLight}\n\t\t */\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\t/**\n\t\t * The color parameter passed in the constructor.\n\t\t * If not set, the helper will take the color of the light.\n\t\t *\n\t\t * @type {number|Color|string}\n\t\t */\n\t\tthis.color = color;\n\n\t\tthis.type = 'HemisphereLightHelper';\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\t/**\n\t * Updates the helper to match the position and direction of the\n\t * light being visualized.\n\t */\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\n/**\n * The helper is an object to define grids. Grids are two-dimensional\n * arrays of lines.\n *\n * ```js\n * const size = 10;\n * const divisions = 10;\n *\n * const gridHelper = new THREE.GridHelper( size, divisions );\n * scene.add( gridHelper );\n * ```\n *\n * @augments LineSegments\n */\nclass GridHelper extends LineSegments {\n\n\t/**\n\t * Constructs a new grid helper.\n\t *\n\t * @param {number} [size=10] - The size of the grid.\n\t * @param {number} [divisions=10] - The number of divisions across the grid.\n\t * @param {number|Color|string} [color1=0x444444] - The color of the center line.\n\t * @param {number|Color|string} [color2=0x888888] - The color of the lines of the grid.\n\t */\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n/**\n * This helper is an object to define polar grids. Grids are\n * two-dimensional arrays of lines.\n *\n * ```js\n * const radius = 10;\n * const sectors = 16;\n * const rings = 8;\n * const divisions = 64;\n *\n * const helper = new THREE.PolarGridHelper( radius, sectors, rings, divisions );\n * scene.add( helper );\n * ```\n *\n * @augments LineSegments\n */\nclass PolarGridHelper extends LineSegments {\n\n\t/**\n\t * Constructs a new polar grid helper.\n\t *\n\t * @param {number} [radius=10] - The radius of the polar grid. This can be any positive number.\n\t * @param {number} [sectors=16] - The number of sectors the grid will be divided into. This can be any positive integer.\n\t * @param {number} [rings=16] - The number of rings. This can be any positive integer.\n\t * @param {number} [divisions=64] - The number of line segments used for each circle. This can be any positive integer.\n\t * @param {number|Color|string} [color1=0x444444] - The first color used for grid elements.\n\t * @param {number|Color|string} [color2=0x888888] -  The second color used for grid elements.\n\t */\n\tconstructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the sectors\n\n\t\tif ( sectors > 1 ) {\n\n\t\t\tfor ( let i = 0; i < sectors; i ++ ) {\n\n\t\t\t\tconst v = ( i / sectors ) * ( Math.PI * 2 );\n\n\t\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( x, 0, z );\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// create the rings\n\n\t\tfor ( let i = 0; i < rings; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / rings * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\n/**\n * Helper object to assist with visualizing a {@link DirectionalLight}'s\n * effect on the scene. This consists of a plane and a line representing the\n * light's position and direction.\n *\n * When the directional light or its target are transformed or light properties\n * are changed, it's necessary to call the `update()` method of the respective helper.\n *\n * ```js\n * const light = new THREE.DirectionalLight( 0xFFFFFF );\n * scene.add( light );\n *\n * const helper = new THREE.DirectionalLightHelper( light, 5 );\n * scene.add( helper );\n * ```\n *\n * @augments Object3D\n */\nclass DirectionalLightHelper extends Object3D {\n\n\t/**\n\t * Constructs a new directional light helper.\n\t *\n\t * @param {DirectionalLight} light - The light to be visualized.\n\t * @param {number} [size=1] - The dimensions of the plane.\n\t * @param {number|Color|string} [color] - The helper's color. If not set, the helper will take\n\t * the color of the light.\n\t */\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The light being visualized.\n\t\t *\n\t\t * @type {DirectionalLight}\n\t\t */\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\t/**\n\t\t * The color parameter passed in the constructor.\n\t\t * If not set, the helper will take the color of the light.\n\t\t *\n\t\t * @type {number|Color|string}\n\t\t */\n\t\tthis.color = color;\n\n\t\tthis.type = 'DirectionalLightHelper';\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\t/**\n\t\t * Contains the line showing the location of the directional light.\n\t\t *\n\t\t * @type {Line}\n\t\t */\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\t/**\n\t\t * Represents the target line of the directional light.\n\t\t *\n\t\t * @type {Line}\n\t\t */\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\t/**\n\t * Updates the helper to match the position and direction of the\n\t * light being visualized.\n\t */\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n * This helps with visualizing what a camera contains in its frustum. It\n * visualizes the frustum of a camera using a line segments.\n *\n * Based on frustum visualization in [lightgl.js shadowmap example](https://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html).\n *\n * `CameraHelper` must be a child of the scene.\n *\n * When the camera is transformed or its projection matrix is changed, it's necessary\n * to call the `update()` method of the respective helper.\n *\n * ```js\n * const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );\n * const helper = new THREE.CameraHelper( camera );\n * scene.add( helper );\n * ```\n *\n * @augments LineSegments\n */\nclass CameraHelper extends LineSegments {\n\n\t/**\n\t * Constructs a new arrow helper.\n\t *\n\t * @param {Camera} camera - The camera to visualize.\n\t */\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2' );\n\t\taddLine( 'n2', 'n4' );\n\t\taddLine( 'n4', 'n3' );\n\t\taddLine( 'n3', 'n1' );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2' );\n\t\taddLine( 'f2', 'f4' );\n\t\taddLine( 'f4', 'f3' );\n\t\taddLine( 'f3', 'f1' );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1' );\n\t\taddLine( 'n2', 'f2' );\n\t\taddLine( 'n3', 'f3' );\n\t\taddLine( 'n4', 'f4' );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1' );\n\t\taddLine( 'p', 'n2' );\n\t\taddLine( 'p', 'n3' );\n\t\taddLine( 'p', 'n4' );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2' );\n\t\taddLine( 'u2', 'u3' );\n\t\taddLine( 'u3', 'u1' );\n\n\t\t// target\n\n\t\taddLine( 'c', 't' );\n\t\taddLine( 'p', 'c' );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2' );\n\t\taddLine( 'cn3', 'cn4' );\n\n\t\taddLine( 'cf1', 'cf2' );\n\t\taddLine( 'cf3', 'cf4' );\n\n\t\tfunction addLine( a, b ) {\n\n\t\t\taddPoint( a );\n\t\t\taddPoint( b );\n\n\t\t}\n\n\t\tfunction addPoint( id ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( 0, 0, 0 );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\t/**\n\t\t * The camera being visualized.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\t/**\n\t\t * This contains the points used to visualize the camera.\n\t\t *\n\t\t * @type {Object<string,Array<number>>}\n\t\t */\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\tthis.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross );\n\n\t}\n\n\t/**\n\t * Defines the colors of the helper.\n\t *\n\t * @param {Color} frustum - The frustum line color.\n\t * @param {Color} cone - The cone line color.\n\t * @param {Color} up - The up line color.\n\t * @param {Color} target - The target line color.\n\t * @param {Color} cross - The cross line color.\n\t * @return {CameraHelper} A reference to this helper.\n\t */\n\tsetColors( frustum, cone, up, target, cross ) {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\t// near\n\n\t\tcolorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2\n\t\tcolorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4\n\t\tcolorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3\n\t\tcolorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1\n\n\t\t// far\n\n\t\tcolorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2\n\t\tcolorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4\n\t\tcolorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3\n\t\tcolorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1\n\n\t\t// sides\n\n\t\tcolorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1\n\t\tcolorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2\n\t\tcolorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3\n\t\tcolorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4\n\n\t\t// cone\n\n\t\tcolorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1\n\t\tcolorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2\n\t\tcolorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3\n\t\tcolorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4\n\n\t\t// up\n\n\t\tcolorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2\n\t\tcolorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3\n\t\tcolorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1\n\n\t\t// target\n\n\t\tcolorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t\n\t\tcolorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c\n\n\t\t// cross\n\n\t\tcolorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2\n\t\tcolorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4\n\n\t\tcolorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2\n\t\tcolorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4\n\n\t\tcolorAttribute.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Updates the helper based on the projection matrix of the camera.\n\t */\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\tlet nearZ, farZ;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// Adjust z values based on coordinate system\n\n\t\tif ( this.camera.reversedDepth === true ) {\n\n\t\t\tnearZ = 1;\n\t\t\tfarZ = 0;\n\n\t\t} else {\n\n\t\t\tif ( this.camera.coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\t\tnearZ = -1;\n\t\t\t\tfarZ = 1;\n\n\t\t\t} else if ( this.camera.coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\t\tnearZ = 0;\n\t\t\t\tfarZ = 1;\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'THREE.CameraHelper.update(): Invalid coordinate system: ' + this.camera.coordinateSystem );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// center / target\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, nearZ );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, farZ );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, nearZ );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, nearZ );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, nearZ );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, nearZ );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, farZ );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, farZ );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, farZ );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, farZ );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, nearZ );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, nearZ );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, nearZ );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, farZ );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, farZ );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, farZ );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, farZ );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, nearZ );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, nearZ );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, nearZ );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, nearZ );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\n/**\n * Helper object to graphically show the world-axis-aligned bounding box\n * around an object. The actual bounding box is handled with {@link Box3},\n * this is just a visual helper for debugging. It can be automatically\n * resized with {@link BoxHelper#update} when the object it's created from\n * is transformed. Note that the object must have a geometry for this to work,\n * so it won't work with sprites.\n *\n * ```js\n * const sphere = new THREE.SphereGeometry();\n * const object = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( 0xff0000 ) );\n * const box = new THREE.BoxHelper( object, 0xffff00 );\n * scene.add( box );\n * ```\n *\n * @augments LineSegments\n */\nclass BoxHelper extends LineSegments {\n\n\t/**\n\t * Constructs a new box helper.\n\t *\n\t * @param {Object3D} [object] - The 3D object to show the world-axis-aligned bounding box.\n\t * @param {number|Color|string} [color=0xffff00] - The box's color.\n\t */\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\t/**\n\t\t * The 3D object being visualized.\n\t\t *\n\t\t * @type {Object3D}\n\t\t */\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Updates the helper's geometry to match the dimensions of the object,\n\t * including any children.\n\t */\n\tupdate() {\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\t/**\n\t * Updates the wireframe box for the passed object.\n\t *\n\t * @param {Object3D} object - The 3D object to create the helper for.\n\t * @return {BoxHelper} A reference to this instance.\n\t */\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n/**\n * A helper object to visualize an instance of {@link Box3}.\n *\n * ```js\n * const box = new THREE.Box3();\n * box.setFromCenterAndSize( new THREE.Vector3( 1, 1, 1 ), new THREE.Vector3( 2, 1, 3 ) );\n *\n * const helper = new THREE.Box3Helper( box, 0xffff00 );\n * scene.add( helper )\n * ```\n *\n * @augments LineSegments\n */\nclass Box3Helper extends LineSegments {\n\n\t/**\n\t * Constructs a new box3 helper.\n\t *\n\t * @param {Box3} box - The box to visualize.\n\t * @param {number|Color|string} [color=0xffff00] - The box's color.\n\t */\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\t/**\n\t\t * The box being visualized.\n\t\t *\n\t\t * @type {Box3}\n\t\t */\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n/**\n * A helper object to visualize an instance of {@link Plane}.\n *\n * ```js\n * const plane = new THREE.Plane( new THREE.Vector3( 1, 1, 0.2 ), 3 );\n * const helper = new THREE.PlaneHelper( plane, 1, 0xffff00 );\n * scene.add( helper );\n * ```\n *\n * @augments Line\n */\nclass PlaneHelper extends Line {\n\n\t/**\n\t * Constructs a new plane helper.\n\t *\n\t * @param {Plane} plane - The plane to be visualized.\n\t * @param {number} [size=1] - The side length of plane helper.\n\t * @param {number|Color|string} [hex=0xffff00] - The helper's color.\n\t */\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, -1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\t/**\n\t\t * The plane being visualized.\n\t\t *\n\t\t * @type {Plane}\n\t\t */\n\t\tthis.plane = plane;\n\n\t\t/**\n\t\t * The side length of plane helper.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.position.set( 0, 0, 0 );\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, 1 );\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tthis.translateZ( - this.plane.constant );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\t/**\n\t * Updates the helper to match the position and direction of the\n\t * light being visualized.\n\t */\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\n/**\n * An 3D arrow object for visualizing directions.\n *\n * ```js\n * const dir = new THREE.Vector3( 1, 2, 0 );\n *\n * //normalize the direction vector (convert to vector of length 1)\n * dir.normalize();\n *\n * const origin = new THREE.Vector3( 0, 0, 0 );\n * const length = 1;\n * const hex = 0xffff00;\n *\n * const arrowHelper = new THREE.ArrowHelper( dir, origin, length, hex );\n * scene.add( arrowHelper );\n * ```\n *\n * @augments Object3D\n */\nclass ArrowHelper extends Object3D {\n\n\t/**\n\t * Constructs a new arrow helper.\n\t *\n\t * @param {Vector3} [dir=(0, 0, 1)] - The (normalized) direction vector.\n\t * @param {Vector3} [origin=(0, 0, 0)] - Point at which the arrow starts.\n\t * @param {number} [length=1] - Length of the arrow in world units.\n\t * @param {(number|Color|string)} [color=0xffff00] - Color of the arrow.\n\t * @param {number} [headLength=length*0.2] - The length of the head of the arrow.\n\t * @param {number} [headWidth=headLength*0.2] - The width of the head of the arrow.\n\t */\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new ConeGeometry( 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, -0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\t/**\n\t\t * The line part of the arrow helper.\n\t\t *\n\t\t * @type {Line}\n\t\t */\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\t/**\n\t\t * The cone part of the arrow helper.\n\t\t *\n\t\t * @type {Mesh}\n\t\t */\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\t/**\n\t * Sets the direction of the helper.\n\t *\n\t * @param {Vector3} dir - The normalized direction vector.\n\t */\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < -0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the length of the helper.\n\t *\n\t * @param {number} length - Length of the arrow in world units.\n\t * @param {number} [headLength=length*0.2] - The length of the head of the arrow.\n\t * @param {number} [headWidth=headLength*0.2] - The width of the head of the arrow.\n\t */\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\t/**\n\t * Sets the color of the helper.\n\t *\n\t * @param {number|Color|string} color - The color to set.\n\t */\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.line.geometry.dispose();\n\t\tthis.line.material.dispose();\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n}\n\n/**\n * An axis object to visualize the 3 axes in a simple way.\n * The X axis is red. The Y axis is green. The Z axis is blue.\n *\n * ```js\n * const axesHelper = new THREE.AxesHelper( 5 );\n * scene.add( axesHelper );\n * ```\n *\n * @augments LineSegments\n */\nclass AxesHelper extends LineSegments {\n\n\t/**\n\t * Constructs a new axes helper.\n\t *\n\t * @param {number} [size=1] - Size of the lines representing the axes.\n\t */\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\t/**\n\t * Defines the colors of the axes helper.\n\t *\n\t * @param {number|Color|string} xAxisColor - The color for the x axis.\n\t * @param {number|Color|string} yAxisColor - The color for the y axis.\n\t * @param {number|Color|string} zAxisColor - The color for the z axis.\n\t * @return {AxesHelper} A reference to this axes helper.\n\t */\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n/**\n * This class is used to convert a series of paths to an array of\n * shapes. It is specifically used in context of fonts and SVG.\n */\nclass ShapePath {\n\n\t/**\n\t * Constructs a new shape path.\n\t */\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\t/**\n\t\t * The color of the shape.\n\t\t *\n\t\t * @type {Color}\n\t\t */\n\t\tthis.color = new Color();\n\n\t\t/**\n\t\t * The paths that have been generated for this shape.\n\t\t *\n\t\t * @type {Array<Path>}\n\t\t * @default null\n\t\t */\n\t\tthis.subPaths = [];\n\n\t\t/**\n\t\t * The current path that is being generated.\n\t\t *\n\t\t * @type {?Path}\n\t\t * @default null\n\t\t */\n\t\tthis.currentPath = null;\n\n\t}\n\n\t/**\n\t * Creates a new path and moves it current point to the given one.\n\t *\n\t * @param {number} x - The x coordinate.\n\t * @param {number} y - The y coordinate.\n\t * @return {ShapePath} A reference to this shape path.\n\t */\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an instance of {@link LineCurve} to the path by connecting\n\t * the current point with the given one.\n\t *\n\t * @param {number} x - The x coordinate of the end point.\n\t * @param {number} y - The y coordinate of the end point.\n\t * @return {ShapePath} A reference to this shape path.\n\t */\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an instance of {@link QuadraticBezierCurve} to the path by connecting\n\t * the current point with the given one.\n\t *\n\t * @param {number} aCPx - The x coordinate of the control point.\n\t * @param {number} aCPy - The y coordinate of the control point.\n\t * @param {number} aX - The x coordinate of the end point.\n\t * @param {number} aY - The y coordinate of the end point.\n\t * @return {ShapePath} A reference to this shape path.\n\t */\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an instance of {@link CubicBezierCurve} to the path by connecting\n\t * the current point with the given one.\n\t *\n\t * @param {number} aCP1x - The x coordinate of the first control point.\n\t * @param {number} aCP1y - The y coordinate of the first control point.\n\t * @param {number} aCP2x - The x coordinate of the second control point.\n\t * @param {number} aCP2y - The y coordinate of the second control point.\n\t * @param {number} aX - The x coordinate of the end point.\n\t * @param {number} aY - The y coordinate of the end point.\n\t * @return {ShapePath} A reference to this shape path.\n\t */\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds an instance of {@link SplineCurve} to the path by connecting\n\t * the current point with the given list of points.\n\t *\n\t * @param {Array<Vector2>} pts - An array of points in 2D space.\n\t * @return {ShapePath} A reference to this shape path.\n\t */\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Converts the paths into an array of shapes.\n\t *\n\t * @param {boolean} isCCW - By default solid shapes are  defined clockwise (CW) and holes are defined counterclockwise (CCW).\n\t * If this flag is set to `true`, then those are flipped.\n\t * @return {Array<Shape>} An array of shapes.\n\t */\n\ttoShapes( isCCW ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success    or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t//  with the horizontal line through inPt, left of inPt\n\t\t\t//  not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tlet toChange = 0;\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange ++;\n\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( toChange > 0 && ambiguous === false ) {\n\n\t\t\t\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\n/**\n * Abstract base class for controls.\n *\n * @abstract\n * @augments EventDispatcher\n */\nclass Controls extends EventDispatcher {\n\n\t/**\n\t * Constructs a new controls instance.\n\t *\n\t * @param {Object3D} object - The object that is managed by the controls.\n\t * @param {?HTMLElement} domElement - The HTML element used for event listeners.\n\t */\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The object that is managed by the controls.\n\t\t *\n\t\t * @type {Object3D}\n\t\t */\n\t\tthis.object = object;\n\n\t\t/**\n\t\t * The HTML element used for event listeners.\n\t\t *\n\t\t * @type {?HTMLElement}\n\t\t * @default null\n\t\t */\n\t\tthis.domElement = domElement;\n\n\t\t/**\n\t\t * Whether the controls responds to user input or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enabled = true;\n\n\t\t/**\n\t\t * The internal state of the controls.\n\t\t *\n\t\t * @type {number}\n\t\t * @default -1\n\t\t */\n\t\tthis.state = -1;\n\n\t\t/**\n\t\t * This object defines the keyboard input of the controls.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.keys = {};\n\n\t\t/**\n\t\t * This object defines what type of actions are assigned to the available mouse buttons.\n\t\t * It depends on the control implementation what kind of mouse buttons and actions are supported.\n\t\t *\n\t\t * @type {{LEFT: ?number, MIDDLE: ?number, RIGHT: ?number}}\n\t\t */\n\t\tthis.mouseButtons = { LEFT: null, MIDDLE: null, RIGHT: null };\n\n\t\t/**\n\t\t * This object defines what type of actions are assigned to what kind of touch interaction.\n\t\t * It depends on the control implementation what kind of touch interaction and actions are supported.\n\t\t *\n\t\t * @type {{ONE: ?number, TWO: ?number}}\n\t\t */\n\t\tthis.touches = { ONE: null, TWO: null };\n\n\t}\n\n\t/**\n\t * Connects the controls to the DOM. This method has so called \"side effects\" since\n\t * it adds the module's event listeners to the DOM.\n\t *\n\t * @param {HTMLElement} element - The DOM element to connect to.\n\t */\n\tconnect( element ) {\n\n\t\tif ( element === undefined ) {\n\n\t\t\twarn( 'Controls: connect() now requires an element.' ); // @deprecated, the warning can be removed with r185\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.domElement !== null ) this.disconnect();\n\n\t\tthis.domElement = element;\n\n\t}\n\n\t/**\n\t * Disconnects the controls from the DOM.\n\t */\n\tdisconnect() {}\n\n\t/**\n\t * Call this method if you no longer want use to the controls. It frees all internal\n\t * resources and removes all event listeners.\n\t */\n\tdispose() {}\n\n\t/**\n\t * Controls should implement this method if they have to update their internal state\n\t * per simulation step.\n\t *\n\t * @param {number} [delta] - The time delta in seconds.\n\t */\n\tupdate( /* delta */ ) {}\n\n}\n\n/**\n * Scales the texture as large as possible within its surface without cropping\n * or stretching the texture. The method preserves the original aspect ratio of\n * the texture. Akin to CSS `object-fit: contain`\n *\n * @param {Texture} texture - The texture.\n * @param {number} aspect - The texture's aspect ratio.\n * @return {Texture} The updated texture.\n */\nfunction contain( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t} else {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t}\n\n\treturn texture;\n\n}\n\n/**\n * Scales the texture to the smallest possible size to fill the surface, leaving\n * no empty space. The method preserves the original aspect ratio of the texture.\n * Akin to CSS `object-fit: cover`.\n *\n * @param {Texture} texture - The texture.\n * @param {number} aspect - The texture's aspect ratio.\n * @return {Texture} The updated texture.\n */\nfunction cover( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t} else {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t}\n\n\treturn texture;\n\n}\n\n/**\n * Configures the texture to the default transformation. Akin to CSS `object-fit: fill`.\n *\n * @param {Texture} texture - The texture.\n * @return {Texture} The updated texture.\n */\nfunction fill( texture ) {\n\n\ttexture.repeat.x = 1;\n\ttexture.repeat.y = 1;\n\n\ttexture.offset.x = 0;\n\ttexture.offset.y = 0;\n\n\treturn texture;\n\n}\n\n/**\n * Determines how many bytes must be used to represent the texture.\n *\n * @param {number} width - The width of the texture.\n * @param {number} height - The height of the texture.\n * @param {number} format - The texture's format.\n * @param {number} type - The texture's type.\n * @return {number} The byte length.\n */\nfunction getByteLength( width, height, format, type ) {\n\n\tconst typeByteLength = getTextureTypeByteLength( type );\n\n\tswitch ( format ) {\n\n\t\t// https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml\n\t\tcase AlphaFormat:\n\t\t\treturn width * height;\n\t\tcase RedFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RedIntegerFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGIntegerFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBFormat:\n\t\t\treturn ( ( width * height * 3 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAIntegerFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/\n\t\tcase RGB_S3TC_DXT1_Format:\n\t\tcase RGBA_S3TC_DXT1_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_S3TC_DXT3_Format:\n\t\tcase RGBA_S3TC_DXT5_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_pvrtc/\n\t\tcase RGB_PVRTC_2BPPV1_Format:\n\t\tcase RGBA_PVRTC_2BPPV1_Format:\n\t\t\treturn ( Math.max( width, 16 ) * Math.max( height, 8 ) ) / 4;\n\t\tcase RGB_PVRTC_4BPPV1_Format:\n\t\tcase RGBA_PVRTC_4BPPV1_Format:\n\t\t\treturn ( Math.max( width, 8 ) * Math.max( height, 8 ) ) / 2;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_etc/\n\t\tcase RGB_ETC1_Format:\n\t\tcase RGB_ETC2_Format:\n\t\tcase R11_EAC_Format:\n\t\tcase SIGNED_R11_EAC_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_ETC2_EAC_Format:\n\t\tcase RG11_EAC_Format:\n\t\tcase SIGNED_RG11_EAC_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_astc/\n\t\tcase RGBA_ASTC_4x4_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x4_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x5_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x5_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x6_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x5_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_8x6_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x8_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x5_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_10x6_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_10x8_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x10_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x10_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x12_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 11 ) / 12 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_bptc/\n\t\tcase RGBA_BPTC_Format:\n\t\tcase RGB_BPTC_SIGNED_Format:\n\t\tcase RGB_BPTC_UNSIGNED_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_rgtc/\n\t\tcase RED_RGTC1_Format:\n\t\tcase SIGNED_RED_RGTC1_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 8;\n\t\tcase RED_GREEN_RGTC2_Format:\n\t\tcase SIGNED_RED_GREEN_RGTC2_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t}\n\n\tthrow new Error(\n\t\t`Unable to determine texture byte length for ${format} format.`,\n\t);\n\n}\n\nfunction getTextureTypeByteLength( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase UnsignedByteType:\n\t\tcase ByteType:\n\t\t\treturn { byteLength: 1, components: 1 };\n\t\tcase UnsignedShortType:\n\t\tcase ShortType:\n\t\tcase HalfFloatType:\n\t\t\treturn { byteLength: 2, components: 1 };\n\t\tcase UnsignedShort4444Type:\n\t\tcase UnsignedShort5551Type:\n\t\t\treturn { byteLength: 2, components: 4 };\n\t\tcase UnsignedIntType:\n\t\tcase IntType:\n\t\tcase FloatType:\n\t\t\treturn { byteLength: 4, components: 1 };\n\t\tcase UnsignedInt5999Type:\n\t\tcase UnsignedInt101111Type:\n\t\t\treturn { byteLength: 4, components: 3 };\n\n\t}\n\n\tthrow new Error( `Unknown texture type ${type}.` );\n\n}\n\n/**\n * A class containing utility functions for textures.\n *\n * @hideconstructor\n */\nclass TextureUtils {\n\n\t/**\n\t * Scales the texture as large as possible within its surface without cropping\n\t * or stretching the texture. The method preserves the original aspect ratio of\n\t * the texture. Akin to CSS `object-fit: contain`\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {number} aspect - The texture's aspect ratio.\n\t * @return {Texture} The updated texture.\n\t */\n\tstatic contain( texture, aspect ) {\n\n\t\treturn contain( texture, aspect );\n\n\t}\n\n\t/**\n\t * Scales the texture to the smallest possible size to fill the surface, leaving\n\t * no empty space. The method preserves the original aspect ratio of the texture.\n\t * Akin to CSS `object-fit: cover`.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {number} aspect - The texture's aspect ratio.\n\t * @return {Texture} The updated texture.\n\t */\n\tstatic cover( texture, aspect ) {\n\n\t\treturn cover( texture, aspect );\n\n\t}\n\n\t/**\n\t * Configures the texture to the default transformation. Akin to CSS `object-fit: fill`.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @return {Texture} The updated texture.\n\t */\n\tstatic fill( texture ) {\n\n\t\treturn fill( texture );\n\n\t}\n\n\t/**\n\t * Determines how many bytes must be used to represent the texture.\n\t *\n\t * @param {number} width - The width of the texture.\n\t * @param {number} height - The height of the texture.\n\t * @param {number} format - The texture's format.\n\t * @param {number} type - The texture's type.\n\t * @return {number} The byte length.\n\t */\n\tstatic getByteLength( width, height, format, type ) {\n\n\t\treturn getByteLength( width, height, format, type );\n\n\t}\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\twarn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, Compatibility, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, Controls, CubeCamera, CubeDepthTexture, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExternalTexture, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, FrustumArray, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HTMLTexture, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, Material, MaterialBlending, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NormalGAPacking, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, R11_EAC_Format, RAD2DEG, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RenderTarget3D, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, ReversedDepthFuncs, RingGeometry, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureUtils, Timer, TimestampQuery, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsUtils, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLRenderTarget, WebGPUCoordinateSystem, WebXRController, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, cloneUniforms, createCanvasElement, createElementNS, error, getByteLength, getConsoleFunction, getUnlitUniformColorSpace, isTypedArray, log, mergeUniforms, probeAsync, setConsoleFunction, warn, warnOnce, yieldToMain };\n","/**\n * @license\n * Copyright 2010-2026 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nimport { Matrix3, Vector2, Color, Vector3, mergeUniforms, CubeUVReflectionMapping, Mesh, BoxGeometry, ShaderMaterial, BackSide, cloneUniforms, Matrix4, ColorManagement, SRGBTransfer, PlaneGeometry, FrontSide, getUnlitUniformColorSpace, IntType, warn, HalfFloatType, UnsignedByteType, FloatType, RGBAFormat, Plane, CubeReflectionMapping, CubeRefractionMapping, BufferGeometry, OrthographicCamera, PerspectiveCamera, NoToneMapping, MeshBasicMaterial, error, NoBlending, WebGLRenderTarget, BufferAttribute, LinearSRGBColorSpace, LinearFilter, CubeTexture, LinearMipmapLinearFilter, CubeCamera, EquirectangularReflectionMapping, EquirectangularRefractionMapping, warnOnce, Uint32BufferAttribute, Uint16BufferAttribute, DataArrayTexture, Vector4, DepthTexture, Float32BufferAttribute, RawShaderMaterial, CustomToneMapping, NeutralToneMapping, AgXToneMapping, ACESFilmicToneMapping, CineonToneMapping, ReinhardToneMapping, LinearToneMapping, Data3DTexture, GreaterEqualCompare, LessEqualCompare, Texture, GLSL3, VSMShadowMap, PCFShadowMap, AddOperation, MixOperation, MultiplyOperation, LinearTransfer, UniformsUtils, DoubleSide, NormalBlending, TangentSpaceNormalMap, ObjectSpaceNormalMap, Layers, RGFormat, RG11_EAC_Format, RED_GREEN_RGTC2_Format, MeshDepthMaterial, MeshDistanceMaterial, PCFSoftShadowMap, DepthFormat, NearestFilter, CubeDepthTexture, UnsignedIntType, Frustum, LessEqualDepth, ReverseSubtractEquation, SubtractEquation, AddEquation, OneMinusConstantAlphaFactor, ConstantAlphaFactor, OneMinusConstantColorFactor, ConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, DstAlphaFactor, DstColorFactor, SrcAlphaSaturateFactor, SrcAlphaFactor, SrcColorFactor, OneFactor, ZeroFactor, NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessDepth, AlwaysDepth, NeverDepth, CullFaceNone, CullFaceBack, CullFaceFront, CustomBlending, MultiplyBlending, SubtractiveBlending, AdditiveBlending, ReversedDepthFuncs, MinEquation, MaxEquation, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, LinearMipmapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NotEqualCompare, GreaterCompare, EqualCompare, LessCompare, AlwaysCompare, NeverCompare, NoColorSpace, DepthStencilFormat, getByteLength, UnsignedInt248Type, UnsignedShortType, createElementNS, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedInt5999Type, UnsignedInt101111Type, ByteType, ShortType, AlphaFormat, RGBFormat, RedFormat, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, SIGNED_RED_GREEN_RGTC2_Format, ExternalTexture, EventDispatcher, ArrayCamera, WebXRController, RAD2DEG, DataTexture, createCanvasElement, SRGBColorSpace, REVISION, log, WebGLCoordinateSystem, probeAsync } from './three.core.js';\nexport { AdditiveAnimationBlendMode, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BasicDepthPacking, BasicShadowMap, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxHelper, BufferGeometryLoader, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CircleGeometry, Clock, ColorKeyframeTrack, Compatibility, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, Controls, CubeTextureLoader, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceFrontBack, Curve, CurvePath, CylinderGeometry, Cylindrical, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualStencilFunc, Euler, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Fog, FogExp2, FramebufferTexture, FrustumArray, GLBufferAttribute, GLSL1, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HTMLTexture, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, Material, MaterialBlending, MaterialLoader, MathUtils, Matrix2, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NeverStencilFunc, NoNormalPacking, NormalAnimationBlendMode, NormalGAPacking, NormalRGPacking, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, OctahedronGeometry, Path, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RGBADepthPacking, RGBDepthPacking, RGBIntegerFormat, RGDepthPacking, Ray, Raycaster, RectAreaLight, RenderTarget, RenderTarget3D, ReplaceStencilOp, RingGeometry, Scene, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, TOUCH, TetrahedronGeometry, TextureLoader, TextureUtils, Timer, TimestampQuery, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, ZeroStencilOp, getConsoleFunction, setConsoleFunction } from './three.core.js';\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\t\t\tif ( context === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tif ( context !== null ) context.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl ) {\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\t\tconst size = array.byteLength;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( typeof Float16Array !== 'undefined' && array instanceof Float16Array ) {\n\n\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t\t} else {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version,\n\t\t\tsize: size\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRanges = attribute.updateRanges;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRanges.length === 0 ) {\n\n\t\t\t// Not using update ranges\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\t// Before applying update ranges, we merge any adjacent / overlapping\n\t\t\t// ranges to reduce load on `gl.bufferSubData`. Empirically, this has led\n\t\t\t// to performance improvements for applications which make heavy use of\n\t\t\t// update ranges. Likely due to GPU command overhead.\n\t\t\t//\n\t\t\t// Note that to reduce garbage collection between frames, we merge the\n\t\t\t// update ranges in-place. This is safe because this method will clear the\n\t\t\t// update ranges once updated.\n\n\t\t\tupdateRanges.sort( ( a, b ) => a.start - b.start );\n\n\t\t\t// To merge the update ranges in-place, we work from left to right in the\n\t\t\t// existing updateRanges array, merging ranges. This may result in a final\n\t\t\t// array which is smaller than the original. This index tracks the last\n\t\t\t// index representing a merged range, any data after this index can be\n\t\t\t// trimmed once the merge algorithm is completed.\n\t\t\tlet mergeIndex = 0;\n\n\t\t\tfor ( let i = 1; i < updateRanges.length; i ++ ) {\n\n\t\t\t\tconst previousRange = updateRanges[ mergeIndex ];\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\t// We add one here to merge adjacent ranges. This is safe because ranges\n\t\t\t\t// operate over positive integers.\n\t\t\t\tif ( range.start <= previousRange.start + previousRange.count + 1 ) {\n\n\t\t\t\t\tpreviousRange.count = Math.max(\n\t\t\t\t\t\tpreviousRange.count,\n\t\t\t\t\t\trange.start + range.count - previousRange.start\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t++ mergeIndex;\n\t\t\t\t\tupdateRanges[ mergeIndex ] = range;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Trim the array to only contain the merged ranges.\n\t\t\tupdateRanges.length = mergeIndex + 1;\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\tgl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, range.start, range.count );\n\n\t\t\t}\n\n\t\t\tattribute.clearUpdateRanges();\n\n\t\t}\n\n\t\tattribute.onUploadCallback();\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tif ( data.size !== attribute.array.byteLength ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLAttributes: The size of the buffer attribute\\'s array buffer does not match the original size. Resizing buffer attributes is not supported.' );\n\n\t\t\t}\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nvar alphahash_fragment = \"#ifdef USE_ALPHAHASH\\n\\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\\n#endif\";\n\nvar alphahash_pars_fragment = \"#ifdef USE_ALPHAHASH\\n\\tconst float ALPHA_HASH_SCALE = 0.05;\\n\\tfloat hash2D( vec2 value ) {\\n\\t\\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\\n\\t}\\n\\tfloat hash3D( vec3 value ) {\\n\\t\\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\\n\\t}\\n\\tfloat getAlphaHashThreshold( vec3 position ) {\\n\\t\\tfloat maxDeriv = max(\\n\\t\\t\\tlength( dFdx( position.xyz ) ),\\n\\t\\t\\tlength( dFdy( position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\\n\\t\\tvec2 pixScales = vec2(\\n\\t\\t\\texp2( floor( log2( pixScale ) ) ),\\n\\t\\t\\texp2( ceil( log2( pixScale ) ) )\\n\\t\\t);\\n\\t\\tvec2 alpha = vec2(\\n\\t\\t\\thash3D( floor( pixScales.x * position.xyz ) ),\\n\\t\\t\\thash3D( floor( pixScales.y * position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat lerpFactor = fract( log2( pixScale ) );\\n\\t\\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\\n\\t\\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\\n\\t\\tvec3 cases = vec3(\\n\\t\\t\\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\\n\\t\\t\\t( x - 0.5 * a ) / ( 1.0 - a ),\\n\\t\\t\\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\\n\\t\\t);\\n\\t\\tfloat threshold = ( x < ( 1.0 - a ) )\\n\\t\\t\\t? ( ( x < a ) ? cases.x : cases.y )\\n\\t\\t\\t: cases.z;\\n\\t\\treturn clamp( threshold , 1.0e-6, 1.0 );\\n\\t}\\n#endif\";\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\\n\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n\\t#endif\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_CLEARCOAT ) \\n\\t\\tclearcoatSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_SHEEN ) \\n\\t\\tsheenSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar batching_pars_vertex = \"#ifdef USE_BATCHING\\n\\t#if ! defined( GL_ANGLE_multi_draw )\\n\\t#define gl_DrawID _gl_DrawID\\n\\tuniform int _gl_DrawID;\\n\\t#endif\\n\\tuniform highp sampler2D batchingTexture;\\n\\tuniform highp usampler2D batchingIdTexture;\\n\\tmat4 getBatchingMatrix( const in float i ) {\\n\\t\\tint size = textureSize( batchingTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n\\tfloat getIndirectIndex( const in int i ) {\\n\\t\\tint size = textureSize( batchingIdTexture, 0 ).x;\\n\\t\\tint x = i % size;\\n\\t\\tint y = i / size;\\n\\t\\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\\n\\t}\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tuniform sampler2D batchingColorTexture;\\n\\tvec4 getBatchingColor( const in float i ) {\\n\\t\\tint size = textureSize( batchingColorTexture, 0 ).x;\\n\\t\\tint j = int( i );\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 );\\n\\t}\\n#endif\";\n\nvar batching_vertex = \"#ifdef USE_BATCHING\\n\\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\\n#ifdef USE_ALPHAHASH\\n\\tvPosition = vec3( position );\\n#endif\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"float G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n} // validated\";\n\nvar iridescence_fragment = \"#ifdef USE_IRIDESCENCE\\n\\tconst mat3 XYZ_TO_REC709 = mat3(\\n\\t\\t 3.2404542, -0.9692660,  0.0556434,\\n\\t\\t-1.5371385,  1.8760108, -0.2040259,\\n\\t\\t-0.4985314,  0.0415560,  1.0572252\\n\\t);\\n\\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\\n\\t\\tvec3 sqrtF0 = sqrt( fresnel0 );\\n\\t\\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\\n\\t}\\n\\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\\n\\t}\\n\\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\\n\\t}\\n\\tvec3 evalSensitivity( float OPD, vec3 shift ) {\\n\\t\\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\\n\\t\\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\\n\\t\\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\\n\\t\\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\\n\\t\\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\\n\\t\\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\\n\\t\\txyz /= 1.0685e-7;\\n\\t\\tvec3 rgb = XYZ_TO_REC709 * xyz;\\n\\t\\treturn rgb;\\n\\t}\\n\\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\\n\\t\\tvec3 I;\\n\\t\\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\\n\\t\\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\\n\\t\\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\\n\\t\\tif ( cosTheta2Sq < 0.0 ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t}\\n\\t\\tfloat cosTheta2 = sqrt( cosTheta2Sq );\\n\\t\\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\\n\\t\\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\\n\\t\\tfloat T121 = 1.0 - R12;\\n\\t\\tfloat phi12 = 0.0;\\n\\t\\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\\n\\t\\tfloat phi21 = PI - phi12;\\n\\t\\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\\t\\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\\n\\t\\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\\n\\t\\tvec3 phi23 = vec3( 0.0 );\\n\\t\\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\\n\\t\\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\\n\\t\\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\\n\\t\\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\\n\\t\\tvec3 phi = vec3( phi21 ) + phi23;\\n\\t\\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\\n\\t\\tvec3 r123 = sqrt( R123 );\\n\\t\\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\\n\\t\\tvec3 C0 = R12 + Rs;\\n\\t\\tI = C0;\\n\\t\\tvec3 Cm = Rs - T121;\\n\\t\\tfor ( int m = 1; m <= 2; ++ m ) {\\n\\t\\t\\tCm *= r123;\\n\\t\\t\\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\\n\\t\\t\\tI += Cm * Sm;\\n\\t\\t}\\n\\t\\treturn max( I, vec3( 0.0 ) );\\n\\t}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vBumpMapUv );\\n\\t\\tvec2 dSTdy = dFdy( vBumpMapUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\\n\\t\\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\t\\tfloat distanceToPlane, distanceGradient;\\n\\t\\tfloat clipOpacity = 1.0;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\tif ( clipOpacity == 0.0 ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tfloat unionClipOpacity = 1.0;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\t\\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tclipOpacity *= 1.0 - unionClipOpacity;\\n\\t\\t#endif\\n\\t\\tdiffuseColor.a *= clipOpacity;\\n\\t\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tbool clipped = true;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tif ( clipped ) discard;\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvarying vec4 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvColor = vec4( 1.0 );\\n#endif\\n#ifdef USE_COLOR_ALPHA\\n\\tvColor *= color;\\n#elif defined( USE_COLOR )\\n\\tvColor.rgb *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.rgb *= instanceColor.rgb;\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tvColor *= getBatchingColor( getIndirectIndex( gl_DrawID ) );\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nvec3 pow2( const in vec3 x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\n#ifdef USE_ALPHAHASH\\n\\tvarying vec3 vPosition;\\n#endif\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n} // validated\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\\n\\t\\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\\n\\t\\tuv.x *= CUBEUV_TEXEL_WIDTH;\\n\\t\\tuv.y *= CUBEUV_TEXEL_HEIGHT;\\n\\t\\t#ifdef texture2DGradEXT\\n\\t\\t\\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( envMap, uv ).rgb;\\n\\t\\t#endif\\n\\t}\\n\\t#define cubeUV_r0 1.0\\n\\t#define cubeUV_m0 - 2.0\\n\\t#define cubeUV_r1 0.8\\n\\t#define cubeUV_m1 - 1.0\\n\\t#define cubeUV_r4 0.4\\n\\t#define cubeUV_m4 2.0\\n\\t#define cubeUV_r5 0.305\\n\\t#define cubeUV_m5 3.0\\n\\t#define cubeUV_r6 0.21\\n\\t#define cubeUV_m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= cubeUV_r1 ) {\\n\\t\\t\\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\\n\\t\\t} else if ( roughness >= cubeUV_r4 ) {\\n\\t\\t\\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\\n\\t\\t} else if ( roughness >= cubeUV_r5 ) {\\n\\t\\t\\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\\n\\t\\t} else if ( roughness >= cubeUV_r6 ) {\\n\\t\\t\\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = objectTangent;\\n#endif\\n#ifdef USE_BATCHING\\n\\tmat3 bm = mat3( batchingMatrix );\\n\\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\\n\\ttransformedNormal = bm * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = bm * transformedTangent;\\n\\t#endif\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmat3 im = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\\n\\ttransformedNormal = im * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = im * transformedTangent;\\n\\t#endif\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\\n\\t\\temissiveColor = sRGBTransferEOTF( emissiveColor );\\n\\t#endif\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar colorspace_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar colorspace_pars_fragment = \"vec4 LinearTransferOETF( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 sRGBTransferEOTF( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 sRGBTransferOETF( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, envMapRotation * reflectVec );\\n\\t\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform mat3 envMapRotation;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn vec3( texture2D( gradientMap, coord ).r );\\n\\t#else\\n\\t\\tvec2 fw = fwidth( coord ) * 0.5;\\n\\t\\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\\n\\t#endif\\n}\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_fragment = \"LambertMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_lambert_pars_fragment = \"varying vec3 vViewPosition;\\nstruct LambertMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Lambert\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Lambert\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\n#if defined( USE_LIGHT_PROBES )\\n\\tuniform vec3 lightProbe[ 9 ];\\n#endif\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\\n#include <lightprobes_pars_fragment>\";\n\nvar envmap_physical_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 reflectVec = reflect( - viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, pow4( roughness ) ) );\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\\n\\t\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t\\tvec3 bentNormal = cross( bitangent, viewDir );\\n\\t\\t\\t\\tbentNormal = normalize( cross( bentNormal, bitangent ) );\\n\\t\\t\\t\\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\\n\\t\\t\\t\\treturn getIBLRadiance( viewDir, bentNormal, roughness );\\n\\t\\t\\t#else\\n\\t\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.diffuseContribution = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nmaterial.metalness = metalnessFactor;\\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\tmaterial.ior = ior;\\n\\t#ifdef USE_SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularColorFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor;\\n\\tmaterial.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = vec3( 0.04 );\\n\\tmaterial.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_DISPERSION\\n\\tmaterial.dispersion = dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tmaterial.iridescence = iridescence;\\n\\tmaterial.iridescenceIOR = iridescenceIOR;\\n\\t#ifdef USE_IRIDESCENCEMAP\\n\\t\\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\t\\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\\n\\t#else\\n\\t\\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\\n\\t#endif\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.0001, 1.0 );\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\\n\\t\\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\\n\\t\\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\\n\\t#else\\n\\t\\tvec2 anisotropyV = anisotropyVector;\\n\\t#endif\\n\\tmaterial.anisotropy = length( anisotropyV );\\n\\tif( material.anisotropy == 0.0 ) {\\n\\t\\tanisotropyV = vec2( 1.0, 0.0 );\\n\\t} else {\\n\\t\\tanisotropyV /= material.anisotropy;\\n\\t\\tmaterial.anisotropy = saturate( material.anisotropy );\\n\\t}\\n\\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\\n\\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\\n\\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"uniform sampler2D dfgLUT;\\nstruct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 diffuseContribution;\\n\\tvec3 specularColor;\\n\\tvec3 specularColorBlended;\\n\\tfloat roughness;\\n\\tfloat metalness;\\n\\tfloat specularF90;\\n\\tfloat dispersion;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tfloat iridescence;\\n\\t\\tfloat iridescenceIOR;\\n\\t\\tfloat iridescenceThickness;\\n\\t\\tvec3 iridescenceFresnel;\\n\\t\\tvec3 iridescenceF0;\\n\\t\\tvec3 iridescenceFresnelDielectric;\\n\\t\\tvec3 iridescenceFresnelMetallic;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\t#ifdef IOR\\n\\t\\tfloat ior;\\n\\t#endif\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat transmission;\\n\\t\\tfloat transmissionAlpha;\\n\\t\\tfloat thickness;\\n\\t\\tfloat attenuationDistance;\\n\\t\\tvec3 attenuationColor;\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat anisotropy;\\n\\t\\tfloat alphaT;\\n\\t\\tvec3 anisotropyT;\\n\\t\\tvec3 anisotropyB;\\n\\t#endif\\n};\\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\\nvec3 sheenSpecularDirect = vec3( 0.0 );\\nvec3 sheenSpecularIndirect = vec3(0.0 );\\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\\n    float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\\n    float x2 = x * x;\\n    float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\\n    return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\n#ifdef USE_ANISOTROPY\\n\\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\\n\\t\\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\\n\\t\\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\\n\\t\\treturn 0.5 / max( gv + gl, EPSILON );\\n\\t}\\n\\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\\n\\t\\tfloat a2 = alphaT * alphaB;\\n\\t\\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\\n\\t\\thighp float v2 = dot( v, v );\\n\\t\\tfloat w2 = a2 / v2;\\n\\t\\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\\n\\t}\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\\n\\t\\tvec3 f0 = material.clearcoatF0;\\n\\t\\tfloat f90 = material.clearcoatF90;\\n\\t\\tfloat roughness = material.clearcoatRoughness;\\n\\t\\tfloat alpha = pow2( roughness );\\n\\t\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\t\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\t\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\t\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\t\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\t\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t\\treturn F * ( V * D );\\n\\t}\\n#endif\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\\n\\tvec3 f0 = material.specularColorBlended;\\n\\tfloat f90 = material.specularF90;\\n\\tfloat roughness = material.roughness;\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tF = mix( F, material.iridescenceFresnel, material.iridescence );\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat dotTL = dot( material.anisotropyT, lightDir );\\n\\t\\tfloat dotTV = dot( material.anisotropyT, viewDir );\\n\\t\\tfloat dotTH = dot( material.anisotropyT, halfDir );\\n\\t\\tfloat dotBL = dot( material.anisotropyB, lightDir );\\n\\t\\tfloat dotBV = dot( material.anisotropyB, viewDir );\\n\\t\\tfloat dotBH = dot( material.anisotropyB, halfDir );\\n\\t\\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\\n\\t\\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\\n\\t#else\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t#endif\\n\\treturn F * ( V * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transpose( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenColor * ( D * V );\\n}\\n#endif\\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat r2 = roughness * roughness;\\n\\tfloat rInv = 1.0 / ( roughness + 0.1 );\\n\\tfloat a = -1.9362 + 1.0678 * roughness + 0.4573 * r2 - 0.8469 * rInv;\\n\\tfloat b = -0.6014 + 0.5538 * roughness - 0.4670 * r2 - 0.1255 * rInv;\\n\\tfloat DG = exp( a * dotNV + b );\\n\\treturn saturate( DG );\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\n#ifdef USE_IRIDESCENCE\\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#else\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#endif\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\\n\\t#else\\n\\t\\tvec3 Fr = specularColor;\\n\\t#endif\\n\\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nvec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\\n\\tvec3 singleScatter = BRDF_GGX( lightDir, viewDir, normal, material );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 dfgV = texture2D( dfgLUT, vec2( material.roughness, dotNV ) ).rg;\\n\\tvec2 dfgL = texture2D( dfgLUT, vec2( material.roughness, dotNL ) ).rg;\\n\\tvec3 FssEss_V = material.specularColorBlended * dfgV.x + material.specularF90 * dfgV.y;\\n\\tvec3 FssEss_L = material.specularColorBlended * dfgL.x + material.specularF90 * dfgL.y;\\n\\tfloat Ess_V = dfgV.x + dfgV.y;\\n\\tfloat Ess_L = dfgL.x + dfgL.y;\\n\\tfloat Ems_V = 1.0 - Ess_V;\\n\\tfloat Ems_L = 1.0 - Ess_L;\\n\\tvec3 Favg = material.specularColorBlended + ( 1.0 - material.specularColorBlended ) * 0.047619;\\n\\tvec3 Fms = FssEss_V * FssEss_L * Favg / ( 1.0 - Ems_V * Ems_L * Favg + EPSILON );\\n\\tfloat compensationFactor = Ems_V * Ems_L;\\n\\tvec3 multiScatter = Fms * compensationFactor;\\n\\treturn singleScatter + multiScatter;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometryNormal;\\n\\t\\tvec3 viewDir = geometryViewDir;\\n\\t\\tvec3 position = geometryPosition;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3(    0, 1,    0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColorBlended * t2.x + ( material.specularF90 - material.specularColorBlended ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseContribution * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t\\t#ifdef USE_CLEARCOAT\\n\\t\\t\\tvec3 Ncc = geometryClearcoatNormal;\\n\\t\\t\\tvec2 uvClearcoat = LTC_Uv( Ncc, viewDir, material.clearcoatRoughness );\\n\\t\\t\\tvec4 t1Clearcoat = texture2D( ltc_1, uvClearcoat );\\n\\t\\t\\tvec4 t2Clearcoat = texture2D( ltc_2, uvClearcoat );\\n\\t\\t\\tmat3 mInvClearcoat = mat3(\\n\\t\\t\\t\\tvec3( t1Clearcoat.x, 0, t1Clearcoat.y ),\\n\\t\\t\\t\\tvec3(             0, 1,             0 ),\\n\\t\\t\\t\\tvec3( t1Clearcoat.z, 0, t1Clearcoat.w )\\n\\t\\t\\t);\\n\\t\\t\\tvec3 fresnelClearcoat = material.clearcoatF0 * t2Clearcoat.x + ( material.clearcoatF90 - material.clearcoatF0 ) * t2Clearcoat.y;\\n\\t\\t\\tclearcoatSpecularDirect += lightColor * fresnelClearcoat * LTC_Evaluate( Ncc, viewDir, position, mInvClearcoat, rectCoords );\\n\\t\\t#endif\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n \\n \\t\\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\\n \\n \\t\\tfloat sheenAlbedoV = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\\n \\t\\tfloat sheenAlbedoL = IBLSheenBRDF( geometryNormal, directLight.direction, material.sheenRoughness );\\n \\n \\t\\tfloat sheenEnergyComp = 1.0 - max3( material.sheenColor ) * max( sheenAlbedoV, sheenAlbedoL );\\n \\n \\t\\tirradiance *= sheenEnergyComp;\\n \\n \\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX_Multiscatter( directLight.direction, geometryViewDir, geometryNormal, material );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseContribution );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 diffuse = irradiance * BRDF_Lambert( material.diffuseContribution );\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\\n\\t\\tfloat sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;\\n\\t\\tdiffuse *= sheenEnergyComp;\\n\\t#endif\\n\\treflectedLight.indirectDiffuse += diffuse;\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ) * RECIPROCAL_PI;\\n \\t#endif\\n\\tvec3 singleScatteringDielectric = vec3( 0.0 );\\n\\tvec3 multiScatteringDielectric = vec3( 0.0 );\\n\\tvec3 singleScatteringMetallic = vec3( 0.0 );\\n\\tvec3 multiScatteringMetallic = vec3( 0.0 );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnelDielectric, material.roughness, singleScatteringDielectric, multiScatteringDielectric );\\n\\t\\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.iridescence, material.iridescenceFresnelMetallic, material.roughness, singleScatteringMetallic, multiScatteringMetallic );\\n\\t#else\\n\\t\\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScatteringDielectric, multiScatteringDielectric );\\n\\t\\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.roughness, singleScatteringMetallic, multiScatteringMetallic );\\n\\t#endif\\n\\tvec3 singleScattering = mix( singleScatteringDielectric, singleScatteringMetallic, material.metalness );\\n\\tvec3 multiScattering = mix( multiScatteringDielectric, multiScatteringMetallic, material.metalness );\\n\\tvec3 totalScatteringDielectric = singleScatteringDielectric + multiScatteringDielectric;\\n\\tvec3 diffuse = material.diffuseContribution * ( 1.0 - totalScatteringDielectric );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tvec3 indirectSpecular = radiance * singleScattering;\\n\\tindirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\tvec3 indirectDiffuse = diffuse * cosineWeightedIrradiance;\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\\n\\t\\tfloat sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;\\n\\t\\tindirectSpecular *= sheenEnergyComp;\\n\\t\\tindirectDiffuse *= sheenEnergyComp;\\n\\t#endif\\n\\treflectedLight.indirectSpecular += indirectSpecular;\\n\\treflectedLight.indirectDiffuse += indirectDiffuse;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nvec3 geometryPosition = - vViewPosition;\\nvec3 geometryNormal = normal;\\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\nvec3 geometryClearcoatNormal = vec3( 0.0 );\\n#ifdef USE_CLEARCOAT\\n\\tgeometryClearcoatNormal = clearcoatNormal;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\\n\\tif ( material.iridescenceThickness == 0.0 ) {\\n\\t\\tmaterial.iridescence = 0.0;\\n\\t} else {\\n\\t\\tmaterial.iridescence = saturate( material.iridescence );\\n\\t}\\n\\tif ( material.iridescence > 0.0 ) {\\n\\t\\tmaterial.iridescenceFresnelDielectric = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\\n\\t\\tmaterial.iridescenceFresnelMetallic = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.diffuseColor );\\n\\t\\tmaterial.iridescenceFresnel = mix( material.iridescenceFresnelDielectric, material.iridescenceFresnelMetallic, material.metalness );\\n\\t\\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\\n\\t}\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometryPosition, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) && ( defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_BASIC ) )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tvec4 spotColor;\\n\\tvec3 spotLightCoord;\\n\\tbool inSpotLightMap;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\\n\\t\\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\\n\\t\\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\\n\\t\\t#else\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#endif\\n\\t\\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\\n\\t\\t\\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\\n\\t\\t\\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\\n\\t\\t\\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\\n\\t\\t\\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\\n\\t\\t#endif\\n\\t\\t#undef SPOT_LIGHT_MAP_INDEX\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if defined( USE_LIGHT_PROBES )\\n\\t\\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#ifdef USE_LIGHT_PROBES_GRID\\n\\t\\tvec3 probeWorldPos = ( ( vec4( geometryPosition, 1.0 ) - viewMatrix[ 3 ] ) * viewMatrix ).xyz;\\n\\t\\tvec3 probeWorldNormal = inverseTransformDirection( geometryNormal, viewMatrix );\\n\\t\\tirradiance += getLightProbeGridIrradiance( probeWorldPos, probeWorldNormal );\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t#if defined( STANDARD ) || defined( LAMBERT ) || defined( PHONG )\\n\\t\\t\\tiblIrradiance += getIBLIrradiance( geometryNormal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\\n\\t#else\\n\\t\\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\t#if defined( LAMBERT ) || defined( PHONG )\\n\\t\\tirradiance += iblIrradiance;\\n\\t#endif\\n\\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\";\n\nvar lightprobes_pars_fragment = \"#ifdef USE_LIGHT_PROBES_GRID\\nuniform highp sampler3D probesSH;\\nuniform vec3 probesMin;\\nuniform vec3 probesMax;\\nuniform vec3 probesResolution;\\nvec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) {\\n\\tvec3 res = probesResolution;\\n\\tvec3 gridRange = probesMax - probesMin;\\n\\tvec3 resMinusOne = res - 1.0;\\n\\tvec3 probeSpacing = gridRange / resMinusOne;\\n\\tvec3 samplePos = worldPos + worldNormal * probeSpacing * 0.5;\\n\\tvec3 uvw = clamp( ( samplePos - probesMin ) / gridRange, 0.0, 1.0 );\\n\\tuvw = uvw * resMinusOne / res + 0.5 / res;\\n\\tfloat nz          = res.z;\\n\\tfloat paddedSlices = nz + 2.0;\\n\\tfloat atlasDepth  = 7.0 * paddedSlices;\\n\\tfloat uvZBase     = uvw.z * nz + 1.0;\\n\\tvec4 s0 = texture( probesSH, vec3( uvw.xy, ( uvZBase                       ) / atlasDepth ) );\\n\\tvec4 s1 = texture( probesSH, vec3( uvw.xy, ( uvZBase +       paddedSlices   ) / atlasDepth ) );\\n\\tvec4 s2 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 2.0 * paddedSlices   ) / atlasDepth ) );\\n\\tvec4 s3 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 3.0 * paddedSlices   ) / atlasDepth ) );\\n\\tvec4 s4 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 4.0 * paddedSlices   ) / atlasDepth ) );\\n\\tvec4 s5 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 5.0 * paddedSlices   ) / atlasDepth ) );\\n\\tvec4 s6 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 6.0 * paddedSlices   ) / atlasDepth ) );\\n\\tvec3 c0 = s0.xyz;\\n\\tvec3 c1 = vec3( s0.w, s1.xy );\\n\\tvec3 c2 = vec3( s1.zw, s2.x );\\n\\tvec3 c3 = s2.yzw;\\n\\tvec3 c4 = s3.xyz;\\n\\tvec3 c5 = vec3( s3.w, s4.xy );\\n\\tvec3 c6 = vec3( s4.zw, s5.x );\\n\\tvec3 c7 = s5.yzw;\\n\\tvec3 c8 = s6.xyz;\\n\\tfloat x = worldNormal.x, y = worldNormal.y, z = worldNormal.z;\\n\\tvec3 result = c0 * 0.886227;\\n\\tresult += c1 * 2.0 * 0.511664 * y;\\n\\tresult += c2 * 2.0 * 0.511664 * z;\\n\\tresult += c3 * 2.0 * 0.511664 * x;\\n\\tresult += c4 * 2.0 * 0.429043 * x * y;\\n\\tresult += c5 * 2.0 * 0.429043 * y * z;\\n\\tresult += c6 * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += c7 * 2.0 * 0.429043 * x * z;\\n\\tresult += c8 * 0.429043 * ( x * x - y * y );\\n\\treturn max( result, vec3( 0.0 ) );\\n}\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )\\n\\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGARITHMIC_DEPTH_BUFFER\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGARITHMIC_DEPTH_BUFFER\\n\\tvFragDepth = 1.0 + gl_Position.w;\\n\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\\n\\t#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t#if defined( USE_POINTS_UV )\\n\\t\\tvec2 uv = vUv;\\n\\t#else\\n\\t\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tdiffuseColor *= texture2D( map, uv );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_POINTS_UV )\\n\\tvarying vec2 vUv;\\n#else\\n\\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t\\tuniform mat3 uvTransform;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphinstance_vertex = \"#ifdef USE_INSTANCING_MORPH\\n\\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tmorphTargetInfluences[i] =  texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\\n\\t}\\n#endif\";\n\nvar morphcolor_vertex = \"#if defined( USE_MORPHCOLORS )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t#if defined( USE_COLOR_ALPHA )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t#elif defined( USE_COLOR )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_INSTANCING_MORPH\\n\\t\\tuniform float morphTargetBaseInfluence;\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t#endif\\n\\tuniform sampler2DArray morphTargetsTexture;\\n\\tuniform ivec2 morphTargetsTextureSize;\\n\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t}\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = dFdx( vViewPosition );\\n\\tvec3 fdy = dFdy( vViewPosition );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal *= faceDirection;\\n\\t#endif\\n#endif\\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\\n\\t\\t#if defined( USE_NORMALMAP )\\n\\t\\t\\tvNormalMapUv\\n\\t\\t#elif defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tvClearcoatNormalMapUv\\n\\t\\t#else\\n\\t\\t\\tvUv\\n\\t\\t#endif\\n\\t\\t);\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn[0] *= faceDirection;\\n\\t\\ttbn[1] *= faceDirection;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn2[0] *= faceDirection;\\n\\t\\ttbn2[1] *= faceDirection;\\n\\t#endif\\n#endif\\nvec3 nonPerturbedNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\t#if defined( USE_PACKED_NORMALMAP )\\n\\t\\tmapN = vec3( mapN.xy, sqrt( saturate( 1.0 - dot( mapN.xy, mapN.xy ) ) ) );\\n\\t#endif\\n\\tmapN.xy *= normalScale;\\n\\tnormal = normalize( tbn * mapN );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normal_pars_fragment = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_pars_vertex = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_vertex = \"#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\\n\\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( uv.st );\\n\\t\\tvec2 st1 = dFdy( uv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\\n\\t\\treturn mat3( T * scale, B * scale, N );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = nonPerturbedNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\";\n\nvar iridescence_pars_fragment = \"#ifdef USE_IRIDESCENCEMAP\\n\\tuniform sampler2D iridescenceMap;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform sampler2D iridescenceThicknessMap;\\n#endif\";\n\nvar opaque_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= material.transmissionAlpha;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\\nconst float Inv255 = 1. / 255.;\\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec4( 0., 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec4( 1., 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat af = modf( v * PackFactors.a, vuf );\\n\\tfloat bf = modf( vuf * ShiftRight8, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\\n}\\nvec3 packDepthToRGB( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec3( 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec3( 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat bf = modf( v * PackFactors.b, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\\n}\\nvec2 packDepthToRG( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec2( 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec2( 1., 1. );\\n\\tfloat vuf;\\n\\tfloat gf = modf( v * 256., vuf );\\n\\treturn vec2( vuf * Inv255, gf );\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors4 );\\n}\\nfloat unpackRGBToDepth( const in vec3 v ) {\\n\\treturn dot( v, UnpackFactors3 );\\n}\\nfloat unpackRGToDepth( const in vec2 v ) {\\n\\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\\n}\\nvec4 pack2HalfToRGBA( const in vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( const in vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\t#ifdef USE_REVERSED_DEPTH_BUFFER\\n\\t\\n\\t\\treturn depth * ( far - near ) - far;\\n\\t#else\\n\\t\\treturn depth * ( near - far ) - near;\\n\\t#endif\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\t\\n\\t#ifdef USE_REVERSED_DEPTH_BUFFER\\n\\t\\treturn ( near * far ) / ( ( near - far ) * depth - near );\\n\\t#else\\n\\t\\treturn ( near * far ) / ( ( far - near ) * depth - far );\\n\\t#endif\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_BATCHING\\n\\tmvPosition = batchingMatrix * mvPosition;\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#if NUM_SPOT_LIGHT_MAPS > 0\\n\\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tuniform sampler2DShadow directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\t#else\\n\\t\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\t#endif\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tuniform sampler2DShadow spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\t#else\\n\\t\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\t#endif\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tuniform samplerCubeShadow pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\t#elif defined( SHADOWMAP_TYPE_BASIC )\\n\\t\\t\\tuniform samplerCube pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\t#endif\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\tfloat interleavedGradientNoise( vec2 position ) {\\n\\t\\t\\treturn fract( 52.9829189 * fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) );\\n\\t\\t}\\n\\t\\tvec2 vogelDiskSample( int sampleIndex, int samplesCount, float phi ) {\\n\\t\\t\\tconst float goldenAngle = 2.399963229728653;\\n\\t\\t\\tfloat r = sqrt( ( float( sampleIndex ) + 0.5 ) / float( samplesCount ) );\\n\\t\\t\\tfloat theta = float( sampleIndex ) * goldenAngle + phi;\\n\\t\\t\\treturn vec2( cos( theta ), sin( theta ) ) * r;\\n\\t\\t}\\n\\t#endif\\n\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\tfloat getShadow( sampler2DShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\t\\tfloat shadow = 1.0;\\n\\t\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\t\\tshadowCoord.z += shadowBias;\\n\\t\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\t\\tif ( frustumTest ) {\\n\\t\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\t\\tfloat radius = shadowRadius * texelSize.x;\\n\\t\\t\\t\\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\\n\\t\\t\\t\\tshadow = (\\n\\t\\t\\t\\t\\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 0, 5, phi ) * radius, shadowCoord.z ) ) +\\n\\t\\t\\t\\t\\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 1, 5, phi ) * radius, shadowCoord.z ) ) +\\n\\t\\t\\t\\t\\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 2, 5, phi ) * radius, shadowCoord.z ) ) +\\n\\t\\t\\t\\t\\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 3, 5, phi ) * radius, shadowCoord.z ) ) +\\n\\t\\t\\t\\t\\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 4, 5, phi ) * radius, shadowCoord.z ) )\\n\\t\\t\\t\\t) * 0.2;\\n\\t\\t\\t}\\n\\t\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t\\t}\\n\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\t\\tfloat shadow = 1.0;\\n\\t\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\t\\t#ifdef USE_REVERSED_DEPTH_BUFFER\\n\\t\\t\\t\\tshadowCoord.z -= shadowBias;\\n\\t\\t\\t#else\\n\\t\\t\\t\\tshadowCoord.z += shadowBias;\\n\\t\\t\\t#endif\\n\\t\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\t\\tif ( frustumTest ) {\\n\\t\\t\\t\\tvec2 distribution = texture2D( shadowMap, shadowCoord.xy ).rg;\\n\\t\\t\\t\\tfloat mean = distribution.x;\\n\\t\\t\\t\\tfloat variance = distribution.y * distribution.y;\\n\\t\\t\\t\\t#ifdef USE_REVERSED_DEPTH_BUFFER\\n\\t\\t\\t\\t\\tfloat hard_shadow = step( mean, shadowCoord.z );\\n\\t\\t\\t\\t#else\\n\\t\\t\\t\\t\\tfloat hard_shadow = step( shadowCoord.z, mean );\\n\\t\\t\\t\\t#endif\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tif ( hard_shadow == 1.0 ) {\\n\\t\\t\\t\\t\\tshadow = 1.0;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tvariance = max( variance, 0.0000001 );\\n\\t\\t\\t\\t\\tfloat d = shadowCoord.z - mean;\\n\\t\\t\\t\\t\\tfloat p_max = variance / ( variance + d * d );\\n\\t\\t\\t\\t\\tp_max = clamp( ( p_max - 0.3 ) / 0.65, 0.0, 1.0 );\\n\\t\\t\\t\\t\\tshadow = max( hard_shadow, p_max );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t\\t}\\n\\t#else\\n\\t\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\t\\tfloat shadow = 1.0;\\n\\t\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\t\\t#ifdef USE_REVERSED_DEPTH_BUFFER\\n\\t\\t\\t\\tshadowCoord.z -= shadowBias;\\n\\t\\t\\t#else\\n\\t\\t\\t\\tshadowCoord.z += shadowBias;\\n\\t\\t\\t#endif\\n\\t\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\t\\tif ( frustumTest ) {\\n\\t\\t\\t\\tfloat depth = texture2D( shadowMap, shadowCoord.xy ).r;\\n\\t\\t\\t\\t#ifdef USE_REVERSED_DEPTH_BUFFER\\n\\t\\t\\t\\t\\tshadow = step( depth, shadowCoord.z );\\n\\t\\t\\t\\t#else\\n\\t\\t\\t\\t\\tshadow = step( shadowCoord.z, depth );\\n\\t\\t\\t\\t#endif\\n\\t\\t\\t}\\n\\t\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\tfloat getPointShadow( samplerCubeShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\tvec3 absVec = abs( lightToPosition );\\n\\t\\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\\n\\t\\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\\n\\t\\t\\t#ifdef USE_REVERSED_DEPTH_BUFFER\\n\\t\\t\\t\\tfloat dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\\n\\t\\t\\t\\tdp -= shadowBias;\\n\\t\\t\\t#else\\n\\t\\t\\t\\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\\n\\t\\t\\t\\tdp += shadowBias;\\n\\t\\t\\t#endif\\n\\t\\t\\tfloat texelSize = shadowRadius / shadowMapSize.x;\\n\\t\\t\\tvec3 absDir = abs( bd3D );\\n\\t\\t\\tvec3 tangent = absDir.x > absDir.z ? vec3( 0.0, 1.0, 0.0 ) : vec3( 1.0, 0.0, 0.0 );\\n\\t\\t\\ttangent = normalize( cross( bd3D, tangent ) );\\n\\t\\t\\tvec3 bitangent = cross( bd3D, tangent );\\n\\t\\t\\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\\n\\t\\t\\tvec2 sample0 = vogelDiskSample( 0, 5, phi );\\n\\t\\t\\tvec2 sample1 = vogelDiskSample( 1, 5, phi );\\n\\t\\t\\tvec2 sample2 = vogelDiskSample( 2, 5, phi );\\n\\t\\t\\tvec2 sample3 = vogelDiskSample( 3, 5, phi );\\n\\t\\t\\tvec2 sample4 = vogelDiskSample( 4, 5, phi );\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture( shadowMap, vec4( bd3D + ( tangent * sample0.x + bitangent * sample0.y ) * texelSize, dp ) ) +\\n\\t\\t\\t\\ttexture( shadowMap, vec4( bd3D + ( tangent * sample1.x + bitangent * sample1.y ) * texelSize, dp ) ) +\\n\\t\\t\\t\\ttexture( shadowMap, vec4( bd3D + ( tangent * sample2.x + bitangent * sample2.y ) * texelSize, dp ) ) +\\n\\t\\t\\t\\ttexture( shadowMap, vec4( bd3D + ( tangent * sample3.x + bitangent * sample3.y ) * texelSize, dp ) ) +\\n\\t\\t\\t\\ttexture( shadowMap, vec4( bd3D + ( tangent * sample4.x + bitangent * sample4.y ) * texelSize, dp ) )\\n\\t\\t\\t) * 0.2;\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n\\t#elif defined( SHADOWMAP_TYPE_BASIC )\\n\\tfloat getPointShadow( samplerCube shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tvec3 absVec = abs( lightToPosition );\\n\\t\\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\\n\\t\\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\\n\\t\\t\\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\\n\\t\\t\\tdp += shadowBias;\\n\\t\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t\\tfloat depth = textureCube( shadowMap, bd3D ).r;\\n\\t\\t\\t#ifdef USE_REVERSED_DEPTH_BUFFER\\n\\t\\t\\t\\tdepth = 1.0 - depth;\\n\\t\\t\\t#endif\\n\\t\\t\\tshadow = step( dp, depth );\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n\\t#endif\\n\\t#endif\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\\n\\t#ifdef HAS_NORMAL\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t#else\\n\\t\\tvec3 shadowWorldNormal = vec3( 0.0 );\\n\\t#endif\\n\\tvec4 shadowWorldPosition;\\n#endif\\n#if defined( USE_SHADOWMAP )\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if NUM_SPOT_LIGHT_COORDS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition;\\n\\t\\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t\\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\\n\\t\\t#endif\\n\\t\\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0 && ( defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_BASIC ) )\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tint size = textureSize( boneTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn saturate( toneMappingExposure * color );\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 CineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3(  1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108,  1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605,  1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.6605, - 0.1246, - 0.0182 ),\\n\\tvec3( - 0.5876, 1.1329, - 0.1006 ),\\n\\tvec3( - 0.0728, - 0.0083, 1.1187 )\\n);\\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\\n\\tvec3( 0.6274, 0.0691, 0.0164 ),\\n\\tvec3( 0.3293, 0.9195, 0.0880 ),\\n\\tvec3( 0.0433, 0.0113, 0.8956 )\\n);\\nvec3 agxDefaultContrastApprox( vec3 x ) {\\n\\tvec3 x2 = x * x;\\n\\tvec3 x4 = x2 * x2;\\n\\treturn + 15.5 * x4 * x2\\n\\t\\t- 40.14 * x4 * x\\n\\t\\t+ 31.96 * x4\\n\\t\\t- 6.868 * x2 * x\\n\\t\\t+ 0.4298 * x2\\n\\t\\t+ 0.1191 * x\\n\\t\\t- 0.00232;\\n}\\nvec3 AgXToneMapping( vec3 color ) {\\n\\tconst mat3 AgXInsetMatrix = mat3(\\n\\t\\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\\n\\t\\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\\n\\t\\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\\n\\t);\\n\\tconst mat3 AgXOutsetMatrix = mat3(\\n\\t\\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\\n\\t\\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\\n\\t\\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\\n\\t);\\n\\tconst float AgxMinEv = - 12.47393;\\tconst float AgxMaxEv = 4.026069;\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\\n\\tcolor = AgXInsetMatrix * color;\\n\\tcolor = max( color, 1e-10 );\\tcolor = log2( color );\\n\\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\tcolor = agxDefaultContrastApprox( color );\\n\\tcolor = AgXOutsetMatrix * color;\\n\\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\\n\\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\treturn color;\\n}\\nvec3 NeutralToneMapping( vec3 color ) {\\n\\tconst float StartCompression = 0.8 - 0.04;\\n\\tconst float Desaturation = 0.15;\\n\\tcolor *= toneMappingExposure;\\n\\tfloat x = min( color.r, min( color.g, color.b ) );\\n\\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\\n\\tcolor -= offset;\\n\\tfloat peak = max( color.r, max( color.g, color.b ) );\\n\\tif ( peak < StartCompression ) return color;\\n\\tfloat d = 1. - StartCompression;\\n\\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\\n\\tcolor *= newPeak / peak;\\n\\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\\n\\treturn mix( color, vec3( newPeak ), g );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tmaterial.transmission = transmission;\\n\\tmaterial.transmissionAlpha = 1.0;\\n\\tmaterial.thickness = thickness;\\n\\tmaterial.attenuationDistance = attenuationDistance;\\n\\tmaterial.attenuationColor = attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmitted = getIBLVolumeRefraction(\\n\\t\\tn, v, material.roughness, material.diffuseContribution, material.specularColorBlended, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\\n\\t\\tmaterial.attenuationColor, material.attenuationDistance );\\n\\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\\n\\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tfloat w0( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w1( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a *  a * ( 3.0 * a - 6.0 ) + 4.0 );\\n\\t}\\n\\tfloat w2( float a ){\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w3( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * a );\\n\\t}\\n\\tfloat g0( float a ) {\\n\\t\\treturn w0( a ) + w1( a );\\n\\t}\\n\\tfloat g1( float a ) {\\n\\t\\treturn w2( a ) + w3( a );\\n\\t}\\n\\tfloat h0( float a ) {\\n\\t\\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\\n\\t}\\n\\tfloat h1( float a ) {\\n\\t\\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\\n\\t}\\n\\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\\n\\t\\tuv = uv * texelSize.zw + 0.5;\\n\\t\\tvec2 iuv = floor( uv );\\n\\t\\tvec2 fuv = fract( uv );\\n\\t\\tfloat g0x = g0( fuv.x );\\n\\t\\tfloat g1x = g1( fuv.x );\\n\\t\\tfloat h0x = h0( fuv.x );\\n\\t\\tfloat h1x = h1( fuv.x );\\n\\t\\tfloat h0y = h0( fuv.y );\\n\\t\\tfloat h1y = h1( fuv.y );\\n\\t\\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\\n\\t\\t\\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\\n\\t}\\n\\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\\n\\t\\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\\n\\t\\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\\n\\t\\tvec2 fLodSizeInv = 1.0 / fLodSize;\\n\\t\\tvec2 cLodSizeInv = 1.0 / cLodSize;\\n\\t\\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\\n\\t\\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\\n\\t\\treturn mix( fSample, cSample, fract( lod ) );\\n\\t}\\n\\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\\n\\t\\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\\n\\t}\\n\\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( isinf( attenuationDistance ) ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\\n\\t\\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\\n\\t\\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec4 transmittedLight;\\n\\t\\tvec3 transmittance;\\n\\t\\t#ifdef USE_DISPERSION\\n\\t\\t\\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\\n\\t\\t\\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\\n\\t\\t\\tfor ( int i = 0; i < 3; i ++ ) {\\n\\t\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\\n\\t\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\t\\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\\n\\t\\t\\t\\ttransmittedLight[ i ] = transmissionSample[ i ];\\n\\t\\t\\t\\ttransmittedLight.a += transmissionSample.a;\\n\\t\\t\\t\\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\\n\\t\\t\\t}\\n\\t\\t\\ttransmittedLight.a /= 3.0;\\n\\t\\t#else\\n\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\t\\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\t#endif\\n\\t\\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform mat3 mapTransform;\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform mat3 alphaMapTransform;\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tuniform mat3 lightMapTransform;\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tuniform mat3 aoMapTransform;\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tuniform mat3 bumpMapTransform;\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tuniform mat3 normalMapTransform;\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tuniform mat3 displacementMapTransform;\\n\\tvarying vec2 vDisplacementMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tuniform mat3 emissiveMapTransform;\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tuniform mat3 metalnessMapTransform;\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tuniform mat3 roughnessMapTransform;\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tuniform mat3 anisotropyMapTransform;\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tuniform mat3 clearcoatMapTransform;\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform mat3 clearcoatNormalMapTransform;\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform mat3 clearcoatRoughnessMapTransform;\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tuniform mat3 sheenColorMapTransform;\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tuniform mat3 sheenRoughnessMapTransform;\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tuniform mat3 iridescenceMapTransform;\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform mat3 iridescenceThicknessMapTransform;\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tuniform mat3 specularMapTransform;\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tuniform mat3 specularColorMapTransform;\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tuniform mat3 specularIntensityMapTransform;\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvUv = vec3( uv, 1 ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_BATCHING\\n\\t\\tworldPosition = batchingMatrix * worldPosition;\\n\\t#endif\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$h = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nconst fragment$h = \"uniform sampler2D t2D;\\nuniform float backgroundIntensity;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n}\";\n\nconst vertex$g = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$g = \"#ifdef ENVMAP_TYPE_CUBE\\n\\tuniform samplerCube envMap;\\n#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\tuniform sampler2D envMap;\\n#endif\\nuniform float backgroundBlurriness;\\nuniform float backgroundIntensity;\\nuniform mat3 backgroundRotation;\\nvarying vec3 vWorldDirection;\\n#include <cube_uv_reflection_fragment>\\nvoid main() {\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 texColor = textureCube( envMap, backgroundRotation * vWorldDirection );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\\n\\t#else\\n\\t\\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n}\";\n\nconst vertex$f = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$f = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\nvoid main() {\\n\\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\\n\\tgl_FragColor = texColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n}\";\n\nconst vertex$e = \"#include <common>\\n#include <batching_pars_vertex>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <batching_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nconst fragment$e = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <clipping_planes_fragment>\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#ifdef USE_REVERSED_DEPTH_BUFFER\\n\\t\\tfloat fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];\\n\\t#else\\n\\t\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;\\n\\t#endif\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#elif DEPTH_PACKING == 3202\\n\\t\\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\\n\\t#elif DEPTH_PACKING == 3203\\n\\t\\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\\n\\t#endif\\n}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <batching_pars_vertex>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <batching_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nconst fragment$d = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <clipping_planes_fragment>\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = vec4( dist, 0.0, 0.0, 1.0 );\\n}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nconst fragment$b = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\nconst vertex$a = \"#include <common>\\n#include <batching_pars_vertex>\\n#include <uv_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <batching_vertex>\\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinbase_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <batching_pars_vertex>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <batching_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nconst fragment$9 = \"#define LAMBERT\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_lambert_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_lambert_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <batching_pars_vertex>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <batching_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <normal_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include <common>\\n#include <batching_pars_vertex>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <batching_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include <uv_pars_fragment>\\n#include <normal_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( normalize( normal ) * 0.5 + 0.5, diffuseColor.a );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <batching_pars_vertex>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <batching_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include <common>\\n#include <batching_pars_vertex>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <batching_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define USE_SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef USE_SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_DISPERSION\\n\\tuniform float dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tuniform float iridescence;\\n\\tuniform float iridescenceIOR;\\n\\tuniform float iridescenceThicknessMinimum;\\n\\tuniform float iridescenceThicknessMaximum;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\tuniform vec2 anisotropyVector;\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tuniform sampler2D anisotropyMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <iridescence_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_physical_pars_fragment>\\n#include <transmission_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <clearcoat_pars_fragment>\\n#include <iridescence_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <clearcoat_normal_fragment_begin>\\n\\t#include <clearcoat_normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include <transmission_fragment>\\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_SHEEN\\n \\n\\t\\toutgoingLight = outgoingLight + sheenSpecularDirect + sheenSpecularIndirect;\\n \\n \\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\\n\\t#endif\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <batching_pars_vertex>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <batching_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_toon_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_toon_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n#ifdef USE_POINTS_UV\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\nvoid main() {\\n\\t#ifdef USE_POINTS_UV\\n\\t\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\t#endif\\n\\t#include <color_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\nconst vertex$2 = \"#include <common>\\n#include <batching_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <batching_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphinstance_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <logdepthbuf_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\t#include <logdepthbuf_fragment>\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\tvec4 mvPosition = modelViewMatrix[ 3 ];\\n\\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n}\";\n\nconst ShaderChunk = {\n\talphahash_fragment: alphahash_fragment,\n\talphahash_pars_fragment: alphahash_pars_fragment,\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbatching_pars_vertex: batching_pars_vertex,\n\tbatching_vertex: batching_vertex,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tcolorspace_fragment: colorspace_fragment,\n\tcolorspace_pars_fragment: colorspace_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlightprobes_pars_fragment: lightprobes_pars_fragment,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphinstance_vertex: morphinstance_vertex,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\topaque_fragment: opaque_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$h,\n\tbackground_frag: fragment$h,\n\tbackgroundCube_vert: vertex$g,\n\tbackgroundCube_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistance_vert: vertex$d,\n\tdistance_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n// Uniforms library for shared webgl shaders\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\t\tspecularMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tenvMapRotation: { value: /*@__PURE__*/ new Matrix3() },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 }, // basic, lambert, phong\n\t\tdfgLUT: { value: null } // DFG LUT for physically-based rendering\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 },\n\t\taoMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 },\n\t\tlightMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null },\n\t\temissiveMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null },\n\t\tmetalnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null },\n\t\troughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null },\n\n\t\tprobesSH: { value: null },\n\t\tprobesMin: { value: /*@__PURE__*/ new Vector3() },\n\t\tprobesMax: { value: /*@__PURE__*/ new Vector3() },\n\t\tprobesResolution: { value: /*@__PURE__*/ new Vector3() }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tenvMapIntensity: { value: 1 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 },\n\t\t\t\tenvMapIntensity: { value: 1 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t\tbackgroundIntensity: { value: 1 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tbackgroundCube: {\n\n\t\tuniforms: {\n\t\t\tenvMap: { value: null },\n\t\t\tbackgroundBlurriness: { value: 0 },\n\t\t\tbackgroundIntensity: { value: 1 },\n\t\t\tbackgroundRotation: { value: /*@__PURE__*/ new Matrix3() }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.backgroundCube_vert,\n\t\tfragmentShader: ShaderChunk.backgroundCube_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: -1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistance: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distance_vert,\n\t\tfragmentShader: ShaderChunk.distance_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tclearcoatNormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tdispersion: { value: 0 },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tiridescenceThicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\tsheenRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tthicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t\tspecularColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularIntensityMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tanisotropyVector: { value: /*@__PURE__*/ new Vector2() },\n\t\t\tanisotropyMap: { value: null },\n\t\t\tanisotropyMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nconst _rgb = { r: 0, b: 0, g: 0 };\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\nconst _m$1 = /*@__PURE__*/ new Matrix3();\n\n_m$1.set( -1, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0 );\n\nfunction WebGLBackground( renderer, environments, state, objects, alpha, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = alpha === true ? 0 : 1;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction getBackground( scene ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tconst usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background\n\t\t\tbackground = environments.get( background, usePMREM );\n\n\t\t}\n\n\t\treturn background;\n\n\t}\n\n\tfunction render( scene ) {\n\n\t\tlet forceClear = false;\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tconst environmentBlendMode = renderer.xr.getEnvironmentBlendMode();\n\n\t\tif ( environmentBlendMode === 'additive' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 1, premultipliedAlpha );\n\n\t\t} else if ( environmentBlendMode === 'alpha-blend' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 0, premultipliedAlpha );\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\t// buffers might not be writable which is required to ensure a correct clear\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t}\n\n\tfunction addToRenderList( renderList, scene ) {\n\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.backgroundCube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.backgroundCube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false,\n\t\t\t\t\t\tallowOverride: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// add \"envMap\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;\n\t\t\tboxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\n\n\t\t\t// note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()\n\t\t\tboxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1$1.makeRotationFromEuler( scene.backgroundRotation ) ).transpose();\n\n\t\t\tif ( background.isCubeTexture && background.isRenderTargetTexture === false ) {\n\n\t\t\t\tboxMesh.material.uniforms.backgroundRotation.value.premultiply( _m$1 );\n\n\t\t\t}\n\n\n\t\t\tboxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tboxMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false,\n\t\t\t\t\t\tallowOverride: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// add \"map\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\t\t\tplaneMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tplaneMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tplaneMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tcolor.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) );\n\n\t\tstate.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );\n\n\t}\n\n\tfunction dispose() {\n\n\t\tif ( boxMesh !== undefined ) {\n\n\t\t\tboxMesh.geometry.dispose();\n\t\t\tboxMesh.material.dispose();\n\n\t\t\tboxMesh = undefined;\n\n\t\t}\n\n\t\tif ( planeMesh !== undefined ) {\n\n\t\t\tplaneMesh.geometry.dispose();\n\t\t\tplaneMesh.material.dispose();\n\n\t\t\tplaneMesh = undefined;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render,\n\t\taddToRenderList: addToRenderList,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, attributes ) {\n\n\tconst maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\tlet forceUpdate = false;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tconst state = getBindingState( object, geometry, program, material );\n\n\t\tif ( currentState !== state ) {\n\n\t\t\tcurrentState = state;\n\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t}\n\n\t\tupdateBuffers = needsUpdate( object, geometry, program, index );\n\n\t\tif ( updateBuffers ) saveCache( object, geometry, program, index );\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tif ( updateBuffers || forceUpdate ) {\n\n\t\t\tforceUpdate = false;\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\treturn gl.createVertexArray();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\treturn gl.bindVertexArray( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\treturn gl.deleteVertexArray( vao );\n\n\t}\n\n\tfunction getBindingState( object, geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet objectMap = bindingStates[ geometry.id ];\n\n\t\tif ( objectMap === undefined ) {\n\n\t\t\tobjectMap = {};\n\t\t\tbindingStates[ geometry.id ] = objectMap;\n\n\t\t}\n\n\t\t// Each InstancedMesh requires unique binding states because it contains instanced attributes.\n\t\tconst objectId = ( object.isInstancedMesh === true ) ? object.id : 0;\n\n\t\tlet programMap = objectMap[ objectId ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tobjectMap[ objectId ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( object, geometry, program, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ name ];\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( object, geometry, program, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute && attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ name ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tgl.vertexAttribDivisor( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset, integer ) {\n\n\t\tif ( integer === true ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t// check for integer attributes\n\n\t\t\t\t\tconst integer = ( type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType );\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst objectMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const objectId in objectMap ) {\n\n\t\t\t\tconst programMap = objectMap[ objectId ];\n\n\t\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst objectMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const objectId in objectMap ) {\n\n\t\t\tconst programMap = objectMap[ objectId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst objectMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const objectId in objectMap ) {\n\n\t\t\t\tconst programMap = objectMap[ objectId ];\n\n\t\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ program.id ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfObject( object ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst objectMap = bindingStates[ geometryId ];\n\n\t\t\tconst objectId = ( object.isInstancedMesh === true ) ? object.id : 0;\n\n\t\t\tconst programMap = objectMap[ objectId ];\n\n\t\t\tif ( programMap === undefined ) continue;\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete objectMap[ objectId ];\n\n\t\t\tif ( Object.keys( objectMap ).length === 0 ) {\n\n\t\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\t\tforceUpdate = true;\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatibility\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfObject: releaseStatesOfObject,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawArraysInstanced( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters, utils ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction textureFormatReadable( textureFormat ) {\n\n\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction textureTypeReadable( textureType ) {\n\n\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );\n\n\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\ttextureType !== FloatType && ! halfFloatSupportedByExt ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\twarn( 'WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\tconst reversedDepthBuffer = parameters.reversedDepthBuffer === true && extensions.has( 'EXT_clip_control' );\n\n\tif ( parameters.reversedDepthBuffer === true && reversedDepthBuffer === false ) {\n\n\t\twarn( 'WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.' );\n\n\t}\n\n\tconst maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tconst maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tconst maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tconst maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tconst maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tconst maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tconst maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tconst maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tconst maxSamples = gl.getParameter( gl.MAX_SAMPLES );\n\tconst samples = gl.getParameter( gl.SAMPLES );\n\n\treturn {\n\n\t\tisWebGL2: true, // keeping this for backwards compatibility\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\ttextureFormatReadable: textureFormatReadable,\n\t\ttextureTypeReadable: textureTypeReadable,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\t\treversedDepthBuffer: reversedDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tmaxSamples: maxSamples,\n\n\t\tsamples: samples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\n\t};\n\n\tthis.setGlobalState = function ( planes, camera ) {\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips.\n// Used for scene blur in fromScene() method.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\n// Used for scene blur in fromScene() method.\nconst MAX_SAMPLES = 20;\n\n// GGX VNDF importance sampling configuration\nconst GGX_SAMPLES = 256;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\nlet _oldActiveCubeFace = 0;\nlet _oldActiveMipmapLevel = 0;\nlet _oldXrEnabled = false;\n\nconst _origin = /*@__PURE__*/ new Vector3();\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * The prefiltering uses GGX VNDF (Visible Normal Distribution Function)\n * importance sampling based on \"Sampling the GGX Distribution of Visible Normals\"\n * (Heitz, 2018) to generate environment maps that accurately match the GGX BRDF\n * used in material rendering for physically-based image-based lighting.\n */\nclass PMREMGenerator {\n\n\t/**\n\t * Constructs a new PMREM generator.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t */\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\t\tthis._lodMeshes = [];\n\n\t\tthis._backgroundBox = null;\n\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\n\t\tthis._blurMaterial = null;\n\t\tthis._ggxMaterial = null;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety.\n\t *\n\t * @param {Scene} scene - The scene to be captured.\n\t * @param {number} [sigma=0] - The blur radius in radians.\n\t * @param {number} [near=0.1] - The near plane distance.\n\t * @param {number} [far=100] - The far plane distance.\n\t * @param {Object} [options={}] - The configuration options.\n\t * @param {number} [options.size=256] - The texture size of the PMREM.\n\t * @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.\n\t * @return {WebGLRenderTarget} The resulting PMREM.\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {\n\n\t\tconst {\n\t\t\tsize = 256,\n\t\t\tposition = _origin,\n\t\t} = options;\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tthis._setSize( size );\n\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t *\n\t * @param {Texture} equirectangular - The equirectangular texture to be converted.\n\t * @param {?WebGLRenderTarget} [renderTarget=null] - The render target to use.\n\t * @return {WebGLRenderTarget} The resulting PMREM.\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t *\n\t * @param {Texture} cubemap - The cubemap texture to be converted.\n\t * @param {?WebGLRenderTarget} [renderTarget=null] - The render target to use.\n\t * @return {WebGLRenderTarget} The resulting PMREM.\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tthis._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tthis._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\n\t\tif ( this._backgroundBox !== null ) {\n\n\t\t\tthis._backgroundBox.geometry.dispose();\n\t\t\tthis._backgroundBox.material.dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\t\tif ( this._ggxMaterial !== null ) this._ggxMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodMeshes.length; i ++ ) {\n\n\t\t\tthis._lodMeshes[ i ].geometry.dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );\n\t\tthis._renderer.xr.enabled = _oldXrEnabled;\n\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTargets();\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst params = {\n\t\t\tmagFilter: LinearFilter,\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: HalfFloatType,\n\t\t\tformat: RGBAFormat,\n\t\t\tcolorSpace: LinearSRGBColorSpace,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height, params );\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( width, height, params );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, width, height );\n\t\t\tthis._ggxMaterial = _getGGXShader( _lodMax, width, height );\n\n\t\t}\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst mesh = new Mesh( new BufferGeometry(), material );\n\t\tthis._renderer.compile( mesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, -1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, -1, -1, -1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.autoClear = false;\n\n\t\t// https://github.com/mrdoob/three.js/issues/31413#issuecomment-3095966812\n\t\tconst reversedDepthBuffer = renderer.state.buffers.depth.getReversed();\n\n\t\tif ( reversedDepthBuffer ) {\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\t\trenderer.clearDepth();\n\t\t\trenderer.setRenderTarget( null );\n\n\t\t}\n\n\t\tif ( this._backgroundBox === null ) {\n\n\t\t\tthis._backgroundBox = new Mesh(\n\t\t\t\tnew BoxGeometry(),\n\t\t\t\tnew MeshBasicMaterial( {\n\t\t\t\t\tname: 'PMREM.Background',\n\t\t\t\t\tside: BackSide,\n\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\tdepthTest: false,\n\t\t\t\t} )\n\t\t\t);\n\n\t\t}\n\n\t\tconst backgroundBox = this._backgroundBox;\n\t\tconst backgroundMaterial = backgroundBox.material;\n\n\t\tlet useSolidColor = false;\n\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.position.set( position.x, position.y, position.z );\n\t\t\t\tcubeCamera.lookAt( position.x + forwardSign[ i ], position.y, position.z );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.position.set( position.x, position.y, position.z );\n\t\t\t\tcubeCamera.lookAt( position.x, position.y + forwardSign[ i ], position.z );\n\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.position.set( position.x, position.y, position.z );\n\t\t\t\tcubeCamera.lookAt( position.x, position.y, position.z + forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\t_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\n\t\t\t}\n\n\t\t\tthis._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? -1 : 1;\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\n\t\tconst mesh = this._lodMeshes[ 0 ];\n\t\tmesh.material = material;\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tconst size = this._cubeSize;\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tconst n = this._lodMeshes.length;\n\n\t\t// Use GGX VNDF importance sampling\n\t\tfor ( let i = 1; i < n; i ++ ) {\n\n\t\t\tthis._applyGGXFilter( cubeUVRenderTarget, i - 1, i );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * Applies GGX VNDF importance sampling filter to generate a prefiltered environment map.\n\t * Uses Monte Carlo integration with VNDF importance sampling to accurately represent the\n\t * GGX BRDF for physically-based rendering. Reads from the previous LOD level and\n\t * applies incremental roughness filtering to avoid over-blurring.\n\t *\n\t * @private\n\t * @param {WebGLRenderTarget} cubeUVRenderTarget\n\t * @param {number} lodIn - Source LOD level to read from\n\t * @param {number} lodOut - Target LOD level to write to\n\t */\n\t_applyGGXFilter( cubeUVRenderTarget, lodIn, lodOut ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tconst ggxMaterial = this._ggxMaterial;\n\t\tconst ggxMesh = this._lodMeshes[ lodOut ];\n\t\tggxMesh.material = ggxMaterial;\n\n\t\tconst ggxUniforms = ggxMaterial.uniforms;\n\n\t\t// Calculate incremental roughness between LOD levels\n\t\tconst targetRoughness = lodOut / ( this._lodMeshes.length - 1 );\n\t\tconst sourceRoughness = lodIn / ( this._lodMeshes.length - 1 );\n\t\tconst incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );\n\n\t\t// Apply blur strength mapping for better quality across the roughness range\n\t\tconst blurStrength = 0.0 + targetRoughness * 1.25;\n\t\tconst adjustedRoughness = incrementalRoughness * blurStrength;\n\n\t\t// Calculate viewport position based on output LOD level\n\t\tconst { _lodMax } = this;\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t// Read from previous LOD with incremental roughness\n\t\tggxUniforms[ 'envMap' ].value = cubeUVRenderTarget.texture;\n\t\tggxUniforms[ 'roughness' ].value = adjustedRoughness;\n\t\tggxUniforms[ 'mipInt' ].value = _lodMax - lodIn; // Sample from input LOD\n\n\t\t_setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( pingPongRenderTarget );\n\t\trenderer.render( ggxMesh, _flatCamera );\n\n\t\t// Copy from pingPong back to cubeUV (simple direct copy)\n\t\tggxUniforms[ 'envMap' ].value = pingPongRenderTarget.texture;\n\t\tggxUniforms[ 'roughness' ].value = 0.0; // Direct copy\n\t\tggxUniforms[ 'mipInt' ].value = _lodMax - lodOut; // Read from the level we just wrote\n\n\t\t_setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( ggxMesh, _flatCamera );\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t *\n\t * Used for initial scene blur in fromScene() method when sigma > 0.\n\t *\n\t * @private\n\t * @param {WebGLRenderTarget} cubeUVRenderTarget\n\t * @param {number} lodIn\n\t * @param {number} lodOut\n\t * @param {number} sigma\n\t * @param {Vector3} [poleAxis]\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\terror(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = this._lodMeshes[ lodOut ];\n\t\tblurMesh.material = blurMaterial;\n\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\twarn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\n\n\nfunction _createPlanes( lodMax ) {\n\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\tconst lodMeshes = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : -1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodMeshes.push( new Mesh( planes, null ) );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodMeshes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height, params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getGGXShader( lodMax, width, height ) {\n\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'PMREMGGXConvolution',\n\n\t\tdefines: {\n\t\t\t'GGX_SAMPLES': GGX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'roughness': { value: 0.0 },\n\t\t\t'mipInt': { value: 0 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision highp float;\n\t\t\tprecision highp int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform float roughness;\n\t\t\tuniform float mipInt;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\t#define PI 3.14159265359\n\n\t\t\t// Van der Corput radical inverse\n\t\t\tfloat radicalInverse_VdC(uint bits) {\n\t\t\t\tbits = (bits << 16u) | (bits >> 16u);\n\t\t\t\tbits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);\n\t\t\t\tbits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);\n\t\t\t\tbits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);\n\t\t\t\tbits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);\n\t\t\t\treturn float(bits) * 2.3283064365386963e-10; // / 0x100000000\n\t\t\t}\n\n\t\t\t// Hammersley sequence\n\t\t\tvec2 hammersley(uint i, uint N) {\n\t\t\t\treturn vec2(float(i) / float(N), radicalInverse_VdC(i));\n\t\t\t}\n\n\t\t\t// GGX VNDF importance sampling (Eric Heitz 2018)\n\t\t\t// \"Sampling the GGX Distribution of Visible Normals\"\n\t\t\t// https://jcgt.org/published/0007/04/01/\n\t\t\tvec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {\n\t\t\t\tfloat alpha = roughness * roughness;\n\n\t\t\t\t// Section 4.1: Orthonormal basis\n\t\t\t\tvec3 T1 = vec3(1.0, 0.0, 0.0);\n\t\t\t\tvec3 T2 = cross(V, T1);\n\n\t\t\t\t// Section 4.2: Parameterization of projected area\n\t\t\t\tfloat r = sqrt(Xi.x);\n\t\t\t\tfloat phi = 2.0 * PI * Xi.y;\n\t\t\t\tfloat t1 = r * cos(phi);\n\t\t\t\tfloat t2 = r * sin(phi);\n\t\t\t\tfloat s = 0.5 * (1.0 + V.z);\n\t\t\t\tt2 = (1.0 - s) * sqrt(1.0 - t1 * t1) + s * t2;\n\n\t\t\t\t// Section 4.3: Reprojection onto hemisphere\n\t\t\t\tvec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * V;\n\n\t\t\t\t// Section 3.4: Transform back to ellipsoid configuration\n\t\t\t\treturn normalize(vec3(alpha * Nh.x, alpha * Nh.y, max(0.0, Nh.z)));\n\t\t\t}\n\n\t\t\tvoid main() {\n\t\t\t\tvec3 N = normalize(vOutputDirection);\n\t\t\t\tvec3 V = N; // Assume view direction equals normal for pre-filtering\n\n\t\t\t\tvec3 prefilteredColor = vec3(0.0);\n\t\t\t\tfloat totalWeight = 0.0;\n\n\t\t\t\t// For very low roughness, just sample the environment directly\n\t\t\t\tif (roughness < 0.001) {\n\t\t\t\t\tgl_FragColor = vec4(bilinearCubeUV(envMap, N, mipInt), 1.0);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Tangent space basis for VNDF sampling\n\t\t\t\tvec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\n\t\t\t\tvec3 tangent = normalize(cross(up, N));\n\t\t\t\tvec3 bitangent = cross(N, tangent);\n\n\t\t\t\tfor(uint i = 0u; i < uint(GGX_SAMPLES); i++) {\n\t\t\t\t\tvec2 Xi = hammersley(i, uint(GGX_SAMPLES));\n\n\t\t\t\t\t// For PMREM, V = N, so in tangent space V is always (0, 0, 1)\n\t\t\t\t\tvec3 H_tangent = importanceSampleGGX_VNDF(Xi, vec3(0.0, 0.0, 1.0), roughness);\n\n\t\t\t\t\t// Transform H back to world space\n\t\t\t\t\tvec3 H = normalize(tangent * H_tangent.x + bitangent * H_tangent.y + N * H_tangent.z);\n\t\t\t\t\tvec3 L = normalize(2.0 * dot(V, H) * H - V);\n\n\t\t\t\t\tfloat NdotL = max(dot(N, L), 0.0);\n\n\t\t\t\t\tif(NdotL > 0.0) {\n\t\t\t\t\t\t// Sample environment at fixed mip level\n\t\t\t\t\t\t// VNDF importance sampling handles the distribution filtering\n\t\t\t\t\t\tvec3 sampleColor = bilinearCubeUV(envMap, L, mipInt);\n\n\t\t\t\t\t\t// Weight by NdotL for the split-sum approximation\n\t\t\t\t\t\t// VNDF PDF naturally accounts for the visible microfacet distribution\n\t\t\t\t\t\tprefilteredColor += sampleColor * NdotL;\n\t\t\t\t\t\ttotalWeight += NdotL;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (totalWeight > 0.0) {\n\t\t\t\t\tprefilteredColor = prefilteredColor / totalWeight;\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = vec4(prefilteredColor, 1.0);\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = new Float32Array( MAX_SAMPLES );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: {\n\t\t\t'n': MAX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include <common>\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCubemapMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'flipEnvMap': { value: -1 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\n/**\n * A cube render target used in context of {@link WebGLRenderer}.\n *\n * @augments WebGLRenderTarget\n */\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\t/**\n\t * Constructs a new cube render target.\n\t *\n\t * @param {number} [size=1] - The size of the render target.\n\t * @param {RenderTarget~Options} [options] - The configuration object.\n\t */\n\tconstructor( size = 1, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWebGLCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\t/**\n\t\t * Overwritten with a different texture type.\n\t\t *\n\t\t * @type {DataArrayTexture}\n\t\t */\n\t\tthis.texture = new CubeTexture( images );\n\t\tthis._setTextureOptions( options );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n\t/**\n\t * Converts the given equirectangular texture to a cube map.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {Texture} texture - The equirectangular texture.\n\t * @return {WebGLCubeRenderTarget} A reference to this cube render target.\n\t */\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.colorSpace = texture.colorSpace;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include <begin_vertex>\n\t\t\t\t\t#include <project_vertex>\n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Clears this cube render target.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.\n\t * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.\n\t * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.\n\t */\n\tclear( renderer, color = true, depth = true, stencil = true ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nfunction WebGLEnvironments( renderer ) {\n\n\tlet cubeMaps = new WeakMap();\n\tlet pmremMaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture, usePMREM = false ) {\n\n\t\tif ( texture === null || texture === undefined ) return null;\n\n\t\tif ( usePMREM ) {\n\n\t\t\treturn getPMREM( texture );\n\n\t\t}\n\n\t\treturn getCube( texture );\n\n\t}\n\n\tfunction getCube( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubeMaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubeMaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubeMaps.set( texture, renderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onCubemapDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction getPMREM( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\tlet renderTarget = pmremMaps.get( texture );\n\n\t\t\t\tconst currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;\n\n\t\t\t\tif ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {\n\n\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );\n\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\tpmremMaps.set( texture, renderTarget );\n\n\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( renderTarget !== undefined ) {\n\n\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\t\t\tpmremMaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onPMREMDispose );\n\n\t\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\t}\n\n\tfunction onCubemapDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onCubemapDispose );\n\n\t\tconst cubemap = cubeMaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubeMaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction onPMREMDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onPMREMDispose );\n\n\t\tconst pmrem = pmremMaps.get( texture );\n\n\t\tif ( pmrem !== undefined ) {\n\n\t\t\tpmremMaps.delete( texture );\n\t\t\tpmrem.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeMaps = new WeakMap();\n\t\tpmremMaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tconst extension = gl.getExtension( name );\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function () {\n\n\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\t\t\tgetExtension( 'WEBGL_clip_cull_distance' );\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\t\t\tgetExtension( 'WEBGL_multisampled_render_to_texture' );\n\t\t\tgetExtension( 'WEBGL_render_shared_exponent' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\twarnOnce( 'WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryPosition === undefined ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// check whether a 32 bit or 16 bit buffer is required to store the indices\n\t\t// account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\t\tconst attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\terror( 'WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector4();\n\n\tfunction update( object, geometry, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// the following encodes morph targets into an array of data textures. Each layer represents a single morph target.\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet entry = morphTextures.get( geometry );\n\n\t\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\t\t\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\t\tlet vertexDataCount = 0;\n\n\t\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\t\tlet height = 1;\n\n\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t}\n\n\t\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\t\tconst texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\t\ttexture.type = FloatType;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\t// fill buffer\n\n\t\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 8 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 9 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 10 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tentry = {\n\t\t\t\tcount: morphTargetsCount,\n\t\t\t\ttexture: texture,\n\t\t\t\tsize: new Vector2( width, height )\n\t\t\t};\n\n\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\tfunction disposeTexture() {\n\n\t\t\t\ttexture.dispose();\n\n\t\t\t\tmorphTextures.delete( geometry );\n\n\t\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t\t}\n\n\t\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t\t}\n\n\t\t//\n\t\tif ( object.isInstancedMesh === true && object.morphTexture !== null ) {\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );\n\n\t\t} else {\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, bindingStates, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tif ( updateMap.get( object ) !== frame ) {\n\n\t\t\t\tattributes.update( object.instanceMatrix, gl.ARRAY_BUFFER );\n\n\t\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\t\tattributes.update( object.instanceColor, gl.ARRAY_BUFFER );\n\n\t\t\t\t}\n\n\t\t\t\tupdateMap.set( object, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( updateMap.get( skeleton ) !== frame ) {\n\n\t\t\t\tskeleton.update();\n\n\t\t\t\tupdateMap.set( skeleton, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tbindingStates.releaseStatesOfObject( instancedMesh );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nconst toneMappingMap = {\n\t[ LinearToneMapping ]: 'LINEAR_TONE_MAPPING',\n\t[ ReinhardToneMapping ]: 'REINHARD_TONE_MAPPING',\n\t[ CineonToneMapping ]: 'CINEON_TONE_MAPPING',\n\t[ ACESFilmicToneMapping ]: 'ACES_FILMIC_TONE_MAPPING',\n\t[ AgXToneMapping ]: 'AGX_TONE_MAPPING',\n\t[ NeutralToneMapping ]: 'NEUTRAL_TONE_MAPPING',\n\t[ CustomToneMapping ]: 'CUSTOM_TONE_MAPPING'\n};\n\nfunction WebGLOutput( type, width, height, depth, stencil ) {\n\n\t// render targets for scene and post-processing\n\tconst targetA = new WebGLRenderTarget( width, height, {\n\t\ttype: type,\n\t\tdepthBuffer: depth,\n\t\tstencilBuffer: stencil,\n\t\tdepthTexture: depth ? new DepthTexture( width, height ) : undefined\n\t} );\n\n\tconst targetB = new WebGLRenderTarget( width, height, {\n\t\ttype: HalfFloatType,\n\t\tdepthBuffer: false,\n\t\tstencilBuffer: false\n\t} );\n\n\t// create fullscreen triangle geometry\n\tconst geometry = new BufferGeometry();\n\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ -1, 3, 0, -1, -1, 0, 3, -1, 0 ], 3 ) );\n\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\n\t// create output material with tone mapping support\n\tconst material = new RawShaderMaterial( {\n\t\tuniforms: {\n\t\t\ttDiffuse: { value: null }\n\t\t},\n\t\tvertexShader: /* glsl */`\n\t\t\tprecision highp float;\n\n\t\t\tuniform mat4 modelViewMatrix;\n\t\t\tuniform mat4 projectionMatrix;\n\n\t\t\tattribute vec3 position;\n\t\t\tattribute vec2 uv;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main() {\n\t\t\t\tvUv = uv;\n\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t}`,\n\t\tfragmentShader: /* glsl */`\n\t\t\tprecision highp float;\n\n\t\t\tuniform sampler2D tDiffuse;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\t#include <tonemapping_pars_fragment>\n\t\t\t#include <colorspace_pars_fragment>\n\n\t\t\tvoid main() {\n\t\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t\t#ifdef LINEAR_TONE_MAPPING\n\t\t\t\t\tgl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( REINHARD_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( CINEON_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = CineonToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( ACES_FILMIC_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( AGX_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( NEUTRAL_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( CUSTOM_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb );\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef SRGB_TRANSFER\n\t\t\t\t\tgl_FragColor = sRGBTransferOETF( gl_FragColor );\n\t\t\t\t#endif\n\t\t\t}`,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\t} );\n\n\tconst mesh = new Mesh( geometry, material );\n\tconst camera = new OrthographicCamera( -1, 1, 1, -1, 0, 1 );\n\n\tlet _outputColorSpace = null;\n\tlet _outputToneMapping = null;\n\tlet _isCompositing = false;\n\tlet _savedToneMapping;\n\tlet _savedRenderTarget = null;\n\tlet _effects = [];\n\tlet _hasRenderPass = false;\n\n\tthis.setSize = function ( width, height ) {\n\n\t\ttargetA.setSize( width, height );\n\t\ttargetB.setSize( width, height );\n\n\t\tfor ( let i = 0; i < _effects.length; i ++ ) {\n\n\t\t\tconst effect = _effects[ i ];\n\t\t\tif ( effect.setSize ) effect.setSize( width, height );\n\n\t\t}\n\n\t};\n\n\tthis.setEffects = function ( effects ) {\n\n\t\t_effects = effects;\n\t\t_hasRenderPass = _effects.length > 0 && _effects[ 0 ].isRenderPass === true;\n\n\t\tconst width = targetA.width;\n\t\tconst height = targetA.height;\n\n\t\tfor ( let i = 0; i < _effects.length; i ++ ) {\n\n\t\t\tconst effect = _effects[ i ];\n\t\t\tif ( effect.setSize ) effect.setSize( width, height );\n\n\t\t}\n\n\t};\n\n\tthis.begin = function ( renderer, renderTarget ) {\n\n\t\t// Don't begin during compositing phase (post-processing effects call render())\n\t\tif ( _isCompositing ) return false;\n\n\t\tif ( renderer.toneMapping === NoToneMapping && _effects.length === 0 ) return false;\n\n\t\t_savedRenderTarget = renderTarget;\n\n\t\t// resize internal buffers to match render target (e.g. XR resolution)\n\t\tif ( renderTarget !== null ) {\n\n\t\t\tconst width = renderTarget.width;\n\t\t\tconst height = renderTarget.height;\n\n\t\t\tif ( targetA.width !== width || targetA.height !== height ) {\n\n\t\t\t\tthis.setSize( width, height );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// if first effect is a RenderPass, it will set its own render target\n\t\tif ( _hasRenderPass === false ) {\n\n\t\t\trenderer.setRenderTarget( targetA );\n\n\t\t}\n\n\t\t// disable tone mapping during render - it will be applied in end()\n\t\t_savedToneMapping = renderer.toneMapping;\n\t\trenderer.toneMapping = NoToneMapping;\n\n\t\treturn true;\n\n\t};\n\n\tthis.hasRenderPass = function () {\n\n\t\treturn _hasRenderPass;\n\n\t};\n\n\tthis.end = function ( renderer, deltaTime ) {\n\n\t\t// restore tone mapping\n\t\trenderer.toneMapping = _savedToneMapping;\n\n\t\t_isCompositing = true;\n\n\t\t// run post-processing effects\n\t\tlet readBuffer = targetA;\n\t\tlet writeBuffer = targetB;\n\n\t\tfor ( let i = 0; i < _effects.length; i ++ ) {\n\n\t\t\tconst effect = _effects[ i ];\n\n\t\t\tif ( effect.enabled === false ) continue;\n\n\t\t\teffect.render( renderer, writeBuffer, readBuffer, deltaTime );\n\n\t\t\tif ( effect.needsSwap !== false ) {\n\n\t\t\t\tconst temp = readBuffer;\n\t\t\t\treadBuffer = writeBuffer;\n\t\t\t\twriteBuffer = temp;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// update output material defines if settings changed\n\t\tif ( _outputColorSpace !== renderer.outputColorSpace || _outputToneMapping !== renderer.toneMapping ) {\n\n\t\t\t_outputColorSpace = renderer.outputColorSpace;\n\t\t\t_outputToneMapping = renderer.toneMapping;\n\n\t\t\tmaterial.defines = {};\n\n\t\t\tif ( ColorManagement.getTransfer( _outputColorSpace ) === SRGBTransfer ) material.defines.SRGB_TRANSFER = '';\n\n\t\t\tconst toneMapping = toneMappingMap[ _outputToneMapping ];\n\t\t\tif ( toneMapping ) material.defines[ toneMapping ] = '';\n\n\t\t\tmaterial.needsUpdate = true;\n\n\t\t}\n\n\t\t// final output to canvas (or XR render target)\n\t\tmaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\trenderer.setRenderTarget( _savedRenderTarget );\n\t\trenderer.render( mesh, camera );\n\n\t\t_savedRenderTarget = null;\n\t\t_isCompositing = false;\n\n\t};\n\n\tthis.isCompositing = function () {\n\n\t\treturn _isCompositing;\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tif ( targetA.depthTexture ) targetA.depthTexture.dispose();\n\t\ttargetA.dispose();\n\t\ttargetB.dispose();\n\t\tgeometry.dispose();\n\t\tmaterial.dispose();\n\n\t};\n\n}\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n *  \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with  name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\n\nconst emptyTexture = /*@__PURE__*/ new Texture();\n\nconst emptyShadowTexture = /*@__PURE__*/ new DepthTexture( 1, 1 );\n\nconst emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();\nconst empty3dTexture = /*@__PURE__*/ new Data3DTexture();\nconst emptyCubeTexture = /*@__PURE__*/ new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array or THREE.VectorN)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2i( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3i( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4i( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array or THREE.VectorN)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2ui( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3ui( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4ui( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\tlet emptyTexture2D;\n\n\tif ( this.type === gl.SAMPLER_2D_SHADOW ) {\n\n\t\temptyShadowTexture.compareFunction = textures.isReversedDepthBuffer() ? GreaterEqualCompare : LessEqualCompare;\n\t\temptyTexture2D = emptyShadowTexture;\n\n\t} else {\n\n\t\temptyTexture2D = emptyTexture;\n\n\t}\n\n\ttextures.setTexture2D( v || emptyTexture2D, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || empty3dTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyArrayTexture, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / 3D / Cube / 2DArray)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tlet emptyTexture2D;\n\n\tif ( this.type === gl.SAMPLER_2D_SHADOW ) {\n\n\t\temptyTexture2D = emptyShadowTexture;\n\n\t} else {\n\n\t\temptyTexture2D = emptyTexture;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2D( v[ i ] || emptyTexture2D, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT3DArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT2DArrayArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );\n\n\t}\n\n}\n\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3DArray;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArrayArray;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nclass SingleUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass PureArrayUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass StructuredUniform {\n\n\tconstructor( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tsetValue( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t}\n\n}\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n//  - followed by an optional right bracket (found when array index)\n//  - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nclass WebGLUniforms {\n\n\tconstructor( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t\t// Sort uniforms to prioritize shadow samplers first (for optimal texture unit allocation)\n\n\t\tconst shadowSamplers = [];\n\t\tconst otherUniforms = [];\n\n\t\tfor ( const u of this.seq ) {\n\n\t\t\tif ( u.type === gl.SAMPLER_2D_SHADOW || u.type === gl.SAMPLER_CUBE_SHADOW || u.type === gl.SAMPLER_2D_ARRAY_SHADOW ) {\n\n\t\t\t\tshadowSamplers.push( u );\n\n\t\t\t} else {\n\n\t\t\t\totherUniforms.push( u );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( shadowSamplers.length > 0 ) {\n\n\t\t\tthis.seq = shadowSamplers.concat( otherUniforms );\n\n\t\t}\n\n\t}\n\n\tsetValue( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t}\n\n\tsetOptional( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t}\n\n\tstatic upload( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic seqWithValue( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\n// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/\nconst COMPLETION_STATUS_KHR = 0x91B1;\n\nlet programIdCount = 0;\n\nfunction handleSource( string, errorLine ) {\n\n\tconst lines = string.split( '\\n' );\n\tconst lines2 = [];\n\n\tconst from = Math.max( errorLine - 6, 0 );\n\tconst to = Math.min( errorLine + 6, lines.length );\n\n\tfor ( let i = from; i < to; i ++ ) {\n\n\t\tconst line = i + 1;\n\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t}\n\n\treturn lines2.join( '\\n' );\n\n}\n\nconst _m0 = /*@__PURE__*/ new Matrix3();\n\nfunction getEncodingComponents( colorSpace ) {\n\n\tColorManagement._getMatrix( _m0, ColorManagement.workingColorSpace, colorSpace );\n\n\tconst encodingMatrix = `mat3( ${ _m0.elements.map( ( v ) => v.toFixed( 4 ) ) } )`;\n\n\tswitch ( ColorManagement.getTransfer( colorSpace ) ) {\n\n\t\tcase LinearTransfer:\n\t\t\treturn [ encodingMatrix, 'LinearTransferOETF' ];\n\n\t\tcase SRGBTransfer:\n\t\t\treturn [ encodingMatrix, 'sRGBTransferOETF' ];\n\n\t\tdefault:\n\t\t\twarn( 'WebGLProgram: Unsupported color space: ', colorSpace );\n\t\t\treturn [ encodingMatrix, 'LinearTransferOETF' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );\n\n\tconst shaderInfoLog = gl.getShaderInfoLog( shader ) || '';\n\tconst errors = shaderInfoLog.trim();\n\n\tif ( status && errors === '' ) return '';\n\n\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\tif ( errorMatches ) {\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t} else {\n\n\t\treturn errors;\n\n\t}\n\n}\n\nfunction getTexelEncodingFunction( functionName, colorSpace ) {\n\n\tconst components = getEncodingComponents( colorSpace );\n\n\treturn [\n\n\t\t`vec4 ${functionName}( vec4 value ) {`,\n\n\t\t`\treturn ${components[ 1 ]}( vec4( value.rgb * ${components[ 0 ]}, value.a ) );`,\n\n\t\t'}',\n\n\t].join( '\\n' );\n\n}\n\nconst toneMappingFunctions = {\n\t[ LinearToneMapping ]: 'Linear',\n\t[ ReinhardToneMapping ]: 'Reinhard',\n\t[ CineonToneMapping ]: 'Cineon',\n\t[ ACESFilmicToneMapping ]: 'ACESFilmic',\n\t[ AgXToneMapping ]: 'AgX',\n\t[ NeutralToneMapping ]: 'Neutral',\n\t[ CustomToneMapping ]: 'Custom'\n};\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tconst toneMappingName = toneMappingFunctions[ toneMapping ];\n\n\tif ( toneMappingName === undefined ) {\n\n\t\twarn( 'WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\treturn 'vec3 ' + functionName + '( vec3 color ) { return LinearToneMapping( color ); }';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nconst _v0 = /*@__PURE__*/ new Vector3();\n\nfunction getLuminanceFunction() {\n\n\tColorManagement.getLuminanceCoefficients( _v0 );\n\n\tconst r = _v0.x.toFixed( 4 );\n\tconst g = _v0.y.toFixed( 4 );\n\tconst b = _v0.z.toFixed( 4 );\n\n\treturn [\n\n\t\t'float luminance( const in vec3 rgb ) {',\n\n\t\t`\tconst vec3 weights = vec3( ${ r }, ${ g }, ${ b } );`,\n\n\t\t'\treturn dot( weights, rgb );',\n\n\t\t'}'\n\n\t].join( '\\n' );\n\n}\n\nfunction generateVertexExtensions( parameters ) {\n\n\tconst chunks = [\n\t\tparameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',\n\t\tparameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;\n\t\tif ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;\n\t\tif ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;\n\n\t\t// log( 'WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\tconst numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nconst shaderChunkMap = new Map();\n\nfunction includeReplacer( match, include ) {\n\n\tlet string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tconst newInclude = shaderChunkMap.get( include );\n\n\t\tif ( newInclude !== undefined ) {\n\n\t\t\tstring = ShaderChunk[ newInclude ];\n\t\t\twarn( 'WebGLRenderer: Shader chunk \"%s\" has been deprecated. Use \"%s\" instead.', include, newInclude );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string.replace( unrollLoopPattern, loopReplacer );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = `precision ${parameters.precision} float;\n\tprecision ${parameters.precision} int;\n\tprecision ${parameters.precision} sampler2D;\n\tprecision ${parameters.precision} samplerCube;\n\tprecision ${parameters.precision} sampler3D;\n\tprecision ${parameters.precision} sampler2DArray;\n\tprecision ${parameters.precision} sampler2DShadow;\n\tprecision ${parameters.precision} samplerCubeShadow;\n\tprecision ${parameters.precision} sampler2DArrayShadow;\n\tprecision ${parameters.precision} isampler2D;\n\tprecision ${parameters.precision} isampler3D;\n\tprecision ${parameters.precision} isamplerCube;\n\tprecision ${parameters.precision} isampler2DArray;\n\tprecision ${parameters.precision} usampler2D;\n\tprecision ${parameters.precision} usampler3D;\n\tprecision ${parameters.precision} usamplerCube;\n\tprecision ${parameters.precision} usampler2DArray;\n\t`;\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nconst shadowMapTypeDefines = {\n\t[ PCFShadowMap ]: 'SHADOWMAP_TYPE_PCF',\n\t[ VSMShadowMap ]: 'SHADOWMAP_TYPE_VSM'\n};\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\treturn shadowMapTypeDefines[ parameters.shadowMapType ] || 'SHADOWMAP_TYPE_BASIC';\n\n}\n\nconst envMapTypeDefines = {\n\t[ CubeReflectionMapping ]: 'ENVMAP_TYPE_CUBE',\n\t[ CubeRefractionMapping ]: 'ENVMAP_TYPE_CUBE',\n\t[ CubeUVReflectionMapping ]: 'ENVMAP_TYPE_CUBE_UV'\n};\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tif ( parameters.envMap === false ) return 'ENVMAP_TYPE_CUBE';\n\n\treturn envMapTypeDefines[ parameters.envMapMode ] || 'ENVMAP_TYPE_CUBE';\n\n}\n\nconst envMapModeDefines = {\n\t[ CubeRefractionMapping ]: 'ENVMAP_MODE_REFRACTION'\n};\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tif ( parameters.envMap === false ) return 'ENVMAP_MODE_REFLECTION';\n\n\treturn envMapModeDefines[ parameters.envMapMode ] || 'ENVMAP_MODE_REFLECTION';\n\n}\n\nconst envMapBlendingDefines = {\n\t[ MultiplyOperation ]: 'ENVMAP_BLENDING_MULTIPLY',\n\t[ MixOperation ]: 'ENVMAP_BLENDING_MIX',\n\t[ AddOperation ]: 'ENVMAP_BLENDING_ADD'\n};\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tif ( parameters.envMap === false ) return 'ENVMAP_BLENDING_NONE';\n\n\treturn envMapBlendingDefines[ parameters.combine ] || 'ENVMAP_BLENDING_NONE';\n\n}\n\nfunction generateCubeUVSize( parameters ) {\n\n\tconst imageHeight = parameters.envMapCubeUVHeight;\n\n\tif ( imageHeight === null ) return null;\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\tconst envMapCubeUVSize = generateCubeUVSize( parameters );\n\n\tconst customVertexExtensions = generateVertexExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',\n\t\t\tparameters.batching ? '#define USE_BATCHING' : '',\n\t\t\tparameters.batchingColor ? '#define USE_BATCHING_COLOR' : '',\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\t\t\tparameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\t//\n\n\t\t\tparameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '',\n\t\t\tparameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '',\n\t\t\tparameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '',\n\t\t\tparameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '',\n\t\t\tparameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '',\n\t\t\tparameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '',\n\t\t\tparameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '',\n\t\t\tparameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '',\n\n\t\t\tparameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '',\n\t\t\tparameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '',\n\n\t\t\tparameters.anisotropyMapUv ? '#define ANISOTROPYMAP_UV ' + parameters.anisotropyMapUv : '',\n\n\t\t\tparameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',\n\t\t\tparameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',\n\t\t\tparameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',\n\n\t\t\tparameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',\n\t\t\tparameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',\n\n\t\t\tparameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '',\n\t\t\tparameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '',\n\n\t\t\tparameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '',\n\t\t\tparameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '',\n\t\t\tparameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '',\n\n\t\t\tparameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '',\n\t\t\tparameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '',\n\n\t\t\t//\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexNormals ? '#define HAS_NORMAL' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGARITHMIC_DEPTH_BUFFER' : '',\n\t\t\tparameters.reversedDepthBuffer ? '#define USE_REVERSED_DEPTH_BUFFER' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_MORPH',\n\n\t\t\t'\tuniform sampler2D morphTexture;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_UV1',\n\n\t\t\t'\tattribute vec2 uv1;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV2',\n\n\t\t\t'\tattribute vec2 uv2;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV3',\n\n\t\t\t'\tattribute vec2 uv3;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.packedNormalMap ? '#define USE_PACKED_NORMALMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.dispersion ? '#define USE_DISPERSION' : '',\n\n\t\t\tparameters.iridescence ? '#define USE_IRIDESCENCE' : '',\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas || parameters.batchingColor ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.numLightProbeGrids > 0 ? '#define USE_LIGHT_PROBES_GRID' : '',\n\n\t\t\tparameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',\n\t\t\tparameters.decodeVideoTextureEmissive ? '#define DECODE_VIDEO_TEXTURE_EMISSIVE' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGARITHMIC_DEPTH_BUFFER' : '',\n\t\t\tparameters.reversedDepthBuffer ? '#define USE_REVERSED_DEPTH_BUFFER' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.opaque ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'colorspace_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),\n\t\t\tgetLuminanceFunction(),\n\n\t\t\tparameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\tcustomVertexExtensions,\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// log( '*VERTEX*', vertexGlsl );\n\t// log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tfunction onFirstUse( self ) {\n\n\t\t// check for link errors\n\t\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\t\tconst programInfoLog = gl.getProgramInfoLog( program ) || '';\n\t\t\tconst vertexShaderInfoLog = gl.getShaderInfoLog( glVertexShader ) || '';\n\t\t\tconst fragmentShaderInfoLog = gl.getShaderInfoLog( glFragmentShader ) || '';\n\n\t\t\tconst programLog = programInfoLog.trim();\n\t\t\tconst vertexLog = vertexShaderInfoLog.trim();\n\t\t\tconst fragmentLog = fragmentShaderInfoLog.trim();\n\n\t\t\tlet runnable = true;\n\t\t\tlet haveDiagnostics = true;\n\n\t\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\t\t\trunnable = false;\n\n\t\t\t\tif ( typeof renderer.debug.onShaderError === 'function' ) {\n\n\t\t\t\t\trenderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// default error reporting\n\n\t\t\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\t\t\terror(\n\t\t\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\\n\\n' +\n\t\t\t\t\t\t'Material Name: ' + self.name + '\\n' +\n\t\t\t\t\t\t'Material Type: ' + self.type + '\\n\\n' +\n\t\t\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\t\t\tfragmentErrors\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( programLog !== '' ) {\n\n\t\t\t\twarn( 'WebGLProgram: Program Info Log:', programLog );\n\n\t\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\t\thaveDiagnostics = false;\n\n\t\t\t}\n\n\t\t\tif ( haveDiagnostics ) {\n\n\t\t\t\tself.diagnostics = {\n\n\t\t\t\t\trunnable: runnable,\n\n\t\t\t\t\tprogramLog: programLog,\n\n\t\t\t\t\tvertexShader: {\n\n\t\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t\t},\n\n\t\t\t\t\tfragmentShader: {\n\n\t\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Clean up\n\n\t\t// Crashes in iOS9 and iOS10. #18402\n\t\t// gl.detachShader( program, glVertexShader );\n\t\t// gl.detachShader( program, glFragmentShader );\n\n\t\tgl.deleteShader( glVertexShader );\n\t\tgl.deleteShader( glFragmentShader );\n\n\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t}\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\t// Populates cachedUniforms and cachedAttributes\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\t// Populates cachedAttributes and cachedUniforms\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,\n\t// flag the program as ready immediately. It may cause a stall when it's first used.\n\n\tlet programReady = ( parameters.rendererExtensionParallelShaderCompile === false );\n\n\tthis.isReady = function () {\n\n\t\tif ( programReady === false ) {\n\n\t\t\tprogramReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );\n\n\t\t}\n\n\t\treturn programReady;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.type = parameters.shaderType;\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nlet _id = 0;\n\nclass WebGLShaderCache {\n\n\tconstructor() {\n\n\t\tthis.shaderCache = new Map();\n\t\tthis.materialCache = new Map();\n\n\t}\n\n\tupdate( material ) {\n\n\t\tconst vertexShader = material.vertexShader;\n\t\tconst fragmentShader = material.fragmentShader;\n\n\t\tconst vertexShaderStage = this._getShaderStage( vertexShader );\n\t\tconst fragmentShaderStage = this._getShaderStage( fragmentShader );\n\n\t\tconst materialShaders = this._getShaderCacheForMaterial( material );\n\n\t\tif ( materialShaders.has( vertexShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( vertexShaderStage );\n\t\t\tvertexShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\tif ( materialShaders.has( fragmentShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( fragmentShaderStage );\n\t\t\tfragmentShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( material ) {\n\n\t\tconst materialShaders = this.materialCache.get( material );\n\n\t\tfor ( const shaderStage of materialShaders ) {\n\n\t\t\tshaderStage.usedTimes --;\n\n\t\t\tif ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );\n\n\t\t}\n\n\t\tthis.materialCache.delete( material );\n\n\t\treturn this;\n\n\t}\n\n\tgetVertexShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.vertexShader ).id;\n\n\t}\n\n\tgetFragmentShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.fragmentShader ).id;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shaderCache.clear();\n\t\tthis.materialCache.clear();\n\n\t}\n\n\t_getShaderCacheForMaterial( material ) {\n\n\t\tconst cache = this.materialCache;\n\t\tlet set = cache.get( material );\n\n\t\tif ( set === undefined ) {\n\n\t\t\tset = new Set();\n\t\t\tcache.set( material, set );\n\n\t\t}\n\n\t\treturn set;\n\n\t}\n\n\t_getShaderStage( code ) {\n\n\t\tconst cache = this.shaderCache;\n\t\tlet stage = cache.get( code );\n\n\t\tif ( stage === undefined ) {\n\n\t\t\tstage = new WebGLShaderStage( code );\n\t\t\tcache.set( code, stage );\n\n\t\t}\n\n\t\treturn stage;\n\n\t}\n\n}\n\nclass WebGLShaderStage {\n\n\tconstructor( code ) {\n\n\t\tthis.id = _id ++;\n\n\t\tthis.code = code;\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\nfunction isPackedRGFormat( format ) {\n\n\treturn format === RGFormat || format === RG11_EAC_Format || format === RED_GREEN_RGTC2_Format;\n\n}\n\nfunction WebGLPrograms( renderer, environments, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst _programLayers = new Layers();\n\tconst _customShaders = new WebGLShaderCache();\n\tconst _activeChannels = new Set();\n\tconst programs = [];\n\tconst programsMap = new Map();\n\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distance',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tfunction getChannel( value ) {\n\n\t\t_activeChannels.add( value );\n\n\t\tif ( value === 0 ) return 'uv';\n\n\t\treturn `uv${ value }`;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object, lightProbeGrids ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst geometry = object.geometry;\n\t\tconst environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;\n\n\t\tconst usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );\n\t\tconst envMap = environments.get( material.envMap || environment, usePMREM );\n\t\tconst envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\twarn( 'WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet morphTextureStride = 0;\n\n\t\tif ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;\n\t\tif ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;\n\t\tif ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;\n\n\t\t//\n\n\t\tlet vertexShader, fragmentShader;\n\t\tlet customVertexShaderID, customFragmentShaderID;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t_customShaders.update( material );\n\n\t\t\tcustomVertexShaderID = _customShaders.getVertexShaderID( material );\n\t\t\tcustomFragmentShaderID = _customShaders.getFragmentShaderID( material );\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst reversedDepthBuffer = renderer.state.buffers.depth.getReversed();\n\n\t\tconst IS_INSTANCEDMESH = object.isInstancedMesh === true;\n\t\tconst IS_BATCHEDMESH = object.isBatchedMesh === true;\n\n\t\tconst HAS_MAP = !! material.map;\n\t\tconst HAS_MATCAP = !! material.matcap;\n\t\tconst HAS_ENVMAP = !! envMap;\n\t\tconst HAS_AOMAP = !! material.aoMap;\n\t\tconst HAS_LIGHTMAP = !! material.lightMap;\n\t\tconst HAS_BUMPMAP = !! material.bumpMap;\n\t\tconst HAS_NORMALMAP = !! material.normalMap;\n\t\tconst HAS_DISPLACEMENTMAP = !! material.displacementMap;\n\t\tconst HAS_EMISSIVEMAP = !! material.emissiveMap;\n\n\t\tconst HAS_METALNESSMAP = !! material.metalnessMap;\n\t\tconst HAS_ROUGHNESSMAP = !! material.roughnessMap;\n\n\t\tconst HAS_ANISOTROPY = material.anisotropy > 0;\n\t\tconst HAS_CLEARCOAT = material.clearcoat > 0;\n\t\tconst HAS_DISPERSION = material.dispersion > 0;\n\t\tconst HAS_IRIDESCENCE = material.iridescence > 0;\n\t\tconst HAS_SHEEN = material.sheen > 0;\n\t\tconst HAS_TRANSMISSION = material.transmission > 0;\n\n\t\tconst HAS_ANISOTROPYMAP = HAS_ANISOTROPY && !! material.anisotropyMap;\n\n\t\tconst HAS_CLEARCOATMAP = HAS_CLEARCOAT && !! material.clearcoatMap;\n\t\tconst HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !! material.clearcoatNormalMap;\n\t\tconst HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !! material.clearcoatRoughnessMap;\n\n\t\tconst HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !! material.iridescenceMap;\n\t\tconst HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !! material.iridescenceThicknessMap;\n\n\t\tconst HAS_SHEEN_COLORMAP = HAS_SHEEN && !! material.sheenColorMap;\n\t\tconst HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !! material.sheenRoughnessMap;\n\n\t\tconst HAS_SPECULARMAP = !! material.specularMap;\n\t\tconst HAS_SPECULAR_COLORMAP = !! material.specularColorMap;\n\t\tconst HAS_SPECULAR_INTENSITYMAP = !! material.specularIntensityMap;\n\n\t\tconst HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !! material.transmissionMap;\n\t\tconst HAS_THICKNESSMAP = HAS_TRANSMISSION && !! material.thicknessMap;\n\n\t\tconst HAS_GRADIENTMAP = !! material.gradientMap;\n\n\t\tconst HAS_ALPHAMAP = !! material.alphaMap;\n\n\t\tconst HAS_ALPHATEST = material.alphaTest > 0;\n\n\t\tconst HAS_ALPHAHASH = !! material.alphaHash;\n\n\t\tconst HAS_EXTENSIONS = !! material.extensions;\n\n\t\tlet toneMapping = NoToneMapping;\n\n\t\tif ( material.toneMapped ) {\n\n\t\t\tif ( currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\ttoneMapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst parameters = {\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderType: material.type,\n\t\t\tshaderName: material.name,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tcustomVertexShaderID: customVertexShaderID,\n\t\t\tcustomFragmentShaderID: customFragmentShaderID,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tbatching: IS_BATCHEDMESH,\n\t\t\tbatchingColor: IS_BATCHEDMESH && object._colorsTexture !== null,\n\t\t\tinstancing: IS_INSTANCEDMESH,\n\t\t\tinstancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,\n\t\t\tinstancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,\n\n\t\t\toutputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : ColorManagement.workingColorSpace ),\n\t\t\talphaToCoverage: !! material.alphaToCoverage,\n\n\t\t\tmap: HAS_MAP,\n\t\t\tmatcap: HAS_MATCAP,\n\t\t\tenvMap: HAS_ENVMAP,\n\t\t\tenvMapMode: HAS_ENVMAP && envMap.mapping,\n\t\t\tenvMapCubeUVHeight: envMapCubeUVHeight,\n\t\t\taoMap: HAS_AOMAP,\n\t\t\tlightMap: HAS_LIGHTMAP,\n\t\t\tbumpMap: HAS_BUMPMAP,\n\t\t\tnormalMap: HAS_NORMALMAP,\n\t\t\tdisplacementMap: HAS_DISPLACEMENTMAP,\n\t\t\temissiveMap: HAS_EMISSIVEMAP,\n\n\t\t\tnormalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,\n\t\t\tnormalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap,\n\t\t\tpackedNormalMap: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap && isPackedRGFormat( material.normalMap.format\t),\n\n\t\t\tmetalnessMap: HAS_METALNESSMAP,\n\t\t\troughnessMap: HAS_ROUGHNESSMAP,\n\n\t\t\tanisotropy: HAS_ANISOTROPY,\n\t\t\tanisotropyMap: HAS_ANISOTROPYMAP,\n\n\t\t\tclearcoat: HAS_CLEARCOAT,\n\t\t\tclearcoatMap: HAS_CLEARCOATMAP,\n\t\t\tclearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,\n\t\t\tclearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,\n\n\t\t\tdispersion: HAS_DISPERSION,\n\n\t\t\tiridescence: HAS_IRIDESCENCE,\n\t\t\tiridescenceMap: HAS_IRIDESCENCEMAP,\n\t\t\tiridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,\n\n\t\t\tsheen: HAS_SHEEN,\n\t\t\tsheenColorMap: HAS_SHEEN_COLORMAP,\n\t\t\tsheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP,\n\n\t\t\tspecularMap: HAS_SPECULARMAP,\n\t\t\tspecularColorMap: HAS_SPECULAR_COLORMAP,\n\t\t\tspecularIntensityMap: HAS_SPECULAR_INTENSITYMAP,\n\n\t\t\ttransmission: HAS_TRANSMISSION,\n\t\t\ttransmissionMap: HAS_TRANSMISSIONMAP,\n\t\t\tthicknessMap: HAS_THICKNESSMAP,\n\n\t\t\tgradientMap: HAS_GRADIENTMAP,\n\n\t\t\topaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false,\n\n\t\t\talphaMap: HAS_ALPHAMAP,\n\t\t\talphaTest: HAS_ALPHATEST,\n\t\t\talphaHash: HAS_ALPHAHASH,\n\n\t\t\tcombine: material.combine,\n\n\t\t\t//\n\n\t\t\tmapUv: HAS_MAP && getChannel( material.map.channel ),\n\t\t\taoMapUv: HAS_AOMAP && getChannel( material.aoMap.channel ),\n\t\t\tlightMapUv: HAS_LIGHTMAP && getChannel( material.lightMap.channel ),\n\t\t\tbumpMapUv: HAS_BUMPMAP && getChannel( material.bumpMap.channel ),\n\t\t\tnormalMapUv: HAS_NORMALMAP && getChannel( material.normalMap.channel ),\n\t\t\tdisplacementMapUv: HAS_DISPLACEMENTMAP && getChannel( material.displacementMap.channel ),\n\t\t\temissiveMapUv: HAS_EMISSIVEMAP && getChannel( material.emissiveMap.channel ),\n\n\t\t\tmetalnessMapUv: HAS_METALNESSMAP && getChannel( material.metalnessMap.channel ),\n\t\t\troughnessMapUv: HAS_ROUGHNESSMAP && getChannel( material.roughnessMap.channel ),\n\n\t\t\tanisotropyMapUv: HAS_ANISOTROPYMAP && getChannel( material.anisotropyMap.channel ),\n\n\t\t\tclearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ),\n\t\t\tclearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ),\n\t\t\tclearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ),\n\n\t\t\tiridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ),\n\t\t\tiridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel( material.iridescenceThicknessMap.channel ),\n\n\t\t\tsheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel( material.sheenColorMap.channel ),\n\t\t\tsheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel( material.sheenRoughnessMap.channel ),\n\n\t\t\tspecularMapUv: HAS_SPECULARMAP && getChannel( material.specularMap.channel ),\n\t\t\tspecularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel( material.specularColorMap.channel ),\n\t\t\tspecularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel( material.specularIntensityMap.channel ),\n\n\t\t\ttransmissionMapUv: HAS_TRANSMISSIONMAP && getChannel( material.transmissionMap.channel ),\n\t\t\tthicknessMapUv: HAS_THICKNESSMAP && getChannel( material.thicknessMap.channel ),\n\n\t\t\talphaMapUv: HAS_ALPHAMAP && getChannel( material.alphaMap.channel ),\n\n\t\t\t//\n\n\t\t\tvertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),\n\t\t\tvertexNormals: !! geometry.attributes.normal,\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,\n\n\t\t\tpointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ),\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog === true,\n\t\t\tfogExp2: ( !! fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.wireframe === false && (\n\t\t\t\tmaterial.flatShading === true ||\n\t\t\t\t( geometry.attributes.normal === undefined && HAS_NORMALMAP === false &&\n\t\t\t\t\t( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isMeshPhysicalMaterial )\n\t\t\t\t)\n\t\t\t),\n\n\t\t\tsizeAttenuation: material.sizeAttenuation === true,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\t\t\treversedDepthBuffer: reversedDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true,\n\n\t\t\tmorphTargets: geometry.morphAttributes.position !== undefined,\n\t\t\tmorphNormals: geometry.morphAttributes.normal !== undefined,\n\t\t\tmorphColors: geometry.morphAttributes.color !== undefined,\n\t\t\tmorphTargetsCount: morphTargetsCount,\n\t\t\tmorphTextureStride: morphTextureStride,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumSpotLightMaps: lights.spotLightMap.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\tnumSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,\n\n\t\t\tnumLightProbes: lights.numLightProbes,\n\n\t\t\tnumLightProbeGrids: lightProbeGrids.length,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: toneMapping,\n\n\t\t\tdecodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),\n\t\t\tdecodeVideoTextureEmissive: HAS_EMISSIVEMAP && ( material.emissiveMap.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.emissiveMap.colorSpace ) === SRGBTransfer ),\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tuseDepthPacking: material.depthPacking >= 0,\n\t\t\tdepthPacking: material.depthPacking || 0,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),\n\t\t\textensionMultiDraw: ( HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH ) && extensions.has( 'WEBGL_multi_draw' ),\n\n\t\t\trendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\t// the usage of getChannel() determines the active texture channels for this shader\n\n\t\tparameters.vertexUv1s = _activeChannels.has( 1 );\n\t\tparameters.vertexUv2s = _activeChannels.has( 2 );\n\t\tparameters.vertexUv3s = _activeChannels.has( 3 );\n\n\t\t_activeChannels.clear();\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.customVertexShaderID );\n\t\t\tarray.push( parameters.customFragmentShaderID );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tgetProgramCacheKeyParameters( array, parameters );\n\t\t\tgetProgramCacheKeyBooleans( array, parameters );\n\t\t\tarray.push( renderer.outputColorSpace );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getProgramCacheKeyParameters( array, parameters ) {\n\n\t\tarray.push( parameters.precision );\n\t\tarray.push( parameters.outputColorSpace );\n\t\tarray.push( parameters.envMapMode );\n\t\tarray.push( parameters.envMapCubeUVHeight );\n\t\tarray.push( parameters.mapUv );\n\t\tarray.push( parameters.alphaMapUv );\n\t\tarray.push( parameters.lightMapUv );\n\t\tarray.push( parameters.aoMapUv );\n\t\tarray.push( parameters.bumpMapUv );\n\t\tarray.push( parameters.normalMapUv );\n\t\tarray.push( parameters.displacementMapUv );\n\t\tarray.push( parameters.emissiveMapUv );\n\t\tarray.push( parameters.metalnessMapUv );\n\t\tarray.push( parameters.roughnessMapUv );\n\t\tarray.push( parameters.anisotropyMapUv );\n\t\tarray.push( parameters.clearcoatMapUv );\n\t\tarray.push( parameters.clearcoatNormalMapUv );\n\t\tarray.push( parameters.clearcoatRoughnessMapUv );\n\t\tarray.push( parameters.iridescenceMapUv );\n\t\tarray.push( parameters.iridescenceThicknessMapUv );\n\t\tarray.push( parameters.sheenColorMapUv );\n\t\tarray.push( parameters.sheenRoughnessMapUv );\n\t\tarray.push( parameters.specularMapUv );\n\t\tarray.push( parameters.specularColorMapUv );\n\t\tarray.push( parameters.specularIntensityMapUv );\n\t\tarray.push( parameters.transmissionMapUv );\n\t\tarray.push( parameters.thicknessMapUv );\n\t\tarray.push( parameters.combine );\n\t\tarray.push( parameters.fogExp2 );\n\t\tarray.push( parameters.sizeAttenuation );\n\t\tarray.push( parameters.morphTargetsCount );\n\t\tarray.push( parameters.morphAttributeCount );\n\t\tarray.push( parameters.numDirLights );\n\t\tarray.push( parameters.numPointLights );\n\t\tarray.push( parameters.numSpotLights );\n\t\tarray.push( parameters.numSpotLightMaps );\n\t\tarray.push( parameters.numHemiLights );\n\t\tarray.push( parameters.numRectAreaLights );\n\t\tarray.push( parameters.numDirLightShadows );\n\t\tarray.push( parameters.numPointLightShadows );\n\t\tarray.push( parameters.numSpotLightShadows );\n\t\tarray.push( parameters.numSpotLightShadowsWithMaps );\n\t\tarray.push( parameters.numLightProbes );\n\t\tarray.push( parameters.shadowMapType );\n\t\tarray.push( parameters.toneMapping );\n\t\tarray.push( parameters.numClippingPlanes );\n\t\tarray.push( parameters.numClipIntersection );\n\t\tarray.push( parameters.depthPacking );\n\n\t}\n\n\tfunction getProgramCacheKeyBooleans( array, parameters ) {\n\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.instancing )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.instancingColor )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.instancingMorph )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.matcap )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.envMap )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.normalMapObjectSpace )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.normalMapTangentSpace )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.clearcoat )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.iridescence )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.alphaTest )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.vertexColors )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.vertexAlphas )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.vertexUv1s )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.vertexUv2s )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.vertexUv3s )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.vertexTangents )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.anisotropy )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.alphaHash )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.batching )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.dispersion )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.batchingColor )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.gradientMap )\n\t\t\t_programLayers.enable( 21 );\n\t\tif ( parameters.packedNormalMap )\n\t\t\t_programLayers.enable( 22 );\n\t\tif ( parameters.vertexNormals )\n\t\t\t_programLayers.enable( 23 );\n\n\t\tarray.push( _programLayers.mask );\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.fog )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.useFog )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.flatShading )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.logarithmicDepthBuffer )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.reversedDepthBuffer )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.skinning )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.morphTargets )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.morphNormals )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.morphColors )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.premultipliedAlpha )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.shadowMapEnabled )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.doubleSided )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.flipSided )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.useDepthPacking )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.dithering )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.transmission )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.sheen )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.opaque )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.pointsUvs )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.decodeVideoTexture )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.decodeVideoTextureEmissive )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.alphaToCoverage )\n\t\t\t_programLayers.enable( 21 );\n\t\tif ( parameters.numLightProbeGrids > 0 )\n\t\t\t_programLayers.enable( 22 );\n\n\t\tarray.push( _programLayers.mask );\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program = programsMap.get( cacheKey );\n\n\t\tif ( program !== undefined ) {\n\n\t\t\t++ program.usedTimes;\n\n\t\t} else {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t\tprogramsMap.set( cacheKey, program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Remove from map\n\t\t\tprogramsMap.delete( program.cacheKey );\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\tfunction releaseShaderCache( material ) {\n\n\t\t_customShaders.remove( material );\n\n\t}\n\n\tfunction dispose() {\n\n\t\t_customShaders.dispose();\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\treleaseShaderCache: releaseShaderCache,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction has( object ) {\n\n\t\treturn properties.has( object );\n\n\t}\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\thas: has,\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.materialVariant !== b.materialVariant ) {\n\n\t\treturn a.materialVariant - b.materialVariant;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction materialVariant( object ) {\n\n\t\tlet variant = 0;\n\t\tif ( object.isInstancedMesh ) variant += 2;\n\t\tif ( object.isSkinnedMesh ) variant += 1;\n\t\treturn variant;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tmaterialVariant: materialVariant( object ),\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.materialVariant = materialVariant( object );\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tconst listArray = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( listArray === undefined ) {\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= listArray.length ) {\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlistArray.push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = listArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingAndTexturingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: -1,\n\t\t\tpointLength: -1,\n\t\t\tspotLength: -1,\n\t\t\trectAreaLength: -1,\n\t\t\themiLength: -1,\n\n\t\t\tnumDirectionalShadows: -1,\n\t\t\tnumPointShadows: -1,\n\t\t\tnumSpotShadows: -1,\n\t\t\tnumSpotMaps: -1,\n\n\t\t\tnumLightProbes: -1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotLightMap: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotLightMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: [],\n\t\tnumSpotLightShadowsWithMaps: 0,\n\t\tnumLightProbes: 0\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\t\tlet numSpotMaps = 0;\n\t\tlet numSpotShadowsWithMaps = 0;\n\n\t\tlet numLightProbes = 0;\n\n\t\t// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]\n\t\tlights.sort( shadowCastingAndTexturingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tlet shadowMap = null;\n\n\t\t\tif ( light.shadow && light.shadow.map ) {\n\n\t\t\t\tif ( light.shadow.map.texture.format === RGFormat ) {\n\n\t\t\t\t\t// VSM uses color texture with blurred mean/std_dev\n\t\t\t\t\tshadowMap = light.shadow.map.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Other types use depth texture\n\t\t\t\t\tshadowMap = light.shadow.map.depthTexture || light.shadow.map.texture;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t\tnumLightProbes ++;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( light.map ) {\n\n\t\t\t\t\tstate.spotLightMap[ numSpotMaps ] = light.map;\n\t\t\t\t\tnumSpotMaps ++;\n\n\t\t\t\t\t// make sure the lightMatrix is up to date\n\t\t\t\t\t// TODO : do it if required only\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t\tif ( light.castShadow ) numSpotShadowsWithMaps ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotLightMatrix[ spotLength ] = shadow.matrix;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ||\n\t\t\thash.numSpotMaps !== numSpotMaps ||\n\t\t\thash.numLightProbes !== numLightProbes ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;\n\t\t\tstate.spotLightMap.length = numSpotMaps;\n\t\t\tstate.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;\n\t\t\tstate.numLightProbes = numLightProbes;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\thash.numSpotMaps = numSpotMaps;\n\n\t\t\thash.numLightProbes = numLightProbes;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions ) {\n\n\tconst lights = new WebGLLights( extensions );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\tconst lightProbeGridArray = [];\n\n\tfunction init( camera ) {\n\n\t\tstate.camera = camera;\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\t\tlightProbeGridArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction pushLightProbeGrid( volume ) {\n\n\t\tlightProbeGridArray.push( volume );\n\n\t}\n\n\tfunction setupLights() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\t\tlightProbeGridArray: lightProbeGridArray,\n\n\t\tcamera: null,\n\n\t\tlights: lights,\n\n\t\ttransmissionRenderTarget: {},\n\t\ttextureUnits: 0\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow,\n\t\tpushLightProbeGrid: pushLightProbeGrid\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tconst renderStateArray = renderStates.get( scene );\n\t\tlet renderState;\n\n\t\tif ( renderStateArray === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStateArray.length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\t\trenderStateArray.push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStateArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ).rg;\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ).r;\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) );\\n\\tgl_FragColor = vec4( mean, std_dev, 0.0, 1.0 );\\n}\";\n\nconst _cubeDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 0, 0 ), /*@__PURE__*/ new Vector3( -1, 0, 0 ), /*@__PURE__*/ new Vector3( 0, 1, 0 ),\n\t/*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, 1 ), /*@__PURE__*/ new Vector3( 0, 0, -1 )\n];\n\nconst _cubeUps = [\n\t/*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, 1 ),\n\t/*@__PURE__*/ new Vector3( 0, 0, -1 ), /*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, -1, 0 )\n];\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nfunction WebGLShadowMap( renderer, objects, capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial(),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = capabilities.maxTextureSize;\n\n\tconst shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ -1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\tlet _previousType = this.type;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tif ( this.type === PCFSoftShadowMap ) {\n\n\t\t\twarn( 'WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead.' );\n\t\t\tthis.type = PCFShadowMap;\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst activeCubeFace = renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst _state = renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\n\t\tif ( _state.buffers.depth.getReversed() === true ) {\n\n\t\t\t_state.buffers.color.setClear( 0, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\n\t\t}\n\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// check for shadow map type changes\n\n\t\tconst typeChanged = _previousType !== this.type;\n\n\t\t// When shadow map type changes, materials need recompilation because sampler types change\n\t\t// (sampler2DShadow for PCF vs sampler2D for Basic)\n\t\tif ( typeChanged ) {\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tif ( object.material ) {\n\n\t\t\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\t\t\tobject.material.forEach( mat => mat.needsUpdate = true );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.material.needsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\twarn( 'WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst reversedDepthBuffer = renderer.state.buffers.depth.getReversed();\n\t\t\tshadow.camera._reversedDepth = reversedDepthBuffer;\n\n\t\t\tif ( shadow.map === null || typeChanged === true ) {\n\n\t\t\t\tif ( shadow.map !== null ) {\n\n\t\t\t\t\tif ( shadow.map.depthTexture !== null ) {\n\n\t\t\t\t\t\tshadow.map.depthTexture.dispose();\n\t\t\t\t\t\tshadow.map.depthTexture = null;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tshadow.map.dispose();\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.type === VSMShadowMap ) {\n\n\t\t\t\t\tif ( light.isPointLight ) {\n\n\t\t\t\t\t\twarn( 'WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.' );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, {\n\t\t\t\t\t\tformat: RGFormat,\n\t\t\t\t\t\ttype: HalfFloatType,\n\t\t\t\t\t\tminFilter: LinearFilter,\n\t\t\t\t\t\tmagFilter: LinearFilter,\n\t\t\t\t\t\tgenerateMipmaps: false\n\t\t\t\t\t} );\n\t\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\t\t// Native depth texture for VSM - depth is captured here, then blurred into the color texture\n\t\t\t\t\tshadow.map.depthTexture = new DepthTexture( _shadowMapSize.x, _shadowMapSize.y, FloatType );\n\t\t\t\t\tshadow.map.depthTexture.name = light.name + '.shadowMapDepth';\n\t\t\t\t\tshadow.map.depthTexture.format = DepthFormat;\n\t\t\t\t\tshadow.map.depthTexture.compareFunction = null; // For regular sampling (not shadow comparison)\n\t\t\t\t\tshadow.map.depthTexture.minFilter = NearestFilter;\n\t\t\t\t\tshadow.map.depthTexture.magFilter = NearestFilter;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( light.isPointLight ) {\n\n\t\t\t\t\t\tshadow.map = new WebGLCubeRenderTarget( _shadowMapSize.x );\n\t\t\t\t\t\tshadow.map.depthTexture = new CubeDepthTexture( _shadowMapSize.x, UnsignedIntType );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );\n\t\t\t\t\t\tshadow.map.depthTexture = new DepthTexture( _shadowMapSize.x, _shadowMapSize.y, UnsignedIntType );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tshadow.map.depthTexture.name = light.name + '.shadowMap';\n\t\t\t\t\tshadow.map.depthTexture.format = DepthFormat;\n\n\t\t\t\t\tif ( this.type === PCFShadowMap ) {\n\n\t\t\t\t\t\tshadow.map.depthTexture.compareFunction = reversedDepthBuffer ? GreaterEqualCompare : LessEqualCompare;\n\t\t\t\t\t\tshadow.map.depthTexture.minFilter = LinearFilter;\n\t\t\t\t\t\tshadow.map.depthTexture.magFilter = LinearFilter;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshadow.map.depthTexture.compareFunction = null;\n\t\t\t\t\t\tshadow.map.depthTexture.minFilter = NearestFilter;\n\t\t\t\t\t\tshadow.map.depthTexture.magFilter = NearestFilter;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t// For cube render targets (PointLights), render all 6 faces. Otherwise, render once.\n\t\t\tconst faceCount = shadow.map.isWebGLCubeRenderTarget ? 6 : 1;\n\n\t\t\tfor ( let face = 0; face < faceCount; face ++ ) {\n\n\t\t\t\t// For cube render targets, render to each face separately\n\t\t\t\tif ( shadow.map.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t\trenderer.setRenderTarget( shadow.map, face );\n\t\t\t\t\trenderer.clear();\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// For 2D render targets, use viewports\n\t\t\t\t\tif ( face === 0 ) {\n\n\t\t\t\t\t\trenderer.setRenderTarget( shadow.map );\n\t\t\t\t\t\trenderer.clear();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst viewport = shadow.getViewport( face );\n\n\t\t\t\t\t_viewport.set(\n\t\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t\t);\n\n\t\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\t}\n\n\t\t\t\tif ( light.isPointLight ) {\n\n\t\t\t\t\tconst camera = shadow.camera;\n\t\t\t\t\tconst shadowMatrix = shadow.matrix;\n\n\t\t\t\t\tconst far = light.distance || camera.far;\n\n\t\t\t\t\tif ( far !== camera.far ) {\n\n\t\t\t\t\t\tcamera.far = far;\n\t\t\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t\t\t\t_lookTarget.copy( camera.position );\n\t\t\t\t\t_lookTarget.add( _cubeDirections[ face ] );\n\t\t\t\t\tcamera.up.copy( _cubeUps[ face ] );\n\t\t\t\t\tcamera.lookAt( _lookTarget );\n\t\t\t\t\tcamera.updateMatrixWorld();\n\n\t\t\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t\t\tshadow._frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t}\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\t_previousType = this.type;\n\n\t\tscope.needsUpdate = false;\n\n\t\trenderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( shadow.mapPass === null ) {\n\n\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, {\n\t\t\t\tformat: RGFormat,\n\t\t\t\ttype: HalfFloatType\n\t\t\t} );\n\n\t\t}\n\n\t\t// vertical pass - read from native depth texture\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.depthTexture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.mapPass );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.map );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, material, light, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t\tif ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||\n\t\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t\t( material.alphaMap && material.alphaTest > 0 ) ||\n\t\t\t\t( material.map && material.alphaTest > 0 ) ||\n\t\t\t\t( material.alphaToCoverage === true ) ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\t\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = ( material.alphaToCoverage === true ) ? 0.5 : material.alphaTest; // approximate alphaToCoverage by using a fixed alphaTest value\n\t\tresult.map = material.map;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tconst materialProperties = renderer.properties.get( result );\n\t\t\tmaterialProperties.light = light;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, groupMaterial, light, type );\n\n\t\t\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, material, light, type );\n\n\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t// make sure to remove the unique distance/depth materials used for shadow map rendering\n\n\t\tfor ( const id in _materialCache ) {\n\n\t\t\tconst cache = _materialCache[ id ];\n\n\t\t\tconst uuid = event.target.uuid;\n\n\t\t\tif ( uuid in cache ) {\n\n\t\t\t\tconst shadowMaterial = cache[ uuid ];\n\t\t\t\tshadowMaterial.dispose();\n\t\t\t\tdelete cache[ uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions ) {\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( -1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentReversed = false;\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetReversed: function ( reversed ) {\n\n\t\t\t\tif ( currentReversed !== reversed ) {\n\n\t\t\t\t\tconst ext = extensions.get( 'EXT_clip_control' );\n\n\t\t\t\t\tif ( reversed ) {\n\n\t\t\t\t\t\text.clipControlEXT( ext.LOWER_LEFT_EXT, ext.ZERO_TO_ONE_EXT );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\text.clipControlEXT( ext.LOWER_LEFT_EXT, ext.NEGATIVE_ONE_TO_ONE_EXT );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentReversed = reversed;\n\n\t\t\t\t\tconst oldDepth = currentDepthClear;\n\t\t\t\t\tcurrentDepthClear = null;\n\t\t\t\t\tthis.setClear( oldDepth );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tgetReversed: function () {\n\n\t\t\t\treturn currentReversed;\n\n\t\t\t},\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentReversed ) depthFunc = ReversedDepthFuncs[ depthFunc ];\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t\tif ( currentReversed ) {\n\n\t\t\t\t\t\tdepth = 1 - depth;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.clearDepth( depth );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\t\t\t\tcurrentReversed = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t     currentStencilRef !== stencilRef ||\n\t\t\t\t     currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t     currentStencilZFail !== stencilZFail ||\n\t\t\t\t     currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tconst uboBindings = new WeakMap();\n\tconst uboProgramMap = new WeakMap();\n\n\tlet enabledCapabilities = {};\n\tlet parameters = {};\n\n\tlet currentBoundFramebuffers = {};\n\tlet currentDrawbuffers = new WeakMap();\n\tlet defaultDrawbuffers = [];\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentBlendColor = new Color( 0, 0, 0 );\n\tlet currentBlendAlpha = 0;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== -1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== -1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( gl.SCISSOR_BOX );\n\tconst viewportParam = gl.getParameter( gl.VIEWPORT );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count, dimensions ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tif ( type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tgl.texImage3D( target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t} else {\n\n\t\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\temptyTextures[ gl.TEXTURE_2D_ARRAY ] = createTexture( gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1 );\n\temptyTextures[ gl.TEXTURE_3D ] = createTexture( gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\t// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER\n\n\t\t\tif ( target === gl.DRAW_FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\tif ( target === gl.FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction drawBuffers( renderTarget, framebuffer ) {\n\n\t\tlet drawBuffers = defaultDrawbuffers;\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tdrawBuffers = currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tcurrentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tdrawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;\n\n\t\t\t\t}\n\n\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== gl.BACK ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = gl.BACK;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t}\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: gl.FUNC_ADD,\n\t\t[ SubtractEquation ]: gl.FUNC_SUBTRACT,\n\t\t[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT\n\t};\n\n\tequationToGL[ MinEquation ] = gl.MIN;\n\tequationToGL[ MaxEquation ] = gl.MAX;\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: gl.ZERO,\n\t\t[ OneFactor ]: gl.ONE,\n\t\t[ SrcColorFactor ]: gl.SRC_COLOR,\n\t\t[ SrcAlphaFactor ]: gl.SRC_ALPHA,\n\t\t[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,\n\t\t[ DstColorFactor ]: gl.DST_COLOR,\n\t\t[ DstAlphaFactor ]: gl.DST_ALPHA,\n\t\t[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,\n\t\t[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,\n\t\t[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,\n\t\t[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA,\n\t\t[ ConstantColorFactor ]: gl.CONSTANT_COLOR,\n\t\t[ OneMinusConstantColorFactor ]: gl.ONE_MINUS_CONSTANT_COLOR,\n\t\t[ ConstantAlphaFactor ]: gl.CONSTANT_ALPHA,\n\t\t[ OneMinusConstantAlphaFactor ]: gl.ONE_MINUS_CONSTANT_ALPHA\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( gl.BLEND );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( gl.BLEND );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\terror( 'WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\terror( 'WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true' );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\terror( 'WebGLState: MultiplyBlending requires material.premultipliedAlpha = true' );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\terror( 'WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\t\t\t\tcurrentBlendColor.set( 0, 0, 0 );\n\t\t\t\tcurrentBlendAlpha = 0;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tif ( blendColor.equals( currentBlendColor ) === false || blendAlpha !== currentBlendAlpha ) {\n\n\t\t\tgl.blendColor( blendColor.r, blendColor.g, blendColor.b, blendAlpha );\n\n\t\t\tcurrentBlendColor.copy( blendColor );\n\t\t\tcurrentBlendAlpha = blendAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = false;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( gl.SAMPLE_ALPHA_TO_COVERAGE )\n\t\t\t: disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t\tif ( depthBuffer.getReversed() ) {\n\n\t\t\t\t\tfactor = - factor;\n\n\t\t\t\t}\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture, webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\twebglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\t} else {\n\n\t\t\t\twebglSlot = currentTextureSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ webglSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ webglSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage3D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage2D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage3D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage2D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage3D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage2D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage3D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D( ...arguments );\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLState:', e );\n\n\t\t}\n\n\t}\n\n\tfunction getParameter( name ) {\n\n\t\tif ( parameters[ name ] !== undefined ) {\n\n\t\t\treturn parameters[ name ];\n\n\t\t} else {\n\n\t\t\treturn gl.getParameter( name );\n\n\t\t}\n\n\t}\n\n\tfunction pixelStorei( name, value ) {\n\n\t\tif ( parameters[ name ] !== value ) {\n\n\t\t\tgl.pixelStorei( name, value );\n\t\t\tparameters[ name ] = value;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\tfunction updateUBOMapping( uniformsGroup, program ) {\n\n\t\tlet mapping = uboProgramMap.get( program );\n\n\t\tif ( mapping === undefined ) {\n\n\t\t\tmapping = new WeakMap();\n\n\t\t\tuboProgramMap.set( program, mapping );\n\n\t\t}\n\n\t\tlet blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( blockIndex === undefined ) {\n\n\t\t\tblockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );\n\n\t\t\tmapping.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\tfunction uniformBlockBinding( uniformsGroup, program ) {\n\n\t\tconst mapping = uboProgramMap.get( program );\n\t\tconst blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( uboBindings.get( program ) !== blockIndex ) {\n\n\t\t\t// bind shader specific block index to global block point\n\t\t\tgl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );\n\n\t\t\tuboBindings.set( program, blockIndex );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( gl.BLEND );\n\t\tgl.disable( gl.CULL_FACE );\n\t\tgl.disable( gl.DEPTH_TEST );\n\t\tgl.disable( gl.POLYGON_OFFSET_FILL );\n\t\tgl.disable( gl.SCISSOR_TEST );\n\t\tgl.disable( gl.STENCIL_TEST );\n\t\tgl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\tgl.blendFunc( gl.ONE, gl.ZERO );\n\t\tgl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );\n\t\tgl.blendColor( 0, 0, 0, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( gl.LESS );\n\n\t\tdepthBuffer.setReversed( false );\n\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( gl.ALWAYS, 0, 0xffffffff );\n\t\tgl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( gl.BACK );\n\t\tgl.frontFace( gl.CCW );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( gl.TEXTURE0 );\n\n\t\tgl.bindFramebuffer( gl.FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tgl.pixelStorei( gl.PACK_ALIGNMENT, 4 );\n\t\tgl.pixelStorei( gl.UNPACK_ALIGNMENT, 4 );\n\t\tgl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, false );\n\t\tgl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false );\n\t\tgl.pixelStorei( gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.BROWSER_DEFAULT_WEBGL );\n\t\tgl.pixelStorei( gl.PACK_ROW_LENGTH, 0 );\n\t\tgl.pixelStorei( gl.PACK_SKIP_PIXELS, 0 );\n\t\tgl.pixelStorei( gl.PACK_SKIP_ROWS, 0 );\n\t\tgl.pixelStorei( gl.UNPACK_ROW_LENGTH, 0 );\n\t\tgl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, 0 );\n\t\tgl.pixelStorei( gl.UNPACK_SKIP_PIXELS, 0 );\n\t\tgl.pixelStorei( gl.UNPACK_SKIP_ROWS, 0 );\n\t\tgl.pixelStorei( gl.UNPACK_SKIP_IMAGES, 0 );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\t\tparameters = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentBoundFramebuffers = {};\n\t\tcurrentDrawbuffers = new WeakMap();\n\t\tdefaultDrawbuffers = [];\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentBlendColor = new Color( 0, 0, 0 );\n\t\tcurrentBlendAlpha = 0;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tdrawBuffers: drawBuffers,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\tcompressedTexImage3D: compressedTexImage3D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\t\tpixelStorei: pixelStorei,\n\t\tgetParameter: getParameter,\n\n\t\tupdateUBOMapping: updateUBOMapping,\n\t\tuniformBlockBinding: uniformBlockBinding,\n\n\t\ttexStorage2D: texStorage2D,\n\t\ttexStorage3D: texStorage3D,\n\t\ttexSubImage2D: texSubImage2D,\n\t\ttexSubImage3D: texSubImage3D,\n\t\tcompressedTexSubImage2D: compressedTexSubImage2D,\n\t\tcompressedTexSubImage3D: compressedTexSubImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;\n\tconst supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );\n\n\tconst _imageDimensions = new Vector2();\n\tconst _videoTextures = new WeakMap();\n\tconst _htmlTextures = new Set();\n\tlet _canvas;\n\n\tconst _sources = new WeakMap(); // maps WebglTexture objects to instances of Source\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\tconst dimensions = getDimensions( image );\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( dimensions.width > maxSize || dimensions.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( dimensions.width, dimensions.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) ) {\n\n\t\t\t\tconst width = Math.floor( scale * dimensions.width );\n\t\t\t\tconst height = Math.floor( scale * dimensions.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\twarn( 'WebGLRenderer: Texture has been resized from (' + dimensions.width + 'x' + dimensions.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\twarn( 'WebGLRenderer: Image in DataTexture is too big (' + dimensions.width + 'x' + dimensions.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture ) {\n\n\t\treturn texture.generateMipmaps;\n\n\t}\n\n\tfunction generateMipmap( target ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t}\n\n\tfunction getTargetType( texture ) {\n\n\t\tif ( texture.isWebGLCubeRenderTarget ) return _gl.TEXTURE_CUBE_MAP;\n\t\tif ( texture.isWebGL3DRenderTarget ) return _gl.TEXTURE_3D;\n\t\tif ( texture.isWebGLArrayRenderTarget || texture.isCompressedArrayTexture ) return _gl.TEXTURE_2D_ARRAY;\n\t\treturn _gl.TEXTURE_2D;\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, normalized, colorSpace, forceLinearTransfer = false ) {\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\twarn( 'WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet ext_texture_norm16;\n\n\t\tif ( normalized ) {\n\n\t\t\text_texture_norm16 = extensions.get( 'EXT_texture_norm16' );\n\n\t\t\tif ( ! ext_texture_norm16 ) {\n\n\t\t\t\twarn( 'WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === _gl.RED ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.R16_EXT;\n\t\t\tif ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.R16_SNORM_EXT;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RED_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.R8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.R16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.R32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RG16_EXT;\n\t\t\tif ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RG16_SNORM_EXT;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RG16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RG32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RG8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RG16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RG32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGB_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RGB8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RGB16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RGB32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RGB8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RGB16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RGB32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RGBA8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RGBA16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RGBA32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RGBA8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RGBA16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RGBA32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGB ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGB16_EXT;\n\t\t\tif ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGB16_SNORM_EXT;\n\t\t\tif ( glType === _gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = _gl.RGB9_E5;\n\t\t\tif ( glType === _gl.UNSIGNED_INT_10F_11F_11F_REV ) internalFormat = _gl.R11F_G11F_B10F;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA ) {\n\n\t\t\tconst transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer( colorSpace );\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGBA16_EXT;\n\t\t\tif ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGBA16_SNORM_EXT;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;\n\n\t\t}\n\n\t\tif ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||\n\t\t\tinternalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||\n\t\t\tinternalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\tfunction getInternalDepthFormat( useStencil, depthType ) {\n\n\t\tlet glInternalFormat;\n\t\tif ( useStencil ) {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH32F_STENCIL8;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\t\t\t\twarn( 'DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT24;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn glInternalFormat;\n\n\t}\n\n\tfunction getMipLevels( texture, image ) {\n\n\t\tif ( textureNeedsGenerateMipmaps( texture ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {\n\n\t\t\treturn Math.log2( Math.max( image.width, image.height ) ) + 1;\n\n\t\t} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {\n\n\t\t\t// user-defined mipmaps\n\n\t\t\treturn texture.mipmaps.length;\n\n\t\t} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {\n\n\t\t\treturn image.mipmaps.length;\n\n\t\t} else {\n\n\t\t\t// texture without mipmaps (only base level)\n\n\t\t\treturn 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t\tif ( texture.isHTMLTexture ) {\n\n\t\t\t_htmlTextures.delete( texture );\n\n\t\t}\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t// check if it's necessary to remove the WebGLTexture object\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures ) {\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\t\t\twebglTexture.usedTimes --;\n\n\t\t\t// the WebGLTexture object is not used anymore, remove it\n\n\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\tdeleteTexture( texture );\n\n\t\t\t}\n\n\t\t\t// remove the weak map entry if no WebGLTexture uses the source anymore\n\n\t\t\tif ( Object.keys( webglTextures ).length === 0 ) {\n\n\t\t\t\t_sources.delete( source );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deleteTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\t\tdelete webglTextures[ textureProperties.__cacheKey ];\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t\tproperties.remove( renderTarget.depthTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {\n\n\t\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {\n\n\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) {\n\n\t\t\t\tfor ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\tinfo.memory.textures --;\n\n\t\t\t}\n\n\t\t\tproperties.remove( textures[ i ] );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction getTextureUnits() {\n\n\t\treturn textureUnits;\n\n\t}\n\n\tfunction setTextureUnits( value ) {\n\n\t\ttextureUnits = value;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\twarn( 'WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tfunction getTextureCacheKey( texture ) {\n\n\t\tconst array = [];\n\n\t\tarray.push( texture.wrapS );\n\t\tarray.push( texture.wrapT );\n\t\tarray.push( texture.wrapR || 0 );\n\t\tarray.push( texture.magFilter );\n\t\tarray.push( texture.minFilter );\n\t\tarray.push( texture.anisotropy );\n\t\tarray.push( texture.internalFormat );\n\t\tarray.push( texture.format );\n\t\tarray.push( texture.type );\n\t\tarray.push( texture.generateMipmaps );\n\t\tarray.push( texture.premultiplyAlpha );\n\t\tarray.push( texture.flipY );\n\t\tarray.push( texture.unpackAlignment );\n\t\tarray.push( texture.colorSpace );\n\n\t\treturn array.join();\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.isExternalTexture !== true && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === null ) {\n\n\t\t\t\twarn( 'WebGLRenderer: Texture marked for update but no image data found.' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\twarn( 'WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t} else if ( texture.isExternalTexture ) {\n\n\t\t\ttextureProperties.__webglTexture = texture.sourceTexture ? texture.sourceTexture : null;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t} else if ( texture.isExternalTexture ) {\n\n\t\t\ttextureProperties.__webglTexture = texture.sourceTexture ? texture.sourceTexture : null;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isCubeDepthTexture !== true && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: _gl.REPEAT,\n\t\t[ ClampToEdgeWrapping ]: _gl.CLAMP_TO_EDGE,\n\t\t[ MirroredRepeatWrapping ]: _gl.MIRRORED_REPEAT\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: _gl.NEAREST,\n\t\t[ NearestMipmapNearestFilter ]: _gl.NEAREST_MIPMAP_NEAREST,\n\t\t[ NearestMipmapLinearFilter ]: _gl.NEAREST_MIPMAP_LINEAR,\n\n\t\t[ LinearFilter ]: _gl.LINEAR,\n\t\t[ LinearMipmapNearestFilter ]: _gl.LINEAR_MIPMAP_NEAREST,\n\t\t[ LinearMipmapLinearFilter ]: _gl.LINEAR_MIPMAP_LINEAR\n\t};\n\n\tconst compareToGL = {\n\t\t[ NeverCompare ]: _gl.NEVER,\n\t\t[ AlwaysCompare ]: _gl.ALWAYS,\n\t\t[ LessCompare ]: _gl.LESS,\n\t\t[ LessEqualCompare ]: _gl.LEQUAL,\n\t\t[ EqualCompare ]: _gl.EQUAL,\n\t\t[ GreaterEqualCompare ]: _gl.GEQUAL,\n\t\t[ GreaterCompare ]: _gl.GREATER,\n\t\t[ NotEqualCompare ]: _gl.NOTEQUAL\n\t};\n\n\tfunction setTextureParameters( textureType, texture ) {\n\n\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false &&\n\t\t\t( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||\n\t\t\ttexture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter ) ) {\n\n\t\t\twarn( 'WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.' );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );\n\n\t\tif ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );\n\n\t\tif ( texture.compareFunction ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_FUNC, compareToGL[ texture.compareFunction ] );\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tif ( texture.magFilter === NearestFilter ) return;\n\t\t\tif ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tlet forceUpload = false;\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t}\n\n\t\t// create Source <-> WebGLTextures mapping if necessary\n\n\t\tconst source = texture.source;\n\t\tlet webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures === undefined ) {\n\n\t\t\twebglTextures = {};\n\t\t\t_sources.set( source, webglTextures );\n\n\t\t}\n\n\t\t// check if there is already a WebGLTexture object for the given texture parameters\n\n\t\tconst textureCacheKey = getTextureCacheKey( texture );\n\n\t\tif ( textureCacheKey !== textureProperties.__cacheKey ) {\n\n\t\t\t// if not, create a new instance of WebGLTexture\n\n\t\t\tif ( webglTextures[ textureCacheKey ] === undefined ) {\n\n\t\t\t\t// create new entry\n\n\t\t\t\twebglTextures[ textureCacheKey ] = {\n\t\t\t\t\ttexture: _gl.createTexture(),\n\t\t\t\t\tusedTimes: 0\n\t\t\t\t};\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t// when a new instance of WebGLTexture was created, a texture upload is required\n\t\t\t\t// even if the image contents are identical\n\n\t\t\t\tforceUpload = true;\n\n\t\t\t}\n\n\t\t\twebglTextures[ textureCacheKey ].usedTimes ++;\n\n\t\t\t// every time the texture cache key changes, it's necessary to check if an instance of\n\t\t\t// WebGLTexture can be deleted in order to avoid a memory leak.\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\n\t\t\tif ( webglTexture !== undefined ) {\n\n\t\t\t\twebglTextures[ textureProperties.__cacheKey ].usedTimes --;\n\n\t\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\t\tdeleteTexture( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// store references to cache key and WebGLTexture object\n\n\t\t\ttextureProperties.__cacheKey = textureCacheKey;\n\t\t\ttextureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;\n\n\t\t}\n\n\t\treturn forceUpload;\n\n\t}\n\n\tfunction getRow( index, rowLength, componentStride ) {\n\n\t\treturn Math.floor( Math.floor( index / componentStride ) / rowLength );\n\n\t}\n\n\tfunction updateTexture( texture, image, glFormat, glType ) {\n\n\t\tconst componentStride = 4; // only RGBA supported\n\n\t\tconst updateRanges = texture.updateRanges;\n\n\t\tif ( updateRanges.length === 0 ) {\n\n\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );\n\n\t\t} else {\n\n\t\t\t// Before applying update ranges, we merge any adjacent / overlapping\n\t\t\t// ranges to reduce load on `gl.texSubImage2D`. Empirically, this has led\n\t\t\t// to performance improvements for applications which make heavy use of\n\t\t\t// update ranges. Likely due to GPU command overhead.\n\t\t\t//\n\t\t\t// Note that to reduce garbage collection between frames, we merge the\n\t\t\t// update ranges in-place. This is safe because this method will clear the\n\t\t\t// update ranges once updated.\n\n\t\t\tupdateRanges.sort( ( a, b ) => a.start - b.start );\n\n\t\t\t// To merge the update ranges in-place, we work from left to right in the\n\t\t\t// existing updateRanges array, merging ranges. This may result in a final\n\t\t\t// array which is smaller than the original. This index tracks the last\n\t\t\t// index representing a merged range, any data after this index can be\n\t\t\t// trimmed once the merge algorithm is completed.\n\t\t\tlet mergeIndex = 0;\n\n\t\t\tfor ( let i = 1; i < updateRanges.length; i ++ ) {\n\n\t\t\t\tconst previousRange = updateRanges[ mergeIndex ];\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\t// Only merge if in the same row and overlapping/adjacent\n\t\t\t\tconst previousEnd = previousRange.start + previousRange.count;\n\t\t\t\tconst currentRow = getRow( range.start, image.width, componentStride );\n\t\t\t\tconst previousRow = getRow( previousRange.start, image.width, componentStride );\n\n\t\t\t\t// We add one here to merge adjacent ranges. This is safe because ranges\n\t\t\t\t// operate over positive integers.\n\t\t\t\tif (\n\t\t\t\t\trange.start <= previousEnd + 1 &&\n\t\t\t\t\tcurrentRow === previousRow &&\n\t\t\t\t\tgetRow( range.start + range.count - 1, image.width, componentStride ) === currentRow // ensure range doesn't spill\n\t\t\t\t) {\n\n\t\t\t\t\tpreviousRange.count = Math.max(\n\t\t\t\t\t\tpreviousRange.count,\n\t\t\t\t\t\trange.start + range.count - previousRange.start\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t++ mergeIndex;\n\t\t\t\t\tupdateRanges[ mergeIndex ] = range;\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\t// Trim the array to only contain the merged ranges.\n\t\t\tupdateRanges.length = mergeIndex + 1;\n\n\t\t\tconst currentUnpackRowLen = state.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackSkipPixels = state.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = state.getParameter( _gl.UNPACK_SKIP_ROWS );\n\n\t\t\tstate.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\tconst pixelStart = Math.floor( range.start / componentStride );\n\t\t\t\tconst pixelCount = Math.ceil( range.count / componentStride );\n\n\t\t\t\tconst x = pixelStart % image.width;\n\t\t\t\tconst y = Math.floor( pixelStart / image.width );\n\n\t\t\t\t// Assumes update ranges refer to contiguous memory\n\t\t\t\tconst width = pixelCount;\n\t\t\t\tconst height = 1;\n\n\t\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_PIXELS, x );\n\t\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_ROWS, y );\n\n\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, x, y, width, height, glFormat, glType, image.data );\n\n\t\t\t}\n\n\t\t\ttexture.clearUpdateRanges();\n\n\t\t\tstate.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = _gl.TEXTURE_2D;\n\n\t\tif ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;\n\t\tif ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst isImageBitmap = ( typeof ImageBitmap !== 'undefined' && texture.image instanceof ImageBitmap );\n\n\t\t\tif ( isImageBitmap === false ) {\n\n\t\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t\tstate.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t\tstate.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t\tstate.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\t}\n\n\t\t\tstate.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\n\t\t\tlet image = resizeImage( texture.image, false, capabilities.maxTextureSize );\n\t\t\timage = verifyColorSpace( texture, image );\n\n\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tlet glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace, texture.isVideoTexture );\n\n\t\t\tsetTextureParameters( textureType, texture );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tconst levels = getMipLevels( texture, image );\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\tglInternalFormat = getInternalDepthFormat( texture.format === DepthStencilFormat, texture.type );\n\n\t\t\t\t//\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tupdateTexture( texture, image, glFormat, glType );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tif ( texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst layerByteLength = getByteLength( mipmap.width, mipmap.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst layerData = mipmap.data.subarray(\n\t\t\t\t\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\twarn( 'WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\twarn( 'WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\tconst layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\tconst layerData = image.data.subarray(\n\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isFramebufferTexture ) {\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet width = image.width, height = image.height;\n\n\t\t\t\t\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t\t\t\t\twidth >>= 1;\n\t\t\t\t\t\t\theight >>= 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isHTMLTexture ) {\n\n\t\t\t\tif ( 'texElementImage2D' in _gl ) {\n\n\t\t\t\t\tconst canvas = _gl.canvas;\n\n\t\t\t\t\t// Ensure the canvas supports HTML-in-Canvas and the element is a child.\n\t\t\t\t\tif ( ! canvas.hasAttribute( 'layoutsubtree' ) ) {\n\n\t\t\t\t\t\tcanvas.setAttribute( 'layoutsubtree', 'true' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image.parentNode !== canvas ) {\n\n\t\t\t\t\t\tcanvas.appendChild( image );\n\n\t\t\t\t\t\t// Register and set up a shared paint callback for all HTMLTextures.\n\t\t\t\t\t\t_htmlTextures.add( texture );\n\n\t\t\t\t\t\tcanvas.onpaint = ( event ) => {\n\n\t\t\t\t\t\t\tconst changed = event.changedElements;\n\n\t\t\t\t\t\t\tfor ( const t of _htmlTextures ) {\n\n\t\t\t\t\t\t\t\tif ( changed.includes( t.image ) ) {\n\n\t\t\t\t\t\t\t\t\tt.needsUpdate = true;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tcanvas.requestPaint();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst level = 0;\n\t\t\t\t\tconst internalFormat = _gl.RGBA;\n\t\t\t\t\tconst srcFormat = _gl.RGBA;\n\t\t\t\t\tconst srcType = _gl.UNSIGNED_BYTE;\n\n\t\t\t\t\t_gl.texElementImage2D( _gl.TEXTURE_2D, level, internalFormat, srcFormat, srcType, image );\n\t\t\t\t\t_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_MIN_FILTER, _gl.LINEAR );\n\t\t\t\t\t_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t\t\t_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tconst dimensions = getDimensions( mipmaps[ 0 ] );\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tconst dimensions = getDimensions( image );\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( textureType );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\tstate.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\tstate.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\tstate.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\tstate.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tconst isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], true, capabilities.maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tglFormat = utils.convert( texture.format, texture.colorSpace ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tlet levels = getMipLevels( texture, image );\n\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\twarn( 'WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t// TODO: Uniformly handle mipmap definitions\n\t\t\t\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t\t\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\t\t\t\tif ( mipmaps.length > 0 ) levels ++;\n\n\t\t\t\t\tconst dimensions = getDimensions( cubeImage[ 0 ] );\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {\n\n\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\ttextureProperties.__renderTarget = renderTarget;\n\n\t\tif ( ! renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\tconst width = Math.max( 1, renderTarget.width >> level );\n\t\t\tconst height = Math.max( 1, renderTarget.height >> level );\n\n\t\t\tif ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tstate.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, textureProperties.__webglTexture, 0, getRenderTargetSamples( renderTarget ) );\n\n\t\t} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, textureProperties.__webglTexture, level );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, useMultisample ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t// retrieve the depth attachment types\n\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\tconst depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null;\n\t\t\tconst glInternalFormat = getInternalDepthFormat( renderTarget.stencilBuffer, depthType );\n\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t// set up the attachment\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else if ( useMultisample ) {\n\n\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );\n\n\t\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else if ( useMultisample ) {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget, cubeFace ) {\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\tconst textureProperties = properties.get( renderTarget.depthTexture );\n\t\ttextureProperties.__renderTarget = renderTarget;\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! textureProperties.__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( isCube ) {\n\n\t\t\t// For cube depth textures, initialize and bind without uploading image data\n\t\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\t\ttextureProperties.__webglInit = true;\n\t\t\t\trenderTarget.depthTexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t}\n\n\t\t\t// Only create and allocate storage once\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.depthTexture );\n\n\t\t\t\t// Allocate storage for all 6 faces with correct depth texture format\n\t\t\t\tconst glFormat = utils.convert( renderTarget.depthTexture.format );\n\t\t\t\tconst glType = utils.convert( renderTarget.depthTexture.type );\n\n\t\t\t\t// Use proper internal format for depth textures\n\t\t\t\tlet glInternalFormat;\n\t\t\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT24;\n\n\t\t\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\t}\n\n\t\tconst webglDepthTexture = textureProperties.__webglTexture;\n\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\tconst glTextureType = isCube ? _gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace : _gl.TEXTURE_2D;\n\t\tconst glAttachmentType = renderTarget.depthTexture.format === DepthStencilFormat ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\t// if the bound depth texture has changed\n\t\tif ( renderTargetProperties.__boundDepthTexture !== renderTarget.depthTexture ) {\n\n\t\t\t// fire the dispose event to get rid of stored state associated with the previously bound depth buffer\n\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\tif ( renderTargetProperties.__depthDisposeCallback ) {\n\n\t\t\t\trenderTargetProperties.__depthDisposeCallback();\n\n\t\t\t}\n\n\t\t\t// set up dispose listeners to track when the currently attached buffer is implicitly unbound\n\t\t\tif ( depthTexture ) {\n\n\t\t\t\tconst disposeEvent = () => {\n\n\t\t\t\t\tdelete renderTargetProperties.__boundDepthTexture;\n\t\t\t\t\tdelete renderTargetProperties.__depthDisposeCallback;\n\t\t\t\t\tdepthTexture.removeEventListener( 'dispose', disposeEvent );\n\n\t\t\t\t};\n\n\t\t\t\tdepthTexture.addEventListener( 'dispose', disposeEvent );\n\t\t\t\trenderTargetProperties.__depthDisposeCallback = disposeEvent;\n\n\t\t\t}\n\n\t\t\trenderTargetProperties.__boundDepthTexture = depthTexture;\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\t// For cube render targets with depth texture, setup each face\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, i );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst mipmaps = renderTarget.texture.mipmaps;\n\n\t\t\t\tif ( mipmaps && mipmaps.length > 0 ) {\n\n\t\t\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer[ 0 ], renderTarget, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\n\t\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer[ i ] === undefined ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// attach buffer if it's been created already\n\t\t\t\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\t\t\tconst renderbuffer = renderTargetProperties.__webglDepthbuffer[ i ];\n\t\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst mipmaps = renderTarget.texture.mipmaps;\n\n\t\t\t\tif ( mipmaps && mipmaps.length > 0 ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ 0 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer === undefined ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// attach buffer if it's been created already\n\t\t\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\t\tconst renderbuffer = renderTargetProperties.__webglDepthbuffer;\n\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// rebind framebuffer with external textures\n\tfunction rebindTextures( renderTarget, colorTexture, depthTexture ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( colorTexture !== undefined ) {\n\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );\n\n\t\t}\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\tif ( ! isMultipleRenderTargets ) {\n\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = [];\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = [];\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace, renderTarget.isXRRenderTarget === true );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tlet glTextureType = _gl.TEXTURE_2D;\n\n\t\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindTexture( glTextureType, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( glTextureType, attachment );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, glTextureType, 0 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment ) ) {\n\n\t\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = _gl.TEXTURE_2D;\n\n\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture );\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tconst targetType = getTargetType( renderTarget );\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( targetType, webglTexture );\n\t\t\t\tgenerateMipmap( targetType );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst invalidationArrayRead = [];\n\tconst invalidationArrayDraw = [];\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.samples > 0 ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tconst textures = renderTarget.textures;\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = _gl.COLOR_BUFFER_BIT;\n\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\t\t\t// If MRT we need to remove FBO attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tconst mipmaps = renderTarget.texture.mipmaps;\n\n\t\t\t\tif ( mipmaps && mipmaps.length > 0 ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ 0 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTarget.resolveDepthBuffer ) {\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;\n\n\t\t\t\t\t\t// resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)\n\n\t\t\t\t\t\tif ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );\n\n\t\t\t\t\tif ( supportsInvalidateFramebuffer === true ) {\n\n\t\t\t\t\t\tinvalidationArrayRead.length = 0;\n\t\t\t\t\t\tinvalidationArrayDraw.length = 0;\n\n\t\t\t\t\t\tinvalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {\n\n\t\t\t\t\t\t\tinvalidationArrayRead.push( depthStyle );\n\t\t\t\t\t\t\tinvalidationArrayDraw.push( depthStyle );\n\n\t\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArrayRead );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t\t// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {\n\n\t\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn Math.min( capabilities.maxSamples, renderTarget.samples );\n\n\t}\n\n\tfunction useMultisampledRTT( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\treturn renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tfunction verifyColorSpace( texture, image ) {\n\n\t\tconst colorSpace = texture.colorSpace;\n\t\tconst format = texture.format;\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isCompressedTexture === true || texture.isVideoTexture === true ) return image;\n\n\t\tif ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {\n\n\t\t\t// sRGB\n\n\t\t\tif ( ColorManagement.getTransfer( colorSpace ) === SRGBTransfer ) {\n\n\t\t\t\t// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format\n\n\t\t\t\tif ( format !== RGBAFormat || type !== UnsignedByteType ) {\n\n\t\t\t\t\twarn( 'WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\terror( 'WebGLTextures: Unsupported texture color space:', colorSpace );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction getDimensions( image ) {\n\n\t\tif ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) {\n\n\t\t\t// if intrinsic data are not available, fallback to width/height\n\n\t\t\t_imageDimensions.width = image.naturalWidth || image.width;\n\t\t\t_imageDimensions.height = image.naturalHeight || image.height;\n\n\t\t} else if ( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) {\n\n\t\t\t_imageDimensions.width = image.displayWidth;\n\t\t\t_imageDimensions.height = image.displayHeight;\n\n\t\t} else {\n\n\t\t\t_imageDimensions.width = image.width;\n\t\t\t_imageDimensions.height = image.height;\n\n\t\t}\n\n\t\treturn _imageDimensions;\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\tthis.getTextureUnits = getTextureUnits;\n\tthis.setTextureUnits = setTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.rebindTextures = rebindTextures;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\tthis.setupDepthRenderbuffer = setupDepthRenderbuffer;\n\tthis.setupFrameBufferTexture = setupFrameBufferTexture;\n\tthis.useMultisampledRTT = useMultisampledRTT;\n\n\tthis.isReversedDepthBuffer = function () {\n\n\t\treturn state.buffers.depth.getReversed();\n\n\t};\n\n}\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p, colorSpace = NoColorSpace ) {\n\n\t\tlet extension;\n\n\t\tconst transfer = ColorManagement.getTransfer( colorSpace );\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;\n\t\tif ( p === UnsignedInt101111Type ) return gl.UNSIGNED_INT_10F_11F_11F_REV;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\t\tif ( p === HalfFloatType ) return gl.HALF_FLOAT;\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedFormat ) return gl.RED;\n\t\tif ( p === RedIntegerFormat ) return gl.RED_INTEGER;\n\t\tif ( p === RGFormat ) return gl.RG;\n\t\tif ( p === RGIntegerFormat ) return gl.RG_INTEGER;\n\t\tif ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( transfer === SRGBTransfer ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC\n\n\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format || p === R11_EAC_Format || p === SIGNED_R11_EAC_Format || p === RG11_EAC_Format || p === SIGNED_RG11_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\n\t\t\t\tif ( p === R11_EAC_Format ) return extension.COMPRESSED_R11_EAC;\n\t\t\t\tif ( p === SIGNED_R11_EAC_Format ) return extension.COMPRESSED_SIGNED_R11_EAC;\n\t\t\t\tif ( p === RG11_EAC_Format ) return extension.COMPRESSED_RG11_EAC;\n\t\t\t\tif ( p === SIGNED_RG11_EAC_Format ) return extension.COMPRESSED_SIGNED_RG11_EAC;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\t\t\t\tif ( p === RGB_BPTC_SIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;\n\t\t\t\tif ( p === RGB_BPTC_UNSIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// RGTC\n\n\t\tif ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_rgtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RED_RGTC1_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;\n\t\t\t\tif ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( p === UnsignedInt248Type ) return gl.UNSIGNED_INT_24_8;\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nconst _occlusion_vertex = `\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}`;\n\nconst _occlusion_fragment = `\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}`;\n\n/**\n * A XR module that manages the access to the Depth Sensing API.\n */\nclass WebXRDepthSensing {\n\n\t/**\n\t * Constructs a new depth sensing module.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * An opaque texture representing the depth of the user's environment.\n\t\t *\n\t\t * @type {?ExternalTexture}\n\t\t */\n\t\tthis.texture = null;\n\n\t\t/**\n\t\t * A plane mesh for visualizing the depth texture.\n\t\t *\n\t\t * @type {?Mesh}\n\t\t */\n\t\tthis.mesh = null;\n\n\t\t/**\n\t\t * The depth near value.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.depthNear = 0;\n\n\t\t/**\n\t\t * The depth near far.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.depthFar = 0;\n\n\t}\n\n\t/**\n\t * Inits the depth sensing module\n\t *\n\t * @param {XRWebGLDepthInformation} depthData - The XR depth data.\n\t * @param {XRRenderState} renderState - The XR render state.\n\t */\n\tinit( depthData, renderState ) {\n\n\t\tif ( this.texture === null ) {\n\n\t\t\tconst texture = new ExternalTexture( depthData.texture );\n\n\t\t\tif ( ( depthData.depthNear !== renderState.depthNear ) || ( depthData.depthFar !== renderState.depthFar ) ) {\n\n\t\t\t\tthis.depthNear = depthData.depthNear;\n\t\t\t\tthis.depthFar = depthData.depthFar;\n\n\t\t\t}\n\n\t\t\tthis.texture = texture;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a plane mesh that visualizes the depth texture.\n\t *\n\t * @param {ArrayCamera} cameraXR - The XR camera.\n\t * @return {?Mesh} The plane mesh.\n\t */\n\tgetMesh( cameraXR ) {\n\n\t\tif ( this.texture !== null ) {\n\n\t\t\tif ( this.mesh === null ) {\n\n\t\t\t\tconst viewport = cameraXR.cameras[ 0 ].viewport;\n\t\t\t\tconst material = new ShaderMaterial( {\n\t\t\t\t\tvertexShader: _occlusion_vertex,\n\t\t\t\t\tfragmentShader: _occlusion_fragment,\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\tdepthColor: { value: this.texture },\n\t\t\t\t\t\tdepthWidth: { value: viewport.z },\n\t\t\t\t\t\tdepthHeight: { value: viewport.w }\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tthis.mesh = new Mesh( new PlaneGeometry( 20, 20 ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.mesh;\n\n\t}\n\n\t/**\n\t * Resets the module\n\t */\n\treset() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t}\n\n\t/**\n\t * Returns a texture representing the depth of the user's environment.\n\t *\n\t * @return {?ExternalTexture} The depth texture.\n\t */\n\tgetDepthTexture() {\n\n\t\treturn this.texture;\n\n\t}\n\n}\n\n/**\n * This class represents an abstraction of the WebXR Device API and is\n * internally used by {@link WebGLRenderer}. `WebXRManager` also provides a public\n * interface that allows users to enable/disable XR and perform XR related\n * tasks like for instance retrieving controllers.\n *\n * @augments EventDispatcher\n * @hideconstructor\n */\nclass WebXRManager extends EventDispatcher {\n\n\t/**\n\t * Constructs a new WebGL renderer.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGL2RenderingContext} gl - The rendering context.\n\t */\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\t\t// Set default foveation to maximum.\n\t\tlet foveation = 1.0;\n\t\tlet customReferenceSpace = null;\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet xrFrame = null;\n\n\t\tconst supportsGlBinding = typeof XRWebGLBinding !== 'undefined';\n\n\t\tconst depthSensing = new WebXRDepthSensing();\n\t\tconst cameraAccessTextures = {};\n\t\tconst attributes = gl.getContextAttributes();\n\n\t\tlet initialRenderTarget = null;\n\t\tlet newRenderTarget = null;\n\n\t\tconst controllers = [];\n\t\tconst controllerInputSources = [];\n\n\t\tconst currentSize = new Vector2();\n\t\tlet currentPixelRatio = null;\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraXR = new ArrayCamera();\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\t/**\n\t\t * Whether the manager's XR camera should be automatically updated or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.cameraAutoUpdate = true;\n\n\t\t/**\n\t\t * This flag notifies the renderer to be ready for XR rendering. Set it to `true`\n\t\t * if you are going to use XR in your app.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.enabled = false;\n\n\t\t/**\n\t\t * Whether XR presentation is active or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default false\n\t\t */\n\t\tthis.isPresenting = false;\n\n\t\t/**\n\t\t * Returns a group representing the `target ray` space of the XR controller.\n\t\t * Use this space for visualizing 3D objects that support the user in pointing\n\t\t * tasks like UI interaction.\n\t\t *\n\t\t * @param {number} index - The index of the controller.\n\t\t * @return {Group} A group representing the `target ray` space.\n\t\t */\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\t/**\n\t\t * Returns a group representing the `grip` space of the XR controller.\n\t\t * Use this space for visualizing 3D objects that support the user in pointing\n\t\t * tasks like UI interaction.\n\t\t *\n\t\t * Note: If you want to show something in the user's hand AND offer a\n\t\t * pointing ray at the same time, you'll want to attached the handheld object\n\t\t * to the group returned by `getControllerGrip()` and the ray to the\n\t\t * group returned by `getController()`. The idea is to have two\n\t\t * different groups in two different coordinate spaces for the same WebXR\n\t\t * controller.\n\t\t *\n\t\t * @param {number} index - The index of the controller.\n\t\t * @return {Group} A group representing the `grip` space.\n\t\t */\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\t/**\n\t\t * Returns a group representing the `hand` space of the XR controller.\n\t\t * Use this space for visualizing 3D objects that support the user in pointing\n\t\t * tasks like UI interaction.\n\t\t *\n\t\t * @param {number} index - The index of the controller.\n\t\t * @return {Group} A group representing the `hand` space.\n\t\t */\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controllerIndex = controllerInputSources.indexOf( event.inputSource );\n\n\t\t\tif ( controllerIndex === -1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\tif ( controller !== undefined ) {\n\n\t\t\t\tcontroller.update( event.inputSource, event.frame, customReferenceSpace || referenceSpace );\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tsession.removeEventListener( 'select', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'end', onSessionEnd );\n\t\t\tsession.removeEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\n\t\t\t\tif ( inputSource === null ) continue;\n\n\t\t\t\tcontrollerInputSources[ i ] = null;\n\n\t\t\t\tcontrollers[ i ].disconnect( inputSource );\n\n\t\t\t}\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\tdepthSensing.reset();\n\t\t\tfor ( const key in cameraAccessTextures ) {\n\n\t\t\t\tdelete cameraAccessTextures[ key ];\n\n\t\t\t}\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\trenderer.setRenderTarget( initialRenderTarget );\n\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\t\t\tnewRenderTarget = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\trenderer.setPixelRatio( currentPixelRatio );\n\t\t\trenderer.setSize( currentSize.width, currentSize.height, false );\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\t/**\n\t\t * Sets the framebuffer scale factor.\n\t\t *\n\t\t * This method can not be used during a XR session.\n\t\t *\n\t\t * @param {number} value - The framebuffer scale factor.\n\t\t */\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\twarn( 'WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Sets the reference space type. Can be used to configure a spatial relationship with the user's physical\n\t\t * environment. Depending on how the user moves in 3D space, setting an appropriate reference space can\n\t\t * improve tracking. Default is `local-floor`. Valid values can be found here\n\t\t * https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpace#reference_space_types.\n\t\t *\n\t\t * This method can not be used during a XR session.\n\t\t *\n\t\t * @param {string} value - The reference space type.\n\t\t */\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\twarn( 'WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the XR reference space.\n\t\t *\n\t\t * @return {XRReferenceSpace} The XR reference space.\n\t\t */\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn customReferenceSpace || referenceSpace;\n\n\t\t};\n\n\t\t/**\n\t\t * Sets a custom XR reference space.\n\t\t *\n\t\t * @param {XRReferenceSpace} space - The XR reference space.\n\t\t */\n\t\tthis.setReferenceSpace = function ( space ) {\n\n\t\t\tcustomReferenceSpace = space;\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the current base layer.\n\t\t *\n\t\t * This is an `XRProjectionLayer` when the targeted XR device supports the\n\t\t * WebXR Layers API, or an `XRWebGLLayer` otherwise.\n\t\t *\n\t\t * @return {?(XRWebGLLayer|XRProjectionLayer)} The XR base layer.\n\t\t */\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the current XR binding.\n\t\t *\n\t\t * Creates a new binding if needed and the browser is\n\t\t * capable of doing so.\n\t\t *\n\t\t * @return {?XRWebGLBinding} The XR binding. Returns `null` if one cannot be created.\n\t\t */\n\t\tthis.getBinding = function () {\n\n\t\t\tif ( glBinding === null && supportsGlBinding ) {\n\n\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t}\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the current XR frame.\n\t\t *\n\t\t * @return {?XRFrame} The XR frame. Returns `null` when used outside a XR session.\n\t\t */\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the current XR session.\n\t\t *\n\t\t * @return {?XRSession} The XR session. Returns `null` when used outside a XR session.\n\t\t */\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\t/**\n\t\t * After a XR session has been requested usually with one of the `*Button` modules, it\n\t\t * is injected into the renderer with this method. This method triggers the start of\n\t\t * the actual XR rendering.\n\t\t *\n\t\t * @async\n\t\t * @param {XRSession} value - The XR session to set.\n\t\t * @return {Promise} A Promise that resolves when the session has been set.\n\t\t */\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tinitialRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\t\trenderer.getSize( currentSize );\n\n\n\t\t\t\t// Check that the browser implements the necessary APIs to use an\n\t\t\t\t// XRProjectionLayer rather than an XRWebGLLayer\n\t\t\t\tconst supportsLayers = supportsGlBinding && 'createProjectionLayer' in XRWebGLBinding.prototype;\n\n\t\t\t\tif ( ! supportsLayers ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\t\talpha: true,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tresolveDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),\n\t\t\t\t\t\t\tresolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false )\n\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet depthFormat = null;\n\t\t\t\t\tlet depthType = null;\n\t\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tglDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\t\tdepthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: gl.RGBA8,\n\t\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = this.getBinding();\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tdepthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0,\n\t\t\t\t\t\t\tresolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),\n\t\t\t\t\t\t\tresolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false )\n\t\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tnewRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278\n\n\t\t\t\tthis.setFoveation( foveation );\n\n\t\t\t\tcustomReferenceSpace = null;\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the environment blend mode from the current XR session.\n\t\t *\n\t\t * @return {'opaque'|'additive'|'alpha-blend'|undefined} The environment blend mode. Returns `undefined` when used outside of a XR session.\n\t\t */\n\t\tthis.getEnvironmentBlendMode = function () {\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\treturn session.environmentBlendMode;\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the current depth texture computed via depth sensing.\n\t\t *\n\t\t * See {@link WebXRDepthSensing#getDepthTexture}.\n\t\t *\n\t\t * @return {?Texture} The depth texture.\n\t\t */\n\t\tthis.getDepthTexture = function () {\n\n\t\t\treturn depthSensing.getDepthTexture();\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( index >= 0 ) {\n\n\t\t\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\t\t\tcontrollers[ index ].disconnect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\n\t\t\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( controllerIndex === -1 ) {\n\n\t\t\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\t\t\tif ( controllerIndex === -1 ) break;\n\n\t\t\t\t}\n\n\t\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.connect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t *\n\t\t * @param {ArrayCamera} camera - The camera to update.\n\t\t * @param {PerspectiveCamera} cameraL - The left camera.\n\t\t * @param {PerspectiveCamera} cameraR - The right camera.\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Check if the projection uses an infinite far plane.\n\t\t\tif ( projL[ 10 ] === -1 ) {\n\n\t\t\t\t// Use the projection matrix from the left eye.\n\t\t\t\t// The camera offset is sufficient to include the view volumes\n\t\t\t\t// of both eyes (assuming symmetric projections).\n\t\t\t\tcamera.projectionMatrix.copy( cameraL.projectionMatrix );\n\t\t\t\tcamera.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );\n\n\t\t\t} else {\n\n\t\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t\t// although must now be relative to the new union camera.\n\t\t\t\tconst near2 = near + zOffset;\n\t\t\t\tconst far2 = far + zOffset;\n\t\t\t\tconst left2 = left - xOffset;\n\t\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\t\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\t/**\n\t\t * Updates the state of the XR camera. Use this method on app level if you\n\t\t * set `cameraAutoUpdate` to `false`. The method requires the non-XR\n\t\t * camera of the scene as a parameter. The passed in camera's transformation\n\t\t * is automatically adjusted to the position of the XR camera when calling\n\t\t * this method.\n\t\t *\n\t\t * @param {Camera} camera - The camera.\n\t\t */\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tlet depthNear = camera.near;\n\t\t\tlet depthFar = camera.far;\n\n\t\t\tif ( depthSensing.texture !== null ) {\n\n\t\t\t\tif ( depthSensing.depthNear > 0 ) depthNear = depthSensing.depthNear;\n\t\t\t\tif ( depthSensing.depthFar > 0 ) depthFar = depthSensing.depthFar;\n\n\t\t\t}\n\n\t\t\tcameraXR.near = cameraR.near = cameraL.near = depthNear;\n\t\t\tcameraXR.far = cameraR.far = cameraL.far = depthFar;\n\n\t\t\tif ( _currentDepthNear !== cameraXR.near || _currentDepthFar !== cameraXR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraXR.near,\n\t\t\t\t\tdepthFar: cameraXR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraXR.near;\n\t\t\t\t_currentDepthFar = cameraXR.far;\n\n\t\t\t}\n\n\t\t\t// inherit camera layers and enable eye layers (1 = left, 2 = right)\n\t\t\tcameraXR.layers.mask = camera.layers.mask | 0b110;\n\t\t\tcameraL.layers.mask = cameraXR.layers.mask & -5;\n\t\t\tcameraR.layers.mask = cameraXR.layers.mask & -3;\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraXR.cameras;\n\n\t\t\tupdateCamera( cameraXR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraXR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraXR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t\t// update user camera and its children\n\n\t\t\tupdateUserCamera( camera, cameraXR, parent );\n\n\t\t};\n\n\t\tfunction updateUserCamera( camera, cameraXR, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrix.copy( cameraXR.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrix.copy( parent.matrixWorld );\n\t\t\t\tcamera.matrix.invert();\n\t\t\t\tcamera.matrix.multiply( cameraXR.matrixWorld );\n\n\t\t\t}\n\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.updateMatrixWorld( true );\n\n\t\t\tcamera.projectionMatrix.copy( cameraXR.projectionMatrix );\n\t\t\tcamera.projectionMatrixInverse.copy( cameraXR.projectionMatrixInverse );\n\n\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\tcamera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] );\n\t\t\t\tcamera.zoom = 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * Returns an instance of {@link ArrayCamera} which represents the XR camera\n\t\t * of the active XR session. For each view it holds a separate camera object.\n\t\t *\n\t\t * The camera's `fov` is currently not used and does not reflect the fov of\n\t\t * the XR camera. If you need the fov on app level, you have to compute in\n\t\t * manually from the XR camera's projection matrices.\n\t\t *\n\t\t * @return {ArrayCamera} The XR camera.\n\t\t */\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraXR;\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the amount of foveation used by the XR compositor for the projection layer.\n\t\t *\n\t\t * @return {number|undefined} The amount of foveation.\n\t\t */\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer === null && glBaseLayer === null ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn foveation;\n\n\t\t};\n\n\t\t/**\n\t\t * Sets the foveation value.\n\t\t *\n\t\t * @param {number} value - A number in the range `[0,1]` where `0` means no foveation (full resolution)\n\t\t * and `1` means maximum foveation (the edges render at lower resolution).\n\t\t */\n\t\tthis.setFoveation = function ( value ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tfoveation = value;\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Returns `true` if depth sensing is supported.\n\t\t *\n\t\t * @return {boolean} Whether depth sensing is supported or not.\n\t\t */\n\t\tthis.hasDepthSensing = function () {\n\n\t\t\treturn depthSensing.texture !== null;\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the depth sensing mesh.\n\t\t *\n\t\t * See {@link WebXRDepthSensing#getMesh}.\n\t\t *\n\t\t * @return {Mesh} The depth sensing mesh.\n\t\t */\n\t\tthis.getDepthSensingMesh = function () {\n\n\t\t\treturn depthSensing.getMesh( cameraXR );\n\n\t\t};\n\n\t\t/**\n\t\t * Retrieves an opaque texture from the view-aligned {@link XRCamera}.\n\t\t * Only available during the current animation loop.\n\t\t *\n\t\t * @param {XRCamera} xrCamera - The camera to query.\n\t\t * @return {?Texture} An opaque texture representing the current raw camera frame.\n\t\t */\n\t\tthis.getCameraTexture = function ( xrCamera ) {\n\n\t\t\treturn cameraAccessTextures[ xrCamera ];\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( customReferenceSpace || referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\trenderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );\n\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraXRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraXR's camera list\n\n\t\t\t\tif ( views.length !== cameraXR.cameras.length ) {\n\n\t\t\t\t\tcameraXR.cameras.length = 0;\n\t\t\t\t\tcameraXRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\trenderer.setRenderTargetTextures(\n\t\t\t\t\t\t\t\tnewRenderTarget,\n\t\t\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t\t\tglSubImage.depthStencilTexture );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet camera = cameras[ i ];\n\n\t\t\t\t\tif ( camera === undefined ) {\n\n\t\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\t\tcamera.layers.enable( i );\n\t\t\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\t\t\tcameras[ i ] = camera;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraXR.matrix.copy( camera.matrix );\n\t\t\t\t\t\tcameraXR.matrix.decompose( cameraXR.position, cameraXR.quaternion, cameraXR.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraXRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraXR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tconst enabledFeatures = session.enabledFeatures;\n\t\t\t\tconst gpuDepthSensingEnabled = enabledFeatures &&\n\t\t\t\t\tenabledFeatures.includes( 'depth-sensing' ) &&\n\t\t\t\t\tsession.depthUsage == 'gpu-optimized';\n\n\t\t\t\tif ( gpuDepthSensingEnabled && supportsGlBinding ) {\n\n\t\t\t\t\tglBinding = scope.getBinding();\n\n\t\t\t\t\tconst depthData = glBinding.getDepthInformation( views[ 0 ] );\n\n\t\t\t\t\tif ( depthData && depthData.isValid && depthData.texture ) {\n\n\t\t\t\t\t\tdepthSensing.init( depthData, session.renderState );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst cameraAccessEnabled = enabledFeatures &&\n\t\t\t\t    enabledFeatures.includes( 'camera-access' );\n\n\t\t\t\tif ( cameraAccessEnabled && supportsGlBinding ) {\n\n\t\t\t\t\trenderer.state.unbindTexture();\n\n\t\t\t\t\tglBinding = scope.getBinding();\n\n\t\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\t\tconst camera = views[ i ].camera;\n\n\t\t\t\t\t\tif ( camera ) {\n\n\t\t\t\t\t\t\tlet cameraTex = cameraAccessTextures[ camera ];\n\n\t\t\t\t\t\t\tif ( ! cameraTex ) {\n\n\t\t\t\t\t\t\t\tcameraTex = new ExternalTexture();\n\t\t\t\t\t\t\t\tcameraAccessTextures[ camera ] = cameraTex;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst glTexture = glBinding.getCameraImage( camera );\n\t\t\t\t\t\t\tcameraTex.sourceTexture = glTexture;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\t\t\t\tconst controller = controllers[ i ];\n\n\t\t\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\t\t\tcontroller.update( inputSource, frame, customReferenceSpace || referenceSpace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\tif ( frame.detectedPlanes ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'planesdetected', data: frame } );\n\n\t\t\t}\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _m = /*@__PURE__*/ new Matrix3();\n\n_m.set( -1, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0 );\n\nfunction WebGLMaterials( renderer, properties ) {\n\n\tfunction refreshTransformUniform( map, uniform ) {\n\n\t\tif ( map.matrixAutoUpdate === true ) {\n\n\t\t\tmap.updateMatrix();\n\n\t\t}\n\n\t\tuniform.value.copy( map.matrix );\n\n\t}\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tfog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isNodeMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t} else if ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\tif ( material.envMap ) {\n\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t\tif ( material.envMap ) {\n\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\n\t\t\trefreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform );\n\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.bumpScale.value *= -1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\n\t\t\trefreshTransformUniform( material.normalMap, uniforms.normalMapTransform );\n\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\n\t\t\trefreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform );\n\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\trefreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t\trefreshTransformUniform( material.specularMap, uniforms.specularMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst envMap = materialProperties.envMap;\n\t\tconst envMapRotation = materialProperties.envMapRotation;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\t// note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()\n\t\t\tuniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( envMapRotation ) ).transpose();\n\n\n\t\t\tif ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {\n\n\t\t\t\tuniforms.envMapRotation.value.premultiply( _m );\n\n\t\t\t}\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\trefreshTransformUniform( material.lightMap, uniforms.lightMapTransform );\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\trefreshTransformUniform( material.aoMap, uniforms.aoMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.uvTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t\trefreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform );\n\n\t\t}\n\n\t\tuniforms.roughness.value = material.roughness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t\trefreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform );\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform );\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.dispersion > 0 ) {\n\n\t\t\tuniforms.dispersion.value = material.dispersion;\n\n\t\t}\n\n\t\tif ( material.iridescence > 0 ) {\n\n\t\t\tuniforms.iridescence.value = material.iridescence;\n\t\t\tuniforms.iridescenceIOR.value = material.iridescenceIOR;\n\t\t\tuniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];\n\t\t\tuniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];\n\n\t\t\tif ( material.iridescenceMap ) {\n\n\t\t\t\tuniforms.iridescenceMap.value = material.iridescenceMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tuniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t\trefreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tif ( material.anisotropy > 0 ) {\n\n\t\t\tuniforms.anisotropyVector.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );\n\n\t\t\tif ( material.anisotropyMap ) {\n\n\t\t\t\tuniforms.anisotropyMap.value = material.anisotropyMap;\n\n\t\t\t\trefreshTransformUniform( material.anisotropyMap, uniforms.anisotropyMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t\trefreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t\trefreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tconst light = properties.get( material ).light;\n\n\t\tuniforms.referencePosition.value.setFromMatrixPosition( light.matrixWorld );\n\t\tuniforms.nearDistance.value = light.shadow.camera.near;\n\t\tuniforms.farDistance.value = light.shadow.camera.far;\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction WebGLUniformsGroups( gl, info, capabilities, state ) {\n\n\tlet buffers = {};\n\tlet updateList = {};\n\tlet allocatedBindingPoints = [];\n\n\tconst maxBindingPoints = gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ); // binding points are global whereas block indices are per shader program\n\n\tfunction bind( uniformsGroup, program ) {\n\n\t\tconst webglProgram = program.program;\n\t\tstate.uniformBlockBinding( uniformsGroup, webglProgram );\n\n\t}\n\n\tfunction update( uniformsGroup, program ) {\n\n\t\tlet buffer = buffers[ uniformsGroup.id ];\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tprepareUniformsGroup( uniformsGroup );\n\n\t\t\tbuffer = createBuffer( uniformsGroup );\n\t\t\tbuffers[ uniformsGroup.id ] = buffer;\n\n\t\t\tuniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\t}\n\n\t\t// ensure to update the binding points/block indices mapping for this program\n\n\t\tconst webglProgram = program.program;\n\t\tstate.updateUBOMapping( uniformsGroup, webglProgram );\n\n\t\t// update UBO once per frame\n\n\t\tconst frame = info.render.frame;\n\n\t\tif ( updateList[ uniformsGroup.id ] !== frame ) {\n\n\t\t\tupdateBufferData( uniformsGroup );\n\n\t\t\tupdateList[ uniformsGroup.id ] = frame;\n\n\t\t}\n\n\t}\n\n\tfunction createBuffer( uniformsGroup ) {\n\n\t\t// the setup of an UBO is independent of a particular shader program but global\n\n\t\tconst bindingPointIndex = allocateBindingPointIndex();\n\t\tuniformsGroup.__bindingPointIndex = bindingPointIndex;\n\n\t\tconst buffer = gl.createBuffer();\n\t\tconst size = uniformsGroup.__size;\n\t\tconst usage = uniformsGroup.usage;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\t\tgl.bufferData( gl.UNIFORM_BUFFER, size, usage );\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\t\tgl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer );\n\n\t\treturn buffer;\n\n\t}\n\n\tfunction allocateBindingPointIndex() {\n\n\t\tfor ( let i = 0; i < maxBindingPoints; i ++ ) {\n\n\t\t\tif ( allocatedBindingPoints.indexOf( i ) === -1 ) {\n\n\t\t\t\tallocatedBindingPoints.push( i );\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\terror( 'WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );\n\n\t\treturn 0;\n\n\t}\n\n\tfunction updateBufferData( uniformsGroup ) {\n\n\t\tconst buffer = buffers[ uniformsGroup.id ];\n\t\tconst uniforms = uniformsGroup.uniforms;\n\t\tconst cache = uniformsGroup.__cache;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\n\t\tfor ( let i = 0, il = uniforms.length; i < il; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tif ( hasUniformChanged( uniform, i, j, cache ) === true ) {\n\n\t\t\t\t\tconst offset = uniform.__offset;\n\n\t\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\t\tlet arrayOffset = 0;\n\n\t\t\t\t\tfor ( let k = 0; k < values.length; k ++ ) {\n\n\t\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\t\t// TODO add integer and struct support\n\t\t\t\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value;\n\t\t\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data );\n\n\t\t\t\t\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t\t\t\t\t// manually converting 3x3 to 3x4\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value.elements[ 0 ];\n\t\t\t\t\t\t\tuniform.__data[ 1 ] = value.elements[ 1 ];\n\t\t\t\t\t\t\tuniform.__data[ 2 ] = value.elements[ 2 ];\n\t\t\t\t\t\t\tuniform.__data[ 3 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 4 ] = value.elements[ 3 ];\n\t\t\t\t\t\t\tuniform.__data[ 5 ] = value.elements[ 4 ];\n\t\t\t\t\t\t\tuniform.__data[ 6 ] = value.elements[ 5 ];\n\t\t\t\t\t\t\tuniform.__data[ 7 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 8 ] = value.elements[ 6 ];\n\t\t\t\t\t\t\tuniform.__data[ 9 ] = value.elements[ 7 ];\n\t\t\t\t\t\t\tuniform.__data[ 10 ] = value.elements[ 8 ];\n\t\t\t\t\t\t\tuniform.__data[ 11 ] = 0;\n\n\t\t\t\t\t\t} else if ( ArrayBuffer.isView( value ) ) {\n\n\t\t\t\t\t\t\t// copy the buffer data using \"set\"\n\t\t\t\t\t\t\tuniform.__data.set( new value.constructor( value.buffer, value.byteOffset, uniform.__data.length ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvalue.toArray( uniform.__data, arrayOffset );\n\n\t\t\t\t\t\t\tarrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\n\t}\n\n\tfunction hasUniformChanged( uniform, index, indexArray, cache ) {\n\n\t\tconst value = uniform.value;\n\t\tconst indexString = index + '_' + indexArray;\n\n\t\tif ( cache[ indexString ] === undefined ) {\n\n\t\t\t// cache entry does not exist so far\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tcache[ indexString ] = value;\n\n\t\t\t} else if ( ArrayBuffer.isView( value ) ) {\n\n\t\t\t\tcache[ indexString ] = value.slice();\n\n\t\t\t} else {\n\n\t\t\t\tcache[ indexString ] = value.clone();\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\tconst cachedObject = cache[ indexString ];\n\n\t\t\t// compare current value with cached entry\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tif ( cachedObject !== value ) {\n\n\t\t\t\t\tcache[ indexString ] = value;\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t} else if ( ArrayBuffer.isView( value ) ) {\n\n\t\t\t\t// always update the array buffers\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\tif ( cachedObject.equals( value ) === false ) {\n\n\t\t\t\t\tcachedObject.copy( value );\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction prepareUniformsGroup( uniformsGroup ) {\n\n\t\t// determine total buffer size according to the STD140 layout\n\t\t// Hint: STD140 is the only supported layout in WebGL 2\n\n\t\tconst uniforms = uniformsGroup.uniforms;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\t\tconst chunkSize = 16; // size of a chunk in bytes\n\n\t\tfor ( let i = 0, l = uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\tfor ( let k = 0, kl = values.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\tconst chunkOffset = offset % chunkSize; // offset in the current chunk\n\t\t\t\t\tconst chunkPadding = chunkOffset % info.boundary; // required padding to match boundary\n\t\t\t\t\tconst chunkStart = chunkOffset + chunkPadding; // the start position in the current chunk for the data\n\n\t\t\t\t\toffset += chunkPadding;\n\n\t\t\t\t\t// Check for chunk overflow\n\t\t\t\t\tif ( chunkStart !== 0 && ( chunkSize - chunkStart ) < info.storage ) {\n\n\t\t\t\t\t\t// Add padding and adjust offset\n\t\t\t\t\t\toffset += ( chunkSize - chunkStart );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following two properties will be used for partial buffer updates\n\t\t\t\t\tuniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );\n\t\t\t\t\tuniform.__offset = offset;\n\n\t\t\t\t\t// Update the global offset\n\t\t\t\t\toffset += info.storage;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ensure correct final padding\n\n\t\tconst chunkOffset = offset % chunkSize;\n\n\t\tif ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );\n\n\t\t//\n\n\t\tuniformsGroup.__size = offset;\n\t\tuniformsGroup.__cache = {};\n\n\t\treturn this;\n\n\t}\n\n\tfunction getUniformSize( value ) {\n\n\t\tconst info = {\n\t\t\tboundary: 0, // bytes\n\t\t\tstorage: 0 // bytes\n\t\t};\n\n\t\t// determine sizes according to STD140\n\n\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t// float/int/bool\n\n\t\t\tinfo.boundary = 4;\n\t\t\tinfo.storage = 4;\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\t// vec2\n\n\t\t\tinfo.boundary = 8;\n\t\t\tinfo.storage = 8;\n\n\t\t} else if ( value.isVector3 || value.isColor ) {\n\n\t\t\t// vec3\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\t// vec4\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 16;\n\n\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t// mat3 (in STD140 a 3x3 matrix is represented as 3x4)\n\n\t\t\tinfo.boundary = 48;\n\t\t\tinfo.storage = 48;\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\t// mat4\n\n\t\t\tinfo.boundary = 64;\n\t\t\tinfo.storage = 64;\n\n\t\t} else if ( value.isTexture ) {\n\n\t\t\twarn( 'WebGLRenderer: Texture samplers can not be part of an uniforms group.' );\n\n\t\t} else if ( ArrayBuffer.isView( value ) ) {\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = value.byteLength;\n\n\t\t} else {\n\n\t\t\twarn( 'WebGLRenderer: Unsupported uniform value type.', value );\n\n\t\t}\n\n\t\treturn info;\n\n\t}\n\n\tfunction onUniformsGroupsDispose( event ) {\n\n\t\tconst uniformsGroup = event.target;\n\n\t\tuniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\tconst index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );\n\t\tallocatedBindingPoints.splice( index, 1 );\n\n\t\tgl.deleteBuffer( buffers[ uniformsGroup.id ] );\n\n\t\tdelete buffers[ uniformsGroup.id ];\n\t\tdelete updateList[ uniformsGroup.id ];\n\n\t}\n\n\tfunction dispose() {\n\n\t\tfor ( const id in buffers ) {\n\n\t\t\tgl.deleteBuffer( buffers[ id ] );\n\n\t\t}\n\n\t\tallocatedBindingPoints = [];\n\t\tbuffers = {};\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tbind: bind,\n\t\tupdate: update,\n\n\t\tdispose: dispose\n\n\t};\n\n}\n\n/**\n * Precomputed DFG LUT for Image-Based Lighting\n * Resolution: 16x16\n * Samples: 4096 per texel\n * Format: RG16F (2 half floats per texel: scale, bias)\n */\n\n\nconst DATA = new Uint16Array( [\n\t0x30b5, 0x3ad1, 0x314c, 0x3a4d, 0x33d2, 0x391c, 0x35ef, 0x3828, 0x37f3, 0x36a6, 0x38d1, 0x3539, 0x3979, 0x3410, 0x39f8, 0x3252, 0x3a53, 0x30f0, 0x3a94, 0x2fc9, 0x3abf, 0x2e35, 0x3ada, 0x2d05, 0x3ae8, 0x2c1f, 0x3aed, 0x2ae0, 0x3aea, 0x29d1, 0x3ae1, 0x28ff,\n\t0x3638, 0x38e4, 0x364a, 0x38ce, 0x3699, 0x385e, 0x374e, 0x372c, 0x3839, 0x35a4, 0x38dc, 0x3462, 0x396e, 0x32c4, 0x39de, 0x3134, 0x3a2b, 0x3003, 0x3a59, 0x2e3a, 0x3a6d, 0x2ce1, 0x3a6e, 0x2bba, 0x3a5f, 0x2a33, 0x3a49, 0x290a, 0x3a2d, 0x2826, 0x3a0a, 0x26e8,\n\t0x3894, 0x36d7, 0x3897, 0x36c9, 0x38a3, 0x3675, 0x38bc, 0x35ac, 0x38ee, 0x349c, 0x393e, 0x3332, 0x3997, 0x3186, 0x39e2, 0x3038, 0x3a13, 0x2e75, 0x3a29, 0x2cf5, 0x3a2d, 0x2bac, 0x3a21, 0x29ff, 0x3a04, 0x28bc, 0x39dc, 0x2790, 0x39ad, 0x261a, 0x3978, 0x24fa,\n\t0x39ac, 0x34a8, 0x39ac, 0x34a3, 0x39ae, 0x3480, 0x39ae, 0x3423, 0x39b1, 0x330e, 0x39c2, 0x31a9, 0x39e0, 0x3063, 0x39fc, 0x2eb5, 0x3a0c, 0x2d1d, 0x3a14, 0x2bcf, 0x3a07, 0x29ff, 0x39e9, 0x28a3, 0x39be, 0x273c, 0x3989, 0x25b3, 0x394a, 0x2488, 0x3907, 0x2345,\n\t0x3a77, 0x3223, 0x3a76, 0x321f, 0x3a73, 0x3204, 0x3a6a, 0x31b3, 0x3a58, 0x3114, 0x3a45, 0x303b, 0x3a34, 0x2eb6, 0x3a26, 0x2d31, 0x3a1e, 0x2bef, 0x3a0b, 0x2a0d, 0x39ec, 0x28a1, 0x39c0, 0x271b, 0x3987, 0x2580, 0x3944, 0x2449, 0x38fa, 0x22bd, 0x38ac, 0x2155,\n\t0x3b07, 0x2fca, 0x3b06, 0x2fca, 0x3b00, 0x2fb8, 0x3af4, 0x2f7c, 0x3adb, 0x2eea, 0x3ab4, 0x2e00, 0x3a85, 0x2cec, 0x3a5e, 0x2bc5, 0x3a36, 0x2a00, 0x3a0d, 0x2899, 0x39dc, 0x2707, 0x39a0, 0x2562, 0x395a, 0x2424, 0x390b, 0x2268, 0x38b7, 0x20fd, 0x385f, 0x1fd1,\n\t0x3b69, 0x2cb9, 0x3b68, 0x2cbb, 0x3b62, 0x2cbb, 0x3b56, 0x2cae, 0x3b3b, 0x2c78, 0x3b0d, 0x2c0a, 0x3acf, 0x2ae3, 0x3a92, 0x2998, 0x3a54, 0x2867, 0x3a17, 0x26d0, 0x39d3, 0x253c, 0x3989, 0x2402, 0x3935, 0x2226, 0x38dc, 0x20bd, 0x387d, 0x1f54, 0x381d, 0x1db3,\n\t0x3ba9, 0x296b, 0x3ba8, 0x296f, 0x3ba3, 0x297b, 0x3b98, 0x2987, 0x3b7f, 0x2976, 0x3b4e, 0x2927, 0x3b0e, 0x2895, 0x3ac2, 0x27b7, 0x3a73, 0x263b, 0x3a23, 0x24e7, 0x39d0, 0x239b, 0x3976, 0x21d9, 0x3917, 0x207e, 0x38b2, 0x1ee7, 0x384b, 0x1d53, 0x37c7, 0x1c1e,\n\t0x3bd2, 0x25cb, 0x3bd1, 0x25d3, 0x3bcd, 0x25f0, 0x3bc2, 0x261f, 0x3bad, 0x2645, 0x3b7d, 0x262d, 0x3b3e, 0x25c4, 0x3aec, 0x250f, 0x3a93, 0x243a, 0x3a32, 0x22ce, 0x39d0, 0x215b, 0x3969, 0x202a, 0x38fe, 0x1e6e, 0x388f, 0x1cf1, 0x381f, 0x1b9b, 0x3762, 0x19dd,\n\t0x3be9, 0x21ab, 0x3be9, 0x21b7, 0x3be5, 0x21e5, 0x3bdd, 0x2241, 0x3bc9, 0x22a7, 0x3ba0, 0x22ec, 0x3b62, 0x22cd, 0x3b0f, 0x2247, 0x3aae, 0x2175, 0x3a44, 0x2088, 0x39d4, 0x1f49, 0x3960, 0x1dbe, 0x38e9, 0x1c77, 0x3870, 0x1ae8, 0x37f1, 0x1953, 0x3708, 0x181b,\n\t0x3bf6, 0x1cea, 0x3bf6, 0x1cfb, 0x3bf3, 0x1d38, 0x3bec, 0x1dbd, 0x3bda, 0x1e7c, 0x3bb7, 0x1f25, 0x3b7d, 0x1f79, 0x3b2c, 0x1f4c, 0x3ac6, 0x1ea6, 0x3a55, 0x1dbb, 0x39da, 0x1cbd, 0x395a, 0x1b9d, 0x38d8, 0x1a00, 0x3855, 0x18ac, 0x37ab, 0x173c, 0x36b7, 0x1598,\n\t0x3bfc, 0x1736, 0x3bfc, 0x1759, 0x3bf9, 0x17e7, 0x3bf4, 0x1896, 0x3be4, 0x1997, 0x3bc6, 0x1aa8, 0x3b91, 0x1b84, 0x3b43, 0x1bd2, 0x3ade, 0x1b8a, 0x3a65, 0x1acd, 0x39e2, 0x19d3, 0x3957, 0x18cd, 0x38ca, 0x17b3, 0x383e, 0x1613, 0x376d, 0x14bf, 0x366f, 0x135e,\n\t0x3bff, 0x101b, 0x3bff, 0x1039, 0x3bfc, 0x10c8, 0x3bf9, 0x1226, 0x3bea, 0x1428, 0x3bcf, 0x1584, 0x3b9f, 0x16c5, 0x3b54, 0x179a, 0x3af0, 0x17ce, 0x3a76, 0x1771, 0x39ea, 0x16a4, 0x3956, 0x15a7, 0x38bf, 0x14a7, 0x3829, 0x1379, 0x3735, 0x11ea, 0x362d, 0x10a1,\n\t0x3c00, 0x061b, 0x3c00, 0x066a, 0x3bfe, 0x081c, 0x3bfa, 0x0a4c, 0x3bed, 0x0d16, 0x3bd5, 0x0fb3, 0x3ba9, 0x114d, 0x3b63, 0x127c, 0x3b01, 0x132f, 0x3a85, 0x1344, 0x39f4, 0x12d2, 0x3957, 0x120d, 0x38b5, 0x1122, 0x3817, 0x103c, 0x3703, 0x0ed3, 0x35f0, 0x0d6d,\n\t0x3c00, 0x007a, 0x3c00, 0x0089, 0x3bfe, 0x011d, 0x3bfb, 0x027c, 0x3bf0, 0x04fa, 0x3bda, 0x0881, 0x3bb1, 0x0acd, 0x3b6f, 0x0c97, 0x3b10, 0x0d7b, 0x3a93, 0x0df1, 0x39fe, 0x0def, 0x3959, 0x0d8a, 0x38af, 0x0ce9, 0x3808, 0x0c31, 0x36d5, 0x0af0, 0x35b9, 0x09a3,\n\t0x3c00, 0x0000, 0x3c00, 0x0001, 0x3bff, 0x0015, 0x3bfb, 0x0059, 0x3bf2, 0x00fd, 0x3bdd, 0x01df, 0x3bb7, 0x031c, 0x3b79, 0x047c, 0x3b1d, 0x05d4, 0x3aa0, 0x06d5, 0x3a08, 0x075a, 0x395d, 0x075e, 0x38aa, 0x06f7, 0x37f4, 0x0648, 0x36ac, 0x0576, 0x3586, 0x049f\n] );\n\nlet lut = null;\n\nfunction getDFGLUT() {\n\n\tif ( lut === null ) {\n\n\t\tlut = new DataTexture( DATA, 16, 16, RGFormat, HalfFloatType );\n\t\tlut.name = 'DFG_LUT';\n\t\tlut.minFilter = LinearFilter;\n\t\tlut.magFilter = LinearFilter;\n\t\tlut.wrapS = ClampToEdgeWrapping;\n\t\tlut.wrapT = ClampToEdgeWrapping;\n\t\tlut.generateMipmaps = false;\n\t\tlut.needsUpdate = true;\n\n\t}\n\n\treturn lut;\n\n}\n\n/**\n * This renderer uses WebGL 2 to display scenes.\n *\n * WebGL 1 is not supported since `r163`.\n */\nclass WebGLRenderer {\n\n\t/**\n\t * Constructs a new WebGL renderer.\n\t *\n\t * @param {WebGLRenderer~Options} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters = {} ) {\n\n\t\tconst {\n\t\t\tcanvas = createCanvasElement(),\n\t\t\tcontext = null,\n\t\t\tdepth = true,\n\t\t\tstencil = false,\n\t\t\talpha = false,\n\t\t\tantialias = false,\n\t\t\tpremultipliedAlpha = true,\n\t\t\tpreserveDrawingBuffer = false,\n\t\t\tpowerPreference = 'default',\n\t\t\tfailIfMajorPerformanceCaveat = false,\n\t\t\treversedDepthBuffer = false,\n\t\t\toutputBufferType = UnsignedByteType,\n\t\t} = parameters;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWebGLRenderer = true;\n\n\t\tlet _alpha;\n\n\t\tif ( context !== null ) {\n\n\t\t\tif ( typeof WebGLRenderingContext !== 'undefined' && context instanceof WebGLRenderingContext ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer: WebGL 1 is not supported since r163.' );\n\n\t\t\t}\n\n\t\t\t_alpha = context.getContextAttributes().alpha;\n\n\t\t} else {\n\n\t\t\t_alpha = alpha;\n\n\t\t}\n\n\t\tconst _outputBufferType = outputBufferType;\n\n\t\tconst INTEGER_FORMATS = new Set( [\n\t\t\tRGBAIntegerFormat,\n\t\t\tRGIntegerFormat,\n\t\t\tRedIntegerFormat\n\t\t] );\n\n\t\tconst UNSIGNED_TYPES = new Set( [\n\t\t\tUnsignedByteType,\n\t\t\tUnsignedIntType,\n\t\t\tUnsignedShortType,\n\t\t\tUnsignedInt248Type,\n\t\t\tUnsignedShort4444Type,\n\t\t\tUnsignedShort5551Type\n\t\t] );\n\n\t\tconst uintClearColor = new Uint32Array( 4 );\n\t\tconst intClearColor = new Int32Array( 4 );\n\t\tconst objectPosition = new Vector3();\n\n\t\tlet currentRenderList = null;\n\t\tlet currentRenderState = null;\n\n\t\t// render() can be called from within a callback triggered by another render.\n\t\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\t\tconst renderListStack = [];\n\t\tconst renderStateStack = [];\n\n\t\t// internal render target for non-UnsignedByteType color buffer\n\n\t\tlet output = null;\n\n\t\t// public properties\n\n\t\t/**\n\t\t * A canvas where the renderer draws its output. This is automatically created by the renderer\n\t\t * in the constructor (if not provided already); you just need to add it to your page like so:\n\t\t * ```js\n\t\t * document.body.appendChild( renderer.domElement );\n\t\t * ```\n\t\t *\n\t\t * @type {HTMLCanvasElement|OffscreenCanvas}\n\t\t */\n\t\tthis.domElement = canvas;\n\n\t\t/**\n\t\t * A object with debug configuration settings.\n\t\t *\n\t\t * - `checkShaderErrors`: If it is `true`, defines whether material shader programs are\n\t\t * checked for errors during compilation and linkage process. It may be useful to disable\n\t\t * this check in production for performance gain. It is strongly recommended to keep these\n\t\t * checks enabled during development. If the shader does not compile and link, it will not\n\t\t * work and associated material will not render.\n\t\t * - `onShaderError(gl, program, glVertexShader,glFragmentShader)`: A callback function that\n\t\t * can be used for custom error reporting. The callback receives the WebGL context, an instance\n\t\t * of WebGLProgram as well two instances of WebGLShader representing the vertex and fragment shader.\n\t\t * Assigning a custom function disables the default error reporting.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.debug = {\n\n\t\t\t/**\n\t\t\t * Enables error checking and reporting when shader programs are being compiled.\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tcheckShaderErrors: true,\n\t\t\t/**\n\t\t\t * Callback for custom error reporting.\n\t\t\t * @type {?Function}\n\t\t\t */\n\t\t\tonShaderError: null\n\t\t};\n\n\t\t// clearing\n\n\t\t/**\n\t\t * Whether the renderer should automatically clear its output before rendering a frame or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoClear = true;\n\n\t\t/**\n\t\t * If {@link WebGLRenderer#autoClear} set to `true`, whether the renderer should clear\n\t\t * the color buffer or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoClearColor = true;\n\n\t\t/**\n\t\t * If {@link WebGLRenderer#autoClear} set to `true`, whether the renderer should clear\n\t\t * the depth buffer or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoClearDepth = true;\n\n\t\t/**\n\t\t * If {@link WebGLRenderer#autoClear} set to `true`, whether the renderer should clear\n\t\t * the stencil buffer or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoClearStencil = true;\n\n\t\t// scene graph\n\n\t\t/**\n\t\t * Whether the renderer should sort objects or not.\n\t\t *\n\t\t * Note: Sorting is used to attempt to properly render objects that have some\n\t\t * degree of transparency. By definition, sorting objects may not work in all\n\t\t * cases. Depending on the needs of application, it may be necessary to turn\n\t\t * off sorting and use other methods to deal with transparency rendering e.g.\n\t\t * manually determining each object's rendering order.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.sortObjects = true;\n\n\t\t// user-defined clipping\n\n\t\t/**\n\t\t * User-defined clipping planes specified in world space. These planes apply globally.\n\t\t * Points in space whose dot product with the plane is negative are cut away.\n\t\t *\n\t\t * @type {Array<Plane>}\n\t\t */\n\t\tthis.clippingPlanes = [];\n\n\t\t/**\n\t\t * Whether the renderer respects object-level clipping planes or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.localClippingEnabled = false;\n\n\t\t// tone mapping\n\n\t\t/**\n\t\t * The tone mapping technique of the renderer.\n\t\t *\n\t\t * @type {(NoToneMapping|LinearToneMapping|ReinhardToneMapping|CineonToneMapping|ACESFilmicToneMapping|CustomToneMapping|AgXToneMapping|NeutralToneMapping)}\n\t\t * @default NoToneMapping\n\t\t */\n\t\tthis.toneMapping = NoToneMapping;\n\n\t\t/**\n\t\t * Exposure level of tone mapping.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.toneMappingExposure = 1.0;\n\n\t\t// transmission\n\n\t\t/**\n\t\t * The normalized resolution scale for the transmission render target, measured in percentage\n\t\t * of viewport dimensions. Lowering this value can result in significant performance improvements\n\t\t * when using {@link MeshPhysicalMaterial#transmission}.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.transmissionResolutionScale = 1.0;\n\n\t\t// internal properties\n\n\t\tconst _this = this;\n\n\t\tlet _isContextLost = false;\n\t\tlet _nodesHandler = null;\n\n\t\t// internal state cache\n\n\t\tthis._outputColorSpace = SRGBColorSpace;\n\n\t\tlet _currentActiveCubeFace = 0;\n\t\tlet _currentActiveMipmapLevel = 0;\n\t\tlet _currentRenderTarget = null;\n\t\tlet _currentMaterialId = -1;\n\n\t\tlet _currentCamera = null;\n\n\t\tconst _currentViewport = new Vector4();\n\t\tconst _currentScissor = new Vector4();\n\t\tlet _currentScissorTest = null;\n\n\t\tconst _currentClearColor = new Color( 0x000000 );\n\t\tlet _currentClearAlpha = 0;\n\n\t\t//\n\n\t\tlet _width = canvas.width;\n\t\tlet _height = canvas.height;\n\n\t\tlet _pixelRatio = 1;\n\t\tlet _opaqueSort = null;\n\t\tlet _transparentSort = null;\n\n\t\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\t\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\t\tlet _scissorTest = false;\n\n\t\t// frustum\n\n\t\tconst _frustum = new Frustum();\n\n\t\t// clipping\n\n\t\tlet _clippingEnabled = false;\n\t\tlet _localClippingEnabled = false;\n\n\t\t// camera matrices cache\n\n\t\tconst _projScreenMatrix = new Matrix4();\n\n\t\tconst _vector3 = new Vector3();\n\n\t\tconst _vector4 = new Vector4();\n\n\t\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\t\tlet _renderBackground = false;\n\n\t\tfunction getTargetPixelRatio() {\n\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t\t}\n\n\t\t// initialize\n\n\t\tlet _gl = context;\n\n\t\tfunction getContext( contextName, contextAttributes ) {\n\n\t\t\treturn canvas.getContext( contextName, contextAttributes );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tconst contextAttributes = {\n\t\t\t\talpha: true,\n\t\t\t\tdepth,\n\t\t\t\tstencil,\n\t\t\t\tantialias,\n\t\t\t\tpremultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer,\n\t\t\t\tpowerPreference,\n\t\t\t\tfailIfMajorPerformanceCaveat,\n\t\t\t};\n\n\t\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\t\tif ( 'setAttribute' in canvas ) canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );\n\n\t\t\t// event listeners must be registered before WebGL context is created, see #12753\n\t\t\tcanvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tconst contextName = 'webgl2';\n\n\t\t\t\t_gl = getContext( contextName, contextAttributes );\n\n\t\t\t\tif ( _gl === null ) {\n\n\t\t\t\t\tif ( getContext( contextName ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'WebGLRenderer: ' + e.message );\n\t\t\tthrow e;\n\n\t\t}\n\n\t\tlet extensions, capabilities, state, info;\n\t\tlet properties, textures, environments, attributes, geometries, objects;\n\t\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\t\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\t\tlet utils, bindingStates, uniformsGroups;\n\n\t\tfunction initGLContext() {\n\n\t\t\textensions = new WebGLExtensions( _gl );\n\t\t\textensions.init();\n\n\t\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters, utils );\n\n\t\t\tstate = new WebGLState( _gl, extensions );\n\n\t\t\tif ( capabilities.reversedDepthBuffer && reversedDepthBuffer ) {\n\n\t\t\t\tstate.buffers.depth.setReversed( true );\n\n\t\t\t}\n\n\t\t\tinfo = new WebGLInfo( _gl );\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\t\tenvironments = new WebGLEnvironments( _this );\n\t\t\tattributes = new WebGLAttributes( _gl );\n\t\t\tbindingStates = new WebGLBindingStates( _gl, attributes );\n\t\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\t\tobjects = new WebGLObjects( _gl, geometries, attributes, bindingStates, info );\n\t\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\t\tclipping = new WebGLClipping( properties );\n\t\t\tprogramCache = new WebGLPrograms( _this, environments, extensions, capabilities, bindingStates, clipping );\n\t\t\tmaterials = new WebGLMaterials( _this, properties );\n\t\t\trenderLists = new WebGLRenderLists();\n\t\t\trenderStates = new WebGLRenderStates( extensions );\n\t\t\tbackground = new WebGLBackground( _this, environments, state, objects, _alpha, premultipliedAlpha );\n\t\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\t\t\tuniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );\n\n\t\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\t\tinfo.programs = programCache.programs;\n\n\t\t\t/**\n\t\t\t * Holds details about the capabilities of the current rendering context.\n\t\t\t *\n\t\t\t * @name WebGLRenderer#capabilities\n\t\t\t * @type {WebGLRenderer~Capabilities}\n\t\t\t */\n\t\t\t_this.capabilities = capabilities;\n\n\t\t\t/**\n\t\t\t * Provides methods for retrieving and testing WebGL extensions.\n\t\t\t *\n\t\t\t * - `get(extensionName:string)`: Used to check whether a WebGL extension is supported\n\t\t\t * and return the extension object if available.\n\t\t\t * - `has(extensionName:string)`: returns `true` if the extension is supported.\n\t\t\t *\n\t\t\t * @name WebGLRenderer#extensions\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\t_this.extensions = extensions;\n\n\t\t\t/**\n\t\t\t * Used to track properties of other objects like native WebGL objects.\n\t\t\t *\n\t\t\t * @name WebGLRenderer#properties\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\t_this.properties = properties;\n\n\t\t\t/**\n\t\t\t * Manages the render lists of the renderer.\n\t\t\t *\n\t\t\t * @name WebGLRenderer#renderLists\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\t_this.renderLists = renderLists;\n\n\n\n\t\t\t/**\n\t\t\t * Interface for managing shadows.\n\t\t\t *\n\t\t\t * @name WebGLRenderer#shadowMap\n\t\t\t * @type {WebGLRenderer~ShadowMap}\n\t\t\t */\n\t\t\t_this.shadowMap = shadowMap;\n\n\t\t\t/**\n\t\t\t * Interface for managing the WebGL state.\n\t\t\t *\n\t\t\t * @name WebGLRenderer#state\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\t_this.state = state;\n\n\t\t\t/**\n\t\t\t * Holds a series of statistical information about the GPU memory\n\t\t\t * and the rendering process. Useful for debugging and monitoring.\n\t\t\t *\n\t\t\t * By default these data are reset at each render call but when having\n\t\t\t * multiple render passes per frame (e.g. when using post processing) it can\n\t\t\t * be preferred to reset with a custom pattern. First, set `autoReset` to\n\t\t\t * `false`.\n\t\t\t * ```js\n\t\t\t * renderer.info.autoReset = false;\n\t\t\t * ```\n\t\t\t * Call `reset()` whenever you have finished to render a single frame.\n\t\t\t * ```js\n\t\t\t * renderer.info.reset();\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @name WebGLRenderer#info\n\t\t\t * @type {WebGLRenderer~Info}\n\t\t\t */\n\t\t\t_this.info = info;\n\n\t\t}\n\n\t\tinitGLContext();\n\n\t\t// initialize internal render target for non-UnsignedByteType color buffer\n\n\t\tif ( _outputBufferType !== UnsignedByteType ) {\n\n\t\t\toutput = new WebGLOutput( _outputBufferType, canvas.width, canvas.height, depth, stencil );\n\n\t\t}\n\n\t\t// xr\n\n\t\tconst xr = new WebXRManager( _this, _gl );\n\n\t\t/**\n\t\t * A reference to the XR manager.\n\t\t *\n\t\t * @type {WebXRManager}\n\t\t */\n\t\tthis.xr = xr;\n\n\t\t/**\n\t\t * Returns the rendering context.\n\t\t *\n\t\t * @return {WebGL2RenderingContext} The rendering context.\n\t\t */\n\t\tthis.getContext = function () {\n\n\t\t\treturn _gl;\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the rendering context attributes.\n\t\t *\n\t\t * @return {WebGLContextAttributes} The rendering context attributes.\n\t\t */\n\t\tthis.getContextAttributes = function () {\n\n\t\t\treturn _gl.getContextAttributes();\n\n\t\t};\n\n\t\t/**\n\t\t * Simulates a loss of the WebGL context. This requires support for the `WEBGL_lose_context` extension.\n\t\t */\n\t\tthis.forceContextLoss = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.loseContext();\n\n\t\t};\n\n\t\t/**\n\t\t * Simulates a restore of the WebGL context. This requires support for the `WEBGL_lose_context` extension.\n\t\t */\n\t\tthis.forceContextRestore = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.restoreContext();\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the pixel ratio.\n\t\t *\n\t\t * @return {number} The pixel ratio.\n\t\t */\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn _pixelRatio;\n\n\t\t};\n\n\t\t/**\n\t\t * Sets the given pixel ratio and resizes the canvas if necessary.\n\t\t *\n\t\t * @param {number} value - The pixel ratio.\n\t\t */\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\tif ( value === undefined ) return;\n\n\t\t\t_pixelRatio = value;\n\n\t\t\tthis.setSize( _width, _height, false );\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the renderer's size in logical pixels. This method does not honor the pixel ratio.\n\t\t *\n\t\t * @param {Vector2} target - The method writes the result in this target object.\n\t\t * @return {Vector2} The renderer's size in logical pixels.\n\t\t */\n\t\tthis.getSize = function ( target ) {\n\n\t\t\treturn target.set( _width, _height );\n\n\t\t};\n\n\t\t/**\n\t\t * Resizes the output canvas to (width, height) with device pixel ratio taken\n\t\t * into account, and also sets the viewport to fit that size, starting in (0,\n\t\t * 0). Setting `updateStyle` to false prevents any style changes to the output canvas.\n\t\t *\n\t\t * @param {number} width - The width in logical pixels.\n\t\t * @param {number} height - The height in logical pixels.\n\t\t * @param {boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.\n\t\t */\n\t\tthis.setSize = function ( width, height, updateStyle = true ) {\n\n\t\t\tif ( xr.isPresenting ) {\n\n\t\t\t\twarn( 'WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\tcanvas.width = Math.floor( width * _pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * _pixelRatio );\n\n\t\t\tif ( updateStyle === true ) {\n\n\t\t\t\tcanvas.style.width = width + 'px';\n\t\t\t\tcanvas.style.height = height + 'px';\n\n\t\t\t}\n\n\t\t\tif ( output !== null ) {\n\n\t\t\t\toutput.setSize( canvas.width, canvas.height );\n\n\t\t\t}\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the drawing buffer size in physical pixels. This method honors the pixel ratio.\n\t\t *\n\t\t * @param {Vector2} target - The method writes the result in this target object.\n\t\t * @return {Vector2} The drawing buffer size.\n\t\t */\n\t\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t\t};\n\n\t\t/**\n\t\t * This method allows to define the drawing buffer size by specifying\n\t\t * width, height and pixel ratio all at once. The size of the drawing\n\t\t * buffer is computed with this formula:\n\t\t * ```js\n\t\t * size.x = width * pixelRatio;\n\t\t * size.y = height * pixelRatio;\n\t\t * ```\n\t\t *\n\t\t * @param {number} width - The width in logical pixels.\n\t\t * @param {number} height - The height in logical pixels.\n\t\t * @param {number} pixelRatio - The pixel ratio.\n\t\t */\n\t\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_pixelRatio = pixelRatio;\n\n\t\t\tcanvas.width = Math.floor( width * pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * pixelRatio );\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\t/**\n\t\t * Sets the post-processing effects to be applied after rendering.\n\t\t *\n\t\t * @param {Array} effects - An array of post-processing effects.\n\t\t */\n\t\tthis.setEffects = function ( effects ) {\n\n\t\t\tif ( _outputBufferType === UnsignedByteType ) {\n\n\t\t\t\terror( 'THREE.WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( effects ) {\n\n\t\t\t\tfor ( let i = 0; i < effects.length; i ++ ) {\n\n\t\t\t\t\tif ( effects[ i ].isOutputPass === true ) {\n\n\t\t\t\t\t\twarn( 'THREE.WebGLRenderer: OutputPass is not needed in setEffects(). Tone mapping and color space conversion are applied automatically.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toutput.setEffects( effects || [] );\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the current viewport definition.\n\t\t *\n\t\t * @param {Vector2} target - The method writes the result in this target object.\n\t\t * @return {Vector2} The current viewport definition.\n\t\t */\n\t\tthis.getCurrentViewport = function ( target ) {\n\n\t\t\treturn target.copy( _currentViewport );\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the viewport definition.\n\t\t *\n\t\t * @param {Vector4} target - The method writes the result in this target object.\n\t\t * @return {Vector4} The viewport definition.\n\t\t */\n\t\tthis.getViewport = function ( target ) {\n\n\t\t\treturn target.copy( _viewport );\n\n\t\t};\n\n\t\t/**\n\t\t * Sets the viewport to render from `(x, y)` to `(x + width, y + height)`.\n\t\t *\n\t\t * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.\n\t\t * Or alternatively a four-component vector specifying all the parameters of the viewport.\n\t\t * @param {number} y - The vertical coordinate for the lower left corner of the viewport origin  in logical pixel unit.\n\t\t * @param {number} width - The width of the viewport in logical pixel unit.\n\t\t * @param {number} height - The height of the viewport in logical pixel unit.\n\t\t */\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_viewport.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the scissor region.\n\t\t *\n\t\t * @param {Vector4} target - The method writes the result in this target object.\n\t\t * @return {Vector4} The scissor region.\n\t\t */\n\t\tthis.getScissor = function ( target ) {\n\n\t\t\treturn target.copy( _scissor );\n\n\t\t};\n\n\t\t/**\n\t\t * Sets the scissor region to render from `(x, y)` to `(x + width, y + height)`.\n\t\t *\n\t\t * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the scissor region origin in logical pixel unit.\n\t\t * Or alternatively a four-component vector specifying all the parameters of the scissor region.\n\t\t * @param {number} y - The vertical coordinate for the lower left corner of the scissor region origin  in logical pixel unit.\n\t\t * @param {number} width - The width of the scissor region in logical pixel unit.\n\t\t * @param {number} height - The height of the scissor region in logical pixel unit.\n\t\t */\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_scissor.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\t/**\n\t\t * Returns `true` if the scissor test is enabled.\n\t\t *\n\t\t * @return {boolean} Whether the scissor test is enabled or not.\n\t\t */\n\t\tthis.getScissorTest = function () {\n\n\t\t\treturn _scissorTest;\n\n\t\t};\n\n\t\t/**\n\t\t * Enable or disable the scissor test. When this is enabled, only the pixels\n\t\t * within the defined scissor area will be affected by further renderer\n\t\t * actions.\n\t\t *\n\t\t * @param {boolean} boolean - Whether the scissor test is enabled or not.\n\t\t */\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t\t};\n\n\t\t/**\n\t\t * Sets a custom opaque sort function for the render lists. Pass `null`\n\t\t * to use the default `painterSortStable` function.\n\t\t *\n\t\t * @param {?Function} method - The opaque sort function.\n\t\t */\n\t\tthis.setOpaqueSort = function ( method ) {\n\n\t\t\t_opaqueSort = method;\n\n\t\t};\n\n\t\t/**\n\t\t * Sets a custom transparent sort function for the render lists. Pass `null`\n\t\t * to use the default `reversePainterSortStable` function.\n\t\t *\n\t\t * @param {?Function} method - The opaque sort function.\n\t\t */\n\t\tthis.setTransparentSort = function ( method ) {\n\n\t\t\t_transparentSort = method;\n\n\t\t};\n\n\t\t// Clearing\n\n\t\t/**\n\t\t * Returns the clear color.\n\t\t *\n\t\t * @param {Color} target - The method writes the result in this target object.\n\t\t * @return {Color} The clear color.\n\t\t */\n\t\tthis.getClearColor = function ( target ) {\n\n\t\t\treturn target.copy( background.getClearColor() );\n\n\t\t};\n\n\t\t/**\n\t\t * Sets the clear color and alpha.\n\t\t *\n\t\t * @param {Color} color - The clear color.\n\t\t * @param {number} [alpha=1] - The clear alpha.\n\t\t */\n\t\tthis.setClearColor = function () {\n\n\t\t\tbackground.setClearColor( ...arguments );\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the clear alpha. Ranges within `[0,1]`.\n\t\t *\n\t\t * @return {number} The clear alpha.\n\t\t */\n\t\tthis.getClearAlpha = function () {\n\n\t\t\treturn background.getClearAlpha();\n\n\t\t};\n\n\t\t/**\n\t\t * Sets the clear alpha.\n\t\t *\n\t\t * @param {number} alpha - The clear alpha.\n\t\t */\n\t\tthis.setClearAlpha = function () {\n\n\t\t\tbackground.setClearAlpha( ...arguments );\n\n\t\t};\n\n\t\t/**\n\t\t * Tells the renderer to clear its color, depth or stencil drawing buffer(s).\n\t\t * This method initializes the buffers to the current clear color values.\n\t\t *\n\t\t * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.\n\t\t * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.\n\t\t * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.\n\t\t */\n\t\tthis.clear = function ( color = true, depth = true, stencil = true ) {\n\n\t\t\tlet bits = 0;\n\n\t\t\tif ( color ) {\n\n\t\t\t\t// check if we're trying to clear an integer target\n\t\t\t\tlet isIntegerFormat = false;\n\t\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t\tconst targetFormat = _currentRenderTarget.texture.format;\n\t\t\t\t\tisIntegerFormat = INTEGER_FORMATS.has( targetFormat );\n\n\t\t\t\t}\n\n\t\t\t\t// use the appropriate clear functions to clear the target if it's a signed\n\t\t\t\t// or unsigned integer target\n\t\t\t\tif ( isIntegerFormat ) {\n\n\t\t\t\t\tconst targetType = _currentRenderTarget.texture.type;\n\t\t\t\t\tconst isUnsignedType = UNSIGNED_TYPES.has( targetType );\n\n\t\t\t\t\tconst clearColor = background.getClearColor();\n\t\t\t\t\tconst a = background.getClearAlpha();\n\t\t\t\t\tconst r = clearColor.r;\n\t\t\t\t\tconst g = clearColor.g;\n\t\t\t\t\tconst b = clearColor.b;\n\n\t\t\t\t\tif ( isUnsignedType ) {\n\n\t\t\t\t\t\tuintClearColor[ 0 ] = r;\n\t\t\t\t\t\tuintClearColor[ 1 ] = g;\n\t\t\t\t\t\tuintClearColor[ 2 ] = b;\n\t\t\t\t\t\tuintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferuiv( _gl.COLOR, 0, uintClearColor );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tintClearColor[ 0 ] = r;\n\t\t\t\t\t\tintClearColor[ 1 ] = g;\n\t\t\t\t\t\tintClearColor[ 2 ] = b;\n\t\t\t\t\t\tintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferiv( _gl.COLOR, 0, intClearColor );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbits |= _gl.COLOR_BUFFER_BIT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( depth ) {\n\n\t\t\t\tbits |= _gl.DEPTH_BUFFER_BIT;\n\t\t\t\tthis.state.buffers.depth.setMask( true );\n\n\t\t\t}\n\n\t\t\tif ( stencil ) {\n\n\t\t\t\tbits |= _gl.STENCIL_BUFFER_BIT;\n\t\t\t\tthis.state.buffers.stencil.setMask( 0xffffffff );\n\n\t\t\t}\n\n\t\t\tif ( bits !== 0 ) {\n\n\t\t\t\t_gl.clear( bits );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Clears the color buffer. Equivalent to calling `renderer.clear( true, false, false )`.\n\t\t */\n\t\tthis.clearColor = function () {\n\n\t\t\tthis.clear( true, false, false );\n\n\t\t};\n\n\t\t/**\n\t\t * Clears the depth buffer. Equivalent to calling `renderer.clear( false, true, false )`.\n\t\t */\n\t\tthis.clearDepth = function () {\n\n\t\t\tthis.clear( false, true, false );\n\n\t\t};\n\n\t\t/**\n\t\t * Clears the stencil buffer. Equivalent to calling `renderer.clear( false, false, true )`.\n\t\t */\n\t\tthis.clearStencil = function () {\n\n\t\t\tthis.clear( false, false, true );\n\n\t\t};\n\n\t\t/**\n\t\t * Sets a compatibility node builder for rendering node materials with WebGLRenderer.\n\t\t * This enables using TSL (Three.js Shading Language) node materials to prepare\n\t\t * for migration to WebGPURenderer.\n\t\t *\n\t\t * @param {WebGLNodesHandler} nodesHandler - The node builder instance.\n\t\t */\n\t\tthis.setNodesHandler = function ( nodesHandler ) {\n\n\t\t\tnodesHandler.setRenderer( this );\n\t\t\t_nodesHandler = nodesHandler;\n\n\t\t};\n\n\t\t/**\n\t\t * Frees the GPU-related resources allocated by this instance. Call this\n\t\t * method whenever this instance is no longer used in your app.\n\t\t */\n\t\tthis.dispose = function () {\n\n\t\t\tcanvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\tbackground.dispose();\n\t\t\trenderLists.dispose();\n\t\t\trenderStates.dispose();\n\t\t\tproperties.dispose();\n\t\t\tenvironments.dispose();\n\t\t\tobjects.dispose();\n\t\t\tbindingStates.dispose();\n\t\t\tuniformsGroups.dispose();\n\t\t\tprogramCache.dispose();\n\n\t\t\txr.dispose();\n\n\t\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t\tanimation.stop();\n\n\t\t};\n\n\t\t// Events\n\n\t\tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tlog( 'WebGLRenderer: Context Lost.' );\n\n\t\t\t_isContextLost = true;\n\n\t\t}\n\n\t\tfunction onContextRestore( /* event */ ) {\n\n\t\t\tlog( 'WebGLRenderer: Context Restored.' );\n\n\t\t\t_isContextLost = false;\n\n\t\t\tconst infoAutoReset = info.autoReset;\n\t\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\t\tconst shadowMapType = shadowMap.type;\n\n\t\t\tinitGLContext();\n\n\t\t\tinfo.autoReset = infoAutoReset;\n\t\t\tshadowMap.enabled = shadowMapEnabled;\n\t\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\t\tshadowMap.type = shadowMapType;\n\n\t\t}\n\n\t\tfunction onContextCreationError( event ) {\n\n\t\t\terror( 'WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );\n\n\t\t}\n\n\t\tfunction onMaterialDispose( event ) {\n\n\t\t\tconst material = event.target;\n\n\t\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tdeallocateMaterial( material );\n\n\t\t}\n\n\t\t// Buffer deallocation\n\n\t\tfunction deallocateMaterial( material ) {\n\n\t\t\treleaseMaterialProgramReferences( material );\n\n\t\t\tproperties.remove( material );\n\n\t\t}\n\n\n\t\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\t\tconst programs = properties.get( material ).programs;\n\n\t\t\tif ( programs !== undefined ) {\n\n\t\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t\t} );\n\n\t\t\t\tif ( material.isShaderMaterial ) {\n\n\t\t\t\t\tprogramCache.releaseShaderCache( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Buffer rendering\n\n\t\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\t//\n\n\t\t\tlet index = geometry.index;\n\t\t\tlet rangeFactor = 1;\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\n\t\t\t\tif ( index === undefined ) return;\n\n\t\t\t\trangeFactor = 2;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst drawRange = geometry.drawRange;\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tlet drawStart = drawRange.start * rangeFactor;\n\t\t\tlet drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;\n\n\t\t\tif ( group !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, group.start * rangeFactor );\n\t\t\t\tdrawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );\n\n\t\t\t}\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, index.count );\n\n\t\t\t} else if ( position !== undefined && position !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, position.count );\n\n\t\t\t}\n\n\t\t\tconst drawCount = drawEnd - drawStart;\n\n\t\t\tif ( drawCount < 0 || drawCount === Infinity ) return;\n\n\t\t\t//\n\n\t\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\t\tlet attribute;\n\t\t\tlet renderer = bufferRenderer;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattribute = attributes.get( index );\n\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex( attribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tif ( ! extensions.get( 'WEBGL_multi_draw' ) ) {\n\n\t\t\t\t\tconst starts = object._multiDrawStarts;\n\t\t\t\t\tconst counts = object._multiDrawCounts;\n\t\t\t\t\tconst drawCount = object._multiDrawCount;\n\t\t\t\t\tconst bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;\n\t\t\t\t\tconst uniforms = properties.get( material ).currentProgram.getUniforms();\n\t\t\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\t\t\tuniforms.setValue( _gl, '_gl_DrawID', i );\n\t\t\t\t\t\trenderer.render( starts[ i ] / bytesPerElement, counts[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isInstancedMesh ) {\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tconst maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;\n\t\t\t\tconst instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Compile\n\n\t\tfunction prepareMaterial( material, scene, object ) {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * Compiles all materials in the scene with the camera. This is useful to precompile shaders\n\t\t * before the first rendering. If you want to add a 3D object to an existing scene, use the third\n\t\t * optional parameter for applying the target scene.\n\t\t *\n\t\t * Note that the (target) scene's lighting and environment must be configured before calling this method.\n\t\t *\n\t\t * @param {Object3D} scene - The scene or another type of 3D object to precompile.\n\t\t * @param {Camera} camera - The camera.\n\t\t * @param {?Scene} [targetScene=null] - The target scene.\n\t\t * @return {Set<Material>} The precompiled materials.\n\t\t */\n\t\tthis.compile = function ( scene, camera, targetScene = null ) {\n\n\t\t\tif ( targetScene === null ) targetScene = scene;\n\n\t\t\tcurrentRenderState = renderStates.get( targetScene );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t// gather lights from both the target scene and the new object that will be added to the scene.\n\n\t\t\ttargetScene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( scene !== targetScene ) {\n\n\t\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\t// Only initialize materials in the new scene, not the targetScene.\n\n\t\t\tconst materials = new Set();\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tif ( ! ( object.isMesh || object.isPoints || object.isLine || object.isSprite ) ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( material ) {\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\t\tprepareMaterial( material2, targetScene, object );\n\t\t\t\t\t\t\tmaterials.add( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tprepareMaterial( material, targetScene, object );\n\t\t\t\t\t\tmaterials.add( material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tcurrentRenderState = renderStateStack.pop();\n\n\t\t\treturn materials;\n\n\t\t};\n\n\t\t// compileAsync\n\n\t\t/**\n\t\t * Asynchronous version of {@link WebGLRenderer#compile}.\n\t\t *\n\t\t * This method makes use of the `KHR_parallel_shader_compile` WebGL extension. Hence,\n\t\t * it is recommended to use this version of `compile()` whenever possible.\n\t\t *\n\t\t * @async\n\t\t * @param {Object3D} scene - The scene or another type of 3D object to precompile.\n\t\t * @param {Camera} camera - The camera.\n\t\t * @param {?Scene} [targetScene=null] - The target scene.\n\t\t * @return {Promise} A Promise that resolves when the given scene can be rendered without unnecessary stalling due to shader compilation.\n\t\t */\n\t\tthis.compileAsync = function ( scene, camera, targetScene = null ) {\n\n\t\t\tconst materials = this.compile( scene, camera, targetScene );\n\n\t\t\t// Wait for all the materials in the new object to indicate that they're\n\t\t\t// ready to be used before resolving the promise.\n\n\t\t\treturn new Promise( ( resolve ) => {\n\n\t\t\t\tfunction checkMaterialsReady() {\n\n\t\t\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\t\t\tconst materialProperties = properties.get( material );\n\t\t\t\t\t\tconst program = materialProperties.currentProgram;\n\n\t\t\t\t\t\tif ( program.isReady() ) {\n\n\t\t\t\t\t\t\t// remove any programs that report they're ready to use from the list\n\t\t\t\t\t\t\tmaterials.delete( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\t// once the list of compiling materials is empty, call the callback\n\n\t\t\t\t\tif ( materials.size === 0 ) {\n\n\t\t\t\t\t\tresolve( scene );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if some materials are still not ready, wait a bit and check again\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( extensions.get( 'KHR_parallel_shader_compile' ) !== null ) {\n\n\t\t\t\t\t// If we can check the compilation status of the materials without\n\t\t\t\t\t// blocking then do so right away.\n\n\t\t\t\t\tcheckMaterialsReady();\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise start by waiting a bit to give the materials we just\n\t\t\t\t\t// initialized a chance to finish.\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time ) {\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t\t}\n\n\t\tfunction onXRSessionStart() {\n\n\t\t\tanimation.stop();\n\n\t\t}\n\n\t\tfunction onXRSessionEnd() {\n\n\t\t\tanimation.start();\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tif ( typeof self !== 'undefined' ) animation.setContext( self );\n\n\t\t/**\n\t\t * Applications are advised to always define the animation loop\n\t\t * with this method and not manually with `requestAnimationFrame()`\n\t\t * for best compatibility.\n\t\t *\n\t\t * @param {?onAnimationCallback} callback - The application's animation loop.\n\t\t */\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\t\t\txr.setAnimationLoop( callback );\n\n\t\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t\t};\n\n\t\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t// Rendering\n\n\t\t/**\n\t\t * Renders the given scene (or other type of 3D object) using the given camera.\n\t\t *\n\t\t * The render is done to a previously specified render target set by calling {@link WebGLRenderer#setRenderTarget}\n\t\t * or to the canvas as usual.\n\t\t *\n\t\t * By default render buffers are cleared before rendering but you can prevent\n\t\t * this by setting the property `autoClear` to `false`. If you want to prevent\n\t\t * only certain buffers being cleared you can `autoClearColor`, `autoClearDepth`\n\t\t * or `autoClearStencil` to `false`. To force a clear, use {@link WebGLRenderer#clear}.\n\t\t *\n\t\t * @param {Object3D} scene - The scene to render.\n\t\t * @param {Camera} camera - The camera.\n\t\t */\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\t\terror( 'WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( _isContextLost === true ) return;\n\n\t\t\t// update node builder if available\n\t\t\tif ( _nodesHandler !== null ) {\n\n\t\t\t\t_nodesHandler.renderStart( scene, camera );\n\n\t\t\t}\n\n\t\t\t// use internal render target for HalfFloatType color buffer (only when tone mapping is enabled)\n\n\t\t\tconst isXRPresenting = xr.enabled === true && xr.isPresenting === true;\n\n\t\t\tconst useOutput = output !== null && ( _currentRenderTarget === null || isXRPresenting ) && output.begin( _this, _currentRenderTarget );\n\n\t\t\t// update scene graph\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\t// update camera matrices and frustum\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true && ( output === null || output.isCompositing() === false ) ) {\n\n\t\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t\t}\n\n\t\t\t//\n\t\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\tcurrentRenderState.state.textureUnits = textures.getTextureUnits();\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );\n\n\t\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\t\tcurrentRenderList.init();\n\n\t\t\trenderListStack.push( currentRenderList );\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tconst depthSensingMesh = _this.xr.getDepthSensingMesh();\n\n\t\t\t\tif ( depthSensingMesh !== null ) {\n\n\t\t\t\t\tprojectObject( depthSensingMesh, camera, - Infinity, _this.sortObjects );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\t\tcurrentRenderList.finish();\n\n\t\t\tif ( _this.sortObjects === true ) {\n\n\t\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t\t}\n\n\t\t\t_renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false;\n\t\t\tif ( _renderBackground ) {\n\n\t\t\t\tbackground.addToRenderList( currentRenderList, scene );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tthis.info.render.frame ++;\n\n\t\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t\t//\n\n\t\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t\t// render scene (skip if first effect is a render pass - it will render the scene itself)\n\n\t\t\tconst skipSceneRender = useOutput && output.hasRenderPass();\n\n\t\t\tif ( skipSceneRender === false ) {\n\n\t\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\n\t\t\t\tcurrentRenderState.setupLights();\n\n\t\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\t\tif ( transmissiveObjects.length > 0 ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\t\t\trenderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );\n\n\t\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( _currentRenderTarget !== null && _currentActiveMipmapLevel === 0 ) {\n\n\t\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t}\n\n\t\t\t// copy from internal render target to canvas using fullscreen quad\n\n\t\t\tif ( useOutput ) {\n\n\t\t\t\toutput.end( _this );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t\t// _gl.finish();\n\n\t\t\tbindingStates.resetDefaultState();\n\t\t\t_currentMaterialId = -1;\n\t\t\t_currentCamera = null;\n\n\t\t\trenderStateStack.pop();\n\n\t\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t\t\ttextures.setTextureUnits( currentRenderState.state.textureUnits );\n\n\t\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderState = null;\n\n\t\t\t}\n\n\t\t\trenderListStack.pop();\n\n\t\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderList = null;\n\n\t\t\t}\n\n\t\t\tif ( _nodesHandler !== null ) {\n\n\t\t\t\t_nodesHandler.renderEnd();\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tconst visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible ) {\n\n\t\t\t\tif ( object.isGroup ) {\n\n\t\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t\t} else if ( object.isLightProbeGrid ) {\n\n\t\t\t\t\tcurrentRenderState.pushLightProbeGrid( object );\n\n\t\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector4.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\t\t\t\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( object.boundingSphere.center );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( geometry.boundingSphere.center );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_vector4\n\t\t\t\t\t\t\t\t.applyMatrix4( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\t\tconst { opaque: opaqueObjects, transmissive: transmissiveObjects, transparent: transparentObjects } = currentRenderList;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\tstate.setPolygonOffset( false );\n\n\t\t}\n\n\t\tfunction renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tif ( overrideMaterial !== null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {\n\n\t\t\t\tconst hasHalfFloatSupport = extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' );\n\n\t\t\t\tcurrentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {\n\t\t\t\t\tgenerateMipmaps: true,\n\t\t\t\t\ttype: hasHalfFloatSupport ? HalfFloatType : UnsignedByteType,\n\t\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\t\tsamples: Math.max( 4, capabilities.samples ), // to avoid feedback loops, the transmission render target requires a resolve, see #26177\n\t\t\t\t\tstencilBuffer: stencil,\n\t\t\t\t\tresolveDepthBuffer: false,\n\t\t\t\t\tresolveStencilBuffer: false,\n\t\t\t\t\tcolorSpace: ColorManagement.workingColorSpace,\n\t\t\t\t} );\n\n\t\t\t\t// debug\n\n\t\t\t\t/*\n\t\t\t\tconst geometry = new PlaneGeometry();\n\t\t\t\tconst material = new MeshBasicMaterial( { map: _transmissionRenderTarget.texture } );\n\n\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\tscene.add( mesh );\n\t\t\t\t*/\n\n\t\t\t}\n\n\t\t\tconst transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];\n\n\t\t\tconst activeViewport = camera.viewport || _currentViewport;\n\t\t\ttransmissionRenderTarget.setSize( activeViewport.z * _this.transmissionResolutionScale, activeViewport.w * _this.transmissionResolutionScale );\n\n\t\t\t//\n\n\t\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t\tconst currentActiveCubeFace = _this.getActiveCubeFace();\n\t\t\tconst currentActiveMipmapLevel = _this.getActiveMipmapLevel();\n\n\t\t\t_this.setRenderTarget( transmissionRenderTarget );\n\n\t\t\t_this.getClearColor( _currentClearColor );\n\t\t\t_currentClearAlpha = _this.getClearAlpha();\n\t\t\tif ( _currentClearAlpha < 1 ) _this.setClearColor( 0xffffff, 0.5 );\n\n\t\t\t_this.clear();\n\n\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\t\tconst currentToneMapping = _this.toneMapping;\n\t\t\t_this.toneMapping = NoToneMapping;\n\n\t\t\t// Remove viewport from camera to avoid nested render calls resetting viewport to it (e.g Reflector).\n\t\t\t// Transmission render pass requires viewport to match the transmissionRenderTarget.\n\t\t\tconst currentCameraViewport = camera.viewport;\n\t\t\tif ( camera.viewport !== undefined ) camera.viewport = undefined;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === false ) { // see #28131\n\n\t\t\t\tlet renderTargetNeedsUpdate = false;\n\n\t\t\t\tfor ( let i = 0, l = transmissiveObjects.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst renderItem = transmissiveObjects[ i ];\n\n\t\t\t\t\tconst { object, geometry, material, group } = renderItem;\n\n\t\t\t\t\tif ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tconst currentSide = material.side;\n\n\t\t\t\t\t\tmaterial.side = BackSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t\t\tmaterial.side = currentSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderTargetNeedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetNeedsUpdate === true ) {\n\n\t\t\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_this.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );\n\n\t\t\t_this.setClearColor( _currentClearColor, _currentClearAlpha );\n\n\t\t\tif ( currentCameraViewport !== undefined ) camera.viewport = currentCameraViewport;\n\n\t\t\t_this.toneMapping = currentToneMapping;\n\n\t\t}\n\n\t\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\t\tconst { object, geometry, group } = renderItem;\n\t\t\t\tlet material = renderItem.material;\n\n\t\t\t\tif ( material.allowOverride === true && overrideMaterial !== null ) {\n\n\t\t\t\t\tmaterial = overrideMaterial;\n\n\t\t\t\t}\n\n\t\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\t\tmaterial.onBeforeRender( _this, scene, camera, geometry, object, group );\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t\t}\n\n\t\tfunction getProgram( material, scene, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tconst lights = currentRenderState.state.lights;\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tconst lightsStateVersion = lights.state.version;\n\n\t\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object, currentRenderState.state.lightProbeGridArray );\n\t\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\t\tlet programs = materialProperties.programs;\n\n\t\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\t\tmaterialProperties.environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;\n\t\t\tmaterialProperties.fog = scene.fog;\n\n\t\t\tconst usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );\n\t\t\tmaterialProperties.envMap = environments.get( material.envMap || materialProperties.environment, usePMREM );\n\t\t\tmaterialProperties.envMapRotation = ( materialProperties.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;\n\n\t\t\tif ( programs === undefined ) {\n\n\t\t\t\t// new material\n\n\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\tprograms = new Map();\n\t\t\t\tmaterialProperties.programs = programs;\n\n\t\t\t}\n\n\t\t\tlet program = programs.get( programCacheKey );\n\n\t\t\tif ( program !== undefined ) {\n\n\t\t\t\t// early out if program and light state is identical\n\n\t\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\t\treturn program;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\t\t// Use node builder for node materials if available\n\t\t\t\tif ( _nodesHandler !== null && material.isNodeMaterial ) {\n\n\t\t\t\t\t_nodesHandler.build( material, object, parameters );\n\n\t\t\t\t}\n\n\t\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t\t}\n\n\t\t\tconst uniforms = materialProperties.uniforms;\n\n\t\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t\t}\n\n\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t// store the light setup it was created for\n\n\t\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotLightMatrix.value = lights.state.spotLightMatrix;\n\t\t\t\tuniforms.spotLightMap.value = lights.state.spotLightMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t\t}\n\n\t\t\tmaterialProperties.lightProbeGrid = currentRenderState.state.lightProbeGridArray.length > 0;\n\n\t\t\tmaterialProperties.currentProgram = program;\n\t\t\tmaterialProperties.uniformsList = null;\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\tfunction getUniformList( materialProperties ) {\n\n\t\t\tif ( materialProperties.uniformsList === null ) {\n\n\t\t\t\tconst progUniforms = materialProperties.currentProgram.getUniforms();\n\t\t\t\tmaterialProperties.uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, materialProperties.uniforms );\n\n\t\t\t}\n\n\t\t\treturn materialProperties.uniformsList;\n\n\t\t}\n\n\t\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tmaterialProperties.outputColorSpace = parameters.outputColorSpace;\n\t\t\tmaterialProperties.batching = parameters.batching;\n\t\t\tmaterialProperties.batchingColor = parameters.batchingColor;\n\t\t\tmaterialProperties.instancing = parameters.instancing;\n\t\t\tmaterialProperties.instancingColor = parameters.instancingColor;\n\t\t\tmaterialProperties.instancingMorph = parameters.instancingMorph;\n\t\t\tmaterialProperties.skinning = parameters.skinning;\n\t\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\t\tmaterialProperties.morphColors = parameters.morphColors;\n\t\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\t\t\tmaterialProperties.toneMapping = parameters.toneMapping;\n\n\t\t}\n\n\t\tfunction findLightProbeGrid( volumes, object ) {\n\n\t\t\tif ( volumes.length === 0 ) return null;\n\n\t\t\tif ( volumes.length === 1 ) {\n\n\t\t\t\treturn volumes[ 0 ].texture !== null ? volumes[ 0 ] : null;\n\n\t\t\t}\n\n\t\t\tobjectPosition.setFromMatrixPosition( object.matrixWorld );\n\n\t\t\tfor ( let i = 0, l = volumes.length; i < l; i ++ ) {\n\n\t\t\t\tconst v = volumes[ i ];\n\n\t\t\t\tif ( v.texture !== null && v.boundingBox.containsPoint( objectPosition ) ) return v;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\ttextures.resetTextureUnits();\n\n\t\t\tconst fog = scene.fog;\n\t\t\tconst environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;\n\t\t\tconst colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : ColorManagement.workingColorSpace );\n\t\t\tconst usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );\n\t\t\tconst envMap = environments.get( material.envMap || environment, usePMREM );\n\t\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\t\tconst vertexTangents = !! geometry.attributes.tangent && ( !! material.normalMap || material.anisotropy > 0 );\n\t\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\t\tconst morphColors = !! geometry.morphAttributes.color;\n\n\t\t\tlet toneMapping = NoToneMapping;\n\n\t\t\tif ( material.toneMapped ) {\n\n\t\t\t\tif ( _currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\t\ttoneMapping = _this.toneMapping;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t\tconst materialProperties = properties.get( material );\n\t\t\tconst lights = currentRenderState.state.lights;\n\n\t\t\tif ( _clippingEnabled === true ) {\n\n\t\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\t\tconst useCache =\n\t\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\t\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet needsProgramChange = false;\n\n\t\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.outputColorSpace !== colorSpace ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batching === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isBatchedMesh && materialProperties.batching === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === true && object.colorTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === false && object.colorTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( material.fog === true && materialProperties.fog !== fog ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphColors !== morphColors ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.toneMapping !== toneMapping ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( !! materialProperties.lightProbeGrid !== ( currentRenderState.state.lightProbeGridArray.length > 0 ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tneedsProgramChange = true;\n\t\t\t\tmaterialProperties.__version = material.version;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet program = materialProperties.currentProgram;\n\n\t\t\tif ( needsProgramChange === true ) {\n\n\t\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t\t\t// notify the node builder that the program has changed so uniforms and update nodes can\n\t\t\t\t// be cached and triggered.\n\t\t\t\tif ( _nodesHandler && material.isNodeMaterial ) {\n\n\t\t\t\t\t_nodesHandler.onUpdateProgram( material, program, materialProperties );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet refreshProgram = false;\n\t\t\tlet refreshMaterial = false;\n\t\t\tlet refreshLights = false;\n\n\t\t\tconst p_uniforms = program.getUniforms(),\n\t\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\n\t\t\t}\n\n\t\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t\t_currentMaterialId = material.id;\n\n\t\t\t\trefreshMaterial = true;\n\n\t\t\t}\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\tconst objectVolume = findLightProbeGrid( currentRenderState.state.lightProbeGridArray, object );\n\n\t\t\t\tif ( materialProperties.lightProbeGrid !== objectVolume ) {\n\n\t\t\t\t\tmaterialProperties.lightProbeGrid = objectVolume;\n\t\t\t\t\trefreshMaterial = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\t\t// common camera uniforms\n\n\t\t\t\tconst reversedDepthBuffer = state.buffers.depth.getReversed();\n\n\t\t\t\tif ( reversedDepthBuffer && camera.reversedDepth !== true ) {\n\n\t\t\t\t\tcamera._reversedDepth = true;\n\t\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl, _vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// consider moving isOrthographic to UniformLib and WebGLMaterials, see https://github.com/mrdoob/three.js/pull/26467#issuecomment-1645185067\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Pre-allocate texture units for shadow samplers before setting data textures\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// Set shadow map uniforms first to ensure they get the first texture units\n\t\t\t\tif ( lights.state.directionalShadowMap.length > 0 ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'directionalShadowMap', lights.state.directionalShadowMap, textures );\n\n\t\t\t\t}\n\n\t\t\t\tif ( lights.state.spotShadowMap.length > 0 ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'spotShadowMap', lights.state.spotShadowMap, textures );\n\n\t\t\t\t}\n\n\t\t\t\tif ( lights.state.pointShadowMap.length > 0 ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'pointShadowMap', lights.state.pointShadowMap, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\t\tconst skeleton = object.skeleton;\n\n\t\t\t\tif ( skeleton ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingTexture', object._matricesTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingIdTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingIdTexture', object._indirectTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingColorTexture' );\n\t\t\t\tif ( object._colorsTexture !== null ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'batchingColorTexture', object._colorsTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\t\tif ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined ) ) {\n\n\t\t\t\tmorphtargets.update( object, geometry, program );\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t\t}\n\n\t\t\tif ( ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) && material.envMap === null && scene.environment !== null ) {\n\n\t\t\t\tm_uniforms.envMapIntensity.value = scene.environmentIntensity;\n\n\t\t\t}\n\n\t\t\t// Set DFG LUT for physically-based materials\n\t\t\tif ( m_uniforms.dfgLUT !== undefined ) {\n\n\t\t\t\tm_uniforms.dfgLUT.value = getDFGLUT();\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t\t}\n\n\t\t\t\t// refresh uniforms common to several materials\n\n\t\t\t\tif ( fog && material.fog === true ) {\n\n\t\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );\n\n\t\t\t\t// light probe volume\n\n\t\t\t\tif ( materialProperties.needsLights && materialProperties.lightProbeGrid ) {\n\n\t\t\t\t\tconst volume = materialProperties.lightProbeGrid;\n\n\t\t\t\t\tm_uniforms.probesSH.value = volume.texture;\n\t\t\t\t\tm_uniforms.probesMin.value.copy( volume.boundingBox.min );\n\t\t\t\t\tm_uniforms.probesMax.value.copy( volume.boundingBox.max );\n\t\t\t\t\tm_uniforms.probesResolution.value.copy( volume.resolution );\n\n\t\t\t\t}\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\n\t\t\t}\n\n\t\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\t\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t\t}\n\n\t\t\t// common matrices\n\n\t\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t\t// UBOs\n\n\t\t\tif ( material.uniformsGroups !== undefined ) {\n\n\t\t\t\tconst groups = material.uniformsGroups;\n\n\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tuniformsGroups.update( group, program );\n\t\t\t\t\tuniformsGroups.bind( group, program );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\t\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t\t}\n\n\t\tfunction materialNeedsLights( material ) {\n\n\t\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t\t}\n\n\t\t/**\n\t\t * Returns the active cube face.\n\t\t *\n\t\t * @return {number} The active cube face.\n\t\t */\n\t\tthis.getActiveCubeFace = function () {\n\n\t\t\treturn _currentActiveCubeFace;\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the active mipmap level.\n\t\t *\n\t\t * @return {number} The active mipmap level.\n\t\t */\n\t\tthis.getActiveMipmapLevel = function () {\n\n\t\t\treturn _currentActiveMipmapLevel;\n\n\t\t};\n\n\t\t/**\n\t\t * Returns the active render target.\n\t\t *\n\t\t * @return {?WebGLRenderTarget} The active render target. Returns `null` if no render target\n\t\t * is currently set.\n\t\t */\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn _currentRenderTarget;\n\n\t\t};\n\n\t\tthis.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\trenderTargetProperties.__autoAllocateDepthBuffer = renderTarget.resolveDepthBuffer === false;\n\t\t\tif ( renderTargetProperties.__autoAllocateDepthBuffer === false ) {\n\n\t\t\t\t// The multisample_render_to_texture extension doesn't work properly if there\n\t\t\t\t// are midframe flushes and an external depth buffer. Disable use of the extension.\n\t\t\t\trenderTargetProperties.__useRenderToTexture = false;\n\n\t\t\t}\n\n\t\t\tproperties.get( renderTarget.texture ).__webglTexture = colorTexture;\n\t\t\tproperties.get( renderTarget.depthTexture ).__webglTexture = renderTargetProperties.__autoAllocateDepthBuffer ? undefined : depthTexture;\n\n\t\t\trenderTargetProperties.__hasExternalTextures = true;\n\n\t\t};\n\n\t\tthis.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__webglFramebuffer = defaultFramebuffer;\n\t\t\trenderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;\n\n\t\t};\n\n\t\tconst _scratchFrameBuffer = _gl.createFramebuffer();\n\n\t\t/**\n\t\t * Sets the active rendertarget.\n\t\t *\n\t\t * @param {?WebGLRenderTarget} renderTarget - The render target to set. When `null` is given,\n\t\t * the canvas is set as the active render target instead.\n\t\t * @param {number} [activeCubeFace=0] - The active cube face when using a cube render target.\n\t\t * Indicates the z layer to render in to when using 3D or array render targets.\n\t\t * @param {number} [activeMipmapLevel=0] - The active mipmap level.\n\t\t */\n\t\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t\t_currentRenderTarget = renderTarget;\n\t\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\t\tlet framebuffer = null;\n\t\t\tlet isCube = false;\n\t\t\tlet isRenderTarget3D = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tif ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {\n\n\t\t\t\t\t// Externally-managed framebuffer (e.g. XR)\n\t\t\t\t\t// Bind to the stored framebuffer (may be null for default, or a WebGLFramebuffer)\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t\t\tstate.viewport( _currentViewport );\n\t\t\t\t\tstate.scissor( _currentScissor );\n\t\t\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\t\t\t_currentMaterialId = -1;\n\n\t\t\t\t\treturn;\n\n\t\t\t\t} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {\n\n\t\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t\t} else if ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\t\t\t// Color and depth texture must be rebound in order for the swapchain to update.\n\t\t\t\t\ttextures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );\n\n\t\t\t\t} else if ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t// check if the depth texture is already bound to the frame buffer and that it's been initialized\n\t\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\t\t\tif ( renderTargetProperties.__boundDepthTexture !== depthTexture ) {\n\n\t\t\t\t\t\t// check if the depth texture is compatible\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdepthTexture !== null &&\n\t\t\t\t\t\t\tproperties.has( depthTexture ) &&\n\t\t\t\t\t\t\t( renderTarget.width !== depthTexture.image.width || renderTarget.height !== depthTexture.image.height )\n\t\t\t\t\t\t) {\n\n\t\t\t\t\t\t\tthrow new Error( 'WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Swap the depth buffer to the currently attached one\n\t\t\t\t\t\ttextures.setupDepthRenderbuffer( renderTarget );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst texture = renderTarget.texture;\n\n\t\t\t\tif ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tisCube = true;\n\n\t\t\t\t} else if ( ( renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t} else {\n\n\t\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t\t}\n\n\t\t\t// Use a scratch frame buffer if rendering to a mip level to avoid depth buffers\n\t\t\t// being bound that are different sizes.\n\t\t\tif ( activeMipmapLevel !== 0 ) {\n\n\t\t\t\tframebuffer = _scratchFrameBuffer;\n\n\t\t\t}\n\n\t\t\tconst framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\tif ( framebufferBound ) {\n\n\t\t\t\tstate.drawBuffers( renderTarget, framebuffer );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport );\n\t\t\tstate.scissor( _currentScissor );\n\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\t\tconst layer = activeCubeFace;\n\n\t\t\t\tfor ( let i = 0; i < renderTarget.textures.length; i ++ ) {\n\n\t\t\t\t\tconst textureProperties = properties.get( renderTarget.textures[ i ] );\n\n\t\t\t\t\t_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, textureProperties.__webglTexture, activeMipmapLevel, layer );\n\n\t\t\t\t}\n\n\t\t\t} else if ( renderTarget !== null && activeMipmapLevel !== 0 ) {\n\n\t\t\t\t// Only bind the frame buffer if we are using a scratch frame buffer to render to a mipmap.\n\t\t\t\t// If we rebind the texture when using a multi sample buffer then an error about inconsistent samples will be thrown.\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t\t}\n\n\t\t\t_currentMaterialId = -1; // reset current material to ensure correct uniform bindings\n\n\t\t};\n\n\t\t/**\n\t\t * Reads the pixel data from the given render target into the given buffer.\n\t\t *\n\t\t * @param {WebGLRenderTarget} renderTarget - The render target to read from.\n\t\t * @param {number} x - The `x` coordinate of the copy region's origin.\n\t\t * @param {number} y - The `y` coordinate of the copy region's origin.\n\t\t * @param {number} width - The width of the copy region.\n\t\t * @param {number} height - The height of the copy region.\n\t\t * @param {TypedArray} buffer - The result buffer.\n\t\t * @param {number} [activeCubeFaceIndex] - The active cube face index.\n\t\t * @param {number} [textureIndex=0] - The texture index of an MRT render target.\n\t\t */\n\t\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\terror( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.textures[ textureIndex ];\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\t// when using MRT, select the correct color buffer for the subsequent read command\n\n\t\t\t\t\tif ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\terror( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\terror( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Asynchronous, non-blocking version of {@link WebGLRenderer#readRenderTargetPixels}.\n\t\t *\n\t\t * It is recommended to use this version of `readRenderTargetPixels()` whenever possible.\n\t\t *\n\t\t * @async\n\t\t * @param {WebGLRenderTarget} renderTarget - The render target to read from.\n\t\t * @param {number} x - The `x` coordinate of the copy region's origin.\n\t\t * @param {number} y - The `y` coordinate of the copy region's origin.\n\t\t * @param {number} width - The width of the copy region.\n\t\t * @param {number} height - The height of the copy region.\n\t\t * @param {TypedArray} buffer - The result buffer.\n\t\t * @param {number} [activeCubeFaceIndex] - The active cube face index.\n\t\t * @param {number} [textureIndex=0] - The texture index of an MRT render target.\n\t\t * @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.\n\t\t */\n\t\tthis.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t// set the active frame buffer to the one we want to read\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t\tconst texture = renderTarget.textures[ textureIndex ];\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\t// when using MRT, select the correct color buffer for the subsequent read command\n\n\t\t\t\t\tif ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );\n\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst glBuffer = _gl.createBuffer();\n\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );\n\n\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );\n\n\t\t\t\t\t// reset the frame buffer to the currently set buffer before waiting\n\t\t\t\t\tconst currFramebuffer = _currentRenderTarget !== null ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, currFramebuffer );\n\n\t\t\t\t\t// check if the commands have finished every 8 ms\n\t\t\t\t\tconst sync = _gl.fenceSync( _gl.SYNC_GPU_COMMANDS_COMPLETE, 0 );\n\n\t\t\t\t\t_gl.flush();\n\n\t\t\t\t\tawait probeAsync( _gl, sync, 4 );\n\n\t\t\t\t\t// read the data and delete the buffer\n\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t_gl.getBufferSubData( _gl.PIXEL_PACK_BUFFER, 0, buffer );\n\t\t\t\t\t_gl.deleteBuffer( glBuffer );\n\t\t\t\t\t_gl.deleteSync( sync );\n\n\t\t\t\t\treturn buffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Copies pixels from the current bound framebuffer into the given texture.\n\t\t *\n\t\t * @param {FramebufferTexture} texture - The texture.\n\t\t * @param {?Vector2} [position=null] - The start position of the copy operation.\n\t\t * @param {number} [level=0] - The mip level. The default represents the base mip.\n\t\t */\n\t\tthis.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {\n\n\t\t\tconst levelScale = Math.pow( 2, - level );\n\t\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\t\tconst x = position !== null ? position.x : 0;\n\t\t\tconst y = position !== null ? position.y : 0;\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t_gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, x, y, width, height );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tconst _srcFramebuffer = _gl.createFramebuffer();\n\t\tconst _dstFramebuffer = _gl.createFramebuffer();\n\n\t\t/**\n\t\t * Copies data of the given source texture into a destination texture.\n\t\t *\n\t\t * When using render target textures as `srcTexture` and `dstTexture`, you must make sure both render targets are initialized\n\t\t * {@link WebGLRenderer#initRenderTarget}.\n\t\t *\n\t\t * @param {Texture} srcTexture - The source texture.\n\t\t * @param {Texture} dstTexture - The destination texture.\n\t\t * @param {?(Box2|Box3)} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.\n\t\t * @param {?(Vector2|Vector3)} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.\n\t\t * @param {number} [srcLevel=0] - The source mipmap level to copy.\n\t\t * @param {?number} [dstLevel=0] - The destination mipmap level.\n\t\t */\n\t\tthis.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {\n\n\t\t\t// gather the necessary dimensions to copy\n\t\t\tlet width, height, depth, minX, minY, minZ;\n\t\t\tlet dstX, dstY, dstZ;\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ dstLevel ] : srcTexture.image;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tdepth = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\t\t\t\tminZ = srcRegion.isBox3 ? srcRegion.min.z : 0;\n\n\t\t\t} else {\n\n\t\t\t\tconst levelScale = Math.pow( 2, - srcLevel );\n\t\t\t\twidth = Math.floor( image.width * levelScale );\n\t\t\t\theight = Math.floor( image.height * levelScale );\n\t\t\t\tif ( srcTexture.isDataArrayTexture ) {\n\n\t\t\t\t\tdepth = image.depth;\n\n\t\t\t\t} else if ( srcTexture.isData3DTexture ) {\n\n\t\t\t\t\tdepth = Math.floor( image.depth * levelScale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdepth = 1;\n\n\t\t\t\t}\n\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\t\t\t\tminZ = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\t\t\t\tdstZ = dstPosition.z;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\t\t\t\tdstZ = 0;\n\n\t\t\t}\n\n\t\t\t// Set up the destination target\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\t\t\tlet glTarget;\n\n\t\t\tif ( dstTexture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_3D;\n\n\t\t\t} else if ( dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t} else {\n\n\t\t\t\ttextures.setTexture2D( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_2D;\n\n\t\t\t}\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 ); // see #33153\n\n\t\t\tstate.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\tstate.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\tstate.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\t// used for copying data from cpu\n\t\t\tconst currentUnpackRowLen = state.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = state.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = state.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = state.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = state.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\tstate.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\tstate.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );\n\n\t\t\t// set up the src texture\n\t\t\tconst isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture;\n\t\t\tconst isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;\n\t\t\tif ( srcTexture.isDepthTexture ) {\n\n\t\t\t\tconst srcTextureProperties = properties.get( srcTexture );\n\t\t\t\tconst dstTextureProperties = properties.get( dstTexture );\n\t\t\t\tconst srcRenderTargetProperties = properties.get( srcTextureProperties.__renderTarget );\n\t\t\t\tconst dstRenderTargetProperties = properties.get( dstTextureProperties.__renderTarget );\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, srcRenderTargetProperties.__webglFramebuffer );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, dstRenderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < depth; i ++ ) {\n\n\t\t\t\t\t// if the source or destination are a 3d target then a layer needs to be bound\n\t\t\t\t\tif ( isSrc3D ) {\n\n\t\t\t\t\t\t_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( srcTexture ).__webglTexture, srcLevel, minZ + i );\n\t\t\t\t\t\t_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( dstTexture ).__webglTexture, dstLevel, dstZ + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t} else if ( srcLevel !== 0 || srcTexture.isRenderTargetTexture || properties.has( srcTexture ) ) {\n\n\t\t\t\t// get the appropriate frame buffers\n\t\t\t\tconst srcTextureProperties = properties.get( srcTexture );\n\t\t\t\tconst dstTextureProperties = properties.get( dstTexture );\n\n\t\t\t\t// bind the frame buffer targets\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, _srcFramebuffer );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, _dstFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < depth; i ++ ) {\n\n\t\t\t\t\t// assign the correct layers and mip maps to the frame buffers\n\t\t\t\t\tif ( isSrc3D ) {\n\n\t\t\t\t\t\t_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, srcTextureProperties.__webglTexture, srcLevel, minZ + i );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, srcTextureProperties.__webglTexture, srcLevel );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isDst3D ) {\n\n\t\t\t\t\t\t_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, dstTextureProperties.__webglTexture, dstLevel, dstZ + i );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, dstTextureProperties.__webglTexture, dstLevel );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// copy the data using the fastest function that can achieve the copy\n\t\t\t\t\tif ( srcLevel !== 0 ) {\n\n\t\t\t\t\t\t_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.COLOR_BUFFER_BIT, _gl.NEAREST );\n\n\t\t\t\t\t} else if ( isDst3D ) {\n\n\t\t\t\t\t\t_gl.copyTexSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ + i, minX, minY, width, height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_gl.copyTexSubImage2D( glTarget, dstLevel, dstX, dstY, minX, minY, width, height );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// unbind read, draw buffers\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t} else {\n\n\t\t\t\tif ( isDst3D ) {\n\n\t\t\t\t\t// copy data into the 3d texture\n\t\t\t\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t\t\t\t_gl.texSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );\n\n\t\t\t\t\t} else if ( dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\t\t\t_gl.compressedTexSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_gl.texSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// copy data into the 2d texture\n\t\t\t\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );\n\n\t\t\t\t\t} else if ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t\t\t_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// reset values\n\t\t\tstate.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\tstate.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\tstate.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( dstLevel === 0 && dstTexture.generateMipmaps ) {\n\n\t\t\t\t_gl.generateMipmap( glTarget );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\t/**\n\t\t * Initializes the given WebGLRenderTarget memory. Useful for initializing a render target so data\n\t\t * can be copied into it using {@link WebGLRenderer#copyTextureToTexture} before it has been\n\t\t * rendered to.\n\t\t *\n\t\t * @param {WebGLRenderTarget} target - The render target.\n\t\t */\n\t\tthis.initRenderTarget = function ( target ) {\n\n\t\t\tif ( properties.get( target ).__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( target );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Initializes the given texture. Useful for preloading a texture rather than waiting until first\n\t\t * render (which can cause noticeable lags due to decode and GPU upload overhead).\n\t\t *\n\t\t * @param {Texture} texture - The texture.\n\t\t */\n\t\tthis.initTexture = function ( texture ) {\n\n\t\t\tif ( texture.isCubeTexture ) {\n\n\t\t\t\ttextures.setTextureCube( texture, 0 );\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( texture, 0 );\n\n\t\t\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( texture, 0 );\n\n\t\t\t} else {\n\n\t\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\t/**\n\t\t * Can be used to reset the internal WebGL state. This method is mostly\n\t\t * relevant for applications which share a single WebGL context across\n\t\t * multiple WebGL libraries.\n\t\t */\n\t\tthis.resetState = function () {\n\n\t\t\t_currentActiveCubeFace = 0;\n\t\t\t_currentActiveMipmapLevel = 0;\n\t\t\t_currentRenderTarget = null;\n\n\t\t\tstate.reset();\n\t\t\tbindingStates.reset();\n\n\t\t};\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Defines the coordinate system of the renderer.\n\t *\n\t * In `WebGLRenderer`, the value is always `WebGLCoordinateSystem`.\n\t *\n\t * @type {WebGLCoordinateSystem|WebGPUCoordinateSystem}\n\t * @default WebGLCoordinateSystem\n\t * @readonly\n\t */\n\tget coordinateSystem() {\n\n\t\treturn WebGLCoordinateSystem;\n\n\t}\n\n\t/**\n\t * Defines the output color space of the renderer.\n\t *\n\t * @type {SRGBColorSpace|LinearSRGBColorSpace}\n\t * @default SRGBColorSpace\n\t */\n\tget outputColorSpace() {\n\n\t\treturn this._outputColorSpace;\n\n\t}\n\n\tset outputColorSpace( colorSpace ) {\n\n\t\tthis._outputColorSpace = colorSpace;\n\n\t\tconst gl = this.getContext();\n\t\tgl.drawingBufferColorSpace = ColorManagement._getDrawingBufferColorSpace( colorSpace );\n\t\tgl.unpackColorSpace = ColorManagement._getUnpackColorSpace();\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, ArrayCamera, BackSide, BoxGeometry, BufferAttribute, BufferGeometry, ByteType, CineonToneMapping, ClampToEdgeWrapping, Color, ColorManagement, ConstantAlphaFactor, ConstantColorFactor, CubeCamera, CubeDepthTexture, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeUVReflectionMapping, CullFaceBack, CullFaceFront, CullFaceNone, CustomBlending, CustomToneMapping, Data3DTexture, DataArrayTexture, DataTexture, DepthFormat, DepthStencilFormat, DepthTexture, DoubleSide, DstAlphaFactor, DstColorFactor, EqualCompare, EqualDepth, EquirectangularReflectionMapping, EquirectangularRefractionMapping, EventDispatcher, ExternalTexture, Float32BufferAttribute, FloatType, FrontSide, Frustum, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, HalfFloatType, IntType, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NoBlending, NoColorSpace, NoToneMapping, NormalBlending, NotEqualCompare, NotEqualDepth, ObjectSpaceNormalMap, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, PerspectiveCamera, Plane, PlaneGeometry, R11_EAC_Format, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReverseSubtractEquation, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, ShaderChunk, ShaderLib, ShaderMaterial, ShortType, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, SubtractEquation, SubtractiveBlending, TangentSpaceNormalMap, Texture, Uint16BufferAttribute, Uint32BufferAttribute, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, WebGLCoordinateSystem, WebGLCubeRenderTarget, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WebXRController, ZeroFactor, createCanvasElement, error, log, warn, warnOnce };\n","import {\n\tMatrix4,\n\tObject3D,\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * The only type of 3D object that is supported by {@link CSS2DRenderer}.\n *\n * @augments Object3D\n * @three_import import { CSS2DObject } from 'three/addons/renderers/CSS2DRenderer.js';\n */\nclass CSS2DObject extends Object3D {\n\n\t/**\n\t * Constructs a new CSS2D object.\n\t *\n\t * @param {HTMLElement} [element] - The DOM element.\n\t */\n\tconstructor( element = document.createElement( 'div' ) ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCSS2DObject = true;\n\n\t\t/**\n\t\t * The DOM element which defines the appearance of this 3D object.\n\t\t *\n\t\t * @type {HTMLElement}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.element = element;\n\n\t\tthis.element.style.position = 'absolute';\n\t\tthis.element.style.userSelect = 'none';\n\n\t\tthis.element.setAttribute( 'draggable', false );\n\n\t\t/**\n\t\t * The 3D objects center point.\n\t\t * `( 0, 0 )` is the lower left, `( 1, 1 )` is the top right.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (0.5,0.5)\n\t\t */\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t\tthis.addEventListener( 'removed', function () {\n\n\t\t\tthis.traverse( function ( object ) {\n\n\t\t\t\tif (\n\t\t\t\t\tobject.element &&\n\t\t\t\t\tobject.element instanceof object.element.ownerDocument.defaultView.Element &&\n\t\t\t\t\tobject.element.parentNode !== null\n\t\t\t\t) {\n\n\t\t\t\t\tobject.element.remove();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.element = source.element.cloneNode( true );\n\n\t\tthis.center = source.center;\n\n\t\treturn this;\n\n\t}\n\n}\n\n//\n\nconst _vector = new Vector3();\nconst _viewMatrix = new Matrix4();\nconst _viewProjectionMatrix = new Matrix4();\nconst _a = new Vector3();\nconst _b = new Vector3();\n\n/**\n * This renderer is a simplified version of {@link CSS3DRenderer}. The only transformation that is\n * supported is translation.\n *\n * The renderer is very useful if you want to combine HTML based labels with 3D objects. Here too,\n * the respective DOM elements are wrapped into an instance of {@link CSS2DObject} and added to the\n * scene graph. All other types of renderable 3D objects (like meshes or point clouds) are ignored.\n *\n * `CSS2DRenderer` only supports 100% browser and display zoom.\n *\n * @three_import import { CSS2DRenderer } from 'three/addons/renderers/CSS2DRenderer.js';\n */\nclass CSS2DRenderer {\n\n\t/**\n\t * Constructs a new CSS2D renderer.\n\t *\n\t * @param {CSS2DRenderer~Parameters} [parameters] - The parameters.\n\t */\n\tconstructor( parameters = {} ) {\n\n\t\tconst _this = this;\n\n\t\tlet _width, _height;\n\t\tlet _widthHalf, _heightHalf;\n\n\t\tconst cache = {\n\t\t\tobjects: new WeakMap()\n\t\t};\n\n\t\tconst domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );\n\n\t\tdomElement.style.overflow = 'hidden';\n\n\t\t/**\n\t\t * The DOM where the renderer appends its child-elements.\n\t\t *\n\t\t * @type {HTMLElement}\n\t\t */\n\t\tthis.domElement = domElement;\n\n\t\t/**\n\t\t * Controls whether the renderer assigns `z-index` values to CSS2DObject DOM elements.\n\t\t * If set to `true`, z-index values are assigned first based on the `renderOrder`\n\t\t * and secondly - the distance to the camera. If set to `false`, no z-index values are assigned.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.sortObjects = true;\n\n\t\t/**\n\t\t * Returns an object containing the width and height of the renderer.\n\t\t *\n\t\t * @return {{width:number,height:number}} The size of the renderer.\n\t\t */\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\t/**\n\t\t * Renders the given scene using the given camera.\n\t\t *\n\t\t * @param {Object3D} scene - A scene or any other type of 3D object.\n\t\t * @param {Camera} camera - The camera.\n\t\t */\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\trenderObject( scene, scene, camera );\n\t\t\tif ( this.sortObjects ) zOrder( scene );\n\n\t\t};\n\n\t\t/**\n\t\t * Resizes the renderer to the given width and height.\n\t\t *\n\t\t * @param {number} width - The width of the renderer.\n\t\t * @param {number} height - The height of the renderer.\n\t\t */\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_widthHalf = _width / 2;\n\t\t\t_heightHalf = _height / 2;\n\n\t\t\tdomElement.style.width = width + 'px';\n\t\t\tdomElement.style.height = height + 'px';\n\n\t\t};\n\n\t\tfunction hideObject( object ) {\n\n\t\t\tif ( object.isCSS2DObject ) object.element.style.display = 'none';\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\thideObject( object.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera ) {\n\n\t\t\tif ( object.visible === false ) {\n\n\t\t\t\thideObject( object );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( object.isCSS2DObject ) {\n\n\t\t\t\t_vector.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t_vector.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tconst visible = ( _vector.z >= - 1 && _vector.z <= 1 ) && ( object.layers.test( camera.layers ) === true );\n\n\t\t\t\tconst element = object.element;\n\t\t\t\telement.style.display = visible === true ? '' : 'none';\n\n\t\t\t\tif ( visible === true ) {\n\n\t\t\t\t\tobject.onBeforeRender( _this, scene, camera );\n\n\t\t\t\t\telement.style.transform = 'translate(' + ( - 100 * object.center.x ) + '%,' + ( - 100 * object.center.y ) + '%)' + 'translate(' + ( _vector.x * _widthHalf + _widthHalf ) + 'px,' + ( - _vector.y * _heightHalf + _heightHalf ) + 'px)';\n\n\t\t\t\t\tif ( element.parentNode !== domElement ) {\n\n\t\t\t\t\t\tdomElement.appendChild( element );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.onAfterRender( _this, scene, camera );\n\n\t\t\t\t}\n\n\t\t\t\tconst objectData = {\n\t\t\t\t\tdistanceToCameraSquared: getDistanceToSquared( camera, object )\n\t\t\t\t};\n\n\t\t\t\tcache.objects.set( object, objectData );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( object.children[ i ], scene, camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getDistanceToSquared( object1, object2 ) {\n\n\t\t\t_a.setFromMatrixPosition( object1.matrixWorld );\n\t\t\t_b.setFromMatrixPosition( object2.matrixWorld );\n\n\t\t\treturn _a.distanceToSquared( _b );\n\n\t\t}\n\n\t\tfunction filterAndFlatten( scene ) {\n\n\t\t\tconst result = [];\n\n\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isCSS2DObject ) result.push( object );\n\n\t\t\t} );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction zOrder( scene ) {\n\n\t\t\tconst sorted = filterAndFlatten( scene ).sort( function ( a, b ) {\n\n\t\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\t\treturn b.renderOrder - a.renderOrder;\n\n\t\t\t\t}\n\n\t\t\t\tconst distanceA = cache.objects.get( a ).distanceToCameraSquared;\n\t\t\t\tconst distanceB = cache.objects.get( b ).distanceToCameraSquared;\n\n\t\t\t\treturn distanceA - distanceB;\n\n\t\t\t} );\n\n\t\t\tconst zMax = sorted.length;\n\n\t\t\tfor ( let i = 0, l = sorted.length; i < l; i ++ ) {\n\n\t\t\t\tsorted[ i ].element.style.zIndex = zMax - i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Constructor parameters of `CSS2DRenderer`.\n *\n * @typedef {Object} CSS2DRenderer~Parameters\n * @property {HTMLElement} [element] - A DOM element where the renderer appends its child-elements.\n * If not passed in here, a new div element will be created.\n **/\n\nexport { CSS2DObject, CSS2DRenderer };\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nexport default now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nexport default debounce;\n","import debounce from 'lodash-es/debounce.js';\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _createClass(e, r, t) {\n  return Object.defineProperty(e, \"prototype\", {\n    writable: false\n  }), e;\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar Prop = /*#__PURE__*/_createClass(function Prop(name, _ref) {\n  var _ref$default = _ref[\"default\"],\n    defaultVal = _ref$default === void 0 ? null : _ref$default,\n    _ref$triggerUpdate = _ref.triggerUpdate,\n    triggerUpdate = _ref$triggerUpdate === void 0 ? true : _ref$triggerUpdate,\n    _ref$onChange = _ref.onChange,\n    onChange = _ref$onChange === void 0 ? function (newVal, state) {} : _ref$onChange;\n  _classCallCheck(this, Prop);\n  this.name = name;\n  this.defaultVal = defaultVal;\n  this.triggerUpdate = triggerUpdate;\n  this.onChange = onChange;\n});\nfunction index (_ref2) {\n  var _ref2$stateInit = _ref2.stateInit,\n    stateInit = _ref2$stateInit === void 0 ? function () {\n      return {};\n    } : _ref2$stateInit,\n    _ref2$props = _ref2.props,\n    rawProps = _ref2$props === void 0 ? {} : _ref2$props,\n    _ref2$methods = _ref2.methods,\n    methods = _ref2$methods === void 0 ? {} : _ref2$methods,\n    _ref2$aliases = _ref2.aliases,\n    aliases = _ref2$aliases === void 0 ? {} : _ref2$aliases,\n    _ref2$init = _ref2.init,\n    initFn = _ref2$init === void 0 ? function () {} : _ref2$init,\n    _ref2$update = _ref2.update,\n    updateFn = _ref2$update === void 0 ? function () {} : _ref2$update;\n  // Parse props into Prop instances\n  var props = Object.keys(rawProps).map(function (propName) {\n    return new Prop(propName, rawProps[propName]);\n  });\n  return function KapsuleComp() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    var classMode = !!(this instanceof KapsuleComp ? this.constructor : void 0);\n    var nodeElement = classMode ? args.shift() : undefined;\n    var _args$ = args[0],\n      options = _args$ === void 0 ? {} : _args$;\n\n    // Holds component state\n    var state = Object.assign({}, stateInit instanceof Function ? stateInit(options) : stateInit,\n    // Support plain objects for backwards compatibility\n    {\n      initialised: false\n    });\n\n    // keeps track of which props triggered an update\n    var changedProps = {};\n\n    // Component constructor\n    function comp(nodeElement) {\n      initStatic(nodeElement, options);\n      digest();\n      return comp;\n    }\n    var initStatic = function initStatic(nodeElement, options) {\n      initFn.call(comp, nodeElement, state, options);\n      state.initialised = true;\n    };\n    var digest = debounce(function () {\n      if (!state.initialised) {\n        return;\n      }\n      updateFn.call(comp, state, changedProps);\n      changedProps = {};\n    }, 1);\n\n    // Getter/setter methods\n    props.forEach(function (prop) {\n      comp[prop.name] = getSetProp(prop);\n      function getSetProp(_ref3) {\n        var prop = _ref3.name,\n          _ref3$triggerUpdate = _ref3.triggerUpdate,\n          redigest = _ref3$triggerUpdate === void 0 ? false : _ref3$triggerUpdate,\n          _ref3$onChange = _ref3.onChange,\n          onChange = _ref3$onChange === void 0 ? function (newVal, state) {} : _ref3$onChange,\n          _ref3$defaultVal = _ref3.defaultVal,\n          defaultVal = _ref3$defaultVal === void 0 ? null : _ref3$defaultVal;\n        return function (_) {\n          var curVal = state[prop];\n          if (!arguments.length) {\n            return curVal;\n          } // Getter mode\n\n          var val = _ === undefined ? defaultVal : _; // pick default if value passed is undefined\n          state[prop] = val;\n          onChange.call(comp, val, state, curVal);\n\n          // track changed props\n          !changedProps.hasOwnProperty(prop) && (changedProps[prop] = curVal);\n          if (redigest) {\n            digest();\n          }\n          return comp;\n        };\n      }\n    });\n\n    // Other methods\n    Object.keys(methods).forEach(function (methodName) {\n      comp[methodName] = function () {\n        var _methods$methodName;\n        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n        return (_methods$methodName = methods[methodName]).call.apply(_methods$methodName, [comp, state].concat(args));\n      };\n    });\n\n    // Link aliases\n    Object.entries(aliases).forEach(function (_ref4) {\n      var _ref5 = _slicedToArray(_ref4, 2),\n        alias = _ref5[0],\n        target = _ref5[1];\n      return comp[alias] = comp[target];\n    });\n\n    // Reset all component props to their default value\n    comp.resetProps = function () {\n      props.forEach(function (prop) {\n        comp[prop.name](prop.defaultVal);\n      });\n      return comp;\n    };\n\n    //\n\n    comp.resetProps(); // Apply all prop defaults\n    state._rerender = digest; // Expose digest method\n\n    classMode && nodeElement && comp(nodeElement);\n    return comp;\n  };\n}\n\nexport { index as default };\n","/**\n * The Ease class provides a collection of easing functions for use with tween.js.\n */\nvar Easing = Object.freeze({\n    Linear: Object.freeze({\n        None: function (amount) {\n            return amount;\n        },\n        In: function (amount) {\n            return amount;\n        },\n        Out: function (amount) {\n            return amount;\n        },\n        InOut: function (amount) {\n            return amount;\n        },\n    }),\n    Quadratic: Object.freeze({\n        In: function (amount) {\n            return amount * amount;\n        },\n        Out: function (amount) {\n            return amount * (2 - amount);\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return 0.5 * amount * amount;\n            }\n            return -0.5 * (--amount * (amount - 2) - 1);\n        },\n    }),\n    Cubic: Object.freeze({\n        In: function (amount) {\n            return amount * amount * amount;\n        },\n        Out: function (amount) {\n            return --amount * amount * amount + 1;\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return 0.5 * amount * amount * amount;\n            }\n            return 0.5 * ((amount -= 2) * amount * amount + 2);\n        },\n    }),\n    Quartic: Object.freeze({\n        In: function (amount) {\n            return amount * amount * amount * amount;\n        },\n        Out: function (amount) {\n            return 1 - --amount * amount * amount * amount;\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return 0.5 * amount * amount * amount * amount;\n            }\n            return -0.5 * ((amount -= 2) * amount * amount * amount - 2);\n        },\n    }),\n    Quintic: Object.freeze({\n        In: function (amount) {\n            return amount * amount * amount * amount * amount;\n        },\n        Out: function (amount) {\n            return --amount * amount * amount * amount * amount + 1;\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return 0.5 * amount * amount * amount * amount * amount;\n            }\n            return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2);\n        },\n    }),\n    Sinusoidal: Object.freeze({\n        In: function (amount) {\n            return 1 - Math.sin(((1.0 - amount) * Math.PI) / 2);\n        },\n        Out: function (amount) {\n            return Math.sin((amount * Math.PI) / 2);\n        },\n        InOut: function (amount) {\n            return 0.5 * (1 - Math.sin(Math.PI * (0.5 - amount)));\n        },\n    }),\n    Exponential: Object.freeze({\n        In: function (amount) {\n            return amount === 0 ? 0 : Math.pow(1024, amount - 1);\n        },\n        Out: function (amount) {\n            return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount);\n        },\n        InOut: function (amount) {\n            if (amount === 0) {\n                return 0;\n            }\n            if (amount === 1) {\n                return 1;\n            }\n            if ((amount *= 2) < 1) {\n                return 0.5 * Math.pow(1024, amount - 1);\n            }\n            return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2);\n        },\n    }),\n    Circular: Object.freeze({\n        In: function (amount) {\n            return 1 - Math.sqrt(1 - amount * amount);\n        },\n        Out: function (amount) {\n            return Math.sqrt(1 - --amount * amount);\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return -0.5 * (Math.sqrt(1 - amount * amount) - 1);\n            }\n            return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1);\n        },\n    }),\n    Elastic: Object.freeze({\n        In: function (amount) {\n            if (amount === 0) {\n                return 0;\n            }\n            if (amount === 1) {\n                return 1;\n            }\n            return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n        },\n        Out: function (amount) {\n            if (amount === 0) {\n                return 0;\n            }\n            if (amount === 1) {\n                return 1;\n            }\n            return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1;\n        },\n        InOut: function (amount) {\n            if (amount === 0) {\n                return 0;\n            }\n            if (amount === 1) {\n                return 1;\n            }\n            amount *= 2;\n            if (amount < 1) {\n                return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n            }\n            return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1;\n        },\n    }),\n    Back: Object.freeze({\n        In: function (amount) {\n            var s = 1.70158;\n            return amount === 1 ? 1 : amount * amount * ((s + 1) * amount - s);\n        },\n        Out: function (amount) {\n            var s = 1.70158;\n            return amount === 0 ? 0 : --amount * amount * ((s + 1) * amount + s) + 1;\n        },\n        InOut: function (amount) {\n            var s = 1.70158 * 1.525;\n            if ((amount *= 2) < 1) {\n                return 0.5 * (amount * amount * ((s + 1) * amount - s));\n            }\n            return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2);\n        },\n    }),\n    Bounce: Object.freeze({\n        In: function (amount) {\n            return 1 - Easing.Bounce.Out(1 - amount);\n        },\n        Out: function (amount) {\n            if (amount < 1 / 2.75) {\n                return 7.5625 * amount * amount;\n            }\n            else if (amount < 2 / 2.75) {\n                return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75;\n            }\n            else if (amount < 2.5 / 2.75) {\n                return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375;\n            }\n            else {\n                return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375;\n            }\n        },\n        InOut: function (amount) {\n            if (amount < 0.5) {\n                return Easing.Bounce.In(amount * 2) * 0.5;\n            }\n            return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5;\n        },\n    }),\n    generatePow: function (power) {\n        if (power === void 0) { power = 4; }\n        power = power < Number.EPSILON ? Number.EPSILON : power;\n        power = power > 10000 ? 10000 : power;\n        return {\n            In: function (amount) {\n                return Math.pow(amount, power);\n            },\n            Out: function (amount) {\n                return 1 - Math.pow((1 - amount), power);\n            },\n            InOut: function (amount) {\n                if (amount < 0.5) {\n                    return Math.pow((amount * 2), power) / 2;\n                }\n                return (1 - Math.pow((2 - amount * 2), power)) / 2 + 0.5;\n            },\n        };\n    },\n});\n\nvar now = function () { return performance.now(); };\n\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tween\n */\nvar Group = /** @class */ (function () {\n    function Group() {\n        var tweens = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            tweens[_i] = arguments[_i];\n        }\n        this._tweens = {};\n        this._tweensAddedDuringUpdate = {};\n        this.add.apply(this, tweens);\n    }\n    Group.prototype.getAll = function () {\n        var _this = this;\n        return Object.keys(this._tweens).map(function (tweenId) { return _this._tweens[tweenId]; });\n    };\n    Group.prototype.removeAll = function () {\n        this._tweens = {};\n    };\n    Group.prototype.add = function () {\n        var _a;\n        var tweens = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            tweens[_i] = arguments[_i];\n        }\n        for (var _b = 0, tweens_1 = tweens; _b < tweens_1.length; _b++) {\n            var tween = tweens_1[_b];\n            // Remove from any other group first, a tween can only be in one group at a time.\n            // @ts-expect-error library internal access\n            (_a = tween._group) === null || _a === void 0 ? void 0 : _a.remove(tween);\n            // @ts-expect-error library internal access\n            tween._group = this;\n            this._tweens[tween.getId()] = tween;\n            this._tweensAddedDuringUpdate[tween.getId()] = tween;\n        }\n    };\n    Group.prototype.remove = function () {\n        var tweens = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            tweens[_i] = arguments[_i];\n        }\n        for (var _a = 0, tweens_2 = tweens; _a < tweens_2.length; _a++) {\n            var tween = tweens_2[_a];\n            // @ts-expect-error library internal access\n            tween._group = undefined;\n            delete this._tweens[tween.getId()];\n            delete this._tweensAddedDuringUpdate[tween.getId()];\n        }\n    };\n    /** Return true if all tweens in the group are not paused or playing. */\n    Group.prototype.allStopped = function () {\n        return this.getAll().every(function (tween) { return !tween.isPlaying(); });\n    };\n    Group.prototype.update = function (time, preserve) {\n        if (time === void 0) { time = now(); }\n        if (preserve === void 0) { preserve = true; }\n        var tweenIds = Object.keys(this._tweens);\n        if (tweenIds.length === 0)\n            return;\n        // Tweens are updated in \"batches\". If you add a new tween during an\n        // update, then the new tween will be updated in the next batch.\n        // If you remove a tween during an update, it may or may not be updated.\n        // However, if the removed tween was added during the current batch,\n        // then it will not be updated.\n        while (tweenIds.length > 0) {\n            this._tweensAddedDuringUpdate = {};\n            for (var i = 0; i < tweenIds.length; i++) {\n                var tween = this._tweens[tweenIds[i]];\n                var autoStart = !preserve;\n                if (tween && tween.update(time, autoStart) === false && !preserve)\n                    this.remove(tween);\n            }\n            tweenIds = Object.keys(this._tweensAddedDuringUpdate);\n        }\n    };\n    return Group;\n}());\n\n/**\n *\n */\nvar Interpolation = {\n    Linear: function (v, k) {\n        var m = v.length - 1;\n        var f = m * k;\n        var i = Math.floor(f);\n        var fn = Interpolation.Utils.Linear;\n        if (k < 0) {\n            return fn(v[0], v[1], f);\n        }\n        if (k > 1) {\n            return fn(v[m], v[m - 1], m - f);\n        }\n        return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n    },\n    Bezier: function (v, k) {\n        var b = 0;\n        var n = v.length - 1;\n        var pw = Math.pow;\n        var bn = Interpolation.Utils.Bernstein;\n        for (var i = 0; i <= n; i++) {\n            b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n        }\n        return b;\n    },\n    CatmullRom: function (v, k) {\n        var m = v.length - 1;\n        var f = m * k;\n        var i = Math.floor(f);\n        var fn = Interpolation.Utils.CatmullRom;\n        if (v[0] === v[m]) {\n            if (k < 0) {\n                i = Math.floor((f = m * (1 + k)));\n            }\n            return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n        }\n        else {\n            if (k < 0) {\n                return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n            }\n            if (k > 1) {\n                return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n            }\n            return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n        }\n    },\n    Utils: {\n        Linear: function (p0, p1, t) {\n            return (p1 - p0) * t + p0;\n        },\n        Bernstein: function (n, i) {\n            var fc = Interpolation.Utils.Factorial;\n            return fc(n) / fc(i) / fc(n - i);\n        },\n        Factorial: (function () {\n            var a = [1];\n            return function (n) {\n                var s = 1;\n                if (a[n]) {\n                    return a[n];\n                }\n                for (var i = n; i > 1; i--) {\n                    s *= i;\n                }\n                a[n] = s;\n                return s;\n            };\n        })(),\n        CatmullRom: function (p0, p1, p2, p3, t) {\n            var v0 = (p2 - p0) * 0.5;\n            var v1 = (p3 - p1) * 0.5;\n            var t2 = t * t;\n            var t3 = t * t2;\n            return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n        },\n    },\n};\n\n/**\n * Utils\n */\nvar Sequence = /** @class */ (function () {\n    function Sequence() {\n    }\n    Sequence.nextId = function () {\n        return Sequence._nextId++;\n    };\n    Sequence._nextId = 0;\n    return Sequence;\n}());\n\nvar mainGroup = new Group();\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar Tween = /** @class */ (function () {\n    function Tween(object, group) {\n        this._isPaused = false;\n        this._pauseStart = 0;\n        this._valuesStart = {};\n        this._valuesEnd = {};\n        this._valuesStartRepeat = {};\n        this._duration = 1000;\n        this._isDynamic = false;\n        this._initialRepeat = 0;\n        this._repeat = 0;\n        this._yoyo = false;\n        this._isPlaying = false;\n        this._reversed = false;\n        this._delayTime = 0;\n        this._startTime = 0;\n        this._easingFunction = Easing.Linear.None;\n        this._interpolationFunction = Interpolation.Linear;\n        // eslint-disable-next-line\n        this._chainedTweens = [];\n        this._onStartCallbackFired = false;\n        this._onEveryStartCallbackFired = false;\n        this._id = Sequence.nextId();\n        this._isChainStopped = false;\n        this._propertiesAreSetUp = false;\n        this._goToEnd = false;\n        this._object = object;\n        if (typeof group === 'object') {\n            this._group = group;\n            group.add(this);\n        }\n        // Use \"true\" to restore old behavior (will be removed in future release).\n        else if (group === true) {\n            this._group = mainGroup;\n            mainGroup.add(this);\n        }\n    }\n    Tween.prototype.getId = function () {\n        return this._id;\n    };\n    Tween.prototype.isPlaying = function () {\n        return this._isPlaying;\n    };\n    Tween.prototype.isPaused = function () {\n        return this._isPaused;\n    };\n    Tween.prototype.getDuration = function () {\n        return this._duration;\n    };\n    Tween.prototype.to = function (target, duration) {\n        if (duration === void 0) { duration = 1000; }\n        if (this._isPlaying)\n            throw new Error('Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.');\n        this._valuesEnd = target;\n        this._propertiesAreSetUp = false;\n        this._duration = duration < 0 ? 0 : duration;\n        return this;\n    };\n    Tween.prototype.duration = function (duration) {\n        if (duration === void 0) { duration = 1000; }\n        this._duration = duration < 0 ? 0 : duration;\n        return this;\n    };\n    Tween.prototype.dynamic = function (dynamic) {\n        if (dynamic === void 0) { dynamic = false; }\n        this._isDynamic = dynamic;\n        return this;\n    };\n    Tween.prototype.start = function (time, overrideStartingValues) {\n        if (time === void 0) { time = now(); }\n        if (overrideStartingValues === void 0) { overrideStartingValues = false; }\n        if (this._isPlaying) {\n            return this;\n        }\n        this._repeat = this._initialRepeat;\n        if (this._reversed) {\n            // If we were reversed (f.e. using the yoyo feature) then we need to\n            // flip the tween direction back to forward.\n            this._reversed = false;\n            for (var property in this._valuesStartRepeat) {\n                this._swapEndStartRepeatValues(property);\n                this._valuesStart[property] = this._valuesStartRepeat[property];\n            }\n        }\n        this._isPlaying = true;\n        this._isPaused = false;\n        this._onStartCallbackFired = false;\n        this._onEveryStartCallbackFired = false;\n        this._isChainStopped = false;\n        this._startTime = time;\n        this._startTime += this._delayTime;\n        if (!this._propertiesAreSetUp || overrideStartingValues) {\n            this._propertiesAreSetUp = true;\n            // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n            if (!this._isDynamic) {\n                var tmp = {};\n                for (var prop in this._valuesEnd)\n                    tmp[prop] = this._valuesEnd[prop];\n                this._valuesEnd = tmp;\n            }\n            this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat, overrideStartingValues);\n        }\n        return this;\n    };\n    Tween.prototype.startFromCurrentValues = function (time) {\n        return this.start(time, true);\n    };\n    Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat, overrideStartingValues) {\n        for (var property in _valuesEnd) {\n            var startValue = _object[property];\n            var startValueIsArray = Array.isArray(startValue);\n            var propType = startValueIsArray ? 'array' : typeof startValue;\n            var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]);\n            // If `to()` specifies a property that doesn't exist in the source object,\n            // we should not set that property in the object\n            if (propType === 'undefined' || propType === 'function') {\n                continue;\n            }\n            // Check if an Array was provided as property value\n            if (isInterpolationList) {\n                var endValues = _valuesEnd[property];\n                if (endValues.length === 0) {\n                    continue;\n                }\n                // Handle an array of relative values.\n                // Creates a local copy of the Array with the start value at the front\n                var temp = [startValue];\n                for (var i = 0, l = endValues.length; i < l; i += 1) {\n                    var value = this._handleRelativeValue(startValue, endValues[i]);\n                    if (isNaN(value)) {\n                        isInterpolationList = false;\n                        console.warn('Found invalid interpolation list. Skipping.');\n                        break;\n                    }\n                    temp.push(value);\n                }\n                if (isInterpolationList) {\n                    // if (_valuesStart[property] === undefined) { // handle end values only the first time. NOT NEEDED? setupProperties is now guarded by _propertiesAreSetUp.\n                    _valuesEnd[property] = temp;\n                    // }\n                }\n            }\n            // handle the deepness of the values\n            if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) {\n                _valuesStart[property] = startValueIsArray ? [] : {};\n                var nestedObject = startValue;\n                for (var prop in nestedObject) {\n                    _valuesStart[property][prop] = nestedObject[prop];\n                }\n                // TODO? repeat nested values? And yoyo? And array values?\n                _valuesStartRepeat[property] = startValueIsArray ? [] : {};\n                var endValues = _valuesEnd[property];\n                // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n                if (!this._isDynamic) {\n                    var tmp = {};\n                    for (var prop in endValues)\n                        tmp[prop] = endValues[prop];\n                    _valuesEnd[property] = endValues = tmp;\n                }\n                this._setupProperties(nestedObject, _valuesStart[property], endValues, _valuesStartRepeat[property], overrideStartingValues);\n            }\n            else {\n                // Save the starting value, but only once unless override is requested.\n                if (typeof _valuesStart[property] === 'undefined' || overrideStartingValues) {\n                    _valuesStart[property] = startValue;\n                }\n                if (!startValueIsArray) {\n                    // eslint-disable-next-line\n                    // @ts-ignore FIXME?\n                    _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n                }\n                if (isInterpolationList) {\n                    // eslint-disable-next-line\n                    // @ts-ignore FIXME?\n                    _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();\n                }\n                else {\n                    _valuesStartRepeat[property] = _valuesStart[property] || 0;\n                }\n            }\n        }\n    };\n    Tween.prototype.stop = function () {\n        if (!this._isChainStopped) {\n            this._isChainStopped = true;\n            this.stopChainedTweens();\n        }\n        if (!this._isPlaying) {\n            return this;\n        }\n        this._isPlaying = false;\n        this._isPaused = false;\n        if (this._onStopCallback) {\n            this._onStopCallback(this._object);\n        }\n        return this;\n    };\n    Tween.prototype.end = function () {\n        this._goToEnd = true;\n        this.update(this._startTime + this._duration);\n        return this;\n    };\n    Tween.prototype.pause = function (time) {\n        if (time === void 0) { time = now(); }\n        if (this._isPaused || !this._isPlaying) {\n            return this;\n        }\n        this._isPaused = true;\n        this._pauseStart = time;\n        return this;\n    };\n    Tween.prototype.resume = function (time) {\n        if (time === void 0) { time = now(); }\n        if (!this._isPaused || !this._isPlaying) {\n            return this;\n        }\n        this._isPaused = false;\n        this._startTime += time - this._pauseStart;\n        this._pauseStart = 0;\n        return this;\n    };\n    Tween.prototype.stopChainedTweens = function () {\n        for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n            this._chainedTweens[i].stop();\n        }\n        return this;\n    };\n    Tween.prototype.group = function (group) {\n        if (!group) {\n            console.warn('tween.group() without args has been removed, use group.add(tween) instead.');\n            return this;\n        }\n        group.add(this);\n        return this;\n    };\n    /**\n     * Removes the tween from whichever group it is in.\n     */\n    Tween.prototype.remove = function () {\n        var _a;\n        (_a = this._group) === null || _a === void 0 ? void 0 : _a.remove(this);\n        return this;\n    };\n    Tween.prototype.delay = function (amount) {\n        if (amount === void 0) { amount = 0; }\n        this._delayTime = amount;\n        return this;\n    };\n    Tween.prototype.repeat = function (times) {\n        if (times === void 0) { times = 0; }\n        this._initialRepeat = times;\n        this._repeat = times;\n        return this;\n    };\n    Tween.prototype.repeatDelay = function (amount) {\n        this._repeatDelayTime = amount;\n        return this;\n    };\n    Tween.prototype.yoyo = function (yoyo) {\n        if (yoyo === void 0) { yoyo = false; }\n        this._yoyo = yoyo;\n        return this;\n    };\n    Tween.prototype.easing = function (easingFunction) {\n        if (easingFunction === void 0) { easingFunction = Easing.Linear.None; }\n        this._easingFunction = easingFunction;\n        return this;\n    };\n    Tween.prototype.interpolation = function (interpolationFunction) {\n        if (interpolationFunction === void 0) { interpolationFunction = Interpolation.Linear; }\n        this._interpolationFunction = interpolationFunction;\n        return this;\n    };\n    // eslint-disable-next-line\n    Tween.prototype.chain = function () {\n        var tweens = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            tweens[_i] = arguments[_i];\n        }\n        this._chainedTweens = tweens;\n        return this;\n    };\n    Tween.prototype.onStart = function (callback) {\n        this._onStartCallback = callback;\n        return this;\n    };\n    Tween.prototype.onEveryStart = function (callback) {\n        this._onEveryStartCallback = callback;\n        return this;\n    };\n    Tween.prototype.onUpdate = function (callback) {\n        this._onUpdateCallback = callback;\n        return this;\n    };\n    Tween.prototype.onRepeat = function (callback) {\n        this._onRepeatCallback = callback;\n        return this;\n    };\n    Tween.prototype.onComplete = function (callback) {\n        this._onCompleteCallback = callback;\n        return this;\n    };\n    Tween.prototype.onStop = function (callback) {\n        this._onStopCallback = callback;\n        return this;\n    };\n    /**\n     * @returns true if the tween is still playing after the update, false\n     * otherwise (calling update on a paused tween still returns true because\n     * it is still playing, just paused).\n     *\n     * @param autoStart - When true, calling update will implicitly call start()\n     * as well. Note, if you stop() or end() the tween, but are still calling\n     * update(), it will start again!\n     */\n    Tween.prototype.update = function (time, autoStart) {\n        var _this = this;\n        var _a;\n        if (time === void 0) { time = now(); }\n        if (autoStart === void 0) { autoStart = Tween.autoStartOnUpdate; }\n        if (this._isPaused)\n            return true;\n        var property;\n        if (!this._goToEnd && !this._isPlaying) {\n            if (autoStart)\n                this.start(time, true);\n            else\n                return false;\n        }\n        this._goToEnd = false;\n        if (time < this._startTime) {\n            return true;\n        }\n        if (this._onStartCallbackFired === false) {\n            if (this._onStartCallback) {\n                this._onStartCallback(this._object);\n            }\n            this._onStartCallbackFired = true;\n        }\n        if (this._onEveryStartCallbackFired === false) {\n            if (this._onEveryStartCallback) {\n                this._onEveryStartCallback(this._object);\n            }\n            this._onEveryStartCallbackFired = true;\n        }\n        var elapsedTime = time - this._startTime;\n        var durationAndDelay = this._duration + ((_a = this._repeatDelayTime) !== null && _a !== void 0 ? _a : this._delayTime);\n        var totalTime = this._duration + this._repeat * durationAndDelay;\n        var calculateElapsedPortion = function () {\n            if (_this._duration === 0)\n                return 1;\n            if (elapsedTime > totalTime) {\n                return 1;\n            }\n            var timesRepeated = Math.trunc(elapsedTime / durationAndDelay);\n            var timeIntoCurrentRepeat = elapsedTime - timesRepeated * durationAndDelay;\n            // TODO use %?\n            // const timeIntoCurrentRepeat = elapsedTime % durationAndDelay\n            var portion = Math.min(timeIntoCurrentRepeat / _this._duration, 1);\n            if (portion === 0 && elapsedTime === _this._duration) {\n                return 1;\n            }\n            return portion;\n        };\n        var elapsed = calculateElapsedPortion();\n        var value = this._easingFunction(elapsed);\n        // properties transformations\n        this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);\n        if (this._onUpdateCallback) {\n            this._onUpdateCallback(this._object, elapsed);\n        }\n        if (this._duration === 0 || elapsedTime >= this._duration) {\n            if (this._repeat > 0) {\n                var completeCount = Math.min(Math.trunc((elapsedTime - this._duration) / durationAndDelay) + 1, this._repeat);\n                if (isFinite(this._repeat)) {\n                    this._repeat -= completeCount;\n                }\n                // Reassign starting values, restart by making startTime = now\n                for (property in this._valuesStartRepeat) {\n                    if (!this._yoyo && typeof this._valuesEnd[property] === 'string') {\n                        this._valuesStartRepeat[property] =\n                            // eslint-disable-next-line\n                            // @ts-ignore FIXME?\n                            this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n                    }\n                    if (this._yoyo) {\n                        this._swapEndStartRepeatValues(property);\n                    }\n                    this._valuesStart[property] = this._valuesStartRepeat[property];\n                }\n                if (this._yoyo) {\n                    this._reversed = !this._reversed;\n                }\n                this._startTime += durationAndDelay * completeCount;\n                if (this._onRepeatCallback) {\n                    this._onRepeatCallback(this._object);\n                }\n                this._onEveryStartCallbackFired = false;\n                return true;\n            }\n            else {\n                if (this._onCompleteCallback) {\n                    this._onCompleteCallback(this._object);\n                }\n                for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n                    // Make the chained tweens start exactly at the time they should,\n                    // even if the `update()` method was called way past the duration of the tween\n                    this._chainedTweens[i].start(this._startTime + this._duration, false);\n                }\n                this._isPlaying = false;\n                return false;\n            }\n        }\n        return true;\n    };\n    Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) {\n        for (var property in _valuesEnd) {\n            // Don't update properties that do not exist in the source object\n            if (_valuesStart[property] === undefined) {\n                continue;\n            }\n            var start = _valuesStart[property] || 0;\n            var end = _valuesEnd[property];\n            var startIsArray = Array.isArray(_object[property]);\n            var endIsArray = Array.isArray(end);\n            var isInterpolationList = !startIsArray && endIsArray;\n            if (isInterpolationList) {\n                _object[property] = this._interpolationFunction(end, value);\n            }\n            else if (typeof end === 'object' && end) {\n                // eslint-disable-next-line\n                // @ts-ignore FIXME?\n                this._updateProperties(_object[property], start, end, value);\n            }\n            else {\n                // Parses relative end values with start as base (e.g.: +10, -3)\n                end = this._handleRelativeValue(start, end);\n                // Protect against non numeric properties.\n                if (typeof end === 'number') {\n                    // eslint-disable-next-line\n                    // @ts-ignore FIXME?\n                    _object[property] = start + (end - start) * value;\n                }\n            }\n        }\n    };\n    Tween.prototype._handleRelativeValue = function (start, end) {\n        if (typeof end !== 'string') {\n            return end;\n        }\n        if (end.charAt(0) === '+' || end.charAt(0) === '-') {\n            return start + parseFloat(end);\n        }\n        return parseFloat(end);\n    };\n    Tween.prototype._swapEndStartRepeatValues = function (property) {\n        var tmp = this._valuesStartRepeat[property];\n        var endValue = this._valuesEnd[property];\n        if (typeof endValue === 'string') {\n            this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue);\n        }\n        else {\n            this._valuesStartRepeat[property] = this._valuesEnd[property];\n        }\n        this._valuesEnd[property] = tmp;\n    };\n    Tween.autoStartOnUpdate = false;\n    return Tween;\n}());\n\nvar VERSION = '25.0.0';\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar nextId = Sequence.nextId;\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tweens.\n */\nvar TWEEN = mainGroup;\n// This is the best way to export things in a way that's compatible with both ES\n// Modules and CommonJS, without build hacks, and so as not to break the\n// existing API.\n// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar getAll = TWEEN.getAll.bind(TWEEN);\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar removeAll = TWEEN.removeAll.bind(TWEEN);\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar add = TWEEN.add.bind(TWEEN);\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar remove = TWEEN.remove.bind(TWEEN);\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar update = TWEEN.update.bind(TWEEN);\nvar exports = {\n    Easing: Easing,\n    Group: Group,\n    Interpolation: Interpolation,\n    now: now,\n    Sequence: Sequence,\n    nextId: nextId,\n    Tween: Tween,\n    VERSION: VERSION,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    getAll: getAll,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    removeAll: removeAll,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    add: add,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    remove: remove,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    update: update,\n};\n\nexport { Easing, Group, Interpolation, Sequence, Tween, VERSION, add, exports as default, getAll, nextId, now, remove, removeAll, update };\n","export default function(d) {\n  const x = +this._x.call(null, d),\n      y = +this._y.call(null, d),\n      z = +this._z.call(null, d);\n  return add(this.cover(x, y, z), x, y, z, d);\n}\n\nfunction add(tree, x, y, z, d) {\n  if (isNaN(x) || isNaN(y) || isNaN(z)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      z0 = tree._z0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      z1 = tree._z1,\n      xm,\n      ym,\n      zm,\n      xp,\n      yp,\n      zp,\n      right,\n      bottom,\n      deep,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n    if (parent = node, !(node = node[i = deep << 2 | bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  zp = +tree._z.call(null, node.data);\n  if (x === xp && y === yp && z === zp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(8) : tree._root = new Array(8);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n  } while ((i = deep << 2 | bottom << 1 | right) === (j = (zp >= zm) << 2 | (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  if (!Array.isArray(data)) data = Array.from(data);\n  const n = data.length;\n  const xz = new Float64Array(n);\n  const yz = new Float64Array(n);\n  const zz = new Float64Array(n);\n  let x0 = Infinity,\n      y0 = Infinity,\n      z0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity,\n      z1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (let i = 0, d, x, y, z; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    zz[i] = z;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n    if (z < z0) z0 = z;\n    if (z > z1) z1 = z;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1 || z0 > z1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0, z0).cover(x1, y1, z1);\n\n  // Add the new points.\n  for (let i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], zz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(x, y, z) {\n  if (isNaN(x = +x) || isNaN(y = +y) || isNaN(z = +z)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      z0 = this._z0,\n      x1 = this._x1,\n      y1 = this._y1,\n      z1 = this._z1;\n\n  // If the octree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing octant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n    z1 = (z0 = Math.floor(z)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var t = x1 - x0 || 1,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1 || z0 > z || z >= z1) {\n      i = (z < z0) << 2 | (y < y0) << 1 | (x < x0);\n      parent = new Array(8), parent[i] = node, node = parent, t *= 2;\n      switch (i) {\n        case 0: x1 = x0 + t, y1 = y0 + t, z1 = z0 + t; break;\n        case 1: x0 = x1 - t, y1 = y0 + t, z1 = z0 + t; break;\n        case 2: x1 = x0 + t, y0 = y1 - t, z1 = z0 + t; break;\n        case 3: x0 = x1 - t, y0 = y1 - t, z1 = z0 + t; break;\n        case 4: x1 = x0 + t, y1 = y0 + t, z0 = z1 - t; break;\n        case 5: x0 = x1 - t, y1 = y0 + t, z0 = z1 - t; break;\n        case 6: x1 = x0 + t, y0 = y1 - t, z0 = z1 - t; break;\n        case 7: x0 = x1 - t, y0 = y1 - t, z0 = z1 - t; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._z0 = z0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._z1 = z1;\n  return this;\n}\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1], +_[0][2]).cover(+_[1][0], +_[1][1], +_[1][2])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0, this._z0], [this._x1, this._y1, this._z1]];\n}\n","export default function(node, x0, y0, z0, x1, y1, z1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.z0 = z0;\n  this.x1 = x1;\n  this.y1 = y1;\n  this.z1 = z1;\n}\n","import Octant from \"./octant.js\";\n\nexport default function(x, y, z, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      z0 = this._z0,\n      x1,\n      y1,\n      z1,\n      x2,\n      y2,\n      z2,\n      x3 = this._x1,\n      y3 = this._y1,\n      z3 = this._z1,\n      octs = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) octs.push(new Octant(node, x0, y0, z0, x3, y3, z3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius, z0 = z - radius;\n    x3 = x + radius, y3 = y + radius, z3 = z + radius;\n    radius *= radius;\n  }\n\n  while (q = octs.pop()) {\n\n    // Stop searching if this octant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (z1 = q.z0) > z3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0\n        || (z2 = q.z1) < z0) continue;\n\n    // Bisect the current octant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2,\n          zm = (z1 + z2) / 2;\n\n      octs.push(\n        new Octant(node[7], xm, ym, zm, x2, y2, z2),\n        new Octant(node[6], x1, ym, zm, xm, y2, z2),\n        new Octant(node[5], xm, y1, zm, x2, ym, z2),\n        new Octant(node[4], x1, y1, zm, xm, ym, z2),\n        new Octant(node[3], xm, ym, z1, x2, y2, zm),\n        new Octant(node[2], x1, ym, z1, xm, y2, zm),\n        new Octant(node[1], xm, y1, z1, x2, ym, zm),\n        new Octant(node[0], x1, y1, z1, xm, ym, zm)\n      );\n\n      // Visit the closest octant first.\n      if (i = (z >= zm) << 2 | (y >= ym) << 1 | (x >= xm)) {\n        q = octs[octs.length - 1];\n        octs[octs.length - 1] = octs[octs.length - 1 - i];\n        octs[octs.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          dz = z - +this._z.call(null, node.data),\n          d2 = dx * dx + dy * dy + dz * dz;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d, z0 = z - d;\n        x3 = x + d, y3 = y + d, z3 = z + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","const distance = (x1, y1, z1, x2, y2, z2) => Math.sqrt((x1-x2)**2 + (y1-y2)**2 + (z1-z2)**2);\n\nexport function findAllWithinRadius(x, y, z, radius) {\n  const result = [];\n\n  const xMin = x - radius;\n  const yMin = y - radius;\n  const zMin = z - radius;\n  const xMax = x + radius;\n  const yMax = y + radius;\n  const zMax = z + radius;\n\n  this.visit((node, x1, y1, z1, x2, y2, z2) => {\n    if (!node.length) {\n      do {\n        const d = node.data;\n        if (distance(x, y, z, this._x(d), this._y(d), this._z(d)) <= radius) {\n          result.push(d);\n        }\n      } while (node = node.next);\n    }\n    return x1 > xMax || y1 > yMax || z1 > zMax || x2 < xMin || y2 < yMin || z2 < zMin;\n  });\n\n  return result;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      z0 = this._z0,\n      x1 = this._x1,\n      y1 = this._y1,\n      z1 = this._z1,\n      x,\n      y,\n      z,\n      xm,\n      ym,\n      zm,\n      right,\n      bottom,\n      deep,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n    if (!(parent = node, node = node[i = deep << 2 | bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 7] || parent[(i + 2) & 7] || parent[(i + 3) & 7] || parent[(i + 4) & 7] || parent[(i + 5) & 7] || parent[(i + 6) & 7] || parent[(i + 7) & 7]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3] || parent[4] || parent[5] || parent[6] || parent[7])\n      && node === (parent[7] || parent[6] || parent[5] || parent[4] || parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Octant from \"./octant.js\";\n\nexport default function(callback) {\n  var octs = [], q, node = this._root, child, x0, y0, z0, x1, y1, z1;\n  if (node) octs.push(new Octant(node, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));\n  while (q = octs.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2;\n      if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));\n      if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));\n      if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));\n      if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));\n      if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));\n      if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));\n      if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));\n      if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));\n    }\n  }\n  return this;\n}\n","import Octant from \"./octant.js\";\n\nexport default function(callback) {\n  var octs = [], next = [], q;\n  if (this._root) octs.push(new Octant(this._root, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));\n  while (q = octs.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2;\n      if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));\n      if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));\n      if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));\n      if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));\n      if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));\n      if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));\n      if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));\n      if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.z0, q.x1, q.y1, q.z1);\n  }\n  return this;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","export function defaultZ(d) {\n  return d[2];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._z = _, this) : this._z;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport { findAllWithinRadius as tree_findAllWithinRadius } from \"./findAll.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\nimport tree_z, {defaultZ} from \"./z.js\";\n\nexport default function octree(nodes, x, y, z) {\n  var tree = new Octree(x == null ? defaultX : x, y == null ? defaultY : y, z == null ? defaultZ : z, NaN, NaN, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Octree(x, y, z, x0, y0, z0, x1, y1, z1) {\n  this._x = x;\n  this._y = y;\n  this._z = z;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._z0 = z0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._z1 = z1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = octree.prototype = Octree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Octree(this._x, this._y, this._z, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(8)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 8; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(8)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.findAllWithinRadius = tree_findAllWithinRadius;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\ntreeProto.z = tree_z;\n","export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n","const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","export default function mean(values, valueof) {\n  let count = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  }\n  if (count) return sum / count;\n}\n","function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n","export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if (!isFinite(x) || x === 0) return null; // NaN, ±Infinity, ±0\n  var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\"), coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return prefixExponent = undefined, x.toPrecision(p);\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier, options) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = (options && options.prefix !== undefined ? options.prefix : \"\") + (symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\"),\n        suffix = (symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\") + (options && options.suffix !== undefined ? options.suffix : \"\");\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" && !isNaN(value) && prefixExponent !== undefined ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier), {suffix: prefixes[8 + e / 3]});\n    return function(value) {\n      return f(k * value);\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(linearish(scale), arguments);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nexport var areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum = new Adder();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n  areaSum = new Adder();\n  stream(object, areaStream);\n  return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00, phi00, // first point\n    p0, // previous 3D point\n    deltaSum,\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum = new Adder();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0) {\n        if (lambda < lambda0) lambda0 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00 = lambda, phi00 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00, phi00);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n  range[0] = lambda0, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n  ranges = [];\n  stream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00, phi00, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00, phi00);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = hypot(cx, cy, cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2.add(v * cx);\n  Y2.add(v * cy);\n  Z2.add(v * cz);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 = 0;\n  X2 = new Adder();\n  Y2 = new Adder();\n  Z2 = new Adder();\n  stream(object, centroidStream);\n\n  var x = +X2,\n      y = +Y2,\n      z = +Z2,\n      m = hypot(x, y, z);\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n    m = hypot(x, y, z);\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n  return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    lambda += deltaLambda;\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n    return [lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(2),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 2 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","import {Adder} from \"d3-array\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar lengthSum,\n    lambda0,\n    sinPhi0,\n    cosPhi0;\n\nvar lengthStream = {\n  sphere: noop,\n  point: noop,\n  lineStart: lengthLineStart,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin(phi),\n      cosPhi = cos(phi),\n      delta = abs(lambda - lambda0),\n      cosDelta = cos(delta),\n      sinDelta = sin(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n      z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n  lengthSum = new Adder();\n  stream(object, lengthStream);\n  return +lengthSum;\n}\n","import length from \"./length.js\";\n\nvar coordinates = [null, null],\n    object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length(object);\n}\n","import {default as polygonContains} from \"./polygonContains.js\";\nimport {default as distance} from \"./distance.js\";\nimport {epsilon2, radians} from \"./math.js\";\n\nvar containsObjectType = {\n  Feature: function(object, point) {\n    return containsGeometry(object.geometry, point);\n  },\n  FeatureCollection: function(object, point) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n    return false;\n  }\n};\n\nvar containsGeometryType = {\n  Sphere: function() {\n    return true;\n  },\n  Point: function(object, point) {\n    return containsPoint(object.coordinates, point);\n  },\n  MultiPoint: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n    return false;\n  },\n  LineString: function(object, point) {\n    return containsLine(object.coordinates, point);\n  },\n  MultiLineString: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsLine(coordinates[i], point)) return true;\n    return false;\n  },\n  Polygon: function(object, point) {\n    return containsPolygon(object.coordinates, point);\n  },\n  MultiPolygon: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n    return false;\n  },\n  GeometryCollection: function(object, point) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n    return false;\n  }\n};\n\nfunction containsGeometry(geometry, point) {\n  return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n      ? containsGeometryType[geometry.type](geometry, point)\n      : false;\n}\n\nfunction containsPoint(coordinates, point) {\n  return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n  var ao, bo, ab;\n  for (var i = 0, n = coordinates.length; i < n; i++) {\n    bo = distance(coordinates[i], point);\n    if (bo === 0) return true;\n    if (i > 0) {\n      ab = distance(coordinates[i], coordinates[i - 1]);\n      if (\n        ab > 0 &&\n        ao <= ab &&\n        bo <= ab &&\n        (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\n      )\n        return true;\n    }\n    ao = bo;\n  }\n  return false;\n}\n\nfunction containsPolygon(coordinates, point) {\n  return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n  return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n  return [point[0] * radians, point[1] * radians];\n}\n\nexport default function(object, point) {\n  return (object && containsObjectType.hasOwnProperty(object.type)\n      ? containsObjectType[object.type]\n      : containsGeometry)(object, point);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n  var y = range(y0, y1 - epsilon, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = range(x0, x1 - epsilon, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n  return graticule()();\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math.js\";\n\nexport default function(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos(y0),\n      sy0 = sin(y0),\n      cy1 = cos(y1),\n      sy1 = sin(y1),\n      kx0 = cy0 * cos(x0),\n      ky0 = cy0 * sin(x0),\n      kx1 = cy1 * cos(x1),\n      ky1 = cy1 * sin(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin(t *= d) / k,\n        A = sin(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees,\n      atan2(z, sqrt(x * x + y * y)) * degrees\n    ];\n  } : function() {\n    return [x0 * degrees, y0 * degrees];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n","export default x => x;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n        if (k === Infinity) return [2, 0];\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n  var cy = cos(y), k = 1 + cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nexport default function() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n","import { Camera, Vector3, Group, Mesh, SphereGeometry, MeshBasicMaterial, Frustum, Matrix4, MeshLambertMaterial, TextureLoader, SRGBColorSpace } from 'three';\nimport { octree } from 'd3-octree';\nimport { scaleLinear } from 'd3-scale';\nimport { geoMercatorRaw } from 'd3-geo';\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _assertClassBrand(e, t, n) {\n  if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n  throw new TypeError(\"Private element is not present on this object\");\n}\nfunction _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nfunction _callSuper(t, o, e) {\n  return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, [], _getPrototypeOf(t).constructor) : o.apply(t, e));\n}\nfunction _checkPrivateRedeclaration(e, t) {\n  if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n}\nfunction _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _classPrivateFieldGet2(s, a) {\n  return s.get(_assertClassBrand(s, a));\n}\nfunction _classPrivateFieldInitSpec(e, t, a) {\n  _checkPrivateRedeclaration(e, t), t.set(e, a);\n}\nfunction _classPrivateFieldSet2(s, a, r) {\n  return s.set(_assertClassBrand(s, a), r), r;\n}\nfunction _classPrivateMethodInitSpec(e, a) {\n  _checkPrivateRedeclaration(e, a), a.add(e);\n}\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || false, o.configurable = true, \"value\" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), Object.defineProperty(e, \"prototype\", {\n    writable: false\n  }), e;\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\nfunction _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: true,\n      configurable: true\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: false\n  }), e && _setPrototypeOf(t, e);\n}\nfunction _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function () {\n    return !!t;\n  })();\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == typeof e || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return _assertThisInitialized(t);\n}\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (String )(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar _materialDispose = function materialDispose(material) {\n  if (material instanceof Array) {\n    material.forEach(_materialDispose);\n  } else {\n    if (material.map) {\n      material.map.dispose();\n    }\n    material.dispose();\n  }\n};\nvar _deallocate = function deallocate(obj) {\n  if (obj.geometry) {\n    obj.geometry.dispose();\n  }\n  if (obj.material) {\n    _materialDispose(obj.material);\n  }\n  if (obj.texture) {\n    obj.texture.dispose();\n  }\n  if (obj.children) {\n    obj.children.forEach(_deallocate);\n  }\n};\n\nfunction polar2Cartesian(lat, lng, r) {\n  var phi = (90 - lat) * Math.PI / 180;\n  var theta = (90 - lng) * Math.PI / 180;\n  return {\n    x: r * Math.sin(phi) * Math.cos(theta),\n    y: r * Math.cos(phi),\n    z: r * Math.sin(phi) * Math.sin(theta)\n  };\n}\nfunction cartesian2Polar(_ref) {\n  var x = _ref.x,\n    y = _ref.y,\n    z = _ref.z;\n  var r = Math.sqrt(x * x + y * y + z * z);\n  var phi = Math.acos(y / r);\n  var theta = Math.atan2(z, x);\n  return {\n    lat: 90 - phi * 180 / Math.PI,\n    lng: 90 - theta * 180 / Math.PI - (theta < -Math.PI / 2 ? 360 : 0),\n    // keep within [-180, 180] boundaries\n    r: r\n  };\n}\nfunction deg2Rad(deg) {\n  return deg * Math.PI / 180;\n}\n\nvar yMercatorScale = function yMercatorScale(y) {\n  return 1 - (geoMercatorRaw(0, (0.5 - y) * Math.PI)[1] / Math.PI + 1) / 2;\n};\nvar yMercatorScaleClamped = function yMercatorScaleClamped(y) {\n  return Math.max(0, Math.min(1, yMercatorScale(y)));\n};\nvar yMercatorScaleInvert = function yMercatorScaleInvert(y) {\n  return 0.5 - geoMercatorRaw.invert(0, (2 * (1 - y) - 1) * Math.PI)[1] / Math.PI;\n};\nvar convertMercatorUV = function convertMercatorUV(uvs) {\n  var y0 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var y1 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n  var offsetScale = scaleLinear().domain([1, 0]).range([y0, y1]).clamp(true);\n  var revOffsetScale = scaleLinear().domain([yMercatorScaleClamped(y0), yMercatorScaleClamped(y1)]).range([1, 0]).clamp(true);\n  var scale = function scale(v) {\n    return revOffsetScale(yMercatorScaleClamped(offsetScale(v)));\n  };\n  var arr = uvs.array;\n  for (var i = 0, len = arr.length; i < len; i += 2) {\n    arr[i + 1] = scale(arr[i + 1]);\n  }\n  uvs.needsUpdate = true;\n};\n\nvar findTileXY = function findTileXY(level, isMercator, lng, lat) {\n  var gridSize = Math.pow(2, level);\n  var x = Math.max(0, Math.min(gridSize - 1, Math.floor((lng + 180) * gridSize / 360)));\n  var relY = (90 - lat) / 180;\n  isMercator && (relY = Math.max(0, Math.min(1, yMercatorScale(relY))));\n  var y = Math.floor(relY * gridSize);\n  return [x, y];\n};\nvar genTilesCoords = function genTilesCoords(level, isMercator) {\n  var x0 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  var y0 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n  var _x1 = arguments.length > 4 ? arguments[4] : undefined;\n  var _y1 = arguments.length > 5 ? arguments[5] : undefined;\n  var tiles = [];\n  var gridSize = Math.pow(2, level);\n  var tileLngLen = 360 / gridSize;\n  var regTileLatLen = 180 / gridSize;\n  var x1 = _x1 === undefined ? gridSize - 1 : _x1;\n  var y1 = _y1 === undefined ? gridSize - 1 : _y1;\n  for (var x = x0, maxX = Math.min(gridSize - 1, x1); x <= maxX; x++) {\n    for (var y = y0, maxY = Math.min(gridSize - 1, y1); y <= maxY; y++) {\n      var reproY = y,\n        tileLatLen = regTileLatLen;\n      if (isMercator) {\n        // lat needs reprojection, but stretch to cover poles\n        reproY = y === 0 ? y : yMercatorScaleInvert(y / gridSize) * gridSize;\n        var reproYEnd = y + 1 === gridSize ? y + 1 : yMercatorScaleInvert((y + 1) / gridSize) * gridSize;\n        tileLatLen = (reproYEnd - reproY) * 180 / gridSize;\n      }\n\n      // tile centroid coordinates\n      var lng = -180 + (x + 0.5) * tileLngLen;\n      var lat = 90 - (reproY * 180 / gridSize + tileLatLen / 2);\n      var latLen = tileLatLen; // lng is always constant among all tiles\n\n      tiles.push({\n        x: x,\n        y: y,\n        lng: lng,\n        lat: lat,\n        latLen: latLen\n      });\n    }\n  }\n  return tiles;\n};\n\nvar MAX_LEVEL_TO_RENDER_ALL_TILES = 6; // level 6 = 4096 tiles\nvar MAX_LEVEL_TO_BUILD_LOOKUP_OCTREE = 7; // octrees consume too much memory on higher levels, generate tiles on demand for those (based on globe surface distance) as the distortion is negligible\nvar TILE_SEARCH_RADIUS_CAMERA_DISTANCE = 3; // Euclidean distance factor, in units of camera distance to surface\nvar TILE_SEARCH_RADIUS_SURFACE_DISTANCE = 90; // in degrees on the globe surface, relative to camera altitude in globe radius units\nvar _radius = /*#__PURE__*/new WeakMap();\nvar _isMercator = /*#__PURE__*/new WeakMap();\nvar _tileUrl = /*#__PURE__*/new WeakMap();\nvar _level = /*#__PURE__*/new WeakMap();\nvar _tilesMeta = /*#__PURE__*/new WeakMap();\nvar _isInView = /*#__PURE__*/new WeakMap();\nvar _camera = /*#__PURE__*/new WeakMap();\nvar _innerBackLayer = /*#__PURE__*/new WeakMap();\nvar _ThreeSlippyMapGlobe_brand = /*#__PURE__*/new WeakSet();\nvar ThreeSlippyMapGlobe = /*#__PURE__*/function (_Group) {\n  function ThreeSlippyMapGlobe(radius) {\n    var _this;\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      tileUrl = _ref.tileUrl,\n      _ref$minLevel = _ref.minLevel,\n      minLevel = _ref$minLevel === void 0 ? 0 : _ref$minLevel,\n      _ref$maxLevel = _ref.maxLevel,\n      maxLevel = _ref$maxLevel === void 0 ? 17 : _ref$maxLevel,\n      _ref$mercatorProjecti = _ref.mercatorProjection,\n      mercatorProjection = _ref$mercatorProjecti === void 0 ? true : _ref$mercatorProjecti;\n    _classCallCheck(this, ThreeSlippyMapGlobe);\n    _this = _callSuper(this, ThreeSlippyMapGlobe);\n    // Private methods\n    _classPrivateMethodInitSpec(_this, _ThreeSlippyMapGlobe_brand);\n    // Private attributes\n    _classPrivateFieldInitSpec(_this, _radius, void 0);\n    _classPrivateFieldInitSpec(_this, _isMercator, void 0);\n    _classPrivateFieldInitSpec(_this, _tileUrl, void 0);\n    _classPrivateFieldInitSpec(_this, _level, void 0);\n    _classPrivateFieldInitSpec(_this, _tilesMeta, {});\n    _classPrivateFieldInitSpec(_this, _isInView, void 0);\n    _classPrivateFieldInitSpec(_this, _camera, void 0);\n    _classPrivateFieldInitSpec(_this, _innerBackLayer, void 0);\n    _defineProperty(_this, \"minLevel\", void 0);\n    _defineProperty(_this, \"maxLevel\", void 0);\n    _defineProperty(_this, \"thresholds\", _toConsumableArray(new Array(30)).map(function (_, idx) {\n      return 8 / Math.pow(2, idx);\n    }));\n    // in terms of radius units\n    _defineProperty(_this, \"curvatureResolution\", 5);\n    // in degrees, affects number of vertices in tiles\n    _defineProperty(_this, \"tileMargin\", 0);\n    _defineProperty(_this, \"clearTiles\", function () {\n      Object.values(_classPrivateFieldGet2(_tilesMeta, _this)).forEach(function (l) {\n        l.forEach(function (d) {\n          if (d.obj) {\n            _this.remove(d.obj);\n            _deallocate(d.obj);\n            delete d.obj;\n          }\n        });\n      });\n      _classPrivateFieldSet2(_tilesMeta, _this, {});\n    });\n    _classPrivateFieldSet2(_radius, _this, radius);\n    _this.tileUrl = tileUrl;\n    _classPrivateFieldSet2(_isMercator, _this, mercatorProjection);\n    _this.minLevel = minLevel;\n    _this.maxLevel = maxLevel;\n    _this.level = 0;\n\n    // Add protective black sphere just below surface to prevent any depth buffer anomalies\n    _this.add(_classPrivateFieldSet2(_innerBackLayer, _this, new Mesh(new SphereGeometry(_classPrivateFieldGet2(_radius, _this) * 0.99, 180, 90), new MeshBasicMaterial({\n      color: 0x0\n    }))));\n    _classPrivateFieldGet2(_innerBackLayer, _this).visible = false;\n    _classPrivateFieldGet2(_innerBackLayer, _this).material.polygonOffset = true;\n    _classPrivateFieldGet2(_innerBackLayer, _this).material.polygonOffsetUnits = 3;\n    _classPrivateFieldGet2(_innerBackLayer, _this).material.polygonOffsetFactor = 1;\n    return _this;\n  }\n  _inherits(ThreeSlippyMapGlobe, _Group);\n  return _createClass(ThreeSlippyMapGlobe, [{\n    key: \"tileUrl\",\n    get:\n    // Public attributes\n    function get() {\n      return _classPrivateFieldGet2(_tileUrl, this);\n    },\n    set: function set(tileUrl) {\n      _classPrivateFieldSet2(_tileUrl, this, tileUrl);\n      this.updatePov(_classPrivateFieldGet2(_camera, this)); // update current view\n    }\n  }, {\n    key: \"level\",\n    get: function get() {\n      return _classPrivateFieldGet2(_level, this);\n    },\n    set: function set(level) {\n      var _classPrivateFieldGet2$1,\n        _this2 = this;\n      if (!_classPrivateFieldGet2(_tilesMeta, this)[level]) _assertClassBrand(_ThreeSlippyMapGlobe_brand, this, _buildMetaLevel).call(this, level);\n      var prevLevel = _classPrivateFieldGet2(_level, this);\n      _classPrivateFieldSet2(_level, this, level);\n      if (level === prevLevel || prevLevel === undefined) return; // nothing else to do\n\n      // Activate back layer for levels > 0, when there's !depthWrite tiles\n      _classPrivateFieldGet2(_innerBackLayer, this).visible = level > 0;\n\n      // Bring layer to front\n      _classPrivateFieldGet2(_tilesMeta, this)[level].forEach(function (d) {\n        return d.obj && (d.obj.material.depthWrite = true);\n      });\n\n      // push lower layers to background\n      prevLevel < level && ((_classPrivateFieldGet2$1 = _classPrivateFieldGet2(_tilesMeta, this)[prevLevel]) === null || _classPrivateFieldGet2$1 === void 0 ? void 0 : _classPrivateFieldGet2$1.forEach(function (d) {\n        return d.obj && (d.obj.material.depthWrite = false);\n      }));\n\n      // Remove upper layers\n      if (prevLevel > level) {\n        for (var l = level + 1; l <= prevLevel; l++) {\n          _classPrivateFieldGet2(_tilesMeta, this)[l] && _classPrivateFieldGet2(_tilesMeta, this)[l].forEach(function (d) {\n            if (d.obj) {\n              _this2.remove(d.obj);\n              _deallocate(d.obj);\n              delete d.obj;\n            }\n          });\n        }\n      }\n      _assertClassBrand(_ThreeSlippyMapGlobe_brand, this, _fetchNeededTiles).call(this);\n    }\n\n    // Public methods\n  }, {\n    key: \"updatePov\",\n    value: function updatePov(camera) {\n      var _this3 = this;\n      if (!camera || !(camera instanceof Camera)) return;\n      _classPrivateFieldSet2(_camera, this, camera);\n      var frustum;\n      _classPrivateFieldSet2(_isInView, this, function (d) {\n        if (!d.hullPnts) {\n          // cached for next time to improve performance\n          var lngLen = 360 / Math.pow(2, _this3.level);\n          var lng = d.lng,\n            lat = d.lat,\n            latLen = d.latLen;\n          var lng0 = lng - lngLen / 2;\n          var lng1 = lng + lngLen / 2;\n          var lat0 = lat - latLen / 2;\n          var lat1 = lat + latLen / 2;\n          d.hullPnts = [[lat, lng], [lat0, lng0], [lat1, lng0], [lat0, lng1], [lat1, lng1]].map(function (_ref2) {\n            var _ref3 = _slicedToArray(_ref2, 2),\n              lat = _ref3[0],\n              lng = _ref3[1];\n            return polar2Cartesian(lat, lng, _classPrivateFieldGet2(_radius, _this3));\n          }).map(function (_ref4) {\n            var x = _ref4.x,\n              y = _ref4.y,\n              z = _ref4.z;\n            return new Vector3(x, y, z);\n          });\n        }\n        if (!frustum) {\n          frustum = new Frustum();\n          camera.updateMatrix();\n          camera.updateMatrixWorld();\n          frustum.setFromProjectionMatrix(new Matrix4().multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse));\n        }\n        return d.hullPnts.some(function (pos) {\n          return frustum.containsPoint(pos.clone().applyMatrix4(_this3.matrixWorld));\n        });\n      });\n      if (this.tileUrl) {\n        var pov = camera.position.clone();\n        var distToGlobeCenter = pov.distanceTo(this.getWorldPosition(new Vector3()));\n        var cameraDistance = (distToGlobeCenter - _classPrivateFieldGet2(_radius, this)) / _classPrivateFieldGet2(_radius, this); // in units of globe radius\n\n        var idx = this.thresholds.findIndex(function (t) {\n          return t && t <= cameraDistance;\n        });\n        this.level = Math.min(this.maxLevel, Math.max(this.minLevel, idx < 0 ? this.thresholds.length : idx));\n        _assertClassBrand(_ThreeSlippyMapGlobe_brand, this, _fetchNeededTiles).call(this);\n      }\n    }\n  }]);\n}(Group);\nfunction _buildMetaLevel(level) {\n  var _this4 = this;\n  if (level > MAX_LEVEL_TO_BUILD_LOOKUP_OCTREE) {\n    // Generate meta dynamically\n    _classPrivateFieldGet2(_tilesMeta, this)[level] = [];\n    return;\n  }\n\n  // Generate distance lookup octree\n  var levelMeta = _classPrivateFieldGet2(_tilesMeta, this)[level] = genTilesCoords(level, _classPrivateFieldGet2(_isMercator, this));\n  levelMeta.forEach(function (d) {\n    return d.centroid = polar2Cartesian(d.lat, d.lng, _classPrivateFieldGet2(_radius, _this4));\n  });\n  levelMeta.octree = octree().x(function (d) {\n    return d.centroid.x;\n  }).y(function (d) {\n    return d.centroid.y;\n  }).z(function (d) {\n    return d.centroid.z;\n  }).addAll(levelMeta);\n}\nfunction _fetchNeededTiles() {\n  var _this5 = this;\n  if (!this.tileUrl || this.level === undefined || !_classPrivateFieldGet2(_tilesMeta, this).hasOwnProperty(this.level)) return;\n\n  // Safety if can't check in view tiles for higher levels\n  if (!_classPrivateFieldGet2(_isInView, this) && this.level > MAX_LEVEL_TO_RENDER_ALL_TILES) return;\n  var tiles = _classPrivateFieldGet2(_tilesMeta, this)[this.level];\n  if (_classPrivateFieldGet2(_camera, this)) {\n    // Pre-select tiles close to the camera\n    var povPos = this.worldToLocal(_classPrivateFieldGet2(_camera, this).position.clone());\n    if (tiles.octree) {\n      var _tiles$octree;\n      // Octree based on 3d positions is more accurate\n      var _povPos = this.worldToLocal(_classPrivateFieldGet2(_camera, this).position.clone());\n      var searchRadius = (_povPos.length() - _classPrivateFieldGet2(_radius, this)) * TILE_SEARCH_RADIUS_CAMERA_DISTANCE;\n      tiles = (_tiles$octree = tiles.octree).findAllWithinRadius.apply(_tiles$octree, _toConsumableArray(_povPos).concat([searchRadius]));\n    } else {\n      // tiles populated dynamically\n      var povCoords = cartesian2Polar(povPos);\n      var searchRadiusLat = (povCoords.r / _classPrivateFieldGet2(_radius, this) - 1) * TILE_SEARCH_RADIUS_SURFACE_DISTANCE;\n      var searchRadiusLng = searchRadiusLat / Math.cos(deg2Rad(povCoords.lat)); // Distances in longitude degrees shrink towards the poles\n      var lngRange = [povCoords.lng - searchRadiusLng, povCoords.lng + searchRadiusLng];\n      var latRange = [povCoords.lat + searchRadiusLat, povCoords.lat - searchRadiusLat];\n      var _findTileXY = findTileXY(this.level, _classPrivateFieldGet2(_isMercator, this), lngRange[0], latRange[0]),\n        _findTileXY2 = _slicedToArray(_findTileXY, 2),\n        x0 = _findTileXY2[0],\n        y0 = _findTileXY2[1];\n      var _findTileXY3 = findTileXY(this.level, _classPrivateFieldGet2(_isMercator, this), lngRange[1], latRange[1]),\n        _findTileXY4 = _slicedToArray(_findTileXY3, 2),\n        x1 = _findTileXY4[0],\n        y1 = _findTileXY4[1];\n      !tiles.record && (tiles.record = {}); // Index gen tiles by XY\n      var r = tiles.record;\n      if (!r.hasOwnProperty(\"\".concat(Math.round((x0 + x1) / 2), \"_\").concat(Math.round((y0 + y1) / 2)))) {\n        // gen all found tiles if middle one is not in record\n        tiles = genTilesCoords(this.level, _classPrivateFieldGet2(_isMercator, this), x0, y0, x1, y1).map(function (d) {\n          var k = \"\".concat(d.x, \"_\").concat(d.y);\n          if (r.hasOwnProperty(k)) return r[k];\n          r[k] = d;\n          tiles.push(d);\n          return d;\n        });\n      } else {\n        // gen only those missing, one by one\n        var selTiles = [];\n        for (var x = x0; x <= x1; x++) {\n          for (var y = y0; y <= y1; y++) {\n            var k = \"\".concat(x, \"_\").concat(y);\n            if (!r.hasOwnProperty(k)) {\n              r[k] = genTilesCoords(this.level, _classPrivateFieldGet2(_isMercator, this), x, y, x, y)[0];\n              tiles.push(r[k]);\n            }\n            selTiles.push(r[k]);\n          }\n        }\n        tiles = selTiles;\n      }\n    }\n  }\n\n  /*\n  console.log({\n    level: this.level,\n    totalObjs: this.children.length,\n    tilesFound: tiles.length,\n    tilesInView: tiles.filter(this.#isInView || (() => true)).length,\n    levelTiles: this.#tilesMeta[this.level].length,\n    fetched: this.#tilesMeta[this.level].filter(d => d.obj).length,\n    loading: this.#tilesMeta[this.level].filter(d => d.loading).length,\n  });\n  */\n\n  tiles.filter(function (d) {\n    return !d.obj;\n  }).filter(_classPrivateFieldGet2(_isInView, this) || function () {\n    return true;\n  }).forEach(function (d) {\n    var x = d.x,\n      y = d.y,\n      lng = d.lng,\n      lat = d.lat,\n      latLen = d.latLen;\n    var lngLen = 360 / Math.pow(2, _this5.level);\n    if (!d.obj) {\n      var width = lngLen * (1 - _this5.tileMargin);\n      var height = latLen * (1 - _this5.tileMargin);\n      var rotLng = deg2Rad(lng);\n      var rotLat = deg2Rad(-lat);\n      var tile = new Mesh(new SphereGeometry(_classPrivateFieldGet2(_radius, _this5), Math.ceil(width / _this5.curvatureResolution), Math.ceil(height / _this5.curvatureResolution), deg2Rad(90 - width / 2) + rotLng, deg2Rad(width), deg2Rad(90 - height / 2) + rotLat, deg2Rad(height)), new MeshLambertMaterial());\n      if (_classPrivateFieldGet2(_isMercator, _this5)) {\n        var _map = [lat + latLen / 2, lat - latLen / 2].map(function (lat) {\n            return 0.5 - lat / 180;\n          }),\n          _map2 = _slicedToArray(_map, 2),\n          _y = _map2[0],\n          _y2 = _map2[1];\n        convertMercatorUV(tile.geometry.attributes.uv, _y, _y2);\n      }\n      d.obj = tile;\n    }\n    if (!d.loading) {\n      d.loading = true;\n\n      // Fetch tile image\n      new TextureLoader().load(_this5.tileUrl(x, y, _this5.level), function (texture) {\n        var tile = d.obj;\n        if (tile) {\n          texture.colorSpace = SRGBColorSpace;\n          tile.material.map = texture;\n          tile.material.color = null;\n          tile.material.needsUpdate = true;\n          _this5.add(tile);\n        }\n        d.loading = false;\n      });\n    }\n  });\n}\n\nexport { ThreeSlippyMapGlobe as default };\n","\nexport default function earcut(data, holeIndices, dim = 2) {\n\n    const hasHoles = holeIndices && holeIndices.length;\n    const outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n    let outerNode = linkedList(data, 0, outerLen, dim, true);\n    const triangles = [];\n\n    if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n    let minX, minY, invSize;\n\n    if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n    // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n    if (data.length > 80 * dim) {\n        minX = data[0];\n        minY = data[1];\n        let maxX = minX;\n        let maxY = minY;\n\n        for (let i = dim; i < outerLen; i += dim) {\n            const x = data[i];\n            const y = data[i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n        }\n\n        // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n        invSize = Math.max(maxX - minX, maxY - minY);\n        invSize = invSize !== 0 ? 32767 / invSize : 0;\n    }\n\n    earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n    return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n    let last;\n\n    if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n        for (let i = start; i < end; i += dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n    } else {\n        for (let i = end - dim; i >= start; i -= dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n    }\n\n    if (last && equals(last, last.next)) {\n        removeNode(last);\n        last = last.next;\n    }\n\n    return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n    if (!start) return start;\n    if (!end) end = start;\n\n    let p = start,\n        again;\n    do {\n        again = false;\n\n        if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n            removeNode(p);\n            p = end = p.prev;\n            if (p === p.next) break;\n            again = true;\n\n        } else {\n            p = p.next;\n        }\n    } while (again || p !== end);\n\n    return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n    if (!ear) return;\n\n    // interlink polygon nodes in z-order\n    if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n    let stop = ear;\n\n    // iterate through ears, slicing them one by one\n    while (ear.prev !== ear.next) {\n        const prev = ear.prev;\n        const next = ear.next;\n\n        if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n            triangles.push(prev.i, ear.i, next.i); // cut off the triangle\n\n            removeNode(ear);\n\n            // skipping the next vertex leads to less sliver triangles\n            ear = next.next;\n            stop = next.next;\n\n            continue;\n        }\n\n        ear = next;\n\n        // if we looped through the whole remaining polygon and can't find any more ears\n        if (ear === stop) {\n            // try filtering points and slicing again\n            if (!pass) {\n                earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n            // if this didn't work, try curing all small self-intersections locally\n            } else if (pass === 1) {\n                ear = cureLocalIntersections(filterPoints(ear), triangles);\n                earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n            // as a last resort, try splitting the remaining polygon into two\n            } else if (pass === 2) {\n                splitEarcut(ear, triangles, dim, minX, minY, invSize);\n            }\n\n            break;\n        }\n    }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n    const a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    // now make sure we don't have other points inside the potential ear\n    const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n    // triangle bbox\n    const x0 = Math.min(ax, bx, cx),\n        y0 = Math.min(ay, by, cy),\n        x1 = Math.max(ax, bx, cx),\n        y1 = Math.max(ay, by, cy);\n\n    let p = c.next;\n    while (p !== a) {\n        if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.next;\n    }\n\n    return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n    const a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n    // triangle bbox\n    const x0 = Math.min(ax, bx, cx),\n        y0 = Math.min(ay, by, cy),\n        x1 = Math.max(ax, bx, cx),\n        y1 = Math.max(ay, by, cy);\n\n    // z-order range for the current triangle bbox;\n    const minZ = zOrder(x0, y0, minX, minY, invSize),\n        maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n    let p = ear.prevZ,\n        n = ear.nextZ;\n\n    // look for points inside the triangle in both directions\n    while (p && p.z >= minZ && n && n.z <= maxZ) {\n        if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n\n        if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n        n = n.nextZ;\n    }\n\n    // look for remaining points in decreasing z-order\n    while (p && p.z >= minZ) {\n        if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n    }\n\n    // look for remaining points in increasing z-order\n    while (n && n.z <= maxZ) {\n        if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n        n = n.nextZ;\n    }\n\n    return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles) {\n    let p = start;\n    do {\n        const a = p.prev,\n            b = p.next.next;\n\n        if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n            triangles.push(a.i, p.i, b.i);\n\n            // remove two nodes involved\n            removeNode(p);\n            removeNode(p.next);\n\n            p = start = b;\n        }\n        p = p.next;\n    } while (p !== start);\n\n    return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n    // look for a valid diagonal that divides the polygon into two\n    let a = start;\n    do {\n        let b = a.next.next;\n        while (b !== a.prev) {\n            if (a.i !== b.i && isValidDiagonal(a, b)) {\n                // split the polygon in two by the diagonal\n                let c = splitPolygon(a, b);\n\n                // filter colinear points around the cuts\n                a = filterPoints(a, a.next);\n                c = filterPoints(c, c.next);\n\n                // run earcut on each half\n                earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n                earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n                return;\n            }\n            b = b.next;\n        }\n        a = a.next;\n    } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n    const queue = [];\n\n    for (let i = 0, len = holeIndices.length; i < len; i++) {\n        const start = holeIndices[i] * dim;\n        const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n        const list = linkedList(data, start, end, dim, false);\n        if (list === list.next) list.steiner = true;\n        queue.push(getLeftmost(list));\n    }\n\n    queue.sort(compareXYSlope);\n\n    // process holes from left to right\n    for (let i = 0; i < queue.length; i++) {\n        outerNode = eliminateHole(queue[i], outerNode);\n    }\n\n    return outerNode;\n}\n\nfunction compareXYSlope(a, b) {\n    let result = a.x - b.x;\n    // when the left-most point of 2 holes meet at a vertex, sort the holes counterclockwise so that when we find\n    // the bridge to the outer shell is always the point that they meet at.\n    if (result === 0) {\n        result = a.y - b.y;\n        if (result === 0) {\n            const aSlope = (a.next.y - a.y) / (a.next.x - a.x);\n            const bSlope = (b.next.y - b.y) / (b.next.x - b.x);\n            result = aSlope - bSlope;\n        }\n    }\n    return result;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole(hole, outerNode) {\n    const bridge = findHoleBridge(hole, outerNode);\n    if (!bridge) {\n        return outerNode;\n    }\n\n    const bridgeReverse = splitPolygon(bridge, hole);\n\n    // filter collinear points around the cuts\n    filterPoints(bridgeReverse, bridgeReverse.next);\n    return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n    let p = outerNode;\n    const hx = hole.x;\n    const hy = hole.y;\n    let qx = -Infinity;\n    let m;\n\n    // find a segment intersected by a ray from the hole's leftmost point to the left;\n    // segment's endpoint with lesser x will be potential connection point\n    // unless they intersect at a vertex, then choose the vertex\n    if (equals(hole, p)) return p;\n    do {\n        if (equals(hole, p.next)) return p.next;\n        else if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n            const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n            if (x <= hx && x > qx) {\n                qx = x;\n                m = p.x < p.next.x ? p : p.next;\n                if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n            }\n        }\n        p = p.next;\n    } while (p !== outerNode);\n\n    if (!m) return null;\n\n    // look for points inside the triangle of hole point, segment intersection and endpoint;\n    // if there are no points found, we have a valid connection;\n    // otherwise choose the point of the minimum angle with the ray as connection point\n\n    const stop = m;\n    const mx = m.x;\n    const my = m.y;\n    let tanMin = Infinity;\n\n    p = m;\n\n    do {\n        if (hx >= p.x && p.x >= mx && hx !== p.x &&\n                pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n            const tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n            if (locallyInside(p, hole) &&\n                (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n                m = p;\n                tanMin = tan;\n            }\n        }\n\n        p = p.next;\n    } while (p !== stop);\n\n    return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n    return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n    let p = start;\n    do {\n        if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n        p.prevZ = p.prev;\n        p.nextZ = p.next;\n        p = p.next;\n    } while (p !== start);\n\n    p.prevZ.nextZ = null;\n    p.prevZ = null;\n\n    sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n    let numMerges;\n    let inSize = 1;\n\n    do {\n        let p = list;\n        let e;\n        list = null;\n        let tail = null;\n        numMerges = 0;\n\n        while (p) {\n            numMerges++;\n            let q = p;\n            let pSize = 0;\n            for (let i = 0; i < inSize; i++) {\n                pSize++;\n                q = q.nextZ;\n                if (!q) break;\n            }\n            let qSize = inSize;\n\n            while (pSize > 0 || (qSize > 0 && q)) {\n\n                if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n                    e = p;\n                    p = p.nextZ;\n                    pSize--;\n                } else {\n                    e = q;\n                    q = q.nextZ;\n                    qSize--;\n                }\n\n                if (tail) tail.nextZ = e;\n                else list = e;\n\n                e.prevZ = tail;\n                tail = e;\n            }\n\n            p = q;\n        }\n\n        tail.nextZ = null;\n        inSize *= 2;\n\n    } while (numMerges > 1);\n\n    return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n    // coords are transformed into non-negative 15-bit integer range\n    x = (x - minX) * invSize | 0;\n    y = (y - minY) * invSize | 0;\n\n    x = (x | (x << 8)) & 0x00FF00FF;\n    x = (x | (x << 4)) & 0x0F0F0F0F;\n    x = (x | (x << 2)) & 0x33333333;\n    x = (x | (x << 1)) & 0x55555555;\n\n    y = (y | (y << 8)) & 0x00FF00FF;\n    y = (y | (y << 4)) & 0x0F0F0F0F;\n    y = (y | (y << 2)) & 0x33333333;\n    y = (y | (y << 1)) & 0x55555555;\n\n    return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n    let p = start,\n        leftmost = start;\n    do {\n        if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n        p = p.next;\n    } while (p !== start);\n\n    return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n    return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n           (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n           (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a point lies within a convex triangle but false if its equal to the first point of the triangle\nfunction pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, px, py) {\n    return !(ax === px && ay === py) && pointInTriangle(ax, ay, bx, by, cx, cy, px, py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n    return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // doesn't intersect other edges\n           (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n            (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n            equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n    return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n    return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n    const o1 = sign(area(p1, q1, p2));\n    const o2 = sign(area(p1, q1, q2));\n    const o3 = sign(area(p2, q2, p1));\n    const o4 = sign(area(p2, q2, q1));\n\n    if (o1 !== o2 && o3 !== o4) return true; // general case\n\n    if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n    if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n    if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n    if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n    return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n    return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n    return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n    let p = a;\n    do {\n        if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n                intersects(p, p.next, a, b)) return true;\n        p = p.next;\n    } while (p !== a);\n\n    return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n    return area(a.prev, a, a.next) < 0 ?\n        area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n        area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n    let p = a;\n    let inside = false;\n    const px = (a.x + b.x) / 2;\n    const py = (a.y + b.y) / 2;\n    do {\n        if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n                (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n            inside = !inside;\n        p = p.next;\n    } while (p !== a);\n\n    return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n    const a2 = createNode(a.i, a.x, a.y),\n        b2 = createNode(b.i, b.x, b.y),\n        an = a.next,\n        bp = b.prev;\n\n    a.next = b;\n    b.prev = a;\n\n    a2.next = an;\n    an.prev = a2;\n\n    b2.next = a2;\n    a2.prev = b2;\n\n    bp.next = b2;\n    b2.prev = bp;\n\n    return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n    const p = createNode(i, x, y);\n\n    if (!last) {\n        p.prev = p;\n        p.next = p;\n\n    } else {\n        p.next = last.next;\n        p.prev = last;\n        last.next.prev = p;\n        last.next = p;\n    }\n    return p;\n}\n\nfunction removeNode(p) {\n    p.next.prev = p.prev;\n    p.prev.next = p.next;\n\n    if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n    if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction createNode(i, x, y) {\n    return {\n        i, // vertex index in coordinates array\n        x, y, // vertex coordinates\n        prev: null, // previous and next vertex nodes in a polygon ring\n        next: null,\n        z: 0, // z-order curve value\n        prevZ: null, // previous and next nodes in z-order\n        nextZ: null,\n        steiner: false // indicates whether this is a steiner point\n    };\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nexport function deviation(data, holeIndices, dim, triangles) {\n    const hasHoles = holeIndices && holeIndices.length;\n    const outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n    let polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n    if (hasHoles) {\n        for (let i = 0, len = holeIndices.length; i < len; i++) {\n            const start = holeIndices[i] * dim;\n            const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n            polygonArea -= Math.abs(signedArea(data, start, end, dim));\n        }\n    }\n\n    let trianglesArea = 0;\n    for (let i = 0; i < triangles.length; i += 3) {\n        const a = triangles[i] * dim;\n        const b = triangles[i + 1] * dim;\n        const c = triangles[i + 2] * dim;\n        trianglesArea += Math.abs(\n            (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n            (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n    }\n\n    return polygonArea === 0 && trianglesArea === 0 ? 0 :\n        Math.abs((trianglesArea - polygonArea) / polygonArea);\n}\n\nfunction signedArea(data, start, end, dim) {\n    let sum = 0;\n    for (let i = start, j = end - dim; i < end; i += dim) {\n        sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n        j = i;\n    }\n    return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nexport function flatten(data) {\n    const vertices = [];\n    const holes = [];\n    const dimensions = data[0][0].length;\n    let holeIndex = 0;\n    let prevLen = 0;\n\n    for (const ring of data) {\n        for (const p of ring) {\n            for (let d = 0; d < dimensions; d++) vertices.push(p[d]);\n        }\n        if (prevLen) {\n            holeIndex += prevLen;\n            holes.push(holeIndex);\n        }\n        prevLen = ring.length;\n    }\n    return {vertices, holes, dimensions};\n}\n","import { BufferGeometry, Float32BufferAttribute } from 'three';\nimport { flatten } from 'earcut';\nimport { geoDistance, geoInterpolate } from 'd3-geo';\nimport { interpolateNumber } from 'd3-interpolate';\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nfunction _callSuper(t, o, e) {\n  return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, [], _getPrototypeOf(t).constructor) : o.apply(t, e));\n}\nfunction _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _createClass(e, r, t) {\n  return Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nfunction _createForOfIteratorHelper(r, e) {\n  var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (!t) {\n    if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {\n      t && (r = t);\n      var n = 0,\n        F = function () {};\n      return {\n        s: F,\n        n: function () {\n          return n >= r.length ? {\n            done: !0\n          } : {\n            done: !1,\n            value: r[n++]\n          };\n        },\n        e: function (r) {\n          throw r;\n        },\n        f: F\n      };\n    }\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n  var o,\n    a = !0,\n    u = !1;\n  return {\n    s: function () {\n      t = t.call(r);\n    },\n    n: function () {\n      var r = t.next();\n      return a = r.done, r;\n    },\n    e: function (r) {\n      u = !0, o = r;\n    },\n    f: function () {\n      try {\n        a || null == t.return || t.return();\n      } finally {\n        if (u) throw o;\n      }\n    }\n  };\n}\nfunction _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && _setPrototypeOf(t, e);\n}\nfunction _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function () {\n    return !!t;\n  })();\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = !0,\n      o = !1;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = !0, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == typeof e || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return _assertThisInitialized(t);\n}\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar interpolateLine = function interpolateLine() {\n  var lineCoords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var maxDegDistance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var result = [];\n  var prevPnt = null;\n  lineCoords.forEach(function (pnt) {\n    if (prevPnt) {\n      var dist = geoDistance(pnt, prevPnt) * 180 / Math.PI;\n      if (dist > maxDegDistance) {\n        var geoInterpol = geoInterpolate(prevPnt, pnt);\n        var altInterpol = prevPnt.length > 2 || pnt.length > 2 ? interpolateNumber(prevPnt[2] || 0, pnt[2] || 0) : null;\n        var interpol = altInterpol ? function (t) {\n          return [].concat(_toConsumableArray(geoInterpol(t)), [altInterpol(t)]);\n        } : geoInterpol;\n        var tStep = 1 / Math.ceil(dist / maxDegDistance);\n        var t = tStep;\n        while (t < 1) {\n          result.push(interpol(t));\n          t += tStep;\n        }\n      }\n    }\n    result.push(prevPnt = pnt);\n  });\n  return result;\n};\n\nvar THREE = typeof window !== 'undefined' && window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferGeometry: BufferGeometry,\n  Float32BufferAttribute: Float32BufferAttribute\n};\n\n// support both modes for backwards threejs compatibility\nvar setAttributeFn = new THREE.BufferGeometry().setAttribute ? 'setAttribute' : 'addAttribute';\nvar GeoJsonGeometry = /*#__PURE__*/function (_THREE$BufferGeometry) {\n  function GeoJsonGeometry(geoJson) {\n    var _this;\n    var radius = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n    var resolution = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 5;\n    _classCallCheck(this, GeoJsonGeometry);\n    _this = _callSuper(this, GeoJsonGeometry);\n    _this.type = 'GeoJsonGeometry';\n    _this.parameters = {\n      geoJson: geoJson,\n      radius: radius,\n      resolution: resolution\n    };\n\n    // process various geometry types\n    var groups = ({\n      Point: genPoint,\n      MultiPoint: genMultiPoint,\n      LineString: genLineString,\n      MultiLineString: genMultiLineString,\n      Polygon: genPolygon,\n      MultiPolygon: genMultiPolygon\n    }[geoJson.type] || function () {\n      return [];\n    })(geoJson.coordinates, radius);\n\n    // concat groups\n    var indices = [],\n      vertices = [];\n    var groupCnt = 0;\n    groups.forEach(function (newG) {\n      var prevIndCnt = indices.length;\n      concatGroup({\n        indices: indices,\n        vertices: vertices\n      }, newG);\n      _this.addGroup(prevIndCnt, indices.length - prevIndCnt, groupCnt++);\n    });\n\n    // build geometry\n    indices.length && _this.setIndex(indices);\n    vertices.length && _this[setAttributeFn]('position', new THREE.Float32BufferAttribute(vertices, 3));\n\n    //\n\n    function genPoint(coords, r) {\n      var vertices = polar2Cartesian(coords[1], coords[0], r + (coords[2] || 0));\n      var indices = [];\n      return [{\n        vertices: vertices,\n        indices: indices\n      }];\n    }\n    function genMultiPoint(coords, r) {\n      var result = {\n        vertices: [],\n        indices: []\n      };\n      coords.map(function (c) {\n        return genPoint(c, r);\n      }).forEach(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 1),\n          newPnt = _ref2[0];\n        concatGroup(result, newPnt);\n      });\n      return [result];\n    }\n    function genLineString(coords, r) {\n      var coords3d = interpolateLine(coords, resolution).map(function (_ref3) {\n        var _ref4 = _slicedToArray(_ref3, 3),\n          lng = _ref4[0],\n          lat = _ref4[1],\n          _ref4$ = _ref4[2],\n          alt = _ref4$ === void 0 ? 0 : _ref4$;\n        return polar2Cartesian(lat, lng, r + alt);\n      });\n      var _earcutFlatten = flatten([coords3d]),\n        vertices = _earcutFlatten.vertices;\n      var numPoints = Math.round(vertices.length / 3);\n      var indices = [];\n      for (var vIdx = 1; vIdx < numPoints; vIdx++) {\n        indices.push(vIdx - 1, vIdx);\n      }\n      return [{\n        vertices: vertices,\n        indices: indices\n      }];\n    }\n    function genMultiLineString(coords, r) {\n      var result = {\n        vertices: [],\n        indices: []\n      };\n      coords.map(function (c) {\n        return genLineString(c, r);\n      }).forEach(function (_ref5) {\n        var _ref6 = _slicedToArray(_ref5, 1),\n          newLine = _ref6[0];\n        concatGroup(result, newLine);\n      });\n      return [result];\n    }\n    function genPolygon(coords, r) {\n      var coords3d = coords.map(function (coordsSegment) {\n        return interpolateLine(coordsSegment, resolution).map(function (_ref7) {\n          var _ref8 = _slicedToArray(_ref7, 3),\n            lng = _ref8[0],\n            lat = _ref8[1],\n            _ref8$ = _ref8[2],\n            alt = _ref8$ === void 0 ? 0 : _ref8$;\n          return polar2Cartesian(lat, lng, r + alt);\n        });\n      });\n\n      // Each point generates 3 vertice items (x,y,z).\n      var _earcutFlatten2 = flatten(coords3d),\n        vertices = _earcutFlatten2.vertices,\n        holes = _earcutFlatten2.holes;\n      var firstHoleIdx = holes[0] || Infinity;\n      var outerVertices = vertices.slice(0, firstHoleIdx * 3);\n      var holeVertices = vertices.slice(firstHoleIdx * 3);\n      var holesIdx = new Set(holes);\n      var numPoints = Math.round(vertices.length / 3);\n      var outerIndices = [],\n        holeIndices = [];\n      for (var vIdx = 1; vIdx < numPoints; vIdx++) {\n        if (!holesIdx.has(vIdx)) {\n          if (vIdx < firstHoleIdx) {\n            outerIndices.push(vIdx - 1, vIdx);\n          } else {\n            holeIndices.push(vIdx - 1 - firstHoleIdx, vIdx - firstHoleIdx);\n          }\n        }\n      }\n      var groups = [{\n        indices: outerIndices,\n        vertices: outerVertices\n      }];\n      if (holes.length) {\n        groups.push({\n          indices: holeIndices,\n          vertices: holeVertices\n        });\n      }\n      return groups;\n    }\n    function genMultiPolygon(coords, r) {\n      var outer = {\n        vertices: [],\n        indices: []\n      };\n      var holes = {\n        vertices: [],\n        indices: []\n      };\n      coords.map(function (c) {\n        return genPolygon(c, r);\n      }).forEach(function (_ref9) {\n        var _ref10 = _slicedToArray(_ref9, 2),\n          newOuter = _ref10[0],\n          newHoles = _ref10[1];\n        concatGroup(outer, newOuter);\n        newHoles && concatGroup(holes, newHoles);\n      });\n      var groups = [outer];\n      holes.vertices.length && groups.push(holes);\n      return groups;\n    }\n    return _this;\n  }\n  _inherits(GeoJsonGeometry, _THREE$BufferGeometry);\n  return _createClass(GeoJsonGeometry);\n}(THREE.BufferGeometry); //\nfunction concatGroup(main, extra) {\n  var prevVertCnt = Math.round(main.vertices.length / 3);\n  concatArr(main.vertices, extra.vertices);\n  concatArr(main.indices, extra.indices.map(function (ind) {\n    return ind + prevVertCnt;\n  }));\n}\nfunction concatArr(target, src) {\n  var _iterator = _createForOfIteratorHelper(src),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var e = _step.value;\n      target.push(e);\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n}\nfunction polar2Cartesian(lat, lng) {\n  var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  var phi = (90 - lat) * Math.PI / 180;\n  var theta = (90 - lng) * Math.PI / 180;\n  return [r * Math.sin(phi) * Math.cos(theta),\n  // x\n  r * Math.cos(phi),\n  // y\n  r * Math.sin(phi) * Math.sin(theta) // z\n  ];\n}\n\nexport { GeoJsonGeometry as default };\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\n/**\n * @module BufferGeometryUtils\n * @three_import import * as BufferGeometryUtils from 'three/addons/utils/BufferGeometryUtils.js';\n */\n\n/**\n * Computes vertex tangents using the MikkTSpace algorithm. MikkTSpace generates the same tangents consistently,\n * and is used in most modelling tools and normal map bakers. Use MikkTSpace for materials with normal maps,\n * because inconsistent tangents may lead to subtle visual issues in the normal map, particularly around mirrored\n * UV seams.\n *\n * In comparison to this method, {@link BufferGeometry#computeTangents} (a custom algorithm) generates tangents that\n * probably will not match the tangents in other software. The custom algorithm is sufficient for general use with a\n * custom material, and may be faster than MikkTSpace.\n *\n * Returns the original BufferGeometry. Indexed geometries will be de-indexed. Requires position, normal, and uv attributes.\n *\n * @param {BufferGeometry} geometry - The geometry to compute tangents for.\n * @param {Object} MikkTSpace - Instance of `examples/jsm/libs/mikktspace.module.js`, or `mikktspace` npm package.\n * Await `MikkTSpace.ready` before use.\n * @param {boolean} [negateSign=true] - Whether to negate the sign component (.w) of each tangent.\n * Required for normal map conventions in some formats, including glTF.\n * @return {BufferGeometry} The updated geometry.\n */\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * Merges a set of geometries into a single instance. All geometries must have compatible attributes.\n *\n * @param {Array<BufferGeometry>} geometries - The geometries to merge.\n * @param {boolean} [useGroups=false] - Whether to use groups or not.\n * @return {?BufferGeometry} The merged geometry. Returns `null` if the merge does not succeed.\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '.  .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\t\tif ( numMorphTargets === 0 ) continue;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * Merges a set of attributes into a single instance. All attributes must have compatible properties and types.\n * Instances of {@link InterleavedBufferAttribute} are not supported.\n *\n * @param {Array<BufferAttribute>} attributes - The attributes to merge.\n * @return {?BufferAttribute} The merged attribute. Returns `null` if the merge does not succeed.\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * Performs a deep clone of the given buffer attribute.\n *\n * @param {BufferAttribute} attribute - The attribute to clone.\n * @return {BufferAttribute} The cloned attribute.\n */\nfunction deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * Interleaves a set of attributes and returns a new array of corresponding attributes that share a\n * single {@link InterleavedBuffer} instance. All attributes must have compatible types.\n *\n * @param {Array<BufferAttribute>} attributes - The attributes to interleave.\n * @return {?Array<InterleavedBufferAttribute>} An array of interleaved attributes. If interleave does not succeed, the method returns `null`.\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n/**\n * Returns a new, non-interleaved version of the given attribute.\n *\n * @param {InterleavedBufferAttribute} attribute - The interleaved attribute.\n * @return {BufferAttribute} The non-interleaved attribute.\n */\nfunction deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n/**\n * Deinterleaves all attributes on the given geometry.\n *\n * @param {BufferGeometry} geometry - The geometry to deinterleave.\n */\nfunction deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Returns the amount of bytes used by all attributes to represent the geometry.\n *\n * @param {BufferGeometry} geometry - The geometry.\n * @return {number} The estimate bytes used.\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * Returns a new geometry with vertices for which all similar vertex attributes (within tolerance) are merged.\n *\n * @param {BufferGeometry} geometry - The geometry to merge vertices for.\n * @param {number} [tolerance=1e-4] - The tolerance value.\n * @return {BufferGeometry} - The new geometry with merged vertices.\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * Returns a new indexed geometry based on `TrianglesDrawMode` draw mode.\n * This mode corresponds to the `gl.TRIANGLES` primitive in WebGL.\n *\n * @param {BufferGeometry} geometry - The geometry to convert.\n * @param {number} drawMode - The current draw mode.\n * @return {BufferGeometry} The new geometry using `TrianglesDrawMode`.\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n *\n * Helpful for Raytracing or Decals (i.e. a `DecalGeometry` applied to a morphed Object with a `BufferGeometry`\n * will use the original `BufferGeometry`, not the morphed/skinned one, generating an incorrect result.\n * Using this function to create a shadow `Object3`D the `DecalGeometry` can be correctly generated).\n *\n * @param {Mesh|Line|Points} object - The 3D object to compute morph attributes for.\n * @return {Object} An object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.normal;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\n/**\n * Merges the {@link BufferGeometry#groups} for the given geometry.\n *\n * @param {BufferGeometry} geometry - The geometry to modify.\n * @return {BufferGeometry} - The updated geometry\n */\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry - The geometry to modify.\n * @param {number} [creaseAngle=Math.PI/3] - The crease angle in radians.\n * @return {BufferGeometry} - The updated geometry\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tdeepCloneAttribute,\n\tdeinterleaveAttribute,\n\tdeinterleaveGeometry,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n","var index = (function (p) {\n  return typeof p === 'function' ? p // fn\n  : typeof p === 'string' ? function (obj) {\n    return obj[p];\n  } // property name\n  : function (obj) {\n    return p;\n  };\n}); // constant\n\nexport { index as default };\n","// This file is autogenerated. It's used to publish ESM to npm.\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, _typeof(obj);\n}\n\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\nvar trimLeft = /^\\s+/;\nvar trimRight = /\\s+$/;\nfunction tinycolor(color, opts) {\n  color = color ? color : \"\";\n  opts = opts || {};\n\n  // If input is already a tinycolor, return itself\n  if (color instanceof tinycolor) {\n    return color;\n  }\n  // If we are called as a function, call using new instead\n  if (!(this instanceof tinycolor)) {\n    return new tinycolor(color, opts);\n  }\n  var rgb = inputToRGB(color);\n  this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n  this._gradientType = opts.gradientType;\n\n  // Don't let the range of [0,255] come back in [0,1].\n  // Potentially lose a little bit of precision here, but will fix issues where\n  // .5 gets interpreted as half of the total, instead of half of 1\n  // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n  if (this._r < 1) this._r = Math.round(this._r);\n  if (this._g < 1) this._g = Math.round(this._g);\n  if (this._b < 1) this._b = Math.round(this._b);\n  this._ok = rgb.ok;\n}\ntinycolor.prototype = {\n  isDark: function isDark() {\n    return this.getBrightness() < 128;\n  },\n  isLight: function isLight() {\n    return !this.isDark();\n  },\n  isValid: function isValid() {\n    return this._ok;\n  },\n  getOriginalInput: function getOriginalInput() {\n    return this._originalInput;\n  },\n  getFormat: function getFormat() {\n    return this._format;\n  },\n  getAlpha: function getAlpha() {\n    return this._a;\n  },\n  getBrightness: function getBrightness() {\n    //http://www.w3.org/TR/AERT#color-contrast\n    var rgb = this.toRgb();\n    return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n  },\n  getLuminance: function getLuminance() {\n    //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n    var rgb = this.toRgb();\n    var RsRGB, GsRGB, BsRGB, R, G, B;\n    RsRGB = rgb.r / 255;\n    GsRGB = rgb.g / 255;\n    BsRGB = rgb.b / 255;\n    if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n    if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n    if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n    return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n  },\n  setAlpha: function setAlpha(value) {\n    this._a = boundAlpha(value);\n    this._roundA = Math.round(100 * this._a) / 100;\n    return this;\n  },\n  toHsv: function toHsv() {\n    var hsv = rgbToHsv(this._r, this._g, this._b);\n    return {\n      h: hsv.h * 360,\n      s: hsv.s,\n      v: hsv.v,\n      a: this._a\n    };\n  },\n  toHsvString: function toHsvString() {\n    var hsv = rgbToHsv(this._r, this._g, this._b);\n    var h = Math.round(hsv.h * 360),\n      s = Math.round(hsv.s * 100),\n      v = Math.round(hsv.v * 100);\n    return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n  },\n  toHsl: function toHsl() {\n    var hsl = rgbToHsl(this._r, this._g, this._b);\n    return {\n      h: hsl.h * 360,\n      s: hsl.s,\n      l: hsl.l,\n      a: this._a\n    };\n  },\n  toHslString: function toHslString() {\n    var hsl = rgbToHsl(this._r, this._g, this._b);\n    var h = Math.round(hsl.h * 360),\n      s = Math.round(hsl.s * 100),\n      l = Math.round(hsl.l * 100);\n    return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n  },\n  toHex: function toHex(allow3Char) {\n    return rgbToHex(this._r, this._g, this._b, allow3Char);\n  },\n  toHexString: function toHexString(allow3Char) {\n    return \"#\" + this.toHex(allow3Char);\n  },\n  toHex8: function toHex8(allow4Char) {\n    return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n  },\n  toHex8String: function toHex8String(allow4Char) {\n    return \"#\" + this.toHex8(allow4Char);\n  },\n  toRgb: function toRgb() {\n    return {\n      r: Math.round(this._r),\n      g: Math.round(this._g),\n      b: Math.round(this._b),\n      a: this._a\n    };\n  },\n  toRgbString: function toRgbString() {\n    return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n  },\n  toPercentageRgb: function toPercentageRgb() {\n    return {\n      r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n      g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n      b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n      a: this._a\n    };\n  },\n  toPercentageRgbString: function toPercentageRgbString() {\n    return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n  },\n  toName: function toName() {\n    if (this._a === 0) {\n      return \"transparent\";\n    }\n    if (this._a < 1) {\n      return false;\n    }\n    return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n  },\n  toFilter: function toFilter(secondColor) {\n    var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n    var secondHex8String = hex8String;\n    var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n    if (secondColor) {\n      var s = tinycolor(secondColor);\n      secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n    }\n    return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n  },\n  toString: function toString(format) {\n    var formatSet = !!format;\n    format = format || this._format;\n    var formattedString = false;\n    var hasAlpha = this._a < 1 && this._a >= 0;\n    var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n    if (needsAlphaFormat) {\n      // Special case for \"transparent\", all other non-alpha formats\n      // will return rgba when there is transparency.\n      if (format === \"name\" && this._a === 0) {\n        return this.toName();\n      }\n      return this.toRgbString();\n    }\n    if (format === \"rgb\") {\n      formattedString = this.toRgbString();\n    }\n    if (format === \"prgb\") {\n      formattedString = this.toPercentageRgbString();\n    }\n    if (format === \"hex\" || format === \"hex6\") {\n      formattedString = this.toHexString();\n    }\n    if (format === \"hex3\") {\n      formattedString = this.toHexString(true);\n    }\n    if (format === \"hex4\") {\n      formattedString = this.toHex8String(true);\n    }\n    if (format === \"hex8\") {\n      formattedString = this.toHex8String();\n    }\n    if (format === \"name\") {\n      formattedString = this.toName();\n    }\n    if (format === \"hsl\") {\n      formattedString = this.toHslString();\n    }\n    if (format === \"hsv\") {\n      formattedString = this.toHsvString();\n    }\n    return formattedString || this.toHexString();\n  },\n  clone: function clone() {\n    return tinycolor(this.toString());\n  },\n  _applyModification: function _applyModification(fn, args) {\n    var color = fn.apply(null, [this].concat([].slice.call(args)));\n    this._r = color._r;\n    this._g = color._g;\n    this._b = color._b;\n    this.setAlpha(color._a);\n    return this;\n  },\n  lighten: function lighten() {\n    return this._applyModification(_lighten, arguments);\n  },\n  brighten: function brighten() {\n    return this._applyModification(_brighten, arguments);\n  },\n  darken: function darken() {\n    return this._applyModification(_darken, arguments);\n  },\n  desaturate: function desaturate() {\n    return this._applyModification(_desaturate, arguments);\n  },\n  saturate: function saturate() {\n    return this._applyModification(_saturate, arguments);\n  },\n  greyscale: function greyscale() {\n    return this._applyModification(_greyscale, arguments);\n  },\n  spin: function spin() {\n    return this._applyModification(_spin, arguments);\n  },\n  _applyCombination: function _applyCombination(fn, args) {\n    return fn.apply(null, [this].concat([].slice.call(args)));\n  },\n  analogous: function analogous() {\n    return this._applyCombination(_analogous, arguments);\n  },\n  complement: function complement() {\n    return this._applyCombination(_complement, arguments);\n  },\n  monochromatic: function monochromatic() {\n    return this._applyCombination(_monochromatic, arguments);\n  },\n  splitcomplement: function splitcomplement() {\n    return this._applyCombination(_splitcomplement, arguments);\n  },\n  // Disabled until https://github.com/bgrins/TinyColor/issues/254\n  // polyad: function (number) {\n  //   return this._applyCombination(polyad, [number]);\n  // },\n  triad: function triad() {\n    return this._applyCombination(polyad, [3]);\n  },\n  tetrad: function tetrad() {\n    return this._applyCombination(polyad, [4]);\n  }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function (color, opts) {\n  if (_typeof(color) == \"object\") {\n    var newColor = {};\n    for (var i in color) {\n      if (color.hasOwnProperty(i)) {\n        if (i === \"a\") {\n          newColor[i] = color[i];\n        } else {\n          newColor[i] = convertToPercentage(color[i]);\n        }\n      }\n    }\n    color = newColor;\n  }\n  return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n//     \"red\"\n//     \"#f00\" or \"f00\"\n//     \"#ff0000\" or \"ff0000\"\n//     \"#ff000000\" or \"ff000000\"\n//     \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n//     \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n//     \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n//     \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n//     \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n//     \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n//     \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n  var rgb = {\n    r: 0,\n    g: 0,\n    b: 0\n  };\n  var a = 1;\n  var s = null;\n  var v = null;\n  var l = null;\n  var ok = false;\n  var format = false;\n  if (typeof color == \"string\") {\n    color = stringInputToObject(color);\n  }\n  if (_typeof(color) == \"object\") {\n    if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n      rgb = rgbToRgb(color.r, color.g, color.b);\n      ok = true;\n      format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n    } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n      s = convertToPercentage(color.s);\n      v = convertToPercentage(color.v);\n      rgb = hsvToRgb(color.h, s, v);\n      ok = true;\n      format = \"hsv\";\n    } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n      s = convertToPercentage(color.s);\n      l = convertToPercentage(color.l);\n      rgb = hslToRgb(color.h, s, l);\n      ok = true;\n      format = \"hsl\";\n    }\n    if (color.hasOwnProperty(\"a\")) {\n      a = color.a;\n    }\n  }\n  a = boundAlpha(a);\n  return {\n    ok: ok,\n    format: color.format || format,\n    r: Math.min(255, Math.max(rgb.r, 0)),\n    g: Math.min(255, Math.max(rgb.g, 0)),\n    b: Math.min(255, Math.max(rgb.b, 0)),\n    a: a\n  };\n}\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// <http://www.w3.org/TR/css3-color/>\n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b) {\n  return {\n    r: bound01(r, 255) * 255,\n    g: bound01(g, 255) * 255,\n    b: bound01(b, 255) * 255\n  };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n  r = bound01(r, 255);\n  g = bound01(g, 255);\n  b = bound01(b, 255);\n  var max = Math.max(r, g, b),\n    min = Math.min(r, g, b);\n  var h,\n    s,\n    l = (max + min) / 2;\n  if (max == min) {\n    h = s = 0; // achromatic\n  } else {\n    var d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    switch (max) {\n      case r:\n        h = (g - b) / d + (g < b ? 6 : 0);\n        break;\n      case g:\n        h = (b - r) / d + 2;\n        break;\n      case b:\n        h = (r - g) / d + 4;\n        break;\n    }\n    h /= 6;\n  }\n  return {\n    h: h,\n    s: s,\n    l: l\n  };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n  var r, g, b;\n  h = bound01(h, 360);\n  s = bound01(s, 100);\n  l = bound01(l, 100);\n  function hue2rgb(p, q, t) {\n    if (t < 0) t += 1;\n    if (t > 1) t -= 1;\n    if (t < 1 / 6) return p + (q - p) * 6 * t;\n    if (t < 1 / 2) return q;\n    if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n    return p;\n  }\n  if (s === 0) {\n    r = g = b = l; // achromatic\n  } else {\n    var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n    var p = 2 * l - q;\n    r = hue2rgb(p, q, h + 1 / 3);\n    g = hue2rgb(p, q, h);\n    b = hue2rgb(p, q, h - 1 / 3);\n  }\n  return {\n    r: r * 255,\n    g: g * 255,\n    b: b * 255\n  };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n  r = bound01(r, 255);\n  g = bound01(g, 255);\n  b = bound01(b, 255);\n  var max = Math.max(r, g, b),\n    min = Math.min(r, g, b);\n  var h,\n    s,\n    v = max;\n  var d = max - min;\n  s = max === 0 ? 0 : d / max;\n  if (max == min) {\n    h = 0; // achromatic\n  } else {\n    switch (max) {\n      case r:\n        h = (g - b) / d + (g < b ? 6 : 0);\n        break;\n      case g:\n        h = (b - r) / d + 2;\n        break;\n      case b:\n        h = (r - g) / d + 4;\n        break;\n    }\n    h /= 6;\n  }\n  return {\n    h: h,\n    s: s,\n    v: v\n  };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hsvToRgb(h, s, v) {\n  h = bound01(h, 360) * 6;\n  s = bound01(s, 100);\n  v = bound01(v, 100);\n  var i = Math.floor(h),\n    f = h - i,\n    p = v * (1 - s),\n    q = v * (1 - f * s),\n    t = v * (1 - (1 - f) * s),\n    mod = i % 6,\n    r = [v, q, p, p, t, v][mod],\n    g = [t, v, v, q, p, p][mod],\n    b = [p, p, t, v, v, q][mod];\n  return {\n    r: r * 255,\n    g: g * 255,\n    b: b * 255\n  };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n  var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n  // Return a 3 character hex if possible\n  if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n  }\n  return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n  var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n  // Return a 4 character hex if possible\n  if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n    return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n  }\n  return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n  var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n  return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n  if (!color1 || !color2) return false;\n  return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\ntinycolor.random = function () {\n  return tinycolor.fromRatio({\n    r: Math.random(),\n    g: Math.random(),\n    b: Math.random()\n  });\n};\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\nfunction _desaturate(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var hsl = tinycolor(color).toHsl();\n  hsl.s -= amount / 100;\n  hsl.s = clamp01(hsl.s);\n  return tinycolor(hsl);\n}\nfunction _saturate(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var hsl = tinycolor(color).toHsl();\n  hsl.s += amount / 100;\n  hsl.s = clamp01(hsl.s);\n  return tinycolor(hsl);\n}\nfunction _greyscale(color) {\n  return tinycolor(color).desaturate(100);\n}\nfunction _lighten(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var hsl = tinycolor(color).toHsl();\n  hsl.l += amount / 100;\n  hsl.l = clamp01(hsl.l);\n  return tinycolor(hsl);\n}\nfunction _brighten(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var rgb = tinycolor(color).toRgb();\n  rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n  rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n  rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n  return tinycolor(rgb);\n}\nfunction _darken(color, amount) {\n  amount = amount === 0 ? 0 : amount || 10;\n  var hsl = tinycolor(color).toHsl();\n  hsl.l -= amount / 100;\n  hsl.l = clamp01(hsl.l);\n  return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction _spin(color, amount) {\n  var hsl = tinycolor(color).toHsl();\n  var hue = (hsl.h + amount) % 360;\n  hsl.h = hue < 0 ? 360 + hue : hue;\n  return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\nfunction _complement(color) {\n  var hsl = tinycolor(color).toHsl();\n  hsl.h = (hsl.h + 180) % 360;\n  return tinycolor(hsl);\n}\nfunction polyad(color, number) {\n  if (isNaN(number) || number <= 0) {\n    throw new Error(\"Argument to polyad must be a positive number\");\n  }\n  var hsl = tinycolor(color).toHsl();\n  var result = [tinycolor(color)];\n  var step = 360 / number;\n  for (var i = 1; i < number; i++) {\n    result.push(tinycolor({\n      h: (hsl.h + i * step) % 360,\n      s: hsl.s,\n      l: hsl.l\n    }));\n  }\n  return result;\n}\nfunction _splitcomplement(color) {\n  var hsl = tinycolor(color).toHsl();\n  var h = hsl.h;\n  return [tinycolor(color), tinycolor({\n    h: (h + 72) % 360,\n    s: hsl.s,\n    l: hsl.l\n  }), tinycolor({\n    h: (h + 216) % 360,\n    s: hsl.s,\n    l: hsl.l\n  })];\n}\nfunction _analogous(color, results, slices) {\n  results = results || 6;\n  slices = slices || 30;\n  var hsl = tinycolor(color).toHsl();\n  var part = 360 / slices;\n  var ret = [tinycolor(color)];\n  for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n    hsl.h = (hsl.h + part) % 360;\n    ret.push(tinycolor(hsl));\n  }\n  return ret;\n}\nfunction _monochromatic(color, results) {\n  results = results || 6;\n  var hsv = tinycolor(color).toHsv();\n  var h = hsv.h,\n    s = hsv.s,\n    v = hsv.v;\n  var ret = [];\n  var modification = 1 / results;\n  while (results--) {\n    ret.push(tinycolor({\n      h: h,\n      s: s,\n      v: v\n    }));\n    v = (v + modification) % 1;\n  }\n  return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function (color1, color2, amount) {\n  amount = amount === 0 ? 0 : amount || 50;\n  var rgb1 = tinycolor(color1).toRgb();\n  var rgb2 = tinycolor(color2).toRgb();\n  var p = amount / 100;\n  var rgba = {\n    r: (rgb2.r - rgb1.r) * p + rgb1.r,\n    g: (rgb2.g - rgb1.g) * p + rgb1.g,\n    b: (rgb2.b - rgb1.b) * p + rgb1.b,\n    a: (rgb2.a - rgb1.a) * p + rgb1.a\n  };\n  return tinycolor(rgba);\n};\n\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n// `contrast`\n// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\ntinycolor.readability = function (color1, color2) {\n  var c1 = tinycolor(color1);\n  var c2 = tinycolor(color2);\n  return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n};\n\n// `isReadable`\n// Ensure that foreground and background color combinations meet WCAG2 guidelines.\n// The third argument is an optional Object.\n//      the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n//      the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n// If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n// *Example*\n//    tinycolor.isReadable(\"#000\", \"#111\") => false\n//    tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function (color1, color2, wcag2) {\n  var readability = tinycolor.readability(color1, color2);\n  var wcag2Parms, out;\n  out = false;\n  wcag2Parms = validateWCAG2Parms(wcag2);\n  switch (wcag2Parms.level + wcag2Parms.size) {\n    case \"AAsmall\":\n    case \"AAAlarge\":\n      out = readability >= 4.5;\n      break;\n    case \"AAlarge\":\n      out = readability >= 3;\n      break;\n    case \"AAAsmall\":\n      out = readability >= 7;\n      break;\n  }\n  return out;\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n//    tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n//    tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString();  // \"#ffffff\"\n//    tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n//    tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function (baseColor, colorList, args) {\n  var bestColor = null;\n  var bestScore = 0;\n  var readability;\n  var includeFallbackColors, level, size;\n  args = args || {};\n  includeFallbackColors = args.includeFallbackColors;\n  level = args.level;\n  size = args.size;\n  for (var i = 0; i < colorList.length; i++) {\n    readability = tinycolor.readability(baseColor, colorList[i]);\n    if (readability > bestScore) {\n      bestScore = readability;\n      bestColor = tinycolor(colorList[i]);\n    }\n  }\n  if (tinycolor.isReadable(baseColor, bestColor, {\n    level: level,\n    size: size\n  }) || !includeFallbackColors) {\n    return bestColor;\n  } else {\n    args.includeFallbackColors = false;\n    return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n  }\n};\n\n// Big List of Colors\n// ------------------\n// <https://www.w3.org/TR/css-color-4/#named-colors>\nvar names = tinycolor.names = {\n  aliceblue: \"f0f8ff\",\n  antiquewhite: \"faebd7\",\n  aqua: \"0ff\",\n  aquamarine: \"7fffd4\",\n  azure: \"f0ffff\",\n  beige: \"f5f5dc\",\n  bisque: \"ffe4c4\",\n  black: \"000\",\n  blanchedalmond: \"ffebcd\",\n  blue: \"00f\",\n  blueviolet: \"8a2be2\",\n  brown: \"a52a2a\",\n  burlywood: \"deb887\",\n  burntsienna: \"ea7e5d\",\n  cadetblue: \"5f9ea0\",\n  chartreuse: \"7fff00\",\n  chocolate: \"d2691e\",\n  coral: \"ff7f50\",\n  cornflowerblue: \"6495ed\",\n  cornsilk: \"fff8dc\",\n  crimson: \"dc143c\",\n  cyan: \"0ff\",\n  darkblue: \"00008b\",\n  darkcyan: \"008b8b\",\n  darkgoldenrod: \"b8860b\",\n  darkgray: \"a9a9a9\",\n  darkgreen: \"006400\",\n  darkgrey: \"a9a9a9\",\n  darkkhaki: \"bdb76b\",\n  darkmagenta: \"8b008b\",\n  darkolivegreen: \"556b2f\",\n  darkorange: \"ff8c00\",\n  darkorchid: \"9932cc\",\n  darkred: \"8b0000\",\n  darksalmon: \"e9967a\",\n  darkseagreen: \"8fbc8f\",\n  darkslateblue: \"483d8b\",\n  darkslategray: \"2f4f4f\",\n  darkslategrey: \"2f4f4f\",\n  darkturquoise: \"00ced1\",\n  darkviolet: \"9400d3\",\n  deeppink: \"ff1493\",\n  deepskyblue: \"00bfff\",\n  dimgray: \"696969\",\n  dimgrey: \"696969\",\n  dodgerblue: \"1e90ff\",\n  firebrick: \"b22222\",\n  floralwhite: \"fffaf0\",\n  forestgreen: \"228b22\",\n  fuchsia: \"f0f\",\n  gainsboro: \"dcdcdc\",\n  ghostwhite: \"f8f8ff\",\n  gold: \"ffd700\",\n  goldenrod: \"daa520\",\n  gray: \"808080\",\n  green: \"008000\",\n  greenyellow: \"adff2f\",\n  grey: \"808080\",\n  honeydew: \"f0fff0\",\n  hotpink: \"ff69b4\",\n  indianred: \"cd5c5c\",\n  indigo: \"4b0082\",\n  ivory: \"fffff0\",\n  khaki: \"f0e68c\",\n  lavender: \"e6e6fa\",\n  lavenderblush: \"fff0f5\",\n  lawngreen: \"7cfc00\",\n  lemonchiffon: \"fffacd\",\n  lightblue: \"add8e6\",\n  lightcoral: \"f08080\",\n  lightcyan: \"e0ffff\",\n  lightgoldenrodyellow: \"fafad2\",\n  lightgray: \"d3d3d3\",\n  lightgreen: \"90ee90\",\n  lightgrey: \"d3d3d3\",\n  lightpink: \"ffb6c1\",\n  lightsalmon: \"ffa07a\",\n  lightseagreen: \"20b2aa\",\n  lightskyblue: \"87cefa\",\n  lightslategray: \"789\",\n  lightslategrey: \"789\",\n  lightsteelblue: \"b0c4de\",\n  lightyellow: \"ffffe0\",\n  lime: \"0f0\",\n  limegreen: \"32cd32\",\n  linen: \"faf0e6\",\n  magenta: \"f0f\",\n  maroon: \"800000\",\n  mediumaquamarine: \"66cdaa\",\n  mediumblue: \"0000cd\",\n  mediumorchid: \"ba55d3\",\n  mediumpurple: \"9370db\",\n  mediumseagreen: \"3cb371\",\n  mediumslateblue: \"7b68ee\",\n  mediumspringgreen: \"00fa9a\",\n  mediumturquoise: \"48d1cc\",\n  mediumvioletred: \"c71585\",\n  midnightblue: \"191970\",\n  mintcream: \"f5fffa\",\n  mistyrose: \"ffe4e1\",\n  moccasin: \"ffe4b5\",\n  navajowhite: \"ffdead\",\n  navy: \"000080\",\n  oldlace: \"fdf5e6\",\n  olive: \"808000\",\n  olivedrab: \"6b8e23\",\n  orange: \"ffa500\",\n  orangered: \"ff4500\",\n  orchid: \"da70d6\",\n  palegoldenrod: \"eee8aa\",\n  palegreen: \"98fb98\",\n  paleturquoise: \"afeeee\",\n  palevioletred: \"db7093\",\n  papayawhip: \"ffefd5\",\n  peachpuff: \"ffdab9\",\n  peru: \"cd853f\",\n  pink: \"ffc0cb\",\n  plum: \"dda0dd\",\n  powderblue: \"b0e0e6\",\n  purple: \"800080\",\n  rebeccapurple: \"663399\",\n  red: \"f00\",\n  rosybrown: \"bc8f8f\",\n  royalblue: \"4169e1\",\n  saddlebrown: \"8b4513\",\n  salmon: \"fa8072\",\n  sandybrown: \"f4a460\",\n  seagreen: \"2e8b57\",\n  seashell: \"fff5ee\",\n  sienna: \"a0522d\",\n  silver: \"c0c0c0\",\n  skyblue: \"87ceeb\",\n  slateblue: \"6a5acd\",\n  slategray: \"708090\",\n  slategrey: \"708090\",\n  snow: \"fffafa\",\n  springgreen: \"00ff7f\",\n  steelblue: \"4682b4\",\n  tan: \"d2b48c\",\n  teal: \"008080\",\n  thistle: \"d8bfd8\",\n  tomato: \"ff6347\",\n  turquoise: \"40e0d0\",\n  violet: \"ee82ee\",\n  wheat: \"f5deb3\",\n  white: \"fff\",\n  whitesmoke: \"f5f5f5\",\n  yellow: \"ff0\",\n  yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n  var flipped = {};\n  for (var i in o) {\n    if (o.hasOwnProperty(i)) {\n      flipped[o[i]] = i;\n    }\n  }\n  return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n  a = parseFloat(a);\n  if (isNaN(a) || a < 0 || a > 1) {\n    a = 1;\n  }\n  return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n  if (isOnePointZero(n)) n = \"100%\";\n  var processPercent = isPercentage(n);\n  n = Math.min(max, Math.max(0, parseFloat(n)));\n\n  // Automatically convert percentage into number\n  if (processPercent) {\n    n = parseInt(n * max, 10) / 100;\n  }\n\n  // Handle floating point rounding errors\n  if (Math.abs(n - max) < 0.000001) {\n    return 1;\n  }\n\n  // Convert into [0, 1] range if it isn't already\n  return n % max / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n  return Math.min(1, Math.max(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n  return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nfunction isOnePointZero(n) {\n  return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n  return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n  return c.length == 1 ? \"0\" + c : \"\" + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n  if (n <= 1) {\n    n = n * 100 + \"%\";\n  }\n  return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n  return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n  return parseIntFromHex(h) / 255;\n}\nvar matchers = function () {\n  // <http://www.w3.org/TR/css3-values/#integers>\n  var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n  // <http://www.w3.org/TR/css3-values/#number-value>\n  var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n  // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.\n  var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n  // Actual matching.\n  // Parentheses and commas are optional, but not required.\n  // Whitespace can take the place of commas or opening paren\n  var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n  var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n  return {\n    CSS_UNIT: new RegExp(CSS_UNIT),\n    rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n    rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n    hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n    hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n    hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n    hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n    hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n    hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n    hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n    hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n  };\n}();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n  return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing.  Take in a number of formats, and output an object\n// based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n  color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n  var named = false;\n  if (names[color]) {\n    color = names[color];\n    named = true;\n  } else if (color == \"transparent\") {\n    return {\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 0,\n      format: \"name\"\n    };\n  }\n\n  // Try to match string input using regular expressions.\n  // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n  // Just return an object and let the conversion functions handle that.\n  // This way the result will be the same whether the tinycolor is initialized with string or object.\n  var match;\n  if (match = matchers.rgb.exec(color)) {\n    return {\n      r: match[1],\n      g: match[2],\n      b: match[3]\n    };\n  }\n  if (match = matchers.rgba.exec(color)) {\n    return {\n      r: match[1],\n      g: match[2],\n      b: match[3],\n      a: match[4]\n    };\n  }\n  if (match = matchers.hsl.exec(color)) {\n    return {\n      h: match[1],\n      s: match[2],\n      l: match[3]\n    };\n  }\n  if (match = matchers.hsla.exec(color)) {\n    return {\n      h: match[1],\n      s: match[2],\n      l: match[3],\n      a: match[4]\n    };\n  }\n  if (match = matchers.hsv.exec(color)) {\n    return {\n      h: match[1],\n      s: match[2],\n      v: match[3]\n    };\n  }\n  if (match = matchers.hsva.exec(color)) {\n    return {\n      h: match[1],\n      s: match[2],\n      v: match[3],\n      a: match[4]\n    };\n  }\n  if (match = matchers.hex8.exec(color)) {\n    return {\n      r: parseIntFromHex(match[1]),\n      g: parseIntFromHex(match[2]),\n      b: parseIntFromHex(match[3]),\n      a: convertHexToDecimal(match[4]),\n      format: named ? \"name\" : \"hex8\"\n    };\n  }\n  if (match = matchers.hex6.exec(color)) {\n    return {\n      r: parseIntFromHex(match[1]),\n      g: parseIntFromHex(match[2]),\n      b: parseIntFromHex(match[3]),\n      format: named ? \"name\" : \"hex\"\n    };\n  }\n  if (match = matchers.hex4.exec(color)) {\n    return {\n      r: parseIntFromHex(match[1] + \"\" + match[1]),\n      g: parseIntFromHex(match[2] + \"\" + match[2]),\n      b: parseIntFromHex(match[3] + \"\" + match[3]),\n      a: convertHexToDecimal(match[4] + \"\" + match[4]),\n      format: named ? \"name\" : \"hex8\"\n    };\n  }\n  if (match = matchers.hex3.exec(color)) {\n    return {\n      r: parseIntFromHex(match[1] + \"\" + match[1]),\n      g: parseIntFromHex(match[2] + \"\" + match[2]),\n      b: parseIntFromHex(match[3] + \"\" + match[3]),\n      format: named ? \"name\" : \"hex\"\n    };\n  }\n  return false;\n}\nfunction validateWCAG2Parms(parms) {\n  // return valid WCAG2 parms for isReadable.\n  // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n  var level, size;\n  parms = parms || {\n    level: \"AA\",\n    size: \"small\"\n  };\n  level = (parms.level || \"AA\").toUpperCase();\n  size = (parms.size || \"small\").toLowerCase();\n  if (level !== \"AA\" && level !== \"AAA\") {\n    level = \"AA\";\n  }\n  if (size !== \"small\" && size !== \"large\") {\n    size = \"small\";\n  }\n  return {\n    level: level,\n    size: size\n  };\n}\n\nexport { tinycolor as default };\n","import accessorFn from 'accessor-fn';\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _assertClassBrand(e, t, n) {\n  if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n  throw new TypeError(\"Private element is not present on this object\");\n}\nfunction _checkPrivateRedeclaration(e, t) {\n  if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n}\nfunction _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _classPrivateFieldGet2(s, a) {\n  return s.get(_assertClassBrand(s, a));\n}\nfunction _classPrivateFieldInitSpec(e, t, a) {\n  _checkPrivateRedeclaration(e, t), t.set(e, a);\n}\nfunction _classPrivateFieldSet2(s, a, r) {\n  return s.set(_assertClassBrand(s, a), r), r;\n}\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || false, o.configurable = true, \"value\" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), Object.defineProperty(e, \"prototype\", {\n    writable: false\n  }), e;\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (String )(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar _dataMap = /*#__PURE__*/new WeakMap();\nvar _objMap = /*#__PURE__*/new WeakMap();\nvar _id = /*#__PURE__*/new WeakMap();\nvar _createObj = /*#__PURE__*/new WeakMap();\nvar _updateObj = /*#__PURE__*/new WeakMap();\nvar _removeObj = /*#__PURE__*/new WeakMap();\nvar DataBindMapper = /*#__PURE__*/function () {\n  function DataBindMapper() {\n    _classCallCheck(this, DataBindMapper);\n    _classPrivateFieldInitSpec(this, _dataMap, new Map());\n    _classPrivateFieldInitSpec(this, _objMap, new Map());\n    _classPrivateFieldInitSpec(this, _id, function (d) {\n      return d;\n    });\n    _classPrivateFieldInitSpec(this, _createObj, function () {\n      return {};\n    });\n    _classPrivateFieldInitSpec(this, _updateObj, function () {});\n    _classPrivateFieldInitSpec(this, _removeObj, function () {});\n  }\n  return _createClass(DataBindMapper, [{\n    key: \"getObj\",\n    value: function getObj(d) {\n      return _classPrivateFieldGet2(_dataMap, this).get(_classPrivateFieldGet2(_id, this).call(this, d));\n    }\n  }, {\n    key: \"getData\",\n    value: function getData(o) {\n      return _classPrivateFieldGet2(_objMap, this).get(o);\n    }\n  }, {\n    key: \"entries\",\n    value: function entries() {\n      return _toConsumableArray(_classPrivateFieldGet2(_objMap, this).entries()).map(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n          o = _ref2[0],\n          d = _ref2[1];\n        return [d, o];\n      });\n    }\n  }, {\n    key: \"id\",\n    value: function id(p) {\n      _classPrivateFieldSet2(_id, this, accessorFn(p));\n      return this;\n    }\n  }, {\n    key: \"onCreateObj\",\n    value: function onCreateObj(fn) {\n      _classPrivateFieldSet2(_createObj, this, fn);\n      return this;\n    }\n  }, {\n    key: \"onUpdateObj\",\n    value: function onUpdateObj(fn) {\n      _classPrivateFieldSet2(_updateObj, this, fn);\n      return this;\n    }\n  }, {\n    key: \"onRemoveObj\",\n    value: function onRemoveObj(fn) {\n      _classPrivateFieldSet2(_removeObj, this, fn);\n      return this;\n    }\n  }, {\n    key: \"digest\",\n    value: function digest(data) {\n      var _this = this;\n      data.filter(function (d) {\n        return !_classPrivateFieldGet2(_dataMap, _this).has(_classPrivateFieldGet2(_id, _this).call(_this, d));\n      }).forEach(function (d) {\n        var obj = _classPrivateFieldGet2(_createObj, _this).call(_this, d);\n        _classPrivateFieldGet2(_dataMap, _this).set(_classPrivateFieldGet2(_id, _this).call(_this, d), obj);\n        _classPrivateFieldGet2(_objMap, _this).set(obj, d);\n      });\n      var dataIdsMap = new Map(data.map(function (d) {\n        return [_classPrivateFieldGet2(_id, _this).call(_this, d), d];\n      }));\n      _classPrivateFieldGet2(_dataMap, this).forEach(function (o, dId) {\n        if (!dataIdsMap.has(dId)) {\n          _classPrivateFieldGet2(_removeObj, _this).call(_this, o, dId);\n          _classPrivateFieldGet2(_dataMap, _this)[\"delete\"](dId);\n          _classPrivateFieldGet2(_objMap, _this)[\"delete\"](o);\n        } else {\n          _classPrivateFieldGet2(_updateObj, _this).call(_this, o, dataIdsMap.get(dId));\n        }\n      });\n      return this;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.digest([]);\n      return this;\n    }\n  }]);\n}();\n\nexport { DataBindMapper as default };\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"FrameTicker\",[],t):\"object\"==typeof exports?exports.FrameTicker=t():e.FrameTicker=t()}(this,function(){return function(e){function t(n){if(i[n])return i[n].exports;var r=i[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var i={};return t.m=e,t.c=i,t.p=\"\",t(0)}([function(e,t,i){\"use strict\";var n=i(1),r=function(){function e(e,t,i){void 0===e&&(e=NaN),void 0===t&&(t=NaN),void 0===i&&(i=!1),this._minFPS=t,this._maxFPS=e,this._timeScale=1,this._currentTick=0,this._currentTime=0,this._tickDeltaTime=0,this._isRunning=!1,this._maxInterval=isNaN(this._minFPS)?NaN:1e3/this._minFPS,this._minInterval=isNaN(this._maxFPS)?NaN:1e3/this._maxFPS,this._onResume=new n.default,this._onPause=new n.default,this._onTick=new n.default,this._onTickOncePerFrame=new n.default,i||this.resume()}return e.prototype.updateOnce=function(e){e(this.currentTimeSeconds,this.tickDeltaTimeSeconds,this.currentTick)},e.prototype.resume=function(){this._isRunning||(this._isRunning=!0,this._lastTimeUpdated=this.getTimer(),this._onResume.dispatch(),this.animateOnce())},e.prototype.pause=function(){this._isRunning&&(this._isRunning=!1,this._onPause.dispatch(),window.cancelAnimationFrame(this._animationFrameHandle))},e.prototype.dispose=function(){this.pause(),this._onResume.removeAll(),this._onPause.removeAll(),this._onTick.removeAll()},Object.defineProperty(e.prototype,\"currentTick\",{get:function(){return this._currentTick},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"currentTimeSeconds\",{get:function(){return this._currentTime/1e3},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"tickDeltaTimeSeconds\",{get:function(){return this._tickDeltaTime/1e3},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"timeScale\",{get:function(){return this._timeScale},set:function(e){this._timeScale!==e&&(this._timeScale=e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"onResume\",{get:function(){return this._onResume},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"onPause\",{get:function(){return this._onPause},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"onTick\",{get:function(){return this._onTick},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"onTickOncePerFrame\",{get:function(){return this._onTickOncePerFrame},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isRunning\",{get:function(){return this._isRunning},enumerable:!0,configurable:!0}),e.prototype.animateOnce=function(){var e=this;this._animationFrameHandle=window.requestAnimationFrame(function(){return e.onFrame()})},e.prototype.onFrame=function(){if(this._now=this.getTimer(),this._frameDeltaTime=this._now-this._lastTimeUpdated,isNaN(this._minInterval)||this._frameDeltaTime>=this._minInterval)if(isNaN(this._maxInterval))this.update(this._frameDeltaTime*this._timeScale,!0),this._lastTimeUpdated=this._now;else for(this._interval=Math.min(this._frameDeltaTime,this._maxInterval);this._now>=this._lastTimeUpdated+this._interval;)this.update(this._interval*this._timeScale,this._now<=this._lastTimeUpdated+2*this._maxInterval),this._lastTimeUpdated+=this._interval;this._isRunning&&this.animateOnce()},e.prototype.update=function(e,t){void 0===t&&(t=!0),this._currentTick++,this._currentTime+=e,this._tickDeltaTime=e,this._onTick.dispatch(this.currentTimeSeconds,this.tickDeltaTimeSeconds,this.currentTick),t&&this._onTickOncePerFrame.dispatch(this.currentTimeSeconds,this.tickDeltaTimeSeconds,this.currentTick)},e.prototype.getTimer=function(){return Date.now()},e}();Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=r},function(e,t,i){!function(t,i){e.exports=i()}(this,function(){return function(e){function t(n){if(i[n])return i[n].exports;var r=i[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var i={};return t.m=e,t.c=i,t.p=\"\",t(0)}([function(e,t){\"use strict\";var i=function(){function e(){this.functions=[]}return e.prototype.add=function(e){return this.functions.indexOf(e)===-1&&(this.functions.push(e),!0)},e.prototype.remove=function(e){var t=this.functions.indexOf(e);return t>-1&&(this.functions.splice(t,1),!0)},e.prototype.removeAll=function(){return this.functions.length>0&&(this.functions.length=0,!0)},e.prototype.dispatch=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var i=this.functions.concat();i.forEach(function(t){t.apply(void 0,e)})},Object.defineProperty(e.prototype,\"numItems\",{get:function(){return this.functions.length},enumerable:!0,configurable:!0}),e}();Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=i}])})}])});","export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from original code\nexport function sum(elen, e, flen, f, h) {\n    let Q, Qnew, hh, bvirt;\n    let enow = e[0];\n    let fnow = f[0];\n    let eindex = 0;\n    let findex = 0;\n    if ((fnow > enow) === (fnow > -enow)) {\n        Q = enow;\n        enow = e[++eindex];\n    } else {\n        Q = fnow;\n        fnow = f[++findex];\n    }\n    let hindex = 0;\n    if (eindex < elen && findex < flen) {\n        if ((fnow > enow) === (fnow > -enow)) {\n            Qnew = enow + Q;\n            hh = Q - (Qnew - enow);\n            enow = e[++eindex];\n        } else {\n            Qnew = fnow + Q;\n            hh = Q - (Qnew - fnow);\n            fnow = f[++findex];\n        }\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        while (eindex < elen && findex < flen) {\n            if ((fnow > enow) === (fnow > -enow)) {\n                Qnew = Q + enow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (enow - bvirt);\n                enow = e[++eindex];\n            } else {\n                Qnew = Q + fnow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n                fnow = f[++findex];\n            }\n            Q = Qnew;\n            if (hh !== 0) {\n                h[hindex++] = hh;\n            }\n        }\n    }\n    while (eindex < elen) {\n        Qnew = Q + enow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (enow - bvirt);\n        enow = e[++eindex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    while (findex < flen) {\n        Qnew = Q + fnow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n        fnow = f[++findex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n    return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n    let Q, sum, hh, product1, product0;\n    let bvirt, c, ahi, alo, bhi, blo;\n\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    let enow = e[0];\n    Q = enow * b;\n    c = splitter * enow;\n    ahi = c - (c - enow);\n    alo = enow - ahi;\n    hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n    let hindex = 0;\n    if (hh !== 0) {\n        h[hindex++] = hh;\n    }\n    for (let i = 1; i < elen; i++) {\n        enow = e[i];\n        product1 = enow * b;\n        c = splitter * enow;\n        ahi = c - (c - enow);\n        alo = enow - ahi;\n        product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n        sum = Q + product0;\n        bvirt = sum - Q;\n        hh = Q - (sum - bvirt) + (product0 - bvirt);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        Q = product1 + sum;\n        hh = sum - (Q - product1);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function negate(elen, e) {\n    for (let i = 0; i < elen; i++) e[i] = -e[i];\n    return elen;\n}\n\nexport function estimate(elen, e) {\n    let Q = e[0];\n    for (let i = 1; i < elen; i++) Q += e[i];\n    return Q;\n}\n\nexport function vec(n) {\n    return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n    let acxtail, acytail, bcxtail, bcytail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const acx = ax - cx;\n    const bcx = bx - cx;\n    const acy = ay - cy;\n    const bcy = by - cy;\n\n    s1 = acx * bcy;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcx;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    B[3] = u3;\n\n    let det = estimate(4, B);\n    let errbound = ccwerrboundB * detsum;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - acx;\n    acxtail = ax - (acx + bvirt) + (bvirt - cx);\n    bvirt = bx - bcx;\n    bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n    bvirt = ay - acy;\n    acytail = ay - (acy + bvirt) + (bvirt - cy);\n    bvirt = by - bcy;\n    bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n    if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n        return det;\n    }\n\n    errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n    det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n    if (det >= errbound || -det >= errbound) return det;\n\n    s1 = acxtail * bcy;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcx;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C1len = sum(4, B, 4, u, C1);\n\n    s1 = acx * bcytail;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcxtail;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C2len = sum(C1len, C1, 4, u, C2);\n\n    s1 = acxtail * bcytail;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcxtail;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const Dlen = sum(C2len, C2, 4, u, D);\n\n    return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n    const detleft = (ay - cy) * (bx - cx);\n    const detright = (ax - cx) * (by - cy);\n    const det = detleft - detright;\n\n    const detsum = Math.abs(detleft + detright);\n    if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n    return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n    return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nimport {orient2d} from 'robust-predicates';\n\n/** @template {ArrayLike<number>} T */\nexport default class Delaunator {\n\n    /**\n     * Constructs a delaunay triangulation object given an array of points (`[x, y]` by default).\n     * `getX` and `getY` are optional functions of the form `(point) => value` for custom point formats.\n     *\n     * @template P\n     * @param {P[]} points\n     * @param {(p: P) => number} [getX]\n     * @param {(p: P) => number} [getY]\n     */\n    // @ts-expect-error TS2322\n    static from(points, getX = defaultGetX, getY = defaultGetY) {\n        const n = points.length;\n        const coords = new Float64Array(n * 2);\n\n        for (let i = 0; i < n; i++) {\n            const p = points[i];\n            coords[2 * i] = getX(p);\n            coords[2 * i + 1] = getY(p);\n        }\n\n        return new Delaunator(coords);\n    }\n\n    /**\n     * Constructs a delaunay triangulation object given an array of point coordinates of the form:\n     * `[x0, y0, x1, y1, ...]` (use a typed array for best performance). Duplicate points are skipped.\n     *\n     * @param {T} coords\n     */\n    constructor(coords) {\n        const n = coords.length >> 1;\n        if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n        this.coords = coords;\n\n        // arrays that will store the triangulation graph\n        const maxTriangles = Math.max(2 * n - 5, 0);\n        /** @private */ this._triangles = new Uint32Array(maxTriangles * 3);\n        /** @private */ this._halfedges = new Int32Array(maxTriangles * 3);\n\n        // temporary arrays for tracking the edges of the advancing convex hull\n        /** @private */ this._hashSize = Math.ceil(Math.sqrt(n));\n        /** @private */ this._hullPrev = new Uint32Array(n); // edge to prev edge\n        /** @private */ this._hullNext = new Uint32Array(n); // edge to next edge\n        /** @private */ this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n        /** @private */ this._hullHash = new Int32Array(this._hashSize); // angular edge hash\n\n        // temporary arrays for sorting points\n        /** @private */ this._ids = new Uint32Array(n);\n        /** @private */ this._dists = new Float64Array(n);\n\n        /** @private */ this.trianglesLen = 0;\n        /** @private */ this._cx = 0;\n        /** @private */ this._cy = 0;\n        /** @private */ this._hullStart = 0;\n\n\n        /** A `Uint32Array` array of indices that reference points on the convex hull of the input data, counter-clockwise. */\n        this.hull = this._triangles;\n        /** A `Uint32Array` array of triangle vertex indices (each group of three numbers forms a triangle). All triangles are directed counterclockwise. */\n        this.triangles = this._triangles;\n        /**\n         * A `Int32Array` array of triangle half-edge indices that allows you to traverse the triangulation.\n         * `i`-th half-edge in the array corresponds to vertex `triangles[i]` the half-edge is coming from.\n         * `halfedges[i]` is the index of a twin half-edge in an adjacent triangle (or `-1` for outer half-edges on the convex hull).\n         */\n        this.halfedges = this._halfedges;\n\n        this.update();\n    }\n\n    /**\n     * Updates the triangulation if you modified `delaunay.coords` values in place, avoiding expensive memory allocations.\n     * Useful for iterative relaxation algorithms such as Lloyd's.\n     */\n    update() {\n        const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} =  this;\n        const n = coords.length >> 1;\n\n        // populate an array of point indices; calculate input data bbox\n        let minX = Infinity;\n        let minY = Infinity;\n        let maxX = -Infinity;\n        let maxY = -Infinity;\n\n        for (let i = 0; i < n; i++) {\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n            this._ids[i] = i;\n        }\n        const cx = (minX + maxX) / 2;\n        const cy = (minY + maxY) / 2;\n\n        let i0 = 0, i1 = 0, i2 = 0;\n\n        // pick a seed point close to the center\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist) {\n                i0 = i;\n                minDist = d;\n            }\n        }\n        const i0x = coords[2 * i0];\n        const i0y = coords[2 * i0 + 1];\n\n        // find the point closest to the seed\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            if (i === i0) continue;\n            const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist && d > 0) {\n                i1 = i;\n                minDist = d;\n            }\n        }\n        let i1x = coords[2 * i1];\n        let i1y = coords[2 * i1 + 1];\n\n        let minRadius = Infinity;\n\n        // find the third point which forms the smallest circumcircle with the first two\n        for (let i = 0; i < n; i++) {\n            if (i === i0 || i === i1) continue;\n            const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n            if (r < minRadius) {\n                i2 = i;\n                minRadius = r;\n            }\n        }\n        let i2x = coords[2 * i2];\n        let i2y = coords[2 * i2 + 1];\n\n        if (minRadius === Infinity) {\n            // order collinear points by dx (or dy if all x are identical)\n            // and return the list as a hull\n            for (let i = 0; i < n; i++) {\n                this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n            }\n            quicksort(this._ids, this._dists, 0, n - 1);\n            const hull = new Uint32Array(n);\n            let j = 0;\n            for (let i = 0, d0 = -Infinity; i < n; i++) {\n                const id = this._ids[i];\n                const d = this._dists[id];\n                if (d > d0) {\n                    hull[j++] = id;\n                    d0 = d;\n                }\n            }\n            this.hull = hull.subarray(0, j);\n            this.triangles = new Uint32Array(0);\n            this.halfedges = new Int32Array(0);\n            return;\n        }\n\n        // swap the order of the seed points for counter-clockwise orientation\n        if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n            const i = i1;\n            const x = i1x;\n            const y = i1y;\n            i1 = i2;\n            i1x = i2x;\n            i1y = i2y;\n            i2 = i;\n            i2x = x;\n            i2y = y;\n        }\n\n        const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n        this._cx = center.x;\n        this._cy = center.y;\n\n        for (let i = 0; i < n; i++) {\n            this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n        }\n\n        // sort the points by distance from the seed triangle circumcenter\n        quicksort(this._ids, this._dists, 0, n - 1);\n\n        // set up the seed triangle as the starting hull\n        this._hullStart = i0;\n        let hullSize = 3;\n\n        hullNext[i0] = hullPrev[i2] = i1;\n        hullNext[i1] = hullPrev[i0] = i2;\n        hullNext[i2] = hullPrev[i1] = i0;\n\n        hullTri[i0] = 0;\n        hullTri[i1] = 1;\n        hullTri[i2] = 2;\n\n        hullHash.fill(-1);\n        hullHash[this._hashKey(i0x, i0y)] = i0;\n        hullHash[this._hashKey(i1x, i1y)] = i1;\n        hullHash[this._hashKey(i2x, i2y)] = i2;\n\n        this.trianglesLen = 0;\n        this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n        for (let k = 0, xp = 0, yp = 0; k < this._ids.length; k++) {\n            const i = this._ids[k];\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n\n            // skip near-duplicate points\n            if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n            xp = x;\n            yp = y;\n\n            // skip seed triangle points\n            if (i === i0 || i === i1 || i === i2) continue;\n\n            // find a visible edge on the convex hull using edge hash\n            let start = 0;\n            for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n                start = hullHash[(key + j) % this._hashSize];\n                if (start !== -1 && start !== hullNext[start]) break;\n            }\n\n            start = hullPrev[start];\n            let e = start, q;\n            while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n                e = q;\n                if (e === start) {\n                    e = -1;\n                    break;\n                }\n            }\n            if (e === -1) continue; // likely a near-duplicate point; skip it\n\n            // add the first triangle from the point\n            let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n            // recursively flip triangles from the point until they satisfy the Delaunay condition\n            hullTri[i] = this._legalize(t + 2);\n            hullTri[e] = t; // keep track of boundary triangles on the hull\n            hullSize++;\n\n            // walk forward through the hull, adding more triangles and flipping recursively\n            let n = hullNext[e];\n            while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n                t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n                hullTri[i] = this._legalize(t + 2);\n                hullNext[n] = n; // mark as removed\n                hullSize--;\n                n = q;\n            }\n\n            // walk backward from the other side, adding more triangles and flipping\n            if (e === start) {\n                while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n                    t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n                    this._legalize(t + 2);\n                    hullTri[q] = t;\n                    hullNext[e] = e; // mark as removed\n                    hullSize--;\n                    e = q;\n                }\n            }\n\n            // update the hull indices\n            this._hullStart = hullPrev[i] = e;\n            hullNext[e] = hullPrev[n] = i;\n            hullNext[i] = n;\n\n            // save the two new edges in the hash table\n            hullHash[this._hashKey(x, y)] = i;\n            hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n        }\n\n        this.hull = new Uint32Array(hullSize);\n        for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n            this.hull[i] = e;\n            e = hullNext[e];\n        }\n\n        // trim typed triangle mesh arrays\n        this.triangles = this._triangles.subarray(0, this.trianglesLen);\n        this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n    }\n\n    /**\n     * Calculate an angle-based key for the edge hash used for advancing convex hull.\n     *\n     * @param {number} x\n     * @param {number} y\n     * @private\n     */\n    _hashKey(x, y) {\n        return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n    }\n\n    /**\n     * Flip an edge in a pair of triangles if it doesn't satisfy the Delaunay condition.\n     *\n     * @param {number} a\n     * @private\n     */\n    _legalize(a) {\n        const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n        let i = 0;\n        let ar = 0;\n\n        // recursion eliminated with a fixed-size stack\n        while (true) {\n            const b = halfedges[a];\n\n            /* if the pair of triangles doesn't satisfy the Delaunay condition\n             * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n             * then do the same check/flip recursively for the new pair of triangles\n             *\n             *           pl                    pl\n             *          /||\\                  /  \\\n             *       al/ || \\bl            al/    \\a\n             *        /  ||  \\              /      \\\n             *       /  a||b  \\    flip    /___ar___\\\n             *     p0\\   ||   /p1   =>   p0\\---bl---/p1\n             *        \\  ||  /              \\      /\n             *       ar\\ || /br             b\\    /br\n             *          \\||/                  \\  /\n             *           pr                    pr\n             */\n            const a0 = a - a % 3;\n            ar = a0 + (a + 2) % 3;\n\n            if (b === -1) { // convex hull edge\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n                continue;\n            }\n\n            const b0 = b - b % 3;\n            const al = a0 + (a + 1) % 3;\n            const bl = b0 + (b + 2) % 3;\n\n            const p0 = triangles[ar];\n            const pr = triangles[a];\n            const pl = triangles[al];\n            const p1 = triangles[bl];\n\n            const illegal = inCircle(\n                coords[2 * p0], coords[2 * p0 + 1],\n                coords[2 * pr], coords[2 * pr + 1],\n                coords[2 * pl], coords[2 * pl + 1],\n                coords[2 * p1], coords[2 * p1 + 1]);\n\n            if (illegal) {\n                triangles[a] = p1;\n                triangles[b] = p0;\n\n                const hbl = halfedges[bl];\n\n                // edge swapped on the other side of the hull (rare); fix the half-edge reference\n                if (hbl === -1) {\n                    let e = this._hullStart;\n                    do {\n                        if (this._hullTri[e] === bl) {\n                            this._hullTri[e] = a;\n                            break;\n                        }\n                        e = this._hullPrev[e];\n                    } while (e !== this._hullStart);\n                }\n                this._link(a, hbl);\n                this._link(b, halfedges[ar]);\n                this._link(ar, bl);\n\n                const br = b0 + (b + 1) % 3;\n\n                // don't worry about hitting the cap: it can only happen on extremely degenerate input\n                if (i < EDGE_STACK.length) {\n                    EDGE_STACK[i++] = br;\n                }\n            } else {\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n            }\n        }\n\n        return ar;\n    }\n\n    /**\n     * Link two half-edges to each other.\n     * @param {number} a\n     * @param {number} b\n     * @private\n     */\n    _link(a, b) {\n        this._halfedges[a] = b;\n        if (b !== -1) this._halfedges[b] = a;\n    }\n\n    /**\n     * Add a new triangle given vertex indices and adjacent half-edge ids.\n     *\n     * @param {number} i0\n     * @param {number} i1\n     * @param {number} i2\n     * @param {number} a\n     * @param {number} b\n     * @param {number} c\n     * @private\n     */\n    _addTriangle(i0, i1, i2, a, b, c) {\n        const t = this.trianglesLen;\n\n        this._triangles[t] = i0;\n        this._triangles[t + 1] = i1;\n        this._triangles[t + 2] = i2;\n\n        this._link(t, a);\n        this._link(t + 1, b);\n        this._link(t + 2, c);\n\n        this.trianglesLen += 3;\n\n        return t;\n    }\n}\n\n/**\n * Monotonically increases with real angle, but doesn't need expensive trigonometry.\n *\n * @param {number} dx\n * @param {number} dy\n */\nfunction pseudoAngle(dx, dy) {\n    const p = dx / (Math.abs(dx) + Math.abs(dy));\n    return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\n/**\n * Squared distance between two points.\n *\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n */\nfunction dist(ax, ay, bx, by) {\n    const dx = ax - bx;\n    const dy = ay - by;\n    return dx * dx + dy * dy;\n}\n\n/**\n * Check whether point P is inside a circle formed by points A, B, C.\n *\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n * @param {number} cx\n * @param {number} cy\n * @param {number} px\n * @param {number} py\n */\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n    const dx = ax - px;\n    const dy = ay - py;\n    const ex = bx - px;\n    const ey = by - py;\n    const fx = cx - px;\n    const fy = cy - py;\n\n    const ap = dx * dx + dy * dy;\n    const bp = ex * ex + ey * ey;\n    const cp = fx * fx + fy * fy;\n\n    return dx * (ey * cp - bp * fy) -\n           dy * (ex * cp - bp * fx) +\n           ap * (ex * fy - ey * fx) < 0;\n}\n\n/**\n * Squared radius of the circle formed by points A, B, C.\n *\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n * @param {number} cx\n * @param {number} cy\n */\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = (ey * bl - dy * cl) * d;\n    const y = (dx * cl - ex * bl) * d;\n\n    return x * x + y * y;\n}\n\n/**\n * Get coordinates of a circumcenter for points A, B, C.\n *\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n * @param {number} cx\n * @param {number} cy\n */\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = ax + (ey * bl - dy * cl) * d;\n    const y = ay + (dx * cl - ex * bl) * d;\n\n    return {x, y};\n}\n\n/**\n * Sort points by distance via an array of point indices and an array of calculated distances.\n *\n * @param {Uint32Array} ids\n * @param {Float64Array} dists\n * @param {number} left\n * @param {number} right\n */\nfunction quicksort(ids, dists, left, right) {\n    if (right - left <= 20) {\n        for (let i = left + 1; i <= right; i++) {\n            const temp = ids[i];\n            const tempDist = dists[temp];\n            let j = i - 1;\n            while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n            ids[j + 1] = temp;\n        }\n    } else {\n        const median = (left + right) >> 1;\n        let i = left + 1;\n        let j = right;\n        swap(ids, median, i);\n        if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n        if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n        if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n        const temp = ids[i];\n        const tempDist = dists[temp];\n        while (true) {\n            do i++; while (dists[ids[i]] < tempDist);\n            do j--; while (dists[ids[j]] > tempDist);\n            if (j < i) break;\n            swap(ids, i, j);\n        }\n        ids[left + 1] = ids[j];\n        ids[j] = temp;\n\n        if (right - i + 1 >= j - left) {\n            quicksort(ids, dists, i, right);\n            quicksort(ids, dists, left, j - 1);\n        } else {\n            quicksort(ids, dists, left, j - 1);\n            quicksort(ids, dists, i, right);\n        }\n    }\n}\n\n/**\n * @param {Uint32Array} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\n/** @param {[number, number]} p */\nfunction defaultGetX(p) {\n    return p[0];\n}\n/** @param {[number, number]} p */\nfunction defaultGetY(p) {\n    return p[1];\n}\n","import { orient2d } from 'robust-predicates';\n\nfunction pointInPolygon(p, polygon) {\n    var i;\n    var ii;\n    var k = 0;\n    var f;\n    var u1;\n    var v1;\n    var u2;\n    var v2;\n    var currentP;\n    var nextP;\n\n    var x = p[0];\n    var y = p[1];\n\n    var numContours = polygon.length;\n    for (i = 0; i < numContours; i++) {\n        ii = 0;\n        var contour = polygon[i];\n        var contourLen = contour.length - 1;\n\n        currentP = contour[0];\n        if (currentP[0] !== contour[contourLen][0] &&\n            currentP[1] !== contour[contourLen][1]) {\n            throw new Error('First and last coordinates in a ring must be the same')\n        }\n\n        u1 = currentP[0] - x;\n        v1 = currentP[1] - y;\n\n        for (ii; ii < contourLen; ii++) {\n            nextP = contour[ii + 1];\n\n            u2 = nextP[0] - x;\n            v2 = nextP[1] - y;\n\n            if (v1 === 0 && v2 === 0) {\n                if ((u2 <= 0 && u1 >= 0) || (u1 <= 0 && u2 >= 0)) { return 0 }\n            } else if ((v2 >= 0 && v1 <= 0) || (v2 <= 0 && v1 >= 0)) {\n                f = orient2d(u1, u2, v1, v2, 0, 0);\n                if (f === 0) { return 0 }\n                if ((f > 0 && v2 > 0 && v1 <= 0) || (f < 0 && v2 <= 0 && v1 > 0)) { k++; }\n            }\n            currentP = nextP;\n            v1 = v2;\n            u1 = u2;\n        }\n    }\n\n    if (k % 2 === 0) { return false }\n    return true\n}\n\nexport { pointInPolygon as default };\n","// index.ts\nimport { isNumber } from \"@turf/helpers\";\nfunction getCoord(coord) {\n  if (!coord) {\n    throw new Error(\"coord is required\");\n  }\n  if (!Array.isArray(coord)) {\n    if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n      return [...coord.geometry.coordinates];\n    }\n    if (coord.type === \"Point\") {\n      return [...coord.coordinates];\n    }\n  }\n  if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n    return [...coord];\n  }\n  throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nfunction getCoords(coords) {\n  if (Array.isArray(coords)) {\n    return coords;\n  }\n  if (coords.type === \"Feature\") {\n    if (coords.geometry !== null) {\n      return coords.geometry.coordinates;\n    }\n  } else {\n    if (coords.coordinates) {\n      return coords.coordinates;\n    }\n  }\n  throw new Error(\n    \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n  );\n}\nfunction containsNumber(coordinates) {\n  if (coordinates.length > 1 && isNumber(coordinates[0]) && isNumber(coordinates[1])) {\n    return true;\n  }\n  if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n    return containsNumber(coordinates[0]);\n  }\n  throw new Error(\"coordinates must only contain numbers\");\n}\nfunction geojsonType(value, type, name) {\n  if (!type || !name) {\n    throw new Error(\"type and name required\");\n  }\n  if (!value || value.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type\n    );\n  }\n}\nfunction featureOf(feature, type, name) {\n  if (!feature) {\n    throw new Error(\"No feature passed\");\n  }\n  if (!name) {\n    throw new Error(\".featureOf() requires a name\");\n  }\n  if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n    throw new Error(\n      \"Invalid input to \" + name + \", Feature with geometry required\"\n    );\n  }\n  if (!feature.geometry || feature.geometry.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n    );\n  }\n}\nfunction collectionOf(featureCollection, type, name) {\n  if (!featureCollection) {\n    throw new Error(\"No featureCollection passed\");\n  }\n  if (!name) {\n    throw new Error(\".collectionOf() requires a name\");\n  }\n  if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n    throw new Error(\n      \"Invalid input to \" + name + \", FeatureCollection required\"\n    );\n  }\n  for (const feature of featureCollection.features) {\n    if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n      throw new Error(\n        \"Invalid input to \" + name + \", Feature with geometry required\"\n      );\n    }\n    if (!feature.geometry || feature.geometry.type !== type) {\n      throw new Error(\n        \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n      );\n    }\n  }\n}\nfunction getGeom(geojson) {\n  if (geojson.type === \"Feature\") {\n    return geojson.geometry;\n  }\n  return geojson;\n}\nfunction getType(geojson, _name) {\n  if (geojson.type === \"FeatureCollection\") {\n    return \"FeatureCollection\";\n  }\n  if (geojson.type === \"GeometryCollection\") {\n    return \"GeometryCollection\";\n  }\n  if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n    return geojson.geometry.type;\n  }\n  return geojson.type;\n}\nexport {\n  collectionOf,\n  containsNumber,\n  featureOf,\n  geojsonType,\n  getCoord,\n  getCoords,\n  getGeom,\n  getType\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport pip from \"point-in-polygon-hao\";\nimport { getCoord, getGeom } from \"@turf/invariant\";\nfunction booleanPointInPolygon(point, polygon, options = {}) {\n  if (!point) {\n    throw new Error(\"point is required\");\n  }\n  if (!polygon) {\n    throw new Error(\"polygon is required\");\n  }\n  const pt = getCoord(point);\n  const geom = getGeom(polygon);\n  const type = geom.type;\n  const bbox = polygon.bbox;\n  let polys = geom.coordinates;\n  if (bbox && inBBox(pt, bbox) === false) {\n    return false;\n  }\n  if (type === \"Polygon\") {\n    polys = [polys];\n  }\n  let result = false;\n  for (var i = 0; i < polys.length; ++i) {\n    const polyResult = pip(pt, polys[i]);\n    if (polyResult === 0) return options.ignoreBoundary ? false : true;\n    else if (polyResult) result = true;\n  }\n  return result;\n}\nfunction inBBox(pt, bbox) {\n  return bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1];\n}\nvar index_default = booleanPointInPolygon;\nexport {\n  booleanPointInPolygon,\n  index_default as default\n};\n//# sourceMappingURL=index.js.map","const epsilon = 1e-6;\n\nexport default class Path {\n  constructor() {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n  }\n  moveTo(x, y) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  }\n  lineTo(x, y) {\n    this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arc(x, y, r) {\n    x = +x, y = +y, r = +r;\n    const x0 = x + r;\n    const y0 = y;\n    if (r < 0) throw new Error(\"negative radius\");\n    if (this._x1 === null) this._ += `M${x0},${y0}`;\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n    if (!r) return;\n    this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n  }\n  rect(x, y, w, h) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n  }\n  value() {\n    return this._ || null;\n  }\n}\n","export default class Polygon {\n  constructor() {\n    this._ = [];\n  }\n  moveTo(x, y) {\n    this._.push([x, y]);\n  }\n  closePath() {\n    this._.push(this._[0].slice());\n  }\n  lineTo(x, y) {\n    this._.push([x, y]);\n  }\n  value() {\n    return this._.length ? this._ : null;\n  }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n  constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n    if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n    this.delaunay = delaunay;\n    this._circumcenters = new Float64Array(delaunay.points.length * 2);\n    this.vectors = new Float64Array(delaunay.points.length * 2);\n    this.xmax = xmax, this.xmin = xmin;\n    this.ymax = ymax, this.ymin = ymin;\n    this._init();\n  }\n  update() {\n    this.delaunay.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const {delaunay: {points, hull, triangles}, vectors} = this;\n    let bx, by; // lazily computed barycenter of the hull\n\n    // Compute circumcenters.\n    const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n    for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n      const t1 = triangles[i] * 2;\n      const t2 = triangles[i + 1] * 2;\n      const t3 = triangles[i + 2] * 2;\n      const x1 = points[t1];\n      const y1 = points[t1 + 1];\n      const x2 = points[t2];\n      const y2 = points[t2 + 1];\n      const x3 = points[t3];\n      const y3 = points[t3 + 1];\n\n      const dx = x2 - x1;\n      const dy = y2 - y1;\n      const ex = x3 - x1;\n      const ey = y3 - y1;\n      const ab = (dx * ey - dy * ex) * 2;\n\n      if (Math.abs(ab) < 1e-9) {\n        // For a degenerate triangle, the circumcenter is at the infinity, in a\n        // direction orthogonal to the halfedge and away from the “center” of\n        // the diagram <bx, by>, defined as the hull’s barycenter.\n        if (bx === undefined) {\n          bx = by = 0;\n          for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\n          bx /= hull.length, by /= hull.length;\n        }\n        const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\n        x = (x1 + x3) / 2 - a * ey;\n        y = (y1 + y3) / 2 + a * ex;\n      } else {\n        const d = 1 / ab;\n        const bl = dx * dx + dy * dy;\n        const cl = ex * ex + ey * ey;\n        x = x1 + (ey * bl - dy * cl) * d;\n        y = y1 + (dx * cl - ex * bl) * d;\n      }\n      circumcenters[j] = x;\n      circumcenters[j + 1] = y;\n    }\n\n    // Compute exterior cell rays.\n    let h = hull[hull.length - 1];\n    let p0, p1 = h * 4;\n    let x0, x1 = points[2 * h];\n    let y0, y1 = points[2 * h + 1];\n    vectors.fill(0);\n    for (let i = 0; i < hull.length; ++i) {\n      h = hull[i];\n      p0 = p1, x0 = x1, y0 = y1;\n      p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n      vectors[p0 + 2] = vectors[p1] = y0 - y1;\n      vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n    }\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n    if (hull.length <= 1) return null;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = Math.floor(i / 3) * 2;\n      const tj = Math.floor(j / 3) * 2;\n      const xi = circumcenters[ti];\n      const yi = circumcenters[ti + 1];\n      const xj = circumcenters[tj];\n      const yj = circumcenters[tj + 1];\n      this._renderSegment(xi, yi, xj, yj, context);\n    }\n    let h0, h1 = hull[hull.length - 1];\n    for (let i = 0; i < hull.length; ++i) {\n      h0 = h1, h1 = hull[i];\n      const t = Math.floor(inedges[h1] / 3) * 2;\n      const x = circumcenters[t];\n      const y = circumcenters[t + 1];\n      const v = h0 * 4;\n      const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n      if (p) this._renderSegment(x, y, p[0], p[1], context);\n    }\n    return buffer && buffer.value();\n  }\n  renderBounds(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n    return buffer && buffer.value();\n  }\n  renderCell(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const points = this._clip(i);\n    if (points === null || !points.length) return;\n    context.moveTo(points[0], points[1]);\n    let n = points.length;\n    while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n    for (let i = 2; i < n; i += 2) {\n      if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n        context.lineTo(points[i], points[i + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *cellPolygons() {\n    const {delaunay: {points}} = this;\n    for (let i = 0, n = points.length / 2; i < n; ++i) {\n      const cell = this.cellPolygon(i);\n      if (cell) cell.index = i, yield cell;\n    }\n  }\n  cellPolygon(i) {\n    const polygon = new Polygon;\n    this.renderCell(i, polygon);\n    return polygon.value();\n  }\n  _renderSegment(x0, y0, x1, y1, context) {\n    let S;\n    const c0 = this._regioncode(x0, y0);\n    const c1 = this._regioncode(x1, y1);\n    if (c0 === 0 && c1 === 0) {\n      context.moveTo(x0, y0);\n      context.lineTo(x1, y1);\n    } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n      context.moveTo(S[0], S[1]);\n      context.lineTo(S[2], S[3]);\n    }\n  }\n  contains(i, x, y) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n    return this.delaunay._step(i, x, y) === i;\n  }\n  *neighbors(i) {\n    const ci = this._clip(i);\n    if (ci) for (const j of this.delaunay.neighbors(i)) {\n      const cj = this._clip(j);\n      // find the common edge\n      if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n        for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n          if (ci[ai] === cj[aj]\n              && ci[ai + 1] === cj[aj + 1]\n              && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\n              && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\n            yield j;\n            break loop;\n          }\n        }\n      }\n    }\n  }\n  _cell(i) {\n    const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n    const e0 = inedges[i];\n    if (e0 === -1) return null; // coincident point\n    const points = [];\n    let e = e0;\n    do {\n      const t = Math.floor(e / 3);\n      points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n    } while (e !== e0 && e !== -1);\n    return points;\n  }\n  _clip(i) {\n    // degenerate case (1 valid point: return the box)\n    if (i === 0 && this.delaunay.hull.length === 1) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    const points = this._cell(i);\n    if (points === null) return null;\n    const {vectors: V} = this;\n    const v = i * 4;\n    return this._simplify(V[v] || V[v + 1]\n        ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n        : this._clipFinite(i, points));\n  }\n  _clipFinite(i, points) {\n    const n = points.length;\n    let P = null;\n    let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n    let c0, c1 = this._regioncode(x1, y1);\n    let e0, e1 = 0;\n    for (let j = 0; j < n; j += 2) {\n      x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n      c0 = c1, c1 = this._regioncode(x1, y1);\n      if (c0 === 0 && c1 === 0) {\n        e0 = e1, e1 = 0;\n        if (P) P.push(x1, y1);\n        else P = [x1, y1];\n      } else {\n        let S, sx0, sy0, sx1, sy1;\n        if (c0 === 0) {\n          if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n          [sx0, sy0, sx1, sy1] = S;\n        } else {\n          if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n          [sx1, sy1, sx0, sy0] = S;\n          e0 = e1, e1 = this._edgecode(sx0, sy0);\n          if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n          if (P) P.push(sx0, sy0);\n          else P = [sx0, sy0];\n        }\n        e0 = e1, e1 = this._edgecode(sx1, sy1);\n        if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n        if (P) P.push(sx1, sy1);\n        else P = [sx1, sy1];\n      }\n    }\n    if (P) {\n      e0 = e1, e1 = this._edgecode(P[0], P[1]);\n      if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    return P;\n  }\n  _clipSegment(x0, y0, x1, y1, c0, c1) {\n    // for more robustness, always consider the segment in the same order\n    const flip = c0 < c1;\n    if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\n    while (true) {\n      if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\n      if (c0 & c1) return null;\n      let x, y, c = c0 || c1;\n      if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n      else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n      else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n      else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n      if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n      else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n    }\n  }\n  _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n    let P = Array.from(points), p;\n    if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n    if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n    if (P = this._clipFinite(i, P)) {\n      for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n        c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n        if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n      }\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n    }\n    return P;\n  }\n  _edge(i, e0, e1, P, j) {\n    while (e0 !== e1) {\n      let x, y;\n      switch (e0) {\n        case 0b0101: e0 = 0b0100; continue; // top-left\n        case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n        case 0b0110: e0 = 0b0010; continue; // top-right\n        case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n        case 0b1010: e0 = 0b1000; continue; // bottom-right\n        case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n        case 0b1001: e0 = 0b0001; continue; // bottom-left\n        case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n      }\n      // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n      // undefined, the conditional statement will be executed.\n      if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n        P.splice(j, 0, x, y), j += 2;\n      }\n    }\n    return j;\n  }\n  _project(x0, y0, vx, vy) {\n    let t = Infinity, c, x, y;\n    if (vy < 0) { // top\n      if (y0 <= this.ymin) return null;\n      if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n    } else if (vy > 0) { // bottom\n      if (y0 >= this.ymax) return null;\n      if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n    }\n    if (vx > 0) { // right\n      if (x0 >= this.xmax) return null;\n      if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n    } else if (vx < 0) { // left\n      if (x0 <= this.xmin) return null;\n      if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n    }\n    return [x, y];\n  }\n  _edgecode(x, y) {\n    return (x === this.xmin ? 0b0001\n        : x === this.xmax ? 0b0010 : 0b0000)\n        | (y === this.ymin ? 0b0100\n        : y === this.ymax ? 0b1000 : 0b0000);\n  }\n  _regioncode(x, y) {\n    return (x < this.xmin ? 0b0001\n        : x > this.xmax ? 0b0010 : 0b0000)\n        | (y < this.ymin ? 0b0100\n        : y > this.ymax ? 0b1000 : 0b0000);\n  }\n  _simplify(P) {\n    if (P && P.length > 4) {\n      for (let i = 0; i < P.length; i+= 2) {\n        const j = (i + 2) % P.length, k = (i + 4) % P.length;\n        if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\n          P.splice(j, 2), i -= 2;\n        }\n      }\n      if (!P.length) P = null;\n    }\n    return P;\n  }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n  return p[0];\n}\n\nfunction pointY(p) {\n  return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n  const {triangles, coords} = d;\n  for (let i = 0; i < triangles.length; i += 3) {\n    const a = 2 * triangles[i],\n          b = 2 * triangles[i + 1],\n          c = 2 * triangles[i + 2],\n          cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n                - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n    if (cross > 1e-10) return false;\n  }\n  return true;\n}\n\nfunction jitter(x, y, r) {\n  return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n  static from(points, fx = pointX, fy = pointY, that) {\n    return new Delaunay(\"length\" in points\n        ? flatArray(points, fx, fy, that)\n        : Float64Array.from(flatIterable(points, fx, fy, that)));\n  }\n  constructor(points) {\n    this._delaunator = new Delaunator(points);\n    this.inedges = new Int32Array(points.length / 2);\n    this._hullIndex = new Int32Array(points.length / 2);\n    this.points = this._delaunator.coords;\n    this._init();\n  }\n  update() {\n    this._delaunator.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const d = this._delaunator, points = this.points;\n\n    // check for collinear\n    if (d.hull && d.hull.length > 2 && collinear(d)) {\n      this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n        .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n      const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n        bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n        r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n      for (let i = 0, n = points.length / 2; i < n; ++i) {\n        const p = jitter(points[2 * i], points[2 * i + 1], r);\n        points[2 * i] = p[0];\n        points[2 * i + 1] = p[1];\n      }\n      this._delaunator = new Delaunator(points);\n    } else {\n      delete this.collinear;\n    }\n\n    const halfedges = this.halfedges = this._delaunator.halfedges;\n    const hull = this.hull = this._delaunator.hull;\n    const triangles = this.triangles = this._delaunator.triangles;\n    const inedges = this.inedges.fill(-1);\n    const hullIndex = this._hullIndex.fill(-1);\n\n    // Compute an index from each point to an (arbitrary) incoming halfedge\n    // Used to give the first neighbor of each point; for this reason,\n    // on the hull we give priority to exterior halfedges\n    for (let e = 0, n = halfedges.length; e < n; ++e) {\n      const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n      if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n    }\n    for (let i = 0, n = hull.length; i < n; ++i) {\n      hullIndex[hull[i]] = i;\n    }\n\n    // degenerate case: 1 or 2 (distinct) points\n    if (hull.length <= 2 && hull.length > 0) {\n      this.triangles = new Int32Array(3).fill(-1);\n      this.halfedges = new Int32Array(3).fill(-1);\n      this.triangles[0] = hull[0];\n      inedges[hull[0]] = 1;\n      if (hull.length === 2) {\n        inedges[hull[1]] = 0;\n        this.triangles[1] = hull[1];\n        this.triangles[2] = hull[1];\n      }\n    }\n  }\n  voronoi(bounds) {\n    return new Voronoi(this, bounds);\n  }\n  *neighbors(i) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n    // degenerate case with several collinear points\n    if (collinear) {\n      const l = collinear.indexOf(i);\n      if (l > 0) yield collinear[l - 1];\n      if (l < collinear.length - 1) yield collinear[l + 1];\n      return;\n    }\n\n    const e0 = inedges[i];\n    if (e0 === -1) return; // coincident point\n    let e = e0, p0 = -1;\n    do {\n      yield p0 = triangles[e];\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) return; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        const p = hull[(_hullIndex[i] + 1) % hull.length];\n        if (p !== p0) yield p;\n        return;\n      }\n    } while (e !== e0);\n  }\n  find(x, y, i = 0) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n    const i0 = i;\n    let c;\n    while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n    return c;\n  }\n  _step(i, x, y) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n    if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n    let c = i;\n    let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n    const e0 = inedges[i];\n    let e = e0;\n    do {\n      let t = triangles[e];\n      const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n      if (dt < dc) dc = dt, c = t;\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        e = hull[(_hullIndex[i] + 1) % hull.length];\n        if (e !== t) {\n          if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n        }\n        break;\n      }\n    } while (e !== e0);\n    return c;\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, halfedges, triangles} = this;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = triangles[i] * 2;\n      const tj = triangles[j] * 2;\n      context.moveTo(points[ti], points[ti + 1]);\n      context.lineTo(points[tj], points[tj + 1]);\n    }\n    this.renderHull(context);\n    return buffer && buffer.value();\n  }\n  renderPoints(context, r) {\n    if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n    r = r == undefined ? 2 : +r;\n    const buffer = context == null ? context = new Path : undefined;\n    const {points} = this;\n    for (let i = 0, n = points.length; i < n; i += 2) {\n      const x = points[i], y = points[i + 1];\n      context.moveTo(x + r, y);\n      context.arc(x, y, r, 0, tau);\n    }\n    return buffer && buffer.value();\n  }\n  renderHull(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {hull, points} = this;\n    const h = hull[0] * 2, n = hull.length;\n    context.moveTo(points[h], points[h + 1]);\n    for (let i = 1; i < n; ++i) {\n      const h = 2 * hull[i];\n      context.lineTo(points[h], points[h + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  hullPolygon() {\n    const polygon = new Polygon;\n    this.renderHull(polygon);\n    return polygon.value();\n  }\n  renderTriangle(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, triangles} = this;\n    const t0 = triangles[i *= 3] * 2;\n    const t1 = triangles[i + 1] * 2;\n    const t2 = triangles[i + 2] * 2;\n    context.moveTo(points[t0], points[t0 + 1]);\n    context.lineTo(points[t1], points[t1 + 1]);\n    context.lineTo(points[t2], points[t2 + 1]);\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *trianglePolygons() {\n    const {triangles} = this;\n    for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n      yield this.trianglePolygon(i);\n    }\n  }\n  trianglePolygon(i) {\n    const polygon = new Polygon;\n    this.renderTriangle(i, polygon);\n    return polygon.value();\n  }\n}\n\nfunction flatArray(points, fx, fy, that) {\n  const n = points.length;\n  const array = new Float64Array(n * 2);\n  for (let i = 0; i < n; ++i) {\n    const p = points[i];\n    array[i * 2] = fx.call(that, p, i, points);\n    array[i * 2 + 1] = fy.call(that, p, i, points);\n  }\n  return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n  let i = 0;\n  for (const p of points) {\n    yield fx.call(that, p, i, points);\n    yield fy.call(that, p, i, points);\n    ++i;\n  }\n}\n","export const epsilon = 1e-6;\nexport const epsilon2 = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const quarterPi = pi / 4;\nexport const tau = pi * 2;\n\nexport const degrees = 180 / pi;\nexport const radians = pi / 180;\n\nexport const abs = Math.abs;\nexport const atan = Math.atan;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const ceil = Math.ceil;\nexport const exp = Math.exp;\nexport const floor = Math.floor;\nexport const log = Math.log;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const pow = Math.pow;\nexport const sin = Math.sin;\nexport const sign =\n  Math.sign ||\n  function (x) {\n    return x > 0 ? 1 : x < 0 ? -1 : 0;\n  };\nexport const sqrt = Math.sqrt;\nexport const tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","import { asin, atan2, cos, sin, sqrt } from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  const lambda = spherical[0],\n    phi = spherical[1],\n    cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [\n    a[1] * b[2] - a[2] * b[1],\n    a[2] * b[0] - a[0] * b[2],\n    a[0] * b[1] - a[1] * b[0],\n  ];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  (a[0] += b[0]), (a[1] += b[1]), (a[2] += b[2]);\n}\n\nexport function cartesianAdd(a, b) {\n  return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  (d[0] /= l), (d[1] /= l), (d[2] /= l);\n}\n\nexport function cartesianNormalize(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  return [d[0] / l, d[1] / l, d[2] / l];\n}\n","import { Delaunay } from \"d3-delaunay\";\nimport { geoRotation, geoStereographic } from \"d3-geo\";\nimport { extent } from \"d3-array\";\nimport {\n  asin,\n  atan2,\n  cos,\n  degrees,\n  max,\n  min,\n  radians,\n  sign,\n  sin,\n  sqrt,\n} from \"./math.js\";\nimport {\n  cartesianNormalize as normalize,\n  cartesianCross as cross,\n  cartesianDot as dot,\n  cartesianAdd,\n} from \"./cartesian.js\";\n\n// Converts 3D Cartesian to spherical coordinates (degrees).\nfunction spherical(cartesian) {\n  return [\n    atan2(cartesian[1], cartesian[0]) * degrees,\n    asin(max(-1, min(1, cartesian[2]))) * degrees,\n  ];\n}\n\n// Converts spherical coordinates (degrees) to 3D Cartesian.\nfunction cartesian(coordinates) {\n  const lambda = coordinates[0] * radians,\n    phi = coordinates[1] * radians,\n    cosphi = cos(phi);\n  return [cosphi * cos(lambda), cosphi * sin(lambda), sin(phi)];\n}\n\n// Spherical excess of a triangle (in spherical coordinates)\nexport function excess(triangle) {\n  triangle = triangle.map((p) => cartesian(p));\n  return dot(triangle[0], cross(triangle[2], triangle[1]));\n}\n\nexport function geoDelaunay(points) {\n  const delaunay = geo_delaunay_from(points),\n    triangles = geo_triangles(delaunay),\n    edges = geo_edges(triangles, points),\n    neighbors = geo_neighbors(triangles, points.length),\n    find = geo_find(neighbors, points),\n    // Voronoi ; could take a center function as an argument\n    circumcenters = geo_circumcenters(triangles, points),\n    { polygons, centers } = geo_polygons(circumcenters, triangles, points),\n    mesh = geo_mesh(polygons),\n    hull = geo_hull(triangles, points),\n    // Urquhart ; returns a function that takes a distance array as argument.\n    urquhart = geo_urquhart(edges, triangles);\n  return {\n    delaunay,\n    edges,\n    triangles,\n    centers,\n    neighbors,\n    polygons,\n    mesh,\n    hull,\n    urquhart,\n    find,\n  };\n}\n\nfunction geo_find(neighbors, points) {\n  function distance2(a, b) {\n    let x = a[0] - b[0],\n      y = a[1] - b[1],\n      z = a[2] - b[2];\n    return x * x + y * y + z * z;\n  }\n\n  return function find(x, y, next) {\n    if (next === undefined) next = 0;\n    let cell,\n      dist,\n      found = next;\n    const xyz = cartesian([x, y]);\n    do {\n      cell = next;\n      next = null;\n      dist = distance2(xyz, cartesian(points[cell]));\n      neighbors[cell].forEach((i) => {\n        let ndist = distance2(xyz, cartesian(points[i]));\n        if (ndist < dist) {\n          dist = ndist;\n          next = i;\n          found = i;\n          return;\n        }\n      });\n    } while (next !== null);\n\n    return found;\n  };\n}\n\nfunction geo_delaunay_from(points) {\n  if (points.length < 2) return {};\n\n  // find a valid point to send to infinity\n  let pivot = 0;\n  while (isNaN(points[pivot][0] + points[pivot][1]) && pivot++ < points.length);\n\n  const r = geoRotation(points[pivot]),\n    projection = geoStereographic()\n      .translate([0, 0])\n      .scale(1)\n      .rotate(r.invert([180, 0]));\n  points = points.map(projection);\n\n  const zeros = [];\n  let max2 = 1;\n  for (let i = 0, n = points.length; i < n; i++) {\n    let m = points[i][0] ** 2 + points[i][1] ** 2;\n    if (!isFinite(m) || m > 1e32) zeros.push(i);\n    else if (m > max2) max2 = m;\n  }\n\n  const FAR = 1e6 * sqrt(max2);\n\n  zeros.forEach((i) => (points[i] = [FAR, 0]));\n\n  // Add infinite horizon points\n  points.push([0, FAR]);\n  points.push([-FAR, 0]);\n  points.push([0, -FAR]);\n\n  const delaunay = Delaunay.from(points);\n\n  delaunay.projection = projection;\n\n  // clean up the triangulation\n  const { triangles, halfedges, inedges } = delaunay;\n  const degenerate = [];\n  for (let i = 0, l = halfedges.length; i < l; i++) {\n    if (halfedges[i] < 0) {\n      const j = i % 3 == 2 ? i - 2 : i + 1;\n      const k = i % 3 == 0 ? i + 2 : i - 1;\n      const a = halfedges[j];\n      const b = halfedges[k];\n      halfedges[a] = b;\n      halfedges[b] = a;\n      halfedges[j] = halfedges[k] = -1;\n      triangles[i] = triangles[j] = triangles[k] = pivot;\n      inedges[triangles[a]] = a % 3 == 0 ? a + 2 : a - 1;\n      inedges[triangles[b]] = b % 3 == 0 ? b + 2 : b - 1;\n      degenerate.push(Math.min(i, j, k));\n      i += 2 - (i % 3);\n    } else if (triangles[i] > points.length - 3 - 1) {\n      triangles[i] = pivot;\n    }\n  }\n\n  // there should always be 4 degenerate triangles\n  // console.warn(degenerate);\n  return delaunay;\n}\n\nfunction geo_edges(triangles, points) {\n  const _index = new Set();\n  if (points.length === 2) return [[0, 1]];\n  triangles.forEach((tri) => {\n    if (tri[0] === tri[1]) return;\n    if (excess(tri.map((i) => points[i])) < 0) return;\n    for (let i = 0, j; i < 3; i++) {\n      j = (i + 1) % 3;\n      _index.add(extent([tri[i], tri[j]]).join(\"-\"));\n    }\n  });\n  return Array.from(_index, (d) => d.split(\"-\").map(Number));\n}\n\nfunction geo_triangles(delaunay) {\n  const { triangles } = delaunay;\n  if (!triangles) return [];\n\n  const geo_triangles = [];\n  for (let i = 0, n = triangles.length / 3; i < n; i++) {\n    const a = triangles[3 * i],\n      b = triangles[3 * i + 1],\n      c = triangles[3 * i + 2];\n    if (a !== b && b !== c) {\n      geo_triangles.push([a, c, b]);\n    }\n  }\n  return geo_triangles;\n}\n\nfunction geo_circumcenters(triangles, points) {\n  // if (!use_centroids) {\n  return triangles.map((tri) => {\n    const c = tri.map((i) => points[i]).map(cartesian),\n      V = cartesianAdd(\n        cartesianAdd(cross(c[1], c[0]), cross(c[2], c[1])),\n        cross(c[0], c[2])\n      );\n    return spherical(normalize(V));\n  });\n  /*} else {\n    return triangles.map(tri => {\n      return d3.geoCentroid({\n        type: \"MultiPoint\",\n        coordinates: tri.map(i => points[i])\n      });\n    });\n  }*/\n}\n\nfunction geo_neighbors(triangles, npoints) {\n  const neighbors = [];\n  triangles.forEach((tri) => {\n    for (let j = 0; j < 3; j++) {\n      const a = tri[j],\n        b = tri[(j + 1) % 3];\n      neighbors[a] = neighbors[a] || [];\n      neighbors[a].push(b);\n    }\n  });\n\n  // degenerate cases\n  if (triangles.length === 0) {\n    if (npoints === 2) (neighbors[0] = [1]), (neighbors[1] = [0]);\n    else if (npoints === 1) neighbors[0] = [];\n  }\n\n  return neighbors;\n}\n\nfunction geo_polygons(circumcenters, triangles, points) {\n  const polygons = [];\n\n  const centers = circumcenters.slice();\n\n  if (triangles.length === 0) {\n    if (points.length < 2) return { polygons, centers };\n    if (points.length === 2) {\n      // two hemispheres\n      const a = cartesian(points[0]),\n        b = cartesian(points[1]),\n        m = normalize(cartesianAdd(a, b)),\n        d = normalize(cross(a, b)),\n        c = cross(m, d);\n      const poly = [\n        m,\n        cross(m, c),\n        cross(cross(m, c), c),\n        cross(cross(cross(m, c), c), c),\n      ]\n        .map(spherical)\n        .map(supplement);\n      return (\n        polygons.push(poly),\n        polygons.push(poly.slice().reverse()),\n        { polygons, centers }\n      );\n    }\n  }\n\n  triangles.forEach((tri, t) => {\n    for (let j = 0; j < 3; j++) {\n      const a = tri[j],\n        b = tri[(j + 1) % 3],\n        c = tri[(j + 2) % 3];\n      polygons[a] = polygons[a] || [];\n      polygons[a].push([b, c, t, [a, b, c]]);\n    }\n  });\n\n  // reorder each polygon\n  const reordered = polygons.map((poly) => {\n    const p = [poly[0][2]]; // t\n    let k = poly[0][1]; // k = c\n    for (let i = 1; i < poly.length; i++) {\n      // look for b = k\n      for (let j = 0; j < poly.length; j++) {\n        if (poly[j][0] == k) {\n          k = poly[j][1];\n          p.push(poly[j][2]);\n          break;\n        }\n      }\n    }\n\n    if (p.length > 2) {\n      return p;\n    } else if (p.length == 2) {\n      const R0 = o_midpoint(\n          points[poly[0][3][0]],\n          points[poly[0][3][1]],\n          centers[p[0]]\n        ),\n        R1 = o_midpoint(\n          points[poly[0][3][2]],\n          points[poly[0][3][0]],\n          centers[p[0]]\n        );\n      const i0 = supplement(R0),\n        i1 = supplement(R1);\n      return [p[0], i1, p[1], i0];\n    }\n  });\n\n  function supplement(point) {\n    let f = -1;\n    centers.slice(triangles.length, Infinity).forEach((p, i) => {\n      if (p[0] === point[0] && p[1] === point[1]) f = i + triangles.length;\n    });\n    if (f < 0) (f = centers.length), centers.push(point);\n    return f;\n  }\n\n  return { polygons: reordered, centers };\n}\n\nfunction o_midpoint(a, b, c) {\n  a = cartesian(a);\n  b = cartesian(b);\n  c = cartesian(c);\n  const s = sign(dot(cross(b, a), c));\n  return spherical(normalize(cartesianAdd(a, b)).map((d) => s * d));\n}\n\nfunction geo_mesh(polygons) {\n  const mesh = [];\n  polygons.forEach((poly) => {\n    if (!poly) return;\n    let p = poly[poly.length - 1];\n    for (let q of poly) {\n      if (q > p) mesh.push([p, q]);\n      p = q;\n    }\n  });\n  return mesh;\n}\n\nfunction geo_urquhart(edges, triangles) {\n  return function (distances) {\n    const _lengths = new Map(),\n      _urquhart = new Map();\n    edges.forEach((edge, i) => {\n      const u = edge.join(\"-\");\n      _lengths.set(u, distances[i]);\n      _urquhart.set(u, true);\n    });\n\n    triangles.forEach((tri) => {\n      let l = 0,\n        remove = -1;\n      for (let j = 0; j < 3; j++) {\n        let u = extent([tri[j], tri[(j + 1) % 3]]).join(\"-\");\n        if (_lengths.get(u) > l) {\n          l = _lengths.get(u);\n          remove = u;\n        }\n      }\n      _urquhart.set(remove, false);\n    });\n\n    return edges.map((edge) => _urquhart.get(edge.join(\"-\")));\n  };\n}\n\nfunction geo_hull(triangles, points) {\n  const _hull = new Set(),\n    hull = [];\n  triangles.map((tri) => {\n    if (excess(tri.map((i) => points[i > points.length ? 0 : i])) > 1e-12)\n      return;\n    for (let i = 0; i < 3; i++) {\n      let e = [tri[i], tri[(i + 1) % 3]],\n        code = `${e[0]}-${e[1]}`;\n      if (_hull.has(code)) _hull.delete(code);\n      else _hull.add(`${e[1]}-${e[0]}`);\n    }\n  });\n\n  const _index = new Map();\n  let start;\n  _hull.forEach((e) => {\n    e = e.split(\"-\").map(Number);\n    _index.set(e[0], e[1]);\n    start = e[0];\n  });\n\n  if (start === undefined) return hull;\n\n  let next = start;\n  do {\n    hull.push(next);\n    let n = _index.get(next);\n    _index.set(next, -1);\n    next = n;\n  } while (next > -1 && next !== start);\n\n  return hull;\n}\n","import { geoCentroid, geoDistance } from \"d3-geo\";\nimport { geoDelaunay, excess } from \"./delaunay.js\";\n\nexport function geoVoronoi(data) {\n  const v = function (data) {\n    v.delaunay = null;\n    v._data = data;\n\n    if (typeof v._data === \"object\" && v._data.type === \"FeatureCollection\") {\n      v._data = v._data.features;\n    }\n    if (typeof v._data === \"object\") {\n      const temp = v._data\n        .map((d) => [v._vx(d), v._vy(d), d])\n        .filter((d) => isFinite(d[0] + d[1]));\n      v.points = temp.map((d) => [d[0], d[1]]);\n      v.valid = temp.map((d) => d[2]);\n      v.delaunay = geoDelaunay(v.points);\n    }\n    return v;\n  };\n\n  v._vx = function (d) {\n    if (typeof d == \"object\" && \"type\" in d) {\n      return geoCentroid(d)[0];\n    }\n    if (0 in d) return d[0];\n  };\n  v._vy = function (d) {\n    if (typeof d == \"object\" && \"type\" in d) {\n      return geoCentroid(d)[1];\n    }\n    if (1 in d) return d[1];\n  };\n\n  v.x = function (f) {\n    if (!f) return v._vx;\n    v._vx = f;\n    return v;\n  };\n  v.y = function (f) {\n    if (!f) return v._vy;\n    v._vy = f;\n    return v;\n  };\n\n  v.polygons = function (data) {\n    if (data !== undefined) {\n      v(data);\n    }\n\n    if (!v.delaunay) return false;\n    const coll = {\n      type: \"FeatureCollection\",\n      features: [],\n    };\n    if (v.valid.length === 0) return coll;\n    v.delaunay.polygons.forEach((poly, i) =>\n      coll.features.push({\n        type: \"Feature\",\n        geometry: !poly\n          ? null\n          : {\n              type: \"Polygon\",\n              coordinates: [\n                [...poly, poly[0]].map((i) => v.delaunay.centers[i]),\n              ],\n            },\n        properties: {\n          site: v.valid[i],\n          sitecoordinates: v.points[i],\n          neighbours: v.delaunay.neighbors[i], // not part of the public API\n        },\n      })\n    );\n    if (v.valid.length === 1)\n      coll.features.push({\n        type: \"Feature\",\n        geometry: { type: \"Sphere\" },\n        properties: {\n          site: v.valid[0],\n          sitecoordinates: v.points[0],\n          neighbours: [],\n        },\n      });\n    return coll;\n  };\n\n  v.triangles = function (data) {\n    if (data !== undefined) {\n      v(data);\n    }\n    if (!v.delaunay) return false;\n\n    return {\n      type: \"FeatureCollection\",\n      features: v.delaunay.triangles\n        .map((tri, index) => {\n          tri = tri.map((i) => v.points[i]);\n          tri.center = v.delaunay.centers[index];\n          return tri;\n        })\n        .filter((tri) => excess(tri) > 0)\n        .map((tri) => ({\n          type: \"Feature\",\n          properties: {\n            circumcenter: tri.center,\n          },\n          geometry: {\n            type: \"Polygon\",\n            coordinates: [[...tri, tri[0]]],\n          },\n        })),\n    };\n  };\n\n  v.links = function (data) {\n    if (data !== undefined) {\n      v(data);\n    }\n    if (!v.delaunay) return false;\n    const _distances = v.delaunay.edges.map((e) =>\n        geoDistance(v.points[e[0]], v.points[e[1]])\n      ),\n      _urquart = v.delaunay.urquhart(_distances);\n    return {\n      type: \"FeatureCollection\",\n      features: v.delaunay.edges.map((e, i) => ({\n        type: \"Feature\",\n        properties: {\n          source: v.valid[e[0]],\n          target: v.valid[e[1]],\n          length: _distances[i],\n          urquhart: !!_urquart[i],\n        },\n        geometry: {\n          type: \"LineString\",\n          coordinates: [v.points[e[0]], v.points[e[1]]],\n        },\n      })),\n    };\n  };\n\n  v.mesh = function (data) {\n    if (data !== undefined) {\n      v(data);\n    }\n    if (!v.delaunay) return false;\n    return {\n      type: \"MultiLineString\",\n      coordinates: v.delaunay.edges.map((e) => [\n        v.points[e[0]],\n        v.points[e[1]],\n      ]),\n    };\n  };\n\n  v.cellMesh = function (data) {\n    if (data !== undefined) {\n      v(data);\n    }\n    if (!v.delaunay) return false;\n    const { centers, polygons } = v.delaunay;\n    const coordinates = [];\n    for (const p of polygons) {\n      if (!p) continue;\n      for (\n        let n = p.length, p0 = p[n - 1], p1 = p[0], i = 0;\n        i < n;\n        p0 = p1, p1 = p[++i]\n      ) {\n        if (p1 > p0) {\n          coordinates.push([centers[p0], centers[p1]]);\n        }\n      }\n    }\n    return {\n      type: \"MultiLineString\",\n      coordinates,\n    };\n  };\n\n  v._found = undefined;\n  v.find = function (x, y, radius) {\n    v._found = v.delaunay.find(x, y, v._found);\n    if (!radius || geoDistance([x, y], v.points[v._found]) < radius)\n      return v._found;\n  };\n\n  v.hull = function (data) {\n    if (data !== undefined) {\n      v(data);\n    }\n    const hull = v.delaunay.hull,\n      points = v.points;\n    return hull.length === 0\n      ? null\n      : {\n          type: \"Polygon\",\n          coordinates: [[...hull.map((i) => points[i]), points[hull[0]]]],\n        };\n  };\n\n  return data ? v(data) : v;\n}\n","import { BufferGeometry, Float32BufferAttribute } from 'three';\nimport { merge, extent, mean } from 'd3-array';\nimport earcut, { flatten } from 'earcut';\nimport Delaunator from 'delaunator';\nimport turfPointInPolygon from '@turf/boolean-point-in-polygon';\nimport { geoBounds, geoContains, geoDistance, geoInterpolate } from 'd3-geo';\nimport { geoVoronoi } from 'd3-geo-voronoi';\nimport { scaleLinear } from 'd3-scale';\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nfunction _callSuper(t, o, e) {\n  return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, [], _getPrototypeOf(t).constructor) : o.apply(t, e));\n}\nfunction _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _createClass(e, r, t) {\n  return Object.defineProperty(e, \"prototype\", {\n    writable: false\n  }), e;\n}\nfunction _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: true,\n      configurable: true\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: false\n  }), e && _setPrototypeOf(t, e);\n}\nfunction _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function () {\n    return !!t;\n  })();\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == typeof e || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return _assertThisInitialized(t);\n}\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nfunction geoPolygonTriangulate(polygon) {\n  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n    _ref$resolution = _ref.resolution,\n    resolution = _ref$resolution === void 0 ? Infinity : _ref$resolution;\n  var contour = interpolateContourPoints(polygon, resolution);\n  var edgePoints = merge(contour);\n  var innerPoints = getInnerGeoPoints(polygon, resolution);\n  var points = [].concat(_toConsumableArray(edgePoints), _toConsumableArray(innerPoints));\n  var boundariesGeojson = {\n    type: 'Polygon',\n    coordinates: polygon\n  };\n  var _geoBounds = geoBounds(boundariesGeojson),\n    _geoBounds2 = _slicedToArray(_geoBounds, 2),\n    _geoBounds2$ = _slicedToArray(_geoBounds2[0], 2),\n    minLng = _geoBounds2$[0],\n    minLat = _geoBounds2$[1],\n    _geoBounds2$2 = _slicedToArray(_geoBounds2[1], 2),\n    maxLng = _geoBounds2$2[0],\n    maxLat = _geoBounds2$2[1];\n  var crossesPoleOrAntimeridian = minLng > maxLng // crosses antimeridian\n  || maxLat >= 89 // crosses north pole\n  || minLat <= -89; // crosses south pole\n\n  var indices = [];\n  if (crossesPoleOrAntimeridian) {\n    // Use d3-geo-voronoi. Slowest, but most accurate for polygons that cross poles or anti-meridian\n    var vt = geoVoronoi(points).triangles(); // geoDelaunay generates more triangles than needed\n    var pntMap = new Map(points.map(function (_ref2, idx) {\n      var _ref3 = _slicedToArray(_ref2, 2),\n        lng = _ref3[0],\n        lat = _ref3[1];\n      return [\"\".concat(lng, \"-\").concat(lat), idx];\n    }));\n    vt.features.forEach(function (f) {\n      var _indices;\n      var triangle = f.geometry.coordinates[0].slice(0, 3).reverse(); // reverse wound to match earcut\n\n      var inds = [];\n      triangle.forEach(function (_ref4) {\n        var _ref5 = _slicedToArray(_ref4, 2),\n          lng = _ref5[0],\n          lat = _ref5[1];\n        var k = \"\".concat(lng, \"-\").concat(lat);\n        pntMap.has(k) && inds.push(pntMap.get(k));\n      });\n      if (inds.length !== 3) return; // triangle malfunction\n\n      // exclude edge triangles outside polygon perimeter or through holes\n      if (inds.some(function (ind) {\n        return ind < edgePoints.length;\n      })) {\n        var triangleCentroid = f.properties.circumcenter;\n        if (!pointInside(triangleCentroid, boundariesGeojson, crossesPoleOrAntimeridian)) return;\n      }\n      (_indices = indices).push.apply(_indices, inds);\n    });\n  } else if (!innerPoints.length) {\n    // earcut triangulation slightly more performing if it's only using the polygon perimeter\n    var _earcutFlatten = flatten(contour),\n      vertices = _earcutFlatten.vertices,\n      _earcutFlatten$holes = _earcutFlatten.holes,\n      holes = _earcutFlatten$holes === void 0 ? [] : _earcutFlatten$holes;\n    indices = earcut(vertices, holes, 2);\n  } else {\n    // use delaunator\n    var delaunay = Delaunator.from(points);\n    var _loop = function _loop(i) {\n      var _indices2;\n      var inds = [2, 1, 0].map(function (idx) {\n        return delaunay.triangles[i + idx];\n      }); // reverse wound to have same orientation as earcut\n      var triangle = inds.map(function (indice) {\n        return points[indice];\n      });\n\n      // exclude edge triangles outside polygon perimeter or through holes\n      if (inds.some(function (ind) {\n        return ind < edgePoints.length;\n      })) {\n        var triangleCentroid = [0, 1].map(function (coordIdx) {\n          return mean(triangle, function (p) {\n            return p[coordIdx];\n          });\n        });\n        if (!pointInside(triangleCentroid, boundariesGeojson, crossesPoleOrAntimeridian)) return 1; // continue\n      }\n      (_indices2 = indices).push.apply(_indices2, _toConsumableArray(inds));\n    };\n    for (var i = 0, len = delaunay.triangles.length; i < len; i += 3) {\n      if (_loop(i)) continue;\n    }\n  }\n\n  // calc uvs\n  var lngUvScale = scaleLinear(extent(points, function (d) {\n    return d[0];\n  }), [0, 1]);\n  var latUvScale = scaleLinear(extent(points, function (d) {\n    return d[1];\n  }), [0, 1]);\n  var uvs = points.map(function (_ref6) {\n    var _ref7 = _slicedToArray(_ref6, 2),\n      lng = _ref7[0],\n      lat = _ref7[1];\n    return [lngUvScale(lng), latUvScale(lat)];\n  });\n  var triangles = {\n    points: points,\n    indices: indices,\n    uvs: uvs\n  };\n  return {\n    contour: contour,\n    triangles: triangles\n  };\n}\nfunction interpolateContourPoints(polygon, maxDistance) {\n  // add interpolated points for segments that are further apart than the max distance\n  return polygon.map(function (coords) {\n    var pnts = [];\n    var prevPnt;\n    coords.forEach(function (pnt) {\n      if (prevPnt) {\n        var dist = geoDistance(pnt, prevPnt) * 180 / Math.PI;\n        if (dist > maxDistance) {\n          var interpol = geoInterpolate(prevPnt, pnt);\n          var tStep = 1 / Math.ceil(dist / maxDistance);\n          var t = tStep;\n          while (t < 1) {\n            pnts.push(interpol(t));\n            t += tStep;\n          }\n        }\n      }\n      pnts.push(prevPnt = pnt);\n    });\n    return pnts;\n  });\n}\nfunction getInnerGeoPoints(polygon, maxDistance) {\n  var boundariesGeojson = {\n    type: 'Polygon',\n    coordinates: polygon\n  };\n  var _geoBounds3 = geoBounds(boundariesGeojson),\n    _geoBounds4 = _slicedToArray(_geoBounds3, 2),\n    _geoBounds4$ = _slicedToArray(_geoBounds4[0], 2),\n    minLng = _geoBounds4$[0],\n    minLat = _geoBounds4$[1],\n    _geoBounds4$2 = _slicedToArray(_geoBounds4[1], 2),\n    maxLng = _geoBounds4$2[0],\n    maxLat = _geoBounds4$2[1];\n\n  // polygon smaller than maxDistance -> no inner points\n  if (Math.min(Math.abs(maxLng - minLng), Math.abs(maxLat - minLat)) < maxDistance) return [];\n  var crossesPoleOrAntimeridian = minLng > maxLng || maxLat >= 89 || minLat <= -89;\n  return getGeoSpiralGrid(maxDistance, {\n    minLng: minLng,\n    maxLng: maxLng,\n    minLat: minLat,\n    maxLat: maxLat\n  }).filter(function (pnt) {\n    return pointInside(pnt, boundariesGeojson, crossesPoleOrAntimeridian);\n  });\n}\nfunction getGeoSpiralGrid(distanceBetweenPoints) {\n  var _ref8 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n    minLng = _ref8.minLng,\n    maxLng = _ref8.maxLng,\n    minLat = _ref8.minLat,\n    maxLat = _ref8.maxLat;\n  var numPoints = Math.round(Math.pow(360 / distanceBetweenPoints, 2) / Math.PI);\n\n  // https://observablehq.com/@mbostock/spherical-fibonacci-lattice\n  var phi = (1 + Math.sqrt(5)) / 2; // golden ratio\n\n  var getPntLng = function getPntLng(idx) {\n    return idx / phi * 360 % 360 - 180;\n  };\n  var getPntLat = function getPntLat(idx) {\n    return Math.acos(2 * idx / numPoints - 1) / Math.PI * 180 - 90;\n  };\n  var getPntIdx = function getPntIdx(lat) {\n    return numPoints * (Math.cos((lat + 90) * Math.PI / 180) + 1) / 2;\n  };\n  var pntIdxRange = [maxLat !== undefined ? Math.ceil(getPntIdx(maxLat)) : 0, minLat !== undefined ? Math.floor(getPntIdx(minLat)) : numPoints - 1];\n  var isLngInRange = minLng === undefined && maxLng === undefined ? function () {\n    return true;\n  } : minLng === undefined ? function (lng) {\n    return lng <= maxLng;\n  } : maxLng === undefined ? function (lng) {\n    return lng >= minLng;\n  } : maxLng >= minLng ? function (lng) {\n    return lng >= minLng && lng <= maxLng;\n  } : function (lng) {\n    return lng >= minLng || lng <= maxLng;\n  }; // for ranges that cross the anti-meridian\n\n  var pnts = [];\n  for (var i = pntIdxRange[0]; i <= pntIdxRange[1]; i++) {\n    var lng = getPntLng(i);\n    isLngInRange(lng) && pnts.push([lng, getPntLat(i)]);\n  }\n  return pnts;\n}\nfunction pointInside(pnt, polygon) {\n  var crossesPoleOrAntimeridian = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  // turf method is more performing but malfunctions if polygon includes a pole (lat = 90 | -90) or crosses the antimeridian (lng = 180 | -180)\n  return crossesPoleOrAntimeridian ? geoContains(polygon, pnt) : turfPointInPolygon(pnt, polygon);\n}\n\nvar THREE = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferGeometry: BufferGeometry,\n  Float32BufferAttribute: Float32BufferAttribute\n};\n\n// support both modes for backwards threejs compatibility\nvar setAttributeFn = new THREE.BufferGeometry().setAttribute ? 'setAttribute' : 'addAttribute';\nvar ConicPolygonGeometry = /*#__PURE__*/function (_THREE$BufferGeometry) {\n  function ConicPolygonGeometry(polygonGeoJson, bottomHeight, topHeight, closedBottom, closedTop, includeSides, curvatureResolution) {\n    var _this;\n    _classCallCheck(this, ConicPolygonGeometry);\n    _this = _callSuper(this, ConicPolygonGeometry);\n    _this.type = 'ConicPolygonGeometry';\n    _this.parameters = {\n      polygonGeoJson: polygonGeoJson,\n      bottomHeight: bottomHeight,\n      topHeight: topHeight,\n      closedBottom: closedBottom,\n      closedTop: closedTop,\n      includeSides: includeSides,\n      curvatureResolution: curvatureResolution\n    };\n\n    // defaults\n    bottomHeight = bottomHeight || 0;\n    topHeight = topHeight || 1;\n    closedBottom = closedBottom !== undefined ? closedBottom : true;\n    closedTop = closedTop !== undefined ? closedTop : true;\n    includeSides = includeSides !== undefined ? includeSides : true;\n    curvatureResolution = curvatureResolution || 5; // in angular degrees\n\n    // pre-calculate contour, triangulation and UV maps\n    var _geoPolygonTriangulat = geoPolygonTriangulate(polygonGeoJson, {\n        resolution: curvatureResolution\n      }),\n      contour = _geoPolygonTriangulat.contour,\n      triangles = _geoPolygonTriangulat.triangles;\n    var flatUvs = merge(triangles.uvs);\n    var vertices = [];\n    var uvs = [];\n    var indices = [];\n    var groupCnt = 0; // add groups to apply different materials to torso / caps\n\n    var addGroup = function addGroup(groupData) {\n      var prevVertCnt = Math.round(vertices.length / 3);\n      var prevIndCnt = indices.length;\n      vertices = vertices.concat(groupData.vertices);\n      uvs = uvs.concat(groupData.uvs);\n      indices = indices.concat(!prevVertCnt ? groupData.indices : groupData.indices.map(function (ind) {\n        return ind + prevVertCnt;\n      }));\n      _this.addGroup(prevIndCnt, indices.length - prevIndCnt, groupCnt++);\n    };\n    includeSides && addGroup(generateTorso());\n    closedBottom && addGroup(generateCap(bottomHeight, false));\n    closedTop && addGroup(generateCap(topHeight, true));\n\n    // build geometry\n    _this.setIndex(indices);\n    _this[setAttributeFn]('position', new THREE.Float32BufferAttribute(vertices, 3));\n    _this[setAttributeFn]('uv', new THREE.Float32BufferAttribute(uvs, 2));\n\n    // auto-calculate normals\n    _this.computeVertexNormals();\n\n    //\n\n    function generateVertices(polygon, altitude) {\n      var altFn = typeof altitude === 'function' ? altitude : function () {\n        return altitude;\n      };\n      var coords3d = polygon.map(function (coords) {\n        return coords.map(function (_ref) {\n          var _ref2 = _slicedToArray(_ref, 2),\n            lng = _ref2[0],\n            lat = _ref2[1];\n          return polar2Cartesian(lat, lng, altFn(lng, lat));\n        });\n      });\n      // returns { vertices, holes, coordinates }. Each point generates 3 vertice items (x,y,z).\n      return flatten(coords3d);\n    }\n    function generateTorso() {\n      var _generateVertices = generateVertices(contour, bottomHeight),\n        bottomVerts = _generateVertices.vertices,\n        holes = _generateVertices.holes;\n      var _generateVertices2 = generateVertices(contour, topHeight),\n        topVerts = _generateVertices2.vertices;\n      var vertices = merge([topVerts, bottomVerts]);\n      var numPoints = Math.round(topVerts.length / 3);\n      var holesIdx = new Set(holes);\n      var lastHoleIdx = 0;\n      var indices = [];\n      for (var v0Idx = 0; v0Idx < numPoints; v0Idx++) {\n        var v1Idx = v0Idx + 1; // next point\n        if (v1Idx === numPoints) {\n          v1Idx = lastHoleIdx; // close final loop\n        } else if (holesIdx.has(v1Idx)) {\n          var holeIdx = v1Idx;\n          v1Idx = lastHoleIdx; // close hole loop\n          lastHoleIdx = holeIdx;\n        }\n\n        // Each pair of coords generates two triangles (faces)\n        indices.push(v0Idx, v0Idx + numPoints, v1Idx + numPoints);\n        indices.push(v1Idx + numPoints, v1Idx, v0Idx);\n      }\n      var uvs = []; // wrap texture around perimeter (u), with v=1 on top\n      for (var v = 1; v >= 0; v--) for (var i = 0; i < numPoints; i += 1) uvs.push(i / (numPoints - 1), v);\n      return {\n        indices: indices,\n        vertices: vertices,\n        uvs: uvs\n      };\n    }\n    function generateCap(radius) {\n      var isTop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return {\n        // need to reverse-wind the bottom triangles to make them face outwards\n        indices: isTop ? triangles.indices : triangles.indices.slice().reverse(),\n        vertices: generateVertices([triangles.points], radius).vertices,\n        uvs: flatUvs\n      };\n    }\n    return _this;\n  }\n  _inherits(ConicPolygonGeometry, _THREE$BufferGeometry);\n  return _createClass(ConicPolygonGeometry);\n}(THREE.BufferGeometry); //\nfunction polar2Cartesian(lat, lng) {\n  var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  var phi = (90 - lat) * Math.PI / 180;\n  var theta = (90 - lng) * Math.PI / 180;\n  return [r * Math.sin(phi) * Math.cos(theta),\n  // x\n  r * Math.cos(phi),\n  // y\n  r * Math.sin(phi) * Math.sin(theta) // z\n  ];\n}\n\nexport { ConicPolygonGeometry as default };\n","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = !0,\n      o = !1;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = !0, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = _objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var s = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (e.includes(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r );\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (String )(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar index = (function () {\n  var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var keyAccessors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var multiItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n  var flattenKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  var keys = (keyAccessors instanceof Array ? keyAccessors.length ? keyAccessors : [undefined] : [keyAccessors]).map(function (key) {\n    return {\n      keyAccessor: key,\n      isProp: !(key instanceof Function)\n    };\n  });\n  var indexedResult = list.reduce(function (res, item) {\n    var iterObj = res;\n    var itemVal = item;\n    keys.forEach(function (_ref, idx) {\n      var keyAccessor = _ref.keyAccessor,\n        isProp = _ref.isProp;\n      var key;\n      if (isProp) {\n        var _itemVal = itemVal,\n          propVal = _itemVal[keyAccessor],\n          rest = _objectWithoutProperties(_itemVal, [keyAccessor].map(_toPropertyKey));\n        key = propVal;\n        itemVal = rest;\n      } else {\n        key = keyAccessor(itemVal, idx);\n      }\n      if (idx + 1 < keys.length) {\n        if (!iterObj.hasOwnProperty(key)) {\n          iterObj[key] = {};\n        }\n        iterObj = iterObj[key];\n      } else {\n        // Leaf key\n        if (multiItem) {\n          if (!iterObj.hasOwnProperty(key)) {\n            iterObj[key] = [];\n          }\n          iterObj[key].push(itemVal);\n        } else {\n          iterObj[key] = itemVal;\n        }\n      }\n    });\n    return res;\n  }, {});\n  if (multiItem instanceof Function) {\n    // Reduce leaf multiple values\n    (function reduce(node) {\n      var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      if (level === keys.length) {\n        Object.keys(node).forEach(function (k) {\n          return node[k] = multiItem(node[k]);\n        });\n      } else {\n        Object.values(node).forEach(function (child) {\n          return reduce(child, level + 1);\n        });\n      }\n    })(indexedResult); // IIFE\n  }\n  var result = indexedResult;\n  if (flattenKeys) {\n    // flatten into array\n    result = [];\n    (function flatten(node) {\n      var accKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      if (accKeys.length === keys.length) {\n        result.push({\n          keys: accKeys,\n          vals: node\n        });\n      } else {\n        Object.entries(node).forEach(function (_ref2) {\n          var _ref3 = _slicedToArray(_ref2, 2),\n            key = _ref3[0],\n            val = _ref3[1];\n          return flatten(val, [].concat(_toConsumableArray(accKeys), [key]));\n        });\n      }\n    })(indexedResult); //IIFE\n\n    if (keyAccessors instanceof Array && keyAccessors.length === 0 && result.length === 1) {\n      // clear keys if there's no key accessors (single result)\n      result[0].keys = [];\n    }\n  }\n  return result;\n});\n\nexport { index as default };\n","// @ts-nocheck\n\nvar libh3 = function (libh3) {\n  libh3 = libh3 || {};\n  var Module = typeof libh3 !== \"undefined\" ? libh3 : {};\n  var moduleOverrides = {};\n  var key;\n  for (key in Module) {\n    if (Module.hasOwnProperty(key)) {\n      moduleOverrides[key] = Module[key];\n    }\n  }\n  var arguments_ = [];\n  var scriptDirectory = \"\";\n  function locateFile(path) {\n    if (Module[\"locateFile\"]) {\n      return Module[\"locateFile\"](path, scriptDirectory);\n    }\n    return scriptDirectory + path;\n  }\n  var readAsync;\n  {\n    if (typeof document !== \"undefined\" && document.currentScript) {\n      scriptDirectory = document.currentScript.src;\n    }\n    if (scriptDirectory.indexOf(\"blob:\") !== 0) {\n      scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf(\"/\") + 1);\n    } else {\n      scriptDirectory = \"\";\n    }\n    readAsync = function readAsync(url, onload, onerror) {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"GET\", url, true);\n      xhr.responseType = \"arraybuffer\";\n      xhr.onload = function xhr_onload() {\n        if (xhr.status == 200 || xhr.status == 0 && xhr.response) {\n          onload(xhr.response);\n          return;\n        }\n        var data = tryParseAsDataURI(url);\n        if (data) {\n          onload(data.buffer);\n          return;\n        }\n        onerror();\n      };\n      xhr.onerror = onerror;\n      xhr.send(null);\n    };\n  }\n  var out = Module[\"print\"] || console.log.bind(console);\n  var err = Module[\"printErr\"] || console.warn.bind(console);\n  for (key in moduleOverrides) {\n    if (moduleOverrides.hasOwnProperty(key)) {\n      Module[key] = moduleOverrides[key];\n    }\n  }\n  moduleOverrides = null;\n  if (Module[\"arguments\"]) { arguments_ = Module[\"arguments\"]; }\n  var tempRet0 = 0;\n  var setTempRet0 = function (value) {\n    tempRet0 = value;\n  };\n  var getTempRet0 = function () {\n    return tempRet0;\n  };\n  var GLOBAL_BASE = 8;\n  function setValue(ptr, value, type, noSafe) {\n    type = type || \"i8\";\n    if (type.charAt(type.length - 1) === \"*\") { type = \"i32\"; }\n    switch (type) {\n      case \"i1\":\n        HEAP8[ptr >> 0] = value;\n        break;\n      case \"i8\":\n        HEAP8[ptr >> 0] = value;\n        break;\n      case \"i16\":\n        HEAP16[ptr >> 1] = value;\n        break;\n      case \"i32\":\n        HEAP32[ptr >> 2] = value;\n        break;\n      case \"i64\":\n        tempI64 = [value >>> 0, (tempDouble = value, +Math_abs(tempDouble) >= +1 ? tempDouble > +0 ? (Math_min(+Math_floor(tempDouble / +4294967296), +4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / +4294967296) >>> 0 : 0)], HEAP32[ptr >> 2] = tempI64[0], HEAP32[ptr + 4 >> 2] = tempI64[1];\n        break;\n      case \"float\":\n        HEAPF32[ptr >> 2] = value;\n        break;\n      case \"double\":\n        HEAPF64[ptr >> 3] = value;\n        break;\n      default:\n        abort(\"invalid type for setValue: \" + type);\n    }\n  }\n  function getValue(ptr, type, noSafe) {\n    type = type || \"i8\";\n    if (type.charAt(type.length - 1) === \"*\") { type = \"i32\"; }\n    switch (type) {\n      case \"i1\":\n        return HEAP8[ptr >> 0];\n      case \"i8\":\n        return HEAP8[ptr >> 0];\n      case \"i16\":\n        return HEAP16[ptr >> 1];\n      case \"i32\":\n        return HEAP32[ptr >> 2];\n      case \"i64\":\n        return HEAP32[ptr >> 2];\n      case \"float\":\n        return HEAPF32[ptr >> 2];\n      case \"double\":\n        return HEAPF64[ptr >> 3];\n      default:\n        abort(\"invalid type for getValue: \" + type);\n    }\n    return null;\n  }\n  var ABORT = false;\n  function assert(condition, text) {\n    if (!condition) {\n      abort(\"Assertion failed: \" + text);\n    }\n  }\n  function getCFunc(ident) {\n    var func = Module[\"_\" + ident];\n    assert(func, \"Cannot call unknown function \" + ident + \", make sure it is exported\");\n    return func;\n  }\n  function ccall(ident, returnType, argTypes, args, opts) {\n    var toC = {\n      \"string\": function (str) {\n        var ret = 0;\n        if (str !== null && str !== undefined && str !== 0) {\n          var len = (str.length << 2) + 1;\n          ret = stackAlloc(len);\n          stringToUTF8(str, ret, len);\n        }\n        return ret;\n      },\n      \"array\": function (arr) {\n        var ret = stackAlloc(arr.length);\n        writeArrayToMemory(arr, ret);\n        return ret;\n      }\n    };\n    function convertReturnValue(ret) {\n      if (returnType === \"string\") { return UTF8ToString(ret); }\n      if (returnType === \"boolean\") { return Boolean(ret); }\n      return ret;\n    }\n    var func = getCFunc(ident);\n    var cArgs = [];\n    var stack = 0;\n    if (args) {\n      for (var i = 0; i < args.length; i++) {\n        var converter = toC[argTypes[i]];\n        if (converter) {\n          if (stack === 0) { stack = stackSave(); }\n          cArgs[i] = converter(args[i]);\n        } else {\n          cArgs[i] = args[i];\n        }\n      }\n    }\n    var ret = func.apply(null, cArgs);\n    ret = convertReturnValue(ret);\n    if (stack !== 0) { stackRestore(stack); }\n    return ret;\n  }\n  function cwrap(ident, returnType, argTypes, opts) {\n    argTypes = argTypes || [];\n    var numericArgs = argTypes.every(function (type) {\n      return type === \"number\";\n    });\n    var numericRet = returnType !== \"string\";\n    if (numericRet && numericArgs && !opts) {\n      return getCFunc(ident);\n    }\n    return function () {\n      return ccall(ident, returnType, argTypes, arguments, opts);\n    };\n  }\n  var UTF8Decoder = typeof TextDecoder !== \"undefined\" ? new TextDecoder(\"utf8\") : undefined;\n  function UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\n    var endIdx = idx + maxBytesToRead;\n    var endPtr = idx;\n    while (u8Array[endPtr] && !(endPtr >= endIdx)) { ++endPtr; }\n    if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\n      return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\n    } else {\n      var str = \"\";\n      while (idx < endPtr) {\n        var u0 = u8Array[idx++];\n        if (!(u0 & 128)) {\n          str += String.fromCharCode(u0);\n          continue;\n        }\n        var u1 = u8Array[idx++] & 63;\n        if ((u0 & 224) == 192) {\n          str += String.fromCharCode((u0 & 31) << 6 | u1);\n          continue;\n        }\n        var u2 = u8Array[idx++] & 63;\n        if ((u0 & 240) == 224) {\n          u0 = (u0 & 15) << 12 | u1 << 6 | u2;\n        } else {\n          u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u8Array[idx++] & 63;\n        }\n        if (u0 < 65536) {\n          str += String.fromCharCode(u0);\n        } else {\n          var ch = u0 - 65536;\n          str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);\n        }\n      }\n    }\n    return str;\n  }\n  function UTF8ToString(ptr, maxBytesToRead) {\n    return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : \"\";\n  }\n  function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\n    if (!(maxBytesToWrite > 0)) { return 0; }\n    var startIdx = outIdx;\n    var endIdx = outIdx + maxBytesToWrite - 1;\n    for (var i = 0; i < str.length; ++i) {\n      var u = str.charCodeAt(i);\n      if (u >= 55296 && u <= 57343) {\n        var u1 = str.charCodeAt(++i);\n        u = 65536 + ((u & 1023) << 10) | u1 & 1023;\n      }\n      if (u <= 127) {\n        if (outIdx >= endIdx) { break; }\n        outU8Array[outIdx++] = u;\n      } else if (u <= 2047) {\n        if (outIdx + 1 >= endIdx) { break; }\n        outU8Array[outIdx++] = 192 | u >> 6;\n        outU8Array[outIdx++] = 128 | u & 63;\n      } else if (u <= 65535) {\n        if (outIdx + 2 >= endIdx) { break; }\n        outU8Array[outIdx++] = 224 | u >> 12;\n        outU8Array[outIdx++] = 128 | u >> 6 & 63;\n        outU8Array[outIdx++] = 128 | u & 63;\n      } else {\n        if (outIdx + 3 >= endIdx) { break; }\n        outU8Array[outIdx++] = 240 | u >> 18;\n        outU8Array[outIdx++] = 128 | u >> 12 & 63;\n        outU8Array[outIdx++] = 128 | u >> 6 & 63;\n        outU8Array[outIdx++] = 128 | u & 63;\n      }\n    }\n    outU8Array[outIdx] = 0;\n    return outIdx - startIdx;\n  }\n  function stringToUTF8(str, outPtr, maxBytesToWrite) {\n    return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n  }\n  var UTF16Decoder = typeof TextDecoder !== \"undefined\" ? new TextDecoder(\"utf-16le\") : undefined;\n  function writeArrayToMemory(array, buffer) {\n    HEAP8.set(array, buffer);\n  }\n  function alignUp(x, multiple) {\n    if (x % multiple > 0) {\n      x += multiple - x % multiple;\n    }\n    return x;\n  }\n  var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\n  function updateGlobalBufferAndViews(buf) {\n    buffer = buf;\n    Module[\"HEAP8\"] = HEAP8 = new Int8Array(buf);\n    Module[\"HEAP16\"] = HEAP16 = new Int16Array(buf);\n    Module[\"HEAP32\"] = HEAP32 = new Int32Array(buf);\n    Module[\"HEAPU8\"] = HEAPU8 = new Uint8Array(buf);\n    Module[\"HEAPU16\"] = HEAPU16 = new Uint16Array(buf);\n    Module[\"HEAPU32\"] = HEAPU32 = new Uint32Array(buf);\n    Module[\"HEAPF32\"] = HEAPF32 = new Float32Array(buf);\n    Module[\"HEAPF64\"] = HEAPF64 = new Float64Array(buf);\n  }\n  var DYNAMIC_BASE = 5271536,\n    DYNAMICTOP_PTR = 28624;\n  var INITIAL_TOTAL_MEMORY = Module[\"TOTAL_MEMORY\"] || 33554432;\n  if (Module[\"buffer\"]) {\n    buffer = Module[\"buffer\"];\n  } else {\n    buffer = new ArrayBuffer(INITIAL_TOTAL_MEMORY);\n  }\n  INITIAL_TOTAL_MEMORY = buffer.byteLength;\n  updateGlobalBufferAndViews(buffer);\n  HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE;\n  function callRuntimeCallbacks(callbacks) {\n    while (callbacks.length > 0) {\n      var callback = callbacks.shift();\n      if (typeof callback == \"function\") {\n        callback();\n        continue;\n      }\n      var func = callback.func;\n      if (typeof func === \"number\") {\n        if (callback.arg === undefined) {\n          Module[\"dynCall_v\"](func);\n        } else {\n          Module[\"dynCall_vi\"](func, callback.arg);\n        }\n      } else {\n        func(callback.arg === undefined ? null : callback.arg);\n      }\n    }\n  }\n  var __ATPRERUN__ = [];\n  var __ATINIT__ = [];\n  var __ATMAIN__ = [];\n  var __ATPOSTRUN__ = [];\n  function preRun() {\n    if (Module[\"preRun\"]) {\n      if (typeof Module[\"preRun\"] == \"function\") { Module[\"preRun\"] = [Module[\"preRun\"]]; }\n      while (Module[\"preRun\"].length) {\n        addOnPreRun(Module[\"preRun\"].shift());\n      }\n    }\n    callRuntimeCallbacks(__ATPRERUN__);\n  }\n  function initRuntime() {\n    callRuntimeCallbacks(__ATINIT__);\n  }\n  function preMain() {\n    callRuntimeCallbacks(__ATMAIN__);\n  }\n  function postRun() {\n    if (Module[\"postRun\"]) {\n      if (typeof Module[\"postRun\"] == \"function\") { Module[\"postRun\"] = [Module[\"postRun\"]]; }\n      while (Module[\"postRun\"].length) {\n        addOnPostRun(Module[\"postRun\"].shift());\n      }\n    }\n    callRuntimeCallbacks(__ATPOSTRUN__);\n  }\n  function addOnPreRun(cb) {\n    __ATPRERUN__.unshift(cb);\n  }\n  function addOnPostRun(cb) {\n    __ATPOSTRUN__.unshift(cb);\n  }\n  var Math_abs = Math.abs;\n  var Math_ceil = Math.ceil;\n  var Math_floor = Math.floor;\n  var Math_min = Math.min;\n  var runDependencies = 0;\n  var runDependencyWatcher = null;\n  var dependenciesFulfilled = null;\n  function addRunDependency(id) {\n    runDependencies++;\n    if (Module[\"monitorRunDependencies\"]) {\n      Module[\"monitorRunDependencies\"](runDependencies);\n    }\n  }\n  function removeRunDependency(id) {\n    runDependencies--;\n    if (Module[\"monitorRunDependencies\"]) {\n      Module[\"monitorRunDependencies\"](runDependencies);\n    }\n    if (runDependencies == 0) {\n      if (runDependencyWatcher !== null) {\n        clearInterval(runDependencyWatcher);\n        runDependencyWatcher = null;\n      }\n      if (dependenciesFulfilled) {\n        var callback = dependenciesFulfilled;\n        dependenciesFulfilled = null;\n        callback();\n      }\n    }\n  }\n  Module[\"preloadedImages\"] = {};\n  Module[\"preloadedAudios\"] = {};\n  var memoryInitializer = null;\n  var dataURIPrefix = \"data:application/octet-stream;base64,\";\n  function isDataURI(filename) {\n    return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0;\n  }\n  var tempDouble;\n  var tempI64;\n  memoryInitializer = \"data:application/octet-stream;base64,AAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAAQAAAAQAAAADAAAABgAAAAUAAAACAAAAAAAAAAIAAAADAAAAAQAAAAQAAAAGAAAAAAAAAAUAAAADAAAABgAAAAQAAAAFAAAAAAAAAAEAAAACAAAABAAAAAUAAAAGAAAAAAAAAAIAAAADAAAAAQAAAAUAAAACAAAAAAAAAAEAAAADAAAABgAAAAQAAAAGAAAAAAAAAAUAAAACAAAAAQAAAAQAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAIAAAADAAAAAAAAAAAAAAACAAAAAAAAAAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAYAAAAAAAAABQAAAAAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAYAAAAAAAAAAwAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAAAABAAAAAAAAAABAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAYAAAAAAAAABAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAgAAAAQAAAADAAAACAAAAAEAAAAHAAAABgAAAAkAAAAAAAAAAwAAAAIAAAACAAAA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AAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAABQAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAUAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAUAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAD/////AQAAAAAAAAADAAAABAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAUAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAD//////////wEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAACAAAAAAAAAAAAAAABAAAAAgAAAAYAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAgAAAAAAAAAAAAAAAQAAAAEAAAAFAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAAAAAAAAAAABAAAAAwAAAAcAAAAGAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADgAAAAIAAAAAAAAAAAAAAAEAAAAAAAAACQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAAAAAAAAAAAAAEAAAAEAAAACAAAAAoAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAAAAAAAAAAAAAQAAAAsAAAAPAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAIAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAAAAAAAAAAAAQAAAAwAAAAQAAAADAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAADwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAAAAAAAAAAABAAAACgAAABMAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAAAAAEAAAANAAAAEQAAAA0AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAACAAAAAAAAAAAAAAABAAAADgAAABIAAAAPAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABIAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAgAAAAAAAAAAAAAAAQAAAP//////////EwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAASAAAAAAAAABgAAAAAAAAAIQAAAAAAAAAeAAAAAAAAACAAAAADAAAAMQAAAAEAAAAwAAAAAwAAADIAAAADAAAACAAAAAAAAAAFAAAABQAAAAoAAAAFAAAAFgAAAAAAAAAQAAAAAAAAABIAAAAAAAAAKQAAAAEAAAAhAAAAAAAAAB4AAAAAAAAABAAAAAAAAAAAAAAABQAAAAIAAAAFAAAADwAAAAEAAAAIAAAAAAAAAAUAAAAFAAAAHwAAAAEAAAAWAAAAAAAAABAAAAAAAAAAAgAAAAAAAAAGAAAAAAAAAA4AAAAAAAAACgAAAAAAAAALAAAAAAAAABEAAAADAAAAGAAAAAEAAAAXAAAAAwAAABkAAAADAAAAAAAAAAAAAAABAAAABQAAAAkAAAAFAAAABQAAAAAAAAACAAAAAAAAAAYAAAAAAAAAEgAAAAEAAAAKAAAAAAAAAAsAAAAAAAAABAAAAAEAAAADAAAABQAAAAcAAAAFAAAACAAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAEAAAAAEAAAAFAAAAAAAAAAIAAAAAAAAABwAAAAAAAAAVAAAAAAAAACYAAAAAAAAACQAAAAAAAAATAAAAAAAAACIAAAADAAAADgAAAAEAAAAUAAAAAwAAACQAAAADAAAAAwAAAAAAAAANAAAABQAAAB0AAAAFAAAAAQAAAAAAAAAHAAAAAAAAABUAAAAAAAAABgAAAAEAAAAJAAAAAAAAABMAAAAAAAAABAAAAAIAAAAMAAAA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Zhu25b633D8c1YgmzowSQNM25BRKWARArGS08/lNxD+LFssHwmMRQLC5aNcxBgJABL9HT0WRF0CjCmJmOGEOQHsuaVzMP/s/TWJCaGGwBUCeu1PAPLzjP9nqN9DZOBNAKE4JcydbCkCGtbd1qjPzP8dgm9U8jhVAtPeKTkVwDkCeCLss5l37P401XMPLmBdAFd29VMVQDUBg0yA55h75Pz6odcYLCRdApBM4rBrkAkDyAVWgQxbRP4XDMnK20hFAymLlF7EmzD8GUgo9XBHlP3lbK7T9COc/k+OhPthhy7+YGEpnrOvCPzBFhLs15u4/epbqB6H4uz9IuuLF5svev6lzLKY31es/CaQ0envF5z8ZY0xlUADXv7zaz7HYEuI/CfbK1sn16T8uAQfWwxLWPzKn/YuFN94/5KdbC1AFu793fyCSnlfvPzK2y4doAMY/NRg5t1/X6b/shq4QJaHDP5yNIAKPOeI/vpn7BSE30r/X4YQrO6nrv78Ziv/Thto/DqJ1Y6+y5z9l51NaxFrlv8QlA65HOLS/86dxiEc96z+Hj0+LFjneP6LzBZ8LTc2/DaJ1Y6+y579l51NaxFrlP8QlA65HOLQ/8qdxiEc967+Jj0+LFjnev6LzBZ8LTc0/1qdbC1AFuz93fyCSnlfvvzK2y4doAMa/NRg5t1/X6T/vhq4QJaHDv5yNIAKPOeK/wJn7BSE30j/W4YQrO6nrP78Ziv/Thtq/CaQ0envF578XY0xlUADXP7zaz7HYEuK/CvbK1sn16b8rAQfWwxLWvzKn/YuFN96/zWLlF7EmzL8GUgo9XBHlv3lbK7T9COe/kOOhPthhyz+cGEpnrOvCvzBFhLs15u6/c5bqB6H4u79IuuLF5sveP6lzLKY31eu/AQAAAP////8HAAAA/////zEAAAD/////VwEAAP////9hCQAA/////6dBAAD/////kcsBAP/////3kAwA/////8H2VwAAAAAAAAAAAAAAAAACAAAA/////w4AAAD/////YgAAAP////+uAgAA/////8ISAAD/////ToMAAP////8ilwMA/////+4hGQD/////gu2vAAAAAAAAAAAAAAAAAAAAAAACAAAA//////////8BAAAAAwAAAP//////////////////////////////////////////////////////////////////////////AQAAAAAAAAACAAAA////////////////AwAAAP//////////////////////////////////////////////////////////////////////////AQAAAAAAAAACAAAA////////////////AwAAAP//////////////////////////////////////////////////////////////////////////AQAAAAAAAAACAAAA////////////////AwAAAP//////////////////////////////////////////////////////////AgAAAP//////////AQAAAAAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD/////////////////////AQAAAP///////////////wIAAAD///////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP///////////////////////////////wIAAAD///////////////8BAAAA/////////////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAABAAAA//////////8CAAAA//////////////////////////////////////////////////////////8DAAAA////////////////AgAAAAAAAAABAAAA//////////////////////////////////////////////////////////////////////////8DAAAA////////////////AgAAAAAAAAABAAAA//////////////////////////////////////////////////////////////////////////8DAAAA////////////////AgAAAAAAAAABAAAA//////////////////////////////////////////////////////////////////////////8DAAAAAQAAAP//////////AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAACAAAAAAAAAAIAAAABAAAAAQAAAAIAAAACAAAAAAAAAAUAAAAFAAAAAAAAAAIAAAACAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAEAAAACAAAAAgAAAAIAAAAAAAAABQAAAAYAAAAAAAAAAgAAAAIAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAACAAAAAQAAAAMAAAACAAAAAgAAAAAAAAAFAAAABwAAAAAAAAACAAAAAgAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAIAAAABAAAABAAAAAIAAAACAAAAAAAAAAUAAAAIAAAAAAAAAAIAAAACAAAAAwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAAAAAAAAgAAAAEAAAAAAAAAAgAAAAIAAAAAAAAABQAAAAkAAAAAAAAAAgAAAAIAAAADAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAgAAAAIAAAAAAAAAAwAAAA4AAAACAAAAAAAAAAIAAAADAAAAAAAAAAAAAAACAAAAAgAAAAMAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAACAAAAAgAAAAAAAAADAAAACgAAAAIAAAAAAAAAAgAAAAMAAAABAAAAAAAAAAIAAAACAAAAAwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAACAAAAAAAAAAMAAAALAAAAAgAAAAAAAAACAAAAAwAAAAIAAAAAAAAAAgAAAAIAAAADAAAACAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAgAAAAIAAAAAAAAAAwAAAAwAAAACAAAAAAAAAAIAAAADAAAAAwAAAAAAAAACAAAAAgAAAAMAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAACAAAAAgAAAAAAAAADAAAADQAAAAIAAAAAAAAAAgAAAAMAAAAEAAAAAAAAAAIAAAACAAAAAwAAAAoAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAIAAAACAAAAAAAAAAMAAAAGAAAAAgAAAAAAAAACAAAAAwAAAA8AAAAAAAAAAgAAAAIAAAADAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAAIAAAAAAAAAAwAAAAcAAAACAAAAAAAAAAIAAAADAAAAEAAAAAAAAAACAAAAAgAAAAMAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAACAAAAAgAAAAAAAAADAAAACAAAAAIAAAAAAAAAAgAAAAMAAAARAAAAAAAAAAIAAAACAAAAAwAAAA0AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAACAAAAAAAAAAMAAAAJAAAAAgAAAAAAAAACAAAAAwAAABIAAAAAAAAAAgAAAAIAAAADAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAgAAAAIAAAAAAAAAAwAAAAUAAAACAAAA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ZV0gPT0gS0kAZmFjZWlqay5jAF9mYWNlSWprUGVudFRvQ2VsbEJvdW5kYXJ5AGFkamFjZW50RmFjZURpcltjZW50ZXJJSksuZmFjZV1bZmFjZTJdID09IEtJAF9mYWNlSWprVG9DZWxsQm91bmRhcnkAaDNJbmRleC5jAGNvbXBhY3RDZWxscwBsYXRMbmdUb0NlbGwAY2VsbFRvQ2hpbGRQb3MAdmFsaWRhdGVDaGlsZFBvcwBsYXRMbmcuYwBjZWxsQXJlYVJhZHMyAHBvbHlnb24tPm5leHQgPT0gTlVMTABsaW5rZWRHZW8uYwBhZGROZXdMaW5rZWRQb2x5Z29uAG5leHQgIT0gTlVMTABsb29wICE9IE5VTEwAYWRkTmV3TGlua2VkTG9vcABwb2x5Z29uLT5maXJzdCA9PSBOVUxMAGFkZExpbmtlZExvb3AAY29vcmQgIT0gTlVMTABhZGRMaW5rZWRDb29yZABsb29wLT5maXJzdCA9PSBOVUxMAGlubmVyTG9vcHMgIT0gTlVMTABub3JtYWxpemVNdWx0aVBvbHlnb24AYmJveGVzICE9IE5VTEwAY2FuZGlkYXRlcyAhPSBOVUxMAGZpbmRQb2x5Z29uRm9ySG9sZQBjYW5kaWRhdGVCQm94ZXMgIT0gTlVMTAByZXZEaXIgIT0gSU5WQUxJRF9ESUdJVABsb2NhbGlqLmMAY2VsbFRvTG9jYWxJamsAYmFzZUNlbGwgIT0gb3JpZ2luQmFzZUNlbGwAIShvcmlnaW5PblBlbnQgJiYgaW5kZXhPblBlbnQpAGJhc2VDZWxsID09IG9yaWdpbkJhc2VDZWxsAGJhc2VDZWxsICE9IElOVkFMSURfQkFTRV9DRUxMAGxvY2FsSWprVG9DZWxsACFfaXNCYXNlQ2VsbFBlbnRhZ29uKGJhc2VDZWxsKQBiYXNlQ2VsbFJvdGF0aW9ucyA+PSAwAGdyaWRQYXRoQ2VsbHMAcG9seWZpbGwuYwBpdGVyU3RlcFBvbHlnb25Db21wYWN0ADAAdmVydGV4LmMAdmVydGV4Um90YXRpb25zAGNlbGxUb1ZlcnRleABncmFwaC0+YnVja2V0cyAhPSBOVUxMAHZlcnRleEdyYXBoLmMAaW5pdFZlcnRleEdyYXBoAG5vZGUgIT0gTlVMTABhZGRWZXJ0ZXhOb2Rl\";\n  var tempDoublePtr = 28640;\n  function demangle(func) {\n    return func;\n  }\n  function demangleAll(text) {\n    var regex = /\\b__Z[\\w\\d_]+/g;\n    return text.replace(regex, function (x) {\n      var y = demangle(x);\n      return x === y ? x : y + \" [\" + x + \"]\";\n    });\n  }\n  function jsStackTrace() {\n    var err = new Error();\n    if (!err.stack) {\n      try {\n        throw new Error(0);\n      } catch (e) {\n        err = e;\n      }\n      if (!err.stack) {\n        return \"(no stack trace available)\";\n      }\n    }\n    return err.stack.toString();\n  }\n  function stackTrace() {\n    var js = jsStackTrace();\n    if (Module[\"extraStackTrace\"]) { js += \"\\n\" + Module[\"extraStackTrace\"](); }\n    return demangleAll(js);\n  }\n  function ___assert_fail(condition, filename, line, func) {\n    abort(\"Assertion failed: \" + UTF8ToString(condition) + \", at: \" + [filename ? UTF8ToString(filename) : \"unknown filename\", line, func ? UTF8ToString(func) : \"unknown function\"]);\n  }\n  function _emscripten_get_heap_size() {\n    return HEAP8.length;\n  }\n  function _emscripten_memcpy_big(dest, src, num) {\n    HEAPU8.set(HEAPU8.subarray(src, src + num), dest);\n  }\n  function ___setErrNo(value) {\n    if (Module[\"___errno_location\"]) { HEAP32[Module[\"___errno_location\"]() >> 2] = value; }\n    return value;\n  }\n  function abortOnCannotGrowMemory(requestedSize) {\n    abort(\"OOM\");\n  }\n  function emscripten_realloc_buffer(size) {\n    try {\n      var newBuffer = new ArrayBuffer(size);\n      if (newBuffer.byteLength != size) { return; }\n      new Int8Array(newBuffer).set(HEAP8);\n      _emscripten_replace_memory(newBuffer);\n      updateGlobalBufferAndViews(newBuffer);\n      return 1;\n    } catch (e) {}\n  }\n  function _emscripten_resize_heap(requestedSize) {\n    var oldSize = _emscripten_get_heap_size();\n    var PAGE_MULTIPLE = 16777216;\n    var LIMIT = 2147483648 - PAGE_MULTIPLE;\n    if (requestedSize > LIMIT) {\n      return false;\n    }\n    var MIN_TOTAL_MEMORY = 16777216;\n    var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY);\n    while (newSize < requestedSize) {\n      if (newSize <= 536870912) {\n        newSize = alignUp(2 * newSize, PAGE_MULTIPLE);\n      } else {\n        newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\n      }\n    }\n    var replacement = emscripten_realloc_buffer(newSize);\n    if (!replacement) {\n      return false;\n    }\n    return true;\n  }\n  var decodeBase64 = typeof atob === \"function\" ? atob : function (input) {\n    var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n    var output = \"\";\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0;\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n    do {\n      enc1 = keyStr.indexOf(input.charAt(i++));\n      enc2 = keyStr.indexOf(input.charAt(i++));\n      enc3 = keyStr.indexOf(input.charAt(i++));\n      enc4 = keyStr.indexOf(input.charAt(i++));\n      chr1 = enc1 << 2 | enc2 >> 4;\n      chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n      chr3 = (enc3 & 3) << 6 | enc4;\n      output = output + String.fromCharCode(chr1);\n      if (enc3 !== 64) {\n        output = output + String.fromCharCode(chr2);\n      }\n      if (enc4 !== 64) {\n        output = output + String.fromCharCode(chr3);\n      }\n    } while (i < input.length);\n    return output;\n  };\n  function intArrayFromBase64(s) {\n    try {\n      var decoded = decodeBase64(s);\n      var bytes = new Uint8Array(decoded.length);\n      for (var i = 0; i < decoded.length; ++i) {\n        bytes[i] = decoded.charCodeAt(i);\n      }\n      return bytes;\n    } catch (_) {\n      throw new Error(\"Converting base64 string to bytes failed.\");\n    }\n  }\n  function tryParseAsDataURI(filename) {\n    if (!isDataURI(filename)) {\n      return;\n    }\n    return intArrayFromBase64(filename.slice(dataURIPrefix.length));\n  }\n  var asmGlobalArg = {\n    \"Math\": Math,\n    \"Int8Array\": Int8Array,\n    \"Int32Array\": Int32Array,\n    \"Uint8Array\": Uint8Array,\n    \"Float32Array\": Float32Array,\n    \"Float64Array\": Float64Array\n  };\n  var asmLibraryArg = {\n    \"a\": abort,\n    \"b\": setTempRet0,\n    \"c\": getTempRet0,\n    \"d\": ___assert_fail,\n    \"e\": ___setErrNo,\n    \"f\": _emscripten_get_heap_size,\n    \"g\": _emscripten_memcpy_big,\n    \"h\": _emscripten_resize_heap,\n    \"i\": abortOnCannotGrowMemory,\n    \"j\": demangle,\n    \"k\": demangleAll,\n    \"l\": emscripten_realloc_buffer,\n    \"m\": jsStackTrace,\n    \"n\": stackTrace,\n    \"o\": tempDoublePtr,\n    \"p\": DYNAMICTOP_PTR\n  }; // EMSCRIPTEN_START_ASM\n  var asm = (/** @suppress {uselessCode} */function (global, env, buffer) {\n    \"almost asm\";\n\n    var a = new global.Int8Array(buffer),\n      b = new global.Int32Array(buffer),\n      c = new global.Uint8Array(buffer),\n      d = new global.Float32Array(buffer),\n      e = new global.Float64Array(buffer),\n      f = env.o | 0,\n      g = env.p | 0,\n      p = global.Math.floor,\n      q = global.Math.abs,\n      r = global.Math.sqrt,\n      s = global.Math.pow,\n      t = global.Math.cos,\n      u = global.Math.sin,\n      v = global.Math.tan,\n      w = global.Math.acos,\n      x = global.Math.asin,\n      y = global.Math.atan,\n      z = global.Math.atan2,\n      A = global.Math.ceil,\n      B = global.Math.imul,\n      C = global.Math.min,\n      D = global.Math.max,\n      E = global.Math.clz32,\n      G = env.b,\n      H = env.c,\n      I = env.d,\n      J = env.e,\n      K = env.f,\n      L = env.g,\n      M = env.h,\n      N = env.i,\n      T = 28656;\n    function W(newBuffer) {\n      a = new Int8Array(newBuffer);\n      c = new Uint8Array(newBuffer);\n      b = new Int32Array(newBuffer);\n      d = new Float32Array(newBuffer);\n      e = new Float64Array(newBuffer);\n      buffer = newBuffer;\n      return true;\n    }\n    // EMSCRIPTEN_START_FUNCS\n    function X(a) {\n      a = a | 0;\n      var b = 0;\n      b = T;\n      T = T + a | 0;\n      T = T + 15 & -16;\n      return b | 0;\n    }\n    function Y() {\n      return T | 0;\n    }\n    function Z(a) {\n      a = a | 0;\n      T = a;\n    }\n    function _(a, b) {\n      a = a | 0;\n      b = b | 0;\n      T = a;\n    }\n    function $(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0;\n      if ((a | 0) < 0) {\n        c = 2;\n        return c | 0;\n      }\n      if ((a | 0) > 13780509) {\n        c = xc(15, c) | 0;\n        return c | 0;\n      } else {\n        d = ((a | 0) < 0) << 31 >> 31;\n        f = Pd(a | 0, d | 0, 3, 0) | 0;\n        e = H() | 0;\n        d = Jd(a | 0, d | 0, 1, 0) | 0;\n        d = Pd(f | 0, e | 0, d | 0, H() | 0) | 0;\n        d = Jd(d | 0, H() | 0, 1, 0) | 0;\n        a = H() | 0;\n        b[c >> 2] = d;\n        b[c + 4 >> 2] = a;\n        c = 0;\n        return c | 0;\n      }\n      return 0;\n    }\n    function aa(a, b, c, d) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      return ba(a, b, c, d, 0) | 0;\n    }\n    function ba(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0;\n      j = T;\n      T = T + 16 | 0;\n      h = j;\n      if (!(ca(a, c, d, e, f) | 0)) {\n        e = 0;\n        T = j;\n        return e | 0;\n      }\n      do { if ((d | 0) >= 0) {\n        if ((d | 0) > 13780509) {\n          g = xc(15, h) | 0;\n          if (g | 0) { break; }\n          i = h;\n          h = b[i >> 2] | 0;\n          i = b[i + 4 >> 2] | 0;\n        } else {\n          g = ((d | 0) < 0) << 31 >> 31;\n          k = Pd(d | 0, g | 0, 3, 0) | 0;\n          i = H() | 0;\n          g = Jd(d | 0, g | 0, 1, 0) | 0;\n          g = Pd(k | 0, i | 0, g | 0, H() | 0) | 0;\n          g = Jd(g | 0, H() | 0, 1, 0) | 0;\n          i = H() | 0;\n          b[h >> 2] = g;\n          b[h + 4 >> 2] = i;\n          h = g;\n        }\n        _d(e | 0, 0, h << 3 | 0) | 0;\n        if (f | 0) {\n          _d(f | 0, 0, h << 2 | 0) | 0;\n          g = da(a, c, d, e, f, h, i, 0) | 0;\n          break;\n        }\n        g = Id(h, 4) | 0;\n        if (!g) { g = 13; }else {\n          k = da(a, c, d, e, g, h, i, 0) | 0;\n          Hd(g);\n          g = k;\n        }\n      } else { g = 2; } } while (0);\n      k = g;\n      T = j;\n      return k | 0;\n    }\n    function ca(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0;\n      q = T;\n      T = T + 16 | 0;\n      o = q;\n      p = q + 8 | 0;\n      n = o;\n      b[n >> 2] = a;\n      b[n + 4 >> 2] = c;\n      if ((d | 0) < 0) {\n        p = 2;\n        T = q;\n        return p | 0;\n      }\n      g = e;\n      b[g >> 2] = a;\n      b[g + 4 >> 2] = c;\n      g = (f | 0) != 0;\n      if (g) { b[f >> 2] = 0; }\n      if (Kb(a, c) | 0) {\n        p = 9;\n        T = q;\n        return p | 0;\n      }\n      b[p >> 2] = 0;\n      a: do { if ((d | 0) >= 1) {\n        if (g) {\n          l = 1;\n          k = 0;\n          m = 0;\n          n = 1;\n          g = a;\n          while (1) {\n            if (!(k | m)) {\n              g = ea(g, c, 4, p, o) | 0;\n              if (g | 0) { break a; }\n              c = o;\n              g = b[c >> 2] | 0;\n              c = b[c + 4 >> 2] | 0;\n              if (Kb(g, c) | 0) {\n                g = 9;\n                break a;\n              }\n            }\n            g = ea(g, c, b[26800 + (m << 2) >> 2] | 0, p, o) | 0;\n            if (g | 0) { break a; }\n            c = o;\n            g = b[c >> 2] | 0;\n            c = b[c + 4 >> 2] | 0;\n            a = e + (l << 3) | 0;\n            b[a >> 2] = g;\n            b[a + 4 >> 2] = c;\n            b[f + (l << 2) >> 2] = n;\n            a = k + 1 | 0;\n            h = (a | 0) == (n | 0);\n            i = m + 1 | 0;\n            j = (i | 0) == 6;\n            if (Kb(g, c) | 0) {\n              g = 9;\n              break a;\n            }\n            n = n + (j & h & 1) | 0;\n            if ((n | 0) > (d | 0)) {\n              g = 0;\n              break;\n            } else {\n              l = l + 1 | 0;\n              k = h ? 0 : a;\n              m = h ? j ? 0 : i : m;\n            }\n          }\n        } else {\n          l = 1;\n          k = 0;\n          m = 0;\n          n = 1;\n          g = a;\n          while (1) {\n            if (!(k | m)) {\n              g = ea(g, c, 4, p, o) | 0;\n              if (g | 0) { break a; }\n              c = o;\n              g = b[c >> 2] | 0;\n              c = b[c + 4 >> 2] | 0;\n              if (Kb(g, c) | 0) {\n                g = 9;\n                break a;\n              }\n            }\n            g = ea(g, c, b[26800 + (m << 2) >> 2] | 0, p, o) | 0;\n            if (g | 0) { break a; }\n            c = o;\n            g = b[c >> 2] | 0;\n            c = b[c + 4 >> 2] | 0;\n            a = e + (l << 3) | 0;\n            b[a >> 2] = g;\n            b[a + 4 >> 2] = c;\n            a = k + 1 | 0;\n            h = (a | 0) == (n | 0);\n            i = m + 1 | 0;\n            j = (i | 0) == 6;\n            if (Kb(g, c) | 0) {\n              g = 9;\n              break a;\n            }\n            n = n + (j & h & 1) | 0;\n            if ((n | 0) > (d | 0)) {\n              g = 0;\n              break;\n            } else {\n              l = l + 1 | 0;\n              k = h ? 0 : a;\n              m = h ? j ? 0 : i : m;\n            }\n          }\n        }\n      } else { g = 0; } } while (0);\n      p = g;\n      T = q;\n      return p | 0;\n    }\n    function da(a, c, d, e, f, g, h, i) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      g = g | 0;\n      h = h | 0;\n      i = i | 0;\n      var j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0;\n      q = T;\n      T = T + 16 | 0;\n      o = q + 8 | 0;\n      p = q;\n      j = Rd(a | 0, c | 0, g | 0, h | 0) | 0;\n      l = H() | 0;\n      m = e + (j << 3) | 0;\n      r = m;\n      s = b[r >> 2] | 0;\n      r = b[r + 4 >> 2] | 0;\n      k = (s | 0) == (a | 0) & (r | 0) == (c | 0);\n      if (!((s | 0) == 0 & (r | 0) == 0 | k)) { do {\n        j = Jd(j | 0, l | 0, 1, 0) | 0;\n        j = Qd(j | 0, H() | 0, g | 0, h | 0) | 0;\n        l = H() | 0;\n        m = e + (j << 3) | 0;\n        s = m;\n        r = b[s >> 2] | 0;\n        s = b[s + 4 >> 2] | 0;\n        k = (r | 0) == (a | 0) & (s | 0) == (c | 0);\n      } while (!((r | 0) == 0 & (s | 0) == 0 | k)); }\n      j = f + (j << 2) | 0;\n      if (k ? (b[j >> 2] | 0) <= (i | 0) : 0) {\n        s = 0;\n        T = q;\n        return s | 0;\n      }\n      s = m;\n      b[s >> 2] = a;\n      b[s + 4 >> 2] = c;\n      b[j >> 2] = i;\n      if ((i | 0) >= (d | 0)) {\n        s = 0;\n        T = q;\n        return s | 0;\n      }\n      k = i + 1 | 0;\n      b[o >> 2] = 0;\n      j = ea(a, c, 2, o, p) | 0;\n      switch (j | 0) {\n        case 9:\n          {\n            n = 9;\n            break;\n          }\n        case 0:\n          {\n            j = p;\n            j = da(b[j >> 2] | 0, b[j + 4 >> 2] | 0, d, e, f, g, h, k) | 0;\n            if (!j) { n = 9; }\n            break;\n          }\n        default:\n\n      }\n      a: do { if ((n | 0) == 9) {\n        b[o >> 2] = 0;\n        j = ea(a, c, 3, o, p) | 0;\n        switch (j | 0) {\n          case 9:\n            break;\n          case 0:\n            {\n              j = p;\n              j = da(b[j >> 2] | 0, b[j + 4 >> 2] | 0, d, e, f, g, h, k) | 0;\n              if (j | 0) { break a; }\n              break;\n            }\n          default:\n            break a;\n        }\n        b[o >> 2] = 0;\n        j = ea(a, c, 1, o, p) | 0;\n        switch (j | 0) {\n          case 9:\n            break;\n          case 0:\n            {\n              j = p;\n              j = da(b[j >> 2] | 0, b[j + 4 >> 2] | 0, d, e, f, g, h, k) | 0;\n              if (j | 0) { break a; }\n              break;\n            }\n          default:\n            break a;\n        }\n        b[o >> 2] = 0;\n        j = ea(a, c, 5, o, p) | 0;\n        switch (j | 0) {\n          case 9:\n            break;\n          case 0:\n            {\n              j = p;\n              j = da(b[j >> 2] | 0, b[j + 4 >> 2] | 0, d, e, f, g, h, k) | 0;\n              if (j | 0) { break a; }\n              break;\n            }\n          default:\n            break a;\n        }\n        b[o >> 2] = 0;\n        j = ea(a, c, 4, o, p) | 0;\n        switch (j | 0) {\n          case 9:\n            break;\n          case 0:\n            {\n              j = p;\n              j = da(b[j >> 2] | 0, b[j + 4 >> 2] | 0, d, e, f, g, h, k) | 0;\n              if (j | 0) { break a; }\n              break;\n            }\n          default:\n            break a;\n        }\n        b[o >> 2] = 0;\n        j = ea(a, c, 6, o, p) | 0;\n        switch (j | 0) {\n          case 9:\n            break;\n          case 0:\n            {\n              j = p;\n              j = da(b[j >> 2] | 0, b[j + 4 >> 2] | 0, d, e, f, g, h, k) | 0;\n              if (j | 0) { break a; }\n              break;\n            }\n          default:\n            break a;\n        }\n        s = 0;\n        T = q;\n        return s | 0;\n      } } while (0);\n      s = j;\n      T = q;\n      return s | 0;\n    }\n    function ea(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0;\n      if (d >>> 0 > 6) {\n        f = 1;\n        return f | 0;\n      }\n      m = (b[e >> 2] | 0) % 6 | 0;\n      b[e >> 2] = m;\n      if ((m | 0) > 0) {\n        g = 0;\n        do {\n          d = $a(d) | 0;\n          g = g + 1 | 0;\n        } while ((g | 0) < (b[e >> 2] | 0));\n      }\n      m = Td(a | 0, c | 0, 45) | 0;\n      H() | 0;\n      l = m & 127;\n      if (l >>> 0 > 121) {\n        f = 5;\n        return f | 0;\n      }\n      j = Sb(a, c) | 0;\n      g = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      g = g & 15;\n      a: do { if (!g) { k = 8; }else {\n        while (1) {\n          h = (15 - g | 0) * 3 | 0;\n          i = Td(a | 0, c | 0, h | 0) | 0;\n          H() | 0;\n          i = i & 7;\n          if ((i | 0) == 7) {\n            c = 5;\n            break;\n          }\n          p = (Yb(g) | 0) == 0;\n          g = g + -1 | 0;\n          n = Ud(7, 0, h | 0) | 0;\n          c = c & ~(H() | 0);\n          o = Ud(b[(p ? 432 : 16) + (i * 28 | 0) + (d << 2) >> 2] | 0, 0, h | 0) | 0;\n          h = H() | 0;\n          d = b[(p ? 640 : 224) + (i * 28 | 0) + (d << 2) >> 2] | 0;\n          a = o | a & ~n;\n          c = h | c;\n          if (!d) {\n            d = 0;\n            break a;\n          }\n          if (!g) {\n            k = 8;\n            break a;\n          }\n        }\n        return c | 0;\n      } } while (0);\n      if ((k | 0) == 8) {\n        p = b[848 + (l * 28 | 0) + (d << 2) >> 2] | 0;\n        o = Ud(p | 0, 0, 45) | 0;\n        a = o | a;\n        c = H() | 0 | c & -1040385;\n        d = b[4272 + (l * 28 | 0) + (d << 2) >> 2] | 0;\n        if ((p & 127 | 0) == 127) {\n          p = Ud(b[848 + (l * 28 | 0) + 20 >> 2] | 0, 0, 45) | 0;\n          c = H() | 0 | c & -1040385;\n          d = b[4272 + (l * 28 | 0) + 20 >> 2] | 0;\n          a = Ub(p | a, c) | 0;\n          c = H() | 0;\n          b[e >> 2] = (b[e >> 2] | 0) + 1;\n        }\n      }\n      i = Td(a | 0, c | 0, 45) | 0;\n      H() | 0;\n      i = i & 127;\n      b: do { if (!(oa(i) | 0)) {\n        if ((d | 0) > 0) {\n          g = 0;\n          do {\n            a = Ub(a, c) | 0;\n            c = H() | 0;\n            g = g + 1 | 0;\n          } while ((g | 0) != (d | 0));\n        }\n      } else {\n        c: do { if ((Sb(a, c) | 0) == 1) {\n          if ((l | 0) != (i | 0)) { if (ua(i, b[7696 + (l * 28 | 0) >> 2] | 0) | 0) {\n            a = Wb(a, c) | 0;\n            h = 1;\n            c = H() | 0;\n            break;\n          } else { I(27795, 26864, 533, 26872); } }\n          switch (j | 0) {\n            case 3:\n              {\n                a = Ub(a, c) | 0;\n                c = H() | 0;\n                b[e >> 2] = (b[e >> 2] | 0) + 1;\n                h = 0;\n                break c;\n              }\n            case 5:\n              {\n                a = Wb(a, c) | 0;\n                c = H() | 0;\n                b[e >> 2] = (b[e >> 2] | 0) + 5;\n                h = 0;\n                break c;\n              }\n            case 0:\n              {\n                p = 9;\n                return p | 0;\n              }\n            default:\n              {\n                p = 1;\n                return p | 0;\n              }\n          }\n        } else { h = 0; } } while (0);\n        if ((d | 0) > 0) {\n          g = 0;\n          do {\n            a = Tb(a, c) | 0;\n            c = H() | 0;\n            g = g + 1 | 0;\n          } while ((g | 0) != (d | 0));\n        }\n        if ((l | 0) != (i | 0)) {\n          if (!(pa(i) | 0)) {\n            if ((h | 0) != 0 | (Sb(a, c) | 0) != 5) { break; }\n            b[e >> 2] = (b[e >> 2] | 0) + 1;\n            break;\n          }\n          switch (m & 127) {\n            case 8:\n            case 118:\n              break b;\n            default:\n\n          }\n          if ((Sb(a, c) | 0) != 3) { b[e >> 2] = (b[e >> 2] | 0) + 1; }\n        }\n      } } while (0);\n      b[e >> 2] = ((b[e >> 2] | 0) + d | 0) % 6 | 0;\n      p = f;\n      b[p >> 2] = a;\n      b[p + 4 >> 2] = c;\n      p = 0;\n      return p | 0;\n    }\n    function fa(a, b, c, d) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      if (!(ga(a, b, c, d) | 0)) {\n        d = 0;\n        return d | 0;\n      }\n      _d(d | 0, 0, c * 48 | 0) | 0;\n      d = ha(a, b, c, d) | 0;\n      return d | 0;\n    }\n    function ga(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0;\n      p = T;\n      T = T + 16 | 0;\n      n = p;\n      o = p + 8 | 0;\n      m = n;\n      b[m >> 2] = a;\n      b[m + 4 >> 2] = c;\n      if ((d | 0) < 0) {\n        o = 2;\n        T = p;\n        return o | 0;\n      }\n      if (!d) {\n        o = e;\n        b[o >> 2] = a;\n        b[o + 4 >> 2] = c;\n        o = 0;\n        T = p;\n        return o | 0;\n      }\n      b[o >> 2] = 0;\n      a: do { if (!(Kb(a, c) | 0)) {\n        f = 0;\n        m = a;\n        do {\n          a = ea(m, c, 4, o, n) | 0;\n          if (a | 0) { break a; }\n          c = n;\n          m = b[c >> 2] | 0;\n          c = b[c + 4 >> 2] | 0;\n          f = f + 1 | 0;\n          if (Kb(m, c) | 0) {\n            a = 9;\n            break a;\n          }\n        } while ((f | 0) < (d | 0));\n        l = e;\n        b[l >> 2] = m;\n        b[l + 4 >> 2] = c;\n        l = d + -1 | 0;\n        k = 0;\n        a = 1;\n        do {\n          f = 26800 + (k << 2) | 0;\n          if ((k | 0) == 5) {\n            h = b[f >> 2] | 0;\n            g = 0;\n            f = a;\n            while (1) {\n              a = n;\n              a = ea(b[a >> 2] | 0, b[a + 4 >> 2] | 0, h, o, n) | 0;\n              if (a | 0) { break a; }\n              if ((g | 0) != (l | 0)) {\n                j = n;\n                i = b[j >> 2] | 0;\n                j = b[j + 4 >> 2] | 0;\n                a = e + (f << 3) | 0;\n                b[a >> 2] = i;\n                b[a + 4 >> 2] = j;\n                if (!(Kb(i, j) | 0)) { a = f + 1 | 0; }else {\n                  a = 9;\n                  break a;\n                }\n              } else { a = f; }\n              g = g + 1 | 0;\n              if ((g | 0) >= (d | 0)) { break; }else { f = a; }\n            }\n          } else {\n            h = n;\n            j = b[f >> 2] | 0;\n            i = 0;\n            f = a;\n            g = b[h >> 2] | 0;\n            h = b[h + 4 >> 2] | 0;\n            while (1) {\n              a = ea(g, h, j, o, n) | 0;\n              if (a | 0) { break a; }\n              h = n;\n              g = b[h >> 2] | 0;\n              h = b[h + 4 >> 2] | 0;\n              a = e + (f << 3) | 0;\n              b[a >> 2] = g;\n              b[a + 4 >> 2] = h;\n              a = f + 1 | 0;\n              if (Kb(g, h) | 0) {\n                a = 9;\n                break a;\n              }\n              i = i + 1 | 0;\n              if ((i | 0) >= (d | 0)) { break; }else { f = a; }\n            }\n          }\n          k = k + 1 | 0;\n        } while (k >>> 0 < 6);\n        a = n;\n        a = ((m | 0) == (b[a >> 2] | 0) ? (c | 0) == (b[a + 4 >> 2] | 0) : 0) ? 0 : 9;\n      } else { a = 9; } } while (0);\n      o = a;\n      T = p;\n      return o | 0;\n    }\n    function ha(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0;\n      m = T;\n      T = T + 16 | 0;\n      h = m;\n      if (!d) {\n        b[e >> 2] = a;\n        b[e + 4 >> 2] = c;\n        e = 0;\n        T = m;\n        return e | 0;\n      }\n      do { if ((d | 0) >= 0) {\n        if ((d | 0) > 13780509) {\n          f = xc(15, h) | 0;\n          if (f | 0) { break; }\n          g = h;\n          f = b[g >> 2] | 0;\n          g = b[g + 4 >> 2] | 0;\n        } else {\n          f = ((d | 0) < 0) << 31 >> 31;\n          l = Pd(d | 0, f | 0, 3, 0) | 0;\n          g = H() | 0;\n          f = Jd(d | 0, f | 0, 1, 0) | 0;\n          f = Pd(l | 0, g | 0, f | 0, H() | 0) | 0;\n          f = Jd(f | 0, H() | 0, 1, 0) | 0;\n          g = H() | 0;\n          l = h;\n          b[l >> 2] = f;\n          b[l + 4 >> 2] = g;\n        }\n        k = Id(f, 8) | 0;\n        if (!k) { f = 13; }else {\n          l = Id(f, 4) | 0;\n          if (!l) {\n            Hd(k);\n            f = 13;\n            break;\n          }\n          f = da(a, c, d, k, l, f, g, 0) | 0;\n          if (f | 0) {\n            Hd(k);\n            Hd(l);\n            break;\n          }\n          c = b[h >> 2] | 0;\n          h = b[h + 4 >> 2] | 0;\n          if ((h | 0) > 0 | (h | 0) == 0 & c >>> 0 > 0) {\n            f = 0;\n            i = 0;\n            j = 0;\n            do {\n              a = k + (i << 3) | 0;\n              g = b[a >> 2] | 0;\n              a = b[a + 4 >> 2] | 0;\n              if (!((g | 0) == 0 & (a | 0) == 0) ? (b[l + (i << 2) >> 2] | 0) == (d | 0) : 0) {\n                n = e + (f << 3) | 0;\n                b[n >> 2] = g;\n                b[n + 4 >> 2] = a;\n                f = f + 1 | 0;\n              }\n              i = Jd(i | 0, j | 0, 1, 0) | 0;\n              j = H() | 0;\n            } while ((j | 0) < (h | 0) | (j | 0) == (h | 0) & i >>> 0 < c >>> 0);\n          }\n          Hd(k);\n          Hd(l);\n          f = 0;\n        }\n      } else { f = 2; } } while (0);\n      n = f;\n      T = m;\n      return n | 0;\n    }\n    function ia(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0;\n      i = T;\n      T = T + 16 | 0;\n      g = i;\n      h = i + 8 | 0;\n      f = (Kb(a, c) | 0) == 0;\n      f = f ? 1 : 2;\n      while (1) {\n        b[h >> 2] = 0;\n        k = (ea(a, c, f, h, g) | 0) == 0;\n        j = g;\n        if (k & ((b[j >> 2] | 0) == (d | 0) ? (b[j + 4 >> 2] | 0) == (e | 0) : 0)) {\n          a = 4;\n          break;\n        }\n        f = f + 1 | 0;\n        if (f >>> 0 >= 7) {\n          f = 7;\n          a = 4;\n          break;\n        }\n      }\n      if ((a | 0) == 4) {\n        T = i;\n        return f | 0;\n      }\n      return 0;\n    }\n    function ja(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0;\n      i = T;\n      T = T + 48 | 0;\n      f = i + 16 | 0;\n      g = i + 8 | 0;\n      h = i;\n      d = _c(d) | 0;\n      if (d | 0) {\n        h = d;\n        T = i;\n        return h | 0;\n      }\n      k = a;\n      j = b[k + 4 >> 2] | 0;\n      d = g;\n      b[d >> 2] = b[k >> 2];\n      b[d + 4 >> 2] = j;\n      Zc(g, f);\n      d = Ha(f, c, h) | 0;\n      if (!d) {\n        c = b[g >> 2] | 0;\n        g = b[a + 8 >> 2] | 0;\n        if ((g | 0) > 0) {\n          f = b[a + 12 >> 2] | 0;\n          d = 0;\n          do {\n            c = (b[f + (d << 3) >> 2] | 0) + c | 0;\n            d = d + 1 | 0;\n          } while ((d | 0) < (g | 0));\n        }\n        d = h;\n        f = b[d >> 2] | 0;\n        d = b[d + 4 >> 2] | 0;\n        g = ((c | 0) < 0) << 31 >> 31;\n        if ((d | 0) < (g | 0) | (d | 0) == (g | 0) & f >>> 0 < c >>> 0) {\n          d = h;\n          b[d >> 2] = c;\n          b[d + 4 >> 2] = g;\n          d = g;\n        } else { c = f; }\n        j = Jd(c | 0, d | 0, 12, 0) | 0;\n        k = H() | 0;\n        d = h;\n        b[d >> 2] = j;\n        b[d + 4 >> 2] = k;\n        d = e;\n        b[d >> 2] = j;\n        b[d + 4 >> 2] = k;\n        d = 0;\n      }\n      k = d;\n      T = i;\n      return k | 0;\n    }\n    function ka(a, c, d, f, g, h, i) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      g = g | 0;\n      h = h | 0;\n      i = i | 0;\n      var j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0,\n        v = 0,\n        w = 0,\n        x = 0,\n        y = 0,\n        z = 0,\n        A = 0,\n        B = 0,\n        C = 0,\n        D = 0,\n        E = 0,\n        F = 0,\n        G = 0,\n        I = 0,\n        J = 0.0,\n        K = 0.0,\n        L = 0.0,\n        M = 0.0;\n      I = T;\n      T = T + 64 | 0;\n      D = I + 48 | 0;\n      E = I + 32 | 0;\n      F = I + 24 | 0;\n      x = I + 8 | 0;\n      y = I;\n      k = b[a >> 2] | 0;\n      if ((k | 0) <= 0) {\n        G = 0;\n        T = I;\n        return G | 0;\n      }\n      z = a + 4 | 0;\n      A = D + 8 | 0;\n      B = E + 8 | 0;\n      C = x + 8 | 0;\n      j = 0;\n      v = 0;\n      while (1) {\n        l = b[z >> 2] | 0;\n        u = l + (v << 4) | 0;\n        b[D >> 2] = b[u >> 2];\n        b[D + 4 >> 2] = b[u + 4 >> 2];\n        b[D + 8 >> 2] = b[u + 8 >> 2];\n        b[D + 12 >> 2] = b[u + 12 >> 2];\n        if ((v | 0) == (k + -1 | 0)) {\n          b[E >> 2] = b[l >> 2];\n          b[E + 4 >> 2] = b[l + 4 >> 2];\n          b[E + 8 >> 2] = b[l + 8 >> 2];\n          b[E + 12 >> 2] = b[l + 12 >> 2];\n        } else {\n          u = l + (v + 1 << 4) | 0;\n          b[E >> 2] = b[u >> 2];\n          b[E + 4 >> 2] = b[u + 4 >> 2];\n          b[E + 8 >> 2] = b[u + 8 >> 2];\n          b[E + 12 >> 2] = b[u + 12 >> 2];\n        }\n        k = Ia(D, E, f, F) | 0;\n        a: do { if (!k) {\n          k = F;\n          l = b[k >> 2] | 0;\n          k = b[k + 4 >> 2] | 0;\n          if ((k | 0) > 0 | (k | 0) == 0 & l >>> 0 > 0) {\n            t = 0;\n            u = 0;\n            b: while (1) {\n              K = 1.0 / (+(l >>> 0) + 4294967296.0 * +(k | 0));\n              M = +e[D >> 3];\n              k = Kd(l | 0, k | 0, t | 0, u | 0) | 0;\n              L = +(k >>> 0) + 4294967296.0 * +(H() | 0);\n              J = +(t >>> 0) + 4294967296.0 * +(u | 0);\n              e[x >> 3] = K * (M * L) + K * (+e[E >> 3] * J);\n              e[C >> 3] = K * (+e[A >> 3] * L) + K * (+e[B >> 3] * J);\n              k = Zb(x, f, y) | 0;\n              if (k | 0) {\n                j = k;\n                break;\n              }\n              s = y;\n              r = b[s >> 2] | 0;\n              s = b[s + 4 >> 2] | 0;\n              o = Rd(r | 0, s | 0, c | 0, d | 0) | 0;\n              m = H() | 0;\n              k = i + (o << 3) | 0;\n              n = k;\n              l = b[n >> 2] | 0;\n              n = b[n + 4 >> 2] | 0;\n              c: do { if ((l | 0) == 0 & (n | 0) == 0) {\n                w = k;\n                G = 16;\n              } else {\n                p = 0;\n                q = 0;\n                while (1) {\n                  if ((p | 0) > (d | 0) | (p | 0) == (d | 0) & q >>> 0 > c >>> 0) {\n                    j = 1;\n                    break b;\n                  }\n                  if ((l | 0) == (r | 0) & (n | 0) == (s | 0)) { break c; }\n                  k = Jd(o | 0, m | 0, 1, 0) | 0;\n                  o = Qd(k | 0, H() | 0, c | 0, d | 0) | 0;\n                  m = H() | 0;\n                  q = Jd(q | 0, p | 0, 1, 0) | 0;\n                  p = H() | 0;\n                  k = i + (o << 3) | 0;\n                  n = k;\n                  l = b[n >> 2] | 0;\n                  n = b[n + 4 >> 2] | 0;\n                  if ((l | 0) == 0 & (n | 0) == 0) {\n                    w = k;\n                    G = 16;\n                    break;\n                  }\n                }\n              } } while (0);\n              if ((G | 0) == 16 ? (G = 0, !((r | 0) == 0 & (s | 0) == 0)) : 0) {\n                q = w;\n                b[q >> 2] = r;\n                b[q + 4 >> 2] = s;\n                q = h + (b[g >> 2] << 3) | 0;\n                b[q >> 2] = r;\n                b[q + 4 >> 2] = s;\n                q = g;\n                q = Jd(b[q >> 2] | 0, b[q + 4 >> 2] | 0, 1, 0) | 0;\n                r = H() | 0;\n                s = g;\n                b[s >> 2] = q;\n                b[s + 4 >> 2] = r;\n              }\n              t = Jd(t | 0, u | 0, 1, 0) | 0;\n              u = H() | 0;\n              k = F;\n              l = b[k >> 2] | 0;\n              k = b[k + 4 >> 2] | 0;\n              if (!((k | 0) > (u | 0) | (k | 0) == (u | 0) & l >>> 0 > t >>> 0)) {\n                l = 1;\n                break a;\n              }\n            }\n            l = 0;\n          } else { l = 1; }\n        } else {\n          l = 0;\n          j = k;\n        } } while (0);\n        v = v + 1 | 0;\n        if (!l) {\n          G = 21;\n          break;\n        }\n        k = b[a >> 2] | 0;\n        if ((v | 0) >= (k | 0)) {\n          j = 0;\n          G = 21;\n          break;\n        }\n      }\n      if ((G | 0) == 21) {\n        T = I;\n        return j | 0;\n      }\n      return 0;\n    }\n    function la(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0,\n        v = 0,\n        w = 0,\n        x = 0,\n        y = 0,\n        z = 0,\n        A = 0,\n        B = 0,\n        C = 0,\n        D = 0,\n        E = 0,\n        F = 0,\n        G = 0,\n        I = 0,\n        J = 0,\n        K = 0;\n      K = T;\n      T = T + 112 | 0;\n      F = K + 80 | 0;\n      j = K + 72 | 0;\n      G = K;\n      I = K + 56 | 0;\n      f = _c(d) | 0;\n      if (f | 0) {\n        J = f;\n        T = K;\n        return J | 0;\n      }\n      k = a + 8 | 0;\n      J = Gd((b[k >> 2] << 5) + 32 | 0) | 0;\n      if (!J) {\n        J = 13;\n        T = K;\n        return J | 0;\n      }\n      $c(a, J);\n      f = _c(d) | 0;\n      if (!f) {\n        D = a;\n        E = b[D + 4 >> 2] | 0;\n        f = j;\n        b[f >> 2] = b[D >> 2];\n        b[f + 4 >> 2] = E;\n        Zc(j, F);\n        f = Ha(F, c, G) | 0;\n        if (!f) {\n          f = b[j >> 2] | 0;\n          g = b[k >> 2] | 0;\n          if ((g | 0) > 0) {\n            h = b[a + 12 >> 2] | 0;\n            d = 0;\n            do {\n              f = (b[h + (d << 3) >> 2] | 0) + f | 0;\n              d = d + 1 | 0;\n            } while ((d | 0) != (g | 0));\n            d = f;\n          } else { d = f; }\n          f = G;\n          g = b[f >> 2] | 0;\n          f = b[f + 4 >> 2] | 0;\n          h = ((d | 0) < 0) << 31 >> 31;\n          if ((f | 0) < (h | 0) | (f | 0) == (h | 0) & g >>> 0 < d >>> 0) {\n            f = G;\n            b[f >> 2] = d;\n            b[f + 4 >> 2] = h;\n            f = h;\n          } else { d = g; }\n          D = Jd(d | 0, f | 0, 12, 0) | 0;\n          E = H() | 0;\n          f = G;\n          b[f >> 2] = D;\n          b[f + 4 >> 2] = E;\n          f = 0;\n        } else {\n          D = 0;\n          E = 0;\n        }\n        if (!f) {\n          d = Id(D, 8) | 0;\n          if (!d) {\n            Hd(J);\n            J = 13;\n            T = K;\n            return J | 0;\n          }\n          i = Id(D, 8) | 0;\n          if (!i) {\n            Hd(J);\n            Hd(d);\n            J = 13;\n            T = K;\n            return J | 0;\n          }\n          B = F;\n          b[B >> 2] = 0;\n          b[B + 4 >> 2] = 0;\n          B = a;\n          C = b[B + 4 >> 2] | 0;\n          f = j;\n          b[f >> 2] = b[B >> 2];\n          b[f + 4 >> 2] = C;\n          f = ka(j, D, E, c, F, d, i) | 0;\n          a: do { if (!f) {\n            b: do { if ((b[k >> 2] | 0) > 0) {\n              h = a + 12 | 0;\n              g = 0;\n              while (1) {\n                f = ka((b[h >> 2] | 0) + (g << 3) | 0, D, E, c, F, d, i) | 0;\n                g = g + 1 | 0;\n                if (f | 0) { break; }\n                if ((g | 0) >= (b[k >> 2] | 0)) { break b; }\n              }\n              Hd(d);\n              Hd(i);\n              Hd(J);\n              break a;\n            } } while (0);\n            if ((E | 0) > 0 | (E | 0) == 0 & D >>> 0 > 0) { _d(i | 0, 0, D << 3 | 0) | 0; }\n            C = F;\n            B = b[C + 4 >> 2] | 0;\n            c: do { if ((B | 0) > 0 | (B | 0) == 0 & (b[C >> 2] | 0) >>> 0 > 0) {\n              y = d;\n              z = i;\n              A = d;\n              B = i;\n              C = d;\n              f = d;\n              v = d;\n              w = i;\n              x = i;\n              d = i;\n              d: while (1) {\n                r = 0;\n                s = 0;\n                t = 0;\n                u = 0;\n                g = 0;\n                h = 0;\n                while (1) {\n                  i = G;\n                  j = i + 56 | 0;\n                  do {\n                    b[i >> 2] = 0;\n                    i = i + 4 | 0;\n                  } while ((i | 0) < (j | 0));\n                  c = y + (r << 3) | 0;\n                  k = b[c >> 2] | 0;\n                  c = b[c + 4 >> 2] | 0;\n                  if (ca(k, c, 1, G, 0) | 0) {\n                    i = G;\n                    j = i + 56 | 0;\n                    do {\n                      b[i >> 2] = 0;\n                      i = i + 4 | 0;\n                    } while ((i | 0) < (j | 0));\n                    i = Id(7, 4) | 0;\n                    if (i | 0) {\n                      da(k, c, 1, G, i, 7, 0, 0) | 0;\n                      Hd(i);\n                    }\n                  }\n                  q = 0;\n                  while (1) {\n                    p = G + (q << 3) | 0;\n                    o = b[p >> 2] | 0;\n                    p = b[p + 4 >> 2] | 0;\n                    e: do { if ((o | 0) == 0 & (p | 0) == 0) {\n                      i = g;\n                      j = h;\n                    } else {\n                      l = Rd(o | 0, p | 0, D | 0, E | 0) | 0;\n                      k = H() | 0;\n                      i = e + (l << 3) | 0;\n                      c = i;\n                      j = b[c >> 2] | 0;\n                      c = b[c + 4 >> 2] | 0;\n                      if (!((j | 0) == 0 & (c | 0) == 0)) {\n                        m = 0;\n                        n = 0;\n                        do {\n                          if ((m | 0) > (E | 0) | (m | 0) == (E | 0) & n >>> 0 > D >>> 0) { break d; }\n                          if ((j | 0) == (o | 0) & (c | 0) == (p | 0)) {\n                            i = g;\n                            j = h;\n                            break e;\n                          }\n                          i = Jd(l | 0, k | 0, 1, 0) | 0;\n                          l = Qd(i | 0, H() | 0, D | 0, E | 0) | 0;\n                          k = H() | 0;\n                          n = Jd(n | 0, m | 0, 1, 0) | 0;\n                          m = H() | 0;\n                          i = e + (l << 3) | 0;\n                          c = i;\n                          j = b[c >> 2] | 0;\n                          c = b[c + 4 >> 2] | 0;\n                        } while (!((j | 0) == 0 & (c | 0) == 0));\n                      }\n                      if ((o | 0) == 0 & (p | 0) == 0) {\n                        i = g;\n                        j = h;\n                        break;\n                      }\n                      ac(o, p, I) | 0;\n                      if (ad(a, J, I) | 0) {\n                        n = Jd(g | 0, h | 0, 1, 0) | 0;\n                        h = H() | 0;\n                        m = i;\n                        b[m >> 2] = o;\n                        b[m + 4 >> 2] = p;\n                        g = z + (g << 3) | 0;\n                        b[g >> 2] = o;\n                        b[g + 4 >> 2] = p;\n                        g = n;\n                      }\n                      i = g;\n                      j = h;\n                    } } while (0);\n                    q = q + 1 | 0;\n                    if (q >>> 0 >= 7) { break; }else {\n                      g = i;\n                      h = j;\n                    }\n                  }\n                  r = Jd(r | 0, s | 0, 1, 0) | 0;\n                  s = H() | 0;\n                  t = Jd(t | 0, u | 0, 1, 0) | 0;\n                  u = H() | 0;\n                  h = F;\n                  g = b[h >> 2] | 0;\n                  h = b[h + 4 >> 2] | 0;\n                  if (!((u | 0) < (h | 0) | (u | 0) == (h | 0) & t >>> 0 < g >>> 0)) { break; }else {\n                    g = i;\n                    h = j;\n                  }\n                }\n                if ((h | 0) > 0 | (h | 0) == 0 & g >>> 0 > 0) {\n                  g = 0;\n                  h = 0;\n                  do {\n                    u = y + (g << 3) | 0;\n                    b[u >> 2] = 0;\n                    b[u + 4 >> 2] = 0;\n                    g = Jd(g | 0, h | 0, 1, 0) | 0;\n                    h = H() | 0;\n                    u = F;\n                    t = b[u + 4 >> 2] | 0;\n                  } while ((h | 0) < (t | 0) | ((h | 0) == (t | 0) ? g >>> 0 < (b[u >> 2] | 0) >>> 0 : 0));\n                }\n                u = F;\n                b[u >> 2] = i;\n                b[u + 4 >> 2] = j;\n                if ((j | 0) > 0 | (j | 0) == 0 & i >>> 0 > 0) {\n                  q = d;\n                  r = x;\n                  s = C;\n                  t = w;\n                  u = z;\n                  d = v;\n                  x = f;\n                  w = A;\n                  v = q;\n                  f = r;\n                  C = B;\n                  B = s;\n                  A = t;\n                  z = y;\n                  y = u;\n                } else { break c; }\n              }\n              Hd(A);\n              Hd(B);\n              Hd(J);\n              f = 1;\n              break a;\n            } else { f = i; } } while (0);\n            Hd(J);\n            Hd(d);\n            Hd(f);\n            f = 0;\n          } else {\n            Hd(d);\n            Hd(i);\n            Hd(J);\n          } } while (0);\n          J = f;\n          T = K;\n          return J | 0;\n        }\n      }\n      Hd(J);\n      J = f;\n      T = K;\n      return J | 0;\n    }\n    function ma(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0;\n      l = T;\n      T = T + 176 | 0;\n      j = l;\n      if ((c | 0) < 1) {\n        xd(d, 0, 0);\n        k = 0;\n        T = l;\n        return k | 0;\n      }\n      i = a;\n      i = Td(b[i >> 2] | 0, b[i + 4 >> 2] | 0, 52) | 0;\n      H() | 0;\n      xd(d, (c | 0) > 6 ? c : 6, i & 15);\n      i = 0;\n      while (1) {\n        e = a + (i << 3) | 0;\n        e = bc(b[e >> 2] | 0, b[e + 4 >> 2] | 0, j) | 0;\n        if (e | 0) { break; }\n        e = b[j >> 2] | 0;\n        if ((e | 0) > 0) {\n          h = 0;\n          do {\n            g = j + 8 + (h << 4) | 0;\n            h = h + 1 | 0;\n            e = j + 8 + (((h | 0) % (e | 0) | 0) << 4) | 0;\n            f = Cd(d, e, g) | 0;\n            if (!f) { Bd(d, g, e) | 0; }else { Ad(d, f) | 0; }\n            e = b[j >> 2] | 0;\n          } while ((h | 0) < (e | 0));\n        }\n        i = i + 1 | 0;\n        if ((i | 0) >= (c | 0)) {\n          e = 0;\n          k = 13;\n          break;\n        }\n      }\n      if ((k | 0) == 13) {\n        T = l;\n        return e | 0;\n      }\n      yd(d);\n      k = e;\n      T = l;\n      return k | 0;\n    }\n    function na(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0;\n      g = T;\n      T = T + 32 | 0;\n      e = g;\n      f = g + 16 | 0;\n      a = ma(a, c, f) | 0;\n      if (a | 0) {\n        d = a;\n        T = g;\n        return d | 0;\n      }\n      b[d >> 2] = 0;\n      b[d + 4 >> 2] = 0;\n      b[d + 8 >> 2] = 0;\n      a = zd(f) | 0;\n      if (a | 0) { do {\n        c = Fc(d) | 0;\n        do {\n          Gc(c, a) | 0;\n          h = a + 16 | 0;\n          b[e >> 2] = b[h >> 2];\n          b[e + 4 >> 2] = b[h + 4 >> 2];\n          b[e + 8 >> 2] = b[h + 8 >> 2];\n          b[e + 12 >> 2] = b[h + 12 >> 2];\n          Ad(f, a) | 0;\n          a = Dd(f, e) | 0;\n        } while ((a | 0) != 0);\n        a = zd(f) | 0;\n      } while ((a | 0) != 0); }\n      yd(f);\n      a = Ic(d) | 0;\n      if (!a) {\n        h = 0;\n        T = g;\n        return h | 0;\n      }\n      Hc(d);\n      h = a;\n      T = g;\n      return h | 0;\n    }\n    function oa(a) {\n      a = a | 0;\n      if (a >>> 0 > 121) {\n        a = 0;\n        return a | 0;\n      }\n      a = b[7696 + (a * 28 | 0) + 16 >> 2] | 0;\n      return a | 0;\n    }\n    function pa(a) {\n      a = a | 0;\n      return (a | 0) == 4 | (a | 0) == 117 | 0;\n    }\n    function qa(a) {\n      a = a | 0;\n      return b[11120 + ((b[a >> 2] | 0) * 216 | 0) + ((b[a + 4 >> 2] | 0) * 72 | 0) + ((b[a + 8 >> 2] | 0) * 24 | 0) + (b[a + 12 >> 2] << 3) >> 2] | 0;\n    }\n    function ra(a) {\n      a = a | 0;\n      return b[11120 + ((b[a >> 2] | 0) * 216 | 0) + ((b[a + 4 >> 2] | 0) * 72 | 0) + ((b[a + 8 >> 2] | 0) * 24 | 0) + (b[a + 12 >> 2] << 3) + 4 >> 2] | 0;\n    }\n    function sa(a, c) {\n      a = a | 0;\n      c = c | 0;\n      a = 7696 + (a * 28 | 0) | 0;\n      b[c >> 2] = b[a >> 2];\n      b[c + 4 >> 2] = b[a + 4 >> 2];\n      b[c + 8 >> 2] = b[a + 8 >> 2];\n      b[c + 12 >> 2] = b[a + 12 >> 2];\n      return;\n    }\n    function ta(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0;\n      if (c >>> 0 > 20) {\n        c = -1;\n        return c | 0;\n      }\n      do { if ((b[11120 + (c * 216 | 0) >> 2] | 0) != (a | 0)) {\n        if ((b[11120 + (c * 216 | 0) + 8 >> 2] | 0) != (a | 0)) {\n          if ((b[11120 + (c * 216 | 0) + 16 >> 2] | 0) != (a | 0)) {\n            if ((b[11120 + (c * 216 | 0) + 24 >> 2] | 0) != (a | 0)) {\n              if ((b[11120 + (c * 216 | 0) + 32 >> 2] | 0) != (a | 0)) {\n                if ((b[11120 + (c * 216 | 0) + 40 >> 2] | 0) != (a | 0)) {\n                  if ((b[11120 + (c * 216 | 0) + 48 >> 2] | 0) != (a | 0)) {\n                    if ((b[11120 + (c * 216 | 0) + 56 >> 2] | 0) != (a | 0)) {\n                      if ((b[11120 + (c * 216 | 0) + 64 >> 2] | 0) != (a | 0)) {\n                        if ((b[11120 + (c * 216 | 0) + 72 >> 2] | 0) != (a | 0)) {\n                          if ((b[11120 + (c * 216 | 0) + 80 >> 2] | 0) != (a | 0)) {\n                            if ((b[11120 + (c * 216 | 0) + 88 >> 2] | 0) != (a | 0)) {\n                              if ((b[11120 + (c * 216 | 0) + 96 >> 2] | 0) != (a | 0)) {\n                                if ((b[11120 + (c * 216 | 0) + 104 >> 2] | 0) != (a | 0)) {\n                                  if ((b[11120 + (c * 216 | 0) + 112 >> 2] | 0) != (a | 0)) {\n                                    if ((b[11120 + (c * 216 | 0) + 120 >> 2] | 0) != (a | 0)) {\n                                      if ((b[11120 + (c * 216 | 0) + 128 >> 2] | 0) != (a | 0)) {\n                                        if ((b[11120 + (c * 216 | 0) + 136 >> 2] | 0) == (a | 0)) {\n                                          a = 2;\n                                          d = 1;\n                                          e = 2;\n                                        } else {\n                                          if ((b[11120 + (c * 216 | 0) + 144 >> 2] | 0) == (a | 0)) {\n                                            a = 0;\n                                            d = 2;\n                                            e = 0;\n                                            break;\n                                          }\n                                          if ((b[11120 + (c * 216 | 0) + 152 >> 2] | 0) == (a | 0)) {\n                                            a = 0;\n                                            d = 2;\n                                            e = 1;\n                                            break;\n                                          }\n                                          if ((b[11120 + (c * 216 | 0) + 160 >> 2] | 0) == (a | 0)) {\n                                            a = 0;\n                                            d = 2;\n                                            e = 2;\n                                            break;\n                                          }\n                                          if ((b[11120 + (c * 216 | 0) + 168 >> 2] | 0) == (a | 0)) {\n                                            a = 1;\n                                            d = 2;\n                                            e = 0;\n                                            break;\n                                          }\n                                          if ((b[11120 + (c * 216 | 0) + 176 >> 2] | 0) == (a | 0)) {\n                                            a = 1;\n                                            d = 2;\n                                            e = 1;\n                                            break;\n                                          }\n                                          if ((b[11120 + (c * 216 | 0) + 184 >> 2] | 0) == (a | 0)) {\n                                            a = 1;\n                                            d = 2;\n                                            e = 2;\n                                            break;\n                                          }\n                                          if ((b[11120 + (c * 216 | 0) + 192 >> 2] | 0) == (a | 0)) {\n                                            a = 2;\n                                            d = 2;\n                                            e = 0;\n                                            break;\n                                          }\n                                          if ((b[11120 + (c * 216 | 0) + 200 >> 2] | 0) == (a | 0)) {\n                                            a = 2;\n                                            d = 2;\n                                            e = 1;\n                                            break;\n                                          }\n                                          if ((b[11120 + (c * 216 | 0) + 208 >> 2] | 0) == (a | 0)) {\n                                            a = 2;\n                                            d = 2;\n                                            e = 2;\n                                            break;\n                                          } else { a = -1; }\n                                          return a | 0;\n                                        }\n                                      } else {\n                                        a = 2;\n                                        d = 1;\n                                        e = 1;\n                                      }\n                                    } else {\n                                      a = 2;\n                                      d = 1;\n                                      e = 0;\n                                    }\n                                  } else {\n                                    a = 1;\n                                    d = 1;\n                                    e = 2;\n                                  }\n                                } else {\n                                  a = 1;\n                                  d = 1;\n                                  e = 1;\n                                }\n                              } else {\n                                a = 1;\n                                d = 1;\n                                e = 0;\n                              }\n                            } else {\n                              a = 0;\n                              d = 1;\n                              e = 2;\n                            }\n                          } else {\n                            a = 0;\n                            d = 1;\n                            e = 1;\n                          }\n                        } else {\n                          a = 0;\n                          d = 1;\n                          e = 0;\n                        }\n                      } else {\n                        a = 2;\n                        d = 0;\n                        e = 2;\n                      }\n                    } else {\n                      a = 2;\n                      d = 0;\n                      e = 1;\n                    }\n                  } else {\n                    a = 2;\n                    d = 0;\n                    e = 0;\n                  }\n                } else {\n                  a = 1;\n                  d = 0;\n                  e = 2;\n                }\n              } else {\n                a = 1;\n                d = 0;\n                e = 1;\n              }\n            } else {\n              a = 1;\n              d = 0;\n              e = 0;\n            }\n          } else {\n            a = 0;\n            d = 0;\n            e = 2;\n          }\n        } else {\n          a = 0;\n          d = 0;\n          e = 1;\n        }\n      } else {\n        a = 0;\n        d = 0;\n        e = 0;\n      } } while (0);\n      c = b[11120 + (c * 216 | 0) + (d * 72 | 0) + (a * 24 | 0) + (e << 3) + 4 >> 2] | 0;\n      return c | 0;\n    }\n    function ua(a, c) {\n      a = a | 0;\n      c = c | 0;\n      if ((b[7696 + (a * 28 | 0) + 20 >> 2] | 0) == (c | 0)) {\n        c = 1;\n        return c | 0;\n      }\n      c = (b[7696 + (a * 28 | 0) + 24 >> 2] | 0) == (c | 0);\n      return c | 0;\n    }\n    function va(a, c) {\n      a = a | 0;\n      c = c | 0;\n      return b[848 + (a * 28 | 0) + (c << 2) >> 2] | 0;\n    }\n    function wa(a, c) {\n      a = a | 0;\n      c = c | 0;\n      if ((b[848 + (a * 28 | 0) >> 2] | 0) == (c | 0)) {\n        c = 0;\n        return c | 0;\n      }\n      if ((b[848 + (a * 28 | 0) + 4 >> 2] | 0) == (c | 0)) {\n        c = 1;\n        return c | 0;\n      }\n      if ((b[848 + (a * 28 | 0) + 8 >> 2] | 0) == (c | 0)) {\n        c = 2;\n        return c | 0;\n      }\n      if ((b[848 + (a * 28 | 0) + 12 >> 2] | 0) == (c | 0)) {\n        c = 3;\n        return c | 0;\n      }\n      if ((b[848 + (a * 28 | 0) + 16 >> 2] | 0) == (c | 0)) {\n        c = 4;\n        return c | 0;\n      }\n      if ((b[848 + (a * 28 | 0) + 20 >> 2] | 0) == (c | 0)) {\n        c = 5;\n        return c | 0;\n      } else { return ((b[848 + (a * 28 | 0) + 24 >> 2] | 0) == (c | 0) ? 6 : 7) | 0; }\n      return 0;\n    }\n    function xa() {\n      return 122;\n    }\n    function ya(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0;\n      c = 0;\n      do {\n        Ud(c | 0, 0, 45) | 0;\n        e = H() | 0 | 134225919;\n        d = a + (c << 3) | 0;\n        b[d >> 2] = -1;\n        b[d + 4 >> 2] = e;\n        c = c + 1 | 0;\n      } while ((c | 0) != 122);\n      return 0;\n    }\n    function za(a) {\n      a = a | 0;\n      var b = 0.0,\n        c = 0.0,\n        d = 0.0;\n      d = +e[a + 16 >> 3];\n      c = +e[a + 24 >> 3];\n      b = d - c;\n      return +(d < c ? b + 6.283185307179586 : b);\n    }\n    function Aa(a) {\n      a = a | 0;\n      return +e[a + 16 >> 3] < +e[a + 24 >> 3] | 0;\n    }\n    function Ba(a) {\n      a = a | 0;\n      return +(+e[a >> 3] - +e[a + 8 >> 3]);\n    }\n    function Ca(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0.0,\n        d = 0.0,\n        f = 0.0;\n      c = +e[b >> 3];\n      if (!(c >= +e[a + 8 >> 3])) {\n        b = 0;\n        return b | 0;\n      }\n      if (!(c <= +e[a >> 3])) {\n        b = 0;\n        return b | 0;\n      }\n      d = +e[a + 16 >> 3];\n      c = +e[a + 24 >> 3];\n      f = +e[b + 8 >> 3];\n      b = f >= c;\n      a = f <= d & 1;\n      if (d < c) {\n        if (b) { a = 1; }\n      } else if (!b) { a = 0; }\n      b = (a | 0) != 0;\n      return b | 0;\n    }\n    function Da(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0,\n        d = 0,\n        f = 0,\n        g = 0.0,\n        h = 0,\n        i = 0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0;\n      if (+e[a >> 3] < +e[b + 8 >> 3]) {\n        d = 0;\n        return d | 0;\n      }\n      if (+e[a + 8 >> 3] > +e[b >> 3]) {\n        d = 0;\n        return d | 0;\n      }\n      g = +e[a + 16 >> 3];\n      c = a + 24 | 0;\n      l = +e[c >> 3];\n      h = g < l;\n      d = b + 16 | 0;\n      k = +e[d >> 3];\n      f = b + 24 | 0;\n      j = +e[f >> 3];\n      i = k < j;\n      b = l - k < j - g;\n      a = h ? i | b ? 1 : 2 : 0;\n      b = i ? h ? 1 : b ? 2 : 1 : 0;\n      g = +nc(g, a);\n      if (g < +nc(+e[f >> 3], b)) {\n        i = 0;\n        return i | 0;\n      }\n      l = +nc(+e[c >> 3], a);\n      if (l > +nc(+e[d >> 3], b)) {\n        i = 0;\n        return i | 0;\n      }\n      i = 1;\n      return i | 0;\n    }\n    function Ea(a, c, d, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0,\n        k = 0.0;\n      h = +e[a + 16 >> 3];\n      k = +e[a + 24 >> 3];\n      a = h < k;\n      j = +e[c + 16 >> 3];\n      i = +e[c + 24 >> 3];\n      g = j < i;\n      c = k - j < i - h;\n      b[d >> 2] = a ? g | c ? 1 : 2 : 0;\n      b[f >> 2] = g ? a ? 1 : c ? 2 : 1 : 0;\n      return;\n    }\n    function Fa(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0,\n        d = 0,\n        f = 0,\n        g = 0.0,\n        h = 0,\n        i = 0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0;\n      if (+e[a >> 3] < +e[b >> 3]) {\n        d = 0;\n        return d | 0;\n      }\n      if (+e[a + 8 >> 3] > +e[b + 8 >> 3]) {\n        d = 0;\n        return d | 0;\n      }\n      d = a + 16 | 0;\n      j = +e[d >> 3];\n      g = +e[a + 24 >> 3];\n      h = j < g;\n      c = b + 16 | 0;\n      l = +e[c >> 3];\n      f = b + 24 | 0;\n      k = +e[f >> 3];\n      i = l < k;\n      b = g - l < k - j;\n      a = h ? i | b ? 1 : 2 : 0;\n      b = i ? h ? 1 : b ? 2 : 1 : 0;\n      g = +nc(g, a);\n      if (!(g <= +nc(+e[f >> 3], b))) {\n        i = 0;\n        return i | 0;\n      }\n      l = +nc(+e[d >> 3], a);\n      i = l >= +nc(+e[c >> 3], b);\n      return i | 0;\n    }\n    function Ga(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        f = 0,\n        g = 0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0;\n      g = T;\n      T = T + 176 | 0;\n      f = g;\n      b[f >> 2] = 4;\n      j = +e[c >> 3];\n      e[f + 8 >> 3] = j;\n      h = +e[c + 16 >> 3];\n      e[f + 16 >> 3] = h;\n      e[f + 24 >> 3] = j;\n      j = +e[c + 24 >> 3];\n      e[f + 32 >> 3] = j;\n      i = +e[c + 8 >> 3];\n      e[f + 40 >> 3] = i;\n      e[f + 48 >> 3] = j;\n      e[f + 56 >> 3] = i;\n      e[f + 64 >> 3] = h;\n      c = f + 72 | 0;\n      d = c + 96 | 0;\n      do {\n        b[c >> 2] = 0;\n        c = c + 4 | 0;\n      } while ((c | 0) < (d | 0));\n      Zd(a | 0, f | 0, 168) | 0;\n      T = g;\n      return;\n    }\n    function Ha(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var g = 0.0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0.0,\n        v = 0.0;\n      t = T;\n      T = T + 288 | 0;\n      n = t + 264 | 0;\n      o = t + 96 | 0;\n      m = t;\n      k = m;\n      l = k + 96 | 0;\n      do {\n        b[k >> 2] = 0;\n        k = k + 4 | 0;\n      } while ((k | 0) < (l | 0));\n      c = fc(c, m) | 0;\n      if (c | 0) {\n        s = c;\n        T = t;\n        return s | 0;\n      }\n      l = m;\n      m = b[l >> 2] | 0;\n      l = b[l + 4 >> 2] | 0;\n      ac(m, l, n) | 0;\n      bc(m, l, o) | 0;\n      j = +pc(n, o + 8 | 0);\n      e[n >> 3] = +e[a >> 3];\n      l = n + 8 | 0;\n      e[l >> 3] = +e[a + 16 >> 3];\n      e[o >> 3] = +e[a + 8 >> 3];\n      m = o + 8 | 0;\n      e[m >> 3] = +e[a + 24 >> 3];\n      h = +pc(n, o);\n      v = +e[l >> 3] - +e[m >> 3];\n      i = +q(+v);\n      u = +e[n >> 3] - +e[o >> 3];\n      g = +q(+u);\n      if (!(v == 0.0 | u == 0.0) ? (v = +Wd(+i, +g), v = +A(+(h * h / +Xd(+(v / +Xd(+i, +g)), 3.0) / (j * (j * 2.59807621135) * .8))), e[f >> 3] = v, r = ~~v >>> 0, s = +q(v) >= 1.0 ? v > 0.0 ? ~~+C(+p(v / 4294967296.0), 4294967295.0) >>> 0 : ~~+A((v - +(~~v >>> 0)) / 4294967296.0) >>> 0 : 0, !((b[f + 4 >> 2] & 2146435072 | 0) == 2146435072)) : 0) {\n        o = (r | 0) == 0 & (s | 0) == 0;\n        c = d;\n        b[c >> 2] = o ? 1 : r;\n        b[c + 4 >> 2] = o ? 0 : s;\n        c = 0;\n      } else { c = 1; }\n      s = c;\n      T = t;\n      return s | 0;\n    }\n    function Ia(a, c, d, g) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      g = g | 0;\n      var h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0.0;\n      m = T;\n      T = T + 288 | 0;\n      j = m + 264 | 0;\n      k = m + 96 | 0;\n      l = m;\n      h = l;\n      i = h + 96 | 0;\n      do {\n        b[h >> 2] = 0;\n        h = h + 4 | 0;\n      } while ((h | 0) < (i | 0));\n      d = fc(d, l) | 0;\n      if (d | 0) {\n        g = d;\n        T = m;\n        return g | 0;\n      }\n      d = l;\n      h = b[d >> 2] | 0;\n      d = b[d + 4 >> 2] | 0;\n      ac(h, d, j) | 0;\n      bc(h, d, k) | 0;\n      n = +pc(j, k + 8 | 0);\n      n = +A(+(+pc(a, c) / (n * 2.0)));\n      e[f >> 3] = n;\n      d = ~~n >>> 0;\n      h = +q(n) >= 1.0 ? n > 0.0 ? ~~+C(+p(n / 4294967296.0), 4294967295.0) >>> 0 : ~~+A((n - +(~~n >>> 0)) / 4294967296.0) >>> 0 : 0;\n      if ((b[f + 4 >> 2] & 2146435072 | 0) == 2146435072) {\n        g = 1;\n        T = m;\n        return g | 0;\n      }\n      l = (d | 0) == 0 & (h | 0) == 0;\n      b[g >> 2] = l ? 1 : d;\n      b[g + 4 >> 2] = l ? 0 : h;\n      g = 0;\n      T = m;\n      return g | 0;\n    }\n    function Ja(a, b) {\n      a = a | 0;\n      b = +b;\n      var c = 0,\n        d = 0.0,\n        f = 0.0,\n        g = 0,\n        h = 0.0,\n        i = 0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0;\n      g = a + 16 | 0;\n      h = +e[g >> 3];\n      c = a + 24 | 0;\n      f = +e[c >> 3];\n      d = h - f;\n      d = h < f ? d + 6.283185307179586 : d;\n      k = +e[a >> 3];\n      i = a + 8 | 0;\n      j = +e[i >> 3];\n      l = k - j;\n      d = (d * b - d) * .5;\n      b = (l * b - l) * .5;\n      k = k + b;\n      e[a >> 3] = k > 1.5707963267948966 ? 1.5707963267948966 : k;\n      b = j - b;\n      e[i >> 3] = b < -1.5707963267948966 ? -1.5707963267948966 : b;\n      b = h + d;\n      b = b > 3.141592653589793 ? b + -6.283185307179586 : b;\n      e[g >> 3] = b < -3.141592653589793 ? b + 6.283185307179586 : b;\n      b = f - d;\n      b = b > 3.141592653589793 ? b + -6.283185307179586 : b;\n      e[c >> 3] = b < -3.141592653589793 ? b + 6.283185307179586 : b;\n      return;\n    }\n    function Ka(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      b[a >> 2] = c;\n      b[a + 4 >> 2] = d;\n      b[a + 8 >> 2] = e;\n      return;\n    }\n    function La(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0.0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0,\n        m = 0,\n        n = 0,\n        o = 0.0;\n      n = c + 8 | 0;\n      b[n >> 2] = 0;\n      k = +e[a >> 3];\n      i = +q(+k);\n      l = +e[a + 8 >> 3];\n      j = +q(+l) * 1.1547005383792515;\n      i = i + j * .5;\n      d = ~~i;\n      a = ~~j;\n      i = i - +(d | 0);\n      j = j - +(a | 0);\n      do { if (i < .5) {\n        if (i < .3333333333333333) {\n          b[c >> 2] = d;\n          if (j < (i + 1.0) * .5) {\n            b[c + 4 >> 2] = a;\n            break;\n          } else {\n            a = a + 1 | 0;\n            b[c + 4 >> 2] = a;\n            break;\n          }\n        } else {\n          o = 1.0 - i;\n          a = (!(j < o) & 1) + a | 0;\n          b[c + 4 >> 2] = a;\n          if (o <= j & j < i * 2.0) {\n            d = d + 1 | 0;\n            b[c >> 2] = d;\n            break;\n          } else {\n            b[c >> 2] = d;\n            break;\n          }\n        }\n      } else {\n        if (!(i < .6666666666666666)) {\n          d = d + 1 | 0;\n          b[c >> 2] = d;\n          if (j < i * .5) {\n            b[c + 4 >> 2] = a;\n            break;\n          } else {\n            a = a + 1 | 0;\n            b[c + 4 >> 2] = a;\n            break;\n          }\n        }\n        if (j < 1.0 - i) {\n          b[c + 4 >> 2] = a;\n          if (i * 2.0 + -1.0 < j) {\n            b[c >> 2] = d;\n            break;\n          }\n        } else {\n          a = a + 1 | 0;\n          b[c + 4 >> 2] = a;\n        }\n        d = d + 1 | 0;\n        b[c >> 2] = d;\n      } } while (0);\n      do { if (k < 0.0) { if (!(a & 1)) {\n        m = (a | 0) / 2 | 0;\n        m = Kd(d | 0, ((d | 0) < 0) << 31 >> 31 | 0, m | 0, ((m | 0) < 0) << 31 >> 31 | 0) | 0;\n        d = ~~(+(d | 0) - (+(m >>> 0) + 4294967296.0 * +(H() | 0)) * 2.0);\n        b[c >> 2] = d;\n        break;\n      } else {\n        m = (a + 1 | 0) / 2 | 0;\n        m = Kd(d | 0, ((d | 0) < 0) << 31 >> 31 | 0, m | 0, ((m | 0) < 0) << 31 >> 31 | 0) | 0;\n        d = ~~(+(d | 0) - ((+(m >>> 0) + 4294967296.0 * +(H() | 0)) * 2.0 + 1.0));\n        b[c >> 2] = d;\n        break;\n      } } } while (0);\n      m = c + 4 | 0;\n      if (l < 0.0) {\n        d = d - ((a << 1 | 1 | 0) / 2 | 0) | 0;\n        b[c >> 2] = d;\n        a = 0 - a | 0;\n        b[m >> 2] = a;\n      }\n      f = a - d | 0;\n      if ((d | 0) < 0) {\n        g = 0 - d | 0;\n        b[m >> 2] = f;\n        b[n >> 2] = g;\n        b[c >> 2] = 0;\n        a = f;\n        d = 0;\n      } else { g = 0; }\n      if ((a | 0) < 0) {\n        d = d - a | 0;\n        b[c >> 2] = d;\n        g = g - a | 0;\n        b[n >> 2] = g;\n        b[m >> 2] = 0;\n        a = 0;\n      }\n      h = d - g | 0;\n      f = a - g | 0;\n      if ((g | 0) < 0) {\n        b[c >> 2] = h;\n        b[m >> 2] = f;\n        b[n >> 2] = 0;\n        a = f;\n        d = h;\n        g = 0;\n      }\n      f = (a | 0) < (d | 0) ? a : d;\n      f = (g | 0) < (f | 0) ? g : f;\n      if ((f | 0) <= 0) { return; }\n      b[c >> 2] = d - f;\n      b[m >> 2] = a - f;\n      b[n >> 2] = g - f;\n      return;\n    }\n    function Ma(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0;\n      c = b[a >> 2] | 0;\n      h = a + 4 | 0;\n      d = b[h >> 2] | 0;\n      if ((c | 0) < 0) {\n        d = d - c | 0;\n        b[h >> 2] = d;\n        g = a + 8 | 0;\n        b[g >> 2] = (b[g >> 2] | 0) - c;\n        b[a >> 2] = 0;\n        c = 0;\n      }\n      if ((d | 0) < 0) {\n        c = c - d | 0;\n        b[a >> 2] = c;\n        g = a + 8 | 0;\n        f = (b[g >> 2] | 0) - d | 0;\n        b[g >> 2] = f;\n        b[h >> 2] = 0;\n        d = 0;\n      } else {\n        f = a + 8 | 0;\n        g = f;\n        f = b[f >> 2] | 0;\n      }\n      if ((f | 0) < 0) {\n        c = c - f | 0;\n        b[a >> 2] = c;\n        d = d - f | 0;\n        b[h >> 2] = d;\n        b[g >> 2] = 0;\n        f = 0;\n      }\n      e = (d | 0) < (c | 0) ? d : c;\n      e = (f | 0) < (e | 0) ? f : e;\n      if ((e | 0) <= 0) { return; }\n      b[a >> 2] = c - e;\n      b[h >> 2] = d - e;\n      b[g >> 2] = f - e;\n      return;\n    }\n    function Na(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0.0,\n        f = 0;\n      f = b[a + 8 >> 2] | 0;\n      d = +((b[a + 4 >> 2] | 0) - f | 0);\n      e[c >> 3] = +((b[a >> 2] | 0) - f | 0) - d * .5;\n      e[c + 8 >> 3] = d * .8660254037844386;\n      return;\n    }\n    function Oa(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      b[d >> 2] = (b[c >> 2] | 0) + (b[a >> 2] | 0);\n      b[d + 4 >> 2] = (b[c + 4 >> 2] | 0) + (b[a + 4 >> 2] | 0);\n      b[d + 8 >> 2] = (b[c + 8 >> 2] | 0) + (b[a + 8 >> 2] | 0);\n      return;\n    }\n    function Pa(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      b[d >> 2] = (b[a >> 2] | 0) - (b[c >> 2] | 0);\n      b[d + 4 >> 2] = (b[a + 4 >> 2] | 0) - (b[c + 4 >> 2] | 0);\n      b[d + 8 >> 2] = (b[a + 8 >> 2] | 0) - (b[c + 8 >> 2] | 0);\n      return;\n    }\n    function Qa(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0;\n      d = B(b[a >> 2] | 0, c) | 0;\n      b[a >> 2] = d;\n      d = a + 4 | 0;\n      e = B(b[d >> 2] | 0, c) | 0;\n      b[d >> 2] = e;\n      a = a + 8 | 0;\n      c = B(b[a >> 2] | 0, c) | 0;\n      b[a >> 2] = c;\n      return;\n    }\n    function Ra(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      h = b[a >> 2] | 0;\n      i = (h | 0) < 0;\n      e = (b[a + 4 >> 2] | 0) - (i ? h : 0) | 0;\n      g = (e | 0) < 0;\n      f = (g ? 0 - e | 0 : 0) + ((b[a + 8 >> 2] | 0) - (i ? h : 0)) | 0;\n      d = (f | 0) < 0;\n      a = d ? 0 : f;\n      c = (g ? 0 : e) - (d ? f : 0) | 0;\n      f = (i ? 0 : h) - (g ? e : 0) - (d ? f : 0) | 0;\n      d = (c | 0) < (f | 0) ? c : f;\n      d = (a | 0) < (d | 0) ? a : d;\n      e = (d | 0) > 0;\n      a = a - (e ? d : 0) | 0;\n      c = c - (e ? d : 0) | 0;\n      a: do { switch (f - (e ? d : 0) | 0) {\n        case 0:\n          switch (c | 0) {\n            case 0:\n              {\n                i = (a | 0) == 0 ? 0 : (a | 0) == 1 ? 1 : 7;\n                return i | 0;\n              }\n            case 1:\n              {\n                i = (a | 0) == 0 ? 2 : (a | 0) == 1 ? 3 : 7;\n                return i | 0;\n              }\n            default:\n              break a;\n          }\n        case 1:\n          switch (c | 0) {\n            case 0:\n              {\n                i = (a | 0) == 0 ? 4 : (a | 0) == 1 ? 5 : 7;\n                return i | 0;\n              }\n            case 1:\n              {\n                if (!a) { a = 6; }else { break a; }\n                return a | 0;\n              }\n            default:\n              break a;\n          }\n        default:\n\n      } } while (0);\n      i = 7;\n      return i | 0;\n    }\n    function Sa(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0;\n      j = a + 8 | 0;\n      h = b[j >> 2] | 0;\n      i = (b[a >> 2] | 0) - h | 0;\n      k = a + 4 | 0;\n      h = (b[k >> 2] | 0) - h | 0;\n      if (i >>> 0 > 715827881 | h >>> 0 > 715827881) {\n        e = (i | 0) > 0;\n        f = 2147483647 - i | 0;\n        g = -2147483648 - i | 0;\n        if (e ? (f | 0) < (i | 0) : (g | 0) > (i | 0)) {\n          k = 1;\n          return k | 0;\n        }\n        d = i << 1;\n        if (e ? (2147483647 - d | 0) < (i | 0) : (-2147483648 - d | 0) > (i | 0)) {\n          k = 1;\n          return k | 0;\n        }\n        if ((h | 0) > 0 ? (2147483647 - h | 0) < (h | 0) : (-2147483648 - h | 0) > (h | 0)) {\n          k = 1;\n          return k | 0;\n        }\n        c = i * 3 | 0;\n        d = h << 1;\n        if ((e ? (f | 0) < (d | 0) : (g | 0) > (d | 0)) ? 1 : (i | 0) > -1 ? (c | -2147483648 | 0) >= (h | 0) : (c ^ -2147483648 | 0) < (h | 0)) {\n          k = 1;\n          return k | 0;\n        }\n      } else {\n        d = h << 1;\n        c = i * 3 | 0;\n      }\n      e = Fd(+(c - h | 0) * .14285714285714285) | 0;\n      b[a >> 2] = e;\n      f = Fd(+(d + i | 0) * .14285714285714285) | 0;\n      b[k >> 2] = f;\n      b[j >> 2] = 0;\n      d = (f | 0) < (e | 0);\n      c = d ? e : f;\n      d = d ? f : e;\n      if ((d | 0) < 0) {\n        if ((d | 0) == -2147483648 ? 1 : (c | 0) > 0 ? (2147483647 - c | 0) < (d | 0) : (-2147483648 - c | 0) > (d | 0)) { I(27795, 26892, 354, 26903); }\n        if ((c | 0) > -1 ? (c | -2147483648 | 0) >= (d | 0) : (c ^ -2147483648 | 0) < (d | 0)) { I(27795, 26892, 354, 26903); }\n      }\n      c = f - e | 0;\n      if ((e | 0) < 0) {\n        d = 0 - e | 0;\n        b[k >> 2] = c;\n        b[j >> 2] = d;\n        b[a >> 2] = 0;\n        e = 0;\n      } else {\n        c = f;\n        d = 0;\n      }\n      if ((c | 0) < 0) {\n        e = e - c | 0;\n        b[a >> 2] = e;\n        d = d - c | 0;\n        b[j >> 2] = d;\n        b[k >> 2] = 0;\n        c = 0;\n      }\n      g = e - d | 0;\n      f = c - d | 0;\n      if ((d | 0) < 0) {\n        b[a >> 2] = g;\n        b[k >> 2] = f;\n        b[j >> 2] = 0;\n        c = f;\n        f = g;\n        d = 0;\n      } else { f = e; }\n      e = (c | 0) < (f | 0) ? c : f;\n      e = (d | 0) < (e | 0) ? d : e;\n      if ((e | 0) <= 0) {\n        k = 0;\n        return k | 0;\n      }\n      b[a >> 2] = f - e;\n      b[k >> 2] = c - e;\n      b[j >> 2] = d - e;\n      k = 0;\n      return k | 0;\n    }\n    function Ta(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      h = a + 8 | 0;\n      f = b[h >> 2] | 0;\n      g = (b[a >> 2] | 0) - f | 0;\n      i = a + 4 | 0;\n      f = (b[i >> 2] | 0) - f | 0;\n      if (g >>> 0 > 715827881 | f >>> 0 > 715827881) {\n        d = (g | 0) > 0;\n        if (d ? (2147483647 - g | 0) < (g | 0) : (-2147483648 - g | 0) > (g | 0)) {\n          i = 1;\n          return i | 0;\n        }\n        c = g << 1;\n        e = (f | 0) > 0;\n        if (e ? (2147483647 - f | 0) < (f | 0) : (-2147483648 - f | 0) > (f | 0)) {\n          i = 1;\n          return i | 0;\n        }\n        j = f << 1;\n        if (e ? (2147483647 - j | 0) < (f | 0) : (-2147483648 - j | 0) > (f | 0)) {\n          j = 1;\n          return j | 0;\n        }\n        if (d ? (2147483647 - c | 0) < (f | 0) : (-2147483648 - c | 0) > (f | 0)) {\n          j = 1;\n          return j | 0;\n        }\n        d = f * 3 | 0;\n        if ((f | 0) > -1 ? (d | -2147483648 | 0) >= (g | 0) : (d ^ -2147483648 | 0) < (g | 0)) {\n          j = 1;\n          return j | 0;\n        }\n      } else {\n        d = f * 3 | 0;\n        c = g << 1;\n      }\n      e = Fd(+(c + f | 0) * .14285714285714285) | 0;\n      b[a >> 2] = e;\n      f = Fd(+(d - g | 0) * .14285714285714285) | 0;\n      b[i >> 2] = f;\n      b[h >> 2] = 0;\n      d = (f | 0) < (e | 0);\n      c = d ? e : f;\n      d = d ? f : e;\n      if ((d | 0) < 0) {\n        if ((d | 0) == -2147483648 ? 1 : (c | 0) > 0 ? (2147483647 - c | 0) < (d | 0) : (-2147483648 - c | 0) > (d | 0)) { I(27795, 26892, 402, 26917); }\n        if ((c | 0) > -1 ? (c | -2147483648 | 0) >= (d | 0) : (c ^ -2147483648 | 0) < (d | 0)) { I(27795, 26892, 402, 26917); }\n      }\n      c = f - e | 0;\n      if ((e | 0) < 0) {\n        d = 0 - e | 0;\n        b[i >> 2] = c;\n        b[h >> 2] = d;\n        b[a >> 2] = 0;\n        e = 0;\n      } else {\n        c = f;\n        d = 0;\n      }\n      if ((c | 0) < 0) {\n        e = e - c | 0;\n        b[a >> 2] = e;\n        d = d - c | 0;\n        b[h >> 2] = d;\n        b[i >> 2] = 0;\n        c = 0;\n      }\n      g = e - d | 0;\n      f = c - d | 0;\n      if ((d | 0) < 0) {\n        b[a >> 2] = g;\n        b[i >> 2] = f;\n        b[h >> 2] = 0;\n        c = f;\n        f = g;\n        d = 0;\n      } else { f = e; }\n      e = (c | 0) < (f | 0) ? c : f;\n      e = (d | 0) < (e | 0) ? d : e;\n      if ((e | 0) <= 0) {\n        j = 0;\n        return j | 0;\n      }\n      b[a >> 2] = f - e;\n      b[i >> 2] = c - e;\n      b[h >> 2] = d - e;\n      j = 0;\n      return j | 0;\n    }\n    function Ua(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      h = a + 8 | 0;\n      d = b[h >> 2] | 0;\n      c = (b[a >> 2] | 0) - d | 0;\n      i = a + 4 | 0;\n      d = (b[i >> 2] | 0) - d | 0;\n      e = Fd(+((c * 3 | 0) - d | 0) * .14285714285714285) | 0;\n      b[a >> 2] = e;\n      c = Fd(+((d << 1) + c | 0) * .14285714285714285) | 0;\n      b[i >> 2] = c;\n      b[h >> 2] = 0;\n      d = c - e | 0;\n      if ((e | 0) < 0) {\n        g = 0 - e | 0;\n        b[i >> 2] = d;\n        b[h >> 2] = g;\n        b[a >> 2] = 0;\n        c = d;\n        e = 0;\n        d = g;\n      } else { d = 0; }\n      if ((c | 0) < 0) {\n        e = e - c | 0;\n        b[a >> 2] = e;\n        d = d - c | 0;\n        b[h >> 2] = d;\n        b[i >> 2] = 0;\n        c = 0;\n      }\n      g = e - d | 0;\n      f = c - d | 0;\n      if ((d | 0) < 0) {\n        b[a >> 2] = g;\n        b[i >> 2] = f;\n        b[h >> 2] = 0;\n        c = f;\n        f = g;\n        d = 0;\n      } else { f = e; }\n      e = (c | 0) < (f | 0) ? c : f;\n      e = (d | 0) < (e | 0) ? d : e;\n      if ((e | 0) <= 0) { return; }\n      b[a >> 2] = f - e;\n      b[i >> 2] = c - e;\n      b[h >> 2] = d - e;\n      return;\n    }\n    function Va(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      h = a + 8 | 0;\n      d = b[h >> 2] | 0;\n      c = (b[a >> 2] | 0) - d | 0;\n      i = a + 4 | 0;\n      d = (b[i >> 2] | 0) - d | 0;\n      e = Fd(+((c << 1) + d | 0) * .14285714285714285) | 0;\n      b[a >> 2] = e;\n      c = Fd(+((d * 3 | 0) - c | 0) * .14285714285714285) | 0;\n      b[i >> 2] = c;\n      b[h >> 2] = 0;\n      d = c - e | 0;\n      if ((e | 0) < 0) {\n        g = 0 - e | 0;\n        b[i >> 2] = d;\n        b[h >> 2] = g;\n        b[a >> 2] = 0;\n        c = d;\n        e = 0;\n        d = g;\n      } else { d = 0; }\n      if ((c | 0) < 0) {\n        e = e - c | 0;\n        b[a >> 2] = e;\n        d = d - c | 0;\n        b[h >> 2] = d;\n        b[i >> 2] = 0;\n        c = 0;\n      }\n      g = e - d | 0;\n      f = c - d | 0;\n      if ((d | 0) < 0) {\n        b[a >> 2] = g;\n        b[i >> 2] = f;\n        b[h >> 2] = 0;\n        c = f;\n        f = g;\n        d = 0;\n      } else { f = e; }\n      e = (c | 0) < (f | 0) ? c : f;\n      e = (d | 0) < (e | 0) ? d : e;\n      if ((e | 0) <= 0) { return; }\n      b[a >> 2] = f - e;\n      b[i >> 2] = c - e;\n      b[h >> 2] = d - e;\n      return;\n    }\n    function Wa(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      c = b[a >> 2] | 0;\n      h = a + 4 | 0;\n      d = b[h >> 2] | 0;\n      i = a + 8 | 0;\n      e = b[i >> 2] | 0;\n      f = d + (c * 3 | 0) | 0;\n      b[a >> 2] = f;\n      d = e + (d * 3 | 0) | 0;\n      b[h >> 2] = d;\n      c = (e * 3 | 0) + c | 0;\n      b[i >> 2] = c;\n      e = d - f | 0;\n      if ((f | 0) < 0) {\n        c = c - f | 0;\n        b[h >> 2] = e;\n        b[i >> 2] = c;\n        b[a >> 2] = 0;\n        d = e;\n        e = 0;\n      } else { e = f; }\n      if ((d | 0) < 0) {\n        e = e - d | 0;\n        b[a >> 2] = e;\n        c = c - d | 0;\n        b[i >> 2] = c;\n        b[h >> 2] = 0;\n        d = 0;\n      }\n      g = e - c | 0;\n      f = d - c | 0;\n      if ((c | 0) < 0) {\n        b[a >> 2] = g;\n        b[h >> 2] = f;\n        b[i >> 2] = 0;\n        e = g;\n        c = 0;\n      } else { f = d; }\n      d = (f | 0) < (e | 0) ? f : e;\n      d = (c | 0) < (d | 0) ? c : d;\n      if ((d | 0) <= 0) { return; }\n      b[a >> 2] = e - d;\n      b[h >> 2] = f - d;\n      b[i >> 2] = c - d;\n      return;\n    }\n    function Xa(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      f = b[a >> 2] | 0;\n      h = a + 4 | 0;\n      c = b[h >> 2] | 0;\n      i = a + 8 | 0;\n      d = b[i >> 2] | 0;\n      e = (c * 3 | 0) + f | 0;\n      f = d + (f * 3 | 0) | 0;\n      b[a >> 2] = f;\n      b[h >> 2] = e;\n      c = (d * 3 | 0) + c | 0;\n      b[i >> 2] = c;\n      d = e - f | 0;\n      if ((f | 0) < 0) {\n        c = c - f | 0;\n        b[h >> 2] = d;\n        b[i >> 2] = c;\n        b[a >> 2] = 0;\n        f = 0;\n      } else { d = e; }\n      if ((d | 0) < 0) {\n        f = f - d | 0;\n        b[a >> 2] = f;\n        c = c - d | 0;\n        b[i >> 2] = c;\n        b[h >> 2] = 0;\n        d = 0;\n      }\n      g = f - c | 0;\n      e = d - c | 0;\n      if ((c | 0) < 0) {\n        b[a >> 2] = g;\n        b[h >> 2] = e;\n        b[i >> 2] = 0;\n        f = g;\n        c = 0;\n      } else { e = d; }\n      d = (e | 0) < (f | 0) ? e : f;\n      d = (c | 0) < (d | 0) ? c : d;\n      if ((d | 0) <= 0) { return; }\n      b[a >> 2] = f - d;\n      b[h >> 2] = e - d;\n      b[i >> 2] = c - d;\n      return;\n    }\n    function Ya(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      if ((c + -1 | 0) >>> 0 >= 6) { return; }\n      f = (b[15440 + (c * 12 | 0) >> 2] | 0) + (b[a >> 2] | 0) | 0;\n      b[a >> 2] = f;\n      i = a + 4 | 0;\n      e = (b[15440 + (c * 12 | 0) + 4 >> 2] | 0) + (b[i >> 2] | 0) | 0;\n      b[i >> 2] = e;\n      h = a + 8 | 0;\n      c = (b[15440 + (c * 12 | 0) + 8 >> 2] | 0) + (b[h >> 2] | 0) | 0;\n      b[h >> 2] = c;\n      d = e - f | 0;\n      if ((f | 0) < 0) {\n        c = c - f | 0;\n        b[i >> 2] = d;\n        b[h >> 2] = c;\n        b[a >> 2] = 0;\n        e = 0;\n      } else {\n        d = e;\n        e = f;\n      }\n      if ((d | 0) < 0) {\n        e = e - d | 0;\n        b[a >> 2] = e;\n        c = c - d | 0;\n        b[h >> 2] = c;\n        b[i >> 2] = 0;\n        d = 0;\n      }\n      g = e - c | 0;\n      f = d - c | 0;\n      if ((c | 0) < 0) {\n        b[a >> 2] = g;\n        b[i >> 2] = f;\n        b[h >> 2] = 0;\n        e = g;\n        c = 0;\n      } else { f = d; }\n      d = (f | 0) < (e | 0) ? f : e;\n      d = (c | 0) < (d | 0) ? c : d;\n      if ((d | 0) <= 0) { return; }\n      b[a >> 2] = e - d;\n      b[i >> 2] = f - d;\n      b[h >> 2] = c - d;\n      return;\n    }\n    function Za(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      f = b[a >> 2] | 0;\n      h = a + 4 | 0;\n      c = b[h >> 2] | 0;\n      i = a + 8 | 0;\n      d = b[i >> 2] | 0;\n      e = c + f | 0;\n      f = d + f | 0;\n      b[a >> 2] = f;\n      b[h >> 2] = e;\n      c = d + c | 0;\n      b[i >> 2] = c;\n      d = e - f | 0;\n      if ((f | 0) < 0) {\n        c = c - f | 0;\n        b[h >> 2] = d;\n        b[i >> 2] = c;\n        b[a >> 2] = 0;\n        e = 0;\n      } else {\n        d = e;\n        e = f;\n      }\n      if ((d | 0) < 0) {\n        e = e - d | 0;\n        b[a >> 2] = e;\n        c = c - d | 0;\n        b[i >> 2] = c;\n        b[h >> 2] = 0;\n        d = 0;\n      }\n      g = e - c | 0;\n      f = d - c | 0;\n      if ((c | 0) < 0) {\n        b[a >> 2] = g;\n        b[h >> 2] = f;\n        b[i >> 2] = 0;\n        e = g;\n        c = 0;\n      } else { f = d; }\n      d = (f | 0) < (e | 0) ? f : e;\n      d = (c | 0) < (d | 0) ? c : d;\n      if ((d | 0) <= 0) { return; }\n      b[a >> 2] = e - d;\n      b[h >> 2] = f - d;\n      b[i >> 2] = c - d;\n      return;\n    }\n    function _a(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      c = b[a >> 2] | 0;\n      h = a + 4 | 0;\n      e = b[h >> 2] | 0;\n      i = a + 8 | 0;\n      d = b[i >> 2] | 0;\n      f = e + c | 0;\n      b[a >> 2] = f;\n      e = d + e | 0;\n      b[h >> 2] = e;\n      c = d + c | 0;\n      b[i >> 2] = c;\n      d = e - f | 0;\n      if ((f | 0) < 0) {\n        c = c - f | 0;\n        b[h >> 2] = d;\n        b[i >> 2] = c;\n        b[a >> 2] = 0;\n        e = 0;\n      } else {\n        d = e;\n        e = f;\n      }\n      if ((d | 0) < 0) {\n        e = e - d | 0;\n        b[a >> 2] = e;\n        c = c - d | 0;\n        b[i >> 2] = c;\n        b[h >> 2] = 0;\n        d = 0;\n      }\n      g = e - c | 0;\n      f = d - c | 0;\n      if ((c | 0) < 0) {\n        b[a >> 2] = g;\n        b[h >> 2] = f;\n        b[i >> 2] = 0;\n        e = g;\n        c = 0;\n      } else { f = d; }\n      d = (f | 0) < (e | 0) ? f : e;\n      d = (c | 0) < (d | 0) ? c : d;\n      if ((d | 0) <= 0) { return; }\n      b[a >> 2] = e - d;\n      b[h >> 2] = f - d;\n      b[i >> 2] = c - d;\n      return;\n    }\n    function $a(a) {\n      a = a | 0;\n      switch (a | 0) {\n        case 1:\n          {\n            a = 5;\n            break;\n          }\n        case 5:\n          {\n            a = 4;\n            break;\n          }\n        case 4:\n          {\n            a = 6;\n            break;\n          }\n        case 6:\n          {\n            a = 2;\n            break;\n          }\n        case 2:\n          {\n            a = 3;\n            break;\n          }\n        case 3:\n          {\n            a = 1;\n            break;\n          }\n        default:\n\n      }\n      return a | 0;\n    }\n    function ab(a) {\n      a = a | 0;\n      switch (a | 0) {\n        case 1:\n          {\n            a = 3;\n            break;\n          }\n        case 3:\n          {\n            a = 2;\n            break;\n          }\n        case 2:\n          {\n            a = 6;\n            break;\n          }\n        case 6:\n          {\n            a = 4;\n            break;\n          }\n        case 4:\n          {\n            a = 5;\n            break;\n          }\n        case 5:\n          {\n            a = 1;\n            break;\n          }\n        default:\n\n      }\n      return a | 0;\n    }\n    function bb(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      c = b[a >> 2] | 0;\n      h = a + 4 | 0;\n      d = b[h >> 2] | 0;\n      i = a + 8 | 0;\n      e = b[i >> 2] | 0;\n      f = d + (c << 1) | 0;\n      b[a >> 2] = f;\n      d = e + (d << 1) | 0;\n      b[h >> 2] = d;\n      c = (e << 1) + c | 0;\n      b[i >> 2] = c;\n      e = d - f | 0;\n      if ((f | 0) < 0) {\n        c = c - f | 0;\n        b[h >> 2] = e;\n        b[i >> 2] = c;\n        b[a >> 2] = 0;\n        d = e;\n        e = 0;\n      } else { e = f; }\n      if ((d | 0) < 0) {\n        e = e - d | 0;\n        b[a >> 2] = e;\n        c = c - d | 0;\n        b[i >> 2] = c;\n        b[h >> 2] = 0;\n        d = 0;\n      }\n      g = e - c | 0;\n      f = d - c | 0;\n      if ((c | 0) < 0) {\n        b[a >> 2] = g;\n        b[h >> 2] = f;\n        b[i >> 2] = 0;\n        e = g;\n        c = 0;\n      } else { f = d; }\n      d = (f | 0) < (e | 0) ? f : e;\n      d = (c | 0) < (d | 0) ? c : d;\n      if ((d | 0) <= 0) { return; }\n      b[a >> 2] = e - d;\n      b[h >> 2] = f - d;\n      b[i >> 2] = c - d;\n      return;\n    }\n    function cb(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      f = b[a >> 2] | 0;\n      h = a + 4 | 0;\n      c = b[h >> 2] | 0;\n      i = a + 8 | 0;\n      d = b[i >> 2] | 0;\n      e = (c << 1) + f | 0;\n      f = d + (f << 1) | 0;\n      b[a >> 2] = f;\n      b[h >> 2] = e;\n      c = (d << 1) + c | 0;\n      b[i >> 2] = c;\n      d = e - f | 0;\n      if ((f | 0) < 0) {\n        c = c - f | 0;\n        b[h >> 2] = d;\n        b[i >> 2] = c;\n        b[a >> 2] = 0;\n        f = 0;\n      } else { d = e; }\n      if ((d | 0) < 0) {\n        f = f - d | 0;\n        b[a >> 2] = f;\n        c = c - d | 0;\n        b[i >> 2] = c;\n        b[h >> 2] = 0;\n        d = 0;\n      }\n      g = f - c | 0;\n      e = d - c | 0;\n      if ((c | 0) < 0) {\n        b[a >> 2] = g;\n        b[h >> 2] = e;\n        b[i >> 2] = 0;\n        f = g;\n        c = 0;\n      } else { e = d; }\n      d = (e | 0) < (f | 0) ? e : f;\n      d = (c | 0) < (d | 0) ? c : d;\n      if ((d | 0) <= 0) { return; }\n      b[a >> 2] = f - d;\n      b[h >> 2] = e - d;\n      b[i >> 2] = c - d;\n      return;\n    }\n    function db(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      h = (b[a >> 2] | 0) - (b[c >> 2] | 0) | 0;\n      i = (h | 0) < 0;\n      e = (b[a + 4 >> 2] | 0) - (b[c + 4 >> 2] | 0) - (i ? h : 0) | 0;\n      g = (e | 0) < 0;\n      f = (i ? 0 - h | 0 : 0) + (b[a + 8 >> 2] | 0) - (b[c + 8 >> 2] | 0) + (g ? 0 - e | 0 : 0) | 0;\n      a = (f | 0) < 0;\n      c = a ? 0 : f;\n      d = (g ? 0 : e) - (a ? f : 0) | 0;\n      f = (i ? 0 : h) - (g ? e : 0) - (a ? f : 0) | 0;\n      a = (d | 0) < (f | 0) ? d : f;\n      a = (c | 0) < (a | 0) ? c : a;\n      e = (a | 0) > 0;\n      c = c - (e ? a : 0) | 0;\n      d = d - (e ? a : 0) | 0;\n      a = f - (e ? a : 0) | 0;\n      a = (a | 0) > -1 ? a : 0 - a | 0;\n      d = (d | 0) > -1 ? d : 0 - d | 0;\n      c = (c | 0) > -1 ? c : 0 - c | 0;\n      c = (d | 0) > (c | 0) ? d : c;\n      return ((a | 0) > (c | 0) ? a : c) | 0;\n    }\n    function eb(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0;\n      d = b[a + 8 >> 2] | 0;\n      b[c >> 2] = (b[a >> 2] | 0) - d;\n      b[c + 4 >> 2] = (b[a + 4 >> 2] | 0) - d;\n      return;\n    }\n    function fb(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      e = b[a >> 2] | 0;\n      b[c >> 2] = e;\n      f = b[a + 4 >> 2] | 0;\n      h = c + 4 | 0;\n      b[h >> 2] = f;\n      i = c + 8 | 0;\n      b[i >> 2] = 0;\n      d = (f | 0) < (e | 0);\n      a = d ? e : f;\n      d = d ? f : e;\n      if ((d | 0) < 0) {\n        if ((d | 0) == -2147483648 ? 1 : (a | 0) > 0 ? (2147483647 - a | 0) < (d | 0) : (-2147483648 - a | 0) > (d | 0)) {\n          c = 1;\n          return c | 0;\n        }\n        if ((a | 0) > -1 ? (a | -2147483648 | 0) >= (d | 0) : (a ^ -2147483648 | 0) < (d | 0)) {\n          c = 1;\n          return c | 0;\n        }\n      }\n      a = f - e | 0;\n      if ((e | 0) < 0) {\n        d = 0 - e | 0;\n        b[h >> 2] = a;\n        b[i >> 2] = d;\n        b[c >> 2] = 0;\n        e = 0;\n      } else {\n        a = f;\n        d = 0;\n      }\n      if ((a | 0) < 0) {\n        e = e - a | 0;\n        b[c >> 2] = e;\n        d = d - a | 0;\n        b[i >> 2] = d;\n        b[h >> 2] = 0;\n        a = 0;\n      }\n      g = e - d | 0;\n      f = a - d | 0;\n      if ((d | 0) < 0) {\n        b[c >> 2] = g;\n        b[h >> 2] = f;\n        b[i >> 2] = 0;\n        a = f;\n        f = g;\n        d = 0;\n      } else { f = e; }\n      e = (a | 0) < (f | 0) ? a : f;\n      e = (d | 0) < (e | 0) ? d : e;\n      if ((e | 0) <= 0) {\n        c = 0;\n        return c | 0;\n      }\n      b[c >> 2] = f - e;\n      b[h >> 2] = a - e;\n      b[i >> 2] = d - e;\n      c = 0;\n      return c | 0;\n    }\n    function gb(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0;\n      c = a + 8 | 0;\n      f = b[c >> 2] | 0;\n      d = f - (b[a >> 2] | 0) | 0;\n      b[a >> 2] = d;\n      e = a + 4 | 0;\n      a = (b[e >> 2] | 0) - f | 0;\n      b[e >> 2] = a;\n      b[c >> 2] = 0 - (a + d);\n      return;\n    }\n    function hb(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      d = b[a >> 2] | 0;\n      c = 0 - d | 0;\n      b[a >> 2] = c;\n      h = a + 8 | 0;\n      b[h >> 2] = 0;\n      i = a + 4 | 0;\n      e = b[i >> 2] | 0;\n      f = e + d | 0;\n      if ((d | 0) > 0) {\n        b[i >> 2] = f;\n        b[h >> 2] = d;\n        b[a >> 2] = 0;\n        c = 0;\n        e = f;\n      } else { d = 0; }\n      if ((e | 0) < 0) {\n        g = c - e | 0;\n        b[a >> 2] = g;\n        d = d - e | 0;\n        b[h >> 2] = d;\n        b[i >> 2] = 0;\n        f = g - d | 0;\n        c = 0 - d | 0;\n        if ((d | 0) < 0) {\n          b[a >> 2] = f;\n          b[i >> 2] = c;\n          b[h >> 2] = 0;\n          e = c;\n          d = 0;\n        } else {\n          e = 0;\n          f = g;\n        }\n      } else { f = c; }\n      c = (e | 0) < (f | 0) ? e : f;\n      c = (d | 0) < (c | 0) ? d : c;\n      if ((c | 0) <= 0) { return; }\n      b[a >> 2] = f - c;\n      b[i >> 2] = e - c;\n      b[h >> 2] = d - c;\n      return;\n    }\n    function ib(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0;\n      m = T;\n      T = T + 64 | 0;\n      l = m;\n      i = m + 56 | 0;\n      if (!(0 == 0 & (c & 2013265920 | 0) == 134217728 & (0 == 0 & (e & 2013265920 | 0) == 134217728))) {\n        f = 5;\n        T = m;\n        return f | 0;\n      }\n      if ((a | 0) == (d | 0) & (c | 0) == (e | 0)) {\n        b[f >> 2] = 0;\n        f = 0;\n        T = m;\n        return f | 0;\n      }\n      h = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      h = h & 15;\n      k = Td(d | 0, e | 0, 52) | 0;\n      H() | 0;\n      if ((h | 0) != (k & 15 | 0)) {\n        f = 12;\n        T = m;\n        return f | 0;\n      }\n      g = h + -1 | 0;\n      if (h >>> 0 > 1) {\n        Ib(a, c, g, l) | 0;\n        Ib(d, e, g, i) | 0;\n        k = l;\n        j = b[k >> 2] | 0;\n        k = b[k + 4 >> 2] | 0;\n        a: do { if ((j | 0) == (b[i >> 2] | 0) ? (k | 0) == (b[i + 4 >> 2] | 0) : 0) {\n          h = (h ^ 15) * 3 | 0;\n          g = Td(a | 0, c | 0, h | 0) | 0;\n          H() | 0;\n          g = g & 7;\n          h = Td(d | 0, e | 0, h | 0) | 0;\n          H() | 0;\n          h = h & 7;\n          do { if (!((g | 0) == 0 | (h | 0) == 0)) {\n            if ((g | 0) == 7) { g = 5; }else {\n              if ((g | 0) == 1 | (h | 0) == 1 ? Kb(j, k) | 0 : 0) {\n                g = 5;\n                break;\n              }\n              if ((b[15536 + (g << 2) >> 2] | 0) != (h | 0) ? (b[15568 + (g << 2) >> 2] | 0) != (h | 0) : 0) { break a; }\n              b[f >> 2] = 1;\n              g = 0;\n            }\n          } else {\n            b[f >> 2] = 1;\n            g = 0;\n          } } while (0);\n          f = g;\n          T = m;\n          return f | 0;\n        } } while (0);\n      }\n      g = l;\n      h = g + 56 | 0;\n      do {\n        b[g >> 2] = 0;\n        g = g + 4 | 0;\n      } while ((g | 0) < (h | 0));\n      aa(a, c, 1, l) | 0;\n      c = l;\n      if (((((!((b[c >> 2] | 0) == (d | 0) ? (b[c + 4 >> 2] | 0) == (e | 0) : 0) ? (c = l + 8 | 0, !((b[c >> 2] | 0) == (d | 0) ? (b[c + 4 >> 2] | 0) == (e | 0) : 0)) : 0) ? (c = l + 16 | 0, !((b[c >> 2] | 0) == (d | 0) ? (b[c + 4 >> 2] | 0) == (e | 0) : 0)) : 0) ? (c = l + 24 | 0, !((b[c >> 2] | 0) == (d | 0) ? (b[c + 4 >> 2] | 0) == (e | 0) : 0)) : 0) ? (c = l + 32 | 0, !((b[c >> 2] | 0) == (d | 0) ? (b[c + 4 >> 2] | 0) == (e | 0) : 0)) : 0) ? (c = l + 40 | 0, !((b[c >> 2] | 0) == (d | 0) ? (b[c + 4 >> 2] | 0) == (e | 0) : 0)) : 0) {\n        g = l + 48 | 0;\n        g = ((b[g >> 2] | 0) == (d | 0) ? (b[g + 4 >> 2] | 0) == (e | 0) : 0) & 1;\n      } else { g = 1; }\n      b[f >> 2] = g;\n      f = 0;\n      T = m;\n      return f | 0;\n    }\n    function jb(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      d = ia(a, c, d, e) | 0;\n      if ((d | 0) == 7) {\n        f = 11;\n        return f | 0;\n      }\n      e = Ud(d | 0, 0, 56) | 0;\n      c = c & -2130706433 | (H() | 0) | 268435456;\n      b[f >> 2] = a | e;\n      b[f + 4 >> 2] = c;\n      f = 0;\n      return f | 0;\n    }\n    function kb(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      if (!(0 == 0 & (c & 2013265920 | 0) == 268435456)) {\n        d = 6;\n        return d | 0;\n      }\n      b[d >> 2] = a;\n      b[d + 4 >> 2] = c & -2130706433 | 134217728;\n      d = 0;\n      return d | 0;\n    }\n    function lb(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0;\n      f = T;\n      T = T + 16 | 0;\n      e = f;\n      b[e >> 2] = 0;\n      if (!(0 == 0 & (c & 2013265920 | 0) == 268435456)) {\n        e = 6;\n        T = f;\n        return e | 0;\n      }\n      g = Td(a | 0, c | 0, 56) | 0;\n      H() | 0;\n      e = ea(a, c & -2130706433 | 134217728, g & 7, e, d) | 0;\n      T = f;\n      return e | 0;\n    }\n    function mb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0;\n      c = Td(a | 0, b | 0, 56) | 0;\n      H() | 0;\n      switch (c & 7) {\n        case 0:\n        case 7:\n          {\n            c = 0;\n            return c | 0;\n          }\n        default:\n\n      }\n      c = b & -2130706433 | 134217728;\n      if (!(0 == 0 & (b & 2013265920 | 0) == 268435456)) {\n        c = 0;\n        return c | 0;\n      }\n      if (0 == 0 & (b & 117440512 | 0) == 16777216 & (Kb(a, c) | 0) != 0) {\n        c = 0;\n        return c | 0;\n      }\n      c = Fb(a, c) | 0;\n      return c | 0;\n    }\n    function nb(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0;\n      f = T;\n      T = T + 16 | 0;\n      e = f;\n      if (!(0 == 0 & (c & 2013265920 | 0) == 268435456)) {\n        e = 6;\n        T = f;\n        return e | 0;\n      }\n      g = c & -2130706433 | 134217728;\n      h = d;\n      b[h >> 2] = a;\n      b[h + 4 >> 2] = g;\n      b[e >> 2] = 0;\n      c = Td(a | 0, c | 0, 56) | 0;\n      H() | 0;\n      e = ea(a, g, c & 7, e, d + 8 | 0) | 0;\n      T = f;\n      return e | 0;\n    }\n    function ob(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0;\n      f = (Kb(a, c) | 0) == 0;\n      c = c & -2130706433;\n      e = d;\n      b[e >> 2] = f ? a : 0;\n      b[e + 4 >> 2] = f ? c | 285212672 : 0;\n      e = d + 8 | 0;\n      b[e >> 2] = a;\n      b[e + 4 >> 2] = c | 301989888;\n      e = d + 16 | 0;\n      b[e >> 2] = a;\n      b[e + 4 >> 2] = c | 318767104;\n      e = d + 24 | 0;\n      b[e >> 2] = a;\n      b[e + 4 >> 2] = c | 335544320;\n      e = d + 32 | 0;\n      b[e >> 2] = a;\n      b[e + 4 >> 2] = c | 352321536;\n      d = d + 40 | 0;\n      b[d >> 2] = a;\n      b[d + 4 >> 2] = c | 369098752;\n      return 0;\n    }\n    function pb(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0;\n      h = T;\n      T = T + 16 | 0;\n      f = h;\n      g = c & -2130706433 | 134217728;\n      if (!(0 == 0 & (c & 2013265920 | 0) == 268435456)) {\n        g = 6;\n        T = h;\n        return g | 0;\n      }\n      e = Td(a | 0, c | 0, 56) | 0;\n      H() | 0;\n      e = rd(a, g, e & 7) | 0;\n      if ((e | 0) == -1) {\n        b[d >> 2] = 0;\n        g = 6;\n        T = h;\n        return g | 0;\n      }\n      if ($b(a, g, f) | 0) { I(27795, 26932, 282, 26947); }\n      c = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      c = c & 15;\n      if (!(Kb(a, g) | 0)) { zb(f, c, e, 2, d); }else { vb(f, c, e, 2, d); }\n      g = 0;\n      T = h;\n      return g | 0;\n    }\n    function qb(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0;\n      d = T;\n      T = T + 16 | 0;\n      e = d;\n      rb(a, b, c, e);\n      La(e, c + 4 | 0);\n      T = d;\n      return;\n    }\n    function rb(a, c, d, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      var g = 0.0,\n        h = 0.0,\n        i = 0.0,\n        j = 0,\n        k = 0;\n      j = T;\n      T = T + 16 | 0;\n      k = j;\n      sb(a, d, k);\n      h = +w(+(1.0 - +e[k >> 3] * .5));\n      if (h < 1.0e-16) {\n        b[f >> 2] = 0;\n        b[f + 4 >> 2] = 0;\n        b[f + 8 >> 2] = 0;\n        b[f + 12 >> 2] = 0;\n        T = j;\n        return;\n      }\n      k = b[d >> 2] | 0;\n      g = +e[15920 + (k * 24 | 0) >> 3];\n      g = +lc(g - +lc(+rc(15600 + (k << 4) | 0, a)));\n      if (!(Yb(c) | 0)) { i = g; }else { i = +lc(g + -.3334731722518321); }\n      g = +v(+h) * 2.618033988749896;\n      if ((c | 0) > 0) {\n        a = 0;\n        do {\n          g = g * 2.6457513110645907;\n          a = a + 1 | 0;\n        } while ((a | 0) != (c | 0));\n      }\n      h = +t(+i) * g;\n      e[f >> 3] = h;\n      i = +u(+i) * g;\n      e[f + 8 >> 3] = i;\n      T = j;\n      return;\n    }\n    function sb(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var f = 0.0,\n        g = 0,\n        h = 0;\n      h = T;\n      T = T + 32 | 0;\n      g = h;\n      qd(a, g);\n      b[c >> 2] = 0;\n      e[d >> 3] = 5.0;\n      f = +pd(16400, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 0;\n        e[d >> 3] = f;\n      }\n      f = +pd(16424, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 1;\n        e[d >> 3] = f;\n      }\n      f = +pd(16448, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 2;\n        e[d >> 3] = f;\n      }\n      f = +pd(16472, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 3;\n        e[d >> 3] = f;\n      }\n      f = +pd(16496, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 4;\n        e[d >> 3] = f;\n      }\n      f = +pd(16520, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 5;\n        e[d >> 3] = f;\n      }\n      f = +pd(16544, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 6;\n        e[d >> 3] = f;\n      }\n      f = +pd(16568, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 7;\n        e[d >> 3] = f;\n      }\n      f = +pd(16592, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 8;\n        e[d >> 3] = f;\n      }\n      f = +pd(16616, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 9;\n        e[d >> 3] = f;\n      }\n      f = +pd(16640, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 10;\n        e[d >> 3] = f;\n      }\n      f = +pd(16664, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 11;\n        e[d >> 3] = f;\n      }\n      f = +pd(16688, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 12;\n        e[d >> 3] = f;\n      }\n      f = +pd(16712, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 13;\n        e[d >> 3] = f;\n      }\n      f = +pd(16736, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 14;\n        e[d >> 3] = f;\n      }\n      f = +pd(16760, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 15;\n        e[d >> 3] = f;\n      }\n      f = +pd(16784, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 16;\n        e[d >> 3] = f;\n      }\n      f = +pd(16808, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 17;\n        e[d >> 3] = f;\n      }\n      f = +pd(16832, g);\n      if (f < +e[d >> 3]) {\n        b[c >> 2] = 18;\n        e[d >> 3] = f;\n      }\n      f = +pd(16856, g);\n      if (!(f < +e[d >> 3])) {\n        T = h;\n        return;\n      }\n      b[c >> 2] = 19;\n      e[d >> 3] = f;\n      T = h;\n      return;\n    }\n    function tb(a, c, d, f, g) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      g = g | 0;\n      var h = 0.0,\n        i = 0.0,\n        j = 0.0;\n      h = +md(a);\n      if (h < 1.0e-16) {\n        c = 15600 + (c << 4) | 0;\n        b[g >> 2] = b[c >> 2];\n        b[g + 4 >> 2] = b[c + 4 >> 2];\n        b[g + 8 >> 2] = b[c + 8 >> 2];\n        b[g + 12 >> 2] = b[c + 12 >> 2];\n        return;\n      }\n      i = +z(+ +e[a + 8 >> 3], + +e[a >> 3]);\n      if ((d | 0) > 0) {\n        a = 0;\n        do {\n          h = h * .37796447300922725;\n          a = a + 1 | 0;\n        } while ((a | 0) != (d | 0));\n      }\n      j = h * .3333333333333333;\n      if (!f) {\n        h = +y(+(h * .381966011250105));\n        if (Yb(d) | 0) { i = +lc(i + .3334731722518321); }\n      } else {\n        d = (Yb(d) | 0) == 0;\n        h = +y(+((d ? j : j * .37796447300922725) * .381966011250105));\n      }\n      sc(15600 + (c << 4) | 0, +lc(+e[15920 + (c * 24 | 0) >> 3] - i), h, g);\n      return;\n    }\n    function ub(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0;\n      e = T;\n      T = T + 16 | 0;\n      f = e;\n      Na(a + 4 | 0, f);\n      tb(f, b[a >> 2] | 0, c, 0, d);\n      T = e;\n      return;\n    }\n    function vb(a, c, d, f, g) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      g = g | 0;\n      var h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0,\n        v = 0,\n        w = 0,\n        x = 0,\n        y = 0,\n        z = 0,\n        A = 0,\n        B = 0,\n        C = 0,\n        D = 0,\n        E = 0,\n        F = 0,\n        G = 0,\n        H = 0.0,\n        J = 0.0;\n      G = T;\n      T = T + 272 | 0;\n      h = G + 256 | 0;\n      u = G + 240 | 0;\n      D = G;\n      E = G + 224 | 0;\n      F = G + 208 | 0;\n      v = G + 176 | 0;\n      w = G + 160 | 0;\n      x = G + 192 | 0;\n      y = G + 144 | 0;\n      z = G + 128 | 0;\n      A = G + 112 | 0;\n      B = G + 96 | 0;\n      C = G + 80 | 0;\n      b[h >> 2] = c;\n      b[u >> 2] = b[a >> 2];\n      b[u + 4 >> 2] = b[a + 4 >> 2];\n      b[u + 8 >> 2] = b[a + 8 >> 2];\n      b[u + 12 >> 2] = b[a + 12 >> 2];\n      wb(u, h, D);\n      b[g >> 2] = 0;\n      u = f + d + ((f | 0) == 5 & 1) | 0;\n      if ((u | 0) <= (d | 0)) {\n        T = G;\n        return;\n      }\n      k = b[h >> 2] | 0;\n      l = E + 4 | 0;\n      m = v + 4 | 0;\n      n = d + 5 | 0;\n      o = 16880 + (k << 2) | 0;\n      p = 16960 + (k << 2) | 0;\n      q = z + 8 | 0;\n      r = A + 8 | 0;\n      s = B + 8 | 0;\n      t = F + 4 | 0;\n      j = d;\n      a: while (1) {\n        i = D + (((j | 0) % 5 | 0) << 4) | 0;\n        b[F >> 2] = b[i >> 2];\n        b[F + 4 >> 2] = b[i + 4 >> 2];\n        b[F + 8 >> 2] = b[i + 8 >> 2];\n        b[F + 12 >> 2] = b[i + 12 >> 2];\n        do {} while ((xb(F, k, 0, 1) | 0) == 2);\n        if ((j | 0) > (d | 0) & (Yb(c) | 0) != 0) {\n          b[v >> 2] = b[F >> 2];\n          b[v + 4 >> 2] = b[F + 4 >> 2];\n          b[v + 8 >> 2] = b[F + 8 >> 2];\n          b[v + 12 >> 2] = b[F + 12 >> 2];\n          Na(l, w);\n          f = b[v >> 2] | 0;\n          h = b[17040 + (f * 80 | 0) + (b[E >> 2] << 2) >> 2] | 0;\n          b[v >> 2] = b[18640 + (f * 80 | 0) + (h * 20 | 0) >> 2];\n          i = b[18640 + (f * 80 | 0) + (h * 20 | 0) + 16 >> 2] | 0;\n          if ((i | 0) > 0) {\n            a = 0;\n            do {\n              Za(m);\n              a = a + 1 | 0;\n            } while ((a | 0) < (i | 0));\n          }\n          i = 18640 + (f * 80 | 0) + (h * 20 | 0) + 4 | 0;\n          b[x >> 2] = b[i >> 2];\n          b[x + 4 >> 2] = b[i + 4 >> 2];\n          b[x + 8 >> 2] = b[i + 8 >> 2];\n          Qa(x, (b[o >> 2] | 0) * 3 | 0);\n          Oa(m, x, m);\n          Ma(m);\n          Na(m, y);\n          H = +(b[p >> 2] | 0);\n          e[z >> 3] = H * 3.0;\n          e[q >> 3] = 0.0;\n          J = H * -1.5;\n          e[A >> 3] = J;\n          e[r >> 3] = H * 2.598076211353316;\n          e[B >> 3] = J;\n          e[s >> 3] = H * -2.598076211353316;\n          switch (b[17040 + ((b[v >> 2] | 0) * 80 | 0) + (b[F >> 2] << 2) >> 2] | 0) {\n            case 1:\n              {\n                a = A;\n                f = z;\n                break;\n              }\n            case 3:\n              {\n                a = B;\n                f = A;\n                break;\n              }\n            case 2:\n              {\n                a = z;\n                f = B;\n                break;\n              }\n            default:\n              {\n                a = 12;\n                break a;\n              }\n          }\n          nd(w, y, f, a, C);\n          tb(C, b[v >> 2] | 0, k, 1, g + 8 + (b[g >> 2] << 4) | 0);\n          b[g >> 2] = (b[g >> 2] | 0) + 1;\n        }\n        if ((j | 0) < (n | 0)) {\n          Na(t, v);\n          tb(v, b[F >> 2] | 0, k, 1, g + 8 + (b[g >> 2] << 4) | 0);\n          b[g >> 2] = (b[g >> 2] | 0) + 1;\n        }\n        b[E >> 2] = b[F >> 2];\n        b[E + 4 >> 2] = b[F + 4 >> 2];\n        b[E + 8 >> 2] = b[F + 8 >> 2];\n        b[E + 12 >> 2] = b[F + 12 >> 2];\n        j = j + 1 | 0;\n        if ((j | 0) >= (u | 0)) {\n          a = 3;\n          break;\n        }\n      }\n      if ((a | 0) == 3) {\n        T = G;\n        return;\n      } else if ((a | 0) == 12) { I(26970, 27017, 572, 27027); }\n    }\n    function wb(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      j = T;\n      T = T + 128 | 0;\n      e = j + 64 | 0;\n      f = j;\n      g = e;\n      h = 20240;\n      i = g + 60 | 0;\n      do {\n        b[g >> 2] = b[h >> 2];\n        g = g + 4 | 0;\n        h = h + 4 | 0;\n      } while ((g | 0) < (i | 0));\n      g = f;\n      h = 20304;\n      i = g + 60 | 0;\n      do {\n        b[g >> 2] = b[h >> 2];\n        g = g + 4 | 0;\n        h = h + 4 | 0;\n      } while ((g | 0) < (i | 0));\n      i = (Yb(b[c >> 2] | 0) | 0) == 0;\n      e = i ? e : f;\n      f = a + 4 | 0;\n      bb(f);\n      cb(f);\n      if (Yb(b[c >> 2] | 0) | 0) {\n        Xa(f);\n        b[c >> 2] = (b[c >> 2] | 0) + 1;\n      }\n      b[d >> 2] = b[a >> 2];\n      c = d + 4 | 0;\n      Oa(f, e, c);\n      Ma(c);\n      b[d + 16 >> 2] = b[a >> 2];\n      c = d + 20 | 0;\n      Oa(f, e + 12 | 0, c);\n      Ma(c);\n      b[d + 32 >> 2] = b[a >> 2];\n      c = d + 36 | 0;\n      Oa(f, e + 24 | 0, c);\n      Ma(c);\n      b[d + 48 >> 2] = b[a >> 2];\n      c = d + 52 | 0;\n      Oa(f, e + 36 | 0, c);\n      Ma(c);\n      b[d + 64 >> 2] = b[a >> 2];\n      d = d + 68 | 0;\n      Oa(f, e + 48 | 0, d);\n      Ma(d);\n      T = j;\n      return;\n    }\n    function xb(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0;\n      p = T;\n      T = T + 32 | 0;\n      n = p + 12 | 0;\n      i = p;\n      o = a + 4 | 0;\n      m = b[16960 + (c << 2) >> 2] | 0;\n      l = (e | 0) != 0;\n      m = l ? m * 3 | 0 : m;\n      f = b[o >> 2] | 0;\n      k = a + 8 | 0;\n      h = b[k >> 2] | 0;\n      if (l) {\n        g = a + 12 | 0;\n        e = b[g >> 2] | 0;\n        f = h + f + e | 0;\n        if ((f | 0) == (m | 0)) {\n          o = 1;\n          T = p;\n          return o | 0;\n        } else { j = g; }\n      } else {\n        j = a + 12 | 0;\n        e = b[j >> 2] | 0;\n        f = h + f + e | 0;\n      }\n      if ((f | 0) <= (m | 0)) {\n        o = 0;\n        T = p;\n        return o | 0;\n      }\n      do { if ((e | 0) > 0) {\n        e = b[a >> 2] | 0;\n        if ((h | 0) > 0) {\n          g = 18640 + (e * 80 | 0) + 60 | 0;\n          e = a;\n          break;\n        }\n        e = 18640 + (e * 80 | 0) + 40 | 0;\n        if (!d) {\n          g = e;\n          e = a;\n        } else {\n          Ka(n, m, 0, 0);\n          Pa(o, n, i);\n          _a(i);\n          Oa(i, n, o);\n          g = e;\n          e = a;\n        }\n      } else {\n        g = 18640 + ((b[a >> 2] | 0) * 80 | 0) + 20 | 0;\n        e = a;\n      } } while (0);\n      b[e >> 2] = b[g >> 2];\n      f = g + 16 | 0;\n      if ((b[f >> 2] | 0) > 0) {\n        e = 0;\n        do {\n          Za(o);\n          e = e + 1 | 0;\n        } while ((e | 0) < (b[f >> 2] | 0));\n      }\n      a = g + 4 | 0;\n      b[n >> 2] = b[a >> 2];\n      b[n + 4 >> 2] = b[a + 4 >> 2];\n      b[n + 8 >> 2] = b[a + 8 >> 2];\n      c = b[16880 + (c << 2) >> 2] | 0;\n      Qa(n, l ? c * 3 | 0 : c);\n      Oa(o, n, o);\n      Ma(o);\n      if (l) { e = ((b[k >> 2] | 0) + (b[o >> 2] | 0) + (b[j >> 2] | 0) | 0) == (m | 0) ? 1 : 2; }else { e = 2; }\n      o = e;\n      T = p;\n      return o | 0;\n    }\n    function yb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0;\n      do { c = xb(a, b, 0, 1) | 0; } while ((c | 0) == 2);\n      return c | 0;\n    }\n    function zb(a, c, d, f, g) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      g = g | 0;\n      var h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0,\n        v = 0,\n        w = 0,\n        x = 0,\n        y = 0,\n        z = 0,\n        A = 0,\n        B = 0,\n        C = 0.0,\n        D = 0.0;\n      B = T;\n      T = T + 240 | 0;\n      h = B + 224 | 0;\n      x = B + 208 | 0;\n      y = B;\n      z = B + 192 | 0;\n      A = B + 176 | 0;\n      s = B + 160 | 0;\n      t = B + 144 | 0;\n      u = B + 128 | 0;\n      v = B + 112 | 0;\n      w = B + 96 | 0;\n      b[h >> 2] = c;\n      b[x >> 2] = b[a >> 2];\n      b[x + 4 >> 2] = b[a + 4 >> 2];\n      b[x + 8 >> 2] = b[a + 8 >> 2];\n      b[x + 12 >> 2] = b[a + 12 >> 2];\n      Ab(x, h, y);\n      b[g >> 2] = 0;\n      r = f + d + ((f | 0) == 6 & 1) | 0;\n      if ((r | 0) <= (d | 0)) {\n        T = B;\n        return;\n      }\n      k = b[h >> 2] | 0;\n      l = d + 6 | 0;\n      m = 16960 + (k << 2) | 0;\n      n = t + 8 | 0;\n      o = u + 8 | 0;\n      p = v + 8 | 0;\n      q = z + 4 | 0;\n      i = 0;\n      j = d;\n      f = -1;\n      a: while (1) {\n        h = (j | 0) % 6 | 0;\n        a = y + (h << 4) | 0;\n        b[z >> 2] = b[a >> 2];\n        b[z + 4 >> 2] = b[a + 4 >> 2];\n        b[z + 8 >> 2] = b[a + 8 >> 2];\n        b[z + 12 >> 2] = b[a + 12 >> 2];\n        a = i;\n        i = xb(z, k, 0, 1) | 0;\n        if ((j | 0) > (d | 0) & (Yb(c) | 0) != 0 ? (a | 0) != 1 ? (b[z >> 2] | 0) != (f | 0) : 0 : 0) {\n          Na(y + (((h + 5 | 0) % 6 | 0) << 4) + 4 | 0, A);\n          Na(y + (h << 4) + 4 | 0, s);\n          C = +(b[m >> 2] | 0);\n          e[t >> 3] = C * 3.0;\n          e[n >> 3] = 0.0;\n          D = C * -1.5;\n          e[u >> 3] = D;\n          e[o >> 3] = C * 2.598076211353316;\n          e[v >> 3] = D;\n          e[p >> 3] = C * -2.598076211353316;\n          h = b[x >> 2] | 0;\n          switch (b[17040 + (h * 80 | 0) + (((f | 0) == (h | 0) ? b[z >> 2] | 0 : f) << 2) >> 2] | 0) {\n            case 1:\n              {\n                a = u;\n                f = t;\n                break;\n              }\n            case 3:\n              {\n                a = v;\n                f = u;\n                break;\n              }\n            case 2:\n              {\n                a = t;\n                f = v;\n                break;\n              }\n            default:\n              {\n                a = 8;\n                break a;\n              }\n          }\n          nd(A, s, f, a, w);\n          if (!(od(A, w) | 0) ? !(od(s, w) | 0) : 0) {\n            tb(w, b[x >> 2] | 0, k, 1, g + 8 + (b[g >> 2] << 4) | 0);\n            b[g >> 2] = (b[g >> 2] | 0) + 1;\n          }\n        }\n        if ((j | 0) < (l | 0)) {\n          Na(q, A);\n          tb(A, b[z >> 2] | 0, k, 1, g + 8 + (b[g >> 2] << 4) | 0);\n          b[g >> 2] = (b[g >> 2] | 0) + 1;\n        }\n        j = j + 1 | 0;\n        if ((j | 0) >= (r | 0)) {\n          a = 3;\n          break;\n        } else { f = b[z >> 2] | 0; }\n      }\n      if ((a | 0) == 3) {\n        T = B;\n        return;\n      } else if ((a | 0) == 8) { I(27054, 27017, 737, 27099); }\n    }\n    function Ab(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      j = T;\n      T = T + 160 | 0;\n      e = j + 80 | 0;\n      f = j;\n      g = e;\n      h = 20368;\n      i = g + 72 | 0;\n      do {\n        b[g >> 2] = b[h >> 2];\n        g = g + 4 | 0;\n        h = h + 4 | 0;\n      } while ((g | 0) < (i | 0));\n      g = f;\n      h = 20448;\n      i = g + 72 | 0;\n      do {\n        b[g >> 2] = b[h >> 2];\n        g = g + 4 | 0;\n        h = h + 4 | 0;\n      } while ((g | 0) < (i | 0));\n      i = (Yb(b[c >> 2] | 0) | 0) == 0;\n      e = i ? e : f;\n      f = a + 4 | 0;\n      bb(f);\n      cb(f);\n      if (Yb(b[c >> 2] | 0) | 0) {\n        Xa(f);\n        b[c >> 2] = (b[c >> 2] | 0) + 1;\n      }\n      b[d >> 2] = b[a >> 2];\n      c = d + 4 | 0;\n      Oa(f, e, c);\n      Ma(c);\n      b[d + 16 >> 2] = b[a >> 2];\n      c = d + 20 | 0;\n      Oa(f, e + 12 | 0, c);\n      Ma(c);\n      b[d + 32 >> 2] = b[a >> 2];\n      c = d + 36 | 0;\n      Oa(f, e + 24 | 0, c);\n      Ma(c);\n      b[d + 48 >> 2] = b[a >> 2];\n      c = d + 52 | 0;\n      Oa(f, e + 36 | 0, c);\n      Ma(c);\n      b[d + 64 >> 2] = b[a >> 2];\n      c = d + 68 | 0;\n      Oa(f, e + 48 | 0, c);\n      Ma(c);\n      b[d + 80 >> 2] = b[a >> 2];\n      d = d + 84 | 0;\n      Oa(f, e + 60 | 0, d);\n      Ma(d);\n      T = j;\n      return;\n    }\n    function Bb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      b = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      return b & 15 | 0;\n    }\n    function Cb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      b = Td(a | 0, b | 0, 45) | 0;\n      H() | 0;\n      return b & 127 | 0;\n    }\n    function Db(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      if ((d + -1 | 0) >>> 0 > 14) {\n        e = 4;\n        return e | 0;\n      }\n      d = Td(a | 0, c | 0, (15 - d | 0) * 3 | 0) | 0;\n      H() | 0;\n      b[e >> 2] = d & 7;\n      e = 0;\n      return e | 0;\n    }\n    function Eb(c, d, e, f) {\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0;\n      if (c >>> 0 > 15) {\n        f = 4;\n        return f | 0;\n      }\n      if (d >>> 0 > 121) {\n        f = 17;\n        return f | 0;\n      }\n      i = Ud(c | 0, 0, 52) | 0;\n      g = H() | 0;\n      j = Ud(d | 0, 0, 45) | 0;\n      g = g | (H() | 0) | 134225919;\n      a: do { if ((c | 0) >= 1) {\n        j = 1;\n        i = (a[20528 + d >> 0] | 0) != 0;\n        h = -1;\n        while (1) {\n          d = b[e + (j + -1 << 2) >> 2] | 0;\n          if (d >>> 0 > 6) {\n            g = 18;\n            d = 10;\n            break;\n          }\n          if (!((d | 0) == 0 | i ^ 1)) { if ((d | 0) == 1) {\n            g = 19;\n            d = 10;\n            break;\n          } else { i = 0; } }\n          l = (15 - j | 0) * 3 | 0;\n          k = Ud(7, 0, l | 0) | 0;\n          g = g & ~(H() | 0);\n          d = Ud(d | 0, ((d | 0) < 0) << 31 >> 31 | 0, l | 0) | 0;\n          h = d | h & ~k;\n          g = H() | 0 | g;\n          if ((j | 0) < (c | 0)) { j = j + 1 | 0; }else { break a; }\n        }\n        if ((d | 0) == 10) { return g | 0; }\n      } else { h = -1; } } while (0);\n      l = f;\n      b[l >> 2] = h;\n      b[l + 4 >> 2] = g;\n      l = 0;\n      return l | 0;\n    }\n    function Fb(b, c) {\n      b = b | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0;\n      if (!(0 == 0 & (c & -16777216 | 0) == 134217728)) {\n        b = 0;\n        return b | 0;\n      }\n      e = Td(b | 0, c | 0, 52) | 0;\n      H() | 0;\n      e = e & 15;\n      d = Td(b | 0, c | 0, 45) | 0;\n      H() | 0;\n      d = d & 127;\n      if (d >>> 0 > 121) {\n        b = 0;\n        return b | 0;\n      }\n      h = (e ^ 15) * 3 | 0;\n      f = Td(b | 0, c | 0, h | 0) | 0;\n      h = Ud(f | 0, H() | 0, h | 0) | 0;\n      f = H() | 0;\n      g = Kd(-1227133514, -1171, h | 0, f | 0) | 0;\n      if (!((h & 613566756 & g | 0) == 0 & (f & 4681 & (H() | 0) | 0) == 0)) {\n        h = 0;\n        return h | 0;\n      }\n      h = (e * 3 | 0) + 19 | 0;\n      g = Ud(~b | 0, ~c | 0, h | 0) | 0;\n      h = Td(g | 0, H() | 0, h | 0) | 0;\n      if (!((e | 0) == 15 | (h | 0) == 0 & (H() | 0) == 0)) {\n        h = 0;\n        return h | 0;\n      }\n      if (!(a[20528 + d >> 0] | 0)) {\n        h = 1;\n        return h | 0;\n      }\n      c = c & 8191;\n      if ((b | 0) == 0 & (c | 0) == 0) {\n        h = 1;\n        return h | 0;\n      } else {\n        h = Vd(b | 0, c | 0, 0) | 0;\n        H() | 0;\n        return ((63 - h | 0) % 3 | 0 | 0) != 0 | 0;\n      }\n      return 0;\n    }\n    function Gb(b, c) {\n      b = b | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0;\n      if (((0 == 0 & (c & -16777216 | 0) == 134217728 ? (e = Td(b | 0, c | 0, 52) | 0, H() | 0, e = e & 15, d = Td(b | 0, c | 0, 45) | 0, H() | 0, d = d & 127, d >>> 0 <= 121) : 0) ? (h = (e ^ 15) * 3 | 0, f = Td(b | 0, c | 0, h | 0) | 0, h = Ud(f | 0, H() | 0, h | 0) | 0, f = H() | 0, g = Kd(-1227133514, -1171, h | 0, f | 0) | 0, (h & 613566756 & g | 0) == 0 & (f & 4681 & (H() | 0) | 0) == 0) : 0) ? (h = (e * 3 | 0) + 19 | 0, g = Ud(~b | 0, ~c | 0, h | 0) | 0, h = Td(g | 0, H() | 0, h | 0) | 0, (e | 0) == 15 | (h | 0) == 0 & (H() | 0) == 0) : 0) {\n        if (!(a[20528 + d >> 0] | 0)) {\n          h = 1;\n          return h | 0;\n        }\n        d = c & 8191;\n        if ((b | 0) == 0 & (d | 0) == 0) {\n          h = 1;\n          return h | 0;\n        }\n        h = Vd(b | 0, d | 0, 0) | 0;\n        H() | 0;\n        if ((63 - h | 0) % 3 | 0 | 0) {\n          h = 1;\n          return h | 0;\n        }\n      }\n      if (mb(b, c) | 0) {\n        h = 1;\n        return h | 0;\n      }\n      h = (wd(b, c) | 0) != 0 & 1;\n      return h | 0;\n    }\n    function Hb(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      f = Ud(c | 0, 0, 52) | 0;\n      g = H() | 0;\n      d = Ud(d | 0, 0, 45) | 0;\n      d = g | (H() | 0) | 134225919;\n      if ((c | 0) < 1) {\n        g = -1;\n        e = d;\n        c = a;\n        b[c >> 2] = g;\n        a = a + 4 | 0;\n        b[a >> 2] = e;\n        return;\n      }\n      g = 1;\n      f = -1;\n      while (1) {\n        h = (15 - g | 0) * 3 | 0;\n        i = Ud(7, 0, h | 0) | 0;\n        d = d & ~(H() | 0);\n        h = Ud(e | 0, 0, h | 0) | 0;\n        f = f & ~i | h;\n        d = d | (H() | 0);\n        if ((g | 0) == (c | 0)) { break; }else { g = g + 1 | 0; }\n      }\n      i = a;\n      h = i;\n      b[h >> 2] = f;\n      i = i + 4 | 0;\n      b[i >> 2] = d;\n      return;\n    }\n    function Ib(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0;\n      g = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      g = g & 15;\n      if (d >>> 0 > 15) {\n        e = 4;\n        return e | 0;\n      }\n      if ((g | 0) < (d | 0)) {\n        e = 12;\n        return e | 0;\n      }\n      if ((g | 0) == (d | 0)) {\n        b[e >> 2] = a;\n        b[e + 4 >> 2] = c;\n        e = 0;\n        return e | 0;\n      }\n      f = Ud(d | 0, 0, 52) | 0;\n      f = f | a;\n      a = H() | 0 | c & -15728641;\n      if ((g | 0) > (d | 0)) { do {\n        c = Ud(7, 0, (14 - d | 0) * 3 | 0) | 0;\n        d = d + 1 | 0;\n        f = c | f;\n        a = H() | 0 | a;\n      } while ((d | 0) < (g | 0)); }\n      b[e >> 2] = f;\n      b[e + 4 >> 2] = a;\n      e = 0;\n      return e | 0;\n    }\n    function Jb(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0;\n      g = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      g = g & 15;\n      if (!((d | 0) < 16 & (g | 0) <= (d | 0))) {\n        e = 4;\n        return e | 0;\n      }\n      f = d - g | 0;\n      d = Td(a | 0, c | 0, 45) | 0;\n      H() | 0;\n      a: do { if (!(oa(d & 127) | 0)) {\n        d = Rc(7, 0, f, ((f | 0) < 0) << 31 >> 31) | 0;\n        f = H() | 0;\n      } else {\n        b: do { if (g | 0) {\n          d = 1;\n          while (1) {\n            h = Ud(7, 0, (15 - d | 0) * 3 | 0) | 0;\n            if (!((h & a | 0) == 0 & ((H() | 0) & c | 0) == 0)) { break; }\n            if (d >>> 0 < g >>> 0) { d = d + 1 | 0; }else { break b; }\n          }\n          d = Rc(7, 0, f, ((f | 0) < 0) << 31 >> 31) | 0;\n          f = H() | 0;\n          break a;\n        } } while (0);\n        d = Rc(7, 0, f, ((f | 0) < 0) << 31 >> 31) | 0;\n        d = Pd(d | 0, H() | 0, 5, 0) | 0;\n        d = Jd(d | 0, H() | 0, -5, -1) | 0;\n        d = Nd(d | 0, H() | 0, 6, 0) | 0;\n        d = Jd(d | 0, H() | 0, 1, 0) | 0;\n        f = H() | 0;\n      } } while (0);\n      h = e;\n      b[h >> 2] = d;\n      b[h + 4 >> 2] = f;\n      h = 0;\n      return h | 0;\n    }\n    function Kb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0,\n        d = 0,\n        e = 0;\n      e = Td(a | 0, b | 0, 45) | 0;\n      H() | 0;\n      if (!(oa(e & 127) | 0)) {\n        e = 0;\n        return e | 0;\n      }\n      e = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      e = e & 15;\n      a: do { if (!e) { c = 0; }else {\n        d = 1;\n        while (1) {\n          c = Td(a | 0, b | 0, (15 - d | 0) * 3 | 0) | 0;\n          H() | 0;\n          c = c & 7;\n          if (c | 0) { break a; }\n          if (d >>> 0 < e >>> 0) { d = d + 1 | 0; }else {\n            c = 0;\n            break;\n          }\n        }\n      } } while (0);\n      e = (c | 0) == 0 & 1;\n      return e | 0;\n    }\n    function Lb(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      h = T;\n      T = T + 16 | 0;\n      g = h;\n      ic(g, a, c, d);\n      c = g;\n      a = b[c >> 2] | 0;\n      c = b[c + 4 >> 2] | 0;\n      if ((a | 0) == 0 & (c | 0) == 0) {\n        T = h;\n        return 0;\n      }\n      f = 0;\n      d = 0;\n      do {\n        i = e + (f << 3) | 0;\n        b[i >> 2] = a;\n        b[i + 4 >> 2] = c;\n        f = Jd(f | 0, d | 0, 1, 0) | 0;\n        d = H() | 0;\n        kc(g);\n        i = g;\n        a = b[i >> 2] | 0;\n        c = b[i + 4 >> 2] | 0;\n      } while (!((a | 0) == 0 & (c | 0) == 0));\n      T = h;\n      return 0;\n    }\n    function Mb(a, b, c, d) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      if ((d | 0) < (c | 0)) {\n        c = b;\n        d = a;\n        G(c | 0);\n        return d | 0;\n      }\n      c = Ud(-1, -1, ((d - c | 0) * 3 | 0) + 3 | 0) | 0;\n      d = Ud(~c | 0, ~(H() | 0) | 0, (15 - d | 0) * 3 | 0) | 0;\n      c = ~(H() | 0) & b;\n      d = ~d & a;\n      G(c | 0);\n      return d | 0;\n    }\n    function Nb(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0;\n      f = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      f = f & 15;\n      if (!((d | 0) < 16 & (f | 0) <= (d | 0))) {\n        e = 4;\n        return e | 0;\n      }\n      if ((f | 0) < (d | 0)) {\n        f = Ud(-1, -1, ((d + -1 - f | 0) * 3 | 0) + 3 | 0) | 0;\n        f = Ud(~f | 0, ~(H() | 0) | 0, (15 - d | 0) * 3 | 0) | 0;\n        c = ~(H() | 0) & c;\n        a = ~f & a;\n      }\n      f = Ud(d | 0, 0, 52) | 0;\n      d = c & -15728641 | (H() | 0);\n      b[e >> 2] = a | f;\n      b[e + 4 >> 2] = d;\n      e = 0;\n      return e | 0;\n    }\n    function Ob(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0,\n        v = 0,\n        w = 0,\n        x = 0,\n        y = 0,\n        z = 0,\n        A = 0,\n        B = 0,\n        C = 0,\n        D = 0,\n        E = 0;\n      if ((d | 0) == 0 & (e | 0) == 0) {\n        E = 0;\n        return E | 0;\n      }\n      f = a;\n      g = b[f >> 2] | 0;\n      f = b[f + 4 >> 2] | 0;\n      if (0 == 0 & (f & 15728640 | 0) == 0) {\n        if (!((e | 0) > 0 | (e | 0) == 0 & d >>> 0 > 0)) {\n          E = 0;\n          return E | 0;\n        }\n        E = c;\n        b[E >> 2] = g;\n        b[E + 4 >> 2] = f;\n        if ((d | 0) == 1 & (e | 0) == 0) {\n          E = 0;\n          return E | 0;\n        }\n        f = 1;\n        g = 0;\n        do {\n          C = a + (f << 3) | 0;\n          D = b[C + 4 >> 2] | 0;\n          E = c + (f << 3) | 0;\n          b[E >> 2] = b[C >> 2];\n          b[E + 4 >> 2] = D;\n          f = Jd(f | 0, g | 0, 1, 0) | 0;\n          g = H() | 0;\n        } while ((g | 0) < (e | 0) | (g | 0) == (e | 0) & f >>> 0 < d >>> 0);\n        f = 0;\n        return f | 0;\n      }\n      B = d << 3;\n      D = Gd(B) | 0;\n      if (!D) {\n        E = 13;\n        return E | 0;\n      }\n      Zd(D | 0, a | 0, B | 0) | 0;\n      C = Id(d, 8) | 0;\n      if (!C) {\n        Hd(D);\n        E = 13;\n        return E | 0;\n      }\n      a: while (1) {\n        f = D;\n        k = b[f >> 2] | 0;\n        f = b[f + 4 >> 2] | 0;\n        z = Td(k | 0, f | 0, 52) | 0;\n        H() | 0;\n        z = z & 15;\n        A = z + -1 | 0;\n        y = (z | 0) != 0;\n        x = (e | 0) > 0 | (e | 0) == 0 & d >>> 0 > 0;\n        b: do { if (y & x) {\n          t = Ud(A | 0, 0, 52) | 0;\n          u = H() | 0;\n          if (A >>> 0 > 15) {\n            if (!((k | 0) == 0 & (f | 0) == 0)) {\n              E = 16;\n              break a;\n            }\n            g = 0;\n            a = 0;\n            while (1) {\n              g = Jd(g | 0, a | 0, 1, 0) | 0;\n              a = H() | 0;\n              if (!((a | 0) < (e | 0) | (a | 0) == (e | 0) & g >>> 0 < d >>> 0)) { break b; }\n              h = D + (g << 3) | 0;\n              w = b[h >> 2] | 0;\n              h = b[h + 4 >> 2] | 0;\n              if (!((w | 0) == 0 & (h | 0) == 0)) {\n                f = h;\n                E = 16;\n                break a;\n              }\n            }\n          }\n          i = k;\n          a = f;\n          g = 0;\n          h = 0;\n          while (1) {\n            if (!((i | 0) == 0 & (a | 0) == 0)) {\n              if (!(0 == 0 & (a & 117440512 | 0) == 0)) {\n                E = 21;\n                break a;\n              }\n              l = Td(i | 0, a | 0, 52) | 0;\n              H() | 0;\n              l = l & 15;\n              if ((l | 0) < (A | 0)) {\n                f = 12;\n                E = 27;\n                break a;\n              }\n              if ((l | 0) != (A | 0)) {\n                i = i | t;\n                a = a & -15728641 | u;\n                if (l >>> 0 >= z >>> 0) {\n                  j = A;\n                  do {\n                    w = Ud(7, 0, (14 - j | 0) * 3 | 0) | 0;\n                    j = j + 1 | 0;\n                    i = w | i;\n                    a = H() | 0 | a;\n                  } while (j >>> 0 < l >>> 0);\n                }\n              }\n              n = Rd(i | 0, a | 0, d | 0, e | 0) | 0;\n              o = H() | 0;\n              j = C + (n << 3) | 0;\n              l = j;\n              m = b[l >> 2] | 0;\n              l = b[l + 4 >> 2] | 0;\n              if (!((m | 0) == 0 & (l | 0) == 0)) {\n                r = 0;\n                s = 0;\n                do {\n                  if ((r | 0) > (e | 0) | (r | 0) == (e | 0) & s >>> 0 > d >>> 0) {\n                    E = 31;\n                    break a;\n                  }\n                  if ((m | 0) == (i | 0) & (l & -117440513 | 0) == (a | 0)) {\n                    p = Td(m | 0, l | 0, 56) | 0;\n                    H() | 0;\n                    p = p & 7;\n                    q = p + 1 | 0;\n                    w = Td(m | 0, l | 0, 45) | 0;\n                    H() | 0;\n                    c: do { if (!(oa(w & 127) | 0)) { l = 7; }else {\n                      m = Td(m | 0, l | 0, 52) | 0;\n                      H() | 0;\n                      m = m & 15;\n                      if (!m) {\n                        l = 6;\n                        break;\n                      }\n                      l = 1;\n                      while (1) {\n                        w = Ud(7, 0, (15 - l | 0) * 3 | 0) | 0;\n                        if (!((w & i | 0) == 0 & ((H() | 0) & a | 0) == 0)) {\n                          l = 7;\n                          break c;\n                        }\n                        if (l >>> 0 < m >>> 0) { l = l + 1 | 0; }else {\n                          l = 6;\n                          break;\n                        }\n                      }\n                    } } while (0);\n                    if ((p + 2 | 0) >>> 0 > l >>> 0) {\n                      E = 41;\n                      break a;\n                    }\n                    w = Ud(q | 0, 0, 56) | 0;\n                    a = H() | 0 | a & -117440513;\n                    v = j;\n                    b[v >> 2] = 0;\n                    b[v + 4 >> 2] = 0;\n                    i = w | i;\n                  } else {\n                    n = Jd(n | 0, o | 0, 1, 0) | 0;\n                    n = Qd(n | 0, H() | 0, d | 0, e | 0) | 0;\n                    o = H() | 0;\n                  }\n                  s = Jd(s | 0, r | 0, 1, 0) | 0;\n                  r = H() | 0;\n                  j = C + (n << 3) | 0;\n                  l = j;\n                  m = b[l >> 2] | 0;\n                  l = b[l + 4 >> 2] | 0;\n                } while (!((m | 0) == 0 & (l | 0) == 0));\n              }\n              w = j;\n              b[w >> 2] = i;\n              b[w + 4 >> 2] = a;\n            }\n            g = Jd(g | 0, h | 0, 1, 0) | 0;\n            h = H() | 0;\n            if (!((h | 0) < (e | 0) | (h | 0) == (e | 0) & g >>> 0 < d >>> 0)) { break b; }\n            a = D + (g << 3) | 0;\n            i = b[a >> 2] | 0;\n            a = b[a + 4 >> 2] | 0;\n          }\n        } } while (0);\n        w = Jd(d | 0, e | 0, 5, 0) | 0;\n        v = H() | 0;\n        if (v >>> 0 < 0 | (v | 0) == 0 & w >>> 0 < 11) {\n          E = 85;\n          break;\n        }\n        w = Nd(d | 0, e | 0, 6, 0) | 0;\n        H() | 0;\n        w = Id(w, 8) | 0;\n        if (!w) {\n          E = 48;\n          break;\n        }\n        do { if (x) {\n          q = 0;\n          a = 0;\n          p = 0;\n          r = 0;\n          while (1) {\n            l = C + (q << 3) | 0;\n            h = l;\n            g = b[h >> 2] | 0;\n            h = b[h + 4 >> 2] | 0;\n            if (!((g | 0) == 0 & (h | 0) == 0)) {\n              m = Td(g | 0, h | 0, 56) | 0;\n              H() | 0;\n              m = m & 7;\n              i = m + 1 | 0;\n              n = h & -117440513;\n              v = Td(g | 0, h | 0, 45) | 0;\n              H() | 0;\n              d: do { if (oa(v & 127) | 0) {\n                o = Td(g | 0, h | 0, 52) | 0;\n                H() | 0;\n                o = o & 15;\n                if (o | 0) {\n                  j = 1;\n                  while (1) {\n                    v = Ud(7, 0, (15 - j | 0) * 3 | 0) | 0;\n                    if (!((g & v | 0) == 0 & (n & (H() | 0) | 0) == 0)) { break d; }\n                    if (j >>> 0 < o >>> 0) { j = j + 1 | 0; }else { break; }\n                  }\n                }\n                h = Ud(i | 0, 0, 56) | 0;\n                g = h | g;\n                h = H() | 0 | n;\n                i = l;\n                b[i >> 2] = g;\n                b[i + 4 >> 2] = h;\n                i = m + 2 | 0;\n              } } while (0);\n              if ((i | 0) == 7) {\n                v = w + (a << 3) | 0;\n                b[v >> 2] = g;\n                b[v + 4 >> 2] = h & -117440513;\n                a = Jd(a | 0, p | 0, 1, 0) | 0;\n                v = H() | 0;\n              } else { v = p; }\n            } else { v = p; }\n            q = Jd(q | 0, r | 0, 1, 0) | 0;\n            r = H() | 0;\n            if (!((r | 0) < (e | 0) | (r | 0) == (e | 0) & q >>> 0 < d >>> 0)) { break; }else { p = v; }\n          }\n          if (x) {\n            s = A >>> 0 > 15;\n            t = Ud(A | 0, 0, 52) | 0;\n            u = H() | 0;\n            if (!y) {\n              g = 0;\n              j = 0;\n              i = 0;\n              h = 0;\n              while (1) {\n                if (!((k | 0) == 0 & (f | 0) == 0)) {\n                  A = c + (g << 3) | 0;\n                  b[A >> 2] = k;\n                  b[A + 4 >> 2] = f;\n                  g = Jd(g | 0, j | 0, 1, 0) | 0;\n                  j = H() | 0;\n                }\n                i = Jd(i | 0, h | 0, 1, 0) | 0;\n                h = H() | 0;\n                if (!((h | 0) < (e | 0) | (h | 0) == (e | 0) & i >>> 0 < d >>> 0)) { break; }\n                f = D + (i << 3) | 0;\n                k = b[f >> 2] | 0;\n                f = b[f + 4 >> 2] | 0;\n              }\n              f = v;\n              break;\n            }\n            g = 0;\n            j = 0;\n            h = 0;\n            i = 0;\n            while (1) {\n              do { if (!((k | 0) == 0 & (f | 0) == 0)) {\n                o = Td(k | 0, f | 0, 52) | 0;\n                H() | 0;\n                o = o & 15;\n                if (s | (o | 0) < (A | 0)) {\n                  E = 80;\n                  break a;\n                }\n                if ((o | 0) != (A | 0)) {\n                  l = k | t;\n                  m = f & -15728641 | u;\n                  if (o >>> 0 >= z >>> 0) {\n                    n = A;\n                    do {\n                      y = Ud(7, 0, (14 - n | 0) * 3 | 0) | 0;\n                      n = n + 1 | 0;\n                      l = y | l;\n                      m = H() | 0 | m;\n                    } while (n >>> 0 < o >>> 0);\n                  }\n                } else {\n                  l = k;\n                  m = f;\n                }\n                p = Rd(l | 0, m | 0, d | 0, e | 0) | 0;\n                n = 0;\n                o = 0;\n                r = H() | 0;\n                do {\n                  if ((n | 0) > (e | 0) | (n | 0) == (e | 0) & o >>> 0 > d >>> 0) {\n                    E = 81;\n                    break a;\n                  }\n                  y = C + (p << 3) | 0;\n                  q = b[y + 4 >> 2] | 0;\n                  if ((q & -117440513 | 0) == (m | 0) ? (b[y >> 2] | 0) == (l | 0) : 0) {\n                    E = 65;\n                    break;\n                  }\n                  y = Jd(p | 0, r | 0, 1, 0) | 0;\n                  p = Qd(y | 0, H() | 0, d | 0, e | 0) | 0;\n                  r = H() | 0;\n                  o = Jd(o | 0, n | 0, 1, 0) | 0;\n                  n = H() | 0;\n                  y = C + (p << 3) | 0;\n                } while (!((b[y >> 2] | 0) == (l | 0) ? (b[y + 4 >> 2] | 0) == (m | 0) : 0));\n                if ((E | 0) == 65 ? (E = 0, 0 == 0 & (q & 117440512 | 0) == 100663296) : 0) { break; }\n                y = c + (g << 3) | 0;\n                b[y >> 2] = k;\n                b[y + 4 >> 2] = f;\n                g = Jd(g | 0, j | 0, 1, 0) | 0;\n                j = H() | 0;\n              } } while (0);\n              h = Jd(h | 0, i | 0, 1, 0) | 0;\n              i = H() | 0;\n              if (!((i | 0) < (e | 0) | (i | 0) == (e | 0) & h >>> 0 < d >>> 0)) { break; }\n              f = D + (h << 3) | 0;\n              k = b[f >> 2] | 0;\n              f = b[f + 4 >> 2] | 0;\n            }\n            f = v;\n          } else {\n            g = 0;\n            f = v;\n          }\n        } else {\n          g = 0;\n          a = 0;\n          f = 0;\n        } } while (0);\n        _d(C | 0, 0, B | 0) | 0;\n        Zd(D | 0, w | 0, a << 3 | 0) | 0;\n        Hd(w);\n        if ((a | 0) == 0 & (f | 0) == 0) {\n          E = 89;\n          break;\n        } else {\n          c = c + (g << 3) | 0;\n          e = f;\n          d = a;\n        }\n      }\n      if ((E | 0) == 16) {\n        if (0 == 0 & (f & 117440512 | 0) == 0) {\n          f = 4;\n          E = 27;\n        } else { E = 21; }\n      } else if ((E | 0) == 31) { I(27795, 27122, 620, 27132); }else if ((E | 0) == 41) {\n        Hd(D);\n        Hd(C);\n        E = 10;\n        return E | 0;\n      } else if ((E | 0) == 48) {\n        Hd(D);\n        Hd(C);\n        E = 13;\n        return E | 0;\n      } else if ((E | 0) == 80) { I(27795, 27122, 711, 27132); }else if ((E | 0) == 81) { I(27795, 27122, 723, 27132); }else if ((E | 0) == 85) {\n        Zd(c | 0, D | 0, d << 3 | 0) | 0;\n        E = 89;\n      }\n      if ((E | 0) == 21) {\n        Hd(D);\n        Hd(C);\n        E = 5;\n        return E | 0;\n      } else if ((E | 0) == 27) {\n        Hd(D);\n        Hd(C);\n        E = f;\n        return E | 0;\n      } else if ((E | 0) == 89) {\n        Hd(D);\n        Hd(C);\n        E = 0;\n        return E | 0;\n      }\n      return 0;\n    }\n    function Pb(a, c, d, e, f, g, h) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      g = g | 0;\n      h = h | 0;\n      var i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0;\n      q = T;\n      T = T + 16 | 0;\n      p = q;\n      if (!((d | 0) > 0 | (d | 0) == 0 & c >>> 0 > 0)) {\n        p = 0;\n        T = q;\n        return p | 0;\n      }\n      if ((h | 0) >= 16) {\n        p = 12;\n        T = q;\n        return p | 0;\n      }\n      n = 0;\n      o = 0;\n      m = 0;\n      i = 0;\n      a: while (1) {\n        k = a + (n << 3) | 0;\n        j = b[k >> 2] | 0;\n        k = b[k + 4 >> 2] | 0;\n        l = Td(j | 0, k | 0, 52) | 0;\n        H() | 0;\n        if ((l & 15 | 0) > (h | 0)) {\n          i = 12;\n          j = 11;\n          break;\n        }\n        ic(p, j, k, h);\n        l = p;\n        k = b[l >> 2] | 0;\n        l = b[l + 4 >> 2] | 0;\n        if ((k | 0) == 0 & (l | 0) == 0) { j = m; }else {\n          j = m;\n          do {\n            if (!((i | 0) < (g | 0) | (i | 0) == (g | 0) & j >>> 0 < f >>> 0)) {\n              j = 10;\n              break a;\n            }\n            m = e + (j << 3) | 0;\n            b[m >> 2] = k;\n            b[m + 4 >> 2] = l;\n            j = Jd(j | 0, i | 0, 1, 0) | 0;\n            i = H() | 0;\n            kc(p);\n            m = p;\n            k = b[m >> 2] | 0;\n            l = b[m + 4 >> 2] | 0;\n          } while (!((k | 0) == 0 & (l | 0) == 0));\n        }\n        n = Jd(n | 0, o | 0, 1, 0) | 0;\n        o = H() | 0;\n        if (!((o | 0) < (d | 0) | (o | 0) == (d | 0) & n >>> 0 < c >>> 0)) {\n          i = 0;\n          j = 11;\n          break;\n        } else { m = j; }\n      }\n      if ((j | 0) == 10) {\n        p = 14;\n        T = q;\n        return p | 0;\n      } else if ((j | 0) == 11) {\n        T = q;\n        return i | 0;\n      }\n      return 0;\n    }\n    function Qb(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0;\n      n = T;\n      T = T + 16 | 0;\n      m = n;\n      a: do { if ((d | 0) > 0 | (d | 0) == 0 & c >>> 0 > 0) {\n        k = 0;\n        h = 0;\n        g = 0;\n        l = 0;\n        while (1) {\n          j = a + (k << 3) | 0;\n          i = b[j >> 2] | 0;\n          j = b[j + 4 >> 2] | 0;\n          if (!((i | 0) == 0 & (j | 0) == 0)) {\n            j = (Jb(i, j, e, m) | 0) == 0;\n            i = m;\n            h = Jd(b[i >> 2] | 0, b[i + 4 >> 2] | 0, h | 0, g | 0) | 0;\n            g = H() | 0;\n            if (!j) {\n              g = 12;\n              break;\n            }\n          }\n          k = Jd(k | 0, l | 0, 1, 0) | 0;\n          l = H() | 0;\n          if (!((l | 0) < (d | 0) | (l | 0) == (d | 0) & k >>> 0 < c >>> 0)) { break a; }\n        }\n        T = n;\n        return g | 0;\n      } else {\n        h = 0;\n        g = 0;\n      } } while (0);\n      b[f >> 2] = h;\n      b[f + 4 >> 2] = g;\n      f = 0;\n      T = n;\n      return f | 0;\n    }\n    function Rb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      b = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      return b & 1 | 0;\n    }\n    function Sb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0,\n        d = 0,\n        e = 0;\n      e = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      e = e & 15;\n      if (!e) {\n        e = 0;\n        return e | 0;\n      }\n      d = 1;\n      while (1) {\n        c = Td(a | 0, b | 0, (15 - d | 0) * 3 | 0) | 0;\n        H() | 0;\n        c = c & 7;\n        if (c | 0) {\n          d = 5;\n          break;\n        }\n        if (d >>> 0 < e >>> 0) { d = d + 1 | 0; }else {\n          c = 0;\n          d = 5;\n          break;\n        }\n      }\n      if ((d | 0) == 5) { return c | 0; }\n      return 0;\n    }\n    function Tb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      i = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      i = i & 15;\n      if (!i) {\n        h = b;\n        i = a;\n        G(h | 0);\n        return i | 0;\n      }\n      h = 1;\n      c = 0;\n      while (1) {\n        f = (15 - h | 0) * 3 | 0;\n        d = Ud(7, 0, f | 0) | 0;\n        e = H() | 0;\n        g = Td(a | 0, b | 0, f | 0) | 0;\n        H() | 0;\n        f = Ud($a(g & 7) | 0, 0, f | 0) | 0;\n        g = H() | 0;\n        a = f | a & ~d;\n        b = g | b & ~e;\n        a: do { if (!c) { if (!((f & d | 0) == 0 & (g & e | 0) == 0)) {\n          d = Td(a | 0, b | 0, 52) | 0;\n          H() | 0;\n          d = d & 15;\n          if (!d) { c = 1; }else {\n            c = 1;\n            b: while (1) {\n              g = Td(a | 0, b | 0, (15 - c | 0) * 3 | 0) | 0;\n              H() | 0;\n              switch (g & 7) {\n                case 1:\n                  break b;\n                case 0:\n                  break;\n                default:\n                  {\n                    c = 1;\n                    break a;\n                  }\n              }\n              if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else {\n                c = 1;\n                break a;\n              }\n            }\n            c = 1;\n            while (1) {\n              g = (15 - c | 0) * 3 | 0;\n              e = Td(a | 0, b | 0, g | 0) | 0;\n              H() | 0;\n              f = Ud(7, 0, g | 0) | 0;\n              b = b & ~(H() | 0);\n              g = Ud($a(e & 7) | 0, 0, g | 0) | 0;\n              a = a & ~f | g;\n              b = b | (H() | 0);\n              if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else {\n                c = 1;\n                break;\n              }\n            }\n          }\n        } else { c = 0; } } } while (0);\n        if (h >>> 0 < i >>> 0) { h = h + 1 | 0; }else { break; }\n      }\n      G(b | 0);\n      return a | 0;\n    }\n    function Ub(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0;\n      d = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      d = d & 15;\n      if (!d) {\n        c = b;\n        d = a;\n        G(c | 0);\n        return d | 0;\n      }\n      c = 1;\n      while (1) {\n        f = (15 - c | 0) * 3 | 0;\n        g = Td(a | 0, b | 0, f | 0) | 0;\n        H() | 0;\n        e = Ud(7, 0, f | 0) | 0;\n        b = b & ~(H() | 0);\n        f = Ud($a(g & 7) | 0, 0, f | 0) | 0;\n        a = f | a & ~e;\n        b = H() | 0 | b;\n        if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else { break; }\n      }\n      G(b | 0);\n      return a | 0;\n    }\n    function Vb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      i = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      i = i & 15;\n      if (!i) {\n        h = b;\n        i = a;\n        G(h | 0);\n        return i | 0;\n      }\n      h = 1;\n      c = 0;\n      while (1) {\n        f = (15 - h | 0) * 3 | 0;\n        d = Ud(7, 0, f | 0) | 0;\n        e = H() | 0;\n        g = Td(a | 0, b | 0, f | 0) | 0;\n        H() | 0;\n        f = Ud(ab(g & 7) | 0, 0, f | 0) | 0;\n        g = H() | 0;\n        a = f | a & ~d;\n        b = g | b & ~e;\n        a: do { if (!c) { if (!((f & d | 0) == 0 & (g & e | 0) == 0)) {\n          d = Td(a | 0, b | 0, 52) | 0;\n          H() | 0;\n          d = d & 15;\n          if (!d) { c = 1; }else {\n            c = 1;\n            b: while (1) {\n              g = Td(a | 0, b | 0, (15 - c | 0) * 3 | 0) | 0;\n              H() | 0;\n              switch (g & 7) {\n                case 1:\n                  break b;\n                case 0:\n                  break;\n                default:\n                  {\n                    c = 1;\n                    break a;\n                  }\n              }\n              if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else {\n                c = 1;\n                break a;\n              }\n            }\n            c = 1;\n            while (1) {\n              e = (15 - c | 0) * 3 | 0;\n              f = Ud(7, 0, e | 0) | 0;\n              g = b & ~(H() | 0);\n              b = Td(a | 0, b | 0, e | 0) | 0;\n              H() | 0;\n              b = Ud(ab(b & 7) | 0, 0, e | 0) | 0;\n              a = a & ~f | b;\n              b = g | (H() | 0);\n              if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else {\n                c = 1;\n                break;\n              }\n            }\n          }\n        } else { c = 0; } } } while (0);\n        if (h >>> 0 < i >>> 0) { h = h + 1 | 0; }else { break; }\n      }\n      G(b | 0);\n      return a | 0;\n    }\n    function Wb(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0;\n      d = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      d = d & 15;\n      if (!d) {\n        c = b;\n        d = a;\n        G(c | 0);\n        return d | 0;\n      }\n      c = 1;\n      while (1) {\n        g = (15 - c | 0) * 3 | 0;\n        f = Ud(7, 0, g | 0) | 0;\n        e = b & ~(H() | 0);\n        b = Td(a | 0, b | 0, g | 0) | 0;\n        H() | 0;\n        b = Ud(ab(b & 7) | 0, 0, g | 0) | 0;\n        a = b | a & ~f;\n        b = H() | 0 | e;\n        if (c >>> 0 < d >>> 0) { c = c + 1 | 0; }else { break; }\n      }\n      G(b | 0);\n      return a | 0;\n    }\n    function Xb(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0;\n      j = T;\n      T = T + 64 | 0;\n      i = j + 40 | 0;\n      e = j + 24 | 0;\n      f = j + 12 | 0;\n      g = j;\n      Ud(c | 0, 0, 52) | 0;\n      d = H() | 0 | 134225919;\n      if (!c) {\n        if ((b[a + 4 >> 2] | 0) > 2) {\n          h = 0;\n          i = 0;\n          G(h | 0);\n          T = j;\n          return i | 0;\n        }\n        if ((b[a + 8 >> 2] | 0) > 2) {\n          h = 0;\n          i = 0;\n          G(h | 0);\n          T = j;\n          return i | 0;\n        }\n        if ((b[a + 12 >> 2] | 0) > 2) {\n          h = 0;\n          i = 0;\n          G(h | 0);\n          T = j;\n          return i | 0;\n        }\n        Ud(qa(a) | 0, 0, 45) | 0;\n        h = H() | 0 | d;\n        i = -1;\n        G(h | 0);\n        T = j;\n        return i | 0;\n      }\n      b[i >> 2] = b[a >> 2];\n      b[i + 4 >> 2] = b[a + 4 >> 2];\n      b[i + 8 >> 2] = b[a + 8 >> 2];\n      b[i + 12 >> 2] = b[a + 12 >> 2];\n      h = i + 4 | 0;\n      if ((c | 0) > 0) {\n        a = -1;\n        while (1) {\n          b[e >> 2] = b[h >> 2];\n          b[e + 4 >> 2] = b[h + 4 >> 2];\n          b[e + 8 >> 2] = b[h + 8 >> 2];\n          if (!(c & 1)) {\n            Va(h);\n            b[f >> 2] = b[h >> 2];\n            b[f + 4 >> 2] = b[h + 4 >> 2];\n            b[f + 8 >> 2] = b[h + 8 >> 2];\n            Xa(f);\n          } else {\n            Ua(h);\n            b[f >> 2] = b[h >> 2];\n            b[f + 4 >> 2] = b[h + 4 >> 2];\n            b[f + 8 >> 2] = b[h + 8 >> 2];\n            Wa(f);\n          }\n          Pa(e, f, g);\n          Ma(g);\n          l = (15 - c | 0) * 3 | 0;\n          k = Ud(7, 0, l | 0) | 0;\n          d = d & ~(H() | 0);\n          l = Ud(Ra(g) | 0, 0, l | 0) | 0;\n          a = l | a & ~k;\n          d = H() | 0 | d;\n          if ((c | 0) > 1) { c = c + -1 | 0; }else { break; }\n        }\n      } else { a = -1; }\n      a: do { if (((b[h >> 2] | 0) <= 2 ? (b[i + 8 >> 2] | 0) <= 2 : 0) ? (b[i + 12 >> 2] | 0) <= 2 : 0) {\n        e = qa(i) | 0;\n        c = Ud(e | 0, 0, 45) | 0;\n        c = c | a;\n        a = H() | 0 | d & -1040385;\n        g = ra(i) | 0;\n        if (!(oa(e) | 0)) {\n          if ((g | 0) <= 0) { break; }\n          f = 0;\n          while (1) {\n            e = Td(c | 0, a | 0, 52) | 0;\n            H() | 0;\n            e = e & 15;\n            if (e) {\n              d = 1;\n              while (1) {\n                l = (15 - d | 0) * 3 | 0;\n                i = Td(c | 0, a | 0, l | 0) | 0;\n                H() | 0;\n                k = Ud(7, 0, l | 0) | 0;\n                a = a & ~(H() | 0);\n                l = Ud($a(i & 7) | 0, 0, l | 0) | 0;\n                c = c & ~k | l;\n                a = a | (H() | 0);\n                if (d >>> 0 < e >>> 0) { d = d + 1 | 0; }else { break; }\n              }\n            }\n            f = f + 1 | 0;\n            if ((f | 0) == (g | 0)) { break a; }\n          }\n        }\n        f = Td(c | 0, a | 0, 52) | 0;\n        H() | 0;\n        f = f & 15;\n        b: do { if (f) {\n          d = 1;\n          c: while (1) {\n            l = Td(c | 0, a | 0, (15 - d | 0) * 3 | 0) | 0;\n            H() | 0;\n            switch (l & 7) {\n              case 1:\n                break c;\n              case 0:\n                break;\n              default:\n                break b;\n            }\n            if (d >>> 0 < f >>> 0) { d = d + 1 | 0; }else { break b; }\n          }\n          if (ua(e, b[i >> 2] | 0) | 0) {\n            d = 1;\n            while (1) {\n              i = (15 - d | 0) * 3 | 0;\n              k = Ud(7, 0, i | 0) | 0;\n              l = a & ~(H() | 0);\n              a = Td(c | 0, a | 0, i | 0) | 0;\n              H() | 0;\n              a = Ud(ab(a & 7) | 0, 0, i | 0) | 0;\n              c = c & ~k | a;\n              a = l | (H() | 0);\n              if (d >>> 0 < f >>> 0) { d = d + 1 | 0; }else { break; }\n            }\n          } else {\n            d = 1;\n            while (1) {\n              l = (15 - d | 0) * 3 | 0;\n              i = Td(c | 0, a | 0, l | 0) | 0;\n              H() | 0;\n              k = Ud(7, 0, l | 0) | 0;\n              a = a & ~(H() | 0);\n              l = Ud($a(i & 7) | 0, 0, l | 0) | 0;\n              c = c & ~k | l;\n              a = a | (H() | 0);\n              if (d >>> 0 < f >>> 0) { d = d + 1 | 0; }else { break; }\n            }\n          }\n        } } while (0);\n        if ((g | 0) > 0) {\n          d = 0;\n          do {\n            c = Tb(c, a) | 0;\n            a = H() | 0;\n            d = d + 1 | 0;\n          } while ((d | 0) != (g | 0));\n        }\n      } else {\n        c = 0;\n        a = 0;\n      } } while (0);\n      k = a;\n      l = c;\n      G(k | 0);\n      T = j;\n      return l | 0;\n    }\n    function Yb(a) {\n      a = a | 0;\n      return (a | 0) % 2 | 0 | 0;\n    }\n    function Zb(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0;\n      f = T;\n      T = T + 16 | 0;\n      e = f;\n      if (c >>> 0 > 15) {\n        e = 4;\n        T = f;\n        return e | 0;\n      }\n      if ((b[a + 4 >> 2] & 2146435072 | 0) == 2146435072) {\n        e = 3;\n        T = f;\n        return e | 0;\n      }\n      if ((b[a + 8 + 4 >> 2] & 2146435072 | 0) == 2146435072) {\n        e = 3;\n        T = f;\n        return e | 0;\n      }\n      qb(a, c, e);\n      c = Xb(e, c) | 0;\n      e = H() | 0;\n      b[d >> 2] = c;\n      b[d + 4 >> 2] = e;\n      if ((c | 0) == 0 & (e | 0) == 0) { I(27795, 27122, 1050, 27145); }\n      e = 0;\n      T = f;\n      return e | 0;\n    }\n    function _b(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0;\n      f = d + 4 | 0;\n      g = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      g = g & 15;\n      h = Td(a | 0, c | 0, 45) | 0;\n      H() | 0;\n      e = (g | 0) == 0;\n      if (!(oa(h & 127) | 0)) {\n        if (e) {\n          h = 0;\n          return h | 0;\n        }\n        if ((b[f >> 2] | 0) == 0 ? (b[d + 8 >> 2] | 0) == 0 : 0) { e = (b[d + 12 >> 2] | 0) != 0 & 1; }else { e = 1; }\n      } else if (e) {\n        h = 1;\n        return h | 0;\n      } else { e = 1; }\n      d = 1;\n      while (1) {\n        if (!(d & 1)) { Xa(f); }else { Wa(f); }\n        h = Td(a | 0, c | 0, (15 - d | 0) * 3 | 0) | 0;\n        H() | 0;\n        Ya(f, h & 7);\n        if (d >>> 0 < g >>> 0) { d = d + 1 | 0; }else { break; }\n      }\n      return e | 0;\n    }\n    function $b(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0;\n      l = T;\n      T = T + 16 | 0;\n      j = l;\n      k = Td(a | 0, c | 0, 45) | 0;\n      H() | 0;\n      k = k & 127;\n      if (k >>> 0 > 121) {\n        b[d >> 2] = 0;\n        b[d + 4 >> 2] = 0;\n        b[d + 8 >> 2] = 0;\n        b[d + 12 >> 2] = 0;\n        k = 5;\n        T = l;\n        return k | 0;\n      }\n      a: do { if ((oa(k) | 0) != 0 ? (g = Td(a | 0, c | 0, 52) | 0, H() | 0, g = g & 15, (g | 0) != 0) : 0) {\n        e = 1;\n        b: while (1) {\n          i = Td(a | 0, c | 0, (15 - e | 0) * 3 | 0) | 0;\n          H() | 0;\n          switch (i & 7) {\n            case 5:\n              break b;\n            case 0:\n              break;\n            default:\n              {\n                e = c;\n                break a;\n              }\n          }\n          if (e >>> 0 < g >>> 0) { e = e + 1 | 0; }else {\n            e = c;\n            break a;\n          }\n        }\n        f = 1;\n        e = c;\n        while (1) {\n          c = (15 - f | 0) * 3 | 0;\n          h = Ud(7, 0, c | 0) | 0;\n          i = e & ~(H() | 0);\n          e = Td(a | 0, e | 0, c | 0) | 0;\n          H() | 0;\n          e = Ud(ab(e & 7) | 0, 0, c | 0) | 0;\n          a = a & ~h | e;\n          e = i | (H() | 0);\n          if (f >>> 0 < g >>> 0) { f = f + 1 | 0; }else { break; }\n        }\n      } else { e = c; } } while (0);\n      i = 7696 + (k * 28 | 0) | 0;\n      b[d >> 2] = b[i >> 2];\n      b[d + 4 >> 2] = b[i + 4 >> 2];\n      b[d + 8 >> 2] = b[i + 8 >> 2];\n      b[d + 12 >> 2] = b[i + 12 >> 2];\n      if (!(_b(a, e, d) | 0)) {\n        k = 0;\n        T = l;\n        return k | 0;\n      }\n      h = d + 4 | 0;\n      b[j >> 2] = b[h >> 2];\n      b[j + 4 >> 2] = b[h + 4 >> 2];\n      b[j + 8 >> 2] = b[h + 8 >> 2];\n      g = Td(a | 0, e | 0, 52) | 0;\n      H() | 0;\n      i = g & 15;\n      if (!(g & 1)) { g = i; }else {\n        Xa(h);\n        g = i + 1 | 0;\n      }\n      if (!(oa(k) | 0)) { e = 0; }else {\n        c: do { if (!i) { e = 0; }else {\n          c = 1;\n          while (1) {\n            f = Td(a | 0, e | 0, (15 - c | 0) * 3 | 0) | 0;\n            H() | 0;\n            f = f & 7;\n            if (f | 0) {\n              e = f;\n              break c;\n            }\n            if (c >>> 0 < i >>> 0) { c = c + 1 | 0; }else {\n              e = 0;\n              break;\n            }\n          }\n        } } while (0);\n        e = (e | 0) == 4 & 1;\n      }\n      if (!(xb(d, g, e, 0) | 0)) {\n        if ((g | 0) != (i | 0)) {\n          b[h >> 2] = b[j >> 2];\n          b[h + 4 >> 2] = b[j + 4 >> 2];\n          b[h + 8 >> 2] = b[j + 8 >> 2];\n        }\n      } else {\n        if (oa(k) | 0) { do {} while ((xb(d, g, 0, 0) | 0) != 0); }\n        if ((g | 0) != (i | 0)) { Va(h); }\n      }\n      k = 0;\n      T = l;\n      return k | 0;\n    }\n    function ac(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0;\n      f = T;\n      T = T + 16 | 0;\n      d = f;\n      e = $b(a, b, d) | 0;\n      if (e | 0) {\n        T = f;\n        return e | 0;\n      }\n      e = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      ub(d, e & 15, c);\n      e = 0;\n      T = f;\n      return e | 0;\n    }\n    function bc(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0;\n      g = T;\n      T = T + 16 | 0;\n      f = g;\n      d = $b(a, b, f) | 0;\n      if (d | 0) {\n        f = d;\n        T = g;\n        return f | 0;\n      }\n      d = Td(a | 0, b | 0, 45) | 0;\n      H() | 0;\n      d = (oa(d & 127) | 0) == 0;\n      e = Td(a | 0, b | 0, 52) | 0;\n      H() | 0;\n      e = e & 15;\n      a: do { if (!d) {\n        if (e | 0) {\n          d = 1;\n          while (1) {\n            h = Ud(7, 0, (15 - d | 0) * 3 | 0) | 0;\n            if (!((h & a | 0) == 0 & ((H() | 0) & b | 0) == 0)) { break a; }\n            if (d >>> 0 < e >>> 0) { d = d + 1 | 0; }else { break; }\n          }\n        }\n        vb(f, e, 0, 5, c);\n        h = 0;\n        T = g;\n        return h | 0;\n      } } while (0);\n      zb(f, e, 0, 6, c);\n      h = 0;\n      T = g;\n      return h | 0;\n    }\n    function cc(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0;\n      f = Td(a | 0, c | 0, 45) | 0;\n      H() | 0;\n      if (!(oa(f & 127) | 0)) {\n        f = 2;\n        b[d >> 2] = f;\n        return 0;\n      }\n      f = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      f = f & 15;\n      if (!f) {\n        f = 5;\n        b[d >> 2] = f;\n        return 0;\n      }\n      e = 1;\n      while (1) {\n        g = Ud(7, 0, (15 - e | 0) * 3 | 0) | 0;\n        if (!((g & a | 0) == 0 & ((H() | 0) & c | 0) == 0)) {\n          e = 2;\n          a = 6;\n          break;\n        }\n        if (e >>> 0 < f >>> 0) { e = e + 1 | 0; }else {\n          e = 5;\n          a = 6;\n          break;\n        }\n      }\n      if ((a | 0) == 6) {\n        b[d >> 2] = e;\n        return 0;\n      }\n      return 0;\n    }\n    function dc(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0;\n      m = T;\n      T = T + 128 | 0;\n      k = m + 112 | 0;\n      g = m + 96 | 0;\n      l = m;\n      f = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      i = f & 15;\n      b[k >> 2] = i;\n      h = Td(a | 0, c | 0, 45) | 0;\n      H() | 0;\n      h = h & 127;\n      a: do { if (oa(h) | 0) {\n        if (i | 0) {\n          e = 1;\n          while (1) {\n            j = Ud(7, 0, (15 - e | 0) * 3 | 0) | 0;\n            if (!((j & a | 0) == 0 & ((H() | 0) & c | 0) == 0)) {\n              f = 0;\n              break a;\n            }\n            if (e >>> 0 < i >>> 0) { e = e + 1 | 0; }else { break; }\n          }\n        }\n        if (!(f & 1)) {\n          j = Ud(i + 1 | 0, 0, 52) | 0;\n          l = H() | 0 | c & -15728641;\n          k = Ud(7, 0, (14 - i | 0) * 3 | 0) | 0;\n          l = dc((j | a) & ~k, l & ~(H() | 0), d) | 0;\n          T = m;\n          return l | 0;\n        } else { f = 1; }\n      } else { f = 0; } } while (0);\n      e = $b(a, c, g) | 0;\n      if (!e) {\n        if (f) {\n          wb(g, k, l);\n          j = 5;\n        } else {\n          Ab(g, k, l);\n          j = 6;\n        }\n        b: do { if (oa(h) | 0) {\n          if (!i) { a = 5; }else {\n            e = 1;\n            while (1) {\n              h = Ud(7, 0, (15 - e | 0) * 3 | 0) | 0;\n              if (!((h & a | 0) == 0 & ((H() | 0) & c | 0) == 0)) {\n                a = 2;\n                break b;\n              }\n              if (e >>> 0 < i >>> 0) { e = e + 1 | 0; }else {\n                a = 5;\n                break;\n              }\n            }\n          }\n        } else { a = 2; } } while (0);\n        _d(d | 0, -1, a << 2 | 0) | 0;\n        c: do { if (f) {\n          g = 0;\n          while (1) {\n            h = l + (g << 4) | 0;\n            yb(h, b[k >> 2] | 0) | 0;\n            h = b[h >> 2] | 0;\n            i = b[d >> 2] | 0;\n            if ((i | 0) == -1 | (i | 0) == (h | 0)) { e = d; }else {\n              f = 0;\n              do {\n                f = f + 1 | 0;\n                if (f >>> 0 >= a >>> 0) {\n                  e = 1;\n                  break c;\n                }\n                e = d + (f << 2) | 0;\n                i = b[e >> 2] | 0;\n              } while (!((i | 0) == -1 | (i | 0) == (h | 0)));\n            }\n            b[e >> 2] = h;\n            g = g + 1 | 0;\n            if (g >>> 0 >= j >>> 0) {\n              e = 0;\n              break;\n            }\n          }\n        } else {\n          g = 0;\n          while (1) {\n            h = l + (g << 4) | 0;\n            xb(h, b[k >> 2] | 0, 0, 1) | 0;\n            h = b[h >> 2] | 0;\n            i = b[d >> 2] | 0;\n            if ((i | 0) == -1 | (i | 0) == (h | 0)) { e = d; }else {\n              f = 0;\n              do {\n                f = f + 1 | 0;\n                if (f >>> 0 >= a >>> 0) {\n                  e = 1;\n                  break c;\n                }\n                e = d + (f << 2) | 0;\n                i = b[e >> 2] | 0;\n              } while (!((i | 0) == -1 | (i | 0) == (h | 0)));\n            }\n            b[e >> 2] = h;\n            g = g + 1 | 0;\n            if (g >>> 0 >= j >>> 0) {\n              e = 0;\n              break;\n            }\n          }\n        } } while (0);\n      }\n      l = e;\n      T = m;\n      return l | 0;\n    }\n    function ec() {\n      return 12;\n    }\n    function fc(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      if (a >>> 0 > 15) {\n        i = 4;\n        return i | 0;\n      }\n      Ud(a | 0, 0, 52) | 0;\n      i = H() | 0 | 134225919;\n      if (!a) {\n        d = 0;\n        e = 0;\n        do {\n          if (oa(e) | 0) {\n            Ud(e | 0, 0, 45) | 0;\n            h = i | (H() | 0);\n            a = c + (d << 3) | 0;\n            b[a >> 2] = -1;\n            b[a + 4 >> 2] = h;\n            d = d + 1 | 0;\n          }\n          e = e + 1 | 0;\n        } while ((e | 0) != 122);\n        d = 0;\n        return d | 0;\n      }\n      d = 0;\n      h = 0;\n      do {\n        if (oa(h) | 0) {\n          Ud(h | 0, 0, 45) | 0;\n          e = 1;\n          f = -1;\n          g = i | (H() | 0);\n          while (1) {\n            j = Ud(7, 0, (15 - e | 0) * 3 | 0) | 0;\n            f = f & ~j;\n            g = g & ~(H() | 0);\n            if ((e | 0) == (a | 0)) { break; }else { e = e + 1 | 0; }\n          }\n          j = c + (d << 3) | 0;\n          b[j >> 2] = f;\n          b[j + 4 >> 2] = g;\n          d = d + 1 | 0;\n        }\n        h = h + 1 | 0;\n      } while ((h | 0) != 122);\n      d = 0;\n      return d | 0;\n    }\n    function gc(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0;\n      t = T;\n      T = T + 16 | 0;\n      r = t;\n      s = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      s = s & 15;\n      if (d >>> 0 > 15) {\n        s = 4;\n        T = t;\n        return s | 0;\n      }\n      if ((s | 0) < (d | 0)) {\n        s = 12;\n        T = t;\n        return s | 0;\n      }\n      if ((s | 0) != (d | 0)) {\n        g = Ud(d | 0, 0, 52) | 0;\n        g = g | a;\n        i = H() | 0 | c & -15728641;\n        if ((s | 0) > (d | 0)) {\n          j = d;\n          do {\n            q = Ud(7, 0, (14 - j | 0) * 3 | 0) | 0;\n            j = j + 1 | 0;\n            g = q | g;\n            i = H() | 0 | i;\n          } while ((j | 0) < (s | 0));\n          q = g;\n        } else { q = g; }\n      } else {\n        q = a;\n        i = c;\n      }\n      p = Td(q | 0, i | 0, 45) | 0;\n      H() | 0;\n      a: do { if (oa(p & 127) | 0) {\n        j = Td(q | 0, i | 0, 52) | 0;\n        H() | 0;\n        j = j & 15;\n        if (j | 0) {\n          g = 1;\n          while (1) {\n            p = Ud(7, 0, (15 - g | 0) * 3 | 0) | 0;\n            if (!((p & q | 0) == 0 & ((H() | 0) & i | 0) == 0)) {\n              k = 33;\n              break a;\n            }\n            if (g >>> 0 < j >>> 0) { g = g + 1 | 0; }else { break; }\n          }\n        }\n        p = e;\n        b[p >> 2] = 0;\n        b[p + 4 >> 2] = 0;\n        if ((s | 0) > (d | 0)) {\n          p = c & -15728641;\n          o = s;\n          while (1) {\n            n = o;\n            o = o + -1 | 0;\n            if (o >>> 0 > 15 | (s | 0) < (o | 0)) {\n              k = 19;\n              break;\n            }\n            if ((s | 0) != (o | 0)) {\n              g = Ud(o | 0, 0, 52) | 0;\n              g = g | a;\n              j = H() | 0 | p;\n              if ((s | 0) < (n | 0)) { m = g; }else {\n                k = o;\n                do {\n                  m = Ud(7, 0, (14 - k | 0) * 3 | 0) | 0;\n                  k = k + 1 | 0;\n                  g = m | g;\n                  j = H() | 0 | j;\n                } while ((k | 0) < (s | 0));\n                m = g;\n              }\n            } else {\n              m = a;\n              j = c;\n            }\n            l = Td(m | 0, j | 0, 45) | 0;\n            H() | 0;\n            if (!(oa(l & 127) | 0)) { g = 0; }else {\n              l = Td(m | 0, j | 0, 52) | 0;\n              H() | 0;\n              l = l & 15;\n              b: do { if (!l) { g = 0; }else {\n                k = 1;\n                while (1) {\n                  g = Td(m | 0, j | 0, (15 - k | 0) * 3 | 0) | 0;\n                  H() | 0;\n                  g = g & 7;\n                  if (g | 0) { break b; }\n                  if (k >>> 0 < l >>> 0) { k = k + 1 | 0; }else {\n                    g = 0;\n                    break;\n                  }\n                }\n              } } while (0);\n              g = (g | 0) == 0 & 1;\n            }\n            j = Td(a | 0, c | 0, (15 - n | 0) * 3 | 0) | 0;\n            H() | 0;\n            j = j & 7;\n            if ((j | 0) == 7) {\n              f = 5;\n              k = 42;\n              break;\n            }\n            g = (g | 0) != 0;\n            if ((j | 0) == 1 & g) {\n              f = 5;\n              k = 42;\n              break;\n            }\n            m = j + (((j | 0) != 0 & g) << 31 >> 31) | 0;\n            if (m | 0) {\n              k = s - n | 0;\n              k = Rc(7, 0, k, ((k | 0) < 0) << 31 >> 31) | 0;\n              l = H() | 0;\n              if (g) {\n                g = Pd(k | 0, l | 0, 5, 0) | 0;\n                g = Jd(g | 0, H() | 0, -5, -1) | 0;\n                g = Nd(g | 0, H() | 0, 6, 0) | 0;\n                g = Jd(g | 0, H() | 0, 1, 0) | 0;\n                j = H() | 0;\n              } else {\n                g = k;\n                j = l;\n              }\n              n = m + -1 | 0;\n              n = Pd(k | 0, l | 0, n | 0, ((n | 0) < 0) << 31 >> 31 | 0) | 0;\n              n = Jd(g | 0, j | 0, n | 0, H() | 0) | 0;\n              m = H() | 0;\n              l = e;\n              l = Jd(n | 0, m | 0, b[l >> 2] | 0, b[l + 4 >> 2] | 0) | 0;\n              m = H() | 0;\n              n = e;\n              b[n >> 2] = l;\n              b[n + 4 >> 2] = m;\n            }\n            if ((o | 0) <= (d | 0)) {\n              k = 37;\n              break;\n            }\n          }\n          if ((k | 0) == 19) { I(27795, 27122, 1367, 27158); }else if ((k | 0) == 37) {\n            h = e;\n            f = b[h + 4 >> 2] | 0;\n            h = b[h >> 2] | 0;\n            break;\n          } else if ((k | 0) == 42) {\n            T = t;\n            return f | 0;\n          }\n        } else {\n          f = 0;\n          h = 0;\n        }\n      } else { k = 33; } } while (0);\n      c: do { if ((k | 0) == 33) {\n        p = e;\n        b[p >> 2] = 0;\n        b[p + 4 >> 2] = 0;\n        if ((s | 0) > (d | 0)) {\n          g = s;\n          while (1) {\n            f = Td(a | 0, c | 0, (15 - g | 0) * 3 | 0) | 0;\n            H() | 0;\n            f = f & 7;\n            if ((f | 0) == 7) {\n              f = 5;\n              break;\n            }\n            h = s - g | 0;\n            h = Rc(7, 0, h, ((h | 0) < 0) << 31 >> 31) | 0;\n            f = Pd(h | 0, H() | 0, f | 0, 0) | 0;\n            h = H() | 0;\n            p = e;\n            h = Jd(b[p >> 2] | 0, b[p + 4 >> 2] | 0, f | 0, h | 0) | 0;\n            f = H() | 0;\n            p = e;\n            b[p >> 2] = h;\n            b[p + 4 >> 2] = f;\n            g = g + -1 | 0;\n            if ((g | 0) <= (d | 0)) { break c; }\n          }\n          T = t;\n          return f | 0;\n        } else {\n          f = 0;\n          h = 0;\n        }\n      } } while (0);\n      if (Jb(q, i, s, r) | 0) { I(27795, 27122, 1327, 27173); }\n      s = r;\n      r = b[s + 4 >> 2] | 0;\n      if (((f | 0) > -1 | (f | 0) == -1 & h >>> 0 > 4294967295) & ((r | 0) > (f | 0) | ((r | 0) == (f | 0) ? (b[s >> 2] | 0) >>> 0 > h >>> 0 : 0))) {\n        s = 0;\n        T = t;\n        return s | 0;\n      } else { I(27795, 27122, 1407, 27158); }\n      return 0;\n    }\n    function hc(a, c, d, e, f, g) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      g = g | 0;\n      var h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0;\n      m = T;\n      T = T + 16 | 0;\n      h = m;\n      if (f >>> 0 > 15) {\n        g = 4;\n        T = m;\n        return g | 0;\n      }\n      i = Td(d | 0, e | 0, 52) | 0;\n      H() | 0;\n      i = i & 15;\n      if ((i | 0) > (f | 0)) {\n        g = 12;\n        T = m;\n        return g | 0;\n      }\n      if (Jb(d, e, f, h) | 0) { I(27795, 27122, 1327, 27173); }\n      l = h;\n      k = b[l + 4 >> 2] | 0;\n      if (!(((c | 0) > -1 | (c | 0) == -1 & a >>> 0 > 4294967295) & ((k | 0) > (c | 0) | ((k | 0) == (c | 0) ? (b[l >> 2] | 0) >>> 0 > a >>> 0 : 0)))) {\n        g = 2;\n        T = m;\n        return g | 0;\n      }\n      l = f - i | 0;\n      f = Ud(f | 0, 0, 52) | 0;\n      j = H() | 0 | e & -15728641;\n      k = g;\n      b[k >> 2] = f | d;\n      b[k + 4 >> 2] = j;\n      k = Td(d | 0, e | 0, 45) | 0;\n      H() | 0;\n      a: do { if (oa(k & 127) | 0) {\n        if (i | 0) {\n          h = 1;\n          while (1) {\n            k = Ud(7, 0, (15 - h | 0) * 3 | 0) | 0;\n            if (!((k & d | 0) == 0 & ((H() | 0) & e | 0) == 0)) { break a; }\n            if (h >>> 0 < i >>> 0) { h = h + 1 | 0; }else { break; }\n          }\n        }\n        if ((l | 0) < 1) {\n          g = 0;\n          T = m;\n          return g | 0;\n        }\n        k = i ^ 15;\n        e = -1;\n        j = 1;\n        h = 1;\n        while (1) {\n          i = l - j | 0;\n          i = Rc(7, 0, i, ((i | 0) < 0) << 31 >> 31) | 0;\n          d = H() | 0;\n          do { if (h) {\n            h = Pd(i | 0, d | 0, 5, 0) | 0;\n            h = Jd(h | 0, H() | 0, -5, -1) | 0;\n            h = Nd(h | 0, H() | 0, 6, 0) | 0;\n            f = H() | 0;\n            if ((c | 0) > (f | 0) | (c | 0) == (f | 0) & a >>> 0 > h >>> 0) {\n              c = Jd(a | 0, c | 0, -1, -1) | 0;\n              c = Kd(c | 0, H() | 0, h | 0, f | 0) | 0;\n              h = H() | 0;\n              n = g;\n              p = b[n >> 2] | 0;\n              n = b[n + 4 >> 2] | 0;\n              q = (k + e | 0) * 3 | 0;\n              o = Ud(7, 0, q | 0) | 0;\n              n = n & ~(H() | 0);\n              e = Nd(c | 0, h | 0, i | 0, d | 0) | 0;\n              a = H() | 0;\n              f = Jd(e | 0, a | 0, 2, 0) | 0;\n              q = Ud(f | 0, H() | 0, q | 0) | 0;\n              n = H() | 0 | n;\n              f = g;\n              b[f >> 2] = q | p & ~o;\n              b[f + 4 >> 2] = n;\n              a = Pd(e | 0, a | 0, i | 0, d | 0) | 0;\n              a = Kd(c | 0, h | 0, a | 0, H() | 0) | 0;\n              h = 0;\n              c = H() | 0;\n              break;\n            } else {\n              q = g;\n              o = b[q >> 2] | 0;\n              q = b[q + 4 >> 2] | 0;\n              p = Ud(7, 0, (k + e | 0) * 3 | 0) | 0;\n              q = q & ~(H() | 0);\n              h = g;\n              b[h >> 2] = o & ~p;\n              b[h + 4 >> 2] = q;\n              h = 1;\n              break;\n            }\n          } else {\n            o = g;\n            f = b[o >> 2] | 0;\n            o = b[o + 4 >> 2] | 0;\n            e = (k + e | 0) * 3 | 0;\n            n = Ud(7, 0, e | 0) | 0;\n            o = o & ~(H() | 0);\n            q = Nd(a | 0, c | 0, i | 0, d | 0) | 0;\n            h = H() | 0;\n            e = Ud(q | 0, h | 0, e | 0) | 0;\n            o = H() | 0 | o;\n            p = g;\n            b[p >> 2] = e | f & ~n;\n            b[p + 4 >> 2] = o;\n            h = Pd(q | 0, h | 0, i | 0, d | 0) | 0;\n            a = Kd(a | 0, c | 0, h | 0, H() | 0) | 0;\n            h = 0;\n            c = H() | 0;\n          } } while (0);\n          if ((l | 0) > (j | 0)) {\n            e = ~j;\n            j = j + 1 | 0;\n          } else {\n            c = 0;\n            break;\n          }\n        }\n        T = m;\n        return c | 0;\n      } } while (0);\n      if ((l | 0) < 1) {\n        q = 0;\n        T = m;\n        return q | 0;\n      }\n      f = i ^ 15;\n      h = 1;\n      while (1) {\n        p = l - h | 0;\n        p = Rc(7, 0, p, ((p | 0) < 0) << 31 >> 31) | 0;\n        q = H() | 0;\n        j = g;\n        d = b[j >> 2] | 0;\n        j = b[j + 4 >> 2] | 0;\n        i = (f - h | 0) * 3 | 0;\n        e = Ud(7, 0, i | 0) | 0;\n        j = j & ~(H() | 0);\n        n = Nd(a | 0, c | 0, p | 0, q | 0) | 0;\n        o = H() | 0;\n        i = Ud(n | 0, o | 0, i | 0) | 0;\n        j = H() | 0 | j;\n        k = g;\n        b[k >> 2] = i | d & ~e;\n        b[k + 4 >> 2] = j;\n        q = Pd(n | 0, o | 0, p | 0, q | 0) | 0;\n        a = Kd(a | 0, c | 0, q | 0, H() | 0) | 0;\n        c = H() | 0;\n        if ((l | 0) <= (h | 0)) {\n          c = 0;\n          break;\n        } else { h = h + 1 | 0; }\n      }\n      T = m;\n      return c | 0;\n    }\n    function ic(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0;\n      f = Td(c | 0, d | 0, 52) | 0;\n      H() | 0;\n      f = f & 15;\n      if ((c | 0) == 0 & (d | 0) == 0 | ((e | 0) > 15 | (f | 0) > (e | 0))) {\n        g = -1;\n        c = -1;\n        d = 0;\n        f = 0;\n      } else {\n        c = Mb(c, d, f + 1 | 0, e) | 0;\n        h = (H() | 0) & -15728641;\n        d = Ud(e | 0, 0, 52) | 0;\n        d = c | d;\n        h = h | (H() | 0);\n        c = (Kb(d, h) | 0) == 0;\n        g = f;\n        c = c ? -1 : e;\n        f = h;\n      }\n      h = a;\n      b[h >> 2] = d;\n      b[h + 4 >> 2] = f;\n      b[a + 8 >> 2] = g;\n      b[a + 12 >> 2] = c;\n      return;\n    }\n    function jc(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0;\n      f = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      f = f & 15;\n      g = e + 8 | 0;\n      b[g >> 2] = f;\n      if ((a | 0) == 0 & (c | 0) == 0 | ((d | 0) > 15 | (f | 0) > (d | 0))) {\n        d = e;\n        b[d >> 2] = 0;\n        b[d + 4 >> 2] = 0;\n        b[g >> 2] = -1;\n        b[e + 12 >> 2] = -1;\n        return;\n      }\n      a = Mb(a, c, f + 1 | 0, d) | 0;\n      g = (H() | 0) & -15728641;\n      f = Ud(d | 0, 0, 52) | 0;\n      f = a | f;\n      g = g | (H() | 0);\n      a = e;\n      b[a >> 2] = f;\n      b[a + 4 >> 2] = g;\n      a = e + 12 | 0;\n      if (!(Kb(f, g) | 0)) {\n        b[a >> 2] = -1;\n        return;\n      } else {\n        b[a >> 2] = d;\n        return;\n      }\n    }\n    function kc(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0;\n      d = a;\n      c = b[d >> 2] | 0;\n      d = b[d + 4 >> 2] | 0;\n      if ((c | 0) == 0 & (d | 0) == 0) { return; }\n      e = Td(c | 0, d | 0, 52) | 0;\n      H() | 0;\n      e = e & 15;\n      i = Ud(1, 0, (e ^ 15) * 3 | 0) | 0;\n      c = Jd(i | 0, H() | 0, c | 0, d | 0) | 0;\n      d = H() | 0;\n      i = a;\n      b[i >> 2] = c;\n      b[i + 4 >> 2] = d;\n      i = a + 8 | 0;\n      h = b[i >> 2] | 0;\n      if ((e | 0) < (h | 0)) { return; }\n      j = a + 12 | 0;\n      g = e;\n      while (1) {\n        if ((g | 0) == (h | 0)) {\n          e = 5;\n          break;\n        }\n        k = (g | 0) == (b[j >> 2] | 0);\n        f = (15 - g | 0) * 3 | 0;\n        e = Td(c | 0, d | 0, f | 0) | 0;\n        H() | 0;\n        e = e & 7;\n        if (k & ((e | 0) == 1 & 0 == 0)) {\n          e = 7;\n          break;\n        }\n        if (!((e | 0) == 7 & 0 == 0)) {\n          e = 10;\n          break;\n        }\n        k = Ud(1, 0, f | 0) | 0;\n        c = Jd(c | 0, d | 0, k | 0, H() | 0) | 0;\n        d = H() | 0;\n        k = a;\n        b[k >> 2] = c;\n        b[k + 4 >> 2] = d;\n        if ((g | 0) > (h | 0)) { g = g + -1 | 0; }else {\n          e = 10;\n          break;\n        }\n      }\n      if ((e | 0) == 5) {\n        k = a;\n        b[k >> 2] = 0;\n        b[k + 4 >> 2] = 0;\n        b[i >> 2] = -1;\n        b[j >> 2] = -1;\n        return;\n      } else if ((e | 0) == 7) {\n        h = Ud(1, 0, f | 0) | 0;\n        h = Jd(c | 0, d | 0, h | 0, H() | 0) | 0;\n        i = H() | 0;\n        k = a;\n        b[k >> 2] = h;\n        b[k + 4 >> 2] = i;\n        b[j >> 2] = g + -1;\n        return;\n      } else if ((e | 0) == 10) { return; }\n    }\n    function lc(a) {\n      a = +a;\n      var b = 0.0;\n      b = a < 0.0 ? a + 6.283185307179586 : a;\n      return +(!(a >= 6.283185307179586) ? b : b + -6.283185307179586);\n    }\n    function mc(a, b) {\n      a = a | 0;\n      b = b | 0;\n      if (!(+q(+(+e[a >> 3] - +e[b >> 3])) < 1.7453292519943298e-11)) {\n        b = 0;\n        return b | 0;\n      }\n      b = +q(+(+e[a + 8 >> 3] - +e[b + 8 >> 3])) < 1.7453292519943298e-11;\n      return b | 0;\n    }\n    function nc(a, b) {\n      a = +a;\n      b = b | 0;\n      switch (b | 0) {\n        case 1:\n          {\n            a = a < 0.0 ? a + 6.283185307179586 : a;\n            break;\n          }\n        case 2:\n          {\n            a = a > 0.0 ? a + -6.283185307179586 : a;\n            break;\n          }\n        default:\n\n      }\n      return +a;\n    }\n    function oc(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0.0,\n        d = 0.0,\n        f = 0.0,\n        g = 0.0;\n      f = +e[b >> 3];\n      d = +e[a >> 3];\n      g = +u(+((f - d) * .5));\n      c = +u(+((+e[b + 8 >> 3] - +e[a + 8 >> 3]) * .5));\n      c = g * g + c * (+t(+f) * +t(+d) * c);\n      return +(+z(+ +r(+c), + +r(+(1.0 - c))) * 2.0);\n    }\n    function pc(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0.0,\n        d = 0.0,\n        f = 0.0,\n        g = 0.0;\n      f = +e[b >> 3];\n      d = +e[a >> 3];\n      g = +u(+((f - d) * .5));\n      c = +u(+((+e[b + 8 >> 3] - +e[a + 8 >> 3]) * .5));\n      c = g * g + c * (+t(+f) * +t(+d) * c);\n      return +(+z(+ +r(+c), + +r(+(1.0 - c))) * 2.0 * 6371.007180918475);\n    }\n    function qc(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0.0,\n        d = 0.0,\n        f = 0.0,\n        g = 0.0;\n      f = +e[b >> 3];\n      d = +e[a >> 3];\n      g = +u(+((f - d) * .5));\n      c = +u(+((+e[b + 8 >> 3] - +e[a + 8 >> 3]) * .5));\n      c = g * g + c * (+t(+f) * +t(+d) * c);\n      return +(+z(+ +r(+c), + +r(+(1.0 - c))) * 2.0 * 6371.007180918475 * 1.0e3);\n    }\n    function rc(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0.0,\n        d = 0.0,\n        f = 0.0,\n        g = 0.0,\n        h = 0.0;\n      g = +e[b >> 3];\n      d = +t(+g);\n      f = +e[b + 8 >> 3] - +e[a + 8 >> 3];\n      h = d * +u(+f);\n      c = +e[a >> 3];\n      return + +z(+h, +(+u(+g) * +t(+c) - +t(+f) * (d * +u(+c))));\n    }\n    function sc(a, c, d, f) {\n      a = a | 0;\n      c = +c;\n      d = +d;\n      f = f | 0;\n      var g = 0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0;\n      if (d < 1.0e-16) {\n        b[f >> 2] = b[a >> 2];\n        b[f + 4 >> 2] = b[a + 4 >> 2];\n        b[f + 8 >> 2] = b[a + 8 >> 2];\n        b[f + 12 >> 2] = b[a + 12 >> 2];\n        return;\n      }\n      h = c < 0.0 ? c + 6.283185307179586 : c;\n      h = !(c >= 6.283185307179586) ? h : h + -6.283185307179586;\n      do { if (h < 1.0e-16) {\n        c = +e[a >> 3] + d;\n        e[f >> 3] = c;\n        g = f;\n      } else {\n        g = +q(+(h + -3.141592653589793)) < 1.0e-16;\n        c = +e[a >> 3];\n        if (g) {\n          c = c - d;\n          e[f >> 3] = c;\n          g = f;\n          break;\n        }\n        i = +t(+d);\n        d = +u(+d);\n        c = i * +u(+c) + +t(+h) * (d * +t(+c));\n        c = c > 1.0 ? 1.0 : c;\n        c = +x(+(c < -1.0 ? -1.0 : c));\n        e[f >> 3] = c;\n        if (+q(+(c + -1.5707963267948966)) < 1.0e-16) {\n          e[f >> 3] = 1.5707963267948966;\n          e[f + 8 >> 3] = 0.0;\n          return;\n        }\n        if (+q(+(c + 1.5707963267948966)) < 1.0e-16) {\n          e[f >> 3] = -1.5707963267948966;\n          e[f + 8 >> 3] = 0.0;\n          return;\n        }\n        j = 1.0 / +t(+c);\n        h = d * +u(+h) * j;\n        d = +e[a >> 3];\n        c = j * ((i - +u(+c) * +u(+d)) / +t(+d));\n        i = h > 1.0 ? 1.0 : h;\n        c = c > 1.0 ? 1.0 : c;\n        c = +e[a + 8 >> 3] + +z(+(i < -1.0 ? -1.0 : i), +(c < -1.0 ? -1.0 : c));\n        if (c > 3.141592653589793) { do { c = c + -6.283185307179586; } while (c > 3.141592653589793); }\n        if (c < -3.141592653589793) { do { c = c + 6.283185307179586; } while (c < -3.141592653589793); }\n        e[f + 8 >> 3] = c;\n        return;\n      } } while (0);\n      if (+q(+(c + -1.5707963267948966)) < 1.0e-16) {\n        e[g >> 3] = 1.5707963267948966;\n        e[f + 8 >> 3] = 0.0;\n        return;\n      }\n      if (+q(+(c + 1.5707963267948966)) < 1.0e-16) {\n        e[g >> 3] = -1.5707963267948966;\n        e[f + 8 >> 3] = 0.0;\n        return;\n      }\n      c = +e[a + 8 >> 3];\n      if (c > 3.141592653589793) { do { c = c + -6.283185307179586; } while (c > 3.141592653589793); }\n      if (c < -3.141592653589793) { do { c = c + 6.283185307179586; } while (c < -3.141592653589793); }\n      e[f + 8 >> 3] = c;\n      return;\n    }\n    function tc(a, b) {\n      a = a | 0;\n      b = b | 0;\n      if (a >>> 0 > 15) {\n        b = 4;\n        return b | 0;\n      }\n      e[b >> 3] = +e[20656 + (a << 3) >> 3];\n      b = 0;\n      return b | 0;\n    }\n    function uc(a, b) {\n      a = a | 0;\n      b = b | 0;\n      if (a >>> 0 > 15) {\n        b = 4;\n        return b | 0;\n      }\n      e[b >> 3] = +e[20784 + (a << 3) >> 3];\n      b = 0;\n      return b | 0;\n    }\n    function vc(a, b) {\n      a = a | 0;\n      b = b | 0;\n      if (a >>> 0 > 15) {\n        b = 4;\n        return b | 0;\n      }\n      e[b >> 3] = +e[20912 + (a << 3) >> 3];\n      b = 0;\n      return b | 0;\n    }\n    function wc(a, b) {\n      a = a | 0;\n      b = b | 0;\n      if (a >>> 0 > 15) {\n        b = 4;\n        return b | 0;\n      }\n      e[b >> 3] = +e[21040 + (a << 3) >> 3];\n      b = 0;\n      return b | 0;\n    }\n    function xc(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0;\n      if (a >>> 0 > 15) {\n        c = 4;\n        return c | 0;\n      }\n      d = Rc(7, 0, a, ((a | 0) < 0) << 31 >> 31) | 0;\n      d = Pd(d | 0, H() | 0, 120, 0) | 0;\n      a = H() | 0;\n      b[c >> 2] = d | 2;\n      b[c + 4 >> 2] = a;\n      c = 0;\n      return c | 0;\n    }\n    function yc(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      var d = 0.0,\n        f = 0.0,\n        g = 0.0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0,\n        m = 0.0,\n        n = 0.0;\n      n = +e[b >> 3];\n      l = +e[a >> 3];\n      j = +u(+((n - l) * .5));\n      g = +e[b + 8 >> 3];\n      k = +e[a + 8 >> 3];\n      h = +u(+((g - k) * .5));\n      i = +t(+l);\n      m = +t(+n);\n      h = j * j + h * (m * i * h);\n      h = +z(+ +r(+h), + +r(+(1.0 - h))) * 2.0;\n      j = +e[c >> 3];\n      n = +u(+((j - n) * .5));\n      d = +e[c + 8 >> 3];\n      g = +u(+((d - g) * .5));\n      f = +t(+j);\n      g = n * n + g * (m * f * g);\n      g = +z(+ +r(+g), + +r(+(1.0 - g))) * 2.0;\n      j = +u(+((l - j) * .5));\n      d = +u(+((k - d) * .5));\n      d = j * j + d * (i * f * d);\n      d = +z(+ +r(+d), + +r(+(1.0 - d))) * 2.0;\n      f = (h + g + d) * .5;\n      return +(+y(+ +r(+(+v(+(f * .5)) * +v(+((f - h) * .5)) * +v(+((f - g) * .5)) * +v(+((f - d) * .5))))) * 4.0);\n    }\n    function zc(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var f = 0.0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      j = T;\n      T = T + 192 | 0;\n      h = j + 168 | 0;\n      i = j;\n      g = ac(a, c, h) | 0;\n      if (g | 0) {\n        d = g;\n        T = j;\n        return d | 0;\n      }\n      if (bc(a, c, i) | 0) { I(27795, 27190, 415, 27199); }\n      c = b[i >> 2] | 0;\n      if ((c | 0) > 0) {\n        f = +yc(i + 8 | 0, i + 8 + (((c | 0) != 1 & 1) << 4) | 0, h) + 0.0;\n        if ((c | 0) != 1) {\n          a = 1;\n          do {\n            g = a;\n            a = a + 1 | 0;\n            f = f + +yc(i + 8 + (g << 4) | 0, i + 8 + (((a | 0) % (c | 0) | 0) << 4) | 0, h);\n          } while ((a | 0) < (c | 0));\n        }\n      } else { f = 0.0; }\n      e[d >> 3] = f;\n      d = 0;\n      T = j;\n      return d | 0;\n    }\n    function Ac(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      a = zc(a, b, c) | 0;\n      if (a | 0) { return a | 0; }\n      e[c >> 3] = +e[c >> 3] * 6371.007180918475 * 6371.007180918475;\n      return a | 0;\n    }\n    function Bc(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      a = zc(a, b, c) | 0;\n      if (a | 0) { return a | 0; }\n      e[c >> 3] = +e[c >> 3] * 6371.007180918475 * 6371.007180918475 * 1.0e3 * 1.0e3;\n      return a | 0;\n    }\n    function Cc(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var f = 0.0,\n        g = 0.0,\n        h = 0.0,\n        i = 0,\n        j = 0,\n        k = 0.0,\n        l = 0.0,\n        m = 0.0;\n      j = T;\n      T = T + 176 | 0;\n      i = j;\n      a = pb(a, c, i) | 0;\n      if (a | 0) {\n        i = a;\n        T = j;\n        return i | 0;\n      }\n      e[d >> 3] = 0.0;\n      a = b[i >> 2] | 0;\n      if ((a | 0) <= 1) {\n        i = 0;\n        T = j;\n        return i | 0;\n      }\n      c = a + -1 | 0;\n      a = 0;\n      f = +e[i + 8 >> 3];\n      g = +e[i + 16 >> 3];\n      h = 0.0;\n      do {\n        a = a + 1 | 0;\n        l = f;\n        f = +e[i + 8 + (a << 4) >> 3];\n        m = +u(+((f - l) * .5));\n        k = g;\n        g = +e[i + 8 + (a << 4) + 8 >> 3];\n        k = +u(+((g - k) * .5));\n        k = m * m + k * (+t(+f) * +t(+l) * k);\n        h = h + +z(+ +r(+k), + +r(+(1.0 - k))) * 2.0;\n      } while ((a | 0) < (c | 0));\n      e[d >> 3] = h;\n      i = 0;\n      T = j;\n      return i | 0;\n    }\n    function Dc(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var f = 0.0,\n        g = 0.0,\n        h = 0.0,\n        i = 0,\n        j = 0,\n        k = 0.0,\n        l = 0.0,\n        m = 0.0;\n      j = T;\n      T = T + 176 | 0;\n      i = j;\n      a = pb(a, c, i) | 0;\n      if (a | 0) {\n        i = a;\n        h = +e[d >> 3];\n        h = h * 6371.007180918475;\n        e[d >> 3] = h;\n        T = j;\n        return i | 0;\n      }\n      e[d >> 3] = 0.0;\n      a = b[i >> 2] | 0;\n      if ((a | 0) <= 1) {\n        i = 0;\n        h = 0.0;\n        h = h * 6371.007180918475;\n        e[d >> 3] = h;\n        T = j;\n        return i | 0;\n      }\n      c = a + -1 | 0;\n      a = 0;\n      f = +e[i + 8 >> 3];\n      g = +e[i + 16 >> 3];\n      h = 0.0;\n      do {\n        a = a + 1 | 0;\n        l = f;\n        f = +e[i + 8 + (a << 4) >> 3];\n        m = +u(+((f - l) * .5));\n        k = g;\n        g = +e[i + 8 + (a << 4) + 8 >> 3];\n        k = +u(+((g - k) * .5));\n        k = m * m + k * (+t(+l) * +t(+f) * k);\n        h = h + +z(+ +r(+k), + +r(+(1.0 - k))) * 2.0;\n      } while ((a | 0) != (c | 0));\n      e[d >> 3] = h;\n      i = 0;\n      m = h;\n      m = m * 6371.007180918475;\n      e[d >> 3] = m;\n      T = j;\n      return i | 0;\n    }\n    function Ec(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var f = 0.0,\n        g = 0.0,\n        h = 0.0,\n        i = 0,\n        j = 0,\n        k = 0.0,\n        l = 0.0,\n        m = 0.0;\n      j = T;\n      T = T + 176 | 0;\n      i = j;\n      a = pb(a, c, i) | 0;\n      if (a | 0) {\n        i = a;\n        h = +e[d >> 3];\n        h = h * 6371.007180918475;\n        h = h * 1.0e3;\n        e[d >> 3] = h;\n        T = j;\n        return i | 0;\n      }\n      e[d >> 3] = 0.0;\n      a = b[i >> 2] | 0;\n      if ((a | 0) <= 1) {\n        i = 0;\n        h = 0.0;\n        h = h * 6371.007180918475;\n        h = h * 1.0e3;\n        e[d >> 3] = h;\n        T = j;\n        return i | 0;\n      }\n      c = a + -1 | 0;\n      a = 0;\n      f = +e[i + 8 >> 3];\n      g = +e[i + 16 >> 3];\n      h = 0.0;\n      do {\n        a = a + 1 | 0;\n        l = f;\n        f = +e[i + 8 + (a << 4) >> 3];\n        m = +u(+((f - l) * .5));\n        k = g;\n        g = +e[i + 8 + (a << 4) + 8 >> 3];\n        k = +u(+((g - k) * .5));\n        k = m * m + k * (+t(+l) * +t(+f) * k);\n        h = h + +z(+ +r(+k), + +r(+(1.0 - k))) * 2.0;\n      } while ((a | 0) != (c | 0));\n      e[d >> 3] = h;\n      i = 0;\n      m = h;\n      m = m * 6371.007180918475;\n      m = m * 1.0e3;\n      e[d >> 3] = m;\n      T = j;\n      return i | 0;\n    }\n    function Fc(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0;\n      c = Id(1, 12) | 0;\n      if (!c) { I(27280, 27235, 49, 27293); }\n      d = a + 4 | 0;\n      e = b[d >> 2] | 0;\n      if (e | 0) {\n        e = e + 8 | 0;\n        b[e >> 2] = c;\n        b[d >> 2] = c;\n        return c | 0;\n      }\n      if (b[a >> 2] | 0) { I(27310, 27235, 61, 27333); }\n      e = a;\n      b[e >> 2] = c;\n      b[d >> 2] = c;\n      return c | 0;\n    }\n    function Gc(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0;\n      e = Gd(24) | 0;\n      if (!e) { I(27347, 27235, 78, 27361); }\n      b[e >> 2] = b[c >> 2];\n      b[e + 4 >> 2] = b[c + 4 >> 2];\n      b[e + 8 >> 2] = b[c + 8 >> 2];\n      b[e + 12 >> 2] = b[c + 12 >> 2];\n      b[e + 16 >> 2] = 0;\n      c = a + 4 | 0;\n      d = b[c >> 2] | 0;\n      if (d | 0) {\n        b[d + 16 >> 2] = e;\n        b[c >> 2] = e;\n        return e | 0;\n      }\n      if (b[a >> 2] | 0) { I(27376, 27235, 82, 27361); }\n      b[a >> 2] = e;\n      b[c >> 2] = e;\n      return e | 0;\n    }\n    function Hc(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0;\n      if (!a) { return; }\n      e = 1;\n      while (1) {\n        c = b[a >> 2] | 0;\n        if (c | 0) { do {\n          d = b[c >> 2] | 0;\n          if (d | 0) { do {\n            f = d;\n            d = b[d + 16 >> 2] | 0;\n            Hd(f);\n          } while ((d | 0) != 0); }\n          f = c;\n          c = b[c + 8 >> 2] | 0;\n          Hd(f);\n        } while ((c | 0) != 0); }\n        c = a;\n        a = b[a + 8 >> 2] | 0;\n        if (!e) { Hd(c); }\n        if (!a) { break; }else { e = 0; }\n      }\n      return;\n    }\n    function Ic(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        f = 0,\n        g = 0,\n        h = 0.0,\n        i = 0,\n        j = 0.0,\n        k = 0.0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        r = 0,\n        s = 0.0,\n        t = 0.0,\n        u = 0.0,\n        v = 0.0,\n        w = 0.0,\n        x = 0.0,\n        y = 0,\n        z = 0,\n        A = 0,\n        B = 0,\n        C = 0,\n        D = 0,\n        E = 0,\n        F = 0,\n        G = 0,\n        H = 0,\n        J = 0,\n        K = 0;\n      g = a + 8 | 0;\n      if (b[g >> 2] | 0) {\n        K = 1;\n        return K | 0;\n      }\n      f = b[a >> 2] | 0;\n      if (!f) {\n        K = 0;\n        return K | 0;\n      }\n      c = f;\n      d = 0;\n      do {\n        d = d + 1 | 0;\n        c = b[c + 8 >> 2] | 0;\n      } while ((c | 0) != 0);\n      if (d >>> 0 < 2) {\n        K = 0;\n        return K | 0;\n      }\n      H = Gd(d << 2) | 0;\n      if (!H) { I(27396, 27235, 317, 27415); }\n      G = Gd(d << 5) | 0;\n      if (!G) { I(27437, 27235, 321, 27415); }\n      b[a >> 2] = 0;\n      z = a + 4 | 0;\n      b[z >> 2] = 0;\n      b[g >> 2] = 0;\n      d = 0;\n      F = 0;\n      y = 0;\n      n = 0;\n      a: while (1) {\n        m = b[f >> 2] | 0;\n        if (m) {\n          h = 0.0;\n          i = m;\n          do {\n            k = +e[i + 8 >> 3];\n            c = i;\n            i = b[i + 16 >> 2] | 0;\n            l = (i | 0) == 0;\n            g = l ? m : i;\n            j = +e[g + 8 >> 3];\n            if (+q(+(k - j)) > 3.141592653589793) {\n              K = 14;\n              break;\n            }\n            h = h + (j - k) * (+e[c >> 3] + +e[g >> 3]);\n          } while (!l);\n          if ((K | 0) == 14) {\n            K = 0;\n            h = 0.0;\n            c = m;\n            do {\n              x = +e[c + 8 >> 3];\n              E = c + 16 | 0;\n              D = b[E >> 2] | 0;\n              D = (D | 0) == 0 ? m : D;\n              w = +e[D + 8 >> 3];\n              h = h + (+e[c >> 3] + +e[D >> 3]) * ((w < 0.0 ? w + 6.283185307179586 : w) - (x < 0.0 ? x + 6.283185307179586 : x));\n              c = b[((c | 0) == 0 ? f : E) >> 2] | 0;\n            } while ((c | 0) != 0);\n          }\n          if (h > 0.0) {\n            b[H + (F << 2) >> 2] = f;\n            F = F + 1 | 0;\n            g = y;\n            c = n;\n          } else { K = 19; }\n        } else { K = 19; }\n        if ((K | 0) == 19) {\n          K = 0;\n          do { if (!d) {\n            if (!n) {\n              if (!(b[a >> 2] | 0)) {\n                g = z;\n                i = a;\n                c = f;\n                d = a;\n                break;\n              } else {\n                K = 27;\n                break a;\n              }\n            } else {\n              g = z;\n              i = n + 8 | 0;\n              c = f;\n              d = a;\n              break;\n            }\n          } else {\n            c = d + 8 | 0;\n            if (b[c >> 2] | 0) {\n              K = 21;\n              break a;\n            }\n            d = Id(1, 12) | 0;\n            if (!d) {\n              K = 23;\n              break a;\n            }\n            b[c >> 2] = d;\n            g = d + 4 | 0;\n            i = d;\n            c = n;\n          } } while (0);\n          b[i >> 2] = f;\n          b[g >> 2] = f;\n          i = G + (y << 5) | 0;\n          l = b[f >> 2] | 0;\n          if (l) {\n            m = G + (y << 5) + 8 | 0;\n            e[m >> 3] = 1797693134862315708145274.0e284;\n            n = G + (y << 5) + 24 | 0;\n            e[n >> 3] = 1797693134862315708145274.0e284;\n            e[i >> 3] = -1797693134862315708145274.0e284;\n            o = G + (y << 5) + 16 | 0;\n            e[o >> 3] = -1797693134862315708145274.0e284;\n            u = 1797693134862315708145274.0e284;\n            v = -1797693134862315708145274.0e284;\n            g = 0;\n            p = l;\n            k = 1797693134862315708145274.0e284;\n            s = 1797693134862315708145274.0e284;\n            t = -1797693134862315708145274.0e284;\n            j = -1797693134862315708145274.0e284;\n            while (1) {\n              h = +e[p >> 3];\n              x = +e[p + 8 >> 3];\n              p = b[p + 16 >> 2] | 0;\n              r = (p | 0) == 0;\n              w = +e[(r ? l : p) + 8 >> 3];\n              if (h < k) {\n                e[m >> 3] = h;\n                k = h;\n              }\n              if (x < s) {\n                e[n >> 3] = x;\n                s = x;\n              }\n              if (h > t) { e[i >> 3] = h; }else { h = t; }\n              if (x > j) {\n                e[o >> 3] = x;\n                j = x;\n              }\n              u = x > 0.0 & x < u ? x : u;\n              v = x < 0.0 & x > v ? x : v;\n              g = g | +q(+(x - w)) > 3.141592653589793;\n              if (r) { break; }else { t = h; }\n            }\n            if (g) {\n              e[o >> 3] = v;\n              e[n >> 3] = u;\n            }\n          } else {\n            b[i >> 2] = 0;\n            b[i + 4 >> 2] = 0;\n            b[i + 8 >> 2] = 0;\n            b[i + 12 >> 2] = 0;\n            b[i + 16 >> 2] = 0;\n            b[i + 20 >> 2] = 0;\n            b[i + 24 >> 2] = 0;\n            b[i + 28 >> 2] = 0;\n          }\n          g = y + 1 | 0;\n        }\n        E = f + 8 | 0;\n        f = b[E >> 2] | 0;\n        b[E >> 2] = 0;\n        if (!f) {\n          K = 45;\n          break;\n        } else {\n          y = g;\n          n = c;\n        }\n      }\n      if ((K | 0) == 21) { I(27213, 27235, 35, 27247); }else if ((K | 0) == 23) { I(27267, 27235, 37, 27247); }else if ((K | 0) == 27) { I(27310, 27235, 61, 27333); }else if ((K | 0) == 45) {\n        b: do { if ((F | 0) > 0) {\n          E = (g | 0) == 0;\n          C = g << 2;\n          D = (a | 0) == 0;\n          B = 0;\n          c = 0;\n          while (1) {\n            A = b[H + (B << 2) >> 2] | 0;\n            if (!E) {\n              y = Gd(C) | 0;\n              if (!y) {\n                K = 50;\n                break;\n              }\n              z = Gd(C) | 0;\n              if (!z) {\n                K = 52;\n                break;\n              }\n              c: do { if (!D) {\n                g = 0;\n                d = 0;\n                i = a;\n                while (1) {\n                  f = G + (g << 5) | 0;\n                  if (Jc(b[i >> 2] | 0, f, b[A >> 2] | 0) | 0) {\n                    b[y + (d << 2) >> 2] = i;\n                    b[z + (d << 2) >> 2] = f;\n                    r = d + 1 | 0;\n                  } else { r = d; }\n                  i = b[i + 8 >> 2] | 0;\n                  if (!i) { break; }else {\n                    g = g + 1 | 0;\n                    d = r;\n                  }\n                }\n                if ((r | 0) > 0) {\n                  f = b[y >> 2] | 0;\n                  if ((r | 0) == 1) { d = f; }else {\n                    o = 0;\n                    p = -1;\n                    d = f;\n                    n = f;\n                    while (1) {\n                      l = b[n >> 2] | 0;\n                      f = 0;\n                      i = 0;\n                      while (1) {\n                        g = b[b[y + (i << 2) >> 2] >> 2] | 0;\n                        if ((g | 0) == (l | 0)) { m = f; }else { m = f + ((Jc(g, b[z + (i << 2) >> 2] | 0, b[l >> 2] | 0) | 0) & 1) | 0; }\n                        i = i + 1 | 0;\n                        if ((i | 0) == (r | 0)) { break; }else { f = m; }\n                      }\n                      g = (m | 0) > (p | 0);\n                      d = g ? n : d;\n                      f = o + 1 | 0;\n                      if ((f | 0) == (r | 0)) { break c; }\n                      o = f;\n                      p = g ? m : p;\n                      n = b[y + (f << 2) >> 2] | 0;\n                    }\n                  }\n                } else { d = 0; }\n              } else { d = 0; } } while (0);\n              Hd(y);\n              Hd(z);\n              if (d) {\n                g = d + 4 | 0;\n                f = b[g >> 2] | 0;\n                if (!f) {\n                  if (b[d >> 2] | 0) {\n                    K = 70;\n                    break;\n                  }\n                } else { d = f + 8 | 0; }\n                b[d >> 2] = A;\n                b[g >> 2] = A;\n              } else { K = 73; }\n            } else { K = 73; }\n            if ((K | 0) == 73) {\n              K = 0;\n              c = b[A >> 2] | 0;\n              if (c | 0) { do {\n                z = c;\n                c = b[c + 16 >> 2] | 0;\n                Hd(z);\n              } while ((c | 0) != 0); }\n              Hd(A);\n              c = 1;\n            }\n            B = B + 1 | 0;\n            if ((B | 0) >= (F | 0)) {\n              J = c;\n              break b;\n            }\n          }\n          if ((K | 0) == 50) { I(27452, 27235, 249, 27471); }else if ((K | 0) == 52) { I(27490, 27235, 252, 27471); }else if ((K | 0) == 70) { I(27310, 27235, 61, 27333); }\n        } else { J = 0; } } while (0);\n        Hd(H);\n        Hd(G);\n        K = J;\n        return K | 0;\n      }\n      return 0;\n    }\n    function Jc(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var f = 0.0,\n        g = 0.0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0,\n        m = 0;\n      if (!(Ca(c, d) | 0)) {\n        a = 0;\n        return a | 0;\n      }\n      c = Aa(c) | 0;\n      f = +e[d >> 3];\n      g = +e[d + 8 >> 3];\n      g = c & g < 0.0 ? g + 6.283185307179586 : g;\n      a = b[a >> 2] | 0;\n      if (!a) {\n        a = 0;\n        return a | 0;\n      }\n      if (c) {\n        c = 0;\n        l = g;\n        d = a;\n        a: while (1) {\n          while (1) {\n            i = +e[d >> 3];\n            g = +e[d + 8 >> 3];\n            d = d + 16 | 0;\n            m = b[d >> 2] | 0;\n            m = (m | 0) == 0 ? a : m;\n            h = +e[m >> 3];\n            j = +e[m + 8 >> 3];\n            if (i > h) {\n              k = i;\n              i = j;\n            } else {\n              k = h;\n              h = i;\n              i = g;\n              g = j;\n            }\n            f = f == h | f == k ? f + 2.220446049250313e-16 : f;\n            if (!(f < h | f > k)) { break; }\n            d = b[d >> 2] | 0;\n            if (!d) {\n              d = 22;\n              break a;\n            }\n          }\n          j = i < 0.0 ? i + 6.283185307179586 : i;\n          i = g < 0.0 ? g + 6.283185307179586 : g;\n          l = j == l | i == l ? l + -2.220446049250313e-16 : l;\n          k = j + (i - j) * ((f - h) / (k - h));\n          if ((k < 0.0 ? k + 6.283185307179586 : k) > l) { c = c ^ 1; }\n          d = b[d >> 2] | 0;\n          if (!d) {\n            d = 22;\n            break;\n          }\n        }\n        if ((d | 0) == 22) { return c | 0; }\n      } else {\n        c = 0;\n        l = g;\n        d = a;\n        b: while (1) {\n          while (1) {\n            i = +e[d >> 3];\n            g = +e[d + 8 >> 3];\n            d = d + 16 | 0;\n            m = b[d >> 2] | 0;\n            m = (m | 0) == 0 ? a : m;\n            h = +e[m >> 3];\n            j = +e[m + 8 >> 3];\n            if (i > h) {\n              k = i;\n              i = j;\n            } else {\n              k = h;\n              h = i;\n              i = g;\n              g = j;\n            }\n            f = f == h | f == k ? f + 2.220446049250313e-16 : f;\n            if (!(f < h | f > k)) { break; }\n            d = b[d >> 2] | 0;\n            if (!d) {\n              d = 22;\n              break b;\n            }\n          }\n          l = i == l | g == l ? l + -2.220446049250313e-16 : l;\n          if (i + (g - i) * ((f - h) / (k - h)) > l) { c = c ^ 1; }\n          d = b[d >> 2] | 0;\n          if (!d) {\n            d = 22;\n            break;\n          }\n        }\n        if ((d | 0) == 22) { return c | 0; }\n      }\n      return 0;\n    }\n    function Kc(c, d, e, f, g) {\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      g = g | 0;\n      var h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0;\n      u = T;\n      T = T + 32 | 0;\n      t = u + 16 | 0;\n      s = u;\n      h = Td(c | 0, d | 0, 52) | 0;\n      H() | 0;\n      h = h & 15;\n      p = Td(e | 0, f | 0, 52) | 0;\n      H() | 0;\n      if ((h | 0) != (p & 15 | 0)) {\n        t = 12;\n        T = u;\n        return t | 0;\n      }\n      l = Td(c | 0, d | 0, 45) | 0;\n      H() | 0;\n      l = l & 127;\n      m = Td(e | 0, f | 0, 45) | 0;\n      H() | 0;\n      m = m & 127;\n      if (l >>> 0 > 121 | m >>> 0 > 121) {\n        t = 5;\n        T = u;\n        return t | 0;\n      }\n      p = (l | 0) != (m | 0);\n      if (p) {\n        j = wa(l, m) | 0;\n        if ((j | 0) == 7) {\n          t = 1;\n          T = u;\n          return t | 0;\n        }\n        k = wa(m, l) | 0;\n        if ((k | 0) == 7) { I(27514, 27538, 161, 27548); }else {\n          q = j;\n          i = k;\n        }\n      } else {\n        q = 0;\n        i = 0;\n      }\n      n = oa(l) | 0;\n      o = oa(m) | 0;\n      b[t >> 2] = 0;\n      b[t + 4 >> 2] = 0;\n      b[t + 8 >> 2] = 0;\n      b[t + 12 >> 2] = 0;\n      do { if (!q) {\n        _b(e, f, t) | 0;\n        if ((n | 0) != 0 & (o | 0) != 0) {\n          if ((m | 0) != (l | 0)) { I(27621, 27538, 261, 27548); }\n          i = Sb(c, d) | 0;\n          h = Sb(e, f) | 0;\n          if (!((i | 0) == 7 | (h | 0) == 7)) {\n            if (!(a[22e3 + (i * 7 | 0) + h >> 0] | 0)) {\n              i = b[21168 + (i * 28 | 0) + (h << 2) >> 2] | 0;\n              if ((i | 0) > 0) {\n                j = t + 4 | 0;\n                h = 0;\n                do {\n                  _a(j);\n                  h = h + 1 | 0;\n                } while ((h | 0) != (i | 0));\n                r = 51;\n              } else { r = 51; }\n            } else { h = 1; }\n          } else { h = 5; }\n        } else { r = 51; }\n      } else {\n        m = b[4272 + (l * 28 | 0) + (q << 2) >> 2] | 0;\n        j = (m | 0) > 0;\n        if (!o) {\n          if (j) {\n            l = 0;\n            k = e;\n            j = f;\n            do {\n              k = Wb(k, j) | 0;\n              j = H() | 0;\n              i = ab(i) | 0;\n              l = l + 1 | 0;\n            } while ((l | 0) != (m | 0));\n            m = i;\n            l = k;\n            k = j;\n          } else {\n            m = i;\n            l = e;\n            k = f;\n          }\n        } else if (j) {\n          l = 0;\n          k = e;\n          j = f;\n          do {\n            k = Vb(k, j) | 0;\n            j = H() | 0;\n            i = ab(i) | 0;\n            if ((i | 0) == 1) { i = ab(1) | 0; }\n            l = l + 1 | 0;\n          } while ((l | 0) != (m | 0));\n          m = i;\n          l = k;\n          k = j;\n        } else {\n          m = i;\n          l = e;\n          k = f;\n        }\n        _b(l, k, t) | 0;\n        if (!p) { I(27563, 27538, 191, 27548); }\n        j = (n | 0) != 0;\n        i = (o | 0) != 0;\n        if (j & i) { I(27590, 27538, 192, 27548); }\n        if (!j) {\n          if (i) {\n            i = Sb(l, k) | 0;\n            if ((i | 0) == 7) {\n              h = 5;\n              break;\n            }\n            if (a[22e3 + (i * 7 | 0) + m >> 0] | 0) {\n              h = 1;\n              break;\n            }\n            l = 0;\n            k = b[21168 + (m * 28 | 0) + (i << 2) >> 2] | 0;\n          } else {\n            l = 0;\n            k = 0;\n          }\n        } else {\n          i = Sb(c, d) | 0;\n          if ((i | 0) == 7) {\n            h = 5;\n            break;\n          }\n          if (a[22e3 + (i * 7 | 0) + q >> 0] | 0) {\n            h = 1;\n            break;\n          }\n          k = b[21168 + (i * 28 | 0) + (q << 2) >> 2] | 0;\n          l = k;\n        }\n        if ((l | k | 0) < 0) { h = 5; }else {\n          if ((k | 0) > 0) {\n            j = t + 4 | 0;\n            i = 0;\n            do {\n              _a(j);\n              i = i + 1 | 0;\n            } while ((i | 0) != (k | 0));\n          }\n          b[s >> 2] = 0;\n          b[s + 4 >> 2] = 0;\n          b[s + 8 >> 2] = 0;\n          Ya(s, q);\n          if (h | 0) { while (1) {\n            if (!(Yb(h) | 0)) { Xa(s); }else { Wa(s); }\n            if ((h | 0) > 1) { h = h + -1 | 0; }else { break; }\n          } }\n          if ((l | 0) > 0) {\n            h = 0;\n            do {\n              _a(s);\n              h = h + 1 | 0;\n            } while ((h | 0) != (l | 0));\n          }\n          r = t + 4 | 0;\n          Oa(r, s, r);\n          Ma(r);\n          r = 51;\n        }\n      } } while (0);\n      if ((r | 0) == 51) {\n        h = t + 4 | 0;\n        b[g >> 2] = b[h >> 2];\n        b[g + 4 >> 2] = b[h + 4 >> 2];\n        b[g + 8 >> 2] = b[h + 8 >> 2];\n        h = 0;\n      }\n      t = h;\n      T = u;\n      return t | 0;\n    }\n    function Lc(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0;\n      q = T;\n      T = T + 48 | 0;\n      k = q + 36 | 0;\n      h = q + 24 | 0;\n      i = q + 12 | 0;\n      j = q;\n      f = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      f = f & 15;\n      n = Td(a | 0, c | 0, 45) | 0;\n      H() | 0;\n      n = n & 127;\n      if (n >>> 0 > 121) {\n        e = 5;\n        T = q;\n        return e | 0;\n      }\n      l = oa(n) | 0;\n      Ud(f | 0, 0, 52) | 0;\n      r = H() | 0 | 134225919;\n      g = e;\n      b[g >> 2] = -1;\n      b[g + 4 >> 2] = r;\n      if (!f) {\n        f = Ra(d) | 0;\n        if ((f | 0) == 7) {\n          r = 1;\n          T = q;\n          return r | 0;\n        }\n        f = va(n, f) | 0;\n        if ((f | 0) == 127) {\n          r = 1;\n          T = q;\n          return r | 0;\n        }\n        o = Ud(f | 0, 0, 45) | 0;\n        p = H() | 0;\n        n = e;\n        p = b[n + 4 >> 2] & -1040385 | p;\n        r = e;\n        b[r >> 2] = b[n >> 2] | o;\n        b[r + 4 >> 2] = p;\n        r = 0;\n        T = q;\n        return r | 0;\n      }\n      b[k >> 2] = b[d >> 2];\n      b[k + 4 >> 2] = b[d + 4 >> 2];\n      b[k + 8 >> 2] = b[d + 8 >> 2];\n      d = f;\n      while (1) {\n        g = d;\n        d = d + -1 | 0;\n        b[h >> 2] = b[k >> 2];\n        b[h + 4 >> 2] = b[k + 4 >> 2];\n        b[h + 8 >> 2] = b[k + 8 >> 2];\n        if (!(Yb(g) | 0)) {\n          f = Ta(k) | 0;\n          if (f | 0) {\n            d = 13;\n            break;\n          }\n          b[i >> 2] = b[k >> 2];\n          b[i + 4 >> 2] = b[k + 4 >> 2];\n          b[i + 8 >> 2] = b[k + 8 >> 2];\n          Xa(i);\n        } else {\n          f = Sa(k) | 0;\n          if (f | 0) {\n            d = 13;\n            break;\n          }\n          b[i >> 2] = b[k >> 2];\n          b[i + 4 >> 2] = b[k + 4 >> 2];\n          b[i + 8 >> 2] = b[k + 8 >> 2];\n          Wa(i);\n        }\n        Pa(h, i, j);\n        Ma(j);\n        f = e;\n        t = b[f >> 2] | 0;\n        f = b[f + 4 >> 2] | 0;\n        u = (15 - g | 0) * 3 | 0;\n        s = Ud(7, 0, u | 0) | 0;\n        f = f & ~(H() | 0);\n        u = Ud(Ra(j) | 0, 0, u | 0) | 0;\n        f = H() | 0 | f;\n        r = e;\n        b[r >> 2] = u | t & ~s;\n        b[r + 4 >> 2] = f;\n        if ((g | 0) <= 1) {\n          d = 14;\n          break;\n        }\n      }\n      a: do { if ((d | 0) != 13) { if ((d | 0) == 14) { if (((b[k >> 2] | 0) <= 1 ? (b[k + 4 >> 2] | 0) <= 1 : 0) ? (b[k + 8 >> 2] | 0) <= 1 : 0) {\n        d = Ra(k) | 0;\n        f = va(n, d) | 0;\n        if ((f | 0) == 127) { j = 0; }else { j = oa(f) | 0; }\n        b: do { if (!d) {\n          if ((l | 0) != 0 & (j | 0) != 0) {\n            d = Sb(a, c) | 0;\n            g = e;\n            g = Sb(b[g >> 2] | 0, b[g + 4 >> 2] | 0) | 0;\n            if ((d | 0) == 7 | (g | 0) == 7) {\n              f = 5;\n              break a;\n            }\n            g = b[21376 + (d * 28 | 0) + (g << 2) >> 2] | 0;\n            if ((g | 0) < 0) {\n              f = 5;\n              break a;\n            }\n            if (!g) { d = 59; }else {\n              i = e;\n              d = 0;\n              h = b[i >> 2] | 0;\n              i = b[i + 4 >> 2] | 0;\n              do {\n                h = Ub(h, i) | 0;\n                i = H() | 0;\n                u = e;\n                b[u >> 2] = h;\n                b[u + 4 >> 2] = i;\n                d = d + 1 | 0;\n              } while ((d | 0) < (g | 0));\n              d = 58;\n            }\n          } else { d = 58; }\n        } else {\n          if (l) {\n            f = Sb(a, c) | 0;\n            if ((f | 0) == 7) {\n              f = 5;\n              break a;\n            }\n            g = b[21376 + (f * 28 | 0) + (d << 2) >> 2] | 0;\n            if ((g | 0) > 0) {\n              f = d;\n              d = 0;\n              do {\n                f = $a(f) | 0;\n                d = d + 1 | 0;\n              } while ((d | 0) != (g | 0));\n            } else { f = d; }\n            if ((f | 0) == 1) {\n              f = 9;\n              break a;\n            }\n            d = va(n, f) | 0;\n            if ((d | 0) == 127) { I(27648, 27538, 411, 27678); }\n            if (!(oa(d) | 0)) {\n              p = d;\n              o = g;\n              m = f;\n            } else { I(27693, 27538, 412, 27678); }\n          } else {\n            p = f;\n            o = 0;\n            m = d;\n          }\n          i = b[4272 + (n * 28 | 0) + (m << 2) >> 2] | 0;\n          if ((i | 0) <= -1) { I(27724, 27538, 419, 27678); }\n          if (!j) {\n            if ((o | 0) < 0) {\n              f = 5;\n              break a;\n            }\n            if (o | 0) {\n              g = e;\n              f = 0;\n              d = b[g >> 2] | 0;\n              g = b[g + 4 >> 2] | 0;\n              do {\n                d = Ub(d, g) | 0;\n                g = H() | 0;\n                u = e;\n                b[u >> 2] = d;\n                b[u + 4 >> 2] = g;\n                f = f + 1 | 0;\n              } while ((f | 0) < (o | 0));\n            }\n            if ((i | 0) <= 0) {\n              f = p;\n              d = 58;\n              break;\n            }\n            g = e;\n            f = 0;\n            d = b[g >> 2] | 0;\n            g = b[g + 4 >> 2] | 0;\n            while (1) {\n              d = Ub(d, g) | 0;\n              g = H() | 0;\n              u = e;\n              b[u >> 2] = d;\n              b[u + 4 >> 2] = g;\n              f = f + 1 | 0;\n              if ((f | 0) == (i | 0)) {\n                f = p;\n                d = 58;\n                break b;\n              }\n            }\n          }\n          h = wa(p, n) | 0;\n          if ((h | 0) == 7) { I(27514, 27538, 428, 27678); }\n          f = e;\n          d = b[f >> 2] | 0;\n          f = b[f + 4 >> 2] | 0;\n          if ((i | 0) > 0) {\n            g = 0;\n            do {\n              d = Ub(d, f) | 0;\n              f = H() | 0;\n              u = e;\n              b[u >> 2] = d;\n              b[u + 4 >> 2] = f;\n              g = g + 1 | 0;\n            } while ((g | 0) != (i | 0));\n          }\n          f = Sb(d, f) | 0;\n          if ((f | 0) == 7) { I(27795, 27538, 440, 27678); }\n          d = pa(p) | 0;\n          d = b[(d ? 21792 : 21584) + (h * 28 | 0) + (f << 2) >> 2] | 0;\n          if ((d | 0) < 0) { I(27795, 27538, 454, 27678); }\n          if (!d) {\n            f = p;\n            d = 58;\n          } else {\n            h = e;\n            f = 0;\n            g = b[h >> 2] | 0;\n            h = b[h + 4 >> 2] | 0;\n            do {\n              g = Tb(g, h) | 0;\n              h = H() | 0;\n              u = e;\n              b[u >> 2] = g;\n              b[u + 4 >> 2] = h;\n              f = f + 1 | 0;\n            } while ((f | 0) < (d | 0));\n            f = p;\n            d = 58;\n          }\n        } } while (0);\n        if ((d | 0) == 58) { if (j) { d = 59; } }\n        if ((d | 0) == 59) {\n          u = e;\n          if ((Sb(b[u >> 2] | 0, b[u + 4 >> 2] | 0) | 0) == 1) {\n            f = 9;\n            break;\n          }\n        }\n        u = e;\n        s = b[u >> 2] | 0;\n        u = b[u + 4 >> 2] & -1040385;\n        t = Ud(f | 0, 0, 45) | 0;\n        u = u | (H() | 0);\n        f = e;\n        b[f >> 2] = s | t;\n        b[f + 4 >> 2] = u;\n        f = 0;\n      } else { f = 1; } } } } while (0);\n      u = f;\n      T = q;\n      return u | 0;\n    }\n    function Mc(a, b, c, d, e, f) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0;\n      h = T;\n      T = T + 16 | 0;\n      g = h;\n      if (!e) {\n        a = Kc(a, b, c, d, g) | 0;\n        if (!a) {\n          eb(g, f);\n          a = 0;\n        }\n      } else { a = 15; }\n      T = h;\n      return a | 0;\n    }\n    function Nc(a, b, c, d, e) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0;\n      g = T;\n      T = T + 16 | 0;\n      f = g;\n      if (!d) {\n        c = fb(c, f) | 0;\n        if (!c) { c = Lc(a, b, f, e) | 0; }\n      } else { c = 15; }\n      T = g;\n      return c | 0;\n    }\n    function Oc(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      j = T;\n      T = T + 32 | 0;\n      h = j + 12 | 0;\n      i = j;\n      g = Kc(a, c, a, c, h) | 0;\n      if (g | 0) {\n        i = g;\n        T = j;\n        return i | 0;\n      }\n      a = Kc(a, c, d, e, i) | 0;\n      if (a | 0) {\n        i = a;\n        T = j;\n        return i | 0;\n      }\n      h = db(h, i) | 0;\n      i = f;\n      b[i >> 2] = h;\n      b[i + 4 >> 2] = ((h | 0) < 0) << 31 >> 31;\n      i = 0;\n      T = j;\n      return i | 0;\n    }\n    function Pc(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      j = T;\n      T = T + 32 | 0;\n      h = j + 12 | 0;\n      i = j;\n      g = Kc(a, c, a, c, h) | 0;\n      if (!g) {\n        g = Kc(a, c, d, e, i) | 0;\n        if (!g) {\n          e = db(h, i) | 0;\n          e = Jd(e | 0, ((e | 0) < 0) << 31 >> 31 | 0, 1, 0) | 0;\n          h = H() | 0;\n          i = f;\n          b[i >> 2] = e;\n          b[i + 4 >> 2] = h;\n          i = 0;\n          T = j;\n          return i | 0;\n        }\n      }\n      i = g;\n      T = j;\n      return i | 0;\n    }\n    function Qc(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0.0,\n        j = 0.0,\n        k = 0,\n        l = 0.0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        r = 0.0,\n        s = 0,\n        t = 0.0,\n        u = 0,\n        v = 0,\n        w = 0,\n        x = 0,\n        y = 0,\n        z = 0,\n        A = 0.0;\n      z = T;\n      T = T + 48 | 0;\n      x = z + 24 | 0;\n      h = z + 12 | 0;\n      y = z;\n      g = Kc(a, c, a, c, x) | 0;\n      if (!g) {\n        g = Kc(a, c, d, e, h) | 0;\n        if (!g) {\n          v = db(x, h) | 0;\n          w = ((v | 0) < 0) << 31 >> 31;\n          b[x >> 2] = 0;\n          b[x + 4 >> 2] = 0;\n          b[x + 8 >> 2] = 0;\n          b[h >> 2] = 0;\n          b[h + 4 >> 2] = 0;\n          b[h + 8 >> 2] = 0;\n          if (Kc(a, c, a, c, x) | 0) { I(27795, 27538, 692, 27747); }\n          if (Kc(a, c, d, e, h) | 0) { I(27795, 27538, 697, 27747); }\n          gb(x);\n          gb(h);\n          l = (v | 0) == 0 ? 0.0 : 1.0 / +(v | 0);\n          d = b[x >> 2] | 0;\n          r = l * +((b[h >> 2] | 0) - d | 0);\n          s = x + 4 | 0;\n          e = b[s >> 2] | 0;\n          t = l * +((b[h + 4 >> 2] | 0) - e | 0);\n          u = x + 8 | 0;\n          g = b[u >> 2] | 0;\n          l = l * +((b[h + 8 >> 2] | 0) - g | 0);\n          b[y >> 2] = d;\n          m = y + 4 | 0;\n          b[m >> 2] = e;\n          n = y + 8 | 0;\n          b[n >> 2] = g;\n          a: do { if ((v | 0) < 0) { g = 0; }else {\n            o = 0;\n            p = 0;\n            while (1) {\n              j = +(p >>> 0) + 4294967296.0 * +(o | 0);\n              A = r * j + +(d | 0);\n              i = t * j + +(e | 0);\n              j = l * j + +(g | 0);\n              d = ~~+Yd(+A);\n              h = ~~+Yd(+i);\n              g = ~~+Yd(+j);\n              A = +q(+(+(d | 0) - A));\n              i = +q(+(+(h | 0) - i));\n              j = +q(+(+(g | 0) - j));\n              do { if (!(A > i & A > j)) {\n                k = 0 - d | 0;\n                if (i > j) {\n                  e = k - g | 0;\n                  break;\n                } else {\n                  e = h;\n                  g = k - h | 0;\n                  break;\n                }\n              } else {\n                d = 0 - (h + g) | 0;\n                e = h;\n              } } while (0);\n              b[y >> 2] = d;\n              b[m >> 2] = e;\n              b[n >> 2] = g;\n              hb(y);\n              g = Lc(a, c, y, f + (p << 3) | 0) | 0;\n              if (g | 0) { break a; }\n              if (!((o | 0) < (w | 0) | (o | 0) == (w | 0) & p >>> 0 < v >>> 0)) {\n                g = 0;\n                break a;\n              }\n              d = Jd(p | 0, o | 0, 1, 0) | 0;\n              e = H() | 0;\n              o = e;\n              p = d;\n              d = b[x >> 2] | 0;\n              e = b[s >> 2] | 0;\n              g = b[u >> 2] | 0;\n            }\n          } } while (0);\n          y = g;\n          T = z;\n          return y | 0;\n        }\n      }\n      y = g;\n      T = z;\n      return y | 0;\n    }\n    function Rc(a, b, c, d) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0;\n      if ((c | 0) == 0 & (d | 0) == 0) {\n        e = 0;\n        f = 1;\n        G(e | 0);\n        return f | 0;\n      }\n      f = a;\n      e = b;\n      a = 1;\n      b = 0;\n      do {\n        g = (c & 1 | 0) == 0 & 0 == 0;\n        a = Pd((g ? 1 : f) | 0, (g ? 0 : e) | 0, a | 0, b | 0) | 0;\n        b = H() | 0;\n        c = Sd(c | 0, d | 0, 1) | 0;\n        d = H() | 0;\n        f = Pd(f | 0, e | 0, f | 0, e | 0) | 0;\n        e = H() | 0;\n      } while (!((c | 0) == 0 & (d | 0) == 0));\n      G(b | 0);\n      return a | 0;\n    }\n    function Sc(a, c, d, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0.0,\n        l = 0.0,\n        m = 0.0;\n      j = T;\n      T = T + 16 | 0;\n      h = j;\n      i = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      i = i & 15;\n      do { if (!i) {\n        g = Td(a | 0, c | 0, 45) | 0;\n        H() | 0;\n        g = g & 127;\n        if (g >>> 0 > 121) {\n          i = 5;\n          T = j;\n          return i | 0;\n        } else {\n          h = 22064 + (g << 5) | 0;\n          b[d >> 2] = b[h >> 2];\n          b[d + 4 >> 2] = b[h + 4 >> 2];\n          b[d + 8 >> 2] = b[h + 8 >> 2];\n          b[d + 12 >> 2] = b[h + 12 >> 2];\n          b[d + 16 >> 2] = b[h + 16 >> 2];\n          b[d + 20 >> 2] = b[h + 20 >> 2];\n          b[d + 24 >> 2] = b[h + 24 >> 2];\n          b[d + 28 >> 2] = b[h + 28 >> 2];\n          break;\n        }\n      } else {\n        g = ac(a, c, h) | 0;\n        if (!g) {\n          l = +e[h >> 3];\n          k = 1.0 / +t(+l);\n          m = +e[25968 + (i << 3) >> 3];\n          e[d >> 3] = l + m;\n          e[d + 8 >> 3] = l - m;\n          l = +e[h + 8 >> 3];\n          k = m * k;\n          e[d + 16 >> 3] = k + l;\n          e[d + 24 >> 3] = l - k;\n          break;\n        }\n        i = g;\n        T = j;\n        return i | 0;\n      } } while (0);\n      Ja(d, f ? 1.4 : 1.1);\n      f = 26096 + (i << 3) | 0;\n      if ((b[f >> 2] | 0) == (a | 0) ? (b[f + 4 >> 2] | 0) == (c | 0) : 0) { e[d >> 3] = 1.5707963267948966; }\n      i = 26224 + (i << 3) | 0;\n      if ((b[i >> 2] | 0) == (a | 0) ? (b[i + 4 >> 2] | 0) == (c | 0) : 0) { e[d + 8 >> 3] = -1.5707963267948966; }\n      if (!(+e[d >> 3] == 1.5707963267948966) ? !(+e[d + 8 >> 3] == -1.5707963267948966) : 0) {\n        i = 0;\n        T = j;\n        return i | 0;\n      }\n      e[d + 16 >> 3] = 3.141592653589793;\n      e[d + 24 >> 3] = -3.141592653589793;\n      i = 0;\n      T = j;\n      return i | 0;\n    }\n    function Tc(c, d, e, f) {\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0;\n      l = T;\n      T = T + 48 | 0;\n      i = l + 32 | 0;\n      h = l + 40 | 0;\n      j = l;\n      Hb(i, 0, 0, 0);\n      k = b[i >> 2] | 0;\n      i = b[i + 4 >> 2] | 0;\n      do { if (e >>> 0 <= 15) {\n        g = _c(f) | 0;\n        if (g | 0) {\n          f = j;\n          b[f >> 2] = 0;\n          b[f + 4 >> 2] = 0;\n          b[j + 8 >> 2] = g;\n          b[j + 12 >> 2] = -1;\n          f = j + 16 | 0;\n          k = j + 29 | 0;\n          b[f >> 2] = 0;\n          b[f + 4 >> 2] = 0;\n          b[f + 8 >> 2] = 0;\n          a[f + 12 >> 0] = 0;\n          a[k >> 0] = a[h >> 0] | 0;\n          a[k + 1 >> 0] = a[h + 1 >> 0] | 0;\n          a[k + 2 >> 0] = a[h + 2 >> 0] | 0;\n          break;\n        }\n        g = Id((b[d + 8 >> 2] | 0) + 1 | 0, 32) | 0;\n        if (!g) {\n          f = j;\n          b[f >> 2] = 0;\n          b[f + 4 >> 2] = 0;\n          b[j + 8 >> 2] = 13;\n          b[j + 12 >> 2] = -1;\n          f = j + 16 | 0;\n          k = j + 29 | 0;\n          b[f >> 2] = 0;\n          b[f + 4 >> 2] = 0;\n          b[f + 8 >> 2] = 0;\n          a[f + 12 >> 0] = 0;\n          a[k >> 0] = a[h >> 0] | 0;\n          a[k + 1 >> 0] = a[h + 1 >> 0] | 0;\n          a[k + 2 >> 0] = a[h + 2 >> 0] | 0;\n          break;\n        } else {\n          $c(d, g);\n          m = j;\n          b[m >> 2] = k;\n          b[m + 4 >> 2] = i;\n          b[j + 8 >> 2] = 0;\n          b[j + 12 >> 2] = e;\n          b[j + 16 >> 2] = f;\n          b[j + 20 >> 2] = d;\n          b[j + 24 >> 2] = g;\n          a[j + 28 >> 0] = 0;\n          k = j + 29 | 0;\n          a[k >> 0] = a[h >> 0] | 0;\n          a[k + 1 >> 0] = a[h + 1 >> 0] | 0;\n          a[k + 2 >> 0] = a[h + 2 >> 0] | 0;\n          break;\n        }\n      } else {\n        k = j;\n        b[k >> 2] = 0;\n        b[k + 4 >> 2] = 0;\n        b[j + 8 >> 2] = 4;\n        b[j + 12 >> 2] = -1;\n        k = j + 16 | 0;\n        m = j + 29 | 0;\n        b[k >> 2] = 0;\n        b[k + 4 >> 2] = 0;\n        b[k + 8 >> 2] = 0;\n        a[k + 12 >> 0] = 0;\n        a[m >> 0] = a[h >> 0] | 0;\n        a[m + 1 >> 0] = a[h + 1 >> 0] | 0;\n        a[m + 2 >> 0] = a[h + 2 >> 0] | 0;\n      } } while (0);\n      Uc(j);\n      b[c >> 2] = b[j >> 2];\n      b[c + 4 >> 2] = b[j + 4 >> 2];\n      b[c + 8 >> 2] = b[j + 8 >> 2];\n      b[c + 12 >> 2] = b[j + 12 >> 2];\n      b[c + 16 >> 2] = b[j + 16 >> 2];\n      b[c + 20 >> 2] = b[j + 20 >> 2];\n      b[c + 24 >> 2] = b[j + 24 >> 2];\n      b[c + 28 >> 2] = b[j + 28 >> 2];\n      T = l;\n      return;\n    }\n    function Uc(c) {\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0,\n        v = 0,\n        w = 0;\n      w = T;\n      T = T + 336 | 0;\n      p = w + 168 | 0;\n      q = w;\n      f = c;\n      e = b[f >> 2] | 0;\n      f = b[f + 4 >> 2] | 0;\n      if ((e | 0) == 0 & (f | 0) == 0) {\n        T = w;\n        return;\n      }\n      d = c + 28 | 0;\n      if (!(a[d >> 0] | 0)) { a[d >> 0] = 1; }else {\n        e = Vc(e, f) | 0;\n        f = H() | 0;\n      }\n      v = c + 20 | 0;\n      if (!(b[b[v >> 2] >> 2] | 0)) {\n        d = c + 24 | 0;\n        e = b[d >> 2] | 0;\n        if (e | 0) { Hd(e); }\n        u = c;\n        b[u >> 2] = 0;\n        b[u + 4 >> 2] = 0;\n        b[c + 8 >> 2] = 0;\n        b[v >> 2] = 0;\n        b[c + 12 >> 2] = -1;\n        b[c + 16 >> 2] = 0;\n        b[d >> 2] = 0;\n        T = w;\n        return;\n      }\n      u = c + 16 | 0;\n      d = b[u >> 2] | 0;\n      g = d & 15;\n      a: do { if (!((e | 0) == 0 & (f | 0) == 0)) {\n        r = c + 12 | 0;\n        n = (g | 0) == 3;\n        m = d & 255;\n        k = (g | 1 | 0) == 3;\n        o = c + 24 | 0;\n        l = (g + -1 | 0) >>> 0 < 3;\n        i = (g | 2 | 0) == 3;\n        j = q + 8 | 0;\n        b: while (1) {\n          h = Td(e | 0, f | 0, 52) | 0;\n          H() | 0;\n          h = h & 15;\n          if ((h | 0) == (b[r >> 2] | 0)) {\n            switch (m & 15) {\n              case 0:\n              case 2:\n              case 3:\n                {\n                  g = ac(e, f, p) | 0;\n                  if (g | 0) {\n                    s = 15;\n                    break b;\n                  }\n                  if (ad(b[v >> 2] | 0, b[o >> 2] | 0, p) | 0) {\n                    s = 19;\n                    break b;\n                  }\n                  break;\n                }\n              default:\n\n            }\n            if (k ? (g = b[(b[v >> 2] | 0) + 4 >> 2] | 0, b[p >> 2] = b[g >> 2], b[p + 4 >> 2] = b[g + 4 >> 2], b[p + 8 >> 2] = b[g + 8 >> 2], b[p + 12 >> 2] = b[g + 12 >> 2], Ca(26832, p) | 0) : 0) {\n              if (Zb(b[(b[v >> 2] | 0) + 4 >> 2] | 0, h, q) | 0) {\n                s = 25;\n                break;\n              }\n              g = q;\n              if ((b[g >> 2] | 0) == (e | 0) ? (b[g + 4 >> 2] | 0) == (f | 0) : 0) {\n                s = 29;\n                break;\n              }\n            }\n            if (l) {\n              g = bc(e, f, p) | 0;\n              if (g | 0) {\n                s = 32;\n                break;\n              }\n              if (Sc(e, f, q, 0) | 0) {\n                s = 36;\n                break;\n              }\n              if (i ? bd(b[v >> 2] | 0, b[o >> 2] | 0, p, q) | 0 : 0) {\n                s = 42;\n                break;\n              }\n              if (k ? dd(b[v >> 2] | 0, b[o >> 2] | 0, p, q) | 0 : 0) {\n                s = 42;\n                break;\n              }\n            }\n            if (n) {\n              d = Sc(e, f, p, 1) | 0;\n              g = b[o >> 2] | 0;\n              if (d | 0) {\n                s = 45;\n                break;\n              }\n              if (Da(g, p) | 0) {\n                Ga(q, p);\n                if (Fa(p, b[o >> 2] | 0) | 0) {\n                  s = 53;\n                  break;\n                }\n                if (ad(b[v >> 2] | 0, b[o >> 2] | 0, j) | 0) {\n                  s = 53;\n                  break;\n                }\n                if (dd(b[v >> 2] | 0, b[o >> 2] | 0, q, p) | 0) {\n                  s = 53;\n                  break;\n                }\n              }\n            }\n          }\n          do { if ((h | 0) < (b[r >> 2] | 0)) {\n            d = Sc(e, f, p, 1) | 0;\n            g = b[o >> 2] | 0;\n            if (d | 0) {\n              s = 58;\n              break b;\n            }\n            if (!(Da(g, p) | 0)) {\n              s = 73;\n              break;\n            }\n            if (Fa(b[o >> 2] | 0, p) | 0 ? (Ga(q, p), bd(b[v >> 2] | 0, b[o >> 2] | 0, q, p) | 0) : 0) {\n              s = 65;\n              break b;\n            }\n            e = Nb(e, f, h + 1 | 0, q) | 0;\n            if (e | 0) {\n              s = 67;\n              break b;\n            }\n            f = q;\n            e = b[f >> 2] | 0;\n            f = b[f + 4 >> 2] | 0;\n          } else { s = 73; } } while (0);\n          if ((s | 0) == 73) {\n            s = 0;\n            e = Vc(e, f) | 0;\n            f = H() | 0;\n          }\n          if ((e | 0) == 0 & (f | 0) == 0) {\n            t = o;\n            break a;\n          }\n        }\n        switch (s | 0) {\n          case 15:\n            {\n              d = b[o >> 2] | 0;\n              if (d | 0) { Hd(d); }\n              s = c;\n              b[s >> 2] = 0;\n              b[s + 4 >> 2] = 0;\n              b[v >> 2] = 0;\n              b[r >> 2] = -1;\n              b[u >> 2] = 0;\n              b[o >> 2] = 0;\n              b[c + 8 >> 2] = g;\n              s = 20;\n              break;\n            }\n          case 19:\n            {\n              b[c >> 2] = e;\n              b[c + 4 >> 2] = f;\n              s = 20;\n              break;\n            }\n          case 25:\n            {\n              I(27795, 27761, 470, 27772);\n              break;\n            }\n          case 29:\n            {\n              b[c >> 2] = e;\n              b[c + 4 >> 2] = f;\n              T = w;\n              return;\n            }\n          case 32:\n            {\n              d = b[o >> 2] | 0;\n              if (d | 0) { Hd(d); }\n              t = c;\n              b[t >> 2] = 0;\n              b[t + 4 >> 2] = 0;\n              b[v >> 2] = 0;\n              b[r >> 2] = -1;\n              b[u >> 2] = 0;\n              b[o >> 2] = 0;\n              b[c + 8 >> 2] = g;\n              T = w;\n              return;\n            }\n          case 36:\n            {\n              I(27795, 27761, 493, 27772);\n              break;\n            }\n          case 42:\n            {\n              b[c >> 2] = e;\n              b[c + 4 >> 2] = f;\n              T = w;\n              return;\n            }\n          case 45:\n            {\n              if (g | 0) { Hd(g); }\n              s = c;\n              b[s >> 2] = 0;\n              b[s + 4 >> 2] = 0;\n              b[v >> 2] = 0;\n              b[r >> 2] = -1;\n              b[u >> 2] = 0;\n              b[o >> 2] = 0;\n              b[c + 8 >> 2] = d;\n              s = 55;\n              break;\n            }\n          case 53:\n            {\n              b[c >> 2] = e;\n              b[c + 4 >> 2] = f;\n              s = 55;\n              break;\n            }\n          case 58:\n            {\n              if (g | 0) { Hd(g); }\n              s = c;\n              b[s >> 2] = 0;\n              b[s + 4 >> 2] = 0;\n              b[v >> 2] = 0;\n              b[r >> 2] = -1;\n              b[u >> 2] = 0;\n              b[o >> 2] = 0;\n              b[c + 8 >> 2] = d;\n              s = 71;\n              break;\n            }\n          case 65:\n            {\n              b[c >> 2] = e;\n              b[c + 4 >> 2] = f;\n              s = 71;\n              break;\n            }\n          case 67:\n            {\n              d = b[o >> 2] | 0;\n              if (d | 0) { Hd(d); }\n              t = c;\n              b[t >> 2] = 0;\n              b[t + 4 >> 2] = 0;\n              b[v >> 2] = 0;\n              b[r >> 2] = -1;\n              b[u >> 2] = 0;\n              b[o >> 2] = 0;\n              b[c + 8 >> 2] = e;\n              T = w;\n              return;\n            }\n        }\n        if ((s | 0) == 20) {\n          T = w;\n          return;\n        } else if ((s | 0) == 55) {\n          T = w;\n          return;\n        } else if ((s | 0) == 71) {\n          T = w;\n          return;\n        }\n      } else { t = c + 24 | 0; } } while (0);\n      d = b[t >> 2] | 0;\n      if (d | 0) { Hd(d); }\n      s = c;\n      b[s >> 2] = 0;\n      b[s + 4 >> 2] = 0;\n      b[c + 8 >> 2] = 0;\n      b[v >> 2] = 0;\n      b[c + 12 >> 2] = -1;\n      b[u >> 2] = 0;\n      b[t >> 2] = 0;\n      T = w;\n      return;\n    }\n    function Vc(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0;\n      m = T;\n      T = T + 16 | 0;\n      l = m;\n      e = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      e = e & 15;\n      d = Td(a | 0, c | 0, 45) | 0;\n      H() | 0;\n      do { if (e) {\n        while (1) {\n          d = Ud(e + 4095 | 0, 0, 52) | 0;\n          f = H() | 0 | c & -15728641;\n          g = (15 - e | 0) * 3 | 0;\n          h = Ud(7, 0, g | 0) | 0;\n          i = H() | 0;\n          d = d | a | h;\n          f = f | i;\n          j = Td(a | 0, c | 0, g | 0) | 0;\n          H() | 0;\n          j = j & 7;\n          e = e + -1 | 0;\n          if (j >>> 0 < 6) { break; }\n          if (!e) {\n            k = 4;\n            break;\n          } else {\n            c = f;\n            a = d;\n          }\n        }\n        if ((k | 0) == 4) {\n          d = Td(d | 0, f | 0, 45) | 0;\n          H() | 0;\n          break;\n        }\n        l = (j | 0) == 0 & (Kb(d, f) | 0) != 0;\n        l = Ud((l ? 2 : 1) + j | 0, 0, g | 0) | 0;\n        k = H() | 0 | c & ~i;\n        l = l | a & ~h;\n        G(k | 0);\n        T = m;\n        return l | 0;\n      } } while (0);\n      d = d & 127;\n      if (d >>> 0 > 120) {\n        k = 0;\n        l = 0;\n        G(k | 0);\n        T = m;\n        return l | 0;\n      }\n      Hb(l, 0, d + 1 | 0, 0);\n      k = b[l + 4 >> 2] | 0;\n      l = b[l >> 2] | 0;\n      G(k | 0);\n      T = m;\n      return l | 0;\n    }\n    function Wc(a, c, d, e, f, g) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      g = g | 0;\n      var h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0;\n      r = T;\n      T = T + 160 | 0;\n      m = r + 80 | 0;\n      i = r + 64 | 0;\n      n = r + 112 | 0;\n      q = r;\n      Tc(m, a, c, d);\n      k = m;\n      ic(i, b[k >> 2] | 0, b[k + 4 >> 2] | 0, c);\n      k = i;\n      j = b[k >> 2] | 0;\n      k = b[k + 4 >> 2] | 0;\n      h = b[m + 8 >> 2] | 0;\n      o = n + 4 | 0;\n      b[o >> 2] = b[m >> 2];\n      b[o + 4 >> 2] = b[m + 4 >> 2];\n      b[o + 8 >> 2] = b[m + 8 >> 2];\n      b[o + 12 >> 2] = b[m + 12 >> 2];\n      b[o + 16 >> 2] = b[m + 16 >> 2];\n      b[o + 20 >> 2] = b[m + 20 >> 2];\n      b[o + 24 >> 2] = b[m + 24 >> 2];\n      b[o + 28 >> 2] = b[m + 28 >> 2];\n      o = q;\n      b[o >> 2] = j;\n      b[o + 4 >> 2] = k;\n      o = q + 8 | 0;\n      b[o >> 2] = h;\n      a = q + 12 | 0;\n      c = n;\n      d = a + 36 | 0;\n      do {\n        b[a >> 2] = b[c >> 2];\n        a = a + 4 | 0;\n        c = c + 4 | 0;\n      } while ((a | 0) < (d | 0));\n      n = q + 48 | 0;\n      b[n >> 2] = b[i >> 2];\n      b[n + 4 >> 2] = b[i + 4 >> 2];\n      b[n + 8 >> 2] = b[i + 8 >> 2];\n      b[n + 12 >> 2] = b[i + 12 >> 2];\n      if ((j | 0) == 0 & (k | 0) == 0) {\n        q = h;\n        T = r;\n        return q | 0;\n      }\n      d = q + 16 | 0;\n      l = q + 24 | 0;\n      m = q + 28 | 0;\n      h = 0;\n      i = 0;\n      c = j;\n      a = k;\n      do {\n        if (!((h | 0) < (f | 0) | (h | 0) == (f | 0) & i >>> 0 < e >>> 0)) {\n          p = 4;\n          break;\n        }\n        k = i;\n        i = Jd(i | 0, h | 0, 1, 0) | 0;\n        h = H() | 0;\n        k = g + (k << 3) | 0;\n        b[k >> 2] = c;\n        b[k + 4 >> 2] = a;\n        kc(n);\n        a = n;\n        c = b[a >> 2] | 0;\n        a = b[a + 4 >> 2] | 0;\n        if ((c | 0) == 0 & (a | 0) == 0) {\n          Uc(d);\n          c = d;\n          a = b[c >> 2] | 0;\n          c = b[c + 4 >> 2] | 0;\n          if ((a | 0) == 0 & (c | 0) == 0) {\n            p = 10;\n            break;\n          }\n          jc(a, c, b[m >> 2] | 0, n);\n          a = n;\n          c = b[a >> 2] | 0;\n          a = b[a + 4 >> 2] | 0;\n        }\n        k = q;\n        b[k >> 2] = c;\n        b[k + 4 >> 2] = a;\n      } while (!((c | 0) == 0 & (a | 0) == 0));\n      if ((p | 0) == 4) {\n        a = q + 40 | 0;\n        c = b[a >> 2] | 0;\n        if (c | 0) { Hd(c); }\n        p = q + 16 | 0;\n        b[p >> 2] = 0;\n        b[p + 4 >> 2] = 0;\n        b[l >> 2] = 0;\n        b[q + 36 >> 2] = 0;\n        b[m >> 2] = -1;\n        b[q + 32 >> 2] = 0;\n        b[a >> 2] = 0;\n        jc(0, 0, 0, n);\n        b[q >> 2] = 0;\n        b[q + 4 >> 2] = 0;\n        b[o >> 2] = 0;\n        q = 14;\n        T = r;\n        return q | 0;\n      } else if ((p | 0) == 10) {\n        b[q >> 2] = 0;\n        b[q + 4 >> 2] = 0;\n        b[o >> 2] = b[l >> 2];\n      }\n      q = b[o >> 2] | 0;\n      T = r;\n      return q | 0;\n    }\n    function Xc(c, d, f, g) {\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      g = g | 0;\n      var h = 0,\n        i = 0.0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0.0,\n        r = 0;\n      o = T;\n      T = T + 48 | 0;\n      l = o + 32 | 0;\n      k = o + 40 | 0;\n      m = o;\n      if (!(b[c >> 2] | 0)) {\n        n = g;\n        b[n >> 2] = 0;\n        b[n + 4 >> 2] = 0;\n        n = 0;\n        T = o;\n        return n | 0;\n      }\n      Hb(l, 0, 0, 0);\n      j = l;\n      h = b[j >> 2] | 0;\n      j = b[j + 4 >> 2] | 0;\n      do { if (d >>> 0 > 15) {\n        n = m;\n        b[n >> 2] = 0;\n        b[n + 4 >> 2] = 0;\n        b[m + 8 >> 2] = 4;\n        b[m + 12 >> 2] = -1;\n        n = m + 16 | 0;\n        f = m + 29 | 0;\n        b[n >> 2] = 0;\n        b[n + 4 >> 2] = 0;\n        b[n + 8 >> 2] = 0;\n        a[n + 12 >> 0] = 0;\n        a[f >> 0] = a[k >> 0] | 0;\n        a[f + 1 >> 0] = a[k + 1 >> 0] | 0;\n        a[f + 2 >> 0] = a[k + 2 >> 0] | 0;\n        f = 4;\n        n = 9;\n      } else {\n        f = _c(f) | 0;\n        if (f | 0) {\n          l = m;\n          b[l >> 2] = 0;\n          b[l + 4 >> 2] = 0;\n          b[m + 8 >> 2] = f;\n          b[m + 12 >> 2] = -1;\n          l = m + 16 | 0;\n          n = m + 29 | 0;\n          b[l >> 2] = 0;\n          b[l + 4 >> 2] = 0;\n          b[l + 8 >> 2] = 0;\n          a[l + 12 >> 0] = 0;\n          a[n >> 0] = a[k >> 0] | 0;\n          a[n + 1 >> 0] = a[k + 1 >> 0] | 0;\n          a[n + 2 >> 0] = a[k + 2 >> 0] | 0;\n          n = 9;\n          break;\n        }\n        f = Id((b[c + 8 >> 2] | 0) + 1 | 0, 32) | 0;\n        if (!f) {\n          n = m;\n          b[n >> 2] = 0;\n          b[n + 4 >> 2] = 0;\n          b[m + 8 >> 2] = 13;\n          b[m + 12 >> 2] = -1;\n          n = m + 16 | 0;\n          f = m + 29 | 0;\n          b[n >> 2] = 0;\n          b[n + 4 >> 2] = 0;\n          b[n + 8 >> 2] = 0;\n          a[n + 12 >> 0] = 0;\n          a[f >> 0] = a[k >> 0] | 0;\n          a[f + 1 >> 0] = a[k + 1 >> 0] | 0;\n          a[f + 2 >> 0] = a[k + 2 >> 0] | 0;\n          f = 13;\n          n = 9;\n          break;\n        }\n        $c(c, f);\n        r = m;\n        b[r >> 2] = h;\n        b[r + 4 >> 2] = j;\n        j = m + 8 | 0;\n        b[j >> 2] = 0;\n        b[m + 12 >> 2] = d;\n        b[m + 20 >> 2] = c;\n        b[m + 24 >> 2] = f;\n        a[m + 28 >> 0] = 0;\n        h = m + 29 | 0;\n        a[h >> 0] = a[k >> 0] | 0;\n        a[h + 1 >> 0] = a[k + 1 >> 0] | 0;\n        a[h + 2 >> 0] = a[k + 2 >> 0] | 0;\n        b[m + 16 >> 2] = 3;\n        p = +Ba(f);\n        p = p * +za(f);\n        i = +q(+ +e[f >> 3]);\n        i = p / +t(+ +Xd(+i, + +q(+ +e[f + 8 >> 3]))) * 6371.007180918475 * 6371.007180918475;\n        h = m + 12 | 0;\n        f = b[h >> 2] | 0;\n        a: do { if ((f | 0) > 0) { do {\n          tc(f + -1 | 0, l) | 0;\n          if (!(i / +e[l >> 3] > 10.0)) { break a; }\n          r = b[h >> 2] | 0;\n          f = r + -1 | 0;\n          b[h >> 2] = f;\n        } while ((r | 0) > 1); } } while (0);\n        Uc(m);\n        h = g;\n        b[h >> 2] = 0;\n        b[h + 4 >> 2] = 0;\n        h = m;\n        f = b[h >> 2] | 0;\n        h = b[h + 4 >> 2] | 0;\n        if (!((f | 0) == 0 & (h | 0) == 0)) { do {\n          Jb(f, h, d, l) | 0;\n          k = l;\n          c = g;\n          k = Jd(b[c >> 2] | 0, b[c + 4 >> 2] | 0, b[k >> 2] | 0, b[k + 4 >> 2] | 0) | 0;\n          c = H() | 0;\n          r = g;\n          b[r >> 2] = k;\n          b[r + 4 >> 2] = c;\n          Uc(m);\n          r = m;\n          f = b[r >> 2] | 0;\n          h = b[r + 4 >> 2] | 0;\n        } while (!((f | 0) == 0 & (h | 0) == 0)); }\n        f = b[j >> 2] | 0;\n      } } while (0);\n      r = f;\n      T = o;\n      return r | 0;\n    }\n    function Yc(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var f = 0.0,\n        g = 0.0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0,\n        k = 0.0,\n        l = 0,\n        m = 0.0,\n        n = 0,\n        o = 0;\n      if (!(Ca(c, d) | 0)) {\n        o = 0;\n        return o | 0;\n      }\n      c = Aa(c) | 0;\n      f = +e[d >> 3];\n      g = +e[d + 8 >> 3];\n      g = c & g < 0.0 ? g + 6.283185307179586 : g;\n      o = b[a >> 2] | 0;\n      if ((o | 0) <= 0) {\n        o = 0;\n        return o | 0;\n      }\n      n = b[a + 4 >> 2] | 0;\n      if (c) {\n        c = 0;\n        m = g;\n        d = -1;\n        a = 0;\n        a: while (1) {\n          l = a;\n          while (1) {\n            i = +e[n + (l << 4) >> 3];\n            g = +e[n + (l << 4) + 8 >> 3];\n            a = (d + 2 | 0) % (o | 0) | 0;\n            h = +e[n + (a << 4) >> 3];\n            j = +e[n + (a << 4) + 8 >> 3];\n            if (i > h) {\n              k = i;\n              i = j;\n            } else {\n              k = h;\n              h = i;\n              i = g;\n              g = j;\n            }\n            f = f == h | f == k ? f + 2.220446049250313e-16 : f;\n            if (!(f < h | f > k)) { break; }\n            d = l + 1 | 0;\n            if ((d | 0) >= (o | 0)) {\n              d = 22;\n              break a;\n            } else {\n              a = l;\n              l = d;\n              d = a;\n            }\n          }\n          j = i < 0.0 ? i + 6.283185307179586 : i;\n          i = g < 0.0 ? g + 6.283185307179586 : g;\n          m = j == m | i == m ? m + -2.220446049250313e-16 : m;\n          k = j + (i - j) * ((f - h) / (k - h));\n          if ((k < 0.0 ? k + 6.283185307179586 : k) > m) { c = c ^ 1; }\n          a = l + 1 | 0;\n          if ((a | 0) >= (o | 0)) {\n            d = 22;\n            break;\n          } else { d = l; }\n        }\n        if ((d | 0) == 22) { return c | 0; }\n      } else {\n        c = 0;\n        m = g;\n        d = -1;\n        a = 0;\n        b: while (1) {\n          l = a;\n          while (1) {\n            i = +e[n + (l << 4) >> 3];\n            g = +e[n + (l << 4) + 8 >> 3];\n            a = (d + 2 | 0) % (o | 0) | 0;\n            h = +e[n + (a << 4) >> 3];\n            j = +e[n + (a << 4) + 8 >> 3];\n            if (i > h) {\n              k = i;\n              i = j;\n            } else {\n              k = h;\n              h = i;\n              i = g;\n              g = j;\n            }\n            f = f == h | f == k ? f + 2.220446049250313e-16 : f;\n            if (!(f < h | f > k)) { break; }\n            d = l + 1 | 0;\n            if ((d | 0) >= (o | 0)) {\n              d = 22;\n              break b;\n            } else {\n              a = l;\n              l = d;\n              d = a;\n            }\n          }\n          m = i == m | g == m ? m + -2.220446049250313e-16 : m;\n          if (i + (g - i) * ((f - h) / (k - h)) > m) { c = c ^ 1; }\n          a = l + 1 | 0;\n          if ((a | 0) >= (o | 0)) {\n            d = 22;\n            break;\n          } else { d = l; }\n        }\n        if ((d | 0) == 22) { return c | 0; }\n      }\n      return 0;\n    }\n    function Zc(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0.0,\n        f = 0.0,\n        g = 0.0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0,\n        m = 0.0,\n        n = 0,\n        o = 0,\n        p = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0,\n        v = 0;\n      r = b[a >> 2] | 0;\n      if (!r) {\n        b[c >> 2] = 0;\n        b[c + 4 >> 2] = 0;\n        b[c + 8 >> 2] = 0;\n        b[c + 12 >> 2] = 0;\n        b[c + 16 >> 2] = 0;\n        b[c + 20 >> 2] = 0;\n        b[c + 24 >> 2] = 0;\n        b[c + 28 >> 2] = 0;\n        return;\n      }\n      s = c + 8 | 0;\n      e[s >> 3] = 1797693134862315708145274.0e284;\n      t = c + 24 | 0;\n      e[t >> 3] = 1797693134862315708145274.0e284;\n      e[c >> 3] = -1797693134862315708145274.0e284;\n      u = c + 16 | 0;\n      e[u >> 3] = -1797693134862315708145274.0e284;\n      if ((r | 0) <= 0) { return; }\n      o = b[a + 4 >> 2] | 0;\n      l = 1797693134862315708145274.0e284;\n      m = -1797693134862315708145274.0e284;\n      n = 0;\n      a = -1;\n      h = 1797693134862315708145274.0e284;\n      i = 1797693134862315708145274.0e284;\n      k = -1797693134862315708145274.0e284;\n      f = -1797693134862315708145274.0e284;\n      p = 0;\n      while (1) {\n        d = +e[o + (p << 4) >> 3];\n        j = +e[o + (p << 4) + 8 >> 3];\n        a = a + 2 | 0;\n        g = +e[o + (((a | 0) == (r | 0) ? 0 : a) << 4) + 8 >> 3];\n        if (d < h) {\n          e[s >> 3] = d;\n          h = d;\n        }\n        if (j < i) {\n          e[t >> 3] = j;\n          i = j;\n        }\n        if (d > k) { e[c >> 3] = d; }else { d = k; }\n        if (j > f) {\n          e[u >> 3] = j;\n          f = j;\n        }\n        l = j > 0.0 & j < l ? j : l;\n        m = j < 0.0 & j > m ? j : m;\n        n = n | +q(+(j - g)) > 3.141592653589793;\n        a = p + 1 | 0;\n        if ((a | 0) == (r | 0)) { break; }else {\n          v = p;\n          k = d;\n          p = a;\n          a = v;\n        }\n      }\n      if (!n) { return; }\n      e[u >> 3] = m;\n      e[t >> 3] = l;\n      return;\n    }\n    function _c(a) {\n      a = a | 0;\n      return (a >>> 0 < 4 ? 0 : 15) | 0;\n    }\n    function $c(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        f = 0,\n        g = 0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0,\n        m = 0.0,\n        n = 0.0,\n        o = 0.0,\n        p = 0.0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0,\n        v = 0,\n        w = 0,\n        x = 0,\n        y = 0,\n        z = 0,\n        A = 0;\n      r = b[a >> 2] | 0;\n      if (r) {\n        s = c + 8 | 0;\n        e[s >> 3] = 1797693134862315708145274.0e284;\n        t = c + 24 | 0;\n        e[t >> 3] = 1797693134862315708145274.0e284;\n        e[c >> 3] = -1797693134862315708145274.0e284;\n        u = c + 16 | 0;\n        e[u >> 3] = -1797693134862315708145274.0e284;\n        if ((r | 0) > 0) {\n          g = b[a + 4 >> 2] | 0;\n          o = 1797693134862315708145274.0e284;\n          p = -1797693134862315708145274.0e284;\n          f = 0;\n          d = -1;\n          k = 1797693134862315708145274.0e284;\n          l = 1797693134862315708145274.0e284;\n          n = -1797693134862315708145274.0e284;\n          i = -1797693134862315708145274.0e284;\n          v = 0;\n          while (1) {\n            h = +e[g + (v << 4) >> 3];\n            m = +e[g + (v << 4) + 8 >> 3];\n            z = d + 2 | 0;\n            j = +e[g + (((z | 0) == (r | 0) ? 0 : z) << 4) + 8 >> 3];\n            if (h < k) {\n              e[s >> 3] = h;\n              k = h;\n            }\n            if (m < l) {\n              e[t >> 3] = m;\n              l = m;\n            }\n            if (h > n) { e[c >> 3] = h; }else { h = n; }\n            if (m > i) {\n              e[u >> 3] = m;\n              i = m;\n            }\n            o = m > 0.0 & m < o ? m : o;\n            p = m < 0.0 & m > p ? m : p;\n            f = f | +q(+(m - j)) > 3.141592653589793;\n            d = v + 1 | 0;\n            if ((d | 0) == (r | 0)) { break; }else {\n              z = v;\n              n = h;\n              v = d;\n              d = z;\n            }\n          }\n          if (f) {\n            e[u >> 3] = p;\n            e[t >> 3] = o;\n          }\n        }\n      } else {\n        b[c >> 2] = 0;\n        b[c + 4 >> 2] = 0;\n        b[c + 8 >> 2] = 0;\n        b[c + 12 >> 2] = 0;\n        b[c + 16 >> 2] = 0;\n        b[c + 20 >> 2] = 0;\n        b[c + 24 >> 2] = 0;\n        b[c + 28 >> 2] = 0;\n      }\n      z = a + 8 | 0;\n      d = b[z >> 2] | 0;\n      if ((d | 0) <= 0) { return; }\n      y = a + 12 | 0;\n      x = 0;\n      do {\n        g = b[y >> 2] | 0;\n        f = x;\n        x = x + 1 | 0;\n        t = c + (x << 5) | 0;\n        u = b[g + (f << 3) >> 2] | 0;\n        if (u) {\n          v = c + (x << 5) + 8 | 0;\n          e[v >> 3] = 1797693134862315708145274.0e284;\n          a = c + (x << 5) + 24 | 0;\n          e[a >> 3] = 1797693134862315708145274.0e284;\n          e[t >> 3] = -1797693134862315708145274.0e284;\n          w = c + (x << 5) + 16 | 0;\n          e[w >> 3] = -1797693134862315708145274.0e284;\n          if ((u | 0) > 0) {\n            r = b[g + (f << 3) + 4 >> 2] | 0;\n            o = 1797693134862315708145274.0e284;\n            p = -1797693134862315708145274.0e284;\n            g = 0;\n            f = -1;\n            s = 0;\n            k = 1797693134862315708145274.0e284;\n            l = 1797693134862315708145274.0e284;\n            m = -1797693134862315708145274.0e284;\n            i = -1797693134862315708145274.0e284;\n            while (1) {\n              h = +e[r + (s << 4) >> 3];\n              n = +e[r + (s << 4) + 8 >> 3];\n              f = f + 2 | 0;\n              j = +e[r + (((f | 0) == (u | 0) ? 0 : f) << 4) + 8 >> 3];\n              if (h < k) {\n                e[v >> 3] = h;\n                k = h;\n              }\n              if (n < l) {\n                e[a >> 3] = n;\n                l = n;\n              }\n              if (h > m) { e[t >> 3] = h; }else { h = m; }\n              if (n > i) {\n                e[w >> 3] = n;\n                i = n;\n              }\n              o = n > 0.0 & n < o ? n : o;\n              p = n < 0.0 & n > p ? n : p;\n              g = g | +q(+(n - j)) > 3.141592653589793;\n              f = s + 1 | 0;\n              if ((f | 0) == (u | 0)) { break; }else {\n                A = s;\n                s = f;\n                m = h;\n                f = A;\n              }\n            }\n            if (g) {\n              e[w >> 3] = p;\n              e[a >> 3] = o;\n            }\n          }\n        } else {\n          b[t >> 2] = 0;\n          b[t + 4 >> 2] = 0;\n          b[t + 8 >> 2] = 0;\n          b[t + 12 >> 2] = 0;\n          b[t + 16 >> 2] = 0;\n          b[t + 20 >> 2] = 0;\n          b[t + 24 >> 2] = 0;\n          b[t + 28 >> 2] = 0;\n          d = b[z >> 2] | 0;\n        }\n      } while ((x | 0) < (d | 0));\n      return;\n    }\n    function ad(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0;\n      if (!(Yc(a, c, d) | 0)) {\n        f = 0;\n        return f | 0;\n      }\n      f = a + 8 | 0;\n      if ((b[f >> 2] | 0) <= 0) {\n        f = 1;\n        return f | 0;\n      }\n      e = a + 12 | 0;\n      a = 0;\n      while (1) {\n        g = a;\n        a = a + 1 | 0;\n        if (Yc((b[e >> 2] | 0) + (g << 3) | 0, c + (a << 5) | 0, d) | 0) {\n          a = 0;\n          e = 6;\n          break;\n        }\n        if ((a | 0) >= (b[f >> 2] | 0)) {\n          a = 1;\n          e = 6;\n          break;\n        }\n      }\n      if ((e | 0) == 6) { return a | 0; }\n      return 0;\n    }\n    function bd(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0;\n      k = T;\n      T = T + 16 | 0;\n      i = k;\n      h = d + 8 | 0;\n      if (!(Yc(a, c, h) | 0)) {\n        j = 0;\n        T = k;\n        return j | 0;\n      }\n      j = a + 8 | 0;\n      a: do { if ((b[j >> 2] | 0) > 0) {\n        g = a + 12 | 0;\n        f = 0;\n        while (1) {\n          l = f;\n          f = f + 1 | 0;\n          if (Yc((b[g >> 2] | 0) + (l << 3) | 0, c + (f << 5) | 0, h) | 0) {\n            f = 0;\n            break;\n          }\n          if ((f | 0) >= (b[j >> 2] | 0)) { break a; }\n        }\n        T = k;\n        return f | 0;\n      } } while (0);\n      if (cd(a, c, d, e) | 0) {\n        l = 0;\n        T = k;\n        return l | 0;\n      }\n      b[i >> 2] = b[d >> 2];\n      b[i + 4 >> 2] = h;\n      f = b[j >> 2] | 0;\n      b: do { if ((f | 0) > 0) {\n        a = a + 12 | 0;\n        h = 0;\n        g = f;\n        while (1) {\n          f = b[a >> 2] | 0;\n          if ((b[f + (h << 3) >> 2] | 0) > 0) {\n            if (Yc(i, e, b[f + (h << 3) + 4 >> 2] | 0) | 0) {\n              f = 0;\n              break b;\n            }\n            f = h + 1 | 0;\n            if (cd((b[a >> 2] | 0) + (h << 3) | 0, c + (f << 5) | 0, d, e) | 0) {\n              f = 0;\n              break b;\n            }\n            g = b[j >> 2] | 0;\n          } else { f = h + 1 | 0; }\n          if ((f | 0) < (g | 0)) { h = f; }else {\n            f = 1;\n            break;\n          }\n        }\n      } else { f = 1; } } while (0);\n      l = f;\n      T = k;\n      return l | 0;\n    }\n    function cd(a, c, d, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0,\n        m = 0.0,\n        n = 0.0,\n        o = 0.0,\n        p = 0.0,\n        q = 0.0,\n        r = 0.0,\n        s = 0.0,\n        t = 0.0,\n        u = 0,\n        v = 0,\n        w = 0.0,\n        x = 0.0,\n        y = 0,\n        z = 0,\n        A = 0;\n      y = T;\n      T = T + 176 | 0;\n      u = y + 172 | 0;\n      g = y + 168 | 0;\n      v = y;\n      if (!(Da(c, f) | 0)) {\n        a = 0;\n        T = y;\n        return a | 0;\n      }\n      Ea(c, f, u, g);\n      Zd(v | 0, d | 0, 168) | 0;\n      if ((b[d >> 2] | 0) > 0) {\n        c = 0;\n        do {\n          z = v + 8 + (c << 4) + 8 | 0;\n          t = +nc(+e[z >> 3], b[g >> 2] | 0);\n          e[z >> 3] = t;\n          c = c + 1 | 0;\n        } while ((c | 0) < (b[d >> 2] | 0));\n      }\n      r = +e[f >> 3];\n      s = +e[f + 8 >> 3];\n      t = +nc(+e[f + 16 >> 3], b[g >> 2] | 0);\n      p = +nc(+e[f + 24 >> 3], b[g >> 2] | 0);\n      a: do { if ((b[a >> 2] | 0) > 0) {\n        f = a + 4 | 0;\n        g = b[v >> 2] | 0;\n        if ((g | 0) <= 0) {\n          c = 0;\n          while (1) {\n            c = c + 1 | 0;\n            if ((c | 0) >= (b[a >> 2] | 0)) {\n              c = 0;\n              break a;\n            }\n          }\n        }\n        d = 0;\n        while (1) {\n          c = b[f >> 2] | 0;\n          o = +e[c + (d << 4) >> 3];\n          q = +nc(+e[c + (d << 4) + 8 >> 3], b[u >> 2] | 0);\n          c = b[f >> 2] | 0;\n          d = d + 1 | 0;\n          z = (d | 0) % (b[a >> 2] | 0) | 0;\n          h = +e[c + (z << 4) >> 3];\n          i = +nc(+e[c + (z << 4) + 8 >> 3], b[u >> 2] | 0);\n          if (((!(o >= r) | !(h >= r) ? !(o <= s) | !(h <= s) : 0) ? !(q <= p) | !(i <= p) : 0) ? !(q >= t) | !(i >= t) : 0) {\n            n = h - o;\n            l = i - q;\n            c = 0;\n            do {\n              A = c;\n              c = c + 1 | 0;\n              z = (c | 0) == (g | 0) ? 0 : c;\n              h = +e[v + 8 + (A << 4) + 8 >> 3];\n              i = +e[v + 8 + (z << 4) + 8 >> 3] - h;\n              j = +e[v + 8 + (A << 4) >> 3];\n              k = +e[v + 8 + (z << 4) >> 3] - j;\n              m = n * i - l * k;\n              if ((m != 0.0 ? (w = q - h, x = o - j, k = (w * k - i * x) / m, !(k < 0.0 | k > 1.0)) : 0) ? (m = (n * w - l * x) / m, m >= 0.0 & m <= 1.0) : 0) {\n                c = 1;\n                break a;\n              }\n            } while ((c | 0) < (g | 0));\n          }\n          if ((d | 0) >= (b[a >> 2] | 0)) {\n            c = 0;\n            break;\n          }\n        }\n      } else { c = 0; } } while (0);\n      A = c;\n      T = y;\n      return A | 0;\n    }\n    function dd(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0;\n      if (cd(a, c, d, e) | 0) {\n        g = 1;\n        return g | 0;\n      }\n      g = a + 8 | 0;\n      if ((b[g >> 2] | 0) <= 0) {\n        g = 0;\n        return g | 0;\n      }\n      f = a + 12 | 0;\n      a = 0;\n      while (1) {\n        h = a;\n        a = a + 1 | 0;\n        if (cd((b[f >> 2] | 0) + (h << 3) | 0, c + (a << 5) | 0, d, e) | 0) {\n          a = 1;\n          f = 6;\n          break;\n        }\n        if ((a | 0) >= (b[g >> 2] | 0)) {\n          a = 0;\n          f = 6;\n          break;\n        }\n      }\n      if ((f | 0) == 6) { return a | 0; }\n      return 0;\n    }\n    function ed() {\n      return 8;\n    }\n    function fd() {\n      return 16;\n    }\n    function gd() {\n      return 168;\n    }\n    function hd() {\n      return 8;\n    }\n    function id() {\n      return 16;\n    }\n    function jd() {\n      return 12;\n    }\n    function kd() {\n      return 8;\n    }\n    function ld(a) {\n      a = a | 0;\n      return +(+((b[a >> 2] | 0) >>> 0) + 4294967296.0 * +(b[a + 4 >> 2] | 0));\n    }\n    function md(a) {\n      a = a | 0;\n      var b = 0.0,\n        c = 0.0;\n      c = +e[a >> 3];\n      b = +e[a + 8 >> 3];\n      return + +r(+(c * c + b * b));\n    }\n    function nd(a, b, c, d, f) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      f = f | 0;\n      var g = 0.0,\n        h = 0.0,\n        i = 0.0,\n        j = 0.0,\n        k = 0.0,\n        l = 0.0,\n        m = 0.0,\n        n = 0.0;\n      k = +e[a >> 3];\n      j = +e[b >> 3] - k;\n      i = +e[a + 8 >> 3];\n      h = +e[b + 8 >> 3] - i;\n      m = +e[c >> 3];\n      g = +e[d >> 3] - m;\n      n = +e[c + 8 >> 3];\n      l = +e[d + 8 >> 3] - n;\n      g = (g * (i - n) - (k - m) * l) / (j * l - h * g);\n      e[f >> 3] = k + j * g;\n      e[f + 8 >> 3] = i + h * g;\n      return;\n    }\n    function od(a, b) {\n      a = a | 0;\n      b = b | 0;\n      if (!(+q(+(+e[a >> 3] - +e[b >> 3])) < 1.1920928955078125e-07)) {\n        b = 0;\n        return b | 0;\n      }\n      b = +q(+(+e[a + 8 >> 3] - +e[b + 8 >> 3])) < 1.1920928955078125e-07;\n      return b | 0;\n    }\n    function pd(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0.0,\n        d = 0.0,\n        f = 0.0;\n      f = +e[a >> 3] - +e[b >> 3];\n      d = +e[a + 8 >> 3] - +e[b + 8 >> 3];\n      c = +e[a + 16 >> 3] - +e[b + 16 >> 3];\n      return +(f * f + d * d + c * c);\n    }\n    function qd(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0.0,\n        d = 0.0,\n        f = 0.0;\n      c = +e[a >> 3];\n      d = +t(+c);\n      c = +u(+c);\n      e[b + 16 >> 3] = c;\n      c = +e[a + 8 >> 3];\n      f = d * +t(+c);\n      e[b >> 3] = f;\n      c = d * +u(+c);\n      e[b + 8 >> 3] = c;\n      return;\n    }\n    function rd(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0;\n      g = T;\n      T = T + 16 | 0;\n      f = g;\n      e = Kb(a, c) | 0;\n      if ((d + -1 | 0) >>> 0 > 5) {\n        f = -1;\n        T = g;\n        return f | 0;\n      }\n      e = (e | 0) != 0;\n      if ((d | 0) == 1 & e) {\n        f = -1;\n        T = g;\n        return f | 0;\n      }\n      do { if (!(sd(a, c, f) | 0)) {\n        if (e) {\n          e = ((b[26352 + (d << 2) >> 2] | 0) + 5 - (b[f >> 2] | 0) | 0) % 5 | 0;\n          break;\n        } else {\n          e = ((b[26384 + (d << 2) >> 2] | 0) + 6 - (b[f >> 2] | 0) | 0) % 6 | 0;\n          break;\n        }\n      } else { e = -1; } } while (0);\n      f = e;\n      T = g;\n      return f | 0;\n    }\n    function sd(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0;\n      l = T;\n      T = T + 32 | 0;\n      i = l + 16 | 0;\n      j = l;\n      e = $b(a, c, i) | 0;\n      if (e | 0) {\n        d = e;\n        T = l;\n        return d | 0;\n      }\n      g = Cb(a, c) | 0;\n      k = Sb(a, c) | 0;\n      sa(g, j);\n      e = ta(g, b[i >> 2] | 0) | 0;\n      do { if (oa(g) | 0) {\n        do { switch (g | 0) {\n          case 4:\n            {\n              f = 0;\n              break;\n            }\n          case 14:\n            {\n              f = 1;\n              break;\n            }\n          case 24:\n            {\n              f = 2;\n              break;\n            }\n          case 38:\n            {\n              f = 3;\n              break;\n            }\n          case 49:\n            {\n              f = 4;\n              break;\n            }\n          case 58:\n            {\n              f = 5;\n              break;\n            }\n          case 63:\n            {\n              f = 6;\n              break;\n            }\n          case 72:\n            {\n              f = 7;\n              break;\n            }\n          case 83:\n            {\n              f = 8;\n              break;\n            }\n          case 97:\n            {\n              f = 9;\n              break;\n            }\n          case 107:\n            {\n              f = 10;\n              break;\n            }\n          case 117:\n            {\n              f = 11;\n              break;\n            }\n          default:\n            I(27795, 27797, 75, 27806);\n        } } while (0);\n        h = b[26416 + (f * 24 | 0) + 8 >> 2] | 0;\n        c = b[26416 + (f * 24 | 0) + 16 >> 2] | 0;\n        a = b[i >> 2] | 0;\n        if ((a | 0) != (b[j >> 2] | 0)) {\n          j = pa(g) | 0;\n          a = b[i >> 2] | 0;\n          if (j | (a | 0) == (c | 0)) { e = (e + 1 | 0) % 6 | 0; }\n        }\n        if ((k | 0) == 3 & (a | 0) == (c | 0)) {\n          e = (e + 5 | 0) % 6 | 0;\n          break;\n        }\n        if ((k | 0) == 5 & (a | 0) == (h | 0)) { e = (e + 1 | 0) % 6 | 0; }\n      } } while (0);\n      b[d >> 2] = e;\n      d = 0;\n      T = l;\n      return d | 0;\n    }\n    function td(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0;\n      u = T;\n      T = T + 32 | 0;\n      t = u + 24 | 0;\n      r = u + 20 | 0;\n      p = u + 8 | 0;\n      o = u + 16 | 0;\n      n = u;\n      j = (Kb(a, c) | 0) == 0;\n      j = j ? 6 : 5;\n      l = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      l = l & 15;\n      if (j >>> 0 <= d >>> 0) {\n        e = 2;\n        T = u;\n        return e | 0;\n      }\n      m = (l | 0) == 0;\n      if (!m ? (q = Ud(7, 0, (l ^ 15) * 3 | 0) | 0, (q & a | 0) == 0 & ((H() | 0) & c | 0) == 0) : 0) { f = d; }else { g = 4; }\n      a: do { if ((g | 0) == 4) {\n        f = (Kb(a, c) | 0) != 0;\n        if (((f ? 4 : 5) | 0) < (d | 0)) {\n          e = 1;\n          T = u;\n          return e | 0;\n        }\n        if (sd(a, c, t) | 0) {\n          e = 1;\n          T = u;\n          return e | 0;\n        }\n        g = (b[t >> 2] | 0) + d | 0;\n        if (f) { f = 26704 + (((g | 0) % 5 | 0) << 2) | 0; }else { f = 26736 + (((g | 0) % 6 | 0) << 2) | 0; }\n        q = b[f >> 2] | 0;\n        if ((q | 0) == 7) {\n          e = 1;\n          T = u;\n          return e | 0;\n        }\n        b[r >> 2] = 0;\n        f = ea(a, c, q, r, p) | 0;\n        do { if (!f) {\n          i = p;\n          k = b[i >> 2] | 0;\n          i = b[i + 4 >> 2] | 0;\n          h = i >>> 0 < c >>> 0 | (i | 0) == (c | 0) & k >>> 0 < a >>> 0;\n          g = h ? k : a;\n          h = h ? i : c;\n          if (!m ? (m = Ud(7, 0, (l ^ 15) * 3 | 0) | 0, (k & m | 0) == 0 & (i & (H() | 0) | 0) == 0) : 0) { f = d; }else {\n            i = (d + -1 + j | 0) % (j | 0) | 0;\n            f = Kb(a, c) | 0;\n            if ((i | 0) < 0) { I(27795, 27797, 248, 27822); }\n            j = (f | 0) != 0;\n            if (((j ? 4 : 5) | 0) < (i | 0)) { I(27795, 27797, 248, 27822); }\n            if (sd(a, c, t) | 0) { I(27795, 27797, 248, 27822); }\n            f = (b[t >> 2] | 0) + i | 0;\n            if (j) { f = 26704 + (((f | 0) % 5 | 0) << 2) | 0; }else { f = 26736 + (((f | 0) % 6 | 0) << 2) | 0; }\n            i = b[f >> 2] | 0;\n            if ((i | 0) == 7) { I(27795, 27797, 248, 27822); }\n            b[o >> 2] = 0;\n            f = ea(a, c, i, o, n) | 0;\n            if (f | 0) { break; }\n            k = n;\n            j = b[k >> 2] | 0;\n            k = b[k + 4 >> 2] | 0;\n            do { if (k >>> 0 < h >>> 0 | (k | 0) == (h | 0) & j >>> 0 < g >>> 0) {\n              if (!(Kb(j, k) | 0)) { g = b[26800 + ((((b[o >> 2] | 0) + (b[26768 + (i << 2) >> 2] | 0) | 0) % 6 | 0) << 2) >> 2] | 0; }else { g = ia(j, k, a, c) | 0; }\n              f = Kb(j, k) | 0;\n              if ((g + -1 | 0) >>> 0 > 5) {\n                f = -1;\n                g = j;\n                h = k;\n                break;\n              }\n              f = (f | 0) != 0;\n              if ((g | 0) == 1 & f) {\n                f = -1;\n                g = j;\n                h = k;\n                break;\n              }\n              do { if (!(sd(j, k, t) | 0)) {\n                if (f) {\n                  f = ((b[26352 + (g << 2) >> 2] | 0) + 5 - (b[t >> 2] | 0) | 0) % 5 | 0;\n                  break;\n                } else {\n                  f = ((b[26384 + (g << 2) >> 2] | 0) + 6 - (b[t >> 2] | 0) | 0) % 6 | 0;\n                  break;\n                }\n              } else { f = -1; } } while (0);\n              g = j;\n              h = k;\n            } else { f = d; } } while (0);\n            i = p;\n            k = b[i >> 2] | 0;\n            i = b[i + 4 >> 2] | 0;\n          }\n          if ((g | 0) == (k | 0) & (h | 0) == (i | 0)) {\n            j = (Kb(k, i) | 0) != 0;\n            if (j) { a = ia(k, i, a, c) | 0; }else { a = b[26800 + ((((b[r >> 2] | 0) + (b[26768 + (q << 2) >> 2] | 0) | 0) % 6 | 0) << 2) >> 2] | 0; }\n            f = Kb(k, i) | 0;\n            if ((a + -1 | 0) >>> 0 <= 5 ? (s = (f | 0) != 0, !((a | 0) == 1 & s)) : 0) {\n              do { if (!(sd(k, i, t) | 0)) {\n                if (s) {\n                  f = ((b[26352 + (a << 2) >> 2] | 0) + 5 - (b[t >> 2] | 0) | 0) % 5 | 0;\n                  break;\n                } else {\n                  f = ((b[26384 + (a << 2) >> 2] | 0) + 6 - (b[t >> 2] | 0) | 0) % 6 | 0;\n                  break;\n                }\n              } else { f = -1; } } while (0);\n            } else { f = -1; }\n            f = f + 1 | 0;\n            f = (f | 0) == 6 | j & (f | 0) == 5 ? 0 : f;\n          }\n          c = h;\n          a = g;\n          break a;\n        } } while (0);\n        e = f;\n        T = u;\n        return e | 0;\n      } } while (0);\n      s = Ud(f | 0, 0, 56) | 0;\n      t = H() | 0 | c & -2130706433 | 536870912;\n      b[e >> 2] = s | a;\n      b[e + 4 >> 2] = t;\n      e = 0;\n      T = u;\n      return e | 0;\n    }\n    function ud(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0;\n      g = (Kb(a, c) | 0) == 0;\n      e = td(a, c, 0, d) | 0;\n      f = (e | 0) == 0;\n      if (g) {\n        if (!f) {\n          g = e;\n          return g | 0;\n        }\n        e = td(a, c, 1, d + 8 | 0) | 0;\n        if (e | 0) {\n          g = e;\n          return g | 0;\n        }\n        e = td(a, c, 2, d + 16 | 0) | 0;\n        if (e | 0) {\n          g = e;\n          return g | 0;\n        }\n        e = td(a, c, 3, d + 24 | 0) | 0;\n        if (e | 0) {\n          g = e;\n          return g | 0;\n        }\n        e = td(a, c, 4, d + 32 | 0) | 0;\n        if (!e) { return td(a, c, 5, d + 40 | 0) | 0; }else {\n          g = e;\n          return g | 0;\n        }\n      }\n      if (!f) {\n        g = e;\n        return g | 0;\n      }\n      e = td(a, c, 1, d + 8 | 0) | 0;\n      if (e | 0) {\n        g = e;\n        return g | 0;\n      }\n      e = td(a, c, 2, d + 16 | 0) | 0;\n      if (e | 0) {\n        g = e;\n        return g | 0;\n      }\n      e = td(a, c, 3, d + 24 | 0) | 0;\n      if (e | 0) {\n        g = e;\n        return g | 0;\n      }\n      e = td(a, c, 4, d + 32 | 0) | 0;\n      if (e | 0) {\n        g = e;\n        return g | 0;\n      }\n      g = d + 40 | 0;\n      b[g >> 2] = 0;\n      b[g + 4 >> 2] = 0;\n      g = 0;\n      return g | 0;\n    }\n    function vd(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      j = T;\n      T = T + 192 | 0;\n      f = j;\n      g = j + 168 | 0;\n      h = Td(a | 0, c | 0, 56) | 0;\n      H() | 0;\n      h = h & 7;\n      i = c & -2130706433 | 134217728;\n      e = $b(a, i, g) | 0;\n      if (e | 0) {\n        i = e;\n        T = j;\n        return i | 0;\n      }\n      c = Td(a | 0, c | 0, 52) | 0;\n      H() | 0;\n      c = c & 15;\n      if (!(Kb(a, i) | 0)) { zb(g, c, h, 1, f); }else { vb(g, c, h, 1, f); }\n      i = f + 8 | 0;\n      b[d >> 2] = b[i >> 2];\n      b[d + 4 >> 2] = b[i + 4 >> 2];\n      b[d + 8 >> 2] = b[i + 8 >> 2];\n      b[d + 12 >> 2] = b[i + 12 >> 2];\n      i = 0;\n      T = j;\n      return i | 0;\n    }\n    function wd(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        e = 0,\n        f = 0,\n        g = 0;\n      f = T;\n      T = T + 16 | 0;\n      d = f;\n      if (!(0 == 0 & (c & 2013265920 | 0) == 536870912)) {\n        e = 0;\n        T = f;\n        return e | 0;\n      }\n      e = c & -2130706433 | 134217728;\n      if (!(Fb(a, e) | 0)) {\n        e = 0;\n        T = f;\n        return e | 0;\n      }\n      g = Td(a | 0, c | 0, 56) | 0;\n      H() | 0;\n      g = (td(a, e, g & 7, d) | 0) == 0;\n      e = d;\n      e = g & ((b[e >> 2] | 0) == (a | 0) ? (b[e + 4 >> 2] | 0) == (c | 0) : 0) & 1;\n      T = f;\n      return e | 0;\n    }\n    function xd(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0;\n      if ((c | 0) > 0) {\n        e = Id(c, 4) | 0;\n        b[a >> 2] = e;\n        if (!e) { I(27835, 27858, 40, 27872); }\n      } else { b[a >> 2] = 0; }\n      b[a + 4 >> 2] = c;\n      b[a + 8 >> 2] = 0;\n      b[a + 12 >> 2] = d;\n      return;\n    }\n    function yd(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      g = a + 4 | 0;\n      h = a + 12 | 0;\n      i = a + 8 | 0;\n      a: while (1) {\n        d = b[g >> 2] | 0;\n        c = 0;\n        while (1) {\n          if ((c | 0) >= (d | 0)) { break a; }\n          f = b[a >> 2] | 0;\n          j = b[f + (c << 2) >> 2] | 0;\n          if (!j) { c = c + 1 | 0; }else { break; }\n        }\n        c = f + (~~(+q(+(+s(10.0, + +(15 - (b[h >> 2] | 0) | 0)) * (+e[j >> 3] + +e[j + 8 >> 3]))) % +(d | 0)) >>> 0 << 2) | 0;\n        d = b[c >> 2] | 0;\n        b: do { if (d | 0) {\n          f = j + 32 | 0;\n          if ((d | 0) == (j | 0)) { b[c >> 2] = b[f >> 2]; }else {\n            d = d + 32 | 0;\n            c = b[d >> 2] | 0;\n            if (!c) { break; }\n            while (1) {\n              if ((c | 0) == (j | 0)) { break; }\n              d = c + 32 | 0;\n              c = b[d >> 2] | 0;\n              if (!c) { break b; }\n            }\n            b[d >> 2] = b[f >> 2];\n          }\n          Hd(j);\n          b[i >> 2] = (b[i >> 2] | 0) + -1;\n        } } while (0);\n      }\n      Hd(b[a >> 2] | 0);\n      return;\n    }\n    function zd(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0;\n      e = b[a + 4 >> 2] | 0;\n      d = 0;\n      while (1) {\n        if ((d | 0) >= (e | 0)) {\n          c = 0;\n          d = 4;\n          break;\n        }\n        c = b[(b[a >> 2] | 0) + (d << 2) >> 2] | 0;\n        if (!c) { d = d + 1 | 0; }else {\n          d = 4;\n          break;\n        }\n      }\n      if ((d | 0) == 4) { return c | 0; }\n      return 0;\n    }\n    function Ad(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0,\n        f = 0,\n        g = 0,\n        h = 0;\n      d = ~~(+q(+(+s(10.0, + +(15 - (b[a + 12 >> 2] | 0) | 0)) * (+e[c >> 3] + +e[c + 8 >> 3]))) % +(b[a + 4 >> 2] | 0)) >>> 0;\n      d = (b[a >> 2] | 0) + (d << 2) | 0;\n      f = b[d >> 2] | 0;\n      if (!f) {\n        h = 1;\n        return h | 0;\n      }\n      h = c + 32 | 0;\n      do { if ((f | 0) != (c | 0)) {\n        d = b[f + 32 >> 2] | 0;\n        if (!d) {\n          h = 1;\n          return h | 0;\n        }\n        g = d;\n        while (1) {\n          if ((g | 0) == (c | 0)) {\n            g = 8;\n            break;\n          }\n          d = b[g + 32 >> 2] | 0;\n          if (!d) {\n            d = 1;\n            g = 10;\n            break;\n          } else {\n            f = g;\n            g = d;\n          }\n        }\n        if ((g | 0) == 8) {\n          b[f + 32 >> 2] = b[h >> 2];\n          break;\n        } else if ((g | 0) == 10) { return d | 0; }\n      } else { b[d >> 2] = b[h >> 2]; } } while (0);\n      Hd(c);\n      h = a + 8 | 0;\n      b[h >> 2] = (b[h >> 2] | 0) + -1;\n      h = 0;\n      return h | 0;\n    }\n    function Bd(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      h = Gd(40) | 0;\n      if (!h) { I(27888, 27858, 98, 27901); }\n      b[h >> 2] = b[c >> 2];\n      b[h + 4 >> 2] = b[c + 4 >> 2];\n      b[h + 8 >> 2] = b[c + 8 >> 2];\n      b[h + 12 >> 2] = b[c + 12 >> 2];\n      g = h + 16 | 0;\n      b[g >> 2] = b[d >> 2];\n      b[g + 4 >> 2] = b[d + 4 >> 2];\n      b[g + 8 >> 2] = b[d + 8 >> 2];\n      b[g + 12 >> 2] = b[d + 12 >> 2];\n      b[h + 32 >> 2] = 0;\n      g = ~~(+q(+(+s(10.0, + +(15 - (b[a + 12 >> 2] | 0) | 0)) * (+e[c >> 3] + +e[c + 8 >> 3]))) % +(b[a + 4 >> 2] | 0)) >>> 0;\n      g = (b[a >> 2] | 0) + (g << 2) | 0;\n      f = b[g >> 2] | 0;\n      do { if (!f) { b[g >> 2] = h; }else {\n        while (1) {\n          if (mc(f, c) | 0 ? mc(f + 16 | 0, d) | 0 : 0) { break; }\n          g = b[f + 32 >> 2] | 0;\n          f = (g | 0) == 0 ? f : g;\n          if (!(b[f + 32 >> 2] | 0)) {\n            i = 10;\n            break;\n          }\n        }\n        if ((i | 0) == 10) {\n          b[f + 32 >> 2] = h;\n          break;\n        }\n        Hd(h);\n        i = f;\n        return i | 0;\n      } } while (0);\n      i = a + 8 | 0;\n      b[i >> 2] = (b[i >> 2] | 0) + 1;\n      i = h;\n      return i | 0;\n    }\n    function Cd(a, c, d) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      var f = 0,\n        g = 0;\n      g = ~~(+q(+(+s(10.0, + +(15 - (b[a + 12 >> 2] | 0) | 0)) * (+e[c >> 3] + +e[c + 8 >> 3]))) % +(b[a + 4 >> 2] | 0)) >>> 0;\n      g = b[(b[a >> 2] | 0) + (g << 2) >> 2] | 0;\n      if (!g) {\n        d = 0;\n        return d | 0;\n      }\n      if (!d) {\n        a = g;\n        while (1) {\n          if (mc(a, c) | 0) {\n            f = 10;\n            break;\n          }\n          a = b[a + 32 >> 2] | 0;\n          if (!a) {\n            a = 0;\n            f = 10;\n            break;\n          }\n        }\n        if ((f | 0) == 10) { return a | 0; }\n      }\n      a = g;\n      while (1) {\n        if (mc(a, c) | 0 ? mc(a + 16 | 0, d) | 0 : 0) {\n          f = 10;\n          break;\n        }\n        a = b[a + 32 >> 2] | 0;\n        if (!a) {\n          a = 0;\n          f = 10;\n          break;\n        }\n      }\n      if ((f | 0) == 10) { return a | 0; }\n      return 0;\n    }\n    function Dd(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0;\n      d = ~~(+q(+(+s(10.0, + +(15 - (b[a + 12 >> 2] | 0) | 0)) * (+e[c >> 3] + +e[c + 8 >> 3]))) % +(b[a + 4 >> 2] | 0)) >>> 0;\n      a = b[(b[a >> 2] | 0) + (d << 2) >> 2] | 0;\n      if (!a) {\n        d = 0;\n        return d | 0;\n      }\n      while (1) {\n        if (mc(a, c) | 0) {\n          c = 5;\n          break;\n        }\n        a = b[a + 32 >> 2] | 0;\n        if (!a) {\n          a = 0;\n          c = 5;\n          break;\n        }\n      }\n      if ((c | 0) == 5) { return a | 0; }\n      return 0;\n    }\n    function Ed() {\n      return 27920;\n    }\n    function Fd(a) {\n      a = +a;\n      return ~~+$d(+a) | 0;\n    }\n    function Gd(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        t = 0,\n        u = 0,\n        v = 0,\n        w = 0;\n      w = T;\n      T = T + 16 | 0;\n      n = w;\n      do { if (a >>> 0 < 245) {\n        k = a >>> 0 < 11 ? 16 : a + 11 & -8;\n        a = k >>> 3;\n        m = b[6981] | 0;\n        d = m >>> a;\n        if (d & 3 | 0) {\n          c = (d & 1 ^ 1) + a | 0;\n          a = 27964 + (c << 1 << 2) | 0;\n          d = a + 8 | 0;\n          e = b[d >> 2] | 0;\n          f = e + 8 | 0;\n          g = b[f >> 2] | 0;\n          if ((g | 0) == (a | 0)) { b[6981] = m & ~(1 << c); }else {\n            b[g + 12 >> 2] = a;\n            b[d >> 2] = g;\n          }\n          v = c << 3;\n          b[e + 4 >> 2] = v | 3;\n          v = e + v + 4 | 0;\n          b[v >> 2] = b[v >> 2] | 1;\n          v = f;\n          T = w;\n          return v | 0;\n        }\n        l = b[6983] | 0;\n        if (k >>> 0 > l >>> 0) {\n          if (d | 0) {\n            c = 2 << a;\n            c = d << a & (c | 0 - c);\n            c = (c & 0 - c) + -1 | 0;\n            i = c >>> 12 & 16;\n            c = c >>> i;\n            d = c >>> 5 & 8;\n            c = c >>> d;\n            g = c >>> 2 & 4;\n            c = c >>> g;\n            a = c >>> 1 & 2;\n            c = c >>> a;\n            e = c >>> 1 & 1;\n            e = (d | i | g | a | e) + (c >>> e) | 0;\n            c = 27964 + (e << 1 << 2) | 0;\n            a = c + 8 | 0;\n            g = b[a >> 2] | 0;\n            i = g + 8 | 0;\n            d = b[i >> 2] | 0;\n            if ((d | 0) == (c | 0)) {\n              a = m & ~(1 << e);\n              b[6981] = a;\n            } else {\n              b[d + 12 >> 2] = c;\n              b[a >> 2] = d;\n              a = m;\n            }\n            v = e << 3;\n            h = v - k | 0;\n            b[g + 4 >> 2] = k | 3;\n            f = g + k | 0;\n            b[f + 4 >> 2] = h | 1;\n            b[g + v >> 2] = h;\n            if (l | 0) {\n              e = b[6986] | 0;\n              c = l >>> 3;\n              d = 27964 + (c << 1 << 2) | 0;\n              c = 1 << c;\n              if (!(a & c)) {\n                b[6981] = a | c;\n                c = d;\n                a = d + 8 | 0;\n              } else {\n                a = d + 8 | 0;\n                c = b[a >> 2] | 0;\n              }\n              b[a >> 2] = e;\n              b[c + 12 >> 2] = e;\n              b[e + 8 >> 2] = c;\n              b[e + 12 >> 2] = d;\n            }\n            b[6983] = h;\n            b[6986] = f;\n            v = i;\n            T = w;\n            return v | 0;\n          }\n          g = b[6982] | 0;\n          if (g) {\n            d = (g & 0 - g) + -1 | 0;\n            f = d >>> 12 & 16;\n            d = d >>> f;\n            e = d >>> 5 & 8;\n            d = d >>> e;\n            h = d >>> 2 & 4;\n            d = d >>> h;\n            i = d >>> 1 & 2;\n            d = d >>> i;\n            j = d >>> 1 & 1;\n            j = b[28228 + ((e | f | h | i | j) + (d >>> j) << 2) >> 2] | 0;\n            d = j;\n            i = j;\n            j = (b[j + 4 >> 2] & -8) - k | 0;\n            while (1) {\n              a = b[d + 16 >> 2] | 0;\n              if (!a) {\n                a = b[d + 20 >> 2] | 0;\n                if (!a) { break; }\n              }\n              h = (b[a + 4 >> 2] & -8) - k | 0;\n              f = h >>> 0 < j >>> 0;\n              d = a;\n              i = f ? a : i;\n              j = f ? h : j;\n            }\n            h = i + k | 0;\n            if (h >>> 0 > i >>> 0) {\n              f = b[i + 24 >> 2] | 0;\n              c = b[i + 12 >> 2] | 0;\n              do { if ((c | 0) == (i | 0)) {\n                a = i + 20 | 0;\n                c = b[a >> 2] | 0;\n                if (!c) {\n                  a = i + 16 | 0;\n                  c = b[a >> 2] | 0;\n                  if (!c) {\n                    d = 0;\n                    break;\n                  }\n                }\n                while (1) {\n                  e = c + 20 | 0;\n                  d = b[e >> 2] | 0;\n                  if (!d) {\n                    e = c + 16 | 0;\n                    d = b[e >> 2] | 0;\n                    if (!d) { break; }else {\n                      c = d;\n                      a = e;\n                    }\n                  } else {\n                    c = d;\n                    a = e;\n                  }\n                }\n                b[a >> 2] = 0;\n                d = c;\n              } else {\n                d = b[i + 8 >> 2] | 0;\n                b[d + 12 >> 2] = c;\n                b[c + 8 >> 2] = d;\n                d = c;\n              } } while (0);\n              do { if (f | 0) {\n                c = b[i + 28 >> 2] | 0;\n                a = 28228 + (c << 2) | 0;\n                if ((i | 0) == (b[a >> 2] | 0)) {\n                  b[a >> 2] = d;\n                  if (!d) {\n                    b[6982] = g & ~(1 << c);\n                    break;\n                  }\n                } else {\n                  v = f + 16 | 0;\n                  b[((b[v >> 2] | 0) == (i | 0) ? v : f + 20 | 0) >> 2] = d;\n                  if (!d) { break; }\n                }\n                b[d + 24 >> 2] = f;\n                c = b[i + 16 >> 2] | 0;\n                if (c | 0) {\n                  b[d + 16 >> 2] = c;\n                  b[c + 24 >> 2] = d;\n                }\n                c = b[i + 20 >> 2] | 0;\n                if (c | 0) {\n                  b[d + 20 >> 2] = c;\n                  b[c + 24 >> 2] = d;\n                }\n              } } while (0);\n              if (j >>> 0 < 16) {\n                v = j + k | 0;\n                b[i + 4 >> 2] = v | 3;\n                v = i + v + 4 | 0;\n                b[v >> 2] = b[v >> 2] | 1;\n              } else {\n                b[i + 4 >> 2] = k | 3;\n                b[h + 4 >> 2] = j | 1;\n                b[h + j >> 2] = j;\n                if (l | 0) {\n                  e = b[6986] | 0;\n                  c = l >>> 3;\n                  d = 27964 + (c << 1 << 2) | 0;\n                  c = 1 << c;\n                  if (!(c & m)) {\n                    b[6981] = c | m;\n                    c = d;\n                    a = d + 8 | 0;\n                  } else {\n                    a = d + 8 | 0;\n                    c = b[a >> 2] | 0;\n                  }\n                  b[a >> 2] = e;\n                  b[c + 12 >> 2] = e;\n                  b[e + 8 >> 2] = c;\n                  b[e + 12 >> 2] = d;\n                }\n                b[6983] = j;\n                b[6986] = h;\n              }\n              v = i + 8 | 0;\n              T = w;\n              return v | 0;\n            } else { m = k; }\n          } else { m = k; }\n        } else { m = k; }\n      } else if (a >>> 0 <= 4294967231) {\n        a = a + 11 | 0;\n        k = a & -8;\n        e = b[6982] | 0;\n        if (e) {\n          f = 0 - k | 0;\n          a = a >>> 8;\n          if (a) {\n            if (k >>> 0 > 16777215) { j = 31; }else {\n              m = (a + 1048320 | 0) >>> 16 & 8;\n              q = a << m;\n              i = (q + 520192 | 0) >>> 16 & 4;\n              q = q << i;\n              j = (q + 245760 | 0) >>> 16 & 2;\n              j = 14 - (i | m | j) + (q << j >>> 15) | 0;\n              j = k >>> (j + 7 | 0) & 1 | j << 1;\n            }\n          } else { j = 0; }\n          d = b[28228 + (j << 2) >> 2] | 0;\n          a: do { if (!d) {\n            d = 0;\n            a = 0;\n            q = 61;\n          } else {\n            a = 0;\n            i = k << ((j | 0) == 31 ? 0 : 25 - (j >>> 1) | 0);\n            g = 0;\n            while (1) {\n              h = (b[d + 4 >> 2] & -8) - k | 0;\n              if (h >>> 0 < f >>> 0) { if (!h) {\n                a = d;\n                f = 0;\n                q = 65;\n                break a;\n              } else {\n                a = d;\n                f = h;\n              } }\n              q = b[d + 20 >> 2] | 0;\n              d = b[d + 16 + (i >>> 31 << 2) >> 2] | 0;\n              g = (q | 0) == 0 | (q | 0) == (d | 0) ? g : q;\n              if (!d) {\n                d = g;\n                q = 61;\n                break;\n              } else { i = i << 1; }\n            }\n          } } while (0);\n          if ((q | 0) == 61) {\n            if ((d | 0) == 0 & (a | 0) == 0) {\n              a = 2 << j;\n              a = (a | 0 - a) & e;\n              if (!a) {\n                m = k;\n                break;\n              }\n              m = (a & 0 - a) + -1 | 0;\n              h = m >>> 12 & 16;\n              m = m >>> h;\n              g = m >>> 5 & 8;\n              m = m >>> g;\n              i = m >>> 2 & 4;\n              m = m >>> i;\n              j = m >>> 1 & 2;\n              m = m >>> j;\n              d = m >>> 1 & 1;\n              a = 0;\n              d = b[28228 + ((g | h | i | j | d) + (m >>> d) << 2) >> 2] | 0;\n            }\n            if (!d) {\n              i = a;\n              h = f;\n            } else { q = 65; }\n          }\n          if ((q | 0) == 65) {\n            g = d;\n            while (1) {\n              m = (b[g + 4 >> 2] & -8) - k | 0;\n              d = m >>> 0 < f >>> 0;\n              f = d ? m : f;\n              a = d ? g : a;\n              d = b[g + 16 >> 2] | 0;\n              if (!d) { d = b[g + 20 >> 2] | 0; }\n              if (!d) {\n                i = a;\n                h = f;\n                break;\n              } else { g = d; }\n            }\n          }\n          if (((i | 0) != 0 ? h >>> 0 < ((b[6983] | 0) - k | 0) >>> 0 : 0) ? (l = i + k | 0, l >>> 0 > i >>> 0) : 0) {\n            g = b[i + 24 >> 2] | 0;\n            c = b[i + 12 >> 2] | 0;\n            do { if ((c | 0) == (i | 0)) {\n              a = i + 20 | 0;\n              c = b[a >> 2] | 0;\n              if (!c) {\n                a = i + 16 | 0;\n                c = b[a >> 2] | 0;\n                if (!c) {\n                  c = 0;\n                  break;\n                }\n              }\n              while (1) {\n                f = c + 20 | 0;\n                d = b[f >> 2] | 0;\n                if (!d) {\n                  f = c + 16 | 0;\n                  d = b[f >> 2] | 0;\n                  if (!d) { break; }else {\n                    c = d;\n                    a = f;\n                  }\n                } else {\n                  c = d;\n                  a = f;\n                }\n              }\n              b[a >> 2] = 0;\n            } else {\n              v = b[i + 8 >> 2] | 0;\n              b[v + 12 >> 2] = c;\n              b[c + 8 >> 2] = v;\n            } } while (0);\n            do { if (g) {\n              a = b[i + 28 >> 2] | 0;\n              d = 28228 + (a << 2) | 0;\n              if ((i | 0) == (b[d >> 2] | 0)) {\n                b[d >> 2] = c;\n                if (!c) {\n                  e = e & ~(1 << a);\n                  b[6982] = e;\n                  break;\n                }\n              } else {\n                v = g + 16 | 0;\n                b[((b[v >> 2] | 0) == (i | 0) ? v : g + 20 | 0) >> 2] = c;\n                if (!c) { break; }\n              }\n              b[c + 24 >> 2] = g;\n              a = b[i + 16 >> 2] | 0;\n              if (a | 0) {\n                b[c + 16 >> 2] = a;\n                b[a + 24 >> 2] = c;\n              }\n              a = b[i + 20 >> 2] | 0;\n              if (a) {\n                b[c + 20 >> 2] = a;\n                b[a + 24 >> 2] = c;\n              }\n            } } while (0);\n            b: do { if (h >>> 0 < 16) {\n              v = h + k | 0;\n              b[i + 4 >> 2] = v | 3;\n              v = i + v + 4 | 0;\n              b[v >> 2] = b[v >> 2] | 1;\n            } else {\n              b[i + 4 >> 2] = k | 3;\n              b[l + 4 >> 2] = h | 1;\n              b[l + h >> 2] = h;\n              c = h >>> 3;\n              if (h >>> 0 < 256) {\n                d = 27964 + (c << 1 << 2) | 0;\n                a = b[6981] | 0;\n                c = 1 << c;\n                if (!(a & c)) {\n                  b[6981] = a | c;\n                  c = d;\n                  a = d + 8 | 0;\n                } else {\n                  a = d + 8 | 0;\n                  c = b[a >> 2] | 0;\n                }\n                b[a >> 2] = l;\n                b[c + 12 >> 2] = l;\n                b[l + 8 >> 2] = c;\n                b[l + 12 >> 2] = d;\n                break;\n              }\n              c = h >>> 8;\n              if (c) {\n                if (h >>> 0 > 16777215) { d = 31; }else {\n                  u = (c + 1048320 | 0) >>> 16 & 8;\n                  v = c << u;\n                  t = (v + 520192 | 0) >>> 16 & 4;\n                  v = v << t;\n                  d = (v + 245760 | 0) >>> 16 & 2;\n                  d = 14 - (t | u | d) + (v << d >>> 15) | 0;\n                  d = h >>> (d + 7 | 0) & 1 | d << 1;\n                }\n              } else { d = 0; }\n              c = 28228 + (d << 2) | 0;\n              b[l + 28 >> 2] = d;\n              a = l + 16 | 0;\n              b[a + 4 >> 2] = 0;\n              b[a >> 2] = 0;\n              a = 1 << d;\n              if (!(e & a)) {\n                b[6982] = e | a;\n                b[c >> 2] = l;\n                b[l + 24 >> 2] = c;\n                b[l + 12 >> 2] = l;\n                b[l + 8 >> 2] = l;\n                break;\n              }\n              c = b[c >> 2] | 0;\n              c: do { if ((b[c + 4 >> 2] & -8 | 0) != (h | 0)) {\n                e = h << ((d | 0) == 31 ? 0 : 25 - (d >>> 1) | 0);\n                while (1) {\n                  d = c + 16 + (e >>> 31 << 2) | 0;\n                  a = b[d >> 2] | 0;\n                  if (!a) { break; }\n                  if ((b[a + 4 >> 2] & -8 | 0) == (h | 0)) {\n                    c = a;\n                    break c;\n                  } else {\n                    e = e << 1;\n                    c = a;\n                  }\n                }\n                b[d >> 2] = l;\n                b[l + 24 >> 2] = c;\n                b[l + 12 >> 2] = l;\n                b[l + 8 >> 2] = l;\n                break b;\n              } } while (0);\n              u = c + 8 | 0;\n              v = b[u >> 2] | 0;\n              b[v + 12 >> 2] = l;\n              b[u >> 2] = l;\n              b[l + 8 >> 2] = v;\n              b[l + 12 >> 2] = c;\n              b[l + 24 >> 2] = 0;\n            } } while (0);\n            v = i + 8 | 0;\n            T = w;\n            return v | 0;\n          } else { m = k; }\n        } else { m = k; }\n      } else { m = -1; } } while (0);\n      d = b[6983] | 0;\n      if (d >>> 0 >= m >>> 0) {\n        c = d - m | 0;\n        a = b[6986] | 0;\n        if (c >>> 0 > 15) {\n          v = a + m | 0;\n          b[6986] = v;\n          b[6983] = c;\n          b[v + 4 >> 2] = c | 1;\n          b[a + d >> 2] = c;\n          b[a + 4 >> 2] = m | 3;\n        } else {\n          b[6983] = 0;\n          b[6986] = 0;\n          b[a + 4 >> 2] = d | 3;\n          v = a + d + 4 | 0;\n          b[v >> 2] = b[v >> 2] | 1;\n        }\n        v = a + 8 | 0;\n        T = w;\n        return v | 0;\n      }\n      h = b[6984] | 0;\n      if (h >>> 0 > m >>> 0) {\n        t = h - m | 0;\n        b[6984] = t;\n        v = b[6987] | 0;\n        u = v + m | 0;\n        b[6987] = u;\n        b[u + 4 >> 2] = t | 1;\n        b[v + 4 >> 2] = m | 3;\n        v = v + 8 | 0;\n        T = w;\n        return v | 0;\n      }\n      if (!(b[7099] | 0)) {\n        b[7101] = 4096;\n        b[7100] = 4096;\n        b[7102] = -1;\n        b[7103] = -1;\n        b[7104] = 0;\n        b[7092] = 0;\n        b[7099] = n & -16 ^ 1431655768;\n        a = 4096;\n      } else { a = b[7101] | 0; }\n      i = m + 48 | 0;\n      j = m + 47 | 0;\n      g = a + j | 0;\n      f = 0 - a | 0;\n      k = g & f;\n      if (k >>> 0 <= m >>> 0) {\n        v = 0;\n        T = w;\n        return v | 0;\n      }\n      a = b[7091] | 0;\n      if (a | 0 ? (l = b[7089] | 0, n = l + k | 0, n >>> 0 <= l >>> 0 | n >>> 0 > a >>> 0) : 0) {\n        v = 0;\n        T = w;\n        return v | 0;\n      }\n      d: do { if (!(b[7092] & 4)) {\n        d = b[6987] | 0;\n        e: do { if (d) {\n          e = 28372;\n          while (1) {\n            n = b[e >> 2] | 0;\n            if (n >>> 0 <= d >>> 0 ? (n + (b[e + 4 >> 2] | 0) | 0) >>> 0 > d >>> 0 : 0) { break; }\n            a = b[e + 8 >> 2] | 0;\n            if (!a) {\n              q = 128;\n              break e;\n            } else { e = a; }\n          }\n          c = g - h & f;\n          if (c >>> 0 < 2147483647) {\n            a = ae(c | 0) | 0;\n            if ((a | 0) == ((b[e >> 2] | 0) + (b[e + 4 >> 2] | 0) | 0)) {\n              if ((a | 0) != (-1 | 0)) {\n                h = c;\n                g = a;\n                q = 145;\n                break d;\n              }\n            } else {\n              e = a;\n              q = 136;\n            }\n          } else { c = 0; }\n        } else { q = 128; } } while (0);\n        do { if ((q | 0) == 128) {\n          d = ae(0) | 0;\n          if ((d | 0) != (-1 | 0) ? (c = d, o = b[7100] | 0, p = o + -1 | 0, c = ((p & c | 0) == 0 ? 0 : (p + c & 0 - o) - c | 0) + k | 0, o = b[7089] | 0, p = c + o | 0, c >>> 0 > m >>> 0 & c >>> 0 < 2147483647) : 0) {\n            n = b[7091] | 0;\n            if (n | 0 ? p >>> 0 <= o >>> 0 | p >>> 0 > n >>> 0 : 0) {\n              c = 0;\n              break;\n            }\n            a = ae(c | 0) | 0;\n            if ((a | 0) == (d | 0)) {\n              h = c;\n              g = d;\n              q = 145;\n              break d;\n            } else {\n              e = a;\n              q = 136;\n            }\n          } else { c = 0; }\n        } } while (0);\n        do { if ((q | 0) == 136) {\n          d = 0 - c | 0;\n          if (!(i >>> 0 > c >>> 0 & (c >>> 0 < 2147483647 & (e | 0) != (-1 | 0)))) { if ((e | 0) == (-1 | 0)) {\n            c = 0;\n            break;\n          } else {\n            h = c;\n            g = e;\n            q = 145;\n            break d;\n          } }\n          a = b[7101] | 0;\n          a = j - c + a & 0 - a;\n          if (a >>> 0 >= 2147483647) {\n            h = c;\n            g = e;\n            q = 145;\n            break d;\n          }\n          if ((ae(a | 0) | 0) == (-1 | 0)) {\n            ae(d | 0) | 0;\n            c = 0;\n            break;\n          } else {\n            h = a + c | 0;\n            g = e;\n            q = 145;\n            break d;\n          }\n        } } while (0);\n        b[7092] = b[7092] | 4;\n        q = 143;\n      } else {\n        c = 0;\n        q = 143;\n      } } while (0);\n      if (((q | 0) == 143 ? k >>> 0 < 2147483647 : 0) ? (t = ae(k | 0) | 0, p = ae(0) | 0, r = p - t | 0, s = r >>> 0 > (m + 40 | 0) >>> 0, !((t | 0) == (-1 | 0) | s ^ 1 | t >>> 0 < p >>> 0 & ((t | 0) != (-1 | 0) & (p | 0) != (-1 | 0)) ^ 1)) : 0) {\n        h = s ? r : c;\n        g = t;\n        q = 145;\n      }\n      if ((q | 0) == 145) {\n        c = (b[7089] | 0) + h | 0;\n        b[7089] = c;\n        if (c >>> 0 > (b[7090] | 0) >>> 0) { b[7090] = c; }\n        j = b[6987] | 0;\n        f: do { if (j) {\n          c = 28372;\n          while (1) {\n            a = b[c >> 2] | 0;\n            d = b[c + 4 >> 2] | 0;\n            if ((g | 0) == (a + d | 0)) {\n              q = 154;\n              break;\n            }\n            e = b[c + 8 >> 2] | 0;\n            if (!e) { break; }else { c = e; }\n          }\n          if (((q | 0) == 154 ? (u = c + 4 | 0, (b[c + 12 >> 2] & 8 | 0) == 0) : 0) ? g >>> 0 > j >>> 0 & a >>> 0 <= j >>> 0 : 0) {\n            b[u >> 2] = d + h;\n            v = (b[6984] | 0) + h | 0;\n            t = j + 8 | 0;\n            t = (t & 7 | 0) == 0 ? 0 : 0 - t & 7;\n            u = j + t | 0;\n            t = v - t | 0;\n            b[6987] = u;\n            b[6984] = t;\n            b[u + 4 >> 2] = t | 1;\n            b[j + v + 4 >> 2] = 40;\n            b[6988] = b[7103];\n            break;\n          }\n          if (g >>> 0 < (b[6985] | 0) >>> 0) { b[6985] = g; }\n          d = g + h | 0;\n          c = 28372;\n          while (1) {\n            if ((b[c >> 2] | 0) == (d | 0)) {\n              q = 162;\n              break;\n            }\n            a = b[c + 8 >> 2] | 0;\n            if (!a) { break; }else { c = a; }\n          }\n          if ((q | 0) == 162 ? (b[c + 12 >> 2] & 8 | 0) == 0 : 0) {\n            b[c >> 2] = g;\n            l = c + 4 | 0;\n            b[l >> 2] = (b[l >> 2] | 0) + h;\n            l = g + 8 | 0;\n            l = g + ((l & 7 | 0) == 0 ? 0 : 0 - l & 7) | 0;\n            c = d + 8 | 0;\n            c = d + ((c & 7 | 0) == 0 ? 0 : 0 - c & 7) | 0;\n            k = l + m | 0;\n            i = c - l - m | 0;\n            b[l + 4 >> 2] = m | 3;\n            g: do { if ((j | 0) == (c | 0)) {\n              v = (b[6984] | 0) + i | 0;\n              b[6984] = v;\n              b[6987] = k;\n              b[k + 4 >> 2] = v | 1;\n            } else {\n              if ((b[6986] | 0) == (c | 0)) {\n                v = (b[6983] | 0) + i | 0;\n                b[6983] = v;\n                b[6986] = k;\n                b[k + 4 >> 2] = v | 1;\n                b[k + v >> 2] = v;\n                break;\n              }\n              a = b[c + 4 >> 2] | 0;\n              if ((a & 3 | 0) == 1) {\n                h = a & -8;\n                e = a >>> 3;\n                h: do { if (a >>> 0 < 256) {\n                  a = b[c + 8 >> 2] | 0;\n                  d = b[c + 12 >> 2] | 0;\n                  if ((d | 0) == (a | 0)) {\n                    b[6981] = b[6981] & ~(1 << e);\n                    break;\n                  } else {\n                    b[a + 12 >> 2] = d;\n                    b[d + 8 >> 2] = a;\n                    break;\n                  }\n                } else {\n                  g = b[c + 24 >> 2] | 0;\n                  a = b[c + 12 >> 2] | 0;\n                  do { if ((a | 0) == (c | 0)) {\n                    d = c + 16 | 0;\n                    e = d + 4 | 0;\n                    a = b[e >> 2] | 0;\n                    if (!a) {\n                      a = b[d >> 2] | 0;\n                      if (!a) {\n                        a = 0;\n                        break;\n                      }\n                    } else { d = e; }\n                    while (1) {\n                      f = a + 20 | 0;\n                      e = b[f >> 2] | 0;\n                      if (!e) {\n                        f = a + 16 | 0;\n                        e = b[f >> 2] | 0;\n                        if (!e) { break; }else {\n                          a = e;\n                          d = f;\n                        }\n                      } else {\n                        a = e;\n                        d = f;\n                      }\n                    }\n                    b[d >> 2] = 0;\n                  } else {\n                    v = b[c + 8 >> 2] | 0;\n                    b[v + 12 >> 2] = a;\n                    b[a + 8 >> 2] = v;\n                  } } while (0);\n                  if (!g) { break; }\n                  d = b[c + 28 >> 2] | 0;\n                  e = 28228 + (d << 2) | 0;\n                  do { if ((b[e >> 2] | 0) != (c | 0)) {\n                    v = g + 16 | 0;\n                    b[((b[v >> 2] | 0) == (c | 0) ? v : g + 20 | 0) >> 2] = a;\n                    if (!a) { break h; }\n                  } else {\n                    b[e >> 2] = a;\n                    if (a | 0) { break; }\n                    b[6982] = b[6982] & ~(1 << d);\n                    break h;\n                  } } while (0);\n                  b[a + 24 >> 2] = g;\n                  d = c + 16 | 0;\n                  e = b[d >> 2] | 0;\n                  if (e | 0) {\n                    b[a + 16 >> 2] = e;\n                    b[e + 24 >> 2] = a;\n                  }\n                  d = b[d + 4 >> 2] | 0;\n                  if (!d) { break; }\n                  b[a + 20 >> 2] = d;\n                  b[d + 24 >> 2] = a;\n                } } while (0);\n                c = c + h | 0;\n                f = h + i | 0;\n              } else { f = i; }\n              c = c + 4 | 0;\n              b[c >> 2] = b[c >> 2] & -2;\n              b[k + 4 >> 2] = f | 1;\n              b[k + f >> 2] = f;\n              c = f >>> 3;\n              if (f >>> 0 < 256) {\n                d = 27964 + (c << 1 << 2) | 0;\n                a = b[6981] | 0;\n                c = 1 << c;\n                if (!(a & c)) {\n                  b[6981] = a | c;\n                  c = d;\n                  a = d + 8 | 0;\n                } else {\n                  a = d + 8 | 0;\n                  c = b[a >> 2] | 0;\n                }\n                b[a >> 2] = k;\n                b[c + 12 >> 2] = k;\n                b[k + 8 >> 2] = c;\n                b[k + 12 >> 2] = d;\n                break;\n              }\n              c = f >>> 8;\n              do { if (!c) { e = 0; }else {\n                if (f >>> 0 > 16777215) {\n                  e = 31;\n                  break;\n                }\n                u = (c + 1048320 | 0) >>> 16 & 8;\n                v = c << u;\n                t = (v + 520192 | 0) >>> 16 & 4;\n                v = v << t;\n                e = (v + 245760 | 0) >>> 16 & 2;\n                e = 14 - (t | u | e) + (v << e >>> 15) | 0;\n                e = f >>> (e + 7 | 0) & 1 | e << 1;\n              } } while (0);\n              c = 28228 + (e << 2) | 0;\n              b[k + 28 >> 2] = e;\n              a = k + 16 | 0;\n              b[a + 4 >> 2] = 0;\n              b[a >> 2] = 0;\n              a = b[6982] | 0;\n              d = 1 << e;\n              if (!(a & d)) {\n                b[6982] = a | d;\n                b[c >> 2] = k;\n                b[k + 24 >> 2] = c;\n                b[k + 12 >> 2] = k;\n                b[k + 8 >> 2] = k;\n                break;\n              }\n              c = b[c >> 2] | 0;\n              i: do { if ((b[c + 4 >> 2] & -8 | 0) != (f | 0)) {\n                e = f << ((e | 0) == 31 ? 0 : 25 - (e >>> 1) | 0);\n                while (1) {\n                  d = c + 16 + (e >>> 31 << 2) | 0;\n                  a = b[d >> 2] | 0;\n                  if (!a) { break; }\n                  if ((b[a + 4 >> 2] & -8 | 0) == (f | 0)) {\n                    c = a;\n                    break i;\n                  } else {\n                    e = e << 1;\n                    c = a;\n                  }\n                }\n                b[d >> 2] = k;\n                b[k + 24 >> 2] = c;\n                b[k + 12 >> 2] = k;\n                b[k + 8 >> 2] = k;\n                break g;\n              } } while (0);\n              u = c + 8 | 0;\n              v = b[u >> 2] | 0;\n              b[v + 12 >> 2] = k;\n              b[u >> 2] = k;\n              b[k + 8 >> 2] = v;\n              b[k + 12 >> 2] = c;\n              b[k + 24 >> 2] = 0;\n            } } while (0);\n            v = l + 8 | 0;\n            T = w;\n            return v | 0;\n          }\n          c = 28372;\n          while (1) {\n            a = b[c >> 2] | 0;\n            if (a >>> 0 <= j >>> 0 ? (v = a + (b[c + 4 >> 2] | 0) | 0, v >>> 0 > j >>> 0) : 0) { break; }\n            c = b[c + 8 >> 2] | 0;\n          }\n          f = v + -47 | 0;\n          a = f + 8 | 0;\n          a = f + ((a & 7 | 0) == 0 ? 0 : 0 - a & 7) | 0;\n          f = j + 16 | 0;\n          a = a >>> 0 < f >>> 0 ? j : a;\n          c = a + 8 | 0;\n          d = h + -40 | 0;\n          t = g + 8 | 0;\n          t = (t & 7 | 0) == 0 ? 0 : 0 - t & 7;\n          u = g + t | 0;\n          t = d - t | 0;\n          b[6987] = u;\n          b[6984] = t;\n          b[u + 4 >> 2] = t | 1;\n          b[g + d + 4 >> 2] = 40;\n          b[6988] = b[7103];\n          d = a + 4 | 0;\n          b[d >> 2] = 27;\n          b[c >> 2] = b[7093];\n          b[c + 4 >> 2] = b[7094];\n          b[c + 8 >> 2] = b[7095];\n          b[c + 12 >> 2] = b[7096];\n          b[7093] = g;\n          b[7094] = h;\n          b[7096] = 0;\n          b[7095] = c;\n          c = a + 24 | 0;\n          do {\n            u = c;\n            c = c + 4 | 0;\n            b[c >> 2] = 7;\n          } while ((u + 8 | 0) >>> 0 < v >>> 0);\n          if ((a | 0) != (j | 0)) {\n            g = a - j | 0;\n            b[d >> 2] = b[d >> 2] & -2;\n            b[j + 4 >> 2] = g | 1;\n            b[a >> 2] = g;\n            c = g >>> 3;\n            if (g >>> 0 < 256) {\n              d = 27964 + (c << 1 << 2) | 0;\n              a = b[6981] | 0;\n              c = 1 << c;\n              if (!(a & c)) {\n                b[6981] = a | c;\n                c = d;\n                a = d + 8 | 0;\n              } else {\n                a = d + 8 | 0;\n                c = b[a >> 2] | 0;\n              }\n              b[a >> 2] = j;\n              b[c + 12 >> 2] = j;\n              b[j + 8 >> 2] = c;\n              b[j + 12 >> 2] = d;\n              break;\n            }\n            c = g >>> 8;\n            if (c) {\n              if (g >>> 0 > 16777215) { e = 31; }else {\n                u = (c + 1048320 | 0) >>> 16 & 8;\n                v = c << u;\n                t = (v + 520192 | 0) >>> 16 & 4;\n                v = v << t;\n                e = (v + 245760 | 0) >>> 16 & 2;\n                e = 14 - (t | u | e) + (v << e >>> 15) | 0;\n                e = g >>> (e + 7 | 0) & 1 | e << 1;\n              }\n            } else { e = 0; }\n            d = 28228 + (e << 2) | 0;\n            b[j + 28 >> 2] = e;\n            b[j + 20 >> 2] = 0;\n            b[f >> 2] = 0;\n            c = b[6982] | 0;\n            a = 1 << e;\n            if (!(c & a)) {\n              b[6982] = c | a;\n              b[d >> 2] = j;\n              b[j + 24 >> 2] = d;\n              b[j + 12 >> 2] = j;\n              b[j + 8 >> 2] = j;\n              break;\n            }\n            c = b[d >> 2] | 0;\n            j: do { if ((b[c + 4 >> 2] & -8 | 0) != (g | 0)) {\n              e = g << ((e | 0) == 31 ? 0 : 25 - (e >>> 1) | 0);\n              while (1) {\n                d = c + 16 + (e >>> 31 << 2) | 0;\n                a = b[d >> 2] | 0;\n                if (!a) { break; }\n                if ((b[a + 4 >> 2] & -8 | 0) == (g | 0)) {\n                  c = a;\n                  break j;\n                } else {\n                  e = e << 1;\n                  c = a;\n                }\n              }\n              b[d >> 2] = j;\n              b[j + 24 >> 2] = c;\n              b[j + 12 >> 2] = j;\n              b[j + 8 >> 2] = j;\n              break f;\n            } } while (0);\n            u = c + 8 | 0;\n            v = b[u >> 2] | 0;\n            b[v + 12 >> 2] = j;\n            b[u >> 2] = j;\n            b[j + 8 >> 2] = v;\n            b[j + 12 >> 2] = c;\n            b[j + 24 >> 2] = 0;\n          }\n        } else {\n          v = b[6985] | 0;\n          if ((v | 0) == 0 | g >>> 0 < v >>> 0) { b[6985] = g; }\n          b[7093] = g;\n          b[7094] = h;\n          b[7096] = 0;\n          b[6990] = b[7099];\n          b[6989] = -1;\n          b[6994] = 27964;\n          b[6993] = 27964;\n          b[6996] = 27972;\n          b[6995] = 27972;\n          b[6998] = 27980;\n          b[6997] = 27980;\n          b[7e3] = 27988;\n          b[6999] = 27988;\n          b[7002] = 27996;\n          b[7001] = 27996;\n          b[7004] = 28004;\n          b[7003] = 28004;\n          b[7006] = 28012;\n          b[7005] = 28012;\n          b[7008] = 28020;\n          b[7007] = 28020;\n          b[7010] = 28028;\n          b[7009] = 28028;\n          b[7012] = 28036;\n          b[7011] = 28036;\n          b[7014] = 28044;\n          b[7013] = 28044;\n          b[7016] = 28052;\n          b[7015] = 28052;\n          b[7018] = 28060;\n          b[7017] = 28060;\n          b[7020] = 28068;\n          b[7019] = 28068;\n          b[7022] = 28076;\n          b[7021] = 28076;\n          b[7024] = 28084;\n          b[7023] = 28084;\n          b[7026] = 28092;\n          b[7025] = 28092;\n          b[7028] = 28100;\n          b[7027] = 28100;\n          b[7030] = 28108;\n          b[7029] = 28108;\n          b[7032] = 28116;\n          b[7031] = 28116;\n          b[7034] = 28124;\n          b[7033] = 28124;\n          b[7036] = 28132;\n          b[7035] = 28132;\n          b[7038] = 28140;\n          b[7037] = 28140;\n          b[7040] = 28148;\n          b[7039] = 28148;\n          b[7042] = 28156;\n          b[7041] = 28156;\n          b[7044] = 28164;\n          b[7043] = 28164;\n          b[7046] = 28172;\n          b[7045] = 28172;\n          b[7048] = 28180;\n          b[7047] = 28180;\n          b[7050] = 28188;\n          b[7049] = 28188;\n          b[7052] = 28196;\n          b[7051] = 28196;\n          b[7054] = 28204;\n          b[7053] = 28204;\n          b[7056] = 28212;\n          b[7055] = 28212;\n          v = h + -40 | 0;\n          t = g + 8 | 0;\n          t = (t & 7 | 0) == 0 ? 0 : 0 - t & 7;\n          u = g + t | 0;\n          t = v - t | 0;\n          b[6987] = u;\n          b[6984] = t;\n          b[u + 4 >> 2] = t | 1;\n          b[g + v + 4 >> 2] = 40;\n          b[6988] = b[7103];\n        } } while (0);\n        c = b[6984] | 0;\n        if (c >>> 0 > m >>> 0) {\n          t = c - m | 0;\n          b[6984] = t;\n          v = b[6987] | 0;\n          u = v + m | 0;\n          b[6987] = u;\n          b[u + 4 >> 2] = t | 1;\n          b[v + 4 >> 2] = m | 3;\n          v = v + 8 | 0;\n          T = w;\n          return v | 0;\n        }\n      }\n      v = Ed() | 0;\n      b[v >> 2] = 12;\n      v = 0;\n      T = w;\n      return v | 0;\n    }\n    function Hd(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      if (!a) { return; }\n      d = a + -8 | 0;\n      f = b[6985] | 0;\n      a = b[a + -4 >> 2] | 0;\n      c = a & -8;\n      j = d + c | 0;\n      do { if (!(a & 1)) {\n        e = b[d >> 2] | 0;\n        if (!(a & 3)) { return; }\n        h = d + (0 - e) | 0;\n        g = e + c | 0;\n        if (h >>> 0 < f >>> 0) { return; }\n        if ((b[6986] | 0) == (h | 0)) {\n          a = j + 4 | 0;\n          c = b[a >> 2] | 0;\n          if ((c & 3 | 0) != 3) {\n            i = h;\n            c = g;\n            break;\n          }\n          b[6983] = g;\n          b[a >> 2] = c & -2;\n          b[h + 4 >> 2] = g | 1;\n          b[h + g >> 2] = g;\n          return;\n        }\n        d = e >>> 3;\n        if (e >>> 0 < 256) {\n          a = b[h + 8 >> 2] | 0;\n          c = b[h + 12 >> 2] | 0;\n          if ((c | 0) == (a | 0)) {\n            b[6981] = b[6981] & ~(1 << d);\n            i = h;\n            c = g;\n            break;\n          } else {\n            b[a + 12 >> 2] = c;\n            b[c + 8 >> 2] = a;\n            i = h;\n            c = g;\n            break;\n          }\n        }\n        f = b[h + 24 >> 2] | 0;\n        a = b[h + 12 >> 2] | 0;\n        do { if ((a | 0) == (h | 0)) {\n          c = h + 16 | 0;\n          d = c + 4 | 0;\n          a = b[d >> 2] | 0;\n          if (!a) {\n            a = b[c >> 2] | 0;\n            if (!a) {\n              a = 0;\n              break;\n            }\n          } else { c = d; }\n          while (1) {\n            e = a + 20 | 0;\n            d = b[e >> 2] | 0;\n            if (!d) {\n              e = a + 16 | 0;\n              d = b[e >> 2] | 0;\n              if (!d) { break; }else {\n                a = d;\n                c = e;\n              }\n            } else {\n              a = d;\n              c = e;\n            }\n          }\n          b[c >> 2] = 0;\n        } else {\n          i = b[h + 8 >> 2] | 0;\n          b[i + 12 >> 2] = a;\n          b[a + 8 >> 2] = i;\n        } } while (0);\n        if (f) {\n          c = b[h + 28 >> 2] | 0;\n          d = 28228 + (c << 2) | 0;\n          if ((b[d >> 2] | 0) == (h | 0)) {\n            b[d >> 2] = a;\n            if (!a) {\n              b[6982] = b[6982] & ~(1 << c);\n              i = h;\n              c = g;\n              break;\n            }\n          } else {\n            i = f + 16 | 0;\n            b[((b[i >> 2] | 0) == (h | 0) ? i : f + 20 | 0) >> 2] = a;\n            if (!a) {\n              i = h;\n              c = g;\n              break;\n            }\n          }\n          b[a + 24 >> 2] = f;\n          c = h + 16 | 0;\n          d = b[c >> 2] | 0;\n          if (d | 0) {\n            b[a + 16 >> 2] = d;\n            b[d + 24 >> 2] = a;\n          }\n          c = b[c + 4 >> 2] | 0;\n          if (c) {\n            b[a + 20 >> 2] = c;\n            b[c + 24 >> 2] = a;\n            i = h;\n            c = g;\n          } else {\n            i = h;\n            c = g;\n          }\n        } else {\n          i = h;\n          c = g;\n        }\n      } else {\n        i = d;\n        h = d;\n      } } while (0);\n      if (h >>> 0 >= j >>> 0) { return; }\n      a = j + 4 | 0;\n      e = b[a >> 2] | 0;\n      if (!(e & 1)) { return; }\n      if (!(e & 2)) {\n        if ((b[6987] | 0) == (j | 0)) {\n          j = (b[6984] | 0) + c | 0;\n          b[6984] = j;\n          b[6987] = i;\n          b[i + 4 >> 2] = j | 1;\n          if ((i | 0) != (b[6986] | 0)) { return; }\n          b[6986] = 0;\n          b[6983] = 0;\n          return;\n        }\n        if ((b[6986] | 0) == (j | 0)) {\n          j = (b[6983] | 0) + c | 0;\n          b[6983] = j;\n          b[6986] = h;\n          b[i + 4 >> 2] = j | 1;\n          b[h + j >> 2] = j;\n          return;\n        }\n        f = (e & -8) + c | 0;\n        d = e >>> 3;\n        do { if (e >>> 0 < 256) {\n          c = b[j + 8 >> 2] | 0;\n          a = b[j + 12 >> 2] | 0;\n          if ((a | 0) == (c | 0)) {\n            b[6981] = b[6981] & ~(1 << d);\n            break;\n          } else {\n            b[c + 12 >> 2] = a;\n            b[a + 8 >> 2] = c;\n            break;\n          }\n        } else {\n          g = b[j + 24 >> 2] | 0;\n          a = b[j + 12 >> 2] | 0;\n          do { if ((a | 0) == (j | 0)) {\n            c = j + 16 | 0;\n            d = c + 4 | 0;\n            a = b[d >> 2] | 0;\n            if (!a) {\n              a = b[c >> 2] | 0;\n              if (!a) {\n                d = 0;\n                break;\n              }\n            } else { c = d; }\n            while (1) {\n              e = a + 20 | 0;\n              d = b[e >> 2] | 0;\n              if (!d) {\n                e = a + 16 | 0;\n                d = b[e >> 2] | 0;\n                if (!d) { break; }else {\n                  a = d;\n                  c = e;\n                }\n              } else {\n                a = d;\n                c = e;\n              }\n            }\n            b[c >> 2] = 0;\n            d = a;\n          } else {\n            d = b[j + 8 >> 2] | 0;\n            b[d + 12 >> 2] = a;\n            b[a + 8 >> 2] = d;\n            d = a;\n          } } while (0);\n          if (g | 0) {\n            a = b[j + 28 >> 2] | 0;\n            c = 28228 + (a << 2) | 0;\n            if ((b[c >> 2] | 0) == (j | 0)) {\n              b[c >> 2] = d;\n              if (!d) {\n                b[6982] = b[6982] & ~(1 << a);\n                break;\n              }\n            } else {\n              e = g + 16 | 0;\n              b[((b[e >> 2] | 0) == (j | 0) ? e : g + 20 | 0) >> 2] = d;\n              if (!d) { break; }\n            }\n            b[d + 24 >> 2] = g;\n            a = j + 16 | 0;\n            c = b[a >> 2] | 0;\n            if (c | 0) {\n              b[d + 16 >> 2] = c;\n              b[c + 24 >> 2] = d;\n            }\n            a = b[a + 4 >> 2] | 0;\n            if (a | 0) {\n              b[d + 20 >> 2] = a;\n              b[a + 24 >> 2] = d;\n            }\n          }\n        } } while (0);\n        b[i + 4 >> 2] = f | 1;\n        b[h + f >> 2] = f;\n        if ((i | 0) == (b[6986] | 0)) {\n          b[6983] = f;\n          return;\n        }\n      } else {\n        b[a >> 2] = e & -2;\n        b[i + 4 >> 2] = c | 1;\n        b[h + c >> 2] = c;\n        f = c;\n      }\n      a = f >>> 3;\n      if (f >>> 0 < 256) {\n        d = 27964 + (a << 1 << 2) | 0;\n        c = b[6981] | 0;\n        a = 1 << a;\n        if (!(c & a)) {\n          b[6981] = c | a;\n          a = d;\n          c = d + 8 | 0;\n        } else {\n          c = d + 8 | 0;\n          a = b[c >> 2] | 0;\n        }\n        b[c >> 2] = i;\n        b[a + 12 >> 2] = i;\n        b[i + 8 >> 2] = a;\n        b[i + 12 >> 2] = d;\n        return;\n      }\n      a = f >>> 8;\n      if (a) {\n        if (f >>> 0 > 16777215) { e = 31; }else {\n          h = (a + 1048320 | 0) >>> 16 & 8;\n          j = a << h;\n          g = (j + 520192 | 0) >>> 16 & 4;\n          j = j << g;\n          e = (j + 245760 | 0) >>> 16 & 2;\n          e = 14 - (g | h | e) + (j << e >>> 15) | 0;\n          e = f >>> (e + 7 | 0) & 1 | e << 1;\n        }\n      } else { e = 0; }\n      a = 28228 + (e << 2) | 0;\n      b[i + 28 >> 2] = e;\n      b[i + 20 >> 2] = 0;\n      b[i + 16 >> 2] = 0;\n      c = b[6982] | 0;\n      d = 1 << e;\n      a: do { if (!(c & d)) {\n        b[6982] = c | d;\n        b[a >> 2] = i;\n        b[i + 24 >> 2] = a;\n        b[i + 12 >> 2] = i;\n        b[i + 8 >> 2] = i;\n      } else {\n        a = b[a >> 2] | 0;\n        b: do { if ((b[a + 4 >> 2] & -8 | 0) != (f | 0)) {\n          e = f << ((e | 0) == 31 ? 0 : 25 - (e >>> 1) | 0);\n          while (1) {\n            d = a + 16 + (e >>> 31 << 2) | 0;\n            c = b[d >> 2] | 0;\n            if (!c) { break; }\n            if ((b[c + 4 >> 2] & -8 | 0) == (f | 0)) {\n              a = c;\n              break b;\n            } else {\n              e = e << 1;\n              a = c;\n            }\n          }\n          b[d >> 2] = i;\n          b[i + 24 >> 2] = a;\n          b[i + 12 >> 2] = i;\n          b[i + 8 >> 2] = i;\n          break a;\n        } } while (0);\n        h = a + 8 | 0;\n        j = b[h >> 2] | 0;\n        b[j + 12 >> 2] = i;\n        b[h >> 2] = i;\n        b[i + 8 >> 2] = j;\n        b[i + 12 >> 2] = a;\n        b[i + 24 >> 2] = 0;\n      } } while (0);\n      j = (b[6989] | 0) + -1 | 0;\n      b[6989] = j;\n      if (j | 0) { return; }\n      a = 28380;\n      while (1) {\n        a = b[a >> 2] | 0;\n        if (!a) { break; }else { a = a + 8 | 0; }\n      }\n      b[6989] = -1;\n      return;\n    }\n    function Id(a, c) {\n      a = a | 0;\n      c = c | 0;\n      var d = 0;\n      if (a) {\n        d = B(c, a) | 0;\n        if ((c | a) >>> 0 > 65535) { d = ((d >>> 0) / (a >>> 0) | 0 | 0) == (c | 0) ? d : -1; }\n      } else { d = 0; }\n      a = Gd(d) | 0;\n      if (!a) { return a | 0; }\n      if (!(b[a + -4 >> 2] & 3)) { return a | 0; }\n      _d(a | 0, 0, d | 0) | 0;\n      return a | 0;\n    }\n    function Jd(a, b, c, d) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      c = a + c >>> 0;\n      return (G(b + d + (c >>> 0 < a >>> 0 | 0) >>> 0 | 0), c | 0) | 0;\n    }\n    function Kd(a, b, c, d) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      d = b - d - (c >>> 0 > a >>> 0 | 0) >>> 0;\n      return (G(d | 0), a - c >>> 0 | 0) | 0;\n    }\n    function Ld(a) {\n      a = a | 0;\n      return (a ? 31 - (E(a ^ a - 1) | 0) | 0 : 32) | 0;\n    }\n    function Md(a, c, d, e, f) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      f = f | 0;\n      var g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0,\n        l = 0,\n        m = 0,\n        n = 0,\n        o = 0,\n        p = 0;\n      l = a;\n      j = c;\n      k = j;\n      h = d;\n      n = e;\n      i = n;\n      if (!k) {\n        g = (f | 0) != 0;\n        if (!i) {\n          if (g) {\n            b[f >> 2] = (l >>> 0) % (h >>> 0);\n            b[f + 4 >> 2] = 0;\n          }\n          n = 0;\n          f = (l >>> 0) / (h >>> 0) >>> 0;\n          return (G(n | 0), f) | 0;\n        } else {\n          if (!g) {\n            n = 0;\n            f = 0;\n            return (G(n | 0), f) | 0;\n          }\n          b[f >> 2] = a | 0;\n          b[f + 4 >> 2] = c & 0;\n          n = 0;\n          f = 0;\n          return (G(n | 0), f) | 0;\n        }\n      }\n      g = (i | 0) == 0;\n      do { if (h) {\n        if (!g) {\n          g = (E(i | 0) | 0) - (E(k | 0) | 0) | 0;\n          if (g >>> 0 <= 31) {\n            m = g + 1 | 0;\n            i = 31 - g | 0;\n            c = g - 31 >> 31;\n            h = m;\n            a = l >>> (m >>> 0) & c | k << i;\n            c = k >>> (m >>> 0) & c;\n            g = 0;\n            i = l << i;\n            break;\n          }\n          if (!f) {\n            n = 0;\n            f = 0;\n            return (G(n | 0), f) | 0;\n          }\n          b[f >> 2] = a | 0;\n          b[f + 4 >> 2] = j | c & 0;\n          n = 0;\n          f = 0;\n          return (G(n | 0), f) | 0;\n        }\n        g = h - 1 | 0;\n        if (g & h | 0) {\n          i = (E(h | 0) | 0) + 33 - (E(k | 0) | 0) | 0;\n          p = 64 - i | 0;\n          m = 32 - i | 0;\n          j = m >> 31;\n          o = i - 32 | 0;\n          c = o >> 31;\n          h = i;\n          a = m - 1 >> 31 & k >>> (o >>> 0) | (k << m | l >>> (i >>> 0)) & c;\n          c = c & k >>> (i >>> 0);\n          g = l << p & j;\n          i = (k << p | l >>> (o >>> 0)) & j | l << m & i - 33 >> 31;\n          break;\n        }\n        if (f | 0) {\n          b[f >> 2] = g & l;\n          b[f + 4 >> 2] = 0;\n        }\n        if ((h | 0) == 1) {\n          o = j | c & 0;\n          p = a | 0 | 0;\n          return (G(o | 0), p) | 0;\n        } else {\n          p = Ld(h | 0) | 0;\n          o = k >>> (p >>> 0) | 0;\n          p = k << 32 - p | l >>> (p >>> 0) | 0;\n          return (G(o | 0), p) | 0;\n        }\n      } else {\n        if (g) {\n          if (f | 0) {\n            b[f >> 2] = (k >>> 0) % (h >>> 0);\n            b[f + 4 >> 2] = 0;\n          }\n          o = 0;\n          p = (k >>> 0) / (h >>> 0) >>> 0;\n          return (G(o | 0), p) | 0;\n        }\n        if (!l) {\n          if (f | 0) {\n            b[f >> 2] = 0;\n            b[f + 4 >> 2] = (k >>> 0) % (i >>> 0);\n          }\n          o = 0;\n          p = (k >>> 0) / (i >>> 0) >>> 0;\n          return (G(o | 0), p) | 0;\n        }\n        g = i - 1 | 0;\n        if (!(g & i)) {\n          if (f | 0) {\n            b[f >> 2] = a | 0;\n            b[f + 4 >> 2] = g & k | c & 0;\n          }\n          o = 0;\n          p = k >>> ((Ld(i | 0) | 0) >>> 0);\n          return (G(o | 0), p) | 0;\n        }\n        g = (E(i | 0) | 0) - (E(k | 0) | 0) | 0;\n        if (g >>> 0 <= 30) {\n          c = g + 1 | 0;\n          i = 31 - g | 0;\n          h = c;\n          a = k << i | l >>> (c >>> 0);\n          c = k >>> (c >>> 0);\n          g = 0;\n          i = l << i;\n          break;\n        }\n        if (!f) {\n          o = 0;\n          p = 0;\n          return (G(o | 0), p) | 0;\n        }\n        b[f >> 2] = a | 0;\n        b[f + 4 >> 2] = j | c & 0;\n        o = 0;\n        p = 0;\n        return (G(o | 0), p) | 0;\n      } } while (0);\n      if (!h) {\n        k = i;\n        j = 0;\n        i = 0;\n      } else {\n        m = d | 0 | 0;\n        l = n | e & 0;\n        k = Jd(m | 0, l | 0, -1, -1) | 0;\n        d = H() | 0;\n        j = i;\n        i = 0;\n        do {\n          e = j;\n          j = g >>> 31 | j << 1;\n          g = i | g << 1;\n          e = a << 1 | e >>> 31 | 0;\n          n = a >>> 31 | c << 1 | 0;\n          Kd(k | 0, d | 0, e | 0, n | 0) | 0;\n          p = H() | 0;\n          o = p >> 31 | ((p | 0) < 0 ? -1 : 0) << 1;\n          i = o & 1;\n          a = Kd(e | 0, n | 0, o & m | 0, (((p | 0) < 0 ? -1 : 0) >> 31 | ((p | 0) < 0 ? -1 : 0) << 1) & l | 0) | 0;\n          c = H() | 0;\n          h = h - 1 | 0;\n        } while ((h | 0) != 0);\n        k = j;\n        j = 0;\n      }\n      h = 0;\n      if (f | 0) {\n        b[f >> 2] = a;\n        b[f + 4 >> 2] = c;\n      }\n      o = (g | 0) >>> 31 | (k | h) << 1 | (h << 1 | g >>> 31) & 0 | j;\n      p = (g << 1 | 0 >>> 31) & -2 | i;\n      return (G(o | 0), p) | 0;\n    }\n    function Nd(a, b, c, d) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0;\n      j = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;\n      i = ((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;\n      f = d >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;\n      e = ((d | 0) < 0 ? -1 : 0) >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;\n      h = Kd(j ^ a | 0, i ^ b | 0, j | 0, i | 0) | 0;\n      g = H() | 0;\n      a = f ^ j;\n      b = e ^ i;\n      return Kd((Md(h, g, Kd(f ^ c | 0, e ^ d | 0, f | 0, e | 0) | 0, H() | 0, 0) | 0) ^ a | 0, (H() | 0) ^ b | 0, a | 0, b | 0) | 0;\n    }\n    function Od(a, b) {\n      a = a | 0;\n      b = b | 0;\n      var c = 0,\n        d = 0,\n        e = 0,\n        f = 0;\n      f = a & 65535;\n      e = b & 65535;\n      c = B(e, f) | 0;\n      d = a >>> 16;\n      a = (c >>> 16) + (B(e, d) | 0) | 0;\n      e = b >>> 16;\n      b = B(e, f) | 0;\n      return (G((a >>> 16) + (B(e, d) | 0) + (((a & 65535) + b | 0) >>> 16) | 0), a + b << 16 | c & 65535 | 0) | 0;\n    }\n    function Pd(a, b, c, d) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      d = d | 0;\n      var e = 0,\n        f = 0;\n      e = a;\n      f = c;\n      c = Od(e, f) | 0;\n      a = H() | 0;\n      return (G((B(b, f) | 0) + (B(d, e) | 0) + a | a & 0 | 0), c | 0 | 0) | 0;\n    }\n    function Qd(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0,\n        j = 0,\n        k = 0;\n      f = T;\n      T = T + 16 | 0;\n      i = f | 0;\n      h = c >> 31 | ((c | 0) < 0 ? -1 : 0) << 1;\n      g = ((c | 0) < 0 ? -1 : 0) >> 31 | ((c | 0) < 0 ? -1 : 0) << 1;\n      k = e >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;\n      j = ((e | 0) < 0 ? -1 : 0) >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;\n      a = Kd(h ^ a | 0, g ^ c | 0, h | 0, g | 0) | 0;\n      c = H() | 0;\n      Md(a, c, Kd(k ^ d | 0, j ^ e | 0, k | 0, j | 0) | 0, H() | 0, i) | 0;\n      e = Kd(b[i >> 2] ^ h | 0, b[i + 4 >> 2] ^ g | 0, h | 0, g | 0) | 0;\n      d = H() | 0;\n      T = f;\n      return (G(d | 0), e) | 0;\n    }\n    function Rd(a, c, d, e) {\n      a = a | 0;\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0;\n      g = T;\n      T = T + 16 | 0;\n      f = g | 0;\n      Md(a, c, d, e, f) | 0;\n      T = g;\n      return (G(b[f + 4 >> 2] | 0), b[f >> 2] | 0) | 0;\n    }\n    function Sd(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      if ((c | 0) < 32) {\n        G(b >> c | 0);\n        return a >>> c | (b & (1 << c) - 1) << 32 - c;\n      }\n      G(((b | 0) < 0 ? -1 : 0) | 0);\n      return b >> c - 32 | 0;\n    }\n    function Td(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      if ((c | 0) < 32) {\n        G(b >>> c | 0);\n        return a >>> c | (b & (1 << c) - 1) << 32 - c;\n      }\n      G(0);\n      return b >>> c - 32 | 0;\n    }\n    function Ud(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      if ((c | 0) < 32) {\n        G(b << c | (a & (1 << c) - 1 << 32 - c) >>> 32 - c | 0);\n        return a << c;\n      }\n      G(a << c - 32 | 0);\n      return 0;\n    }\n    function Vd(a, b, c) {\n      a = a | 0;\n      b = b | 0;\n      c = c | 0;\n      b = E(b) | 0;\n      if ((b | 0) == 32) { b = b + (E(a) | 0) | 0; }\n      G(0);\n      return b | 0;\n    }\n    function Wd(a, b) {\n      a = +a;\n      b = +b;\n      if (a != a) { return +b; }\n      if (b != b) { return +a; }\n      return +D(+a, +b);\n    }\n    function Xd(a, b) {\n      a = +a;\n      b = +b;\n      if (a != a) { return +b; }\n      if (b != b) { return +a; }\n      return +C(+a, +b);\n    }\n    function Yd(a) {\n      a = +a;\n      return a >= 0.0 ? +p(a + .5) : +A(a - .5);\n    }\n    function Zd(c, d, e) {\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0;\n      if ((e | 0) >= 8192) {\n        L(c | 0, d | 0, e | 0) | 0;\n        return c | 0;\n      }\n      h = c | 0;\n      g = c + e | 0;\n      if ((c & 3) == (d & 3)) {\n        while (c & 3) {\n          if (!e) { return h | 0; }\n          a[c >> 0] = a[d >> 0] | 0;\n          c = c + 1 | 0;\n          d = d + 1 | 0;\n          e = e - 1 | 0;\n        }\n        e = g & -4 | 0;\n        f = e - 64 | 0;\n        while ((c | 0) <= (f | 0)) {\n          b[c >> 2] = b[d >> 2];\n          b[c + 4 >> 2] = b[d + 4 >> 2];\n          b[c + 8 >> 2] = b[d + 8 >> 2];\n          b[c + 12 >> 2] = b[d + 12 >> 2];\n          b[c + 16 >> 2] = b[d + 16 >> 2];\n          b[c + 20 >> 2] = b[d + 20 >> 2];\n          b[c + 24 >> 2] = b[d + 24 >> 2];\n          b[c + 28 >> 2] = b[d + 28 >> 2];\n          b[c + 32 >> 2] = b[d + 32 >> 2];\n          b[c + 36 >> 2] = b[d + 36 >> 2];\n          b[c + 40 >> 2] = b[d + 40 >> 2];\n          b[c + 44 >> 2] = b[d + 44 >> 2];\n          b[c + 48 >> 2] = b[d + 48 >> 2];\n          b[c + 52 >> 2] = b[d + 52 >> 2];\n          b[c + 56 >> 2] = b[d + 56 >> 2];\n          b[c + 60 >> 2] = b[d + 60 >> 2];\n          c = c + 64 | 0;\n          d = d + 64 | 0;\n        }\n        while ((c | 0) < (e | 0)) {\n          b[c >> 2] = b[d >> 2];\n          c = c + 4 | 0;\n          d = d + 4 | 0;\n        }\n      } else {\n        e = g - 4 | 0;\n        while ((c | 0) < (e | 0)) {\n          a[c >> 0] = a[d >> 0] | 0;\n          a[c + 1 >> 0] = a[d + 1 >> 0] | 0;\n          a[c + 2 >> 0] = a[d + 2 >> 0] | 0;\n          a[c + 3 >> 0] = a[d + 3 >> 0] | 0;\n          c = c + 4 | 0;\n          d = d + 4 | 0;\n        }\n      }\n      while ((c | 0) < (g | 0)) {\n        a[c >> 0] = a[d >> 0] | 0;\n        c = c + 1 | 0;\n        d = d + 1 | 0;\n      }\n      return h | 0;\n    }\n    function _d(c, d, e) {\n      c = c | 0;\n      d = d | 0;\n      e = e | 0;\n      var f = 0,\n        g = 0,\n        h = 0,\n        i = 0;\n      h = c + e | 0;\n      d = d & 255;\n      if ((e | 0) >= 67) {\n        while (c & 3) {\n          a[c >> 0] = d;\n          c = c + 1 | 0;\n        }\n        f = h & -4 | 0;\n        i = d | d << 8 | d << 16 | d << 24;\n        g = f - 64 | 0;\n        while ((c | 0) <= (g | 0)) {\n          b[c >> 2] = i;\n          b[c + 4 >> 2] = i;\n          b[c + 8 >> 2] = i;\n          b[c + 12 >> 2] = i;\n          b[c + 16 >> 2] = i;\n          b[c + 20 >> 2] = i;\n          b[c + 24 >> 2] = i;\n          b[c + 28 >> 2] = i;\n          b[c + 32 >> 2] = i;\n          b[c + 36 >> 2] = i;\n          b[c + 40 >> 2] = i;\n          b[c + 44 >> 2] = i;\n          b[c + 48 >> 2] = i;\n          b[c + 52 >> 2] = i;\n          b[c + 56 >> 2] = i;\n          b[c + 60 >> 2] = i;\n          c = c + 64 | 0;\n        }\n        while ((c | 0) < (f | 0)) {\n          b[c >> 2] = i;\n          c = c + 4 | 0;\n        }\n      }\n      while ((c | 0) < (h | 0)) {\n        a[c >> 0] = d;\n        c = c + 1 | 0;\n      }\n      return h - e | 0;\n    }\n    function $d(a) {\n      a = +a;\n      return a >= 0.0 ? +p(a + .5) : +A(a - .5);\n    }\n    function ae(a) {\n      a = a | 0;\n      var c = 0,\n        d = 0,\n        e = 0;\n      e = K() | 0;\n      d = b[g >> 2] | 0;\n      c = d + a | 0;\n      if ((a | 0) > 0 & (c | 0) < (d | 0) | (c | 0) < 0) {\n        N(c | 0) | 0;\n        J(12);\n        return -1;\n      }\n      if ((c | 0) > (e | 0)) { if (!(M(c | 0) | 0)) {\n        J(12);\n        return -1;\n      } }\n      b[g >> 2] = c;\n      return d | 0;\n    }\n\n    // EMSCRIPTEN_END_FUNCS\n    return {\n      ___divdi3: Nd,\n      ___muldi3: Pd,\n      ___remdi3: Qd,\n      ___uremdi3: Rd,\n      _areNeighborCells: ib,\n      _bitshift64Ashr: Sd,\n      _bitshift64Lshr: Td,\n      _bitshift64Shl: Ud,\n      _calloc: Id,\n      _cellAreaKm2: Ac,\n      _cellAreaM2: Bc,\n      _cellAreaRads2: zc,\n      _cellToBoundary: bc,\n      _cellToCenterChild: Nb,\n      _cellToChildPos: gc,\n      _cellToChildren: Lb,\n      _cellToChildrenSize: Jb,\n      _cellToLatLng: ac,\n      _cellToLocalIj: Mc,\n      _cellToParent: Ib,\n      _cellToVertex: td,\n      _cellToVertexes: ud,\n      _cellsToDirectedEdge: jb,\n      _cellsToLinkedMultiPolygon: na,\n      _childPosToCell: hc,\n      _compactCells: Ob,\n      _constructCell: Eb,\n      _destroyLinkedMultiPolygon: Hc,\n      _directedEdgeToBoundary: pb,\n      _directedEdgeToCells: nb,\n      _edgeLengthKm: Dc,\n      _edgeLengthM: Ec,\n      _edgeLengthRads: Cc,\n      _emscripten_replace_memory: W,\n      _free: Hd,\n      _getBaseCellNumber: Cb,\n      _getDirectedEdgeDestination: lb,\n      _getDirectedEdgeOrigin: kb,\n      _getHexagonAreaAvgKm2: tc,\n      _getHexagonAreaAvgM2: uc,\n      _getHexagonEdgeLengthAvgKm: vc,\n      _getHexagonEdgeLengthAvgM: wc,\n      _getIcosahedronFaces: dc,\n      _getIndexDigit: Db,\n      _getNumCells: xc,\n      _getPentagons: fc,\n      _getRes0Cells: ya,\n      _getResolution: Bb,\n      _greatCircleDistanceKm: pc,\n      _greatCircleDistanceM: qc,\n      _greatCircleDistanceRads: oc,\n      _gridDisk: aa,\n      _gridDiskDistances: ba,\n      _gridDistance: Oc,\n      _gridPathCells: Qc,\n      _gridPathCellsSize: Pc,\n      _gridRing: fa,\n      _gridRingUnsafe: ga,\n      _i64Add: Jd,\n      _i64Subtract: Kd,\n      _isPentagon: Kb,\n      _isResClassIII: Rb,\n      _isValidCell: Fb,\n      _isValidDirectedEdge: mb,\n      _isValidIndex: Gb,\n      _isValidVertex: wd,\n      _latLngToCell: Zb,\n      _llvm_ctlz_i64: Vd,\n      _llvm_maxnum_f64: Wd,\n      _llvm_minnum_f64: Xd,\n      _llvm_round_f64: Yd,\n      _localIjToCell: Nc,\n      _malloc: Gd,\n      _maxFaceCount: cc,\n      _maxGridDiskSize: $,\n      _maxPolygonToCellsSize: ja,\n      _maxPolygonToCellsSizeExperimental: Xc,\n      _memcpy: Zd,\n      _memset: _d,\n      _originToDirectedEdges: ob,\n      _pentagonCount: ec,\n      _polygonToCells: la,\n      _polygonToCellsExperimental: Wc,\n      _readInt64AsDoubleFromPointer: ld,\n      _res0CellCount: xa,\n      _round: $d,\n      _sbrk: ae,\n      _sizeOfCellBoundary: gd,\n      _sizeOfCoordIJ: kd,\n      _sizeOfGeoLoop: hd,\n      _sizeOfGeoPolygon: id,\n      _sizeOfH3Index: ed,\n      _sizeOfLatLng: fd,\n      _sizeOfLinkedGeoPolygon: jd,\n      _uncompactCells: Pb,\n      _uncompactCellsSize: Qb,\n      _vertexToLatLng: vd,\n      establishStackSpace: _,\n      stackAlloc: X,\n      stackRestore: Z,\n      stackSave: Y\n    };\n  }\n\n  // EMSCRIPTEN_END_ASM\n  )(asmGlobalArg, asmLibraryArg, buffer);\n  var ___divdi3 = Module[\"___divdi3\"] = asm[\"___divdi3\"];\n  var ___muldi3 = Module[\"___muldi3\"] = asm[\"___muldi3\"];\n  var ___remdi3 = Module[\"___remdi3\"] = asm[\"___remdi3\"];\n  var ___uremdi3 = Module[\"___uremdi3\"] = asm[\"___uremdi3\"];\n  var _areNeighborCells = Module[\"_areNeighborCells\"] = asm[\"_areNeighborCells\"];\n  var _bitshift64Ashr = Module[\"_bitshift64Ashr\"] = asm[\"_bitshift64Ashr\"];\n  var _bitshift64Lshr = Module[\"_bitshift64Lshr\"] = asm[\"_bitshift64Lshr\"];\n  var _bitshift64Shl = Module[\"_bitshift64Shl\"] = asm[\"_bitshift64Shl\"];\n  var _calloc = Module[\"_calloc\"] = asm[\"_calloc\"];\n  var _cellAreaKm2 = Module[\"_cellAreaKm2\"] = asm[\"_cellAreaKm2\"];\n  var _cellAreaM2 = Module[\"_cellAreaM2\"] = asm[\"_cellAreaM2\"];\n  var _cellAreaRads2 = Module[\"_cellAreaRads2\"] = asm[\"_cellAreaRads2\"];\n  var _cellToBoundary = Module[\"_cellToBoundary\"] = asm[\"_cellToBoundary\"];\n  var _cellToCenterChild = Module[\"_cellToCenterChild\"] = asm[\"_cellToCenterChild\"];\n  var _cellToChildPos = Module[\"_cellToChildPos\"] = asm[\"_cellToChildPos\"];\n  var _cellToChildren = Module[\"_cellToChildren\"] = asm[\"_cellToChildren\"];\n  var _cellToChildrenSize = Module[\"_cellToChildrenSize\"] = asm[\"_cellToChildrenSize\"];\n  var _cellToLatLng = Module[\"_cellToLatLng\"] = asm[\"_cellToLatLng\"];\n  var _cellToLocalIj = Module[\"_cellToLocalIj\"] = asm[\"_cellToLocalIj\"];\n  var _cellToParent = Module[\"_cellToParent\"] = asm[\"_cellToParent\"];\n  var _cellToVertex = Module[\"_cellToVertex\"] = asm[\"_cellToVertex\"];\n  var _cellToVertexes = Module[\"_cellToVertexes\"] = asm[\"_cellToVertexes\"];\n  var _cellsToDirectedEdge = Module[\"_cellsToDirectedEdge\"] = asm[\"_cellsToDirectedEdge\"];\n  var _cellsToLinkedMultiPolygon = Module[\"_cellsToLinkedMultiPolygon\"] = asm[\"_cellsToLinkedMultiPolygon\"];\n  var _childPosToCell = Module[\"_childPosToCell\"] = asm[\"_childPosToCell\"];\n  var _compactCells = Module[\"_compactCells\"] = asm[\"_compactCells\"];\n  var _constructCell = Module[\"_constructCell\"] = asm[\"_constructCell\"];\n  var _destroyLinkedMultiPolygon = Module[\"_destroyLinkedMultiPolygon\"] = asm[\"_destroyLinkedMultiPolygon\"];\n  var _directedEdgeToBoundary = Module[\"_directedEdgeToBoundary\"] = asm[\"_directedEdgeToBoundary\"];\n  var _directedEdgeToCells = Module[\"_directedEdgeToCells\"] = asm[\"_directedEdgeToCells\"];\n  var _edgeLengthKm = Module[\"_edgeLengthKm\"] = asm[\"_edgeLengthKm\"];\n  var _edgeLengthM = Module[\"_edgeLengthM\"] = asm[\"_edgeLengthM\"];\n  var _edgeLengthRads = Module[\"_edgeLengthRads\"] = asm[\"_edgeLengthRads\"];\n  var _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = asm[\"_emscripten_replace_memory\"];\n  var _free = Module[\"_free\"] = asm[\"_free\"];\n  var _getBaseCellNumber = Module[\"_getBaseCellNumber\"] = asm[\"_getBaseCellNumber\"];\n  var _getDirectedEdgeDestination = Module[\"_getDirectedEdgeDestination\"] = asm[\"_getDirectedEdgeDestination\"];\n  var _getDirectedEdgeOrigin = Module[\"_getDirectedEdgeOrigin\"] = asm[\"_getDirectedEdgeOrigin\"];\n  var _getHexagonAreaAvgKm2 = Module[\"_getHexagonAreaAvgKm2\"] = asm[\"_getHexagonAreaAvgKm2\"];\n  var _getHexagonAreaAvgM2 = Module[\"_getHexagonAreaAvgM2\"] = asm[\"_getHexagonAreaAvgM2\"];\n  var _getHexagonEdgeLengthAvgKm = Module[\"_getHexagonEdgeLengthAvgKm\"] = asm[\"_getHexagonEdgeLengthAvgKm\"];\n  var _getHexagonEdgeLengthAvgM = Module[\"_getHexagonEdgeLengthAvgM\"] = asm[\"_getHexagonEdgeLengthAvgM\"];\n  var _getIcosahedronFaces = Module[\"_getIcosahedronFaces\"] = asm[\"_getIcosahedronFaces\"];\n  var _getIndexDigit = Module[\"_getIndexDigit\"] = asm[\"_getIndexDigit\"];\n  var _getNumCells = Module[\"_getNumCells\"] = asm[\"_getNumCells\"];\n  var _getPentagons = Module[\"_getPentagons\"] = asm[\"_getPentagons\"];\n  var _getRes0Cells = Module[\"_getRes0Cells\"] = asm[\"_getRes0Cells\"];\n  var _getResolution = Module[\"_getResolution\"] = asm[\"_getResolution\"];\n  var _greatCircleDistanceKm = Module[\"_greatCircleDistanceKm\"] = asm[\"_greatCircleDistanceKm\"];\n  var _greatCircleDistanceM = Module[\"_greatCircleDistanceM\"] = asm[\"_greatCircleDistanceM\"];\n  var _greatCircleDistanceRads = Module[\"_greatCircleDistanceRads\"] = asm[\"_greatCircleDistanceRads\"];\n  var _gridDisk = Module[\"_gridDisk\"] = asm[\"_gridDisk\"];\n  var _gridDiskDistances = Module[\"_gridDiskDistances\"] = asm[\"_gridDiskDistances\"];\n  var _gridDistance = Module[\"_gridDistance\"] = asm[\"_gridDistance\"];\n  var _gridPathCells = Module[\"_gridPathCells\"] = asm[\"_gridPathCells\"];\n  var _gridPathCellsSize = Module[\"_gridPathCellsSize\"] = asm[\"_gridPathCellsSize\"];\n  var _gridRing = Module[\"_gridRing\"] = asm[\"_gridRing\"];\n  var _gridRingUnsafe = Module[\"_gridRingUnsafe\"] = asm[\"_gridRingUnsafe\"];\n  var _i64Add = Module[\"_i64Add\"] = asm[\"_i64Add\"];\n  var _i64Subtract = Module[\"_i64Subtract\"] = asm[\"_i64Subtract\"];\n  var _isPentagon = Module[\"_isPentagon\"] = asm[\"_isPentagon\"];\n  var _isResClassIII = Module[\"_isResClassIII\"] = asm[\"_isResClassIII\"];\n  var _isValidCell = Module[\"_isValidCell\"] = asm[\"_isValidCell\"];\n  var _isValidDirectedEdge = Module[\"_isValidDirectedEdge\"] = asm[\"_isValidDirectedEdge\"];\n  var _isValidIndex = Module[\"_isValidIndex\"] = asm[\"_isValidIndex\"];\n  var _isValidVertex = Module[\"_isValidVertex\"] = asm[\"_isValidVertex\"];\n  var _latLngToCell = Module[\"_latLngToCell\"] = asm[\"_latLngToCell\"];\n  var _llvm_ctlz_i64 = Module[\"_llvm_ctlz_i64\"] = asm[\"_llvm_ctlz_i64\"];\n  var _llvm_maxnum_f64 = Module[\"_llvm_maxnum_f64\"] = asm[\"_llvm_maxnum_f64\"];\n  var _llvm_minnum_f64 = Module[\"_llvm_minnum_f64\"] = asm[\"_llvm_minnum_f64\"];\n  var _llvm_round_f64 = Module[\"_llvm_round_f64\"] = asm[\"_llvm_round_f64\"];\n  var _localIjToCell = Module[\"_localIjToCell\"] = asm[\"_localIjToCell\"];\n  var _malloc = Module[\"_malloc\"] = asm[\"_malloc\"];\n  var _maxFaceCount = Module[\"_maxFaceCount\"] = asm[\"_maxFaceCount\"];\n  var _maxGridDiskSize = Module[\"_maxGridDiskSize\"] = asm[\"_maxGridDiskSize\"];\n  var _maxPolygonToCellsSize = Module[\"_maxPolygonToCellsSize\"] = asm[\"_maxPolygonToCellsSize\"];\n  var _maxPolygonToCellsSizeExperimental = Module[\"_maxPolygonToCellsSizeExperimental\"] = asm[\"_maxPolygonToCellsSizeExperimental\"];\n  var _memcpy = Module[\"_memcpy\"] = asm[\"_memcpy\"];\n  var _memset = Module[\"_memset\"] = asm[\"_memset\"];\n  var _originToDirectedEdges = Module[\"_originToDirectedEdges\"] = asm[\"_originToDirectedEdges\"];\n  var _pentagonCount = Module[\"_pentagonCount\"] = asm[\"_pentagonCount\"];\n  var _polygonToCells = Module[\"_polygonToCells\"] = asm[\"_polygonToCells\"];\n  var _polygonToCellsExperimental = Module[\"_polygonToCellsExperimental\"] = asm[\"_polygonToCellsExperimental\"];\n  var _readInt64AsDoubleFromPointer = Module[\"_readInt64AsDoubleFromPointer\"] = asm[\"_readInt64AsDoubleFromPointer\"];\n  var _res0CellCount = Module[\"_res0CellCount\"] = asm[\"_res0CellCount\"];\n  var _round = Module[\"_round\"] = asm[\"_round\"];\n  var _sbrk = Module[\"_sbrk\"] = asm[\"_sbrk\"];\n  var _sizeOfCellBoundary = Module[\"_sizeOfCellBoundary\"] = asm[\"_sizeOfCellBoundary\"];\n  var _sizeOfCoordIJ = Module[\"_sizeOfCoordIJ\"] = asm[\"_sizeOfCoordIJ\"];\n  var _sizeOfGeoLoop = Module[\"_sizeOfGeoLoop\"] = asm[\"_sizeOfGeoLoop\"];\n  var _sizeOfGeoPolygon = Module[\"_sizeOfGeoPolygon\"] = asm[\"_sizeOfGeoPolygon\"];\n  var _sizeOfH3Index = Module[\"_sizeOfH3Index\"] = asm[\"_sizeOfH3Index\"];\n  var _sizeOfLatLng = Module[\"_sizeOfLatLng\"] = asm[\"_sizeOfLatLng\"];\n  var _sizeOfLinkedGeoPolygon = Module[\"_sizeOfLinkedGeoPolygon\"] = asm[\"_sizeOfLinkedGeoPolygon\"];\n  var _uncompactCells = Module[\"_uncompactCells\"] = asm[\"_uncompactCells\"];\n  var _uncompactCellsSize = Module[\"_uncompactCellsSize\"] = asm[\"_uncompactCellsSize\"];\n  var _vertexToLatLng = Module[\"_vertexToLatLng\"] = asm[\"_vertexToLatLng\"];\n  var establishStackSpace = Module[\"establishStackSpace\"] = asm[\"establishStackSpace\"];\n  var stackAlloc = Module[\"stackAlloc\"] = asm[\"stackAlloc\"];\n  var stackRestore = Module[\"stackRestore\"] = asm[\"stackRestore\"];\n  var stackSave = Module[\"stackSave\"] = asm[\"stackSave\"];\n  Module[\"asm\"] = asm;\n  Module[\"cwrap\"] = cwrap;\n  Module[\"setValue\"] = setValue;\n  Module[\"getValue\"] = getValue;\n  if (memoryInitializer) {\n    if (!isDataURI(memoryInitializer)) {\n      memoryInitializer = locateFile(memoryInitializer);\n    }\n    {\n      addRunDependency(\"memory initializer\");\n      var applyMemoryInitializer = function (data) {\n        if (data.byteLength) { data = new Uint8Array(data); }\n        HEAPU8.set(data, GLOBAL_BASE);\n        if (Module[\"memoryInitializerRequest\"]) { delete Module[\"memoryInitializerRequest\"].response; }\n        removeRunDependency(\"memory initializer\");\n      };\n      var doBrowserLoad = function () {\n        readAsync(memoryInitializer, applyMemoryInitializer, function () {\n          throw \"could not load memory initializer \" + memoryInitializer;\n        });\n      };\n      var memoryInitializerBytes = tryParseAsDataURI(memoryInitializer);\n      if (memoryInitializerBytes) {\n        applyMemoryInitializer(memoryInitializerBytes.buffer);\n      } else if (Module[\"memoryInitializerRequest\"]) {\n        var useRequest = function () {\n          var request = Module[\"memoryInitializerRequest\"];\n          var response = request.response;\n          if (request.status !== 200 && request.status !== 0) {\n            var data = tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);\n            if (data) {\n              response = data.buffer;\n            } else {\n              console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \" + request.status + \", retrying \" + memoryInitializer);\n              doBrowserLoad();\n              return;\n            }\n          }\n          applyMemoryInitializer(response);\n        };\n        if (Module[\"memoryInitializerRequest\"].response) {\n          setTimeout(useRequest, 0);\n        } else {\n          Module[\"memoryInitializerRequest\"].addEventListener(\"load\", useRequest);\n        }\n      } else {\n        doBrowserLoad();\n      }\n    }\n  }\n  var calledRun;\n  dependenciesFulfilled = function runCaller() {\n    if (!calledRun) { run(); }\n    if (!calledRun) { dependenciesFulfilled = runCaller; }\n  };\n  function run(args) {\n    args = args || arguments_;\n    if (runDependencies > 0) {\n      return;\n    }\n    preRun();\n    if (runDependencies > 0) { return; }\n    function doRun() {\n      if (calledRun) { return; }\n      calledRun = true;\n      if (ABORT) { return; }\n      initRuntime();\n      preMain();\n      if (Module[\"onRuntimeInitialized\"]) { Module[\"onRuntimeInitialized\"](); }\n      postRun();\n    }\n    if (Module[\"setStatus\"]) {\n      Module[\"setStatus\"](\"Running...\");\n      setTimeout(function () {\n        setTimeout(function () {\n          Module[\"setStatus\"](\"\");\n        }, 1);\n        doRun();\n      }, 1);\n    } else {\n      doRun();\n    }\n  }\n  Module[\"run\"] = run;\n  function abort(what) {\n    if (Module[\"onAbort\"]) {\n      Module[\"onAbort\"](what);\n    }\n    what += \"\";\n    out(what);\n    err(what);\n    ABORT = true;\n    throw \"abort(\" + what + \"). Build with -s ASSERTIONS=1 for more info.\";\n  }\n  Module[\"abort\"] = abort;\n  if (Module[\"preInit\"]) {\n    if (typeof Module[\"preInit\"] == \"function\") { Module[\"preInit\"] = [Module[\"preInit\"]]; }\n    while (Module[\"preInit\"].length > 0) {\n      Module[\"preInit\"].pop()();\n    }\n  }\n  run();\n  return libh3;\n}(typeof libh3 === 'object' ? libh3 : {});\n\n/*\n * Copyright 2018-2019, 2022 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *         http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Define the C bindings for the h3 library\n\n// Add some aliases to make the function definitions more intelligible\nvar NUMBER = 'number';\nvar H3_ERROR = NUMBER;\nvar BOOLEAN = NUMBER;\nvar H3_LOWER = NUMBER;\nvar H3_UPPER = NUMBER;\nvar RESOLUTION = NUMBER;\nvar POINTER = NUMBER;\n\n// Define the bindings to functions in the C lib. Functions are defined as\n// [name, return type, [arg types]]. You must run `npm run build-emscripten`\n// before new functions added here will be available.\n/** @type {([string, string] | [string, string | null, string[]])[]} */\nvar BINDINGS = [\n// The size functions are inserted via build/sizes.h\n['sizeOfH3Index', NUMBER], ['sizeOfLatLng', NUMBER], ['sizeOfCellBoundary', NUMBER], ['sizeOfGeoLoop', NUMBER], ['sizeOfGeoPolygon', NUMBER], ['sizeOfLinkedGeoPolygon', NUMBER], ['sizeOfCoordIJ', NUMBER], ['readInt64AsDoubleFromPointer', NUMBER],\n// The remaining functions are defined in the core lib in h3Api.h\n['isValidCell', BOOLEAN, [H3_LOWER, H3_UPPER]], ['isValidIndex', BOOLEAN, [H3_LOWER, H3_UPPER]], ['latLngToCell', H3_ERROR, [NUMBER, NUMBER, RESOLUTION, POINTER]], ['cellToLatLng', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['cellToBoundary', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['maxGridDiskSize', H3_ERROR, [NUMBER, POINTER]], ['gridDisk', H3_ERROR, [H3_LOWER, H3_UPPER, NUMBER, POINTER]], ['gridDiskDistances', H3_ERROR, [H3_LOWER, H3_UPPER, NUMBER, POINTER, POINTER]], ['gridRing', H3_ERROR, [H3_LOWER, H3_UPPER, NUMBER, POINTER]], ['gridRingUnsafe', H3_ERROR, [H3_LOWER, H3_UPPER, NUMBER, POINTER]], ['maxPolygonToCellsSize', H3_ERROR, [POINTER, RESOLUTION, NUMBER, POINTER]], ['polygonToCells', H3_ERROR, [POINTER, RESOLUTION, NUMBER, POINTER]], ['maxPolygonToCellsSizeExperimental', H3_ERROR, [POINTER, RESOLUTION, NUMBER, POINTER]], ['polygonToCellsExperimental', H3_ERROR, [POINTER, RESOLUTION, NUMBER, NUMBER, NUMBER, POINTER]], ['cellsToLinkedMultiPolygon', H3_ERROR, [POINTER, NUMBER, POINTER]], ['destroyLinkedMultiPolygon', null, [POINTER]], ['compactCells', H3_ERROR, [POINTER, POINTER, NUMBER, NUMBER]], ['uncompactCells', H3_ERROR, [POINTER, NUMBER, NUMBER, POINTER, NUMBER, RESOLUTION]], ['uncompactCellsSize', H3_ERROR, [POINTER, NUMBER, NUMBER, RESOLUTION, POINTER]], ['isPentagon', BOOLEAN, [H3_LOWER, H3_UPPER]], ['isResClassIII', BOOLEAN, [H3_LOWER, H3_UPPER]], ['getBaseCellNumber', NUMBER, [H3_LOWER, H3_UPPER]], ['getResolution', NUMBER, [H3_LOWER, H3_UPPER]], ['getIndexDigit', NUMBER, [H3_LOWER, H3_UPPER, NUMBER]], ['constructCell', H3_ERROR, [NUMBER, NUMBER, POINTER, POINTER]], ['maxFaceCount', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['getIcosahedronFaces', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['cellToParent', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]], ['cellToChildren', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]], ['cellToCenterChild', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]], ['cellToChildrenSize', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]], ['cellToChildPos', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]], ['childPosToCell', H3_ERROR, [NUMBER, NUMBER, H3_LOWER, H3_UPPER, RESOLUTION, POINTER]], ['areNeighborCells', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]], ['cellsToDirectedEdge', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]], ['getDirectedEdgeOrigin', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['getDirectedEdgeDestination', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['isValidDirectedEdge', BOOLEAN, [H3_LOWER, H3_UPPER]], ['directedEdgeToCells', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['originToDirectedEdges', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['directedEdgeToBoundary', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['gridDistance', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]], ['gridPathCells', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]], ['gridPathCellsSize', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]], ['cellToLocalIj', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, NUMBER, POINTER]], ['localIjToCell', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER, NUMBER, POINTER]], ['getHexagonAreaAvgM2', H3_ERROR, [RESOLUTION, POINTER]], ['getHexagonAreaAvgKm2', H3_ERROR, [RESOLUTION, POINTER]], ['getHexagonEdgeLengthAvgM', H3_ERROR, [RESOLUTION, POINTER]], ['getHexagonEdgeLengthAvgKm', H3_ERROR, [RESOLUTION, POINTER]], ['greatCircleDistanceM', NUMBER, [POINTER, POINTER]], ['greatCircleDistanceKm', NUMBER, [POINTER, POINTER]], ['greatCircleDistanceRads', NUMBER, [POINTER, POINTER]], ['cellAreaM2', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['cellAreaKm2', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['cellAreaRads2', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['edgeLengthM', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['edgeLengthKm', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['edgeLengthRads', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['getNumCells', H3_ERROR, [RESOLUTION, POINTER]], ['getRes0Cells', H3_ERROR, [POINTER]], ['res0CellCount', NUMBER], ['getPentagons', H3_ERROR, [NUMBER, POINTER]], ['pentagonCount', NUMBER], ['cellToVertex', H3_ERROR, [H3_LOWER, H3_UPPER, NUMBER, POINTER]], ['cellToVertexes', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['vertexToLatLng', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]], ['isValidVertex', BOOLEAN, [H3_LOWER, H3_UPPER]]];\n\n/*\n * Copyright 2018-2019, 2022 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *         http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Error codes from the code library, aliased here for legibility\nvar E_SUCCESS = 0;\nvar E_FAILED = 1;\nvar E_DOMAIN = 2;\nvar E_LATLNG_DOMAIN = 3;\nvar E_RES_DOMAIN = 4;\nvar E_CELL_INVALID = 5;\nvar E_DIR_EDGE_INVALID = 6;\nvar E_UNDIR_EDGE_INVALID = 7;\nvar E_VERTEX_INVALID = 8;\nvar E_PENTAGON = 9;\nvar E_DUPLICATE_INPUT = 10;\nvar E_NOT_NEIGHBORS = 11;\nvar E_RES_MISMATCH = 12;\nvar E_MEMORY_ALLOC = 13;\nvar E_MEMORY_BOUNDS = 14;\nvar E_OPTION_INVALID = 15;\nvar E_INDEX_INVALID = 16;\nvar E_BASE_CELL_DOMAIN = 17;\nvar E_DIGIT_DOMAIN = 18;\nvar E_DELETED_DIGIT = 19;\n\n/**\n * Error messages corresponding to the core library error codes. See\n * https://h3geo.org/docs/library/errors#table-of-error-codes\n * @private\n */\nvar H3_ERROR_MSGS = {};\nH3_ERROR_MSGS[E_SUCCESS] = 'Success';\nH3_ERROR_MSGS[E_FAILED] = 'The operation failed but a more specific error is not available';\nH3_ERROR_MSGS[E_DOMAIN] = 'Argument was outside of acceptable range';\nH3_ERROR_MSGS[E_LATLNG_DOMAIN] = 'Latitude or longitude arguments were outside of acceptable range';\nH3_ERROR_MSGS[E_RES_DOMAIN] = 'Resolution argument was outside of acceptable range';\nH3_ERROR_MSGS[E_CELL_INVALID] = 'Cell argument was not valid';\nH3_ERROR_MSGS[E_DIR_EDGE_INVALID] = 'Directed edge argument was not valid';\nH3_ERROR_MSGS[E_UNDIR_EDGE_INVALID] = 'Undirected edge argument was not valid';\nH3_ERROR_MSGS[E_VERTEX_INVALID] = 'Vertex argument was not valid';\nH3_ERROR_MSGS[E_PENTAGON] = 'Pentagon distortion was encountered';\nH3_ERROR_MSGS[E_DUPLICATE_INPUT] = 'Duplicate input';\nH3_ERROR_MSGS[E_NOT_NEIGHBORS] = 'Cell arguments were not neighbors';\nH3_ERROR_MSGS[E_RES_MISMATCH] = 'Cell arguments had incompatible resolutions';\nH3_ERROR_MSGS[E_MEMORY_ALLOC] = 'Memory allocation failed';\nH3_ERROR_MSGS[E_MEMORY_BOUNDS] = 'Bounds of provided memory were insufficient';\nH3_ERROR_MSGS[E_OPTION_INVALID] = 'Mode or flags argument was not valid';\nH3_ERROR_MSGS[E_INDEX_INVALID] = 'Index argument was not valid';\nH3_ERROR_MSGS[E_BASE_CELL_DOMAIN] = 'Base cell number was outside of acceptable range';\nH3_ERROR_MSGS[E_DIGIT_DOMAIN] = 'Child indexing digits invalid';\nH3_ERROR_MSGS[E_DELETED_DIGIT] = 'Child indexing digits refer to a deleted subsequence';\n\n// Error codes for JS errors thrown in the bindings\nvar E_UNKNOWN_UNIT = 1000;\nvar E_ARRAY_LENGTH = 1001;\nvar E_NULL_INDEX = 1002;\n\n/**\n * Error messages for errors thrown in the binding code. These don't strictly\n * need error codes, but it's simpler to treat all of the errors consistently\n * @private\n */\nvar JS_ERROR_MESSAGES = {};\nJS_ERROR_MESSAGES[E_UNKNOWN_UNIT] = 'Unknown unit';\nJS_ERROR_MESSAGES[E_ARRAY_LENGTH] = 'Array length out of bounds';\nJS_ERROR_MESSAGES[E_NULL_INDEX] = 'Got unexpected null value for H3 index';\nvar UNKNOWN_ERROR_MSG = 'Unknown error';\n\n/**\n * Create an error with an attached code\n * @private\n * @param {Record<number, string>} messages  Map of code-to-messages to use\n * @param {number} errCode                   Numeric error code\n * @param {{value: unknown} | {}} [meta]     Metadata with value to associate with the error\n */\nfunction createError(messages, errCode, meta) {\n  // The error value may be \"undefined\", so check if the argument was provided\n  var hasValue = meta && 'value' in meta;\n  // Throw a custom error type with the code attached\n  var err = new Error(((messages[errCode] || UNKNOWN_ERROR_MSG) + \" (code: \" + errCode + (hasValue ? (\", value: \" + (meta.value)) : '') + \")\"));\n  // @ts-expect-error - TS doesn't like extending Error\n  err.code = errCode;\n  return err;\n}\n\n/**\n * Custom error for H3Error codes\n * @private\n * @param {number} errCode     Error code from the H3 library\n * @param {unknown} [value]    Value to associate with the error, if any\n * @returns {Error}\n */\nfunction H3LibraryError(errCode, value) {\n  // The error value may be \"undefined\", so check if the argument was provided\n  var meta = arguments.length === 2 ? {\n    value: value\n  } : {};\n  return createError(H3_ERROR_MSGS, errCode, meta);\n}\n\n/**\n * Custom errors thrown from the JS bindings.\n * @private\n * @param {number} errCode     Error code from the H3 library\n * @param {unknown} [value]    Value to associate with the error, if any\n * @returns {Error}\n */\nfunction JSBindingError(errCode, value) {\n  // The error value may be \"undefined\", so check if the argument was provided\n  var meta = arguments.length === 2 ? {\n    value: value\n  } : {};\n  return createError(JS_ERROR_MESSAGES, errCode, meta);\n}\n\n/**\n * Throw a JavaScript error if the C library return code is an error\n * @private\n * @param {number} errCode     Error code from the H3 library\n * @throws {Error} Error if err is not E_SUCCESS (0)\n */\nfunction throwIfError(errCode) {\n  if (errCode !== 0) {\n    throw H3LibraryError(errCode);\n  }\n}\n\n/*\n * Copyright 2018-2019, 2022 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *         http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Map of C-defined functions\n * @type {any}\n * @private\n */\nvar H3 = {};\n\n// Create the bound functions themselves\nBINDINGS.forEach(function bind(def) {\n  H3[def[0]] = libh3.cwrap.apply(libh3, def);\n});\n\n// Alias the hexidecimal base for legibility\nvar BASE_16 = 16;\n\n// Alias unused bits for legibility\nvar UNUSED_UPPER_32_BITS = 0;\n\n// ----------------------------------------------------------------------------\n// Byte size imports\n\nvar SZ_INT = 4;\nvar SZ_PTR = 4;\nvar SZ_DBL = 8;\nvar SZ_INT64 = 8;\nvar SZ_H3INDEX = H3.sizeOfH3Index();\nvar SZ_LATLNG = H3.sizeOfLatLng();\nvar SZ_CELLBOUNDARY = H3.sizeOfCellBoundary();\nvar SZ_GEOPOLYGON = H3.sizeOfGeoPolygon();\nvar SZ_GEOLOOP = H3.sizeOfGeoLoop();\nvar SZ_LINKED_GEOPOLYGON = H3.sizeOfLinkedGeoPolygon();\nvar SZ_COORDIJ = H3.sizeOfCoordIJ();\n\n// ----------------------------------------------------------------------------\n// Custom types\n\n/**\n * 64-bit hexidecimal string representation of an H3 index\n * @static\n * @typedef {string} H3Index\n */\n\n/**\n * 64-bit hexidecimal string representation of an H3 index,\n * or two 32-bit integers in little endian order in an array.\n * @static\n * @typedef {string | number[]} H3IndexInput\n */\n\n/**\n * Coordinates as an `{i, j}` pair\n * @static\n * @typedef CoordIJ\n * @property {number} i\n * @property {number} j\n */\n\n/**\n * Custom JS Error instance with an attached error code. Error codes come from the\n * core H3 library and can be found [in the H3 docs](https://h3geo.org/docs/library/errors#table-of-error-codes).\n * @static\n * @typedef H3Error\n * @property {string} message\n * @property {number} code\n */\n\n/**\n * Pair of lat,lng coordinates (or lng,lat if GeoJSON output is specified)\n * @static\n * @typedef {number[]} CoordPair\n */\n\n/**\n * Pair of lower,upper 32-bit ints representing a 64-bit value\n * @static\n * @typedef {number[]} SplitLong\n */\n\n// ----------------------------------------------------------------------------\n// Unit constants\n\n/**\n * Length/Area units\n * @static\n * @property {string} m\n * @property {string} m2\n * @property {string} km\n * @property {string} km2\n * @property {string} rads\n * @property {string} rads2\n */\nvar UNITS = {\n  m: 'm',\n  m2: 'm2',\n  km: 'km',\n  km2: 'km2',\n  rads: 'rads',\n  rads2: 'rads2'\n};\n\n// ----------------------------------------------------------------------------\n// Flags\n\n/**\n * Mode flags for polygonToCells\n * @static\n * @property {string} containmentCenter\n * @property {string} containmentFull\n * @property {string} containmentOverlapping\n * @property {string} containmentOverlappingBbox\n */\nvar POLYGON_TO_CELLS_FLAGS = {\n  containmentCenter: 'containmentCenter',\n  containmentFull: 'containmentFull',\n  containmentOverlapping: 'containmentOverlapping',\n  containmentOverlappingBbox: 'containmentOverlappingBbox'\n};\n\n// ----------------------------------------------------------------------------\n// Utilities and helpers\n\n/**\n * @private\n * @param {string} flags Value from POLYGON_TO_CELLS_FLAGS\n * @returns {number} Flag value\n * @throws {H3Error} If invalid\n */\nfunction polygonToCellsFlagsToNumber(flags) {\n  switch (flags) {\n    case POLYGON_TO_CELLS_FLAGS.containmentCenter:\n      return 0;\n    case POLYGON_TO_CELLS_FLAGS.containmentFull:\n      return 1;\n    case POLYGON_TO_CELLS_FLAGS.containmentOverlapping:\n      return 2;\n    case POLYGON_TO_CELLS_FLAGS.containmentOverlappingBbox:\n      return 3;\n    default:\n      throw JSBindingError(E_OPTION_INVALID, flags);\n  }\n}\n\n/**\n * Validate a resolution, throwing an error if invalid\n * @private\n * @param  {unknown} res Value to validate\n * @return {number}      Valid res\n * @throws {H3Error}     If invalid\n */\nfunction validateRes(res) {\n  if (typeof res !== 'number' || res < 0 || res > 15 || Math.floor(res) !== res) {\n    throw H3LibraryError(E_RES_DOMAIN, res);\n  }\n  return res;\n}\n\n/**\n * Assert H3 index output, throwing an error if null\n * @private\n * @param {H3Index | null} h3Index    Index to validate\n * @return {H3Index}\n * @throws {H3Error}     If invalid\n */\nfunction validateH3Index(h3Index) {\n  if (!h3Index) { throw JSBindingError(E_NULL_INDEX); }\n  return h3Index;\n}\nvar MAX_JS_ARRAY_LENGTH = Math.pow(2, 32) - 1;\n\n/**\n * Validate an array length. JS will throw its own error if you try\n * to create an array larger than 2^32 - 1, but validating beforehand\n * allows us to exit early before we try to process large amounts\n * of data that won't even fit in an output array\n * @private\n * @param  {number} length  Length to validate\n * @return {number}         Valid array length\n * @throws {H3Error}        If invalid\n */\nfunction validateArrayLength(length) {\n  if (length > MAX_JS_ARRAY_LENGTH) {\n    throw JSBindingError(E_ARRAY_LENGTH, length);\n  }\n  return length;\n}\nvar INVALID_HEXIDECIMAL_CHAR = /[^0-9a-fA-F]/;\n\n/**\n * Convert an H3 index (64-bit hexidecimal string) into a \"split long\" - a pair of 32-bit ints\n * @param  {H3IndexInput} h3Index  H3 index to check\n * @return {SplitLong}             A two-element array with 32 lower bits and 32 upper bits\n */\nfunction h3IndexToSplitLong(h3Index) {\n  if (Array.isArray(h3Index) && h3Index.length === 2 && Number.isInteger(h3Index[0]) && Number.isInteger(h3Index[1])) {\n    return h3Index;\n  }\n  if (typeof h3Index !== 'string' || INVALID_HEXIDECIMAL_CHAR.test(h3Index)) {\n    return [0, 0];\n  }\n  var upper = parseInt(h3Index.substring(0, h3Index.length - 8), BASE_16);\n  var lower = parseInt(h3Index.substring(h3Index.length - 8), BASE_16);\n  return [lower, upper];\n}\n\n/**\n * Convert a 32-bit int to a hexdecimal string\n * @private\n * @param  {number} num  Integer to convert\n * @return {H3Index}     Hexidecimal string\n */\nfunction hexFrom32Bit(num) {\n  if (num >= 0) {\n    return num.toString(BASE_16);\n  }\n\n  // Handle negative numbers\n  num = num & 0x7fffffff;\n  var tempStr = zeroPad(8, num.toString(BASE_16));\n  var topNum = (parseInt(tempStr[0], BASE_16) + 8).toString(BASE_16);\n  tempStr = topNum + tempStr.substring(1);\n  return tempStr;\n}\n\n/**\n * Get a H3 index string from a split long (pair of 32-bit ints)\n * @param  {number} lower Lower 32 bits\n * @param  {number} upper Upper 32 bits\n * @return {H3Index}       H3 index\n */\nfunction splitLongToH3Index(lower, upper) {\n  return hexFrom32Bit(upper) + zeroPad(8, hexFrom32Bit(lower));\n}\n\n/**\n * Zero-pad a string to a given length\n * @private\n * @param  {number} fullLen Target length\n * @param  {string} numStr  String to zero-pad\n * @return {string}         Zero-padded string\n */\nfunction zeroPad(fullLen, numStr) {\n  var numZeroes = fullLen - numStr.length;\n  var outStr = '';\n  for (var i = 0; i < numZeroes; i++) {\n    outStr += '0';\n  }\n  outStr = outStr + numStr;\n  return outStr;\n}\n\n// One more than the max size of an unsigned 32-bit int.\n// Dividing by this number is equivalent to num >>> 32\nvar UPPER_BIT_DIVISOR = Math.pow(2, 32);\n\n/**\n * Convert a JS double-precision floating point number to a split long\n * @private\n * @param  {number} num  Number to convert\n * @return {SplitLong}     A two-element array with 32 lower bits and 32 upper bits\n */\nfunction numberToSplitLong(num) {\n  if (typeof num !== 'number') {\n    return [0, 0];\n  }\n  return [num | 0, num / UPPER_BIT_DIVISOR | 0];\n}\n\n/**\n * Populate a C-appropriate GeoLoop struct from a polygon array\n * @private\n * @param  {number[][]} polygonArray  Polygon, as an array of coordinate pairs\n * @param  {number}  geoLoop          C pointer to a GeoLoop struct\n * @param  {boolean} isGeoJson        Whether coordinates are in [lng, lat] order per GeoJSON spec\n * @return {number}                   C pointer to populated GeoLoop struct\n */\nfunction polygonArrayToGeoLoop(polygonArray, geoLoop, isGeoJson) {\n  var numVerts = polygonArray.length;\n  var geoCoordArray = libh3._calloc(numVerts, SZ_LATLNG);\n  // Support [lng, lat] pairs if GeoJSON is specified\n  var latIndex = isGeoJson ? 1 : 0;\n  var lngIndex = isGeoJson ? 0 : 1;\n  for (var i = 0; i < numVerts * 2; i += 2) {\n    libh3.HEAPF64.set([polygonArray[i / 2][latIndex], polygonArray[i / 2][lngIndex]].map(degsToRads), geoCoordArray / SZ_DBL + i);\n  }\n  libh3.HEAPU32.set([numVerts, geoCoordArray], geoLoop / SZ_INT);\n  return geoLoop;\n}\n\n/**\n * Create a C-appropriate GeoPolygon struct from an array of polygons\n * @private\n * @param  {number[][][]} coordinates Array of polygons, each an array of coordinate pairs\n * @param  {boolean} isGeoJson        Whether coordinates are in [lng, lat] order per GeoJSON spec\n * @return {number}                   C pointer to populated GeoPolygon struct\n */\nfunction coordinatesToGeoPolygon(coordinates, isGeoJson) {\n  // Any loops beyond the first loop are holes\n  var numHoles = coordinates.length - 1;\n  var geoPolygon = libh3._calloc(SZ_GEOPOLYGON);\n  // Byte positions within the struct\n  var geoLoopOffset = 0;\n  var numHolesOffset = geoLoopOffset + SZ_GEOLOOP;\n  var holesOffset = numHolesOffset + SZ_INT;\n  // geoLoop is first part of struct\n  polygonArrayToGeoLoop(coordinates[0], geoPolygon + geoLoopOffset, isGeoJson);\n  var holes;\n  if (numHoles > 0) {\n    holes = libh3._calloc(numHoles, SZ_GEOLOOP);\n    for (var i = 0; i < numHoles; i++) {\n      polygonArrayToGeoLoop(coordinates[i + 1], holes + SZ_GEOLOOP * i, isGeoJson);\n    }\n  }\n  libh3.setValue(geoPolygon + numHolesOffset, numHoles, 'i32');\n  libh3.setValue(geoPolygon + holesOffset, holes, 'i32');\n  return geoPolygon;\n}\n\n/**\n * Free memory allocated for a GeoPolygon struct. It is an error to access the struct\n * after passing it to this method.\n * @private\n * @param {number} geoPolygon     C pointer to GeoPolygon struct\n * @return {void}\n */\nfunction destroyGeoPolygon(geoPolygon) {\n  // Byte positions within the struct\n  var geoLoopOffset = 0;\n  var numHolesOffset = geoLoopOffset + SZ_GEOLOOP;\n  var holesOffset = numHolesOffset + SZ_INT;\n  // Offset of the geoLoop vertex array pointer within the GeoLoop struct\n  var geoLoopArrayOffset = SZ_INT;\n  // Free the outer vertex array\n  libh3._free(libh3.getValue(geoPolygon + geoLoopOffset + geoLoopArrayOffset, 'i8*'));\n  // Free the vertex array for the holes, if any\n  var numHoles = libh3.getValue(geoPolygon + numHolesOffset, 'i32');\n  if (numHoles > 0) {\n    var holes = libh3.getValue(geoPolygon + holesOffset, 'i32');\n    for (var i = 0; i < numHoles; i++) {\n      libh3._free(libh3.getValue(holes + SZ_GEOLOOP * i + geoLoopArrayOffset, 'i8*'));\n    }\n    libh3._free(holes);\n  }\n  libh3._free(geoPolygon);\n}\n\n/**\n * Read an H3 index from a pointer to C memory.\n * @private\n * @param  {number} cAddress  Pointer to allocated C memory\n * @param {number} offset     Offset, in number of H3 indexes, in case we're\n *                            reading an array\n * @return {H3Index | null}   H3 index, or null if index was invalid\n */\nfunction readH3IndexFromPointer(cAddress, offset) {\n  if ( offset === void 0 ) offset = 0;\n\n  var lower = libh3.getValue(cAddress + SZ_H3INDEX * offset, 'i32');\n  var upper = libh3.getValue(cAddress + SZ_H3INDEX * offset + SZ_INT, 'i32');\n  // The lower bits are allowed to be 0s, but if the upper bits are 0\n  // this represents an invalid H3 index\n  return upper ? splitLongToH3Index(lower, upper) : null;\n}\n\n/**\n * Read a boolean (32 bit) from a pointer to C memory.\n * @private\n * @param  {number} cAddress  Pointer to allocated C memory\n * @param {number} offset     Offset, in number of booleans, in case we're\n *                            reading an array\n * @return {Boolean} Boolean value\n */\nfunction readBooleanFromPointer(cAddress, offset) {\n  if ( offset === void 0 ) offset = 0;\n\n  var val = libh3.getValue(cAddress + SZ_INT * offset, 'i32');\n  return Boolean(val);\n}\n\n/**\n * Read a double from a pointer to C memory.\n * @private\n * @param  {number} cAddress  Pointer to allocated C memory\n * @param {number} offset     Offset, in number of doubles, in case we're\n *                            reading an array\n * @return {number} Double value\n */\nfunction readDoubleFromPointer(cAddress, offset) {\n  if ( offset === void 0 ) offset = 0;\n\n  return libh3.getValue(cAddress + SZ_DBL * offset, 'double');\n}\n\n/**\n * Read a 64-bit int from a pointer to C memory into a JS 64-bit float.\n * Note that this may lose precision if larger than MAX_SAFE_INTEGER\n * @private\n * @param  {number} cAddress  Pointer to allocated C memory\n * @return {number} Double value\n */\nfunction readInt64AsDoubleFromPointer(cAddress) {\n  return H3.readInt64AsDoubleFromPointer(cAddress);\n}\n\n/**\n * Store an H3 index in C memory. Primarily used as an efficient way to\n * write sets of hexagons.\n * @private\n * @param  {H3IndexInput} h3Index  H3 index to store\n * @param  {number} cAddress  Pointer to allocated C memory\n * @param {number} offset     Offset, in number of H3 indexes from beginning\n *                            of the current array\n */\nfunction storeH3Index(h3Index, cAddress, offset) {\n  // HEAPU32 is a typed array projection on the index space\n  // as unsigned 32-bit integers. This means the index needs\n  // to be divided by SZ_INT (4) to access correctly. Also,\n  // the H3 index is 64 bits, so we skip by twos as we're writing\n  // to 32-bit integers in the proper order.\n  libh3.HEAPU32.set(h3IndexToSplitLong(h3Index), cAddress / SZ_INT + 2 * offset);\n}\n\n/**\n * Read an array of 64-bit H3 indexes from C and convert to a JS array of\n * H3 index strings\n * @private\n * @param  {number} cAddress    Pointer to C ouput array\n * @param  {number} maxCount    Max number of hexagons in array. Hexagons with\n *                              the value 0 will be skipped, so this isn't\n *                              necessarily the length of the output array.\n * @return {H3Index[]}          Array of H3 indexes\n */\nfunction readArrayOfH3Indexes(cAddress, maxCount) {\n  var out = [];\n  for (var i = 0; i < maxCount; i++) {\n    var h3Index = readH3IndexFromPointer(cAddress, i);\n    if (h3Index !== null) {\n      out.push(h3Index);\n    }\n  }\n  return out;\n}\n\n/**\n * Store an array of H3 index strings as a C array of 64-bit integers.\n * @private\n * @param  {number} cAddress    Pointer to C input array\n * @param  {H3IndexInput[]} hexagons H3 indexes to pass to the C lib\n */\nfunction storeArrayOfH3Indexes(cAddress, hexagons) {\n  // Assuming the cAddress points to an already appropriately\n  // allocated space\n  var count = hexagons.length;\n  for (var i = 0; i < count; i++) {\n    storeH3Index(hexagons[i], cAddress, i);\n  }\n}\n\n/**\n * Populate a C-appropriate LatLng struct from a [lat, lng] array\n * @private\n * @param {number} lat     Coordinate latitude\n * @param {number} lng     Coordinate longitude\n * @return {number}        C pointer to populated LatLng struct\n */\nfunction storeLatLng(lat, lng) {\n  var geoCoord = libh3._calloc(1, SZ_LATLNG);\n  libh3.HEAPF64.set([lat, lng].map(degsToRads), geoCoord / SZ_DBL);\n  return geoCoord;\n}\n\n/**\n * Read a single lat or lng value\n * @private\n * @param  {number} cAddress Pointer to C value\n * @return {number}\n */\nfunction readSingleCoord(cAddress) {\n  return radsToDegs(libh3.getValue(cAddress, 'double'));\n}\n\n/**\n * Read a LatLng from C and return a [lat, lng] pair.\n * @private\n * @param  {number} cAddress    Pointer to C struct\n * @return {CoordPair}          [lat, lng] pair\n */\nfunction readLatLng(cAddress) {\n  return [readSingleCoord(cAddress), readSingleCoord(cAddress + SZ_DBL)];\n}\n\n/**\n * Read a LatLng from C and return a GeoJSON-style [lng, lat] pair.\n * @private\n * @param  {number} cAddress    Pointer to C struct\n * @return {CoordPair}          [lng, lat] pair\n */\nfunction readLatLngGeoJson(cAddress) {\n  return [readSingleCoord(cAddress + SZ_DBL), readSingleCoord(cAddress)];\n}\n\n/**\n * Read the CellBoundary structure into a list of geo coordinate pairs\n * @private\n * @param {number}  cellBoundary       C pointer to CellBoundary struct\n * @param {boolean} [geoJsonCoords]    Whether to provide GeoJSON coordinate order: [lng, lat]\n * @param {boolean} [closedLoop]       Whether to close the loop\n * @return {CoordPair[]}               Array of geo coordinate pairs\n */\nfunction readCellBoundary(cellBoundary, geoJsonCoords, closedLoop) {\n  var numVerts = libh3.getValue(cellBoundary, 'i32');\n  // Note that though numVerts is an int, the coordinate doubles have to be\n  // aligned to 8 bytes, hence the 8-byte offset here\n  var vertsPos = cellBoundary + SZ_DBL;\n  var out = [];\n  // Support [lng, lat] pairs if GeoJSON is specified\n  var readCoord = geoJsonCoords ? readLatLngGeoJson : readLatLng;\n  for (var i = 0; i < numVerts * 2; i += 2) {\n    out.push(readCoord(vertsPos + SZ_DBL * i));\n  }\n  if (closedLoop) {\n    // Close loop if GeoJSON is specified\n    out.push(out[0]);\n  }\n  return out;\n}\n\n/**\n * Read the LinkedGeoPolygon structure into a nested array of MultiPolygon coordinates\n * @private\n * @param {number}  polygon           C pointer to LinkedGeoPolygon struct\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {CoordPair[][][]}          MultiPolygon-style output.\n */\nfunction readMultiPolygon(polygon, formatAsGeoJson) {\n  var output = [];\n  var readCoord = formatAsGeoJson ? readLatLngGeoJson : readLatLng;\n  var loops;\n  var loop;\n  var coords;\n  var coord;\n  // Loop through the linked structure, building the output\n  while (polygon) {\n    output.push(loops = []);\n    // Follow ->first pointer\n    loop = libh3.getValue(polygon, 'i8*');\n    while (loop) {\n      loops.push(coords = []);\n      // Follow ->first pointer\n      coord = libh3.getValue(loop, 'i8*');\n      while (coord) {\n        coords.push(readCoord(coord));\n        // Follow ->next pointer\n        coord = libh3.getValue(coord + SZ_DBL * 2, 'i8*');\n      }\n      if (formatAsGeoJson) {\n        // Close loop if GeoJSON is requested\n        coords.push(coords[0]);\n      }\n      // Follow ->next pointer\n      loop = libh3.getValue(loop + SZ_PTR * 2, 'i8*');\n    }\n    // Follow ->next pointer\n    polygon = libh3.getValue(polygon + SZ_PTR * 2, 'i8*');\n  }\n  return output;\n}\n\n/**\n * Read a CoordIJ from C and return an {i, j} pair.\n * @private\n * @param  {number} cAddress    Pointer to C struct\n * @return {CoordIJ}            {i, j} pair\n */\nfunction readCoordIJ(cAddress) {\n  return {\n    i: libh3.getValue(cAddress, 'i32'),\n    j: libh3.getValue(cAddress + SZ_INT, 'i32')\n  };\n}\n\n/**\n * Store an {i, j} pair to a C CoordIJ struct.\n * @private\n * @param  {number} cAddress    Pointer to C memory\n * @param {CoordIJ} ij          {i,j} pair to store\n * @return {void}\n */\nfunction storeCoordIJ(cAddress, ref) {\n  var i = ref.i;\n  var j = ref.j;\n\n  libh3.setValue(cAddress, i, 'i32');\n  libh3.setValue(cAddress + SZ_INT, j, 'i32');\n}\n\n/**\n * Read an array of positive integers array from C. Negative\n * values are considered invalid and ignored in output.\n * @private\n * @param  {number} cAddress    Pointer to C array\n * @param  {number} count       Length of C array\n * @return {number[]}           Javascript integer array\n */\nfunction readArrayOfPositiveIntegers(cAddress, count) {\n  var out = [];\n  for (var i = 0; i < count; i++) {\n    var int = libh3.getValue(cAddress + SZ_INT * i, 'i32');\n    if (int >= 0) {\n      out.push(int);\n    }\n  }\n  return out;\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Core\n\n/**\n * Whether a given string represents a valid H3 cell index\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to check\n * @return {boolean}          Whether the cell index is valid\n */\nfunction isValidCell(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  return Boolean(H3.isValidCell(lower, upper));\n}\n\n/**\n * Whether a given string represents a valid H3 index\n * (e.g. it may be a cell, directed edge, vertex.)\n * Use <code>isValidCell</code> to check for a valid\n * hexagon (or pentagon) cell ID.\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to check\n * @return {boolean}          Whether the index is valid\n */\nfunction isValidIndex(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  return Boolean(H3.isValidIndex(lower, upper));\n}\n\n/**\n * Whether the given H3 index is a pentagon\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to check\n * @return {boolean}          isPentagon\n */\nfunction isPentagon(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  return Boolean(H3.isPentagon(lower, upper));\n}\n\n/**\n * Whether the given H3 index is in a Class III resolution (rotated versus\n * the icosahedron and subject to shape distortion adding extra points on\n * icosahedron edges, making them not true hexagons).\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to check\n * @return {boolean}          isResClassIII\n */\nfunction isResClassIII(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  return Boolean(H3.isResClassIII(lower, upper));\n}\n\n/**\n * Get the number of the base cell for a given H3 index\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to get the base cell for\n * @return {number}           Index of the base cell (0-121)\n */\nfunction getBaseCellNumber(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  return H3.getBaseCellNumber(lower, upper);\n}\n\n/**\n * Get the number of the indexing digit for an H3 index\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to get the digit for\n * @param  {number} digit          Indexing digit to get the valeu of\n * @return {number}           Digit (0-7)\n */\nfunction getIndexDigit(h3Index, digit) {\n  var out = libh3._malloc(SZ_INT);\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  try {\n    throwIfError(H3.getIndexDigit(lower, upper, digit, out));\n    return libh3.getValue(out, 'i32');\n  } finally {\n    libh3._free(out);\n  }\n}\n\n/**\n * Get the indices of all icosahedron faces intersected by a given H3 index\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to get faces for\n * @return {number[]}              Indices (0-19) of all intersected faces\n * @throws {H3Error}               If input is invalid\n */\nfunction getIcosahedronFaces(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var countPtr = libh3._malloc(SZ_INT);\n  try {\n    throwIfError(H3.maxFaceCount(lower, upper, countPtr));\n    var count = libh3.getValue(countPtr, 'i32');\n    var faces = libh3._malloc(SZ_INT * count);\n    try {\n      throwIfError(H3.getIcosahedronFaces(lower, upper, faces));\n      return readArrayOfPositiveIntegers(faces, count);\n    } finally {\n      libh3._free(faces);\n    }\n  } finally {\n    libh3._free(countPtr);\n  }\n}\n\n/**\n * Returns the resolution of an H3 index\n * @static\n * @param  {H3IndexInput} h3Index H3 index to get resolution\n * @return {number}          The number (0-15) resolution, or -1 if invalid\n */\nfunction getResolution(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  if (!H3.isValidCell(lower, upper)) {\n    // Compatability with stated API\n    return -1;\n  }\n  return H3.getResolution(lower, upper);\n}\n\n/**\n * Creates a cell from its components (resolution, base cell number, and indexing digits).\n * This is the inverse operation of `getResolution`, `getBaseCellNumber`, and `getIndexDigit`.\n * Only allows creating valid cells.\n *\n * @static\n * @param  {number}   baseCellNumber Base cell number of cell to return\n * @param  {number[]} digits Indexing digits of cell to return\n * @param  {number}   res Resolution of cell to return. Optional, if not specified, will be inferred from digits.\n * @return {H3Index}    H3 index\n * @throws {H3Error}    If input is invalid\n */\nfunction constructCell(baseCellNumber, digits, res) {\n  if (res === undefined) {\n    res = digits.length;\n  }\n  if (digits.length !== res) {\n    throw H3LibraryError(E_DIGIT_DOMAIN, digits.length);\n  }\n  if (digits.length > 15) {\n    throw H3LibraryError(E_DIGIT_DOMAIN, digits.length);\n  }\n  var digitsMemory = libh3._malloc(SZ_INT * digits.length);\n  var h3Index = libh3._malloc(SZ_H3INDEX);\n  try {\n    digits.forEach(function (value, idx) {\n      libh3.setValue(digitsMemory + SZ_INT * idx, value, 'i32');\n    });\n    throwIfError(H3.constructCell(res, baseCellNumber, digitsMemory, h3Index));\n    return validateH3Index(readH3IndexFromPointer(h3Index));\n  } finally {\n    libh3._free(h3Index);\n    libh3._free(digitsMemory);\n  }\n}\n\n/**\n * Get the hexagon (or pentagon) containing a lat,lon point\n * @static\n * @param  {number} lat Latitude of point\n * @param  {number} lng Longtitude of point\n * @param  {number} res Resolution of cell to return\n * @return {H3Index}    H3 index\n * @throws {H3Error}    If input is invalid\n */\nfunction latLngToCell(lat, lng, res) {\n  var latLng = libh3._malloc(SZ_LATLNG);\n  // Slightly more efficient way to set the memory\n  libh3.HEAPF64.set([lat, lng].map(degsToRads), latLng / SZ_DBL);\n  // Read value as a split long\n  var h3Index = libh3._malloc(SZ_H3INDEX);\n  try {\n    throwIfError(H3.latLngToCell(latLng, res, h3Index));\n    return validateH3Index(readH3IndexFromPointer(h3Index));\n  } finally {\n    libh3._free(h3Index);\n    libh3._free(latLng);\n  }\n}\n\n/**\n * Get the lat,lon center of a given hexagon (or pentagon)\n * @static\n * @param  {H3IndexInput} h3Index  H3 index\n * @return {CoordPair}             Point as a [lat, lng] pair\n * @throws {H3Error}               If input is invalid\n */\nfunction cellToLatLng(h3Index) {\n  var latLng = libh3._malloc(SZ_LATLNG);\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  try {\n    throwIfError(H3.cellToLatLng(lower, upper, latLng));\n    return readLatLng(latLng);\n  } finally {\n    libh3._free(latLng);\n  }\n}\n\n/**\n * Get the vertices of a given hexagon (or pentagon), as an array of [lat, lng]\n * points. For pentagons and hexagons on the edge of an icosahedron face, this\n * function may return up to 10 vertices.\n * @static\n * @param  {H3IndexInput} h3Index          H3 index\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {CoordPair[]}              Array of [lat, lng] pairs\n * @throws {H3Error}                  If input is invalid\n */\nfunction cellToBoundary(h3Index, formatAsGeoJson) {\n  var cellBoundary = libh3._malloc(SZ_CELLBOUNDARY);\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  try {\n    throwIfError(H3.cellToBoundary(lower, upper, cellBoundary));\n    return readCellBoundary(cellBoundary, formatAsGeoJson, formatAsGeoJson);\n  } finally {\n    libh3._free(cellBoundary);\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Algorithms\n\n/**\n * Get the parent of the given hexagon at a particular resolution\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to get parent for\n * @param  {number} res       Resolution of hexagon to return\n * @return {H3Index}          H3 index of parent, or null for invalid input\n * @throws {H3Error}          If input is invalid\n */\nfunction cellToParent(h3Index, res) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var parent = libh3._malloc(SZ_H3INDEX);\n  try {\n    throwIfError(H3.cellToParent(lower, upper, res, parent));\n    return validateH3Index(readH3IndexFromPointer(parent));\n  } finally {\n    libh3._free(parent);\n  }\n}\n\n/**\n * Get the children/descendents of the given hexagon at a particular resolution\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to get children for\n * @param  {number} res       Resolution of hexagons to return\n * @return {H3Index[]}        H3 indexes of children, or empty array for invalid input\n * @throws {H3Error}          If resolution is invalid or output is too large for JS\n */\nfunction cellToChildren(h3Index, res) {\n  // Bad input in this case can potentially result in high computation volume\n  // using the current C algorithm. Validate and return an empty array on failure.\n  if (!isValidCell(h3Index)) {\n    return [];\n  }\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var count = validateArrayLength(cellToChildrenSize(h3Index, res));\n  var hexagons = libh3._calloc(count, SZ_H3INDEX);\n  try {\n    throwIfError(H3.cellToChildren(lower, upper, res, hexagons));\n    return readArrayOfH3Indexes(hexagons, count);\n  } finally {\n    libh3._free(hexagons);\n  }\n}\n\n/**\n * Get the number of children for a cell at a given resolution\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to get child count for\n * @param  {number} res            Child resolution\n * @return {number}                Number of children at res for the given cell\n * @throws {H3Error}               If cell or parentRes are invalid\n */\nfunction cellToChildrenSize(h3Index, res) {\n  if (!isValidCell(h3Index)) {\n    throw H3LibraryError(E_CELL_INVALID);\n  }\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var countPtr = libh3._malloc(SZ_INT64);\n  try {\n    throwIfError(H3.cellToChildrenSize(lower, upper, res, countPtr));\n    return readInt64AsDoubleFromPointer(countPtr);\n  } finally {\n    libh3._free(countPtr);\n  }\n}\n\n/**\n * Get the center child of the given hexagon at a particular resolution\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to get center child for\n * @param  {number} res       Resolution of cell to return\n * @return {H3Index}          H3 index of child, or null for invalid input\n * @throws {H3Error}          If resolution is invalid\n */\nfunction cellToCenterChild(h3Index, res) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var centerChild = libh3._malloc(SZ_H3INDEX);\n  try {\n    throwIfError(H3.cellToCenterChild(lower, upper, res, centerChild));\n    return validateH3Index(readH3IndexFromPointer(centerChild));\n  } finally {\n    libh3._free(centerChild);\n  }\n}\n\n/**\n * Get the position of the cell within an ordered list of all children of the\n * cell's parent at the specified resolution.\n * @static\n * @param  {H3IndexInput} h3Index  H3 index to get child pos for\n * @param  {number} parentRes      Resolution of reference parent\n * @return {number}                Position of child within parent at parentRes\n * @throws {H3Error}               If cell or parentRes are invalid\n */\nfunction cellToChildPos(h3Index, parentRes) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var childPos = libh3._malloc(SZ_INT64);\n  try {\n    throwIfError(H3.cellToChildPos(lower, upper, parentRes, childPos));\n    return readInt64AsDoubleFromPointer(childPos);\n  } finally {\n    libh3._free(childPos);\n  }\n}\n\n/**\n * Get the child cell at a given position within an ordered list of all children\n * at the specified resolution\n * @static\n * @param  {number} childPos       Position of the child cell to get\n * @param  {H3IndexInput} h3Index  H3 index of the parent cell\n * @param  {number} childRes       Resolution of child cell to return\n * @return {H3Index}          H3 index of child\n * @throws {H3Error}          If input is invalid\n */\nfunction childPosToCell(childPos, h3Index, childRes) {\n  var ref = numberToSplitLong(childPos);\n  var cpLower = ref[0];\n  var cpUpper = ref[1];\n  var ref$1 = h3IndexToSplitLong(h3Index);\n  var lower = ref$1[0];\n  var upper = ref$1[1];\n  var child = libh3._malloc(SZ_H3INDEX);\n  try {\n    throwIfError(H3.childPosToCell(cpLower, cpUpper, lower, upper, childRes, child));\n    return validateH3Index(readH3IndexFromPointer(child));\n  } finally {\n    libh3._free(child);\n  }\n}\n\n/**\n * Get all hexagons in a k-ring around a given center. The order of the hexagons is undefined.\n * @static\n * @param  {H3IndexInput} h3Index  H3 index of center hexagon\n * @param  {number} ringSize  Radius of k-ring\n * @return {H3Index[]}        H3 indexes for all hexagons in ring\n * @throws {H3Error}          If input is invalid or output is too large for JS\n */\nfunction gridDisk(h3Index, ringSize) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var countPtr = libh3._malloc(SZ_INT64);\n  try {\n    throwIfError(H3.maxGridDiskSize(ringSize, countPtr));\n    var count = validateArrayLength(readInt64AsDoubleFromPointer(countPtr));\n    var hexagons = libh3._calloc(count, SZ_H3INDEX);\n    try {\n      throwIfError(H3.gridDisk(lower, upper, ringSize, hexagons));\n      return readArrayOfH3Indexes(hexagons, count);\n    } finally {\n      libh3._free(hexagons);\n    }\n  } finally {\n    libh3._free(countPtr);\n  }\n}\n\n/**\n * Get all hexagons in a k-ring around a given center, in an array of arrays\n * ordered by distance from the origin. The order of the hexagons within each ring is undefined.\n * @static\n * @param  {H3IndexInput} h3Index  H3 index of center hexagon\n * @param  {number} ringSize  Radius of k-ring\n * @return {H3Index[][]}      Array of arrays with H3 indexes for all hexagons each ring\n * @throws {H3Error}          If input is invalid or output is too large for JS\n */\nfunction gridDiskDistances(h3Index, ringSize) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var countPtr = libh3._malloc(SZ_INT64);\n  try {\n    throwIfError(H3.maxGridDiskSize(ringSize, countPtr));\n    var count = validateArrayLength(readInt64AsDoubleFromPointer(countPtr));\n    var kRings = libh3._calloc(count, SZ_H3INDEX);\n    var distances = libh3._calloc(count, SZ_INT);\n    try {\n      throwIfError(H3.gridDiskDistances(lower, upper, ringSize, kRings, distances));\n      /**\n       * An array of empty arrays to hold the output\n       * @type {string[][]}\n       * @private\n       */\n      var out = [];\n      for (var i = 0; i < ringSize + 1; i++) {\n        out.push([]);\n      }\n      // Read the array of hexagons, putting them into the appropriate rings\n      for (var i$1 = 0; i$1 < count; i$1++) {\n        var cell = readH3IndexFromPointer(kRings, i$1);\n        var index = libh3.getValue(distances + SZ_INT * i$1, 'i32');\n        // eslint-disable-next-line max-depth\n        if (cell !== null) {\n          out[index].push(cell);\n        }\n      }\n      return out;\n    } finally {\n      libh3._free(kRings);\n      libh3._free(distances);\n    }\n  } finally {\n    libh3._free(countPtr);\n  }\n}\n\n/**\n * Get all hexagons in a hollow hexagonal ring centered at origin with sides of a given length.\n * @static\n * @param  {H3IndexInput} h3Index  H3 index of center hexagon\n * @param  {number} ringSize  Radius of ring\n * @return {H3Index[]}        H3 indexes for all hexagons in ring\n * @throws {Error}            If the algorithm could not calculate the ring\n * @throws {H3Error}          If input is invalid\n */\nfunction gridRing(h3Index, ringSize) {\n  var maxCount = ringSize === 0 ? 1 : 6 * ringSize;\n  var hexagons = libh3._calloc(maxCount, SZ_H3INDEX);\n  try {\n    throwIfError(H3.gridRing.apply(H3, h3IndexToSplitLong(h3Index).concat( [ringSize], [hexagons] )));\n    return readArrayOfH3Indexes(hexagons, maxCount);\n  } finally {\n    libh3._free(hexagons);\n  }\n}\n\n/**\n * Get all hexagons in a hollow hexagonal ring centered at origin with sides of a given length.\n * Unlike gridDisk, this function will throw an error if there is a pentagon anywhere in the ring.\n * @static\n * @param  {H3IndexInput} h3Index  H3 index of center hexagon\n * @param  {number} ringSize  Radius of ring\n * @return {H3Index[]}        H3 indexes for all hexagons in ring\n * @throws {Error}            If the algorithm could not calculate the ring\n * @throws {H3Error}          If input is invalid\n */\nfunction gridRingUnsafe(h3Index, ringSize) {\n  var maxCount = ringSize === 0 ? 1 : 6 * ringSize;\n  var hexagons = libh3._calloc(maxCount, SZ_H3INDEX);\n  try {\n    throwIfError(H3.gridRingUnsafe.apply(H3, h3IndexToSplitLong(h3Index).concat( [ringSize], [hexagons] )));\n    return readArrayOfH3Indexes(hexagons, maxCount);\n  } finally {\n    libh3._free(hexagons);\n  }\n}\n\n/**\n * Get all hexagons with centers contained in a given polygon. The polygon\n * is specified with GeoJson semantics as an array of loops. Each loop is\n * an array of [lat, lng] pairs (or [lng, lat] if isGeoJson is specified).\n * The first loop is the perimeter of the polygon, and subsequent loops are\n * expected to be holes.\n * @static\n * @param  {number[][] | number[][][]} coordinates\n *                                  Array of loops, or a single loop\n * @param  {number} res             Resolution of hexagons to return\n * @param  {boolean} [isGeoJson]    Whether to expect GeoJson-style [lng, lat]\n *                                  pairs instead of [lat, lng]\n * @return {H3Index[]}              H3 indexes for all hexagons in polygon\n * @throws {H3Error}                If input is invalid or output is too large for JS\n */\nfunction polygonToCells(coordinates, res, isGeoJson) {\n  validateRes(res);\n  isGeoJson = Boolean(isGeoJson);\n  // Guard against empty input\n  if (coordinates.length === 0 || coordinates[0].length === 0) {\n    return [];\n  }\n  // Wrap to expected format if a single loop is provided\n  var polygon = typeof coordinates[0][0] === 'number' ? [coordinates] : coordinates;\n  var geoPolygon = coordinatesToGeoPolygon(\n  // @ts-expect-error - There's no way to convince TS that polygon is now number[][][]\n  polygon, isGeoJson);\n  var countPtr = libh3._malloc(SZ_INT64);\n  try {\n    throwIfError(H3.maxPolygonToCellsSize(geoPolygon, res, 0, countPtr));\n    var count = validateArrayLength(readInt64AsDoubleFromPointer(countPtr));\n    var hexagons = libh3._calloc(count, SZ_H3INDEX);\n    try {\n      throwIfError(H3.polygonToCells(geoPolygon, res, 0, hexagons));\n      return readArrayOfH3Indexes(hexagons, count);\n    } finally {\n      libh3._free(hexagons);\n    }\n  } finally {\n    libh3._free(countPtr);\n    destroyGeoPolygon(geoPolygon);\n  }\n}\n\n/**\n * Get all hexagons with centers contained in a given polygon. The polygon\n * is specified with GeoJson semantics as an array of loops. Each loop is\n * an array of [lat, lng] pairs (or [lng, lat] if isGeoJson is specified).\n * The first loop is the perimeter of the polygon, and subsequent loops are\n * expected to be holes.\n * @static\n * @param  {number[][] | number[][][]} coordinates\n *                                  Array of loops, or a single loop\n * @param  {number} res             Resolution of hexagons to return\n * @param  {string} flags           Value from POLYGON_TO_CELLS_FLAGS\n * @param  {boolean} [isGeoJson]    Whether to expect GeoJson-style [lng, lat]\n *                                  pairs instead of [lat, lng]\n * @return {H3Index[]}              H3 indexes for all hexagons in polygon\n * @throws {H3Error}                If input is invalid or output is too large for JS\n */\nfunction polygonToCellsExperimental(coordinates, res, flags, isGeoJson) {\n  validateRes(res);\n  isGeoJson = Boolean(isGeoJson);\n  var flagsInt = polygonToCellsFlagsToNumber(flags);\n  // Guard against empty input\n  if (coordinates.length === 0 || coordinates[0].length === 0) {\n    return [];\n  }\n  // Wrap to expected format if a single loop is provided\n  var polygon = typeof coordinates[0][0] === 'number' ? [coordinates] : coordinates;\n  var geoPolygon = coordinatesToGeoPolygon(\n  // @ts-expect-error - There's no way to convince TS that polygon is now number[][][]\n  polygon, isGeoJson);\n  var countPtr = libh3._malloc(SZ_INT64);\n  try {\n    throwIfError(H3.maxPolygonToCellsSizeExperimental(geoPolygon, res, flagsInt, countPtr));\n    var count = validateArrayLength(readInt64AsDoubleFromPointer(countPtr));\n    var hexagons = libh3._calloc(count, SZ_H3INDEX);\n    try {\n      throwIfError(H3.polygonToCellsExperimental(geoPolygon, res, flagsInt, count, UNUSED_UPPER_32_BITS, hexagons));\n      return readArrayOfH3Indexes(hexagons, count);\n    } finally {\n      libh3._free(hexagons);\n    }\n  } finally {\n    libh3._free(countPtr);\n    destroyGeoPolygon(geoPolygon);\n  }\n}\n\n/**\n * Get the outlines of a set of H3 hexagons, returned in GeoJSON MultiPolygon\n * format (an array of polygons, each with an array of loops, each an array of\n * coordinates). Coordinates are returned as [lat, lng] pairs unless GeoJSON\n * is requested.\n *\n * It is the responsibility of the caller to ensure that all hexagons in the\n * set have the same resolution and that the set contains no duplicates. Behavior\n * is undefined if duplicates or multiple resolutions are present, and the\n * algorithm may produce unexpected or invalid polygons.\n *\n * @static\n * @param {H3IndexInput[]} h3Indexes  H3 indexes to get outlines for\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {CoordPair[][][]}          MultiPolygon-style output.\n * @throws {H3Error}                  If input is invalid\n */\nfunction cellsToMultiPolygon(h3Indexes, formatAsGeoJson) {\n  // Early exit on empty input\n  if (!h3Indexes || !h3Indexes.length) {\n    return [];\n  }\n  // Set up input set\n  var indexCount = h3Indexes.length;\n  var set = libh3._calloc(indexCount, SZ_H3INDEX);\n  storeArrayOfH3Indexes(set, h3Indexes);\n  // Allocate memory for output linked polygon\n  var polygon = libh3._calloc(SZ_LINKED_GEOPOLYGON);\n  try {\n    throwIfError(H3.cellsToLinkedMultiPolygon(set, indexCount, polygon));\n    return readMultiPolygon(polygon, formatAsGeoJson);\n  } finally {\n    // Clean up\n    H3.destroyLinkedMultiPolygon(polygon);\n    libh3._free(polygon);\n    libh3._free(set);\n  }\n}\n\n/**\n * Compact a set of hexagons of the same resolution into a set of hexagons across\n * multiple levels that represents the same area.\n * @static\n * @param  {H3IndexInput[]} h3Set H3 indexes to compact\n * @return {H3Index[]}       Compacted H3 indexes\n * @throws {H3Error}         If the input is invalid (e.g. duplicate hexagons)\n */\nfunction compactCells(h3Set) {\n  if (!h3Set || !h3Set.length) {\n    return [];\n  }\n  // Set up input set\n  var count = h3Set.length;\n  var set = libh3._calloc(count, SZ_H3INDEX);\n  storeArrayOfH3Indexes(set, h3Set);\n  // Allocate memory for compacted hexagons, worst-case is no compaction\n  var compactedSet = libh3._calloc(count, SZ_H3INDEX);\n  try {\n    throwIfError(H3.compactCells(set, compactedSet, count, UNUSED_UPPER_32_BITS));\n    return readArrayOfH3Indexes(compactedSet, count);\n  } finally {\n    libh3._free(set);\n    libh3._free(compactedSet);\n  }\n}\n\n/**\n * Uncompact a compacted set of hexagons to hexagons of the same resolution\n * @static\n * @param  {H3IndexInput[]} compactedSet H3 indexes to uncompact\n * @param  {number}    res          The resolution to uncompact to\n * @return {H3Index[]}              The uncompacted H3 indexes\n * @throws {H3Error}                If the input is invalid (e.g. invalid resolution)\n */\nfunction uncompactCells(compactedSet, res) {\n  validateRes(res);\n  if (!compactedSet || !compactedSet.length) {\n    return [];\n  }\n  // Set up input set\n  var count = compactedSet.length;\n  var set = libh3._calloc(count, SZ_H3INDEX);\n  storeArrayOfH3Indexes(set, compactedSet);\n  // Estimate how many hexagons we need (always overestimates if in error)\n  var uncompactCellSizePtr = libh3._malloc(SZ_INT64);\n  try {\n    throwIfError(H3.uncompactCellsSize(set, count, UNUSED_UPPER_32_BITS, res, uncompactCellSizePtr));\n    var uncompactCellSize = validateArrayLength(readInt64AsDoubleFromPointer(uncompactCellSizePtr));\n    // Allocate memory for uncompacted hexagons\n    var uncompactedSet = libh3._calloc(uncompactCellSize, SZ_H3INDEX);\n    try {\n      throwIfError(H3.uncompactCells(set, count, UNUSED_UPPER_32_BITS, uncompactedSet, uncompactCellSize, UNUSED_UPPER_32_BITS, res));\n      return readArrayOfH3Indexes(uncompactedSet, uncompactCellSize);\n    } finally {\n      libh3._free(set);\n      libh3._free(uncompactedSet);\n    }\n  } finally {\n    libh3._free(uncompactCellSizePtr);\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Directed edges\n\n/**\n * Whether two H3 indexes are neighbors (share an edge)\n * @static\n * @param  {H3IndexInput} origin      Origin hexagon index\n * @param  {H3IndexInput} destination Destination hexagon index\n * @return {boolean}             Whether the hexagons share an edge\n * @throws {H3Error}             If the input is invalid\n */\nfunction areNeighborCells(origin, destination) {\n  var ref = h3IndexToSplitLong(origin);\n  var oLower = ref[0];\n  var oUpper = ref[1];\n  var ref$1 = h3IndexToSplitLong(destination);\n  var dLower = ref$1[0];\n  var dUpper = ref$1[1];\n  var out = libh3._malloc(SZ_INT);\n  try {\n    throwIfError(H3.areNeighborCells(oLower, oUpper, dLower, dUpper, out));\n    return readBooleanFromPointer(out);\n  } finally {\n    libh3._free(out);\n  }\n}\n\n/**\n * Get an H3 index representing a unidirectional edge for a given origin and destination\n * @static\n * @param  {H3IndexInput} origin      Origin hexagon index\n * @param  {H3IndexInput} destination Destination hexagon index\n * @return {H3Index}             H3 index of the edge, or null if no edge is shared\n * @throws {H3Error}             If the input is invalid\n */\nfunction cellsToDirectedEdge(origin, destination) {\n  var ref = h3IndexToSplitLong(origin);\n  var oLower = ref[0];\n  var oUpper = ref[1];\n  var ref$1 = h3IndexToSplitLong(destination);\n  var dLower = ref$1[0];\n  var dUpper = ref$1[1];\n  var h3Index = libh3._malloc(SZ_H3INDEX);\n  try {\n    throwIfError(H3.cellsToDirectedEdge(oLower, oUpper, dLower, dUpper, h3Index));\n    return validateH3Index(readH3IndexFromPointer(h3Index));\n  } finally {\n    libh3._free(h3Index);\n  }\n}\n\n/**\n * Get the origin hexagon from an H3 index representing a unidirectional edge\n * @static\n * @param  {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index}           H3 index of the edge origin\n * @throws {H3Error}           If the input is invalid\n */\nfunction getDirectedEdgeOrigin(edgeIndex) {\n  var ref = h3IndexToSplitLong(edgeIndex);\n  var lower = ref[0];\n  var upper = ref[1];\n  var h3Index = libh3._malloc(SZ_H3INDEX);\n  try {\n    throwIfError(H3.getDirectedEdgeOrigin(lower, upper, h3Index));\n    return validateH3Index(readH3IndexFromPointer(h3Index));\n  } finally {\n    libh3._free(h3Index);\n  }\n}\n\n/**\n * Get the destination hexagon from an H3 index representing a unidirectional edge\n * @static\n * @param  {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index}           H3 index of the edge destination\n * @throws {H3Error}           If the input is invalid\n */\nfunction getDirectedEdgeDestination(edgeIndex) {\n  var ref = h3IndexToSplitLong(edgeIndex);\n  var lower = ref[0];\n  var upper = ref[1];\n  var h3Index = libh3._malloc(SZ_H3INDEX);\n  try {\n    throwIfError(H3.getDirectedEdgeDestination(lower, upper, h3Index));\n    return validateH3Index(readH3IndexFromPointer(h3Index));\n  } finally {\n    libh3._free(h3Index);\n  }\n}\n\n/**\n * Whether the input is a valid unidirectional edge\n * @static\n * @param  {H3IndexInput} edgeIndex H3 index of the edge\n * @return {boolean}           Whether the index is valid\n */\nfunction isValidDirectedEdge(edgeIndex) {\n  var ref = h3IndexToSplitLong(edgeIndex);\n  var lower = ref[0];\n  var upper = ref[1];\n  return Boolean(H3.isValidDirectedEdge(lower, upper));\n}\n\n/**\n * Get the [origin, destination] pair represented by a unidirectional edge\n * @static\n * @param  {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index[]}         [origin, destination] pair as H3 indexes\n * @throws {H3Error}           If the input is invalid\n */\nfunction directedEdgeToCells(edgeIndex) {\n  var ref = h3IndexToSplitLong(edgeIndex);\n  var lower = ref[0];\n  var upper = ref[1];\n  var count = 2;\n  var hexagons = libh3._calloc(count, SZ_H3INDEX);\n  try {\n    throwIfError(H3.directedEdgeToCells(lower, upper, hexagons));\n    return readArrayOfH3Indexes(hexagons, count);\n  } finally {\n    libh3._free(hexagons);\n  }\n}\n\n/**\n * Get all of the unidirectional edges with the given H3 index as the origin (i.e. an edge to\n * every neighbor)\n * @static\n * @param  {H3IndexInput} h3Index   H3 index of the origin hexagon\n * @return {H3Index[]}         List of unidirectional edges\n * @throws {H3Error}           If the input is invalid\n */\nfunction originToDirectedEdges(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var count = 6;\n  var edges = libh3._calloc(count, SZ_H3INDEX);\n  try {\n    throwIfError(H3.originToDirectedEdges(lower, upper, edges));\n    return readArrayOfH3Indexes(edges, count);\n  } finally {\n    libh3._free(edges);\n  }\n}\n\n/**\n * Get the vertices of a given edge as an array of [lat, lng] points. Note that for edges that\n * cross the edge of an icosahedron face, this may return 3 coordinates.\n * @static\n * @param  {H3IndexInput} edgeIndex        H3 index of the edge\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat]\n * @return {CoordPair[]}              Array of geo coordinate pairs\n * @throws {H3Error}                  If the input is invalid\n */\nfunction directedEdgeToBoundary(edgeIndex, formatAsGeoJson) {\n  var cellBoundary = libh3._malloc(SZ_CELLBOUNDARY);\n  var ref = h3IndexToSplitLong(edgeIndex);\n  var lower = ref[0];\n  var upper = ref[1];\n  try {\n    throwIfError(H3.directedEdgeToBoundary(lower, upper, cellBoundary));\n    return readCellBoundary(cellBoundary, formatAsGeoJson);\n  } finally {\n    libh3._free(cellBoundary);\n  }\n}\n\n/**\n * Get the grid distance between two hex indexes. This function may fail\n * to find the distance between two indexes if they are very far apart or\n * on opposite sides of a pentagon.\n * @static\n * @param  {H3IndexInput} origin      Origin hexagon index\n * @param  {H3IndexInput} destination Destination hexagon index\n * @return {number}          Distance between hexagons\n * @throws {H3Error}         If input is invalid or the distance could not be calculated\n */\nfunction gridDistance(origin, destination) {\n  var ref = h3IndexToSplitLong(origin);\n  var oLower = ref[0];\n  var oUpper = ref[1];\n  var ref$1 = h3IndexToSplitLong(destination);\n  var dLower = ref$1[0];\n  var dUpper = ref$1[1];\n  var countPtr = libh3._malloc(SZ_INT64);\n  try {\n    throwIfError(H3.gridDistance(oLower, oUpper, dLower, dUpper, countPtr));\n    return readInt64AsDoubleFromPointer(countPtr);\n  } finally {\n    libh3._free(countPtr);\n  }\n}\n\n/**\n * Given two H3 indexes, return the line of indexes between them (inclusive).\n *\n * This function may fail to find the line between two indexes, for\n * example if they are very far apart. It may also fail when finding\n * distances for indexes on opposite sides of a pentagon.\n *\n * Notes:\n *\n *  - The specific output of this function should not be considered stable\n *    across library versions. The only guarantees the library provides are\n *    that the line length will be `h3Distance(start, end) + 1` and that\n *    every index in the line will be a neighbor of the preceding index.\n *  - Lines are drawn in grid space, and may not correspond exactly to either\n *    Cartesian lines or great arcs.\n *\n * @static\n * @param  {H3IndexInput} origin      Origin hexagon index\n * @param  {H3IndexInput} destination Destination hexagon index\n * @return {H3Index[]}           H3 indexes connecting origin and destination\n * @throws {H3Error}             If input is invalid or the line cannot be calculated\n */\nfunction gridPathCells(origin, destination) {\n  var ref = h3IndexToSplitLong(origin);\n  var oLower = ref[0];\n  var oUpper = ref[1];\n  var ref$1 = h3IndexToSplitLong(destination);\n  var dLower = ref$1[0];\n  var dUpper = ref$1[1];\n  var countPtr = libh3._malloc(SZ_INT64);\n  try {\n    throwIfError(H3.gridPathCellsSize(oLower, oUpper, dLower, dUpper, countPtr));\n    var count = validateArrayLength(readInt64AsDoubleFromPointer(countPtr));\n    var hexagons = libh3._calloc(count, SZ_H3INDEX);\n    try {\n      H3.gridPathCells(oLower, oUpper, dLower, dUpper, hexagons);\n      return readArrayOfH3Indexes(hexagons, count);\n    } finally {\n      libh3._free(hexagons);\n    }\n  } finally {\n    libh3._free(countPtr);\n  }\n}\nvar LOCAL_IJ_DEFAULT_MODE = 0;\n\n/**\n * Produces IJ coordinates for an H3 index anchored by an origin.\n *\n * - The coordinate space used by this function may have deleted\n * regions or warping due to pentagonal distortion.\n * - Coordinates are only comparable if they come from the same\n * origin index.\n * - Failure may occur if the index is too far away from the origin\n * or if the index is on the other side of a pentagon.\n * - This function is experimental, and its output is not guaranteed\n * to be compatible across different versions of H3.\n * @static\n * @param  {H3IndexInput} origin      Origin H3 index\n * @param  {H3IndexInput} destination H3 index for which to find relative coordinates\n * @return {CoordIJ}             Coordinates as an `{i, j}` pair\n * @throws {H3Error}             If the IJ coordinates cannot be calculated\n */\nfunction cellToLocalIj(origin, destination) {\n  var ij = libh3._malloc(SZ_COORDIJ);\n  try {\n    throwIfError(H3.cellToLocalIj.apply(H3, h3IndexToSplitLong(origin).concat( h3IndexToSplitLong(destination), [LOCAL_IJ_DEFAULT_MODE], [ij] )));\n    return readCoordIJ(ij);\n  } finally {\n    libh3._free(ij);\n  }\n}\n\n/**\n * Produces an H3 index for IJ coordinates anchored by an origin.\n *\n * - The coordinate space used by this function may have deleted\n * regions or warping due to pentagonal distortion.\n * - Coordinates are only comparable if they come from the same\n * origin index.\n * - Failure may occur if the index is too far away from the origin\n * or if the index is on the other side of a pentagon.\n * - This function is experimental, and its output is not guaranteed\n * to be compatible across different versions of H3.\n * @static\n * @param  {H3IndexInput} origin     Origin H3 index\n * @param  {CoordIJ} coords     Coordinates as an `{i, j}` pair\n * @return {H3Index}            H3 index at the relative coordinates\n * @throws {H3Error}            If the H3 index cannot be calculated\n */\nfunction localIjToCell(origin, coords) {\n  // Validate input coords\n  if (!coords || typeof coords.i !== 'number' || typeof coords.j !== 'number') {\n    throw new Error('Coordinates must be provided as an {i, j} object');\n  }\n  // Allocate memory for the CoordIJ struct and an H3 index to hold the return value\n  var ij = libh3._malloc(SZ_COORDIJ);\n  var out = libh3._malloc(SZ_H3INDEX);\n  storeCoordIJ(ij, coords);\n  try {\n    throwIfError(H3.localIjToCell.apply(H3, h3IndexToSplitLong(origin).concat( [ij], [LOCAL_IJ_DEFAULT_MODE], [out] )));\n    return validateH3Index(readH3IndexFromPointer(out));\n  } finally {\n    libh3._free(ij);\n    libh3._free(out);\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Distance/area utilities\n\n/**\n * Great circle distance between two geo points. This is not specific to H3,\n * but is implemented in the library and provided here as a convenience.\n * @static\n * @param  {number[]} latLng1 Origin coordinate as [lat, lng]\n * @param  {number[]} latLng2 Destination coordinate as [lat, lng]\n * @param  {string}   unit    Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number}           Great circle distance\n * @throws {H3Error}          If the unit is invalid\n */\nfunction greatCircleDistance(latLng1, latLng2, unit) {\n  var coord1 = storeLatLng(latLng1[0], latLng1[1]);\n  var coord2 = storeLatLng(latLng2[0], latLng2[1]);\n  var result;\n  switch (unit) {\n    case UNITS.m:\n      result = H3.greatCircleDistanceM(coord1, coord2);\n      break;\n    case UNITS.km:\n      result = H3.greatCircleDistanceKm(coord1, coord2);\n      break;\n    case UNITS.rads:\n      result = H3.greatCircleDistanceRads(coord1, coord2);\n      break;\n    default:\n      result = null;\n  }\n  libh3._free(coord1);\n  libh3._free(coord2);\n  if (result === null) {\n    throw JSBindingError(E_UNKNOWN_UNIT, unit);\n  }\n  return result;\n}\n\n/**\n * Exact area of a given cell\n * @static\n * @param  {H3IndexInput} h3Index  H3 index of the hexagon to measure\n * @param  {string}  unit     Distance unit (either UNITS.m2, UNITS.km2, or UNITS.rads2)\n * @return {number}           Cell area\n * @throws {H3Error}          If the input is invalid\n */\nfunction cellArea(h3Index, unit) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var out = libh3._malloc(SZ_DBL);\n  try {\n    switch (unit) {\n      case UNITS.m2:\n        throwIfError(H3.cellAreaM2(lower, upper, out));\n        break;\n      case UNITS.km2:\n        throwIfError(H3.cellAreaKm2(lower, upper, out));\n        break;\n      case UNITS.rads2:\n        throwIfError(H3.cellAreaRads2(lower, upper, out));\n        break;\n      default:\n        throw JSBindingError(E_UNKNOWN_UNIT, unit);\n    }\n    return readDoubleFromPointer(out);\n  } finally {\n    libh3._free(out);\n  }\n}\n\n/**\n * Calculate length of a given unidirectional edge\n * @static\n * @param  {H3IndexInput} edge     H3 index of the edge to measure\n * @param  {string}  unit     Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number}           Cell area\n * @throws {H3Error}          If the input is invalid\n */\nfunction edgeLength(edge, unit) {\n  var ref = h3IndexToSplitLong(edge);\n  var lower = ref[0];\n  var upper = ref[1];\n  var out = libh3._malloc(SZ_DBL);\n  try {\n    switch (unit) {\n      case UNITS.m:\n        throwIfError(H3.edgeLengthM(lower, upper, out));\n        break;\n      case UNITS.km:\n        throwIfError(H3.edgeLengthKm(lower, upper, out));\n        break;\n      case UNITS.rads:\n        throwIfError(H3.edgeLengthRads(lower, upper, out));\n        break;\n      default:\n        throw JSBindingError(E_UNKNOWN_UNIT, unit);\n    }\n    return readDoubleFromPointer(out);\n  } finally {\n    libh3._free(out);\n  }\n}\n\n/**\n * Average hexagon area at a given resolution\n * @static\n * @param  {number} res  Hexagon resolution\n * @param  {string} unit Area unit (either UNITS.m2, UNITS.km2, or UNITS.rads2)\n * @return {number}      Average area\n * @throws {H3Error}     If the input is invalid\n */\nfunction getHexagonAreaAvg(res, unit) {\n  validateRes(res);\n  var out = libh3._malloc(SZ_DBL);\n  try {\n    switch (unit) {\n      case UNITS.m2:\n        throwIfError(H3.getHexagonAreaAvgM2(res, out));\n        break;\n      case UNITS.km2:\n        throwIfError(H3.getHexagonAreaAvgKm2(res, out));\n        break;\n      default:\n        throw JSBindingError(E_UNKNOWN_UNIT, unit);\n    }\n    return readDoubleFromPointer(out);\n  } finally {\n    libh3._free(out);\n  }\n}\n\n/**\n * Average hexagon edge length at a given resolution\n * @static\n * @param  {number} res  Hexagon resolution\n * @param  {string} unit Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number}      Average edge length\n * @throws {H3Error}     If the input is invalid\n */\nfunction getHexagonEdgeLengthAvg(res, unit) {\n  validateRes(res);\n  var out = libh3._malloc(SZ_DBL);\n  try {\n    switch (unit) {\n      case UNITS.m:\n        throwIfError(H3.getHexagonEdgeLengthAvgM(res, out));\n        break;\n      case UNITS.km:\n        throwIfError(H3.getHexagonEdgeLengthAvgKm(res, out));\n        break;\n      default:\n        throw JSBindingError(E_UNKNOWN_UNIT, unit);\n    }\n    return readDoubleFromPointer(out);\n  } finally {\n    libh3._free(out);\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Vertex mode\n\n/**\n * Find the index for a vertex of a cell.\n * @static\n * @param {H3IndexInput} h3Index     Cell to find the vertex for\n * @param {number} vertexNum         Number (index) of the vertex to calculate\n * @return {H3Index}     Vertex index\n * @throws {H3Error}     If the input is invalid\n */\nfunction cellToVertex(h3Index, vertexNum) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var vertexIndex = libh3._malloc(SZ_H3INDEX);\n  try {\n    throwIfError(H3.cellToVertex(lower, upper, vertexNum, vertexIndex));\n    return validateH3Index(readH3IndexFromPointer(vertexIndex));\n  } finally {\n    libh3._free(vertexIndex);\n  }\n}\n\n/**\n * Find the indexes for all vertexes of a cell.\n * @static\n * @param {H3IndexInput} h3Index     Cell to find all vertexes for\n * @return {H3Index[]}   All vertex indexes of this cell\n * @throws {H3Error}     If the input is invalid\n */\nfunction cellToVertexes(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  var maxNumVertexes = 6;\n  var vertexIndexes = libh3._calloc(maxNumVertexes, SZ_H3INDEX);\n  try {\n    throwIfError(H3.cellToVertexes(lower, upper, vertexIndexes));\n    return readArrayOfH3Indexes(vertexIndexes, maxNumVertexes);\n  } finally {\n    libh3._free(vertexIndexes);\n  }\n}\n\n/**\n * Get the lat, lng of a given vertex\n * @static\n * @param {H3IndexInput} h3Index A vertex index\n * @returns {CoordPair}          Latitude, longitude coordinates of the vertex\n * @throws {H3Error}             If the input is invalid\n */\nfunction vertexToLatLng(h3Index) {\n  var latlng = libh3._malloc(SZ_LATLNG);\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  try {\n    throwIfError(H3.vertexToLatLng(lower, upper, latlng));\n    return readLatLng(latlng);\n  } finally {\n    libh3._free(latlng);\n  }\n}\n\n/**\n * Returns true if the input is a valid vertex index.\n * @static\n * @param {H3IndexInput} h3Index An index to test for being a vertex index\n * @returns {boolean} True if the index represents a vertex\n */\nfunction isValidVertex(h3Index) {\n  var ref = h3IndexToSplitLong(h3Index);\n  var lower = ref[0];\n  var upper = ref[1];\n  return Boolean(H3.isValidVertex(lower, upper));\n}\n\n// ----------------------------------------------------------------------------\n// Public informational utilities\n\n/**\n * The total count of hexagons in the world at a given resolution. Note that above\n * resolution 8 the exact count cannot be represented in a JavaScript 32-bit number,\n * so consumers should use caution when applying further operations to the output.\n * @static\n * @param  {number} res  Hexagon resolution\n * @return {number}      Count\n * @throws {H3Error}     If the resolution is invalid\n */\nfunction getNumCells(res) {\n  validateRes(res);\n  var countPtr = libh3._malloc(SZ_INT64);\n  try {\n    // Get number as a long value\n    throwIfError(H3.getNumCells(res, countPtr));\n    return readInt64AsDoubleFromPointer(countPtr);\n  } finally {\n    libh3._free(countPtr);\n  }\n}\n\n/**\n * Get all H3 indexes at resolution 0. As every index at every resolution > 0 is\n * the descendant of a res 0 index, this can be used with h3ToChildren to iterate\n * over H3 indexes at any resolution.\n * @static\n * @return {H3Index[]}  All H3 indexes at res 0\n */\nfunction getRes0Cells() {\n  var count = H3.res0CellCount();\n  var hexagons = libh3._malloc(SZ_H3INDEX * count);\n  try {\n    throwIfError(H3.getRes0Cells(hexagons));\n    return readArrayOfH3Indexes(hexagons, count);\n  } finally {\n    libh3._free(hexagons);\n  }\n}\n\n/**\n * Get the twelve pentagon indexes at a given resolution.\n * @static\n * @param  {number} res  Hexagon resolution\n * @return {H3Index[]}   All H3 pentagon indexes at res\n * @throws {H3Error}     If the resolution is invalid\n */\nfunction getPentagons(res) {\n  validateRes(res);\n  var count = H3.pentagonCount();\n  var hexagons = libh3._malloc(SZ_H3INDEX * count);\n  try {\n    throwIfError(H3.getPentagons(res, hexagons));\n    return readArrayOfH3Indexes(hexagons, count);\n  } finally {\n    libh3._free(hexagons);\n  }\n}\n\n/**\n * Convert degrees to radians\n * @static\n * @param  {number} deg Value in degrees\n * @return {number}     Value in radians\n */\nfunction degsToRads(deg) {\n  return deg * Math.PI / 180;\n}\n\n/**\n * Convert radians to degrees\n * @static\n * @param  {number} rad Value in radians\n * @return {number}     Value in degrees\n */\nfunction radsToDegs(rad) {\n  return rad * 180 / Math.PI;\n}\n\nexport { UNITS, POLYGON_TO_CELLS_FLAGS, h3IndexToSplitLong, splitLongToH3Index, isValidCell, isValidIndex, isPentagon, isResClassIII, getBaseCellNumber, getIndexDigit, getIcosahedronFaces, getResolution, constructCell, latLngToCell, cellToLatLng, cellToBoundary, cellToParent, cellToChildren, cellToChildrenSize, cellToCenterChild, cellToChildPos, childPosToCell, gridDisk, gridDiskDistances, gridRing, gridRingUnsafe, polygonToCells, polygonToCellsExperimental, cellsToMultiPolygon, compactCells, uncompactCells, areNeighborCells, cellsToDirectedEdge, getDirectedEdgeOrigin, getDirectedEdgeDestination, isValidDirectedEdge, directedEdgeToCells, originToDirectedEdges, directedEdgeToBoundary, gridDistance, gridPathCells, cellToLocalIj, localIjToCell, greatCircleDistance, cellArea, edgeLength, getHexagonAreaAvg, getHexagonEdgeLengthAvg, cellToVertex, cellToVertexes, vertexToLatLng, isValidVertex, getNumCells, getRes0Cells, getPentagons, degsToRads, radsToDegs };\n//# sourceMappingURL=h3-js.es.js.map\n","export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n      + \")\";\n}\n","/**\n * @license\n * Copyright 2010-2026 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nimport { Color, Vector2, Vector3, Vector4, Matrix2, Matrix3, Matrix4, error, EventDispatcher, MathUtils, warn, WebGLCoordinateSystem, WebGPUCoordinateSystem, ColorManagement, SRGBTransfer, NoToneMapping, StaticDrawUsage, InterleavedBufferAttribute, InterleavedBuffer, DynamicDrawUsage, NoColorSpace, log as log$1, warnOnce, Texture, UnsignedIntType, IntType, Compatibility, LessCompare, LessEqualCompare, GreaterCompare, GreaterEqualCompare, NearestFilter, Sphere, BackSide, DoubleSide, CubeTexture, CubeReflectionMapping, CubeRefractionMapping, TangentSpaceNormalMap, NoNormalPacking, NormalRGPacking, NormalGAPacking, ObjectSpaceNormalMap, RGFormat, RED_GREEN_RGTC2_Format, RG11_EAC_Format, InstancedBufferAttribute, InstancedInterleavedBuffer, DataArrayTexture, FloatType, FramebufferTexture, LinearMipmapLinearFilter, DepthTexture, Material, LineBasicMaterial, LineDashedMaterial, NoBlending, MeshNormalMaterial, SRGBColorSpace, RenderTarget, BoxGeometry, Mesh, Scene, LinearFilter, CubeCamera, EquirectangularReflectionMapping, EquirectangularRefractionMapping, AddOperation, MixOperation, MultiplyOperation, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, DataTexture, HalfFloatType, ClampToEdgeWrapping, BufferGeometry, OrthographicCamera, PerspectiveCamera, LinearSRGBColorSpace, RGBAFormat, CubeUVReflectionMapping, BufferAttribute, MeshStandardMaterial, MeshPhysicalMaterial, MeshToonMaterial, MeshMatcapMaterial, SpriteMaterial, PointsMaterial, ShadowMaterial, Uint32BufferAttribute, Uint16BufferAttribute, ByteType, UnsignedByteType, ShortType, UnsignedShortType, AlphaFormat, RedFormat, RedIntegerFormat, DepthFormat, DepthStencilFormat, RGIntegerFormat, RGBFormat, RGBIntegerFormat, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedInt101111Type, NormalBlending, SrcAlphaFactor, OneMinusSrcAlphaFactor, AddEquation, MaterialBlending, Object3D, LinearMipMapLinearFilter, Plane, Float32BufferAttribute, UVMapping, PCFShadowMap, PCFSoftShadowMap, VSMShadowMap, BasicShadowMap, CubeDepthTexture, SphereGeometry, LinearMipmapNearestFilter, NearestMipmapLinearFilter, Float16BufferAttribute, yieldToMain, REVISION, ArrayCamera, PlaneGeometry, FrontSide, CustomBlending, ZeroFactor, CylinderGeometry, Quaternion, WebXRController, RAD2DEG, FrustumArray, Frustum, RGBAIntegerFormat, TimestampQuery, createCanvasElement, ReverseSubtractEquation, SubtractEquation, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcColorFactor, DstAlphaFactor, DstColorFactor, SrcAlphaSaturateFactor, SrcColorFactor, OneFactor, CullFaceNone, CullFaceBack, CullFaceFront, MultiplyBlending, SubtractiveBlending, AdditiveBlending, NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessEqualDepth, LessDepth, AlwaysDepth, NeverDepth, ReversedDepthFuncs, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, SIGNED_RED_GREEN_RGTC2_Format, MirroredRepeatWrapping, RepeatWrapping, NearestMipmapNearestFilter, NotEqualCompare, EqualCompare, AlwaysCompare, NeverCompare, LinearTransfer, getByteLength, isTypedArray, NotEqualStencilFunc, GreaterStencilFunc, GreaterEqualStencilFunc, EqualStencilFunc, LessEqualStencilFunc, LessStencilFunc, AlwaysStencilFunc, NeverStencilFunc, DecrementWrapStencilOp, IncrementWrapStencilOp, DecrementStencilOp, IncrementStencilOp, InvertStencilOp, ReplaceStencilOp, ZeroStencilOp, KeepStencilOp, MaxEquation, MinEquation, SpotLight, PointLight, DirectionalLight, RectAreaLight, AmbientLight, HemisphereLight, LightProbe, LinearToneMapping, ReinhardToneMapping, CineonToneMapping, ACESFilmicToneMapping, AgXToneMapping, NeutralToneMapping, Group, Loader, FileLoader, MaterialLoader, ObjectLoader } from './three.core.js';\nexport { AdditiveAnimationBlendMode, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BasicDepthPacking, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxHelper, BufferGeometryLoader, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CircleGeometry, Clock, ColorKeyframeTrack, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, Controls, CubeTextureLoader, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceFrontBack, Curve, CurvePath, CustomToneMapping, Cylindrical, Data3DTexture, DataTextureLoader, DataUtils, DefaultLoadingManager, DetachedBindMode, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DynamicCopyUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, Euler, ExternalTexture, ExtrudeGeometry, Fog, FogExp2, GLBufferAttribute, GLSL1, GLSL3, GridHelper, HTMLTexture, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, InstancedBufferGeometry, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, KeyframeTrack, LOD, LatheGeometry, Layers, Light, Line, Line3, LineCurve, LineCurve3, LineLoop, LineSegments, LinearInterpolant, LinearMipMapNearestFilter, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, MeshDepthMaterial, MeshDistanceMaterial, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NormalAnimationBlendMode, NumberKeyframeTrack, OctahedronGeometry, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, Path, PlaneHelper, PointLightHelper, Points, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RGBADepthPacking, RGBDepthPacking, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGDepthPacking, RawShaderMaterial, Ray, Raycaster, RenderTarget3D, RingGeometry, ShaderMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, Skeleton, SkeletonHelper, SkinnedMesh, Source, Spherical, SphericalHarmonics3, SplineCurve, SpotLightHelper, Sprite, StaticCopyUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, TOUCH, TetrahedronGeometry, TextureLoader, TextureUtils, Timer, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLRenderTarget, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, getConsoleFunction, setConsoleFunction } from './three.core.js';\n\nconst refreshUniforms = [\n\t'alphaMap',\n\t'alphaTest',\n\t'anisotropy',\n\t'anisotropyMap',\n\t'anisotropyRotation',\n\t'aoMap',\n\t'aoMapIntensity',\n\t'attenuationColor',\n\t'attenuationDistance',\n\t'bumpMap',\n\t'clearcoat',\n\t'clearcoatMap',\n\t'clearcoatNormalMap',\n\t'clearcoatNormalScale',\n\t'clearcoatRoughness',\n\t'color',\n\t'dispersion',\n\t'displacementMap',\n\t'emissive',\n\t'emissiveIntensity',\n\t'emissiveMap',\n\t'envMap',\n\t'envMapIntensity',\n\t'gradientMap',\n\t'ior',\n\t'iridescence',\n\t'iridescenceIOR',\n\t'iridescenceMap',\n\t'iridescenceThicknessMap',\n\t'lightMap',\n\t'lightMapIntensity',\n\t'map',\n\t'matcap',\n\t'metalness',\n\t'metalnessMap',\n\t'normalMap',\n\t'normalScale',\n\t'opacity',\n\t'roughness',\n\t'roughnessMap',\n\t'sheen',\n\t'sheenColor',\n\t'sheenColorMap',\n\t'sheenRoughnessMap',\n\t'shininess',\n\t'specular',\n\t'specularColor',\n\t'specularColorMap',\n\t'specularIntensity',\n\t'specularIntensityMap',\n\t'specularMap',\n\t'thickness',\n\t'transmission',\n\t'transmissionMap'\n];\n\n\n/**\n * A WeakMap to cache lights data for node materials.\n * Cache lights data by render ID to avoid unnecessary recalculations.\n *\n * @private\n * @type {WeakMap<LightsNode,Object>}\n */\nconst _lightsCache = new WeakMap();\n\n/**\n * Holds the material data for comparison.\n *\n * @private\n * @type {WeakMap<Material,Object>}\n */\nconst _materialCache = new WeakMap();\n\n/**\n * Holds the geometry data for comparison.\n *\n * @private\n * @type {WeakMap<BufferGeometry,Object>}\n */\nconst _geometryCache = new WeakMap();\n\n/**\n * This class is used by {@link WebGPURenderer} as management component.\n * It's primary purpose is to determine whether render objects require a\n * refresh right before they are going to be rendered or not.\n */\nclass NodeMaterialObserver {\n\n\t/**\n\t * Constructs a new node material observer.\n\t *\n\t * @param {NodeBuilder} builder - The node builder.\n\t */\n\tconstructor( builder ) {\n\n\t\t/**\n\t\t * A node material can be used by more than one render object so the\n\t\t * monitor must maintain a list of render objects.\n\t\t *\n\t\t * @type {WeakMap<RenderObject,Object>}\n\t\t */\n\t\tthis.renderObjects = new WeakMap();\n\n\t\t/**\n\t\t * Whether the material uses node objects or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.hasNode = this.containsNode( builder );\n\n\t\t/**\n\t\t * Whether the node builder's 3D object is animated or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.hasAnimation = builder.object.isSkinnedMesh === true;\n\n\t\t/**\n\t\t * A list of all possible material uniforms\n\t\t *\n\t\t * @type {Array<string>}\n\t\t */\n\t\tthis.refreshUniforms = refreshUniforms;\n\n\t\t/**\n\t\t * Holds the current render ID from the node frame.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.renderId = 0;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given render object is verified for the first time of this observer.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {boolean} Whether the given render object is verified for the first time of this observer.\n\t */\n\tfirstInitialization( renderObject ) {\n\n\t\tconst hasInitialized = this.renderObjects.has( renderObject );\n\n\t\tif ( hasInitialized === false ) {\n\n\t\t\tthis.getRenderObjectData( renderObject );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns `true` if the current rendering produces motion vectors.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t * @return {boolean} Whether the current rendering produces motion vectors or not.\n\t */\n\tneedsVelocity( renderer ) {\n\n\t\tconst mrt = renderer.getMRT();\n\n\t\treturn ( mrt !== null && mrt.has( 'velocity' ) );\n\n\t}\n\n\t/**\n\t * Returns monitoring data for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {Object} The monitoring data.\n\t */\n\tgetRenderObjectData( renderObject ) {\n\n\t\tlet data = this.renderObjects.get( renderObject );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconst { geometry, object } = renderObject;\n\n\t\t\tdata = {\n\t\t\t\tgeometryId: geometry.id,\n\t\t\t\tworldMatrix: object.matrixWorld.clone()\n\t\t\t};\n\n\t\t\tif ( object.center ) {\n\n\t\t\t\tdata.center = object.center.clone();\n\n\t\t\t}\n\n\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\tdata.morphTargetInfluences = object.morphTargetInfluences.slice();\n\n\t\t\t}\n\n\t\t\tif ( renderObject.bundle !== null ) {\n\n\t\t\t\tdata.version = renderObject.bundle.version;\n\n\t\t\t}\n\n\t\t\tif ( renderObject.material.transmission > 0 ) {\n\n\t\t\t\tconst { width, height } = renderObject.context;\n\n\t\t\t\tdata.bufferWidth = width;\n\t\t\t\tdata.bufferHeight = height;\n\n\t\t\t}\n\n\t\t\tdata.lights = this.getLightsData( renderObject.lightsNode.getLights() );\n\n\t\t\tthis.renderObjects.set( renderObject, data );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Returns an attribute data structure holding the attributes versions for\n\t * monitoring.\n\t *\n\t * @param {Object} attributes - The geometry attributes.\n\t * @return {Object} An object for monitoring the versions of attributes.\n\t */\n\tgetAttributesData( attributes ) {\n\n\t\tconst attributesData = {};\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tattributesData[ name ] = {\n\t\t\t\tid: attribute.id,\n\t\t\t\tversion: attribute.version,\n\t\t\t};\n\n\t\t}\n\n\t\treturn attributesData;\n\n\t}\n\n\t/**\n\t * Returns `true` if the node builder's material uses\n\t * node properties.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {boolean} Whether the node builder's material uses node properties or not.\n\t */\n\tcontainsNode( builder ) {\n\n\t\tconst material = builder.material;\n\n\t\tfor ( const property in material ) {\n\n\t\t\tif ( material[ property ] && material[ property ].isNode )\n\t\t\t\treturn true;\n\n\t\t}\n\n\t\tif ( builder.context.modelViewMatrix || builder.context.modelNormalViewMatrix || builder.context.getAO || builder.context.getShadow )\n\t\t\treturn true;\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns a geometry data structure holding the geometry property values for\n\t * monitoring.\n\t *\n\t * @param {BufferGeometry} geometry - The geometry.\n\t * @return {Object} An object for monitoring geometry properties.\n\t */\n\tgetGeometryData( geometry ) {\n\n\t\tlet data = _geometryCache.get( geometry );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tdata = {\n\t\t\t\t_renderId: -1,\n\t\t\t\t_equal: false,\n\n\t\t\t\tattributes: this.getAttributesData( geometry.attributes ),\n\t\t\t\tindexId: geometry.index ? geometry.index.id : null,\n\t\t\t\tindexVersion: geometry.index ? geometry.index.version : null,\n\t\t\t\tdrawRange: { start: geometry.drawRange.start, count: geometry.drawRange.count }\n\t\t\t};\n\n\t\t\t_geometryCache.set( geometry, data );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Returns a material data structure holding the material property values for\n\t * monitoring.\n\t *\n\t * @param {Material} material - The material.\n\t * @return {Object} An object for monitoring material properties.\n\t */\n\tgetMaterialData( material ) {\n\n\t\tlet data = _materialCache.get( material );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tdata = { _renderId: -1, _equal: false };\n\n\t\t\tfor ( const property of this.refreshUniforms ) {\n\n\t\t\t\tconst value = material[ property ];\n\n\t\t\t\tif ( value === null || value === undefined ) continue;\n\n\t\t\t\tif ( typeof value === 'object' && value.clone !== undefined ) {\n\n\t\t\t\t\tif ( value.isTexture === true ) {\n\n\t\t\t\t\t\tdata[ property ] = { id: value.id, version: value.version };\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdata[ property ] = value.clone();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdata[ property ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_materialCache.set( material, data );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given render object has not changed its state.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {Array<Light>} lightsData - The current material lights.\n\t * @param {number} renderId - The current render ID.\n\t * @return {boolean} Whether the given render object has changed its state or not.\n\t */\n\tequals( renderObject, lightsData, renderId ) {\n\n\t\tconst { object, material, geometry } = renderObject;\n\n\t\tconst renderObjectData = this.getRenderObjectData( renderObject );\n\n\t\t// world matrix\n\n\t\tif ( renderObjectData.worldMatrix.equals( object.matrixWorld ) !== true ) {\n\n\t\t\trenderObjectData.worldMatrix.copy( object.matrixWorld );\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// material\n\n\t\tconst materialData = this.getMaterialData( renderObject.material );\n\n\t\t// check the material for the \"equal\" state just once per render for all render objects\n\n\t\tif ( materialData._renderId !== renderId ) {\n\n\t\t\tmaterialData._renderId = renderId;\n\n\t\t\tfor ( const property in materialData ) {\n\n\t\t\t\tconst value = materialData[ property ];\n\t\t\t\tconst mtlValue = material[ property ];\n\n\t\t\t\tif ( property === '_renderId' ) continue;\n\t\t\t\tif ( property === '_equal' ) continue;\n\n\t\t\t\tif ( value.equals !== undefined ) {\n\n\t\t\t\t\tif ( value.equals( mtlValue ) === false ) {\n\n\t\t\t\t\t\tvalue.copy( mtlValue );\n\n\t\t\t\t\t\tmaterialData._equal = false;\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( mtlValue.isTexture === true ) {\n\n\t\t\t\t\tif ( value.id !== mtlValue.id || value.version !== mtlValue.version ) {\n\n\t\t\t\t\t\tvalue.id = mtlValue.id;\n\t\t\t\t\t\tvalue.version = mtlValue.version;\n\n\t\t\t\t\t\tmaterialData._equal = false;\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( value !== mtlValue ) {\n\n\t\t\t\t\tmaterialData[ property ] = mtlValue;\n\n\t\t\t\t\tmaterialData._equal = false;\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( materialData.transmission > 0 ) {\n\n\t\t\t\tconst { width, height } = renderObject.context;\n\n\t\t\t\tif ( renderObjectData.bufferWidth !== width || renderObjectData.bufferHeight !== height ) {\n\n\t\t\t\t\trenderObjectData.bufferWidth = width;\n\t\t\t\t\trenderObjectData.bufferHeight = height;\n\n\t\t\t\t\tmaterialData._equal = false;\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmaterialData._equal = true;\n\n\t\t} else {\n\n\t\t\tif ( materialData._equal === false ) return false;\n\n\t\t}\n\n\t\t// geometry\n\n\t\tif ( renderObjectData.geometryId !== geometry.id ) {\n\n\t\t\trenderObjectData.geometryId = geometry.id;\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst geometryData = this.getGeometryData( renderObject.geometry );\n\n\t\t// check the geoemtry for the \"equal\" state just once per render for all render objects\n\n\t\tif ( geometryData._renderId !== renderId ) {\n\n\t\t\tgeometryData._renderId = renderId;\n\n\t\t\t// attributes\n\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst storedAttributes = geometryData.attributes;\n\n\t\t\tlet currentAttributeCount = 0;\n\t\t\tlet storedAttributeCount = 0;\n\n\t\t\tfor ( const _ in attributes ) currentAttributeCount ++; // eslint-disable-line no-unused-vars\n\n\t\t\tfor ( const name in storedAttributes ) {\n\n\t\t\t\tstoredAttributeCount ++;\n\n\t\t\t\tconst storedAttributeData = storedAttributes[ name ];\n\t\t\t\tconst attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\t// attribute was removed\n\t\t\t\t\tdelete storedAttributes[ name ];\n\n\t\t\t\t\tgeometryData._equal = false;\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t\tif ( storedAttributeData.id !== attribute.id || storedAttributeData.version !== attribute.version ) {\n\n\t\t\t\t\tstoredAttributeData.id = attribute.id;\n\t\t\t\t\tstoredAttributeData.version = attribute.version;\n\n\t\t\t\t\tgeometryData._equal = false;\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( storedAttributeCount !== currentAttributeCount ) {\n\n\t\t\t\tgeometryData.attributes = this.getAttributesData( attributes );\n\n\t\t\t\tgeometryData._equal = false;\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// check index\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst storedIndexId = geometryData.indexId;\n\t\t\tconst storedIndexVersion = geometryData.indexVersion;\n\t\t\tconst currentIndexId = index ? index.id : null;\n\t\t\tconst currentIndexVersion = index ? index.version : null;\n\n\t\t\tif ( storedIndexId !== currentIndexId || storedIndexVersion !== currentIndexVersion ) {\n\n\t\t\t\tgeometryData.indexId = currentIndexId;\n\t\t\t\tgeometryData.indexVersion = currentIndexVersion;\n\n\t\t\t\tgeometryData._equal = false;\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// check drawRange\n\n\t\t\tif ( geometryData.drawRange.start !== geometry.drawRange.start || geometryData.drawRange.count !== geometry.drawRange.count ) {\n\n\t\t\t\tgeometryData.drawRange.start = geometry.drawRange.start;\n\t\t\t\tgeometryData.drawRange.count = geometry.drawRange.count;\n\n\t\t\t\tgeometryData._equal = false;\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\tgeometryData._equal = true;\n\n\t\t} else {\n\n\t\t\tif ( geometryData._equal === false ) return false;\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tif ( renderObjectData.morphTargetInfluences ) {\n\n\t\t\tlet morphChanged = false;\n\n\t\t\tfor ( let i = 0; i < renderObjectData.morphTargetInfluences.length; i ++ ) {\n\n\t\t\t\tif ( renderObjectData.morphTargetInfluences[ i ] !== object.morphTargetInfluences[ i ] ) {\n\n\t\t\t\t\trenderObjectData.morphTargetInfluences[ i ] = object.morphTargetInfluences[ i ];\n\t\t\t\t\tmorphChanged = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( morphChanged ) return false;\n\n\t\t}\n\n\t\t// lights\n\n\t\tif ( renderObjectData.lights ) {\n\n\t\t\tfor ( let i = 0; i < lightsData.length; i ++ ) {\n\n\t\t\t\tif ( renderObjectData.lights[ i ].map !== lightsData[ i ].map ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// center\n\n\t\tif ( renderObjectData.center ) {\n\n\t\t\tif ( renderObjectData.center.equals( object.center ) === false ) {\n\n\t\t\t\trenderObjectData.center.copy( object.center );\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// bundle\n\n\t\tif ( renderObject.bundle !== null ) {\n\n\t\t\trenderObjectData.version = renderObject.bundle.version;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Returns the lights data for the given material lights.\n\t *\n\t * @param {Array<Light>} materialLights - The material lights.\n\t * @return {Array<Object>} The lights data for the given material lights.\n\t */\n\tgetLightsData( materialLights ) {\n\n\t\tconst lights = [];\n\n\t\tfor ( const light of materialLights ) {\n\n\t\t\tif ( light.isSpotLight === true && light.map !== null ) {\n\n\t\t\t\t// only add lights that have a map\n\n\t\t\t\tlights.push( { map: light.map.version } );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn lights;\n\n\t}\n\n\t/**\n\t * Returns the lights for the given lights node and render ID.\n\t *\n\t * @param {LightsNode} lightsNode - The lights node.\n\t * @param {number} renderId - The render ID.\n\t * @return {Array<Object>} The lights for the given lights node and render ID.\n\t */\n\tgetLights( lightsNode, renderId ) {\n\n\t\tif ( _lightsCache.has( lightsNode ) ) {\n\n\t\t\tconst cached = _lightsCache.get( lightsNode );\n\n\t\t\tif ( cached.renderId === renderId ) {\n\n\t\t\t\treturn cached.lightsData;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst lightsData = this.getLightsData( lightsNode.getLights() );\n\n\t\t_lightsCache.set( lightsNode, { renderId, lightsData } );\n\n\t\treturn lightsData;\n\n\t}\n\n\t/**\n\t * Checks if the given render object requires a refresh.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {NodeFrame} nodeFrame - The current node frame.\n\t * @return {boolean} Whether the given render object requires a refresh or not.\n\t */\n\tneedsRefresh( renderObject, nodeFrame ) {\n\n\t\tif ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) || this.needsVelocity( nodeFrame.renderer ) )\n\t\t\treturn true;\n\n\t\tconst { renderId } = nodeFrame;\n\n\t\tif ( this.renderId !== renderId ) {\n\n\t\t\tthis.renderId = renderId;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst isStatic = renderObject.object.static === true;\n\t\tconst isBundle = renderObject.bundle !== null && renderObject.bundle.static === true && this.getRenderObjectData( renderObject ).version === renderObject.bundle.version;\n\n\t\tif ( isStatic || isBundle )\n\t\t\treturn false;\n\n\t\tconst lightsData = this.getLights( renderObject.lightsNode, renderId );\n\t\tconst notEqual = this.equals( renderObject, lightsData, renderId ) !== true;\n\n\t\treturn notEqual;\n\n\t}\n\n}\n\n// Pre-compiled RegExp patterns for ignored files\nconst IGNORED_FILES = [\n\t/^StackTrace\\.js$/,\n\t/^TSLCore\\.js$/,\n\t/^.*Node\\.js$/,\n\t/^three\\.webgpu.*\\.js$/\n];\n\n/**\n * Parses the stack trace and filters out ignored files.\n * Returns an array with function name, file, line, and column.\n */\nfunction getFilteredStack( stack ) {\n\n\t// Pattern to extract function name, file, line, and column from different browsers\n\t// Chrome: \"at functionName (file.js:1:2)\" or \"at file.js:1:2\"\n\t// Firefox: \"functionName@file.js:1:2\"\n\tconst regex = /(?:at\\s+(.+?)\\s+\\()?(?:(.+?)@)?([^@\\s()]+):(\\d+):(\\d+)/;\n\n\treturn stack.split( '\\n' )\n\t\t.map( line => {\n\n\t\t\tconst match = line.match( regex );\n\t\t\tif ( ! match ) return null; // Skip if line format is invalid\n\n\t\t\t// Chrome: match[1], Firefox: match[2]\n\t\t\tconst fn = match[ 1 ] || match[ 2 ] || '';\n\t\t\tconst file = match[ 3 ].split( '?' )[ 0 ]; // Clean file name (Vite/HMR)\n\t\t\tconst lineNum = parseInt( match[ 4 ], 10 );\n\t\t\tconst column = parseInt( match[ 5 ], 10 );\n\n\t\t\t// Extract only the filename from full path\n\t\t\tconst fileName = file.split( '/' ).pop();\n\n\t\t\treturn {\n\t\t\t\tfn: fn,\n\t\t\t\tfile: fileName,\n\t\t\t\tline: lineNum,\n\t\t\t\tcolumn: column\n\t\t\t};\n\n\t\t} )\n\t\t.filter( frame => {\n\n\t\t\t// Only keep frames that are valid and not in the ignore list\n\t\t\treturn frame && ! IGNORED_FILES.some( regex => regex.test( frame.file ) );\n\n\t\t} );\n\n}\n\n/**\n * Class representing a stack trace for debugging purposes.\n */\nclass StackTrace {\n\n\t/**\n\t * Creates a StackTrace instance by capturing and filtering the current stack trace.\n\t *\n\t * @param {Error|string|null} stackMessage - An optional stack trace to use instead of capturing a new one.\n\t */\n\tconstructor( stackMessage = null ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStackTrace = true;\n\n\t\t/**\n\t\t * The stack trace.\n\t\t *\n\t\t * @type {Array<{fn: string, file: string, line: number, column: number}>}\n\t\t */\n\t\tthis.stack = getFilteredStack( stackMessage ? stackMessage : new Error().stack );\n\n\t}\n\n\t/**\n\t * Returns a formatted location string of the top stack frame.\n\t *\n\t * @returns {string} The formatted stack trace message.\n\t */\n\tgetLocation() {\n\n\t\tif ( this.stack.length === 0 ) {\n\n\t\t\treturn '[Unknown location]';\n\n\t\t}\n\n\t\tconst mainStack = this.stack[ 0 ];\n\n\t\tconst fn = mainStack.fn;\n\t\tconst fnName = fn ? `\"${ fn }()\" at ` : '';\n\n\t\treturn `${fnName}\"${mainStack.file}:${mainStack.line}\"`; // :${mainStack.column}\n\n\t}\n\n\t/**\n\t * Returns the full error message including the stack trace.\n\t *\n\t * @param {string} message - The error message.\n\t * @returns {string} The full error message with stack trace.\n\t */\n\tgetError( message ) {\n\n\t\tif ( this.stack.length === 0 ) {\n\n\t\t\treturn message;\n\n\t\t}\n\n\t\t// Output: \"Error: message\\n    at functionName (file.js:line:column)\"\n\t\tconst stackString = this.stack.map( frame => {\n\n\t\t\tconst location = `${ frame.file }:${ frame.line }:${ frame.column }`;\n\n\t\t\tif ( frame.fn ) {\n\n\t\t\t\treturn `    at ${ frame.fn } (${ location })`;\n\n\t\t\t}\n\n\t\t\treturn `    at ${ location }`;\n\n\t\t} ).join( '\\n' );\n\n\t\treturn `${ message }\\n${ stackString }`;\n\n\t}\n\n}\n\n// cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.\n// A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.\n// Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity.\n// See https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript/52171480#52171480\n// https://github.com/bryc/code/blob/master/jshash/experimental/cyrb53.js\nfunction cyrb53( value, seed = 0 ) {\n\n\tlet h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tfor ( let i = 0, val; i < value.length; i ++ ) {\n\n\t\t\tval = value[ i ];\n\t\t\th1 = Math.imul( h1 ^ val, 2654435761 );\n\t\t\th2 = Math.imul( h2 ^ val, 1597334677 );\n\n\t\t}\n\n\t} else {\n\n\t\tfor ( let i = 0, ch; i < value.length; i ++ ) {\n\n\t\t\tch = value.charCodeAt( i );\n\t\t\th1 = Math.imul( h1 ^ ch, 2654435761 );\n\t\t\th2 = Math.imul( h2 ^ ch, 1597334677 );\n\n\t\t}\n\n\t}\n\n\th1 = Math.imul( h1 ^ ( h1 >>> 16 ), 2246822507 );\n\th1 ^= Math.imul( h2 ^ ( h2 >>> 13 ), 3266489909 );\n\th2 = Math.imul( h2 ^ ( h2 >>> 16 ), 2246822507 );\n\th2 ^= Math.imul( h1 ^ ( h1 >>> 13 ), 3266489909 );\n\n\treturn 4294967296 * ( 2097151 & h2 ) + ( h1 >>> 0 );\n\n}\n\n/**\n * Computes a hash for the given string.\n *\n * @private\n * @method\n * @param {string} str - The string to be hashed.\n * @return {number} The hash.\n */\nconst hashString = ( str ) => cyrb53( str );\n\n/**\n * Computes a hash for the given array.\n *\n * @private\n * @method\n * @param {Array<number>} array - The array to be hashed.\n * @return {number} The hash.\n */\nconst hashArray = ( array ) => cyrb53( array );\n\n/**\n * Computes a hash for the given list of parameters.\n *\n * @private\n * @method\n * @param {...number} params - A list of parameters.\n * @return {number} The hash.\n */\nconst hash$1 = ( ...params ) => cyrb53( params );\n\nconst typeFromLength = /*@__PURE__*/ new Map( [\n\t[ 1, 'float' ],\n\t[ 2, 'vec2' ],\n\t[ 3, 'vec3' ],\n\t[ 4, 'vec4' ],\n\t[ 9, 'mat3' ],\n\t[ 16, 'mat4' ]\n] );\n\nconst dataFromObject = /*@__PURE__*/ new WeakMap();\n\n/**\n * Returns the data type for the given the length.\n *\n * @private\n * @method\n * @param {number} length - The length.\n * @return {string} The data type.\n */\nfunction getTypeFromLength( length ) {\n\n\treturn typeFromLength.get( length );\n\n}\n\n/**\n * Returns the typed array for the given data type.\n *\n * @private\n * @method\n * @param {string} type - The data type.\n * @return {TypedArray} The typed array.\n */\nfunction getTypedArrayFromType( type ) {\n\n\t// Handle component type for vectors and matrices\n\tif ( /[iu]?vec\\d/.test( type ) ) {\n\n\t\t// Handle int vectors\n\t\tif ( type.startsWith( 'ivec' ) ) return Int32Array;\n\t\t// Handle uint vectors\n\t\tif ( type.startsWith( 'uvec' ) ) return Uint32Array;\n\t\t// Default to float vectors\n\t\treturn Float32Array;\n\n\t}\n\n\t// Handle matrices (always float)\n\tif ( /mat\\d/.test( type ) ) return Float32Array;\n\n\t// Basic types\n\tif ( /float/.test( type ) ) return Float32Array;\n\tif ( /uint/.test( type ) ) return Uint32Array;\n\tif ( /int/.test( type ) ) return Int32Array;\n\n\tthrow new Error( `THREE.NodeUtils: Unsupported type: ${type}` );\n\n}\n\n/**\n * Returns the length for the given data type.\n *\n * @private\n * @method\n * @param {string} type - The data type.\n * @return {number} The length.\n */\nfunction getLengthFromType( type ) {\n\n\tif ( /float|int|uint/.test( type ) ) return 1;\n\tif ( /vec2/.test( type ) ) return 2;\n\tif ( /vec3/.test( type ) ) return 3;\n\tif ( /vec4/.test( type ) ) return 4;\n\tif ( /mat2/.test( type ) ) return 4;\n\tif ( /mat3/.test( type ) ) return 9;\n\tif ( /mat4/.test( type ) ) return 16;\n\n\terror( `TSL: Unsupported type: ${ type }`, new StackTrace() );\n\n}\n\n/**\n * Returns the gpu memory length for the given data type.\n *\n * @private\n * @method\n * @param {string} type - The data type.\n * @return {number} The length.\n */\nfunction getMemoryLengthFromType( type ) {\n\n\tif ( /float|int|uint/.test( type ) ) return 1;\n\tif ( /vec2/.test( type ) ) return 2;\n\tif ( /vec3/.test( type ) ) return 3;\n\tif ( /vec4/.test( type ) ) return 4;\n\tif ( /mat2/.test( type ) ) return 4;\n\tif ( /mat3/.test( type ) ) return 12;\n\tif ( /mat4/.test( type ) ) return 16;\n\n\terror( `TSL: Unsupported type: ${ type }`, new StackTrace() );\n\n}\n\n/**\n * Returns the alignment requirement for the given data type.\n *\n * @private\n * @method\n * @param {string} type - The data type.\n * @return {number} The alignment requirement in bytes.\n */\nfunction getAlignmentFromType( type ) {\n\n\tif ( /float|int|uint/.test( type ) ) return 4;\n\tif ( /vec2/.test( type ) ) return 8;\n\tif ( /vec3/.test( type ) ) return 16;\n\tif ( /vec4/.test( type ) ) return 16;\n\tif ( /mat2/.test( type ) ) return 8;\n\tif ( /mat3/.test( type ) ) return 16;\n\tif ( /mat4/.test( type ) ) return 16;\n\n\terror( `TSL: Unsupported type: ${ type }`, new StackTrace() );\n\n}\n\n/**\n * Returns the data type for the given value.\n *\n * @private\n * @method\n * @param {any} value - The value.\n * @return {?string} The data type.\n */\nfunction getValueType( value ) {\n\n\tif ( value === undefined || value === null ) return null;\n\n\tconst typeOf = typeof value;\n\n\tif ( value.isNode === true ) {\n\n\t\treturn 'node';\n\n\t} else if ( typeOf === 'number' ) {\n\n\t\treturn 'float';\n\n\t} else if ( typeOf === 'boolean' ) {\n\n\t\treturn 'bool';\n\n\t} else if ( typeOf === 'string' ) {\n\n\t\treturn 'string';\n\n\t} else if ( typeOf === 'function' ) {\n\n\t\treturn 'shader';\n\n\t} else if ( value.isVector2 === true ) {\n\n\t\treturn 'vec2';\n\n\t} else if ( value.isVector3 === true ) {\n\n\t\treturn 'vec3';\n\n\t} else if ( value.isVector4 === true ) {\n\n\t\treturn 'vec4';\n\n\t} else if ( value.isMatrix2 === true ) {\n\n\t\treturn 'mat2';\n\n\t} else if ( value.isMatrix3 === true ) {\n\n\t\treturn 'mat3';\n\n\t} else if ( value.isMatrix4 === true ) {\n\n\t\treturn 'mat4';\n\n\t} else if ( value.isColor === true ) {\n\n\t\treturn 'color';\n\n\t} else if ( value instanceof ArrayBuffer ) {\n\n\t\treturn 'ArrayBuffer';\n\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Returns the value/object for the given data type and parameters.\n *\n * @private\n * @method\n * @param {string} type - The given type.\n * @param {...any} params - A parameter list.\n * @return {any} The value/object.\n */\nfunction getValueFromType( type, ...params ) {\n\n\tconst last4 = type ? type.slice( -4 ) : undefined;\n\n\tif ( params.length === 1 ) { // ensure same behaviour as in NodeBuilder.format()\n\n\t\tif ( last4 === 'vec2' ) params = [ params[ 0 ], params[ 0 ] ];\n\t\telse if ( last4 === 'vec3' ) params = [ params[ 0 ], params[ 0 ], params[ 0 ] ];\n\t\telse if ( last4 === 'vec4' ) params = [ params[ 0 ], params[ 0 ], params[ 0 ], params[ 0 ] ];\n\n\t}\n\n\tif ( type === 'color' ) {\n\n\t\treturn new Color( ...params );\n\n\t} else if ( last4 === 'vec2' ) {\n\n\t\treturn new Vector2( ...params );\n\n\t} else if ( last4 === 'vec3' ) {\n\n\t\treturn new Vector3( ...params );\n\n\t} else if ( last4 === 'vec4' ) {\n\n\t\treturn new Vector4( ...params );\n\n\t} else if ( last4 === 'mat2' ) {\n\n\t\treturn new Matrix2( ...params );\n\n\t} else if ( last4 === 'mat3' ) {\n\n\t\treturn new Matrix3( ...params );\n\n\t} else if ( last4 === 'mat4' ) {\n\n\t\treturn new Matrix4( ...params );\n\n\t} else if ( type === 'bool' ) {\n\n\t\treturn params[ 0 ] || false;\n\n\t} else if ( ( type === 'float' ) || ( type === 'int' ) || ( type === 'uint' ) ) {\n\n\t\treturn params[ 0 ] || 0;\n\n\t} else if ( type === 'string' ) {\n\n\t\treturn params[ 0 ] || '';\n\n\t} else if ( type === 'ArrayBuffer' ) {\n\n\t\treturn base64ToArrayBuffer( params[ 0 ] );\n\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Gets the object data that can be shared between different rendering steps.\n *\n * @private\n * @param {Object} object - The object to get the data for.\n * @return {Object} The object data.\n */\nfunction getDataFromObject( object ) {\n\n\tlet data = dataFromObject.get( object );\n\n\tif ( data === undefined ) {\n\n\t\tdata = {};\n\t\tdataFromObject.set( object, data );\n\n\t}\n\n\treturn data;\n\n}\n\n/**\n * Converts the given array buffer to a Base64 string.\n *\n * @private\n * @method\n * @param {ArrayBuffer} arrayBuffer - The array buffer.\n * @return {string} The Base64 string.\n */\nfunction arrayBufferToBase64( arrayBuffer ) {\n\n\tlet chars = '';\n\n\tconst array = new Uint8Array( arrayBuffer );\n\n\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\tchars += String.fromCharCode( array[ i ] );\n\n\t}\n\n\treturn btoa( chars );\n\n}\n\n/**\n * Converts the given Base64 string to an array buffer.\n *\n * @private\n * @method\n * @param {string} base64 - The Base64 string.\n * @return {ArrayBuffer} The array buffer.\n */\nfunction base64ToArrayBuffer( base64 ) {\n\n\treturn Uint8Array.from( atob( base64 ), c => c.charCodeAt( 0 ) ).buffer;\n\n}\n\nvar NodeUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tarrayBufferToBase64: arrayBufferToBase64,\n\tbase64ToArrayBuffer: base64ToArrayBuffer,\n\tgetAlignmentFromType: getAlignmentFromType,\n\tgetDataFromObject: getDataFromObject,\n\tgetLengthFromType: getLengthFromType,\n\tgetMemoryLengthFromType: getMemoryLengthFromType,\n\tgetTypeFromLength: getTypeFromLength,\n\tgetTypedArrayFromType: getTypedArrayFromType,\n\tgetValueFromType: getValueFromType,\n\tgetValueType: getValueType,\n\thash: hash$1,\n\thashArray: hashArray,\n\thashString: hashString\n});\n\n/**\n * Possible shader stages.\n *\n * @property {string} VERTEX The vertex shader stage.\n * @property {string} FRAGMENT The fragment shader stage.\n */\nconst NodeShaderStage = {\n\tVERTEX: 'vertex',\n\tFRAGMENT: 'fragment'\n};\n\n/**\n * Update types of a node.\n *\n * @property {string} NONE The update method is not executed.\n * @property {string} FRAME The update method is executed per frame.\n * @property {string} RENDER The update method is executed per render. A frame might be produced by multiple render calls so this value allows more detailed updates than FRAME.\n * @property {string} OBJECT The update method is executed per {@link Object3D} that uses the node for rendering.\n */\nconst NodeUpdateType = {\n\tNONE: 'none',\n\tFRAME: 'frame',\n\tRENDER: 'render',\n\tOBJECT: 'object'\n};\n\n/**\n * Data types of a node.\n *\n * @property {string} BOOLEAN Boolean type.\n * @property {string} INTEGER Integer type.\n * @property {string} FLOAT Float type.\n * @property {string} VECTOR2 Two-dimensional vector type.\n * @property {string} VECTOR3 Three-dimensional vector type.\n * @property {string} VECTOR4 Four-dimensional vector type.\n * @property {string} MATRIX2 2x2 matrix type.\n * @property {string} MATRIX3 3x3 matrix type.\n * @property {string} MATRIX4 4x4 matrix type.\n */\nconst NodeType = {\n\tBOOLEAN: 'bool',\n\tINTEGER: 'int',\n\tFLOAT: 'float',\n\tVECTOR2: 'vec2',\n\tVECTOR3: 'vec3',\n\tVECTOR4: 'vec4',\n\tMATRIX2: 'mat2',\n\tMATRIX3: 'mat3',\n\tMATRIX4: 'mat4'\n};\n\n/**\n * Access types of a node. These are relevant for compute and storage usage.\n *\n * @property {string} READ_ONLY Read-only access\n * @property {string} WRITE_ONLY Write-only access.\n * @property {string} READ_WRITE Read and write access.\n */\nconst NodeAccess = {\n\tREAD_ONLY: 'readOnly',\n\tWRITE_ONLY: 'writeOnly',\n\tREAD_WRITE: 'readWrite',\n};\n\nconst defaultShaderStages = [ 'fragment', 'vertex' ];\nconst defaultBuildStages = [ 'setup', 'analyze', 'generate' ];\nconst shaderStages = [ ...defaultShaderStages, 'compute' ];\nconst vectorComponents = [ 'x', 'y', 'z', 'w' ];\n\nconst _parentBuildStage = {\n\tanalyze: 'setup',\n\tgenerate: 'analyze'\n};\n\nlet _nodeId = 0;\n\n/**\n * Base class for all nodes.\n *\n * @augments EventDispatcher\n */\nclass Node extends EventDispatcher {\n\n\tstatic get type() {\n\n\t\treturn 'Node';\n\n\t}\n\n\t/**\n\t * Constructs a new node.\n\t *\n\t * @param {?string} nodeType - The node type.\n\t */\n\tconstructor( nodeType = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node type. This represents the result type of the node (e.g. `float` or `vec3`).\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.nodeType = nodeType;\n\n\t\t/**\n\t\t * The update type of the node's {@link Node#update} method. Possible values are listed in {@link NodeUpdateType}.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'none'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.NONE;\n\n\t\t/**\n\t\t * The update type of the node's {@link Node#updateBefore} method. Possible values are listed in {@link NodeUpdateType}.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'none'\n\t\t */\n\t\tthis.updateBeforeType = NodeUpdateType.NONE;\n\n\t\t/**\n\t\t * The update type of the node's {@link Node#updateAfter} method. Possible values are listed in {@link NodeUpdateType}.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'none'\n\t\t */\n\t\tthis.updateAfterType = NodeUpdateType.NONE;\n\n\t\t/**\n\t\t * The version of the node. The version automatically is increased when {@link Node#needsUpdate} is set to `true`.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default 0\n\t\t */\n\t\tthis.version = 0;\n\n\t\t/**\n\t\t * The name of the node.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * Whether this node is global or not. This property is relevant for the internal\n\t\t * node caching system. All nodes which should be declared just once should\n\t\t * set this flag to `true` (a typical example is {@link AttributeNode}).\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.global = false;\n\n\t\t/**\n\t\t * Create a list of parents for this node during the build process.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.parents = false;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isNode = true;\n\n\t\t// private\n\n\t\tthis._beforeNodes = null;\n\n\t\t/**\n\t\t * The cache key of this node.\n\t\t *\n\t\t * @private\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis._cacheKey = null;\n\n\t\t/**\n\t\t * The UUID of the node.\n\t\t *\n\t\t * @type {string}\n\t\t * @default null\n\t\t * @private\n\t\t */\n\t\tthis._uuid = null;\n\n\t\t/**\n\t\t * The cache key's version.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis._cacheKeyVersion = 0;\n\n\t\t/**\n\t\t * The unique ID of the node.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tthis.id = _nodeId ++;\n\n\t\t/**\n\t\t * The stack trace of the node for debugging purposes.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.stackTrace = null;\n\n\t\tif ( Node.captureStackTrace === true ) {\n\n\t\t\tthis.stackTrace = new StackTrace();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Set this property to `true` when the node should be regenerated.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The UUID of the node.\n\t *\n\t * @type {string}\n\t * @readonly\n\t */\n\tget uuid() {\n\n\t\tif ( this._uuid === null ) {\n\n\t\t\tthis._uuid = MathUtils.generateUUID();\n\n\t\t}\n\n\t\treturn this._uuid;\n\n\t}\n\n\t/**\n\t * The type of the class. The value is usually the constructor name.\n\t *\n\t * @type {string}\n \t * @readonly\n\t */\n\tget type() {\n\n\t\treturn this.constructor.type;\n\n\t}\n\n\t/**\n\t * Convenient method for defining {@link Node#update}.\n\t *\n\t * @param {Function} callback - The update method.\n\t * @param {string} updateType - The update type.\n\t * @return {Node} A reference to this node.\n\t */\n\tonUpdate( callback, updateType ) {\n\n\t\tthis.updateType = updateType;\n\t\tthis.update = callback.bind( this );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but\n\t * this method automatically sets the update type to `FRAME`.\n\t *\n\t * @param {Function} callback - The update method.\n\t * @return {Node} A reference to this node.\n\t */\n\tonFrameUpdate( callback ) {\n\n\t\treturn this.onUpdate( callback, NodeUpdateType.FRAME );\n\n\t}\n\n\t/**\n\t * Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but\n\t * this method automatically sets the update type to `RENDER`.\n\t *\n\t * @param {Function} callback - The update method.\n\t * @return {Node} A reference to this node.\n\t */\n\tonRenderUpdate( callback ) {\n\n\t\treturn this.onUpdate( callback, NodeUpdateType.RENDER );\n\n\t}\n\n\t/**\n\t * Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but\n\t * this method automatically sets the update type to `OBJECT`.\n\t *\n\t * @param {Function} callback - The update method.\n\t * @return {Node} A reference to this node.\n\t */\n\tonObjectUpdate( callback ) {\n\n\t\treturn this.onUpdate( callback, NodeUpdateType.OBJECT );\n\n\t}\n\n\t/**\n\t * Convenient method for defining {@link Node#updateReference}.\n\t *\n\t * @param {Function} callback - The update method.\n\t * @return {Node} A reference to this node.\n\t */\n\tonReference( callback ) {\n\n\t\tthis.updateReference = callback.bind( this );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Nodes might refer to other objects like materials. This method allows to dynamically update the reference\n\t * to such objects based on a given state (e.g. the current node frame or builder).\n\t *\n\t * @param {any} state - This method can be invocated in different contexts so `state` can refer to any object type.\n\t * @return {any} The updated reference.\n\t */\n\tupdateReference( /*state*/ ) {\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * By default this method returns the value of the {@link Node#global} flag. This method\n\t * can be overwritten in derived classes if an analytical way is required to determine the\n\t * global cache referring to the current shader-stage.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {boolean} Whether this node is global or not.\n\t */\n\tisGlobal( /*builder*/ ) {\n\n\t\treturn this.global;\n\n\t}\n\n\t/**\n\t * Generator function that can be used to iterate over the child nodes.\n\t *\n\t * @generator\n\t * @yields {Node} A child node.\n\t */\n\t* getChildren() {\n\n\t\tfor ( const { childNode } of this._getChildren() ) {\n\n\t\t\tyield childNode;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Calling this method dispatches the `dispose` event. This event can be used\n\t * to register event listeners for clean up tasks.\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\t/**\n\t * Callback for {@link Node#traverse}.\n\t *\n\t * @callback traverseCallback\n\t * @param {Node} node - The current node.\n\t */\n\n\t/**\n\t * Can be used to traverse through the node's hierarchy.\n\t *\n\t * @param {traverseCallback} callback - A callback that is executed per node.\n\t */\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tfor ( const childNode of this.getChildren() ) {\n\n\t\t\tchildNode.traverse( callback );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the child nodes of this node.\n\t *\n\t * @private\n\t * @param {Set<Node>} [ignores=new Set()] - A set of nodes to ignore during the search to avoid circular references.\n\t * @returns {Array<Object>} An array of objects describing the child nodes.\n\t */\n\t_getChildren( ignores = new Set() ) {\n\n\t\tconst children = [];\n\n\t\t// avoid circular references\n\t\tignores.add( this );\n\n\t\tfor ( const property of Object.getOwnPropertyNames( this ) ) {\n\n\t\t\tconst object = this[ property ];\n\n\t\t\t// Ignore private properties and ignored nodes.\n\t\t\tif ( property.startsWith( '_' ) === true || ignores.has( object ) ) continue;\n\n\t\t\tif ( Array.isArray( object ) === true ) {\n\n\t\t\t\tfor ( let i = 0; i < object.length; i ++ ) {\n\n\t\t\t\t\tconst child = object[ i ];\n\n\t\t\t\t\tif ( child && child.isNode === true ) {\n\n\t\t\t\t\t\tchildren.push( { property, index: i, childNode: child } );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object && object.isNode === true ) {\n\n\t\t\t\tchildren.push( { property, childNode: object } );\n\n\t\t\t} else if ( object && Object.getPrototypeOf( object ) === Object.prototype ) {\n\n\t\t\t\tfor ( const subProperty in object ) {\n\n\t\t\t\t\t// Ignore private sub-properties.\n\t\t\t\t\tif ( subProperty.startsWith( '_' ) === true ) continue;\n\n\t\t\t\t\tconst child = object[ subProperty ];\n\n\t\t\t\t\tif ( child && child.isNode === true ) {\n\n\t\t\t\t\t\tchildren.push( { property, index: subProperty, childNode: child } );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\treturn children;\n\n\t}\n\n\t/**\n\t * Returns the cache key for this node.\n\t *\n\t * @param {boolean} [force=false] - When set to `true`, a recomputation of the cache key is forced.\n\t * @param {Set<Node>} [ignores=null] - A set of nodes to ignore during the computation of the cache key.\n\t * @return {number} The cache key of the node.\n\t */\n\tgetCacheKey( force = false, ignores = null ) {\n\n\t\tforce = force || this.version !== this._cacheKeyVersion;\n\n\t\tif ( force === true || this._cacheKey === null ) {\n\n\t\t\tif ( ignores === null ) ignores = new Set();\n\n\t\t\t//\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const { property, childNode } of this._getChildren( ignores ) ) {\n\n\t\t\t\tvalues.push( hashString( property.slice( 0, -4 ) ), childNode.getCacheKey( force, ignores ) );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tthis._cacheKey = hash$1( hashArray( values ), this.customCacheKey() );\n\t\t\tthis._cacheKeyVersion = this.version;\n\n\t\t}\n\n\t\treturn this._cacheKey;\n\n\t}\n\n\t/**\n\t * Generate a custom cache key for this node.\n\t *\n\t * @return {number} The cache key of the node.\n\t */\n\tcustomCacheKey() {\n\n\t\treturn this.id;\n\n\t}\n\n\t/**\n\t * Returns the references to this node which is by default `this`.\n\t *\n\t * @return {Node} A reference to this node.\n\t */\n\tgetScope() {\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the hash of the node which is used to identify the node. By default it's\n\t * the {@link Node#uuid} however derived node classes might have to overwrite this method\n\t * depending on their implementation.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The hash.\n\t */\n\tgetHash( /*builder*/ ) {\n\n\t\treturn String( this.id );\n\n\t}\n\n\t/**\n\t * Returns the update type of {@link Node#update}.\n\t *\n\t * @return {NodeUpdateType} The update type.\n\t */\n\tgetUpdateType() {\n\n\t\treturn this.updateType;\n\n\t}\n\n\t/**\n\t * Returns the update type of {@link Node#updateBefore}.\n\t *\n\t * @return {NodeUpdateType} The update type.\n\t */\n\tgetUpdateBeforeType() {\n\n\t\treturn this.updateBeforeType;\n\n\t}\n\n\t/**\n\t * Returns the update type of {@link Node#updateAfter}.\n\t *\n\t * @return {NodeUpdateType} The update type.\n\t */\n\tgetUpdateAfterType() {\n\n\t\treturn this.updateAfterType;\n\n\t}\n\n\t/**\n\t * Certain types are composed of multiple elements. For example a `vec3`\n\t * is composed of three `float` values. This method returns the type of\n\t * these elements.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The type of the node.\n\t */\n\tgetElementType( builder ) {\n\n\t\tconst type = this.getNodeType( builder );\n\t\tconst elementType = builder.getElementType( type );\n\n\t\treturn elementType;\n\n\t}\n\n\t/**\n\t * Returns the node member type for the given name.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} name - The name of the member.\n\t * @return {string} The type of the node.\n\t */\n\tgetMemberType( /*builder, name*/ ) {\n\n\t\treturn 'void';\n\n\t}\n\n\t/**\n\t * Returns the node's type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} [output=null] - The output of the node.\n\t * @return {string} The type of the node.\n\t */\n\tgetNodeType( builder, output = null ) {\n\n\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\tlet type;\n\n\t\tif ( output !== null ) {\n\n\t\t\tnodeData.typeFromOutput = nodeData.typeFromOutput || {};\n\n\t\t\ttype = nodeData.typeFromOutput[ output ];\n\n\t\t\tif ( type === undefined ) {\n\n\t\t\t\ttype = this.generateNodeType( builder, output );\n\n\t\t\t\tnodeData.typeFromOutput[ output ] = type;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\ttype = nodeData.type;\n\n\t\t\tif ( type === undefined ) {\n\n\t\t\t\ttype = this.generateNodeType( builder );\n\n\t\t\t\tnodeData.type = type;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn type;\n\n\t}\n\n\t/**\n\t * Returns the node's type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} [output=null] - The output of the node.\n\t * @return {string} The type of the node.\n\t */\n\tgenerateNodeType( builder, output = null ) {\n\n\t\tconst nodeProperties = builder.getNodeProperties( this );\n\n\t\tif ( nodeProperties.outputNode ) {\n\n\t\t\treturn nodeProperties.outputNode.getNodeType( builder, output );\n\n\t\t}\n\n\t\treturn this.nodeType;\n\n\t}\n\n\t/**\n\t * This method is used during the build process of a node and ensures\n\t * equal nodes are not built multiple times but just once. For example if\n\t * `attribute( 'uv' )` is used multiple times by the user, the build\n\t * process makes sure to process just the first node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node} The shared node if possible. Otherwise `this` is returned.\n\t */\n\tgetShared( builder ) {\n\n\t\tconst hash = this.getHash( builder );\n\t\tconst nodeFromHash = builder.getNodeFromHash( hash );\n\n\t\treturn nodeFromHash || this;\n\n\t}\n\n\t/**\n\t * Returns the number of elements in the node array.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {?number} The number of elements in the node array.\n\t */\n\tgetArrayCount( /*builder*/ ) {\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Represents the setup stage which is the first step of the build process, see {@link Node#build} method.\n\t * This method is often overwritten in derived modules to prepare the node which is used as a node's output/result.\n\t * If an output node is prepared, then it must be returned in the `return` statement of the derived module's setup function.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {?Node} The output node.\n\t */\n\tsetup( builder ) {\n\n\t\tconst nodeProperties = builder.getNodeProperties( this );\n\n\t\tlet index = 0;\n\n\t\tfor ( const childNode of this.getChildren() ) {\n\n\t\t\tnodeProperties[ 'node' + index ++ ] = childNode;\n\n\t\t}\n\n\t\t// return a outputNode if exists or null\n\n\t\treturn nodeProperties.outputNode || null;\n\n\t}\n\n\t/**\n\t * Represents the analyze stage which is the second step of the build process, see {@link Node#build} method.\n\t * This stage analyzes the node hierarchy and ensures descendent nodes are built.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {?Node} output - The target output node.\n\t */\n\tanalyze( builder, output = null ) {\n\n\t\tconst usageCount = builder.increaseUsage( this );\n\n\t\tif ( this.parents === true ) {\n\n\t\t\tconst nodeData = builder.getDataFromNode( this, 'any' );\n\t\t\tnodeData.stages = nodeData.stages || {};\n\t\t\tnodeData.stages[ builder.shaderStage ] = nodeData.stages[ builder.shaderStage ] || [];\n\t\t\tnodeData.stages[ builder.shaderStage ].push( output );\n\n\t\t}\n\n\t\tif ( usageCount === 1 ) {\n\n\t\t\t// node flow children\n\n\t\t\tconst nodeProperties = builder.getNodeProperties( this );\n\n\t\t\tfor ( const childNode of Object.values( nodeProperties ) ) {\n\n\t\t\t\tif ( childNode && childNode.isNode === true ) {\n\n\t\t\t\t\tchildNode.build( builder, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Represents the generate stage which is the third step of the build process, see {@link Node#build} method.\n\t * This state builds the output node and returns the resulting shader string.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {?string} [output] - Can be used to define the output type.\n\t * @return {?string} The generated shader string.\n\t */\n\tgenerate( builder, output ) {\n\n\t\tconst { outputNode } = builder.getNodeProperties( this );\n\n\t\tif ( outputNode && outputNode.isNode === true ) {\n\n\t\t\treturn outputNode.build( builder, output );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The method can be implemented to update the node's internal state before it is used to render an object.\n\t * The {@link Node#updateBeforeType} property defines how often the update is executed.\n\t *\n\t * @abstract\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t * @return {?boolean} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).\n\t */\n\tupdateBefore( /*frame*/ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * The method can be implemented to update the node's internal state after it was used to render an object.\n\t * The {@link Node#updateAfterType} property defines how often the update is executed.\n\t *\n\t * @abstract\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t * @return {?boolean} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).\n\t */\n\tupdateAfter( /*frame*/ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * The method can be implemented to update the node's internal state when it is used to render an object.\n\t * The {@link Node#updateType} property defines how often the update is executed.\n\t *\n\t * @abstract\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t * @return {?boolean} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).\n\t */\n\tupdate( /*frame*/ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\tbefore( node ) {\n\n\t\tif ( this._beforeNodes === null ) this._beforeNodes = [];\n\n\t\tthis._beforeNodes.push( node );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * This method performs the build of a node. The behavior and return value depend on the current build stage:\n\t * - **setup**: Prepares the node and its children for the build process. This process can also create new nodes. Returns the node itself or a variant.\n\t * - **analyze**: Analyzes the node hierarchy for optimizations in the code generation stage. Returns `null`.\n\t * - **generate**: Generates the shader code for the node. Returns the generated shader string.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {?(string|Node)} [output=null] - Can be used to define the output type.\n\t * @return {?(Node|string)} The result of the build process, depending on the build stage.\n\t */\n\tbuild( builder, output = null ) {\n\n\t\tconst refNode = this.getShared( builder );\n\n\t\tif ( this !== refNode ) {\n\n\t\t\treturn refNode.build( builder, output );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this._beforeNodes !== null ) {\n\n\t\t\tconst currentBeforeNodes = this._beforeNodes;\n\n\t\t\tthis._beforeNodes = null;\n\n\t\t\tfor ( const beforeNode of currentBeforeNodes ) {\n\n\t\t\t\tbeforeNode.build( builder, output );\n\n\t\t\t}\n\n\t\t\tthis._beforeNodes = currentBeforeNodes;\n\n\t\t}\n\n\t\t//\n\n\t\tconst nodeData = builder.getDataFromNode( this );\n\t\tnodeData.buildStages = nodeData.buildStages || {};\n\t\tnodeData.buildStages[ builder.buildStage ] = true;\n\n\t\tconst parentBuildStage = _parentBuildStage[ builder.buildStage ];\n\n\t\tif ( parentBuildStage && nodeData.buildStages[ parentBuildStage ] !== true ) {\n\n\t\t\t// force parent build stage (setup or analyze)\n\n\t\t\tconst previousBuildStage = builder.getBuildStage();\n\n\t\t\tbuilder.setBuildStage( parentBuildStage );\n\n\t\t\tthis.build( builder );\n\n\t\t\tbuilder.setBuildStage( previousBuildStage );\n\n\t\t}\n\n\t\t//\n\n\t\tbuilder.addChain( this );\n\n\t\t/* Build stages expected results:\n\t\t\t- \"setup\"\t\t-> Node\n\t\t\t- \"analyze\"\t\t-> null\n\t\t\t- \"generate\"\t-> String\n\t\t*/\n\t\tlet result = null;\n\n\t\tconst buildStage = builder.getBuildStage();\n\n\t\tif ( buildStage === 'setup' ) {\n\n\t\t\tbuilder.addNode( this );\n\n\t\t\tthis.updateReference( builder );\n\n\t\t\tconst properties = builder.getNodeProperties( this );\n\n\t\t\tif ( properties.initialized !== true ) {\n\n\t\t\t\t//const stackNodesBeforeSetup = builder.stack.nodes.length;\n\n\t\t\t\tproperties.initialized = true;\n\t\t\t\tproperties.outputNode = this.setup( builder ) || properties.outputNode || null;\n\n\t\t\t\t/*if ( isNodeOutput && builder.stack.nodes.length !== stackNodesBeforeSetup ) {\n\n\t\t\t\t\t// !! no outputNode !!\n\t\t\t\t\t//outputNode = builder.stack;\n\n\t\t\t\t}*/\n\n\t\t\t\tfor ( const childNode of Object.values( properties ) ) {\n\n\t\t\t\t\tif ( childNode && childNode.isNode === true ) {\n\n\t\t\t\t\t\tif ( childNode.parents === true ) {\n\n\t\t\t\t\t\t\tconst childProperties = builder.getNodeProperties( childNode );\n\t\t\t\t\t\t\tchildProperties.parents = childProperties.parents || [];\n\t\t\t\t\t\t\tchildProperties.parents.push( this );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchildNode.build( builder );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbuilder.addSequentialNode( this );\n\n\t\t\t}\n\n\t\t\tresult = properties.outputNode;\n\n\t\t} else if ( buildStage === 'analyze' ) {\n\n\t\t\tthis.analyze( builder, output );\n\n\t\t} else if ( buildStage === 'generate' ) {\n\n\t\t\t// If generate has just one argument, it means the output type is not required.\n\t\t\t// This means that the node does not handle output conversions internally,\n\t\t\t// so the value is stored in a cache and the builder handles the conversion\n\t\t\t// for all requested output types.\n\n\t\t\tconst isGenerateOnce = this.generate.length < 2;\n\n\t\t\tif ( isGenerateOnce ) {\n\n\t\t\t\tconst type = this.getNodeType( builder );\n\t\t\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\t\t\tresult = nodeData.snippet;\n\n\t\t\t\tif ( result === undefined ) {\n\n\t\t\t\t\tif ( nodeData.generated === undefined ) {\n\n\t\t\t\t\t\tnodeData.generated = true;\n\n\t\t\t\t\t\tresult = this.generate( builder ) || '';\n\n\t\t\t\t\t\tnodeData.snippet = result;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\twarn( 'Node: Recursion detected.', this );\n\n\t\t\t\t\t\tresult = '/* Recursion detected. */';\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( nodeData.flowCodes !== undefined && builder.context.nodeBlock !== undefined ) {\n\n\t\t\t\t\tbuilder.addFlowCodeHierarchy( this, builder.context.nodeBlock );\n\n\t\t\t\t}\n\n\t\t\t\tresult = builder.format( result, type, output );\n\n\t\t\t} else {\n\n\t\t\t\tresult = this.generate( builder, output ) || '';\n\n\t\t\t}\n\n\t\t\tif ( result === '' && output !== null && output !== 'void' && output !== 'OutputType' ) {\n\n\t\t\t\t// if no snippet is generated, return a default value\n\n\t\t\t\terror( `TSL: Invalid generated code, expected a \"${ output }\".` );\n\n\t\t\t\tresult = builder.generateConst( output );\n\n\t\t\t}\n\n\t\t}\n\n\t\tbuilder.removeChain( this );\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Returns the child nodes as a JSON object.\n\t *\n\t * @return {Generator<Object>} An iterable list of serialized child objects as JSON.\n\t */\n\tgetSerializeChildren() {\n\n\t\treturn this._getChildren();\n\n\t}\n\n\t/**\n\t * Serializes the node to JSON.\n\t *\n\t * @param {Object} json - The output JSON object.\n\t */\n\tserialize( json ) {\n\n\t\tconst nodeChildren = this.getSerializeChildren();\n\n\t\tconst inputNodes = {};\n\n\t\tfor ( const { property, index, childNode } of nodeChildren ) {\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tif ( inputNodes[ property ] === undefined ) {\n\n\t\t\t\t\tinputNodes[ property ] = Number.isInteger( index ) ? [] : {};\n\n\t\t\t\t}\n\n\t\t\t\tinputNodes[ property ][ index ] = childNode.toJSON( json.meta ).uuid;\n\n\t\t\t} else {\n\n\t\t\t\tinputNodes[ property ] = childNode.toJSON( json.meta ).uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( inputNodes ).length > 0 ) {\n\n\t\t\tjson.inputNodes = inputNodes;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Deserializes the node from the given JSON.\n\t *\n\t * @param {Object} json - The JSON object.\n\t */\n\tdeserialize( json ) {\n\n\t\tif ( json.inputNodes !== undefined ) {\n\n\t\t\tconst nodes = json.meta.nodes;\n\n\t\t\tfor ( const property in json.inputNodes ) {\n\n\t\t\t\tif ( Array.isArray( json.inputNodes[ property ] ) ) {\n\n\t\t\t\t\tconst inputArray = [];\n\n\t\t\t\t\tfor ( const uuid of json.inputNodes[ property ] ) {\n\n\t\t\t\t\t\tinputArray.push( nodes[ uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis[ property ] = inputArray;\n\n\t\t\t\t} else if ( typeof json.inputNodes[ property ] === 'object' ) {\n\n\t\t\t\t\tconst inputObject = {};\n\n\t\t\t\t\tfor ( const subProperty in json.inputNodes[ property ] ) {\n\n\t\t\t\t\t\tconst uuid = json.inputNodes[ property ][ subProperty ];\n\n\t\t\t\t\t\tinputObject[ subProperty ] = nodes[ uuid ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis[ property ] = inputObject;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst uuid = json.inputNodes[ property ];\n\n\t\t\t\t\tthis[ property ] = nodes[ uuid ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Serializes the node into the three.js JSON Object/Scene format.\n\t *\n\t * @param {?Object} meta - An optional JSON object that already holds serialized data from other scene objects.\n\t * @return {Object} The serialized node.\n\t */\n\ttoJSON( meta ) {\n\n\t\tconst { uuid, type } = this;\n\t\tconst isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t}\n\n\t\t// serialize\n\n\t\tlet data = meta.nodes[ uuid ];\n\n\t\tif ( data === undefined ) {\n\n\t\t\tdata = {\n\t\t\t\tuuid,\n\t\t\t\ttype,\n\t\t\t\tmeta,\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.7,\n\t\t\t\t\ttype: 'Node',\n\t\t\t\t\tgenerator: 'Node.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif ( isRoot !== true ) meta.nodes[ data.uuid ] = data;\n\n\t\t\tthis.serialize( data );\n\n\t\t\tdelete data.meta;\n\n\t\t}\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\t\t\tif ( nodes.length > 0 ) data.nodes = nodes;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Enables or disables the automatic capturing of stack traces for nodes.\n *\n * @type {boolean}\n * @default false\n */\nNode.captureStackTrace = false;\n\n/**\n * Base class for representing element access on an array-like\n * node data structures.\n *\n * @augments Node\n */\nclass ArrayElementNode extends Node { // @TODO: If extending from TempNode it breaks webgpu_compute\n\n\tstatic get type() {\n\n\t\treturn 'ArrayElementNode';\n\n\t}\n\n\t/**\n\t * Constructs an array element node.\n\t *\n\t * @param {Node} node - The array-like node.\n\t * @param {Node} indexNode - The index node that defines the element access.\n\t */\n\tconstructor( node, indexNode ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The array-like node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.node = node;\n\n\t\t/**\n\t\t * The index node that defines the element access.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.indexNode = indexNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isArrayElementNode = true;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from the array-like node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.node.getElementType( builder );\n\n\t}\n\n\t/**\n\t * This method is overwritten since the member type is inferred from the array-like node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} name - The member name.\n\t * @return {string} The member type.\n\t */\n\tgetMemberType( builder, name ) {\n\n\t\treturn this.node.getMemberType( builder, name );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst indexType = this.indexNode.getNodeType( builder );\n\n\t\tconst nodeSnippet = this.node.build( builder );\n\t\tconst indexSnippet = this.indexNode.build( builder, ! builder.isVector( indexType ) && builder.isInteger( indexType ) ? indexType : 'uint' );\n\n\t\treturn `${ nodeSnippet }[ ${ indexSnippet } ]`;\n\n\t}\n\n}\n\n/**\n * This module is part of the TSL core and usually not used in app level code.\n * It represents a convert operation during the shader generation process\n * meaning it converts the data type of a node to a target data type.\n *\n * @augments Node\n */\nclass ConvertNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ConvertNode';\n\n\t}\n\n\t/**\n\t * Constructs a new convert node.\n\t *\n\t * @param {Node} node - The node which type should be converted.\n\t * @param {string} convertTo - The target node type. Multiple types can be defined by separating them with a `|` sign.\n\t */\n\tconstructor( node, convertTo ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node which type should be converted.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.node = node;\n\n\t\t/**\n\t\t * The target node type. Multiple types can be defined by separating them with a `|` sign.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.convertTo = convertTo;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the implementation tries to infer the best\n\t * matching type from the {@link ConvertNode#convertTo} property.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tconst requestType = this.node.getNodeType( builder );\n\n\t\tlet convertTo = null;\n\n\t\tfor ( const overloadingType of this.convertTo.split( '|' ) ) {\n\n\t\t\tif ( convertTo === null || builder.getTypeLength( requestType ) === builder.getTypeLength( overloadingType ) ) {\n\n\t\t\t\tconvertTo = overloadingType;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn convertTo;\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.convertTo = this.convertTo;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.convertTo = data.convertTo;\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst node = this.node;\n\t\tconst type = this.getNodeType( builder );\n\n\t\tconst snippet = node.build( builder, type );\n\n\t\treturn builder.format( snippet, type, output );\n\n\t}\n\n}\n\n/**\n * This module uses cache management to create temporary variables\n * if the node is used more than once to prevent duplicate calculations.\n *\n * The class acts as a base class for many other nodes types.\n *\n * @augments Node\n */\nclass TempNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'TempNode';\n\n\t}\n\n\t/**\n\t * Constructs a temp node.\n\t *\n\t * @param {?string} nodeType - The node type.\n\t */\n\tconstructor( nodeType = null ) {\n\n\t\tsuper( nodeType );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isTempNode = true;\n\n\t}\n\n\t/**\n\t * Whether this node is used more than once in context of other nodes.\n\t *\n\t * @param {NodeBuilder} builder - The node builder.\n\t * @return {boolean} A flag that indicates if there is more than one dependency to other nodes.\n\t */\n\thasDependencies( builder ) {\n\n\t\treturn builder.getDataFromNode( this ).usageCount > 1;\n\n\t}\n\n\tbuild( builder, output ) {\n\n\t\tconst buildStage = builder.getBuildStage();\n\n\t\tif ( buildStage === 'generate' ) {\n\n\t\t\tconst type = builder.getVectorType( this.getNodeType( builder, output ) );\n\t\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\t\tif ( nodeData.propertyName !== undefined ) {\n\n\t\t\t\treturn builder.format( nodeData.propertyName, type, output );\n\n\t\t\t} else if ( type !== 'void' && output !== 'void' && this.hasDependencies( builder ) ) {\n\n\t\t\t\tconst snippet = super.build( builder, type );\n\n\t\t\t\tconst nodeVar = builder.getVarFromNode( this, null, type );\n\t\t\t\tconst propertyName = builder.getPropertyName( nodeVar );\n\n\t\t\t\tbuilder.addLineFlowCode( `${ propertyName } = ${ snippet }`, this );\n\n\t\t\t\tnodeData.snippet = snippet;\n\t\t\t\tnodeData.propertyName = propertyName;\n\n\t\t\t\treturn builder.format( nodeData.propertyName, type, output );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn super.build( builder, output );\n\n\t}\n\n}\n\n/**\n * This module is part of the TSL core and usually not used in app level code.\n * It represents a join operation during the shader generation process.\n * For example in can compose/join two single floats into a `vec2` type.\n *\n * @augments TempNode\n */\nclass JoinNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'JoinNode';\n\n\t}\n\n\t/**\n\t * Constructs a new join node.\n\t *\n\t * @param {Array<Node>} nodes - An array of nodes that should be joined.\n\t * @param {?string} [nodeType=null] - The node type.\n\t */\n\tconstructor( nodes = [], nodeType = null ) {\n\n\t\tsuper( nodeType );\n\n\t\t/**\n\t\t * An array of nodes that should be joined.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.nodes = nodes;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type must be inferred from the\n\t * joined data length if not explicitly defined.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tif ( this.nodeType !== null ) {\n\n\t\t\treturn builder.getVectorType( this.nodeType );\n\n\t\t}\n\n\t\treturn builder.getTypeFromLength( this.nodes.reduce( ( count, cur ) => count + builder.getTypeLength( cur.getNodeType( builder ) ), 0 ) );\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst type = this.getNodeType( builder );\n\t\tconst maxLength = builder.getTypeLength( type );\n\n\t\tconst nodes = this.nodes;\n\n\t\tconst primitiveType = builder.getComponentType( type );\n\n\t\tconst snippetValues = [];\n\n\t\tlet length = 0;\n\n\t\tfor ( const input of nodes ) {\n\n\t\t\tif ( length >= maxLength ) {\n\n\t\t\t\terror( `TSL: Length of parameters exceeds maximum length of function '${ type }()' type.`, this.stackTrace );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlet inputType = input.getNodeType( builder );\n\t\t\tlet inputTypeLength = builder.getTypeLength( inputType );\n\t\t\tlet inputSnippet;\n\n\t\t\tif ( length + inputTypeLength > maxLength ) {\n\n\t\t\t\terror( `TSL: Length of '${ type }()' data exceeds maximum length of output type.`, this.stackTrace );\n\n\t\t\t\tinputTypeLength = maxLength - length;\n\t\t\t\tinputType = builder.getTypeFromLength( inputTypeLength );\n\n\t\t\t}\n\n\t\t\tlength += inputTypeLength;\n\t\t\tinputSnippet = input.build( builder, inputType );\n\n\t\t\tconst inputPrimitiveType = builder.getComponentType( inputType );\n\n\t\t\tif ( inputPrimitiveType !== primitiveType ) {\n\n\t\t\t\tconst targetType = builder.getTypeFromLength( inputTypeLength, primitiveType );\n\n\t\t\t\tinputSnippet = builder.format( inputSnippet, inputType, targetType );\n\n\t\t\t}\n\n\t\t\tsnippetValues.push( inputSnippet );\n\n\t\t}\n\n\t\tconst snippet = `${ builder.getType( type ) }( ${ snippetValues.join( ', ' ) } )`;\n\n\t\treturn builder.format( snippet, type, output );\n\n\t}\n\n}\n\nconst _stringVectorComponents = vectorComponents.join( '' );\n\n/**\n * This module is part of the TSL core and usually not used in app level code.\n * `SplitNode` represents a property access operation which means it is\n * used to implement any `.xyzw`, `.rgba` and `stpq` usage on node objects.\n * For example:\n * ```js\n * const redValue = color.r;\n * ```\n *\n * @augments Node\n */\nclass SplitNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'SplitNode';\n\n\t}\n\n\t/**\n\t * Constructs a new split node.\n\t *\n\t * @param {Node} node - The node that should be accessed.\n\t * @param {string} [components='x'] - The components that should be accessed.\n\t */\n\tconstructor( node, components = 'x' ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node that should be accessed.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.node = node;\n\n\t\t/**\n\t\t * The components that should be accessed.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.components = components;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSplitNode = true;\n\n\t}\n\n\t/**\n\t * Returns the vector length which is computed based on the requested components.\n\t *\n\t * @return {number} The vector length.\n\t */\n\tgetVectorLength() {\n\n\t\tlet vectorLength = this.components.length;\n\n\t\tfor ( const c of this.components ) {\n\n\t\t\tvectorLength = Math.max( vectorComponents.indexOf( c ) + 1, vectorLength );\n\n\t\t}\n\n\t\treturn vectorLength;\n\n\t}\n\n\t/**\n\t * Returns the component type of the node's type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The component type.\n\t */\n\tgetComponentType( builder ) {\n\n\t\treturn builder.getComponentType( this.node.getNodeType( builder ) );\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from requested components.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn builder.getTypeFromLength( this.components.length, this.getComponentType( builder ) );\n\n\t}\n\n\t/**\n\t * Returns the scope of the node.\n\t *\n\t * @return {Node} The scope of the node.\n\t */\n\tgetScope() {\n\n\t\treturn this.node.getScope();\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst node = this.node;\n\t\tconst nodeTypeLength = builder.getTypeLength( node.getNodeType( builder ) );\n\n\t\tlet snippet = null;\n\n\t\tif ( nodeTypeLength > 1 ) {\n\n\t\t\tlet type = null;\n\n\t\t\tconst componentsLength = this.getVectorLength();\n\n\t\t\tif ( componentsLength >= nodeTypeLength ) {\n\n\t\t\t\t// needed expand the input node\n\n\t\t\t\ttype = builder.getTypeFromLength( this.getVectorLength(), this.getComponentType( builder ) );\n\n\t\t\t}\n\n\t\t\tconst nodeSnippet = node.build( builder, type );\n\n\t\t\tif ( this.components.length === nodeTypeLength && this.components === _stringVectorComponents.slice( 0, this.components.length ) ) {\n\n\t\t\t\t// unnecessary swizzle\n\n\t\t\t\tsnippet = builder.format( nodeSnippet, type, output );\n\n\t\t\t} else {\n\n\t\t\t\tsnippet = builder.format( `${nodeSnippet}.${this.components}`, this.getNodeType( builder ), output );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// ignore .components if .node returns float/integer\n\n\t\t\tsnippet = node.build( builder, output );\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.components = this.components;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.components = data.components;\n\n\t}\n\n}\n\n/**\n * This module is part of the TSL core and usually not used in app level code.\n * `SetNode` represents a set operation which means it is used to implement any\n * `setXYZW()`, `setRGBA()` and `setSTPQ()` method invocations on node objects.\n * For example:\n * ```js\n * materialLine.colorNode = color( 0, 0, 0 ).setR( float( 1 ) );\n * ```\n *\n * @augments TempNode\n */\nclass SetNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'SetNode';\n\n\t}\n\n\t/**\n\t * Constructs a new set node.\n\t *\n\t * @param {Node} sourceNode - The node that should be updated.\n\t * @param {string} components - The components that should be updated.\n\t * @param {Node} targetNode - The value node.\n\t */\n\tconstructor( sourceNode, components, targetNode ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node that should be updated.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.sourceNode = sourceNode;\n\n\t\t/**\n\t\t * The components that should be updated.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.components = components;\n\n\t\t/**\n\t\t * The value node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.targetNode = targetNode;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from {@link SetNode#sourceNode}.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.sourceNode.getNodeType( builder );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst { sourceNode, components, targetNode } = this;\n\n\t\tconst sourceType = this.getNodeType( builder );\n\n\t\tconst componentType = builder.getComponentType( targetNode.getNodeType( builder ) );\n\t\tconst targetType = builder.getTypeFromLength( components.length, componentType );\n\n\t\tconst targetSnippet = targetNode.build( builder, targetType );\n\t\tconst sourceSnippet = sourceNode.build( builder, sourceType );\n\n\t\tconst length = builder.getTypeLength( sourceType );\n\t\tconst snippetValues = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst component = vectorComponents[ i ];\n\n\t\t\tif ( component === components[ 0 ] ) {\n\n\t\t\t\tsnippetValues.push( targetSnippet );\n\n\t\t\t\ti += components.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tsnippetValues.push( sourceSnippet + '.' + component );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn `${ builder.getType( sourceType ) }( ${ snippetValues.join( ', ' ) } )`;\n\n\t}\n\n}\n\n/**\n * This module is part of the TSL core and usually not used in app level code.\n * It represents a flip operation during the shader generation process\n * meaning it flips normalized values with the following formula:\n * ```\n * x = 1 - x;\n * ```\n * `FlipNode` is internally used to implement any `flipXYZW()`, `flipRGBA()` and\n * `flipSTPQ()` method invocations on node objects. For example:\n * ```js\n * uvNode = uvNode.flipY();\n * ```\n *\n * @augments TempNode\n */\nclass FlipNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'FlipNode';\n\n\t}\n\n\t/**\n\t * Constructs a new flip node.\n\t *\n\t * @param {Node} sourceNode - The node which component(s) should be flipped.\n\t * @param {string} components - The components that should be flipped e.g. `'x'` or `'xy'`.\n\t */\n\tconstructor( sourceNode, components ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node which component(s) should be flipped.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.sourceNode = sourceNode;\n\n\t\t/**\n\t\t * The components that should be flipped e.g. `'x'` or `'xy'`.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.components = components;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from the source node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.sourceNode.getNodeType( builder );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst { components, sourceNode } = this;\n\n\t\tconst sourceType = this.getNodeType( builder );\n\t\tconst sourceSnippet = sourceNode.build( builder );\n\n\t\tconst sourceCache = builder.getVarFromNode( this );\n\t\tconst sourceProperty = builder.getPropertyName( sourceCache );\n\n\t\tbuilder.addLineFlowCode( sourceProperty + ' = ' + sourceSnippet, this );\n\n\t\tconst length = builder.getTypeLength( sourceType );\n\t\tconst snippetValues = [];\n\n\t\tlet componentIndex = 0;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst component = vectorComponents[ i ];\n\n\t\t\tif ( component === components[ componentIndex ] ) {\n\n\t\t\t\tsnippetValues.push( '1.0 - ' + ( sourceProperty + '.' + component ) );\n\n\t\t\t\tcomponentIndex ++;\n\n\t\t\t} else {\n\n\t\t\t\tsnippetValues.push( sourceProperty + '.' + component );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn `${ builder.getType( sourceType ) }( ${ snippetValues.join( ', ' ) } )`;\n\n\t}\n\n}\n\n/**\n * Base class for representing data input nodes.\n *\n * @augments Node\n */\nclass InputNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'InputNode';\n\n\t}\n\n\t/**\n\t * Constructs a new input node.\n\t *\n\t * @param {any} value - The value of this node. This can be any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).\n\t * @param {?string} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.\n\t */\n\tconstructor( value, nodeType = null ) {\n\n\t\tsuper( nodeType );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isInputNode = true;\n\n\t\t/**\n\t\t * The value of this node. This can be any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).\n\t\t *\n\t\t * @type {any}\n\t\t */\n\t\tthis.value = value;\n\n\t\t/**\n\t\t * The precision of the value in the shader.\n\t\t *\n\t\t * @type {?('low'|'medium'|'high')}\n\t\t * @default null\n\t\t */\n\t\tthis.precision = null;\n\n\t}\n\n\tgenerateNodeType( /*builder*/ ) {\n\n\t\tif ( this.nodeType === null ) {\n\n\t\t\treturn getValueType( this.value );\n\n\t\t}\n\n\t\treturn this.nodeType;\n\n\t}\n\n\t/**\n\t * Returns the input type of the node which is by default the node type. Derived modules\n\t * might overwrite this method and use a fixed type or compute one analytically.\n\t *\n\t * A typical example for different input and node types are textures. The input type of a\n\t * normal RGBA texture is `texture` whereas its node type is `vec4`.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( builder ) {\n\n\t\treturn this.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Sets the precision to the given value. The method can be\n\t * overwritten in derived classes if the final precision must be computed\n\t * analytically.\n\t *\n\t * @param {('low'|'medium'|'high')} precision - The precision of the input value in the shader.\n\t * @return {InputNode} A reference to this node.\n\t */\n\tsetPrecision( precision ) {\n\n\t\tthis.precision = precision;\n\n\t\treturn this;\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.value = this.value;\n\n\t\tif ( this.value && this.value.toArray ) data.value = this.value.toArray();\n\n\t\tdata.valueType = getValueType( this.value );\n\t\tdata.nodeType = this.nodeType;\n\n\t\tif ( data.valueType === 'ArrayBuffer' ) data.value = arrayBufferToBase64( data.value );\n\n\t\tdata.precision = this.precision;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.nodeType = data.nodeType;\n\t\tthis.value = Array.isArray( data.value ) ? getValueFromType( data.valueType, ...data.value ) : data.value;\n\n\t\tthis.precision = data.precision || null;\n\n\t\tif ( this.value && this.value.fromArray ) this.value = this.value.fromArray( data.value );\n\n\t}\n\n\tgenerate( /*builder, output*/ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n}\n\nconst _regNum = /float|u?int/;\n\n/**\n * Class for representing a constant value in the shader.\n *\n * @augments InputNode\n */\nclass ConstNode extends InputNode {\n\n\tstatic get type() {\n\n\t\treturn 'ConstNode';\n\n\t}\n\n\t/**\n\t * Constructs a new input node.\n\t *\n\t * @param {any} value - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color).\n\t * @param {?string} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.\n\t */\n\tconstructor( value, nodeType = null ) {\n\n\t\tsuper( value, nodeType );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isConstNode = true;\n\n\t}\n\n\t/**\n\t * Generates the shader string of the value with the current node builder.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The generated value as a shader string.\n\t */\n\tgenerateConst( builder ) {\n\n\t\treturn builder.generateConst( this.getNodeType( builder ), this.value );\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst type = this.getNodeType( builder );\n\n\t\tif ( _regNum.test( type ) && _regNum.test( output ) ) {\n\n\t\t\treturn builder.generateConst( output, this.value );\n\n\t\t}\n\n\t\treturn builder.format( this.generateConst( builder ), type, output );\n\n\t}\n\n}\n\n/**\n * Base class for representing member access on an object-like\n * node data structures.\n *\n * @augments Node\n */\nclass MemberNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'MemberNode';\n\n\t}\n\n\t/**\n\t * Constructs a member node.\n\t *\n\t * @param {Node} structNode - The struct node.\n\t * @param {string} property - The property name.\n\t */\n\tconstructor( structNode, property ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The struct node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.structNode = structNode;\n\n\t\t/**\n\t\t * The property name.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.property = property;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMemberNode = true;\n\n\t}\n\n\thasMember( builder ) {\n\n\t\tif ( this.structNode.isMemberNode ) {\n\n\t\t\tif ( this.structNode.hasMember( builder ) === false ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.structNode.getMemberType( builder, this.property ) !== 'void';\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\tif ( this.hasMember( builder ) === false ) {\n\n\t\t\t// default type if member does not exist\n\n\t\t\treturn 'float';\n\n\t\t}\n\n\t\treturn this.structNode.getMemberType( builder, this.property );\n\n\t}\n\n\tgetMemberType( builder, name ) {\n\n\t\tif ( this.hasMember( builder ) === false ) {\n\n\t\t\t// default type if member does not exist\n\n\t\t\treturn 'float';\n\n\t\t}\n\n\t\tconst type = this.getNodeType( builder );\n\t\tconst struct = builder.getStructTypeNode( type );\n\n\t\treturn struct.getMemberType( builder, name );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tif ( this.hasMember( builder ) === false ) {\n\n\t\t\twarn( `TSL: Member \"${ this.property }\" does not exist in struct.`, this.stackTrace );\n\n\t\t\tconst type = this.getNodeType( builder );\n\n\t\t\treturn builder.generateConst( type );\n\n\t\t}\n\n\t\tconst propertyName = this.structNode.build( builder );\n\n\t\treturn propertyName + '.' + this.property;\n\n\t}\n\n}\n\nlet currentStack = null;\n\nconst NodeElements = new Map();\n\n// Extend Node Class for TSL using prototype\n\nfunction addMethodChaining( name, nodeElement ) {\n\n\t// No require StackTrace because this is internal API\n\n\tif ( NodeElements.has( name ) ) {\n\n\t\twarn( `TSL: Redefinition of method chaining '${ name }'.` );\n\t\treturn;\n\n\t}\n\n\tif ( typeof nodeElement !== 'function' ) throw new Error( `THREE.TSL: Node element ${ name } is not a function` );\n\n\tNodeElements.set( name, nodeElement );\n\n\tif ( name !== 'assign' ) {\n\n\t\t// Changing Node prototype to add method chaining\n\n\t\tNode.prototype[ name ] = function ( ...params ) {\n\n\t\t\t//if ( name === 'toVarIntent' ) return this;\n\n\t\t\treturn this.isStackNode ? this.addToStack( nodeElement( ...params ) ) : nodeElement( this, ...params );\n\n\t\t};\n\n\t\t// Adding assign method chaining\n\n\t\tNode.prototype[ name + 'Assign' ] = function ( ...params ) {\n\n\t\t\treturn this.isStackNode ? this.assign( params[ 0 ], nodeElement( ...params ) ) : this.assign( nodeElement( this, ...params ) );\n\n\t\t};\n\n\t}\n\n}\n\nconst parseSwizzle = ( props ) => props.replace( /r|s/g, 'x' ).replace( /g|t/g, 'y' ).replace( /b|p/g, 'z' ).replace( /a|q/g, 'w' );\nconst parseSwizzleAndSort = ( props ) => parseSwizzle( props ).split( '' ).sort().join( '' );\n\nNode.prototype.assign = function ( ...params ) {\n\n\tif ( this.isStackNode !== true ) {\n\n\t\tif ( currentStack !== null ) {\n\n\t\t\tcurrentStack.assign( this, ...params );\n\n\t\t} else {\n\n\t\t\terror( 'TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().', new StackTrace() );\n\n\t\t}\n\n\t\treturn this;\n\n\t} else {\n\n\t\tconst nodeElement = NodeElements.get( 'assign' );\n\n\t\treturn this.addToStack( nodeElement( ...params ) );\n\n\t}\n\n};\n\nNode.prototype.toVarIntent = function () {\n\n\treturn this;\n\n};\n\nNode.prototype.get = function ( value ) {\n\n\treturn new MemberNode( this, value );\n\n};\n\n// Cache prototype for TSL\n\nconst proto = {};\n\n// Set swizzle properties for xyzw, rgba, and stpq.\n\nfunction setProtoSwizzle( property, altA, altB ) {\n\n\t// swizzle properties\n\n\tproto[ property ] = proto[ altA ] = proto[ altB ] = {\n\n\t\tget() {\n\n\t\t\tthis._cache = this._cache || {};\n\n\t\t\t//\n\n\t\t\tlet split = this._cache[ property ];\n\n\t\t\tif ( split === undefined ) {\n\n\t\t\t\tsplit = new SplitNode( this, property );\n\n\t\t\t\tthis._cache[ property ] = split;\n\n\t\t\t}\n\n\t\t\treturn split;\n\n\t\t},\n\n\t\tset( value ) {\n\n\t\t\tthis[ property ].assign( nodeObject( value ) );\n\n\t\t}\n\n\t};\n\n\t// set properties ( swizzle ) and sort to xyzw sequence\n\n\tconst propUpper = property.toUpperCase();\n\tconst altAUpper = altA.toUpperCase();\n\tconst altBUpper = altB.toUpperCase();\n\n\t// Set methods for swizzle properties\n\n\tNode.prototype[ 'set' + propUpper ] = Node.prototype[ 'set' + altAUpper ] = Node.prototype[ 'set' + altBUpper ] = function ( value ) {\n\n\t\tconst swizzle = parseSwizzleAndSort( property );\n\n\t\treturn new SetNode( this, swizzle, nodeObject( value ) );\n\n\t};\n\n\t// Set methods for flip properties\n\n\tNode.prototype[ 'flip' + propUpper ] = Node.prototype[ 'flip' + altAUpper ] = Node.prototype[ 'flip' + altBUpper ] = function () {\n\n\t\tconst swizzle = parseSwizzleAndSort( property );\n\n\t\treturn new FlipNode( this, swizzle );\n\n\t};\n\n}\n\nconst swizzleA = [ 'x', 'y', 'z', 'w' ];\nconst swizzleB = [ 'r', 'g', 'b', 'a' ];\nconst swizzleC = [ 's', 't', 'p', 'q' ];\n\nfor ( let a = 0; a < 4; a ++ ) {\n\n\tlet prop = swizzleA[ a ];\n\tlet altA = swizzleB[ a ];\n\tlet altB = swizzleC[ a ];\n\n\tsetProtoSwizzle( prop, altA, altB );\n\n\tfor ( let b = 0; b < 4; b ++ ) {\n\n\t\tprop = swizzleA[ a ] + swizzleA[ b ];\n\t\taltA = swizzleB[ a ] + swizzleB[ b ];\n\t\taltB = swizzleC[ a ] + swizzleC[ b ];\n\n\t\tsetProtoSwizzle( prop, altA, altB );\n\n\t\tfor ( let c = 0; c < 4; c ++ ) {\n\n\t\t\tprop = swizzleA[ a ] + swizzleA[ b ] + swizzleA[ c ];\n\t\t\taltA = swizzleB[ a ] + swizzleB[ b ] + swizzleB[ c ];\n\t\t\taltB = swizzleC[ a ] + swizzleC[ b ] + swizzleC[ c ];\n\n\t\t\tsetProtoSwizzle( prop, altA, altB );\n\n\t\t\tfor ( let d = 0; d < 4; d ++ ) {\n\n\t\t\t\tprop = swizzleA[ a ] + swizzleA[ b ] + swizzleA[ c ] + swizzleA[ d ];\n\t\t\t\taltA = swizzleB[ a ] + swizzleB[ b ] + swizzleB[ c ] + swizzleB[ d ];\n\t\t\t\taltB = swizzleC[ a ] + swizzleC[ b ] + swizzleC[ c ] + swizzleC[ d ];\n\n\t\t\t\tsetProtoSwizzle( prop, altA, altB );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n// Set/get static properties for array elements (0-31).\n\nfor ( let i = 0; i < 32; i ++ ) {\n\n\tproto[ i ] = {\n\n\t\tget() {\n\n\t\t\tthis._cache = this._cache || {};\n\n\t\t\t//\n\n\t\t\tlet element = this._cache[ i ];\n\n\t\t\tif ( element === undefined ) {\n\n\t\t\t\telement = new ArrayElementNode( this, new ConstNode( i, 'uint' ) );\n\n\t\t\t\tthis._cache[ i ] = element;\n\n\t\t\t}\n\n\t\t\treturn element;\n\n\t\t},\n\n\t\tset( value ) {\n\n\t\t\tthis[ i ].assign( nodeObject( value ) );\n\n\t\t}\n\n\t};\n\n}\n\n/*\n// Set properties for width, height, and depth.\n\nfunction setProtoProperty( property, target ) {\n\n\tproto[ property ] = {\n\n\t\tget() {\n\n\t\t\tthis._cache = this._cache || {};\n\n\t\t\t//\n\n\t\t\tlet split = this._cache[ target ];\n\n\t\t\tif ( split === undefined ) {\n\n\t\t\t\tsplit = new SplitNode( this, target );\n\n\t\t\t\tthis._cache[ target ] = split;\n\n\t\t\t}\n\n\t\t\treturn split;\n\n\t\t},\n\n\t\tset( value ) {\n\n\t\t\tthis[ target ].assign( nodeObject( value ) );\n\n\t\t}\n\n\t};\n\n}\n\nsetProtoProperty( 'width', 'x' );\nsetProtoProperty( 'height', 'y' );\nsetProtoProperty( 'depth', 'z' );\n*/\n\nObject.defineProperties( Node.prototype, proto );\n\n// --- FINISH ---\n\nconst nodeBuilderFunctionsCacheMap = new WeakMap();\n\nconst ShaderNodeObject = function ( obj, altType = null ) {\n\n\tconst type = getValueType( obj );\n\n\tif ( type === 'node' ) {\n\n\t\treturn obj;\n\n\t} else if ( ( altType === null && ( type === 'float' || type === 'boolean' ) ) || ( type && type !== 'shader' && type !== 'string' ) ) {\n\n\t\treturn nodeObject( getConstNode( obj, altType ) );\n\n\t} else if ( type === 'shader' ) {\n\n\t\treturn obj.isFn ? obj : Fn( obj );\n\n\t}\n\n\treturn obj;\n\n};\n\nconst ShaderNodeObjects = function ( objects, altType = null ) {\n\n\tfor ( const name in objects ) {\n\n\t\tobjects[ name ] = nodeObject( objects[ name ], altType );\n\n\t}\n\n\treturn objects;\n\n};\n\nconst ShaderNodeArray = function ( array, altType = null ) {\n\n\tconst len = array.length;\n\n\tfor ( let i = 0; i < len; i ++ ) {\n\n\t\tarray[ i ] = nodeObject( array[ i ], altType );\n\n\t}\n\n\treturn array;\n\n};\n\nconst ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, settings = null ) {\n\n\tfunction assignNode( node ) {\n\n\t\tif ( settings !== null ) {\n\n\t\t\tnode = nodeObject( Object.assign( node, settings ) );\n\n\t\t\tif ( settings.intent === true ) {\n\n\t\t\t\tnode = node.toVarIntent();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tnode = nodeObject( node );\n\n\t\t}\n\n\t\treturn node;\n\n\n\t}\n\n\tlet fn, name = scope, minParams, maxParams;\n\n\tfunction verifyParamsLimit( params ) {\n\n\t\tlet tslName;\n\n\t\tif ( name ) tslName = /[a-z]/i.test( name ) ? name + '()' : name;\n\t\telse tslName = NodeClass.type;\n\n\t\tif ( minParams !== undefined && params.length < minParams ) {\n\n\t\t\terror( `TSL: \"${ tslName }\" parameter length is less than minimum required.`, new StackTrace() );\n\n\t\t\treturn params.concat( new Array( minParams - params.length ).fill( 0 ) );\n\n\t\t} else if ( maxParams !== undefined && params.length > maxParams ) {\n\n\t\t\terror( `TSL: \"${ tslName }\" parameter length exceeds limit.`, new StackTrace() );\n\n\t\t\treturn params.slice( 0, maxParams );\n\n\t\t}\n\n\t\treturn params;\n\n\t}\n\n\tif ( scope === null ) {\n\n\t\tfn = ( ...params ) => {\n\n\t\t\treturn assignNode( new NodeClass( ...nodeArray( verifyParamsLimit( params ) ) ) );\n\n\t\t};\n\n\t} else if ( factor !== null ) {\n\n\t\tfactor = nodeObject( factor );\n\n\t\tfn = ( ...params ) => {\n\n\t\t\treturn assignNode( new NodeClass( scope, ...nodeArray( verifyParamsLimit( params ) ), factor ) );\n\n\t\t};\n\n\t} else {\n\n\t\tfn = ( ...params ) => {\n\n\t\t\treturn assignNode( new NodeClass( scope, ...nodeArray( verifyParamsLimit( params ) ) ) );\n\n\t\t};\n\n\t}\n\n\tfn.setParameterLength = ( ...params ) => {\n\n\t\tif ( params.length === 1 ) minParams = maxParams = params[ 0 ];\n\t\telse if ( params.length === 2 ) [ minParams, maxParams ] = params;\n\n\t\treturn fn;\n\n\t};\n\n\tfn.setName = ( value ) => {\n\n\t\tname = value;\n\n\t\treturn fn;\n\n\t};\n\n\treturn fn;\n\n};\n\nconst ShaderNodeImmutable = function ( NodeClass, ...params ) {\n\n\treturn new NodeClass( ...nodeArray( params ) );\n\n};\n\nclass ShaderCallNodeInternal extends Node {\n\n\tconstructor( shaderNode, rawInputs ) {\n\n\t\tsuper();\n\n\t\tthis.shaderNode = shaderNode;\n\t\tthis.rawInputs = rawInputs;\n\n\t\tthis.isShaderCallNodeInternal = true;\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.shaderNode.nodeType || this.getOutputNode( builder ).getNodeType( builder );\n\n\t}\n\n\tgetElementType( builder ) {\n\n\t\treturn this.getOutputNode( builder ).getElementType( builder );\n\n\t}\n\n\tgetMemberType( builder, name ) {\n\n\t\treturn this.getOutputNode( builder ).getMemberType( builder, name );\n\n\t}\n\n\tcall( builder ) {\n\n\t\tconst { shaderNode, rawInputs } = this;\n\n\t\tconst properties = builder.getNodeProperties( shaderNode );\n\n\t\tconst subBuild = builder.getClosestSubBuild( shaderNode.subBuilds ) || '';\n\t\tconst subBuildProperty = subBuild || 'default';\n\n\t\tif ( properties[ subBuildProperty ] ) {\n\n\t\t\treturn properties[ subBuildProperty ];\n\n\t\t}\n\n\t\t//\n\n\t\tconst previousSubBuildFn = builder.subBuildFn;\n\t\tconst previousFnCall = builder.fnCall;\n\n\t\tbuilder.subBuildFn = subBuild;\n\t\tbuilder.fnCall = this;\n\n\t\tlet result = null;\n\n\t\tif ( shaderNode.layout ) {\n\n\t\t\tlet functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get( builder.constructor );\n\n\t\t\tif ( functionNodesCacheMap === undefined ) {\n\n\t\t\t\tfunctionNodesCacheMap = new WeakMap();\n\n\t\t\t\tnodeBuilderFunctionsCacheMap.set( builder.constructor, functionNodesCacheMap );\n\n\t\t\t}\n\n\t\t\tlet functionNode = functionNodesCacheMap.get( shaderNode );\n\n\t\t\tif ( functionNode === undefined ) {\n\n\t\t\t\tfunctionNode = nodeObject( builder.buildFunctionNode( shaderNode ) );\n\n\t\t\t\tfunctionNodesCacheMap.set( shaderNode, functionNode );\n\n\t\t\t}\n\n\t\t\tbuilder.addInclude( functionNode );\n\n\t\t\t//\n\n\t\t\tconst inputs = rawInputs ? getLayoutParameters( rawInputs ) : null;\n\n\t\t\tresult = nodeObject( functionNode.call( inputs ) );\n\n\t\t} else {\n\n\t\t\tconst secureNodeBuilder = new Proxy( builder, {\n\n\t\t\t\tget: ( target, property, receiver ) => {\n\n\t\t\t\t\tlet value;\n\n\t\t\t\t\tif ( Symbol.iterator === property ) {\n\n\t\t\t\t\t\tvalue = function* () {\n\n\t\t\t\t\t\t\tyield undefined;\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvalue = Reflect.get( target, property, receiver );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t//\n\n\t\t\tconst inputs = rawInputs ? getProxyParameters( rawInputs ) : null;\n\n\t\t\tconst hasParameters = Array.isArray( rawInputs ) ? rawInputs.length > 0 : rawInputs !== null;\n\n\t\t\tconst jsFunc = shaderNode.jsFunc;\n\t\t\tconst outputNode = hasParameters || jsFunc.length > 1 ? jsFunc( inputs, secureNodeBuilder ) : jsFunc( secureNodeBuilder );\n\n\t\t\tresult = nodeObject( outputNode );\n\n\t\t}\n\n\t\tbuilder.subBuildFn = previousSubBuildFn;\n\t\tbuilder.fnCall = previousFnCall;\n\n\t\tif ( shaderNode.once ) {\n\n\t\t\tproperties[ subBuildProperty ] = result;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tsetupOutput( builder ) {\n\n\t\tbuilder.addStack();\n\n\t\tbuilder.stack.outputNode = this.call( builder );\n\n\t\treturn builder.removeStack();\n\n\t}\n\n\tgetOutputNode( builder ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tconst subBuildOutput = builder.getSubBuildOutput( this );\n\n\t\tproperties[ subBuildOutput ] = properties[ subBuildOutput ] || this.setupOutput( builder );\n\t\tproperties[ subBuildOutput ].subBuild = builder.getClosestSubBuild( this );\n\n\t\treturn properties[ subBuildOutput ];\n\n\t}\n\n\tbuild( builder, output = null ) {\n\n\t\tlet result = null;\n\n\t\tconst buildStage = builder.getBuildStage();\n\t\tconst properties = builder.getNodeProperties( this );\n\n\t\tconst subBuildOutput = builder.getSubBuildOutput( this );\n\t\tconst outputNode = this.getOutputNode( builder );\n\n\t\tconst previousFnCall = builder.fnCall;\n\n\t\tbuilder.fnCall = this;\n\n\t\tif ( buildStage === 'setup' ) {\n\n\t\t\tconst subBuildInitialized = builder.getSubBuildProperty( 'initialized', this );\n\n\t\t\tif ( properties[ subBuildInitialized ] !== true ) {\n\n\t\t\t\tproperties[ subBuildInitialized ] = true;\n\n\t\t\t\tproperties[ subBuildOutput ] = this.getOutputNode( builder );\n\t\t\t\tproperties[ subBuildOutput ].build( builder );\n\n\t\t\t\t// If the shaderNode has subBuilds, add them to the chaining nodes\n\t\t\t\t// so they can be built later in the build process.\n\n\t\t\t\tif ( this.shaderNode.subBuilds ) {\n\n\t\t\t\t\tfor ( const node of builder.chaining ) {\n\n\t\t\t\t\t\tconst nodeData = builder.getDataFromNode( node, 'any' );\n\t\t\t\t\t\tnodeData.subBuilds = nodeData.subBuilds || new Set();\n\n\t\t\t\t\t\tfor ( const subBuild of this.shaderNode.subBuilds ) {\n\n\t\t\t\t\t\t\tnodeData.subBuilds.add( subBuild );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//builder.getDataFromNode( node ).subBuilds = nodeData.subBuilds;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tresult = properties[ subBuildOutput ];\n\n\t\t} else if ( buildStage === 'analyze' ) {\n\n\t\t\toutputNode.build( builder, output );\n\n\t\t} else if ( buildStage === 'generate' ) {\n\n\t\t\tresult = outputNode.build( builder, output ) || '';\n\n\t\t}\n\n\t\tbuilder.fnCall = previousFnCall;\n\n\t\treturn result;\n\n\t}\n\n}\n\nfunction getLayoutParameters( params ) {\n\n\tlet output;\n\n\tnodeObjects( params );\n\n\tconst isArrayAsParameter = params[ 0 ] && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype );\n\n\tif ( isArrayAsParameter ) {\n\n\t\toutput = [ ...params ];\n\n\t} else {\n\n\t\toutput = params[ 0 ];\n\n\t}\n\n\treturn output;\n\n}\n\nfunction getProxyParameters( params ) {\n\n\tlet index = 0;\n\n\tnodeObjects( params );\n\n\treturn new Proxy( params, {\n\n\t\tget: ( target, property, receiver ) => {\n\n\t\t\tlet value;\n\n\t\t\tif ( property === 'length' ) {\n\n\t\t\t\tvalue = params.length;\n\n\t\t\t\treturn value;\n\n\t\t\t}\n\n\t\t\tif ( Symbol.iterator === property ) {\n\n\t\t\t\tvalue = function* () {\n\n\t\t\t\t\tfor ( const inputNode of params ) {\n\n\t\t\t\t\t\tyield nodeObject( inputNode );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tif ( params.length > 0 ) {\n\n\t\t\t\t\tif ( Object.getPrototypeOf( params[ 0 ] ) === Object.prototype ) {\n\n\t\t\t\t\t\tconst objectTarget = params[ 0 ];\n\n\t\t\t\t\t\tif ( objectTarget[ property ] === undefined ) {\n\n\t\t\t\t\t\t\tvalue = objectTarget[ index ++ ];\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvalue = Reflect.get( objectTarget, property, receiver );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( params[ 0 ] instanceof Node ) {\n\n\t\t\t\t\t\tif ( params[ property ] === undefined ) {\n\n\t\t\t\t\t\t\tvalue = params[ index ++ ];\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvalue = Reflect.get( params, property, receiver );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvalue = Reflect.get( target, property, receiver );\n\n\t\t\t\t}\n\n\t\t\t\tvalue = nodeObject( value );\n\n\t\t\t}\n\n\t\t\treturn value;\n\n\t\t}\n\n\t} );\n\n}\n\nclass ShaderNodeInternal extends Node {\n\n\tconstructor( jsFunc, nodeType ) {\n\n\t\tsuper( nodeType );\n\n\t\tthis.jsFunc = jsFunc;\n\t\tthis.layout = null;\n\n\t\tthis.global = true;\n\n\t\tthis.once = false;\n\n\t}\n\n\tsetLayout( layout ) {\n\n\t\tthis.layout = layout;\n\n\t\treturn this;\n\n\t}\n\n\tgetLayout() {\n\n\t\treturn this.layout;\n\n\t}\n\n\tcall( rawInputs = null ) {\n\n\t\treturn new ShaderCallNodeInternal( this, rawInputs );\n\n\t}\n\n\tsetup() {\n\n\t\treturn this.call();\n\n\t}\n\n}\n\nconst bools = [ false, true ];\nconst uints = [ 0, 1, 2, 3 ];\nconst ints = [ -1, -2 ];\nconst floats = [ 0.5, 1.5, 1 / 3, 1e-6, 1e6, Math.PI, Math.PI * 2, 1 / Math.PI, 2 / Math.PI, 1 / ( Math.PI * 2 ), Math.PI / 2 ];\n\nconst boolsCacheMap = new Map();\nfor ( const bool of bools ) boolsCacheMap.set( bool, new ConstNode( bool ) );\n\nconst uintsCacheMap = new Map();\nfor ( const uint of uints ) uintsCacheMap.set( uint, new ConstNode( uint, 'uint' ) );\n\nconst intsCacheMap = new Map( [ ...uintsCacheMap ].map( el => new ConstNode( el.value, 'int' ) ) );\nfor ( const int of ints ) intsCacheMap.set( int, new ConstNode( int, 'int' ) );\n\nconst floatsCacheMap = new Map( [ ...intsCacheMap ].map( el => new ConstNode( el.value ) ) );\nfor ( const float of floats ) floatsCacheMap.set( float, new ConstNode( float ) );\nfor ( const float of floats ) floatsCacheMap.set( - float, new ConstNode( - float ) );\n\nconst cacheMaps = { bool: boolsCacheMap, uint: uintsCacheMap, ints: intsCacheMap, float: floatsCacheMap };\n\nconst constNodesCacheMap = new Map( [ ...boolsCacheMap, ...floatsCacheMap ] );\n\nconst getConstNode = ( value, type ) => {\n\n\tif ( constNodesCacheMap.has( value ) ) {\n\n\t\treturn constNodesCacheMap.get( value );\n\n\t} else if ( value.isNode === true ) {\n\n\t\treturn value;\n\n\t} else {\n\n\t\treturn new ConstNode( value, type );\n\n\t}\n\n};\n\nconst ConvertType = function ( type, cacheMap = null ) {\n\n\treturn ( ...params ) => {\n\n\t\tfor ( const param of params ) {\n\n\t\t\tif ( param === undefined ) {\n\n\t\t\t\terror( `TSL: Invalid parameter for the type \"${ type }\".`, new StackTrace() );\n\n\t\t\t\treturn new ConstNode( 0, type );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( params.length === 0 || ( ! [ 'bool', 'float', 'int', 'uint' ].includes( type ) && params.every( param => {\n\n\t\t\tconst paramType = typeof param;\n\n\t\t\treturn paramType !== 'object' && paramType !== 'function';\n\n\t\t} ) ) ) {\n\n\t\t\tparams = [ getValueFromType( type, ...params ) ];\n\n\t\t}\n\n\t\tif ( params.length === 1 && cacheMap !== null && cacheMap.has( params[ 0 ] ) ) {\n\n\t\t\treturn nodeObjectIntent( cacheMap.get( params[ 0 ] ) );\n\n\t\t}\n\n\t\tif ( params.length === 1 ) {\n\n\t\t\tconst node = getConstNode( params[ 0 ], type );\n\t\t\tif ( node.nodeType === type ) return nodeObjectIntent( node );\n\t\t\treturn nodeObjectIntent( new ConvertNode( node, type ) );\n\n\t\t}\n\n\t\tconst nodes = params.map( param => getConstNode( param ) );\n\t\treturn nodeObjectIntent( new JoinNode( nodes, type ) );\n\n\t};\n\n};\n\n// exports\n\nfunction defined( value ) {\n\n\tif ( value && value.isNode ) {\n\n\t\tvalue.traverse( ( node ) => {\n\n\t\t\tif ( node.isConstNode ) {\n\n\t\t\t\tvalue = node.value;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\treturn Boolean( value );\n\n}\n\n// utils\n\nconst getConstNodeType = ( value ) => ( value !== undefined && value !== null ) ? ( value.nodeType || value.convertTo || ( typeof value === 'string' ? value : null ) ) : null;\n\n// shader node base\n\nfunction ShaderNode( jsFunc, nodeType ) {\n\n\treturn new ShaderNodeInternal( jsFunc, nodeType );\n\n}\n\nconst nodeObject = ( val, altType = null ) => /* new */ ShaderNodeObject( val, altType );\nconst nodeObjectIntent = ( val, altType = null ) => /* new */ nodeObject( val, altType ).toVarIntent();\nconst nodeObjects = ( val, altType = null ) => new ShaderNodeObjects( val, altType );\nconst nodeArray = ( val, altType = null ) => new ShaderNodeArray( val, altType );\nconst nodeProxy = ( NodeClass, scope = null, factor = null, settings = null ) => new ShaderNodeProxy( NodeClass, scope, factor, settings );\nconst nodeImmutable = ( NodeClass, ...params ) => new ShaderNodeImmutable( NodeClass, ...params );\nconst nodeProxyIntent = ( NodeClass, scope = null, factor = null, settings = {} ) => new ShaderNodeProxy( NodeClass, scope, factor, { ...settings, intent: true } );\n\nlet fnId = 0;\n\nclass FnNode extends Node {\n\n\tconstructor( jsFunc, layout = null ) {\n\n\t\tsuper();\n\n\t\tlet nodeType = null;\n\n\t\tif ( layout !== null ) {\n\n\t\t\tif ( typeof layout === 'object' ) {\n\n\t\t\t\tnodeType = layout.return;\n\n\t\t\t} else {\n\n\t\t\t\tif ( typeof layout === 'string' ) {\n\n\t\t\t\t\tnodeType = layout;\n\n\t\t\t\t} else {\n\n\t\t\t\t\terror( 'TSL: Invalid layout type.', new StackTrace() );\n\n\t\t\t\t}\n\n\t\t\t\tlayout = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.shaderNode = new ShaderNode( jsFunc, nodeType );\n\n\t\tif ( layout !== null ) {\n\n\t\t\tthis.setLayout( layout );\n\n\t\t}\n\n\t\tthis.isFn = true;\n\n\t}\n\n\tsetLayout( layout ) {\n\n\t\tconst nodeType = this.shaderNode.nodeType;\n\n\t\tif ( typeof layout.inputs !== 'object' ) {\n\n\t\t\tconst fullLayout = {\n\t\t\t\tname: 'fn' + fnId ++,\n\t\t\t\ttype: nodeType,\n\t\t\t\tinputs: []\n\t\t\t};\n\n\t\t\tfor ( const name in layout ) {\n\n\t\t\t\tif ( name === 'return' ) continue;\n\n\t\t\t\tfullLayout.inputs.push( {\n\t\t\t\t\tname: name,\n\t\t\t\t\ttype: layout[ name ]\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tlayout = fullLayout;\n\n\t\t}\n\n\t\tthis.shaderNode.setLayout( layout );\n\n\t\treturn this;\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.shaderNode.getNodeType( builder ) || 'float';\n\n\t}\n\n\tcall( ...params ) {\n\n\t\tconst fnCall = this.shaderNode.call( params );\n\n\t\tif ( this.shaderNode.nodeType === 'void' ) fnCall.toStack();\n\n\t\treturn fnCall.toVarIntent();\n\n\t}\n\n\tonce( subBuilds = null ) {\n\n\t\tthis.shaderNode.once = true;\n\t\tthis.shaderNode.subBuilds = subBuilds;\n\n\t\treturn this;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst type = this.getNodeType( builder );\n\n\t\terror( 'TSL: \"Fn()\" was declared but not invoked. Try calling it like \"Fn()( ...params )\".', this.stackTrace );\n\n\t\treturn builder.generateConst( type );\n\n\t}\n\n}\n\nfunction Fn( jsFunc, layout = null ) {\n\n\tconst instance = new FnNode( jsFunc, layout );\n\n\treturn new Proxy( () => {}, {\n\n\t\tapply( target, thisArg, params ) {\n\n\t\t\treturn instance.call( ...params );\n\n\t\t},\n\n\t\tget( target, prop, receiver ) {\n\n\t\t\treturn Reflect.get( instance, prop, receiver );\n\n\t\t},\n\n\t\tset( target, prop, value, receiver ) {\n\n\t\t\treturn Reflect.set( instance, prop, value, receiver );\n\n\t\t}\n\n\t} );\n\n}\n\n//\n\nconst setCurrentStack = ( stack ) => {\n\n\tcurrentStack = stack;\n\n};\n\nconst getCurrentStack = () => currentStack;\n\n/**\n * Represent a conditional node using if/else statements.\n *\n * ```js\n * If( condition, function )\n * \t.ElseIf( condition, function )\n * \t.Else( function )\n * ```\n * @tsl\n * @function\n * @param {...any} params - The parameters for the conditional node.\n * @returns {StackNode} The conditional node.\n */\nconst If = ( ...params ) => currentStack.If( ...params );\n\n/**\n * Represent a conditional node using switch/case statements.\n *\n * ```js\n * Switch( value )\n * \t.Case( 1, function )\n * \t.Case( 2, 3, 4, function )\n * \t.Default( function )\n * ```\n * @tsl\n * @function\n * @param {...any} params - The parameters for the conditional node.\n * @returns {StackNode} The conditional node.\n */\nconst Switch = ( ...params ) => currentStack.Switch( ...params );\n\n/**\n * Add the given node to the current stack.\n *\n * @param {Node} node - The node to add.\n * @returns {Node} The node that was added to the stack.\n */\nfunction Stack( node ) {\n\n\tif ( currentStack ) currentStack.addToStack( node );\n\n\treturn node;\n\n}\n\naddMethodChaining( 'toStack', Stack );\n\n// types\n\nconst color = new ConvertType( 'color' );\n\nconst float = new ConvertType( 'float', cacheMaps.float );\nconst int = new ConvertType( 'int', cacheMaps.ints );\nconst uint = new ConvertType( 'uint', cacheMaps.uint );\nconst bool = new ConvertType( 'bool', cacheMaps.bool );\n\nconst vec2 = new ConvertType( 'vec2' );\nconst ivec2 = new ConvertType( 'ivec2' );\nconst uvec2 = new ConvertType( 'uvec2' );\nconst bvec2 = new ConvertType( 'bvec2' );\n\nconst vec3 = new ConvertType( 'vec3' );\nconst ivec3 = new ConvertType( 'ivec3' );\nconst uvec3 = new ConvertType( 'uvec3' );\nconst bvec3 = new ConvertType( 'bvec3' );\n\nconst vec4 = new ConvertType( 'vec4' );\nconst ivec4 = new ConvertType( 'ivec4' );\nconst uvec4 = new ConvertType( 'uvec4' );\nconst bvec4 = new ConvertType( 'bvec4' );\n\nconst mat2 = new ConvertType( 'mat2' );\nconst mat3 = new ConvertType( 'mat3' );\nconst mat4 = new ConvertType( 'mat4' );\n\nconst string = ( value = '' ) => new ConstNode( value, 'string' );\nconst arrayBuffer = ( value ) => new ConstNode( value, 'ArrayBuffer' );\n\naddMethodChaining( 'toColor', color );\naddMethodChaining( 'toFloat', float );\naddMethodChaining( 'toInt', int );\naddMethodChaining( 'toUint', uint );\naddMethodChaining( 'toBool', bool );\naddMethodChaining( 'toVec2', vec2 );\naddMethodChaining( 'toIVec2', ivec2 );\naddMethodChaining( 'toUVec2', uvec2 );\naddMethodChaining( 'toBVec2', bvec2 );\naddMethodChaining( 'toVec3', vec3 );\naddMethodChaining( 'toIVec3', ivec3 );\naddMethodChaining( 'toUVec3', uvec3 );\naddMethodChaining( 'toBVec3', bvec3 );\naddMethodChaining( 'toVec4', vec4 );\naddMethodChaining( 'toIVec4', ivec4 );\naddMethodChaining( 'toUVec4', uvec4 );\naddMethodChaining( 'toBVec4', bvec4 );\naddMethodChaining( 'toMat2', mat2 );\naddMethodChaining( 'toMat3', mat3 );\naddMethodChaining( 'toMat4', mat4 );\n\n// basic nodes\n\nconst element = /*@__PURE__*/ nodeProxy( ArrayElementNode ).setParameterLength( 2 );\nconst convert = ( node, types ) => new ConvertNode( nodeObject( node ), types );\nconst split = ( node, channels ) => new SplitNode( nodeObject( node ), channels );\n\naddMethodChaining( 'element', element );\naddMethodChaining( 'convert', convert );\n\n// deprecated\n\n/**\n * @tsl\n * @function\n * @deprecated since r176. Use {@link Stack} instead.\n *\n * @param {Node} node - The node to add.\n * @returns {Function}\n */\nconst append = ( node ) => { // @deprecated, r176\n\n\twarn( 'TSL: append() has been renamed to Stack().', new StackTrace() );\n\treturn Stack( node );\n\n};\n\naddMethodChaining( 'append', ( node ) => { // @deprecated, r176\n\n\twarn( 'TSL: .append() has been renamed to .toStack().', new StackTrace() );\n\treturn Stack( node );\n\n} );\n\n/**\n * This class represents a shader property. It can be used\n * to explicitly define a property and assign a value to it.\n *\n * ```js\n * const threshold = property( 'float', 'threshold' ).assign( THRESHOLD );\n *```\n * `PropertyNode` is used by the engine to predefined common material properties\n * for TSL code.\n *\n * @augments Node\n */\nclass PropertyNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'PropertyNode';\n\n\t}\n\n\t/**\n\t * Constructs a new property node.\n\t *\n\t * @param {string} nodeType - The type of the node.\n\t * @param {?string} [name=null] - The name of the property in the shader.\n\t * @param {boolean} [varying=false] - Whether this property is a varying or not.\n\t */\n\tconstructor( nodeType, name = null, varying = false ) {\n\n\t\tsuper( nodeType );\n\n\t\t/**\n\t\t * The name of the property in the shader. If no name is defined,\n\t\t * the node system auto-generates one.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * Whether this property is a varying or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.varying = varying;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPropertyNode = true;\n\n\t\t/**\n\t\t * This flag is used for global cache.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t}\n\n\tcustomCacheKey() {\n\n\t\treturn hashString( this.type + ':' + ( this.name || '' ) + ':' + ( this.varying ? '1' : '0' ) );\n\n\t}\n\n\tgetHash( builder ) {\n\n\t\treturn this.name || super.getHash( builder );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tlet nodeVar;\n\n\t\tif ( this.varying === true ) {\n\n\t\t\tnodeVar = builder.getVaryingFromNode( this, this.name );\n\t\t\tnodeVar.needsInterpolation = true;\n\n\t\t} else {\n\n\t\t\tnodeVar = builder.getVarFromNode( this, this.name );\n\n\t\t}\n\n\t\treturn builder.getPropertyName( nodeVar );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a property node.\n *\n * @tsl\n * @function\n * @param {string} type - The type of the node.\n * @param {?string} [name=null] - The name of the property in the shader.\n * @returns {PropertyNode}\n */\nconst property = ( type, name ) => new PropertyNode( type, name );\n\n/**\n * TSL function for creating a varying property node.\n *\n * @tsl\n * @function\n * @param {string} type - The type of the node.\n * @param {?string} [name=null] - The name of the varying in the shader.\n * @returns {PropertyNode}\n */\nconst varyingProperty = ( type, name ) => new PropertyNode( type, name, true );\n\n/**\n * TSL object that represents the shader variable `DiffuseColor`.\n *\n * @tsl\n * @type {PropertyNode<vec4>}\n */\nconst diffuseColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );\n\n/**\n * TSL object that represents the shader variable `DiffuseContribution`.\n *\n * @tsl\n * @type {PropertyNode<vec3>}\n */\nconst diffuseContribution = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'DiffuseContribution' );\n\n/**\n * TSL object that represents the shader variable `EmissiveColor`.\n *\n * @tsl\n * @type {PropertyNode<vec3>}\n */\nconst emissive = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'EmissiveColor' );\n\n/**\n * TSL object that represents the shader variable `Roughness`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst roughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Roughness' );\n\n/**\n * TSL object that represents the shader variable `Metalness`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst metalness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Metalness' );\n\n/**\n * TSL object that represents the shader variable `Clearcoat`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst clearcoat = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Clearcoat' );\n\n/**\n * TSL object that represents the shader variable `ClearcoatRoughness`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst clearcoatRoughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'ClearcoatRoughness' );\n\n/**\n * TSL object that represents the shader variable `Sheen`.\n *\n * @tsl\n * @type {PropertyNode<vec3>}\n */\nconst sheen = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'Sheen' );\n\n/**\n * TSL object that represents the shader variable `SheenRoughness`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst sheenRoughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'SheenRoughness' );\n\n/**\n * TSL object that represents the shader variable `Iridescence`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst iridescence = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Iridescence' );\n\n/**\n * TSL object that represents the shader variable `IridescenceIOR`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst iridescenceIOR = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IridescenceIOR' );\n\n/**\n * TSL object that represents the shader variable `IridescenceThickness`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst iridescenceThickness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IridescenceThickness' );\n\n/**\n * TSL object that represents the shader variable `AlphaT`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst alphaT = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'AlphaT' );\n\n/**\n * TSL object that represents the shader variable `Anisotropy`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst anisotropy = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Anisotropy' );\n\n/**\n * TSL object that represents the shader variable `AnisotropyT`.\n *\n * @tsl\n * @type {PropertyNode<vec3>}\n */\nconst anisotropyT = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'AnisotropyT' );\n\n/**\n * TSL object that represents the shader variable `AnisotropyB`.\n *\n * @tsl\n * @type {PropertyNode<vec3>}\n */\nconst anisotropyB = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'AnisotropyB' );\n\n/**\n * TSL object that represents the shader variable `SpecularColor`.\n *\n * @tsl\n * @type {PropertyNode<color>}\n */\nconst specularColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'SpecularColor' );\n\n/**\n * TSL object that represents the shader variable `SpecularColorBlended`.\n *\n * @tsl\n * @type {PropertyNode<color>}\n */\nconst specularColorBlended = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'SpecularColorBlended' );\n\n/**\n * TSL object that represents the shader variable `SpecularF90`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst specularF90 = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'SpecularF90' );\n\n/**\n * TSL object that represents the shader variable `Shininess`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst shininess = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Shininess' );\n\n/**\n * TSL object that represents the shader variable `Output`.\n *\n * @tsl\n * @type {PropertyNode<vec4>}\n */\nconst output = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'Output' );\n\n/**\n * TSL object that represents the shader variable `dashSize`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst dashSize = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'dashSize' );\n\n/**\n * TSL object that represents the shader variable `gapSize`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst gapSize = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'gapSize' );\n\n/**\n * TSL object that represents the shader variable `pointWidth`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst pointWidth = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'pointWidth' );\n\n/**\n * TSL object that represents the shader variable `IOR`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst ior = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IOR' );\n\n/**\n * TSL object that represents the shader variable `Transmission`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst transmission = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Transmission' );\n\n/**\n * TSL object that represents the shader variable `Thickness`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst thickness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Thickness' );\n\n/**\n * TSL object that represents the shader variable `AttenuationDistance`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst attenuationDistance = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'AttenuationDistance' );\n\n/**\n * TSL object that represents the shader variable `AttenuationColor`.\n *\n * @tsl\n * @type {PropertyNode<color>}\n */\nconst attenuationColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'AttenuationColor' );\n\n/**\n * TSL object that represents the shader variable `Dispersion`.\n *\n * @tsl\n * @type {PropertyNode<float>}\n */\nconst dispersion = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Dispersion' );\n\n/**\n * This node can be used to group single instances of {@link UniformNode}\n * and manage them as a uniform buffer.\n *\n * In most cases, the predefined nodes `objectGroup`, `renderGroup` and `frameGroup`\n * will be used when defining the {@link UniformNode#groupNode} property.\n *\n * - `objectGroup`: Uniform buffer per object.\n * - `renderGroup`: Shared uniform buffer, updated once per render call.\n * - `frameGroup`: Shared uniform buffer, updated once per frame.\n *\n * @augments Node\n */\nclass UniformGroupNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'UniformGroupNode';\n\n\t}\n\n\t/**\n\t * Constructs a new uniform group node.\n\t *\n\t * @param {string} name - The name of the uniform group node.\n\t * @param {boolean} [shared=false] - Whether this uniform group node is shared or not.\n\t * @param {number} [order=1] - Influences the internal sorting.\n\t * @param {string|null} [updateType=null] - The update type of the uniform group node.\n\t */\n\tconstructor( name, shared = false, order = 1, updateType = null ) {\n\n\t\tsuper( 'string' );\n\n\t\t/**\n\t\t * The name of the uniform group node.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * Whether this uniform group node is shared or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.shared = shared;\n\n\t\t/**\n\t\t * Influences the internal sorting.\n\t\t * TODO: Add details when this property should be changed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.order = order;\n\n\t\t/**\n\t\t * The update type of the uniform group node.\n\t\t *\n\t\t * @type {string|null}\n\t\t * @default null\n\t\t */\n\t\tthis.updateType = updateType;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isUniformGroup = true;\n\n\t}\n\n\t/**\n\t * Marks the uniform group node as needing an update.\n\t * This will trigger the necessary updates in the rendering process.\n\t */\n\tupdate() {\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\t/**\n\t * Serializes the uniform group node to a JSON object.\n\t *\n\t * @param {Object} data - The object to store the serialized data.\n\t */\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.name = this.name;\n\t\tdata.version = this.version;\n\t\tdata.shared = this.shared;\n\n\t}\n\n\t/**\n\t * Deserializes the uniform group node from a JSON object.\n\t *\n\t * @param {Object} data - The object containing the serialized data.\n\t */\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.name = data.name;\n\t\tthis.version = data.version;\n\t\tthis.shared = data.shared;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a uniform group node with the given name.\n *\n * @tsl\n * @function\n * @param {string} name - The name of the uniform group node.\n * @returns {UniformGroupNode}\n */\nconst uniformGroup = ( name, order = 1, updateType = null ) => new UniformGroupNode( name, false, order, updateType );\n\n/**\n * TSL function for creating a shared uniform group node with the given name and order.\n *\n * @tsl\n * @function\n * @param {string} name - The name of the uniform group node.\n * @param {number} [order=0] - Influences the internal sorting.\n * @returns {UniformGroupNode}\n */\nconst sharedUniformGroup = ( name, order = 0, updateType = null ) => new UniformGroupNode( name, true, order, updateType );\n\n/**\n * TSL object that represents a shared uniform group node which is updated once per frame.\n *\n * @tsl\n * @type {UniformGroupNode}\n */\nconst frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame', 0, NodeUpdateType.FRAME );\n\n/**\n * TSL object that represents a shared uniform group node which is updated once per render.\n *\n * @tsl\n * @type {UniformGroupNode}\n */\nconst renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render', 0, NodeUpdateType.RENDER );\n\n/**\n * TSL object that represents a uniform group node which is updated once per object.\n *\n * @tsl\n * @type {UniformGroupNode}\n */\nconst objectGroup = /*@__PURE__*/ uniformGroup( 'object', 1, NodeUpdateType.OBJECT );\n\n/**\n * Class for representing a uniform.\n *\n * @augments InputNode\n */\nclass UniformNode extends InputNode {\n\n\tstatic get type() {\n\n\t\treturn 'UniformNode';\n\n\t}\n\n\t/**\n\t * Constructs a new uniform node.\n\t *\n\t * @param {any} value - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color, texture).\n\t * @param {?string} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.\n\t */\n\tconstructor( value, nodeType = null ) {\n\n\t\tsuper( value, nodeType );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isUniformNode = true;\n\n\t\t/**\n\t\t * The name or label of the uniform.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The uniform group of this uniform. By default, uniforms are\n\t\t * managed per object but they might belong to a shared group\n\t\t * which is updated per frame or render call.\n\t\t *\n\t\t * @type {UniformGroupNode}\n\t\t */\n\t\tthis.groupNode = objectGroup;\n\n\t}\n\n\t/**\n\t * Sets the {@link UniformNode#name} property.\n\t *\n\t * @param {string} name - The name of the uniform.\n\t * @return {UniformNode} A reference to this node.\n\t */\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the {@link UniformNode#name} property.\n\t *\n\t * @deprecated\n\t * @param {string} name - The name of the uniform.\n\t * @return {UniformNode} A reference to this node.\n\t */\n\tlabel( name ) {\n\n\t\twarn( 'TSL: \"label()\" has been deprecated. Use \"setName()\" instead.', new StackTrace() ); // @deprecated r179\n\n\t\treturn this.setName( name );\n\n\t}\n\n\t/**\n\t * Sets the {@link UniformNode#groupNode} property.\n\t *\n\t * @param {UniformGroupNode} group - The uniform group.\n\t * @return {UniformNode} A reference to this node.\n\t */\n\tsetGroup( group ) {\n\n\t\tthis.groupNode = group;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the {@link UniformNode#groupNode}.\n\t *\n\t * @return {UniformGroupNode} The uniform group.\n\t */\n\tgetGroup() {\n\n\t\treturn this.groupNode;\n\n\t}\n\n\t/**\n\t * By default, this method returns the result of {@link Node#getHash} but derived\n\t * classes might overwrite this method with a different implementation.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The uniform hash.\n\t */\n\tgetUniformHash( builder ) {\n\n\t\treturn this.getHash( builder );\n\n\t}\n\n\tonUpdate( callback, updateType ) {\n\n\t\tcallback = callback.bind( this );\n\n\t\treturn super.onUpdate( ( frame ) => {\n\n\t\t\tconst value = callback( frame, this );\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\tthis.value = value;\n\n\t\t\t}\n\n\t \t}, updateType );\n\n\t}\n\n\tgetInputType( builder ) {\n\n\t\tlet type = super.getInputType( builder );\n\n\t\tif ( type === 'bool' ) {\n\n\t\t\ttype = 'uint';\n\n\t\t}\n\n\t\treturn type;\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst type = this.getNodeType( builder );\n\n\t\tconst hash = this.getUniformHash( builder );\n\n\t\tlet sharedNode = builder.getNodeFromHash( hash );\n\n\t\tif ( sharedNode === undefined ) {\n\n\t\t\tbuilder.setHashNode( this, hash );\n\n\t\t\tsharedNode = this;\n\n\t\t}\n\n\t\tconst sharedNodeType = sharedNode.getInputType( builder );\n\n\t\tconst nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.nodeName );\n\t\tconst uniformName = builder.getPropertyName( nodeUniform );\n\n\t\tif ( builder.context.nodeName !== undefined ) delete builder.context.nodeName;\n\n\t\t//\n\n\t\tlet snippet = uniformName;\n\n\t\tif ( type === 'bool' ) {\n\n\t\t\t// cache to variable\n\n\t\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\t\tlet propertyName = nodeData.propertyName;\n\n\t\t\tif ( propertyName === undefined ) {\n\n\t\t\t\tconst nodeVar = builder.getVarFromNode( this, null, 'bool' );\n\t\t\t\tpropertyName = builder.getPropertyName( nodeVar );\n\n\t\t\t\tnodeData.propertyName = propertyName;\n\n\t\t\t\tsnippet = builder.format( uniformName, sharedNodeType, type );\n\n\t\t\t\tbuilder.addLineFlowCode( `${ propertyName } = ${ snippet }`, this );\n\n\t\t\t}\n\n\t\t\tsnippet = propertyName;\n\n\t\t}\n\n\t\treturn builder.format( snippet, type, output );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a uniform node.\n *\n * @tsl\n * @function\n * @param {any|string} value - The value of this uniform or your type. Usually a JS primitive or three.js object (vector, matrix, color, texture).\n * @param {string} [type] - The node type. If no explicit type is defined, the node tries to derive the type from its value.\n * @returns {UniformNode}\n */\nconst uniform = ( value, type ) => {\n\n\tconst nodeType = getConstNodeType( type || value );\n\n\tif ( nodeType === value ) {\n\n\t\t// if the value is a type but no having a value\n\n\t\tvalue = getValueFromType( nodeType );\n\n\t}\n\n\tif ( value && value.isNode === true ) {\n\n\t\tlet v = value.value;\n\n\t\tvalue.traverse( n => {\n\n\t\t\tif ( n.isConstNode === true ) {\n\n\t\t\t\tv = n.value;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tvalue = v;\n\n\t}\n\n\treturn new UniformNode( value, nodeType );\n\n};\n\n/**\n * ArrayNode represents a collection of nodes, typically created using the {@link array} function.\n * ```js\n * const colors = array( [\n * \tvec3( 1, 0, 0 ),\n * \tvec3( 0, 1, 0 ),\n * \tvec3( 0, 0, 1 )\n * ] );\n *\n * const redColor = tintColors.element( 0 );\n * ```\n *\n * @augments TempNode\n */\nclass ArrayNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'ArrayNode';\n\n\t}\n\n\t/**\n\t * Constructs a new array node.\n\t *\n\t * @param {?string} nodeType - The data type of the elements.\n\t * @param {number} count - Size of the array.\n\t * @param {?Array<Node>} [values=null] - Array default values.\n\t */\n\tconstructor( nodeType, count, values = null ) {\n\n\t\tsuper( nodeType );\n\n\t\t/**\n\t\t * Array size.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.count = count;\n\n\t\t/**\n\t\t * Array default values.\n\t\t *\n\t\t * @type {?Array<Node>}\n\t\t */\n\t\tthis.values = values;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isArrayNode = true;\n\n\t}\n\n\t/**\n\t * Returns the number of elements in the node array.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {number} The number of elements in the node array.\n\t */\n\tgetArrayCount( /*builder*/ ) {\n\n\t\treturn this.count;\n\n\t}\n\n\t/**\n\t * Returns the node's type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The type of the node.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tif ( this.nodeType === null ) {\n\n\t\t\treturn this.values[ 0 ].getNodeType( builder );\n\n\t\t}\n\n\t\treturn this.nodeType;\n\n\t}\n\n\t/**\n\t * Returns the node's type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The type of the node.\n\t */\n\tgetElementType( builder ) {\n\n\t\treturn this.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Returns the type of a member variable.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} name - The name of the member variable.\n\t * @return {string} The type of the member variable.\n\t */\n\tgetMemberType( builder, name ) {\n\n\t\tif ( this.nodeType === null ) {\n\n\t\t\treturn this.values[ 0 ].getMemberType( builder, name );\n\n\t\t}\n\n\t\treturn super.getMemberType( builder, name );\n\n\t}\n\n\t/**\n\t * This method builds the output node and returns the resulting array as a shader string.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The generated shader string.\n\t */\n\tgenerate( builder ) {\n\n\t\tconst type = this.getNodeType( builder );\n\n\t\treturn builder.generateArray( type, this.count, this.values );\n\n\t}\n\n}\n\n/**\n * TSL function for creating an array node.\n *\n * @tsl\n * @function\n * @param {string|Array<Node>} nodeTypeOrValues - A string representing the element type (e.g., 'vec3')\n * or an array containing the default values (e.g., [ vec3() ]).\n * @param {?number} [count] - Size of the array.\n * @returns {ArrayNode}\n */\nconst array = ( ...params ) => {\n\n\tlet node;\n\n\tif ( params.length === 1 ) {\n\n\t\tconst values = params[ 0 ];\n\n\t\tnode = new ArrayNode( null, values.length, values );\n\n\t} else {\n\n\t\tconst nodeType = params[ 0 ];\n\t\tconst count = params[ 1 ];\n\n\t\tnode = new ArrayNode( nodeType, count );\n\n\t}\n\n\treturn nodeObject( node );\n\n};\n\naddMethodChaining( 'toArray', ( node, count ) => array( Array( count ).fill( node ) ) );\n\n/**\n * These node represents an assign operation. Meaning a node is assigned\n * to another node.\n *\n * @augments TempNode\n */\nclass AssignNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'AssignNode';\n\n\t}\n\n\t/**\n\t * Constructs a new assign node.\n\t *\n\t * @param {Node} targetNode - The target node.\n\t * @param {Node} sourceNode - The source type.\n\t */\n\tconstructor( targetNode, sourceNode ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The target node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.targetNode = targetNode;\n\n\t\t/**\n\t\t * The source node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.sourceNode = sourceNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isAssignNode = true;\n\n\t}\n\n\t/**\n\t * Whether this node is used more than once in context of other nodes. This method\n\t * is overwritten since it always returns `false` (assigns are unique).\n\t *\n\t * @return {boolean} A flag that indicates if there is more than one dependency to other nodes. Always `false`.\n\t */\n\thasDependencies() {\n\n\t\treturn false;\n\n\t}\n\n\tgenerateNodeType( builder, output ) {\n\n\t\treturn output !== 'void' ? this.targetNode.getNodeType( builder ) : 'void';\n\n\t}\n\n\t/**\n\t * Whether a split is required when assigning source to target. This can happen when the component length of\n\t * target and source data type does not match.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {boolean} Whether a split is required when assigning source to target.\n\t */\n\tneedsSplitAssign( builder ) {\n\n\t\tconst { targetNode } = this;\n\n\t\tif ( builder.isAvailable( 'swizzleAssign' ) === false && targetNode.isSplitNode && targetNode.components.length > 1 ) {\n\n\t\t\tconst targetLength = builder.getTypeLength( targetNode.node.getNodeType( builder ) );\n\t\t\tconst assignDifferentVector = vectorComponents.join( '' ).slice( 0, targetLength ) !== targetNode.components;\n\n\t\t\treturn assignDifferentVector;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst { targetNode, sourceNode } = this;\n\n\t\tconst scope = targetNode.getScope();\n\n\t\tconst scopeData = builder.getDataFromNode( scope );\n\t\tscopeData.assign = true;\n\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tproperties.sourceNode = sourceNode;\n\t\tproperties.targetNode = targetNode.context( { assign: true } );\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst { targetNode, sourceNode } = builder.getNodeProperties( this );\n\n\t\tconst needsSplitAssign = this.needsSplitAssign( builder );\n\n\t\tconst target = targetNode.build( builder );\n\t\tconst targetType = targetNode.getNodeType( builder );\n\n\t\tconst source = sourceNode.build( builder, targetType );\n\t\tconst sourceType = sourceNode.getNodeType( builder );\n\n\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\t//\n\n\t\tlet snippet;\n\n\t\tif ( nodeData.initialized === true ) {\n\n\t\t\tif ( output !== 'void' ) {\n\n\t\t\t\tsnippet = target;\n\n\t\t\t}\n\n\t\t} else if ( needsSplitAssign ) {\n\n\t\t\tconst sourceVar = builder.getVarFromNode( this, null, targetType );\n\t\t\tconst sourceProperty = builder.getPropertyName( sourceVar );\n\n\t\t\tbuilder.addLineFlowCode( `${ sourceProperty } = ${ source }`, this );\n\n\t\t\tconst splitNode = targetNode.node;\n\t\t\tconst splitTargetNode = splitNode.node.context( { assign: true } );\n\n\t\t\tconst targetRoot = splitTargetNode.build( builder );\n\n\t\t\tfor ( let i = 0; i < splitNode.components.length; i ++ ) {\n\n\t\t\t\tconst component = splitNode.components[ i ];\n\n\t\t\t\tbuilder.addLineFlowCode( `${ targetRoot }.${ component } = ${ sourceProperty }[ ${ i } ]`, this );\n\n\t\t\t}\n\n\t\t\tif ( output !== 'void' ) {\n\n\t\t\t\tsnippet = target;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tsnippet = `${ target } = ${ source }`;\n\n\t\t\tif ( output === 'void' || sourceType === 'void' ) {\n\n\t\t\t\tbuilder.addLineFlowCode( snippet, this );\n\n\t\t\t\tif ( output !== 'void' ) {\n\n\t\t\t\t\tsnippet = target;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tnodeData.initialized = true;\n\n\t\treturn builder.format( snippet, targetType, output );\n\n\t}\n\n}\n\n/**\n * TSL function for creating an assign node.\n *\n * @tsl\n * @function\n * @param {Node} targetNode - The target node.\n * @param {Node} sourceNode - The source type.\n * @returns {AssignNode}\n */\nconst assign = /*@__PURE__*/ nodeProxy( AssignNode ).setParameterLength( 2 );\n\naddMethodChaining( 'assign', assign );\n\n/**\n * This module represents the call of a {@link FunctionNode}. Developers are usually not confronted\n * with this module since they use the predefined TSL syntax `wgslFn` and `glslFn` which encapsulate\n * this logic.\n *\n * @augments TempNode\n */\nclass FunctionCallNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'FunctionCallNode';\n\n\t}\n\n\t/**\n\t * Constructs a new function call node.\n\t *\n\t * @param {?FunctionNode} functionNode - The function node.\n\t * @param {Object<string, Node>} [parameters={}] - The parameters for the function call.\n\t */\n\tconstructor( functionNode = null, parameters = {} ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The function node.\n\t\t *\n\t\t * @type {?FunctionNode}\n\t\t * @default null\n\t\t */\n\t\tthis.functionNode = functionNode;\n\n\t\t/**\n\t\t * The parameters of the function call.\n\t\t *\n\t\t * @type {Object<string, Node>}\n\t\t * @default {}\n\t\t */\n\t\tthis.parameters = parameters;\n\n\t}\n\n\t/**\n\t * Sets the parameters of the function call node.\n\t *\n\t * @param {Object<string, Node>} parameters - The parameters to set.\n\t * @return {FunctionCallNode} A reference to this node.\n\t */\n\tsetParameters( parameters ) {\n\n\t\tthis.parameters = parameters;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the parameters of the function call node.\n\t *\n\t * @return {Object<string, Node>} The parameters of this node.\n\t */\n\tgetParameters() {\n\n\t\treturn this.parameters;\n\n\t}\n\n\t/**\n\t * Returns the type of this function call node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @returns {string} The type of this node.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.functionNode.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Returns the function node of this function call node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} [name] - The name of the member.\n\t * @returns {string} The type of the member.\n\t */\n\tgetMemberType( builder, name ) {\n\n\t\treturn this.functionNode.getMemberType( builder, name );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst params = [];\n\n\t\tconst functionNode = this.functionNode;\n\n\t\tconst inputs = functionNode.getInputs( builder );\n\t\tconst parameters = this.parameters;\n\n\t\tconst generateInput = ( node, inputNode ) => {\n\n\t\t\tconst type = inputNode.type;\n\t\t\tconst pointer = type === 'pointer';\n\n\t\t\tlet output;\n\n\t\t\tif ( pointer ) output = '&' + node.build( builder );\n\t\t\telse output = node.build( builder, type );\n\n\t\t\treturn output;\n\n\t\t};\n\n\t\tif ( Array.isArray( parameters ) ) {\n\n\t\t\tif ( parameters.length > inputs.length ) {\n\n\t\t\t\terror( 'TSL: The number of provided parameters exceeds the expected number of inputs in \\'Fn()\\'.' );\n\n\t\t\t\tparameters.length = inputs.length;\n\n\t\t\t} else if ( parameters.length < inputs.length ) {\n\n\t\t\t\terror( 'TSL: The number of provided parameters is less than the expected number of inputs in \\'Fn()\\'.' );\n\n\t\t\t\twhile ( parameters.length < inputs.length ) {\n\n\t\t\t\t\tparameters.push( float( 0 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < parameters.length; i ++ ) {\n\n\t\t\t\tparams.push( generateInput( parameters[ i ], inputs[ i ] ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( const inputNode of inputs ) {\n\n\t\t\t\tconst node = parameters[ inputNode.name ];\n\n\t\t\t\tif ( node !== undefined ) {\n\n\t\t\t\t\tparams.push( generateInput( node, inputNode ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\terror( `TSL: Input '${ inputNode.name }' not found in \\'Fn()\\'.` );\n\n\t\t\t\t\tparams.push( generateInput( float( 0 ), inputNode ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst functionName = functionNode.build( builder, 'property' );\n\n\t\treturn `${ functionName }( ${ params.join( ', ' ) } )`;\n\n\t}\n\n}\n\nconst call = ( func, ...params ) => {\n\n\tparams = params.length > 1 || ( params[ 0 ] && params[ 0 ].isNode === true ) ? nodeArray( params ) : nodeObjects( params[ 0 ] );\n\n\treturn new FunctionCallNode( nodeObject( func ), params );\n\n};\n\naddMethodChaining( 'call', call );\n\nconst _vectorOperators = {\n\t'==': 'equal',\n\t'!=': 'notEqual',\n\t'<': 'lessThan',\n\t'>': 'greaterThan',\n\t'<=': 'lessThanEqual',\n\t'>=': 'greaterThanEqual',\n\t'%': 'mod'\n};\n\n/**\n * This node represents basic mathematical and logical operations like addition,\n * subtraction or comparisons (e.g. `equal()`).\n *\n * @augments TempNode\n */\nclass OperatorNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'OperatorNode';\n\n\t}\n\n\t/**\n\t * Constructs a new operator node.\n\t *\n\t * @param {string} op - The operator.\n\t * @param {Node} aNode - The first input.\n\t * @param {Node} bNode - The second input.\n\t * @param {...Node} params - Additional input parameters.\n\t */\n\tconstructor( op, aNode, bNode, ...params ) {\n\n\t\tsuper();\n\n\t\tif ( params.length > 0 ) {\n\n\t\t\tlet finalOp = new OperatorNode( op, aNode, bNode );\n\n\t\t\tfor ( let i = 0; i < params.length - 1; i ++ ) {\n\n\t\t\t\tfinalOp = new OperatorNode( op, finalOp, params[ i ] );\n\n\t\t\t}\n\n\t\t\taNode = finalOp;\n\t\t\tbNode = params[ params.length - 1 ];\n\n\t\t}\n\n\t\t/**\n\t\t * The operator.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.op = op;\n\n\t\t/**\n\t\t * The first input.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.aNode = aNode;\n\n\t\t/**\n\t\t * The second input.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.bNode = bNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isOperatorNode = true;\n\n\t}\n\n\t/**\n\t * Returns the operator method name.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} output - The output type.\n\t * @returns {string} The operator method name.\n\t */\n\tgetOperatorMethod( builder, output ) {\n\n\t\treturn builder.getMethod( _vectorOperators[ this.op ], output );\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from the operator\n\t * and the input node types.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {?string} [output=null] - The output type.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder, output = null ) {\n\n\t\tconst op = this.op;\n\n\t\tconst aNode = this.aNode;\n\t\tconst bNode = this.bNode;\n\n\t\tconst typeA = aNode.getNodeType( builder );\n\t\tconst typeB = bNode ? bNode.getNodeType( builder ) : null;\n\n\t\tif ( typeA === 'void' || typeB === 'void' ) {\n\n\t\t\treturn output || 'void';\n\n\t\t} else if ( op === '%' ) {\n\n\t\t\treturn typeA;\n\n\t\t} else if ( op === '~' || op === '&' || op === '|' || op === '^' || op === '>>' || op === '<<' ) {\n\n\t\t\treturn builder.getIntegerType( typeA );\n\n\t\t} else if ( op === '!' || op === '&&' || op === '||' || op === '^^' ) {\n\n\t\t\treturn 'bool';\n\n\t\t} else if ( op === '==' || op === '!=' || op === '<' || op === '>' || op === '<=' || op === '>=' ) {\n\n\t\t\tconst typeLength = Math.max( builder.getTypeLength( typeA ), builder.getTypeLength( typeB ) );\n\n\t\t\treturn typeLength > 1 ? `bvec${ typeLength }` : 'bool';\n\n\t\t} else {\n\n\t\t\t// Handle matrix operations\n\n\t\t\tif ( builder.isMatrix( typeA ) ) {\n\n\t\t\t\tif ( typeB === 'float' ) {\n\n\t\t\t\t\treturn typeA; // matrix * scalar = matrix\n\n\t\t\t\t} else if ( builder.isVector( typeB ) ) {\n\n\t\t\t\t\treturn builder.getVectorFromMatrix( typeA ); // matrix * vector\n\n\t\t\t\t} else if ( builder.isMatrix( typeB ) ) {\n\n\t\t\t\t\treturn typeA; // matrix * matrix\n\n\t\t\t\t}\n\n\t\t\t} else if ( builder.isMatrix( typeB ) ) {\n\n\t\t\t\tif ( typeA === 'float' ) {\n\n\t\t\t\t\treturn typeB; // scalar * matrix = matrix\n\n\t\t\t\t} else if ( builder.isVector( typeA ) ) {\n\n\t\t\t\t\treturn builder.getVectorFromMatrix( typeB ); // vector * matrix\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Handle non-matrix cases\n\n\t\t\tif ( builder.getTypeLength( typeB ) > builder.getTypeLength( typeA ) ) {\n\n\t\t\t\t// anytype x anytype: use the greater length vector\n\n\t\t\t\treturn typeB;\n\n\t\t\t}\n\n\t\t\treturn typeA;\n\n\t\t}\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst op = this.op;\n\n\t\tconst { aNode, bNode } = this;\n\n\t\tconst type = this.getNodeType( builder, output );\n\n\t\tlet typeA = null;\n\t\tlet typeB = null;\n\n\t\tif ( type !== 'void' ) {\n\n\t\t\ttypeA = aNode.getNodeType( builder );\n\t\t\ttypeB = bNode ? bNode.getNodeType( builder ) : null;\n\n\t\t\tif ( op === '<' || op === '>' || op === '<=' || op === '>=' || op === '==' || op === '!=' ) {\n\n\t\t\t\tif ( builder.isVector( typeA ) ) {\n\n\t\t\t\t\ttypeB = typeA;\n\n\t\t\t\t} else if ( builder.isVector( typeB ) ) {\n\n\t\t\t\t\ttypeA = typeB;\n\n\t\t\t\t} else if ( typeA !== typeB ) {\n\n\t\t\t\t\ttypeA = typeB = 'float';\n\n\t\t\t\t}\n\n\t\t\t} else if ( op === '>>' || op === '<<' ) {\n\n\t\t\t\ttypeA = type;\n\t\t\t\ttypeB = builder.changeComponentType( typeB, 'uint' );\n\n\t\t\t} else if ( op === '%' ) {\n\n\t\t\t\ttypeA = type;\n\t\t\t\ttypeB = builder.isInteger( typeA ) && builder.isInteger( typeB ) ? typeB : typeA;\n\n\t\t\t} else if ( builder.isMatrix( typeA ) ) {\n\n\t\t\t\tif ( typeB === 'float' ) {\n\n\t\t\t\t\t// Keep matrix type for typeA, but ensure typeB stays float\n\n\t\t\t\t\ttypeB = 'float';\n\n\t\t\t\t} else if ( builder.isVector( typeB ) ) {\n\n\t\t\t\t\t// matrix x vector\n\t\t\t\t\ttypeB = builder.getVectorFromMatrix( typeA );\n\n\t\t\t\t} else if ( builder.isMatrix( typeB ) ) ; else {\n\n\t\t\t\t\ttypeA = typeB = type;\n\n\t\t\t\t}\n\n\t\t\t} else if ( builder.isMatrix( typeB ) ) {\n\n\t\t\t\tif ( typeA === 'float' ) {\n\n\t\t\t\t\t// Keep matrix type for typeB, but ensure typeA stays float\n\n\t\t\t\t\ttypeA = 'float';\n\n\t\t\t\t} else if ( builder.isVector( typeA ) ) {\n\n\t\t\t\t\t// vector x matrix\n\n\t\t\t\t\ttypeA = builder.getVectorFromMatrix( typeB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttypeA = typeB = type;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// anytype x anytype\n\n\t\t\t\ttypeA = typeB = type;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\ttypeA = typeB = type;\n\n\t\t}\n\n\t\tconst a = aNode.build( builder, typeA );\n\t\tconst b = bNode ? bNode.build( builder, typeB ) : null;\n\n\t\tconst fnOpSnippet = builder.getFunctionOperator( op );\n\n\t\tif ( output !== 'void' ) {\n\n\t\t\tconst isGLSL = builder.renderer.coordinateSystem === WebGLCoordinateSystem;\n\n\t\t\tif ( op === '==' || op === '!=' || op === '<' || op === '>' || op === '<=' || op === '>=' ) {\n\n\t\t\t\tif ( isGLSL ) {\n\n\t\t\t\t\tif ( builder.isVector( typeA ) ) {\n\n\t\t\t\t\t\treturn builder.format( `${ this.getOperatorMethod( builder, output ) }( ${ a }, ${ b } )`, type, output );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\treturn builder.format( `( ${ a } ${ op } ${ b } )`, type, output );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// WGSL\n\n\t\t\t\t\treturn builder.format( `( ${ a } ${ op } ${ b } )`, type, output );\n\n\t\t\t\t}\n\n\t\t\t} else if ( op === '%' ) {\n\n\t\t\t\tif ( builder.isInteger( typeB ) ) {\n\n\t\t\t\t\treturn builder.format( `( ${ a } % ${ b } )`, type, output );\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn builder.format( `${ this.getOperatorMethod( builder, type ) }( ${ a }, ${ b } )`, type, output );\n\n\t\t\t\t}\n\n\t\t\t} else if ( op === '!' || op === '~' ) {\n\n\t\t\t\treturn builder.format( `(${op}${a})`, typeA, output );\n\n\t\t\t} else if ( fnOpSnippet ) {\n\n\t\t\t\treturn builder.format( `${ fnOpSnippet }( ${ a }, ${ b } )`, type, output );\n\n\t\t\t} else {\n\n\t\t\t\t// Handle matrix operations\n\n\t\t\t\tif ( builder.isMatrix( typeA ) && typeB === 'float' ) {\n\n\t\t\t\t\treturn builder.format( `( ${ b } ${ op } ${ a } )`, type, output );\n\n\t\t\t\t} else if ( typeA === 'float' && builder.isMatrix( typeB ) ) {\n\n\t\t\t\t\treturn builder.format( `${ a } ${ op } ${ b }`, type, output );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet snippet = `( ${ a } ${ op } ${ b } )`;\n\n\t\t\t\t\tif ( ! isGLSL && type === 'bool' && builder.isVector( typeA ) && builder.isVector( typeB ) ) {\n\n\t\t\t\t\t\tsnippet = `all${ snippet }`;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn builder.format( snippet, type, output );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( typeA !== 'void' ) {\n\n\t\t\tif ( fnOpSnippet ) {\n\n\t\t\t\treturn builder.format( `${ fnOpSnippet }( ${ a }, ${ b } )`, type, output );\n\n\t\t\t} else {\n\n\t\t\t\tif ( builder.isMatrix( typeA ) && typeB === 'float' ) {\n\n\t\t\t\t\treturn builder.format( `${ b } ${ op } ${ a }`, type, output );\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn builder.format( `${ a } ${ op } ${ b }`, type, output );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.op = this.op;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.op = data.op;\n\n\t}\n\n}\n\n/**\n * Returns the addition of two or more value.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @param {...Node} params - Additional input parameters.\n * @returns {OperatorNode}\n */\nconst add = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '+' ).setParameterLength( 2, Infinity ).setName( 'add' );\n\n/**\n * Returns the subtraction of two or more value.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @param {...Node} params - Additional input parameters.\n * @returns {OperatorNode}\n */\nconst sub = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '-' ).setParameterLength( 2, Infinity ).setName( 'sub' );\n\n/**\n * Returns the multiplication of two or more value.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @param {...Node} params - Additional input parameters.\n * @returns {OperatorNode}\n */\nconst mul = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '*' ).setParameterLength( 2, Infinity ).setName( 'mul' );\n\n/**\n * Returns the division of two or more value.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @param {...Node} params - Additional input parameters.\n * @returns {OperatorNode}\n */\nconst div = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '/' ).setParameterLength( 2, Infinity ).setName( 'div' );\n\n/**\n * Computes the remainder of dividing the first node by the second one.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst mod = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '%' ).setParameterLength( 2 ).setName( 'mod' );\n\n/**\n * Checks if two nodes are equal.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst equal = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '==' ).setParameterLength( 2 ).setName( 'equal' );\n\n/**\n * Checks if two nodes are not equal.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst notEqual = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '!=' ).setParameterLength( 2 ).setName( 'notEqual' );\n\n/**\n * Checks if the first node is less than the second.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst lessThan = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '<' ).setParameterLength( 2 ).setName( 'lessThan' );\n\n/**\n * Checks if the first node is greater than the second.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst greaterThan = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '>' ).setParameterLength( 2 ).setName( 'greaterThan' );\n\n/**\n * Checks if the first node is less than or equal to the second.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst lessThanEqual = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '<=' ).setParameterLength( 2 ).setName( 'lessThanEqual' );\n\n/**\n * Checks if the first node is greater than or equal to the second.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst greaterThanEqual = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '>=' ).setParameterLength( 2 ).setName( 'greaterThanEqual' );\n\n/**\n * Performs a logical AND operation on multiple nodes.\n *\n * @tsl\n * @function\n * @param {...Node} nodes - The input nodes to be combined using AND.\n * @returns {OperatorNode}\n */\nconst and = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '&&' ).setParameterLength( 2, Infinity ).setName( 'and' );\n\n/**\n * Performs a logical OR operation on multiple nodes.\n *\n * @tsl\n * @function\n * @param {...Node} nodes - The input nodes to be combined using OR.\n * @returns {OperatorNode}\n */\nconst or = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '||' ).setParameterLength( 2, Infinity ).setName( 'or' );\n\n/**\n * Performs logical NOT on a node.\n *\n * @tsl\n * @function\n * @param {Node} value - The value.\n * @returns {OperatorNode}\n */\nconst not = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '!' ).setParameterLength( 1 ).setName( 'not' );\n\n/**\n * Performs logical XOR on two nodes.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst xor = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '^^' ).setParameterLength( 2 ).setName( 'xor' );\n\n/**\n * Performs bitwise AND on two nodes.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst bitAnd = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '&' ).setParameterLength( 2 ).setName( 'bitAnd' );\n\n/**\n * Performs bitwise NOT on a node.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst bitNot = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '~' ).setParameterLength( 1 ).setName( 'bitNot' );\n\n/**\n * Performs bitwise OR on two nodes.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst bitOr = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '|' ).setParameterLength( 2 ).setName( 'bitOr' );\n\n/**\n * Performs bitwise XOR on two nodes.\n *\n * @tsl\n * @function\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst bitXor = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '^' ).setParameterLength( 2 ).setName( 'bitXor' );\n\n/**\n * Shifts a node to the left.\n *\n * @tsl\n * @function\n * @param {Node} a - The node to shift.\n * @param {Node} b - The value to shift.\n * @returns {OperatorNode}\n */\nconst shiftLeft = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '<<' ).setParameterLength( 2 ).setName( 'shiftLeft' );\n\n/**\n * Shifts a node to the right.\n *\n * @tsl\n * @function\n * @param {Node} a - The node to shift.\n * @param {Node} b - The value to shift.\n * @returns {OperatorNode}\n */\nconst shiftRight = /*@__PURE__*/ nodeProxyIntent( OperatorNode, '>>' ).setParameterLength( 2 ).setName( 'shiftRight' );\n\n/**\n * Increments a node by 1.\n *\n * @tsl\n * @function\n * @param {Node} a - The node to increment.\n * @returns {OperatorNode}\n */\nconst incrementBefore = Fn( ( [ a ] ) => {\n\n\ta.addAssign( 1 );\n\treturn a;\n\n} );\n\n/**\n * Decrements a node by 1.\n *\n * @tsl\n * @function\n * @param {Node} a - The node to decrement.\n * @returns {OperatorNode}\n */\nconst decrementBefore = Fn( ( [ a ] ) => {\n\n\ta.subAssign( 1 );\n\treturn a;\n\n} );\n\n/**\n * Increments a node by 1 and returns the previous value.\n *\n * @tsl\n * @function\n * @param {Node} a - The node to increment.\n * @returns {OperatorNode}\n */\nconst increment = /*@__PURE__*/ Fn( ( [ a ] ) => {\n\n\tconst temp = int( a ).toConst();\n\ta.addAssign( 1 );\n\treturn temp;\n\n} );\n\n/**\n * Decrements a node by 1 and returns the previous value.\n *\n * @tsl\n * @function\n * @param {Node} a - The node to decrement.\n * @returns {OperatorNode}\n */\nconst decrement = /*@__PURE__*/ Fn( ( [ a ] ) => {\n\n\tconst temp = int( a ).toConst();\n\ta.subAssign( 1 );\n\treturn temp;\n\n} );\n\naddMethodChaining( 'add', add );\naddMethodChaining( 'sub', sub );\naddMethodChaining( 'mul', mul );\naddMethodChaining( 'div', div );\naddMethodChaining( 'mod', mod );\naddMethodChaining( 'equal', equal );\naddMethodChaining( 'notEqual', notEqual );\naddMethodChaining( 'lessThan', lessThan );\naddMethodChaining( 'greaterThan', greaterThan );\naddMethodChaining( 'lessThanEqual', lessThanEqual );\naddMethodChaining( 'greaterThanEqual', greaterThanEqual );\naddMethodChaining( 'and', and );\naddMethodChaining( 'or', or );\naddMethodChaining( 'not', not );\naddMethodChaining( 'xor', xor );\naddMethodChaining( 'bitAnd', bitAnd );\naddMethodChaining( 'bitNot', bitNot );\naddMethodChaining( 'bitOr', bitOr );\naddMethodChaining( 'bitXor', bitXor );\naddMethodChaining( 'shiftLeft', shiftLeft );\naddMethodChaining( 'shiftRight', shiftRight );\n\naddMethodChaining( 'incrementBefore', incrementBefore );\naddMethodChaining( 'decrementBefore', decrementBefore );\naddMethodChaining( 'increment', increment );\naddMethodChaining( 'decrement', decrement );\n\n/**\n * @tsl\n * @function\n * @deprecated since r175. Use {@link mod} instead.\n *\n * @param {Node} a - The first input.\n * @param {Node} b - The second input.\n * @returns {OperatorNode}\n */\nconst modInt = ( a, b ) => { // @deprecated, r175\n\n\twarn( 'TSL: \"modInt()\" is deprecated. Use \"mod( int( ... ) )\" instead.', new StackTrace() );\n\treturn mod( int( a ), int( b ) );\n\n};\n\naddMethodChaining( 'modInt', modInt );\n\n/**\n * This node represents a variety of mathematical methods available in shaders.\n * They are divided into three categories:\n *\n * - Methods with one input like `sin`, `cos` or `normalize`.\n * - Methods with two inputs like `dot`, `cross` or `pow`.\n * - Methods with three inputs like `mix`, `clamp` or `smoothstep`.\n *\n * @augments TempNode\n */\nclass MathNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'MathNode';\n\n\t}\n\n\t/**\n\t * Constructs a new math node.\n\t *\n\t * @param {string} method - The method name.\n\t * @param {Node} aNode - The first input.\n\t * @param {?Node} [bNode=null] - The second input.\n\t * @param {?Node} [cNode=null] - The third input.\n\t */\n\tconstructor( method, aNode, bNode = null, cNode = null ) {\n\n\t\tsuper();\n\n\t\t// Allow the max() and min() functions to take an arbitrary number of arguments.\n\n\t\tif ( ( method === MathNode.MAX || method === MathNode.MIN ) && arguments.length > 3 ) {\n\n\t\t\tlet finalOp = new MathNode( method, aNode, bNode );\n\n\t\t\tfor ( let i = 2; i < arguments.length - 1; i ++ ) {\n\n\t\t\t\tfinalOp = new MathNode( method, finalOp, arguments[ i ] );\n\n\t\t\t}\n\n\t\t\taNode = finalOp;\n\t\t\tbNode = arguments[ arguments.length - 1 ];\n\t\t\tcNode = null;\n\n\t\t}\n\n\t\t/**\n\t\t * The method name.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.method = method;\n\n\t\t/**\n\t\t * The first input.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.aNode = aNode;\n\n\t\t/**\n\t\t * The second input.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.bNode = bNode;\n\n\t\t/**\n\t\t * The third input.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.cNode = cNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMathNode = true;\n\n\t}\n\n\t/**\n\t * The input type is inferred from the node types of the input nodes.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( builder ) {\n\n\t\tconst aType = this.aNode.getNodeType( builder );\n\t\tconst bType = this.bNode ? this.bNode.getNodeType( builder ) : null;\n\t\tconst cType = this.cNode ? this.cNode.getNodeType( builder ) : null;\n\n\t\tconst aLen = builder.isMatrix( aType ) ? 0 : builder.getTypeLength( aType );\n\t\tconst bLen = builder.isMatrix( bType ) ? 0 : builder.getTypeLength( bType );\n\t\tconst cLen = builder.isMatrix( cType ) ? 0 : builder.getTypeLength( cType );\n\n\t\tif ( aLen > bLen && aLen > cLen ) {\n\n\t\t\treturn aType;\n\n\t\t} else if ( bLen > cLen ) {\n\n\t\t\treturn bType;\n\n\t\t} else if ( cLen > aLen ) {\n\n\t\t\treturn cType;\n\n\t\t}\n\n\t\treturn aType;\n\n\t}\n\n\t/**\n\t * The selected method as well as the input type determine the node type of this node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tconst method = this.method;\n\n\t\tif ( method === MathNode.LENGTH || method === MathNode.DISTANCE || method === MathNode.DOT ) {\n\n\t\t\treturn 'float';\n\n\t\t} else if ( method === MathNode.CROSS ) {\n\n\t\t\treturn 'vec3';\n\n\t\t} else if ( method === MathNode.ALL || method === MathNode.ANY ) {\n\n\t\t\treturn 'bool';\n\n\t\t} else if ( method === MathNode.EQUALS ) {\n\n\t\t\treturn builder.changeComponentType( this.aNode.getNodeType( builder ), 'bool' );\n\n\t\t} else {\n\n\t\t\treturn this.getInputType( builder );\n\n\t\t}\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst { aNode, bNode, method } = this;\n\n\t\tlet outputNode = null;\n\n\t\tif ( method === MathNode.ONE_MINUS ) {\n\n\t\t\toutputNode = sub( 1.0, aNode );\n\n\t\t} else if ( method === MathNode.RECIPROCAL ) {\n\n\t\t\toutputNode = div( 1.0, aNode );\n\n\t\t} else if ( method === MathNode.DIFFERENCE ) {\n\n\t\t\toutputNode = abs( sub( aNode, bNode ) );\n\n\t\t} else if ( method === MathNode.TRANSFORM_DIRECTION ) {\n\n\t\t\t// dir can be either a direction vector or a normal vector\n\t\t\t// upper-left 3x3 of matrix is assumed to be orthogonal\n\n\t\t\tlet tA = aNode;\n\t\t\tlet tB = bNode;\n\n\t\t\tif ( builder.isMatrix( tA.getNodeType( builder ) ) ) {\n\n\t\t\t\ttB = vec4( vec3( tB ), 0.0 );\n\n\t\t\t} else {\n\n\t\t\t\ttA = vec4( vec3( tA ), 0.0 );\n\n\t\t\t}\n\n\t\t\tconst mulNode = mul( tA, tB ).xyz;\n\n\t\t\toutputNode = normalize( mulNode );\n\n\t\t}\n\n\t\tif ( outputNode !== null ) {\n\n\t\t\treturn outputNode;\n\n\t\t} else {\n\n\t\t\treturn super.setup( builder );\n\n\t\t}\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\n\t\tif ( properties.outputNode ) {\n\n\t\t\treturn super.generate( builder, output );\n\n\t\t}\n\n\t\tlet method = this.method;\n\n\t\tconst type = this.getNodeType( builder );\n\t\tconst inputType = this.getInputType( builder );\n\n\t\tconst a = this.aNode;\n\t\tconst b = this.bNode;\n\t\tconst c = this.cNode;\n\n\t\tconst coordinateSystem = builder.renderer.coordinateSystem;\n\n\t\tif ( method === MathNode.NEGATE ) {\n\n\t\t\treturn builder.format( '( - ' + a.build( builder, inputType ) + ' )', type, output );\n\n\t\t} else {\n\n\t\t\tconst params = [];\n\n\t\t\tif ( method === MathNode.CROSS ) {\n\n\t\t\t\tparams.push(\n\t\t\t\t\ta.build( builder, type ),\n\t\t\t\t\tb.build( builder, type )\n\t\t\t\t);\n\n\t\t\t} else if ( coordinateSystem === WebGLCoordinateSystem && method === MathNode.STEP ) {\n\n\t\t\t\tparams.push(\n\t\t\t\t\ta.build( builder, builder.getTypeLength( a.getNodeType( builder ) ) === 1 ? 'float' : inputType ),\n\t\t\t\t\tb.build( builder, inputType )\n\t\t\t\t);\n\n\t\t\t} else if ( coordinateSystem === WebGLCoordinateSystem && ( method === MathNode.MIN || method === MathNode.MAX ) ) {\n\n\t\t\t\tparams.push(\n\t\t\t\t\ta.build( builder, inputType ),\n\t\t\t\t\tb.build( builder, builder.getTypeLength( b.getNodeType( builder ) ) === 1 ? 'float' : inputType )\n\t\t\t\t);\n\n\t\t\t} else if ( method === MathNode.REFRACT ) {\n\n\t\t\t\tparams.push(\n\t\t\t\t\ta.build( builder, inputType ),\n\t\t\t\t\tb.build( builder, inputType ),\n\t\t\t\t\tc.build( builder, 'float' )\n\t\t\t\t);\n\n\t\t\t} else if ( method === MathNode.MIX ) {\n\n\t\t\t\tparams.push(\n\t\t\t\t\ta.build( builder, inputType ),\n\t\t\t\t\tb.build( builder, inputType ),\n\t\t\t\t\tc.build( builder, builder.getTypeLength( c.getNodeType( builder ) ) === 1 ? 'float' : inputType )\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tif ( coordinateSystem === WebGPUCoordinateSystem && method === MathNode.ATAN && b !== null ) {\n\n\t\t\t\t\tmethod = 'atan2';\n\n\t\t\t\t}\n\n\t\t\t\tif ( builder.shaderStage !== 'fragment' && ( method === MathNode.DFDX || method === MathNode.DFDY ) ) {\n\n\t\t\t\t\twarn( `TSL: '${ method }' is not supported in the ${ builder.shaderStage } stage.`, this.stackTrace );\n\n\t\t\t\t\tmethod = '/*' + method + '*/';\n\n\t\t\t\t}\n\n\t\t\t\tparams.push( a.build( builder, inputType ) );\n\t\t\t\tif ( b !== null ) params.push( b.build( builder, inputType ) );\n\t\t\t\tif ( c !== null ) params.push( c.build( builder, inputType ) );\n\n\t\t\t}\n\n\t\t\treturn builder.format( `${ builder.getMethod( method, type ) }( ${params.join( ', ' )} )`, type, output );\n\n\t\t}\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.method = this.method;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.method = data.method;\n\n\t}\n\n}\n\n// 1 input\n\nMathNode.ALL = 'all';\nMathNode.ANY = 'any';\n\nMathNode.RADIANS = 'radians';\nMathNode.DEGREES = 'degrees';\nMathNode.EXP = 'exp';\nMathNode.EXP2 = 'exp2';\nMathNode.LOG = 'log';\nMathNode.LOG2 = 'log2';\nMathNode.SQRT = 'sqrt';\nMathNode.INVERSE_SQRT = 'inversesqrt';\nMathNode.FLOOR = 'floor';\nMathNode.CEIL = 'ceil';\nMathNode.NORMALIZE = 'normalize';\nMathNode.FRACT = 'fract';\nMathNode.SIN = 'sin';\nMathNode.SINH = 'sinh';\nMathNode.COS = 'cos';\nMathNode.COSH = 'cosh';\nMathNode.TAN = 'tan';\nMathNode.TANH = 'tanh';\nMathNode.ASIN = 'asin';\nMathNode.ASINH = 'asinh';\nMathNode.ACOS = 'acos';\nMathNode.ACOSH = 'acosh';\nMathNode.ATAN = 'atan';\nMathNode.ATANH = 'atanh';\nMathNode.ABS = 'abs';\nMathNode.SIGN = 'sign';\nMathNode.LENGTH = 'length';\nMathNode.NEGATE = 'negate';\nMathNode.ONE_MINUS = 'oneMinus';\nMathNode.DFDX = 'dFdx';\nMathNode.DFDY = 'dFdy';\nMathNode.ROUND = 'round';\nMathNode.RECIPROCAL = 'reciprocal';\nMathNode.TRUNC = 'trunc';\nMathNode.FWIDTH = 'fwidth';\nMathNode.TRANSPOSE = 'transpose';\nMathNode.DETERMINANT = 'determinant';\nMathNode.INVERSE = 'inverse';\n\n// 2 inputs\n\nMathNode.EQUALS = 'equals';\nMathNode.MIN = 'min';\nMathNode.MAX = 'max';\nMathNode.STEP = 'step';\nMathNode.REFLECT = 'reflect';\nMathNode.DISTANCE = 'distance';\nMathNode.DIFFERENCE = 'difference';\nMathNode.DOT = 'dot';\nMathNode.CROSS = 'cross';\nMathNode.POW = 'pow';\nMathNode.TRANSFORM_DIRECTION = 'transformDirection';\n\n// 3 inputs\n\nMathNode.MIX = 'mix';\nMathNode.CLAMP = 'clamp';\nMathNode.REFRACT = 'refract';\nMathNode.SMOOTHSTEP = 'smoothstep';\nMathNode.FACEFORWARD = 'faceforward';\n\n// 1 inputs\n\n/**\n * A small value used to handle floating-point precision errors.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst EPSILON = /*@__PURE__*/ float( 1e-6 );\n\n/**\n * Represents infinity.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst INFINITY = /*@__PURE__*/ float( 1e6 );\n\n/**\n * Represents PI.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst PI = /*@__PURE__*/ float( Math.PI );\n\n/**\n * Represents PI * 2. Please use the non-deprecated version `TWO_PI`.\n *\n * @tsl\n * @deprecated\n * @type {Node<float>}\n */\nconst PI2 = /*@__PURE__*/ float( Math.PI * 2 ); // @deprecated r181\n\n/**\n * Represents PI * 2.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst TWO_PI = /*@__PURE__*/ float( Math.PI * 2 );\n\n/**\n * Represents PI / 2.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst HALF_PI = /*@__PURE__*/ float( Math.PI * 0.5 );\n\n/**\n * Returns `true` if all components of `x` are `true`.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node<bool>}\n */\nconst all = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ALL ).setParameterLength( 1 );\n\n/**\n * Returns `true` if any components of `x` are `true`.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node<bool>}\n */\nconst any = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ANY ).setParameterLength( 1 );\n\n/**\n * Converts a quantity in degrees to radians.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The input in degrees.\n * @returns {Node}\n */\nconst radians = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.RADIANS ).setParameterLength( 1 );\n\n/**\n * Convert a quantity in radians to degrees.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The input in radians.\n * @returns {Node}\n */\nconst degrees = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DEGREES ).setParameterLength( 1 );\n\n/**\n * Returns the natural exponentiation of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst exp = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.EXP ).setParameterLength( 1 );\n\n/**\n * Returns 2 raised to the power of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst exp2 = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.EXP2 ).setParameterLength( 1 );\n\n/**\n * Returns the natural logarithm of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst log = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.LOG ).setParameterLength( 1 );\n\n/**\n * Returns the base 2 logarithm of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst log2 = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.LOG2 ).setParameterLength( 1 );\n\n/**\n * Returns the square root of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst sqrt = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SQRT ).setParameterLength( 1 );\n\n/**\n * Returns the inverse of the square root of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst inverseSqrt = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.INVERSE_SQRT ).setParameterLength( 1 );\n\n/**\n * Finds the nearest integer less than or equal to the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst floor = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.FLOOR ).setParameterLength( 1 );\n\n/**\n * Finds the nearest integer that is greater than or equal to the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst ceil = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.CEIL ).setParameterLength( 1 );\n\n/**\n * Calculates the unit vector in the same direction as the original vector.\n *\n * @tsl\n * @function\n * @param {Node} x - The input vector.\n * @returns {Node}\n */\nconst normalize = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.NORMALIZE ).setParameterLength( 1 );\n\n/**\n * Computes the fractional part of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst fract = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.FRACT ).setParameterLength( 1 );\n\n/**\n * Returns the sine of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst sin = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SIN ).setParameterLength( 1 );\n\n/**\n * Returns the hyperbolic sine of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst sinh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SINH ).setParameterLength( 1 );\n\n/**\n * Returns the cosine of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst cos = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.COS ).setParameterLength( 1 );\n\n/**\n * Returns the hyperbolic cosine of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst cosh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.COSH ).setParameterLength( 1 );\n\n/**\n * Returns the tangent of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst tan = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TAN ).setParameterLength( 1 );\n\n/**\n * Returns the hyperbolic tangent of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst tanh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TANH ).setParameterLength( 1 );\n\n/**\n * Returns the arcsine of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst asin = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ASIN ).setParameterLength( 1 );\n\n/**\n * Returns the inverse hyperbolic sine of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst asinh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ASINH ).setParameterLength( 1 );\n\n/**\n * Returns the arccosine of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst acos = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ACOS ).setParameterLength( 1 );\n\n/**\n * Returns the inverse hyperbolic cosine of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst acosh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ACOSH ).setParameterLength( 1 );\n\n/**\n * Returns the arc-tangent of the parameter.\n * If two parameters are provided, the result is `atan2(y/x)`.\n *\n * @tsl\n * @function\n * @param {Node | number} y - The y parameter.\n * @param {?(Node | number)} x - The x parameter.\n * @returns {Node}\n */\nconst atan = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ATAN ).setParameterLength( 1, 2 );\n\n/**\n * Returns the inverse hyperbolic tangent of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst atanh = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ATANH ).setParameterLength( 1 );\n\n/**\n * Returns the absolute value of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst abs = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ABS ).setParameterLength( 1 );\n\n/**\n * Extracts the sign of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst sign = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SIGN ).setParameterLength( 1 );\n\n/**\n * Calculates the length of a vector.\n *\n * @tsl\n * @function\n * @param {Node} x - The parameter.\n * @returns {Node<float>}\n */\nconst length = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.LENGTH ).setParameterLength( 1 );\n\n/**\n * Negates the value of the parameter (-x).\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst negate = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.NEGATE ).setParameterLength( 1 );\n\n/**\n * Return `1` minus the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst oneMinus = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ONE_MINUS ).setParameterLength( 1 );\n\n/**\n * Returns the partial derivative of the parameter with respect to x.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst dFdx = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DFDX ).setParameterLength( 1 );\n\n/**\n * Returns the partial derivative of the parameter with respect to y.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst dFdy = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DFDY ).setParameterLength( 1 );\n\n/**\n * Rounds the parameter to the nearest integer.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst round = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.ROUND ).setParameterLength( 1 );\n\n/**\n * Returns the reciprocal of the parameter `(1/x)`.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst reciprocal = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.RECIPROCAL ).setParameterLength( 1 );\n\n/**\n * Truncates the parameter, removing the fractional part.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst trunc = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TRUNC ).setParameterLength( 1 );\n\n/**\n * Returns the sum of the absolute derivatives in x and y.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @returns {Node}\n */\nconst fwidth = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.FWIDTH ).setParameterLength( 1 );\n\n/**\n * Returns the transpose of a matrix.\n *\n * @tsl\n * @function\n * @param {Node<mat2|mat3|mat4>} x - The parameter.\n * @returns {Node}\n */\nconst transpose = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TRANSPOSE ).setParameterLength( 1 );\n\n/**\n * Returns the determinant of a matrix.\n *\n * @tsl\n * @function\n * @param {Node<mat2|mat3|mat4>} x - The parameter.\n * @returns {Node<float>}\n */\nconst determinant = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DETERMINANT ).setParameterLength( 1 );\n\n/**\n * Returns the inverse of a matrix.\n *\n * @tsl\n * @function\n * @param {Node<mat2|mat3|mat4>} x - The parameter.\n * @returns {Node<mat2|mat3|mat4>}\n */\nconst inverse = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.INVERSE ).setParameterLength( 1 );\n\n// 2 inputs\n\n/**\n * Returns the least of the given values.\n *\n * @tsl\n * @function\n * @param {...(Node | number)} values - The values to compare.\n * @returns {Node}\n */\nconst min$1 = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.MIN ).setParameterLength( 2, Infinity );\n\n/**\n * Returns the greatest of the given values.\n *\n * @tsl\n * @function\n * @param {...(Node | number)} values - The values to compare.\n * @returns {Node}\n */\nconst max$1 = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.MAX ).setParameterLength( 2, Infinity );\n\n/**\n * Generate a step function by comparing two values.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The y parameter.\n * @param {Node | number} y - The x parameter.\n * @returns {Node}\n */\nconst step = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.STEP ).setParameterLength( 2 );\n\n/**\n * Calculates the reflection direction for an incident vector.\n *\n * @tsl\n * @function\n * @param {Node<vec2|vec3|vec4>} I - The incident vector.\n * @param {Node<vec2|vec3|vec4>} N - The normal vector.\n * @returns {Node<vec2|vec3|vec4>}\n */\nconst reflect = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.REFLECT ).setParameterLength( 2 );\n\n/**\n * Calculates the distance between two points.\n *\n * @tsl\n * @function\n * @param {Node<vec2|vec3|vec4>} x - The first point.\n * @param {Node<vec2|vec3|vec4>} y - The second point.\n * @returns {Node<float>}\n */\nconst distance = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DISTANCE ).setParameterLength( 2 );\n\n/**\n * Calculates the absolute difference between two values.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The first parameter.\n * @param {Node | number} y - The second parameter.\n * @returns {Node}\n */\nconst difference = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DIFFERENCE ).setParameterLength( 2 );\n\n/**\n * Calculates the dot product of two vectors.\n *\n * @tsl\n * @function\n * @param {Node<vec2|vec3|vec4>} x - The first vector.\n * @param {Node<vec2|vec3|vec4>} y - The second vector.\n * @returns {Node<float>}\n */\nconst dot = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.DOT ).setParameterLength( 2 );\n\n/**\n * Calculates the cross product of two vectors.\n *\n * @tsl\n * @function\n * @param {Node<vec2|vec3>} x - The first vector.\n * @param {Node<vec2|vec3>} y - The second vector.\n * @returns {Node<float|vec3>}\n */\nconst cross = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.CROSS ).setParameterLength( 2 );\n\n/**\n * Return the value of the first parameter raised to the power of the second one.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The first parameter.\n * @param {Node | number} y - The second parameter.\n * @returns {Node}\n */\nconst pow = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.POW ).setParameterLength( 2 );\n\n/**\n * Returns the square of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The first parameter.\n * @returns {Node}\n */\nconst pow2 = ( x ) => mul( x, x );\n\n/**\n * Returns the cube of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The first parameter.\n * @returns {Node}\n */\nconst pow3 = ( x ) => mul( x, x, x );\n\n/**\n * Returns the fourth power of the parameter.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The first parameter.\n * @returns {Node}\n */\nconst pow4 = ( x ) => mul( x, x, x, x );\n\n/**\n * Transforms the direction of a vector by a matrix and then normalizes the result.\n *\n * @tsl\n * @function\n * @param {Node<vec2|vec3|vec4>} direction - The direction vector.\n * @param {Node<mat2|mat3|mat4>} matrix - The transformation matrix.\n * @returns {Node}\n */\nconst transformDirection = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TRANSFORM_DIRECTION ).setParameterLength( 2 );\n\n/**\n * Returns the cube root of a number.\n *\n * @tsl\n * @function\n * @param {Node | number} a - The first parameter.\n * @returns {Node}\n */\nconst cbrt = ( a ) => mul( sign( a ), pow( abs( a ), 1.0 / 3.0 ) );\n\n/**\n * Calculate the squared length of a vector.\n *\n * @tsl\n * @function\n * @param {Node<vec2|vec3|vec4>} a - The vector.\n * @returns {Node<float>}\n */\nconst lengthSq = ( a ) => dot( a, a );\n\n/**\n * Linearly interpolates between two values.\n *\n * @tsl\n * @function\n * @param {Node | number} a - The first parameter.\n * @param {Node | number} b - The second parameter.\n * @param {Node | number} t - The interpolation value.\n * @returns {Node}\n */\nconst mix = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.MIX ).setParameterLength( 3 );\n\n/**\n * Constrains a value to lie between two further values.\n *\n * @tsl\n * @function\n * @param {Node | number} value - The value to constrain.\n * @param {Node | number} [low=0] - The lower bound.\n * @param {Node | number} [high=1] - The upper bound.\n * @returns {Node}\n */\nconst clamp = ( value, low = 0, high = 1 ) => new MathNode( MathNode.CLAMP, nodeObject( value ), nodeObject( low ), nodeObject( high ) );\n\n/**\n * Constrains a value between `0` and `1`.\n *\n * @tsl\n * @function\n * @param {Node | number} value - The value to constrain.\n * @returns {Node}\n */\nconst saturate = ( value ) => clamp( value );\n\n/**\n * Calculates the refraction direction for an incident vector.\n *\n * @tsl\n * @function\n * @param {Node<vec2|vec3|vec4>} I - The incident vector.\n * @param {Node<vec2|vec3|vec4>} N - The normal vector.\n * @param {Node<float>} eta - The ratio of indices of refraction.\n * @returns {Node<vec2|vec3|vec4>}\n */\nconst refract = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.REFRACT ).setParameterLength( 3 );\n\n/**\n * Performs a Hermite interpolation between two values.\n *\n * @tsl\n * @function\n * @param {Node | number} low - The value of the lower edge of the Hermite function.\n * @param {Node | number} high - The value of the upper edge of the Hermite function.\n * @param {Node | number} x - The source value for interpolation.\n * @returns {Node}\n */\nconst smoothstep = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.SMOOTHSTEP ).setParameterLength( 3 );\n\n/**\n * Returns a vector pointing in the same direction as another.\n *\n * @tsl\n * @function\n * @param {Node<vec2|vec3|vec4>} N - The vector to orient.\n * @param {Node<vec2|vec3|vec4>} I - The incident vector.\n * @param {Node<vec2|vec3|vec4>} Nref - The reference vector.\n * @returns {Node<vec2|vec3|vec4>}\n */\nconst faceForward = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.FACEFORWARD ).setParameterLength( 3 );\n\n/**\n * Returns a random value for the given uv.\n *\n * @tsl\n * @function\n * @param {Node<vec2>} uv - The uv node.\n * @returns {Node<float>}\n */\nconst rand = /*@__PURE__*/ Fn( ( [ uv ] ) => {\n\n\tconst a = 12.9898, b = 78.233, c = 43758.5453;\n\tconst dt = dot( uv.xy, vec2( a, b ) ), sn = mod( dt, PI );\n\n\treturn fract( sin( sn ).mul( c ) );\n\n} );\n\n/**\n * Alias for `mix()` with a different parameter order.\n *\n * @tsl\n * @function\n * @param {Node | number} t - The interpolation value.\n * @param {Node | number} e1 - The first parameter.\n * @param {Node | number} e2 - The second parameter.\n * @returns {Node}\n */\nconst mixElement = ( t, e1, e2 ) => mix( e1, e2, t );\n\n/**\n * Alias for `smoothstep()` with a different parameter order.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The source value for interpolation.\n * @param {Node | number} low - The value of the lower edge of the Hermite function.\n * @param {Node | number} high - The value of the upper edge of the Hermite function.\n * @returns {Node}\n */\nconst smoothstepElement = ( x, low, high ) => smoothstep( low, high, x );\n\n/**\n * Alias for `step()` with a different parameter order.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The source value for interpolation.\n * @param {Node | number} edge - The edge value.\n * @returns {Node}\n */\nconst stepElement = ( x, edge ) => step( edge, x );\n\n// GLSL alias function\n\nconst faceforward = faceForward;\nconst inversesqrt = inverseSqrt;\n\n// Method chaining\n\naddMethodChaining( 'all', all );\naddMethodChaining( 'any', any );\n\naddMethodChaining( 'radians', radians );\naddMethodChaining( 'degrees', degrees );\naddMethodChaining( 'exp', exp );\naddMethodChaining( 'exp2', exp2 );\naddMethodChaining( 'log', log );\naddMethodChaining( 'log2', log2 );\naddMethodChaining( 'sqrt', sqrt );\naddMethodChaining( 'inverseSqrt', inverseSqrt );\naddMethodChaining( 'floor', floor );\naddMethodChaining( 'ceil', ceil );\naddMethodChaining( 'normalize', normalize );\naddMethodChaining( 'fract', fract );\naddMethodChaining( 'sin', sin );\naddMethodChaining( 'sinh', sinh );\naddMethodChaining( 'cos', cos );\naddMethodChaining( 'cosh', cosh );\naddMethodChaining( 'tan', tan );\naddMethodChaining( 'tanh', tanh );\naddMethodChaining( 'asin', asin );\naddMethodChaining( 'asinh', asinh );\naddMethodChaining( 'acos', acos );\naddMethodChaining( 'acosh', acosh );\naddMethodChaining( 'atan', atan );\naddMethodChaining( 'atanh', atanh );\naddMethodChaining( 'abs', abs );\naddMethodChaining( 'sign', sign );\naddMethodChaining( 'length', length );\naddMethodChaining( 'lengthSq', lengthSq );\naddMethodChaining( 'negate', negate );\naddMethodChaining( 'oneMinus', oneMinus );\naddMethodChaining( 'dFdx', dFdx );\naddMethodChaining( 'dFdy', dFdy );\naddMethodChaining( 'round', round );\naddMethodChaining( 'reciprocal', reciprocal );\naddMethodChaining( 'trunc', trunc );\naddMethodChaining( 'fwidth', fwidth );\naddMethodChaining( 'min', min$1 );\naddMethodChaining( 'max', max$1 );\naddMethodChaining( 'step', stepElement );\naddMethodChaining( 'reflect', reflect );\naddMethodChaining( 'distance', distance );\naddMethodChaining( 'dot', dot );\naddMethodChaining( 'cross', cross );\naddMethodChaining( 'pow', pow );\naddMethodChaining( 'pow2', pow2 );\naddMethodChaining( 'pow3', pow3 );\naddMethodChaining( 'pow4', pow4 );\naddMethodChaining( 'transformDirection', transformDirection );\naddMethodChaining( 'mix', mixElement );\naddMethodChaining( 'clamp', clamp );\naddMethodChaining( 'refract', refract );\naddMethodChaining( 'smoothstep', smoothstepElement );\naddMethodChaining( 'faceForward', faceForward );\naddMethodChaining( 'difference', difference );\naddMethodChaining( 'saturate', saturate );\naddMethodChaining( 'cbrt', cbrt );\naddMethodChaining( 'transpose', transpose );\naddMethodChaining( 'determinant', determinant );\naddMethodChaining( 'inverse', inverse );\naddMethodChaining( 'rand', rand );\n\n/**\n * Represents a logical `if/else` statement. Can be used as an alternative\n * to the `If()`/`Else()` syntax.\n *\n * The corresponding TSL `select()` looks like so:\n * ```js\n * velocity = position.greaterThanEqual( limit ).select( velocity.negate(), velocity );\n * ```\n * The `select()` method is called in a chaining fashion on a condition. The parameter nodes of `select()`\n * determine the outcome of the entire statement.\n *\n * @augments Node\n */\nclass ConditionalNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ConditionalNode';\n\n\t}\n\n\t/**\n\t * Constructs a new conditional node.\n\t *\n\t * @param {Node} condNode - The node that defines the condition.\n\t * @param {Node} ifNode - The node that is evaluate when the condition ends up `true`.\n\t * @param {?Node} [elseNode=null] - The node that is evaluate when the condition ends up `false`.\n\t */\n\tconstructor( condNode, ifNode, elseNode = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node that defines the condition.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.condNode = condNode;\n\n\t\t/**\n\t\t * The node that is evaluate when the condition ends up `true`.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.ifNode = ifNode;\n\n\t\t/**\n\t\t * The node that is evaluate when the condition ends up `false`.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.elseNode = elseNode;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from the if/else\n\t * nodes.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tconst { ifNode, elseNode } = builder.getNodeProperties( this );\n\n\t\tif ( ifNode === undefined ) {\n\n\t\t\t// fallback setup\n\n\t\t\tbuilder.flowBuildStage( this, 'setup' );\n\n\t\t\treturn this.getNodeType( builder );\n\n\t\t}\n\n\t\tconst ifType = ifNode.getNodeType( builder );\n\n\t\tif ( elseNode !== null ) {\n\n\t\t\tconst elseType = elseNode.getNodeType( builder );\n\n\t\t\tif ( builder.getTypeLength( elseType ) > builder.getTypeLength( ifType ) ) {\n\n\t\t\t\treturn elseType;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn ifType;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst condNode = this.condNode;\n\t\tconst ifNode = this.ifNode.isolate();\n\t\tconst elseNode = this.elseNode ? this.elseNode.isolate() : null;\n\n\t\t//\n\n\t\tconst currentNodeBlock = builder.context.nodeBlock;\n\n\t\tbuilder.getDataFromNode( ifNode ).parentNodeBlock = currentNodeBlock;\n\t\tif ( elseNode !== null ) builder.getDataFromNode( elseNode ).parentNodeBlock = currentNodeBlock;\n\n\t\t//\n\n\t\tconst isUniformFlow = builder.context.uniformFlow;\n\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tproperties.condNode = condNode;\n\t\tproperties.ifNode = isUniformFlow ? ifNode : ifNode.context( { nodeBlock: ifNode } );\n\t\tproperties.elseNode = elseNode ? ( isUniformFlow ? elseNode : elseNode.context( { nodeBlock: elseNode } ) ) : null;\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst type = this.getNodeType( builder );\n\n\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\tif ( nodeData.nodeProperty !== undefined ) {\n\n\t\t\treturn nodeData.nodeProperty;\n\n\t\t}\n\n\t\tconst { condNode, ifNode, elseNode } = builder.getNodeProperties( this );\n\n\t\tconst functionNode = builder.currentFunctionNode;\n\t\tconst needsOutput = output !== 'void';\n\t\tconst nodeProperty = needsOutput ? property( type ).build( builder ) : '';\n\n\t\tnodeData.nodeProperty = nodeProperty;\n\n\t\tconst nodeSnippet = condNode.build( builder, 'bool' );\n\t\tconst isUniformFlow = builder.context.uniformFlow;\n\n\t\tif ( isUniformFlow && elseNode !== null ) {\n\n\t\t\tconst ifSnippet = ifNode.build( builder, type );\n\t\t\tconst elseSnippet = elseNode.build( builder, type );\n\n\t\t\tconst mathSnippet = builder.getTernary( nodeSnippet, ifSnippet, elseSnippet );\n\n\t\t\t// TODO: If node property already exists return something else\n\n\t\t\treturn builder.format( mathSnippet, type, output );\n\n\t\t}\n\n\t\tbuilder.addFlowCode( `\\n${ builder.tab }if ( ${ nodeSnippet } ) {\\n\\n` ).addFlowTab();\n\n\t\tlet ifSnippet = ifNode.build( builder, type );\n\n\t\tif ( ifSnippet ) {\n\n\t\t\tif ( needsOutput ) {\n\n\t\t\t\tifSnippet = nodeProperty + ' = ' + ifSnippet + ';';\n\n\t\t\t} else {\n\n\t\t\t\tifSnippet = 'return ' + ifSnippet + ';';\n\n\t\t\t\tif ( functionNode === null ) {\n\n\t\t\t\t\twarn( 'TSL: Return statement used in an inline \\'Fn()\\'. Define a layout struct to allow return values.', this.stackTrace );\n\n\t\t\t\t\tifSnippet = '// ' + ifSnippet;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tbuilder.removeFlowTab().addFlowCode( builder.tab + '\\t' + ifSnippet + '\\n\\n' + builder.tab + '}' );\n\n\t\tif ( elseNode !== null ) {\n\n\t\t\tbuilder.addFlowCode( ' else {\\n\\n' ).addFlowTab();\n\n\t\t\tlet elseSnippet = elseNode.build( builder, type );\n\n\t\t\tif ( elseSnippet ) {\n\n\t\t\t\tif ( needsOutput ) {\n\n\t\t\t\t\telseSnippet = nodeProperty + ' = ' + elseSnippet + ';';\n\n\t\t\t\t} else {\n\n\t\t\t\t\telseSnippet = 'return ' + elseSnippet + ';';\n\n\t\t\t\t\tif ( functionNode === null ) {\n\n\t\t\t\t\t\twarn( 'TSL: Return statement used in an inline \\'Fn()\\'. Define a layout struct to allow return values.', this.stackTrace );\n\n\t\t\t\t\t\telseSnippet = '// ' + elseSnippet;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbuilder.removeFlowTab().addFlowCode( builder.tab + '\\t' + elseSnippet + '\\n\\n' + builder.tab + '}\\n\\n' );\n\n\t\t} else {\n\n\t\t\tbuilder.addFlowCode( '\\n\\n' );\n\n\t\t}\n\n\t\treturn builder.format( nodeProperty, type, output );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a conditional node.\n *\n * @tsl\n * @function\n * @param {Node} condNode - The node that defines the condition.\n * @param {Node} ifNode - The node that is evaluate when the condition ends up `true`.\n * @param {?Node} [elseNode=null] - The node that is evaluate when the condition ends up `false`.\n * @returns {ConditionalNode}\n */\nconst select = /*@__PURE__*/ nodeProxy( ConditionalNode ).setParameterLength( 2, 3 );\n\naddMethodChaining( 'select', select );\n\n/**\n * This node can be used as a context management component for another node.\n * {@link NodeBuilder} performs its node building process in a specific context and\n * this node allows the modify the context. A typical use case is to overwrite `getUV()` e.g.:\n *\n * ```js\n *node.context( { getUV: () => customCoord } );\n *\\// or\n *material.contextNode = context( { getUV: () => customCoord } );\n *\\// or\n *renderer.contextNode = context( { getUV: () => customCoord } );\n *\\// or\n *scenePass.contextNode = context( { getUV: () => customCoord } );\n *```\n * @augments Node\n */\nclass ContextNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ContextNode';\n\n\t}\n\n\t/**\n\t * Constructs a new context node.\n\t *\n\t * @param {Node} node - The node whose context should be modified.\n\t * @param {Object} [value={}] - The modified context data.\n\t */\n\tconstructor( node = null, value = {} ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isContextNode = true;\n\n\t\t/**\n\t\t * The node whose context should be modified.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.node = node;\n\n\t\t/**\n\t\t * The modified context data.\n\t\t *\n\t\t * @type {Object}\n\t\t * @default {}\n\t\t */\n\t\tthis.value = value;\n\n\t}\n\n\t/**\n\t * This method is overwritten to ensure it returns the reference to {@link ContextNode#node}.\n\t *\n\t * @return {Node} A reference to {@link ContextNode#node}.\n\t */\n\tgetScope() {\n\n\t\treturn this.node.getScope();\n\n\t}\n\n\t/**\n\t * This method is overwritten to ensure it returns the type of {@link ContextNode#node}.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.node.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Gathers the context data from all parent context nodes.\n\t *\n\t * @return {Object} The gathered context data.\n\t */\n\tgetFlowContextData() {\n\n\t\tconst children = [];\n\n\t\tthis.traverse( ( node ) => {\n\n\t\t\tif ( node.isContextNode === true ) {\n\n\t\t\t\tchildren.push( node.value );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn Object.assign( {}, ...children );\n\n\t}\n\n\t/**\n\t * This method is overwritten to ensure it returns the member type of {@link ContextNode#node}.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} name - The member name.\n\t * @returns {string} The member type.\n\t */\n\tgetMemberType( builder, name ) {\n\n\t\treturn this.node.getMemberType( builder, name );\n\n\t}\n\n\tanalyze( builder ) {\n\n\t\tconst previousContext = builder.addContext( this.value );\n\n\t\tthis.node.build( builder );\n\n\t\tbuilder.setContext( previousContext );\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst previousContext = builder.addContext( this.value );\n\n\t\tthis.node.build( builder );\n\n\t\tbuilder.setContext( previousContext );\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst previousContext = builder.addContext( this.value );\n\n\t\tconst snippet = this.node.build( builder, output );\n\n\t\tbuilder.setContext( previousContext );\n\n\t\treturn snippet;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a context node.\n *\n * @tsl\n * @function\n * @param {Node|Object} [nodeOrValue={}] - The node whose context should be modified or the modified context data.\n * @param {Object} [value={}] - The modified context data.\n * @returns {ContextNode}\n */\nconst context = ( nodeOrValue = null, value = {} ) => {\n\n\tlet node = nodeOrValue;\n\n\tif ( node === null || node.isNode !== true ) {\n\n\t\tvalue = node || value;\n\t\tnode = null;\n\n\t}\n\n\treturn new ContextNode( node, value );\n\n};\n\n/**\n * TSL function for defining a uniformFlow context value for a given node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node whose dependencies should all execute within a uniform control-flow path.\n * @returns {ContextNode}\n */\nconst uniformFlow = ( node ) => context( node, { uniformFlow: true } );\n\n/**\n * TSL function for defining a name for the context value for a given node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node whose context should be modified.\n * @param {string} name - The name to set.\n * @returns {ContextNode}\n */\nconst setName = ( node, name ) => context( node, { nodeName: name } );\n\n/**\n * TSL function for defining a built-in shadow context for a given node.\n *\n * @tsl\n * @function\n * @param {ShadowNode} shadowNode - The shadow node representing the light's shadow.\n * @param {Light} light - The light associated with the shadow.\n * @param {Node} [node=null] - The node whose context should be modified.\n * @returns {ContextNode}\n */\nfunction builtinShadowContext( shadowNode, light, node = null ) {\n\n\treturn context( node, {\n\n\t\tgetShadow: ( { light: shadowLight, shadowColorNode } ) => {\n\n\t\t\tif ( light === shadowLight ) {\n\n\t\t\t\treturn shadowColorNode.mul( shadowNode );\n\n\t\t\t}\n\n\t\t\treturn shadowColorNode;\n\n\t\t}\n\n\t} );\n\n}\n\n/**\n * TSL function for defining a built-in ambient occlusion context for a given node.\n *\n * @tsl\n * @function\n * @param {Node} aoNode - The ambient occlusion value node to apply.\n * @param {Node} [node=null] - The node whose context should be modified.\n * @returns {ContextNode}\n */\nfunction builtinAOContext( aoNode, node = null ) {\n\n\treturn context( node, {\n\n\t\tgetAO: ( inputNode, { material } ) => {\n\n\t\t\tif ( material.transparent === true ) return inputNode;\n\n\t\t\treturn inputNode !== null ? inputNode.mul( aoNode ) : aoNode;\n\n\t\t}\n\n\t} );\n\n}\n\n/**\n * TSL function for defining a label context value for a given node.\n *\n * @tsl\n * @function\n * @deprecated\n * @param {Node} node - The node whose context should be modified.\n * @param {string} name - The name/label to set.\n * @returns {ContextNode}\n */\nfunction label( node, name ) {\n\n\twarn( 'TSL: \"label()\" has been deprecated. Use \"setName()\" instead.' ); // @deprecated r179\n\n\treturn setName( node, name );\n\n}\n\naddMethodChaining( 'context', context );\naddMethodChaining( 'label', label );\naddMethodChaining( 'uniformFlow', uniformFlow );\naddMethodChaining( 'setName', setName );\naddMethodChaining( 'builtinShadowContext', ( node, shadowNode, light ) => builtinShadowContext( shadowNode, light, node ) );\naddMethodChaining( 'builtinAOContext', ( node, aoValue ) => builtinAOContext( aoValue, node ) );\n\n/**\n * Class for representing shader variables as nodes. Variables are created from\n * existing nodes like the following:\n *\n * ```js\n * const depth = sampleDepth( uvNode ).toVar( 'depth' );\n * ```\n *\n * @augments Node\n */\nclass VarNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'VarNode';\n\n\t}\n\n\t/**\n\t * Constructs a new variable node.\n\t *\n\t * @param {Node} node - The node for which a variable should be created.\n\t * @param {?string} [name=null] - The name of the variable in the shader.\n\t * @param {boolean} [readOnly=false] - The read-only flag.\n\t */\n\tconstructor( node, name = null, readOnly = false ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node for which a variable should be created.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.node = node;\n\n\t\t/**\n\t\t * The name of the variable in the shader. If no name is defined,\n\t\t * the node system auto-generates one.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * `VarNode` sets this property to `true` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isVarNode = true;\n\n\t\t/**\n\t\t *\n\t\t * The read-only flag.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.readOnly = readOnly;\n\n\t\t/**\n\t\t *\n\t\t * Add this flag to the node system to indicate that this node require parents.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.parents = true;\n\n\t\t/**\n\t\t * This flag is used to indicate that this node is used for intent.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.intent = false;\n\n\t}\n\n\t/**\n\t * Sets the intent flag for this node.\n\t *\n\t * This flag is used to indicate that this node is used for intent\n\t * and should not be built directly. Instead, it is used to indicate that\n\t * the node should be treated as a variable intent.\n\t *\n\t * It's useful for assigning variables without needing creating a new variable node.\n\t *\n\t * @param {boolean} value - The value to set for the intent flag.\n\t * @returns {VarNode} This node.\n\t */\n\tsetIntent( value ) {\n\n\t\tthis.intent = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Checks if this node is used for intent.\n\t *\n\t * @param {NodeBuilder} builder - The node builder.\n\t * @returns {boolean} Whether this node is used for intent.\n\t */\n\tisIntent( builder ) {\n\n\t\tconst data = builder.getDataFromNode( this );\n\n\t\tif ( data.forceDeclaration === true ) return false;\n\n\t\treturn this.intent;\n\n\t}\n\n\t/**\n\t * Returns the intent flag of this node.\n\t *\n\t * @return {boolean} The intent flag.\n\t */\n\tgetIntent() {\n\n\t\treturn this.intent;\n\n\t}\n\n\tgetMemberType( builder, name ) {\n\n\t\treturn this.node.getMemberType( builder, name );\n\n\t}\n\n\tgetElementType( builder ) {\n\n\t\treturn this.node.getElementType( builder );\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.node.getNodeType( builder );\n\n\t}\n\n\tgetArrayCount( builder ) {\n\n\t\treturn this.node.getArrayCount( builder );\n\n\t}\n\n\tisAssign( builder ) {\n\n\t\tconst data = builder.getDataFromNode( this );\n\n\t\treturn data.assign;\n\n\t}\n\n\tbuild( ...params ) {\n\n\t\tconst builder = params[ 0 ];\n\n\t\tif ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {\n\n\t\t\tif ( builder.context.nodeLoop || builder.context.nodeBlock ) {\n\n\t\t\t\tlet addBefore = false;\n\n\t\t\t\tif ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {\n\n\t\t\t\t\tif ( builder.fnCall && builder.fnCall.shaderNode ) {\n\n\t\t\t\t\t\tconst shaderNodeData = builder.getDataFromNode( this.node.shaderNode );\n\n\t\t\t\t\t\tif ( shaderNodeData.hasLoop ) {\n\n\t\t\t\t\t\t\tconst data = builder.getDataFromNode( this );\n\t\t\t\t\t\t\tdata.forceDeclaration = true;\n\n\t\t\t\t\t\t\taddBefore = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst baseStack = builder.getBaseStack();\n\n\t\t\t\tif ( addBefore ) {\n\n\t\t\t\t\tbaseStack.addToStackBefore( this );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbaseStack.addToStack( this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isIntent( builder ) ) {\n\n\t\t\tif ( this.isAssign( builder ) !== true ) {\n\n\t\t\t\treturn this.node.build( ...params );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn super.build( ...params );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst { node, name, readOnly } = this;\n\t\tconst { renderer } = builder;\n\n\t\tconst isWebGPUBackend = renderer.backend.isWebGPUBackend === true;\n\n\t\tlet isDeterministic = false;\n\t\tlet shouldTreatAsReadOnly = false;\n\n\t\tif ( readOnly ) {\n\n\t\t\tisDeterministic = builder.isDeterministic( node );\n\n\t\t\tshouldTreatAsReadOnly = isWebGPUBackend ? readOnly : isDeterministic;\n\n\t\t}\n\n\t\tconst nodeType = this.getNodeType( builder );\n\n\t\tif ( nodeType == 'void' ) {\n\n\t\t\tif ( this.isIntent( builder ) !== true ) {\n\n\t\t\t\terror( 'TSL: \".toVar()\" can not be used with void type.', this.stackTrace );\n\n\t\t\t}\n\n\t\t\tconst snippet = node.build( builder );\n\n\t\t\treturn snippet;\n\n\t\t}\n\n\t\tconst vectorType = builder.getVectorType( nodeType );\n\t\tconst snippet = node.build( builder, vectorType );\n\n\t\tconst nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, shouldTreatAsReadOnly );\n\n\t\tconst propertyName = builder.getPropertyName( nodeVar );\n\n\t\tlet declarationPrefix = propertyName;\n\n\t\tif ( shouldTreatAsReadOnly ) {\n\n\t\t\tif ( isWebGPUBackend ) {\n\n\t\t\t\tdeclarationPrefix = isDeterministic\n\t\t\t\t\t? `const ${ propertyName }`\n\t\t\t\t\t: `let ${ propertyName }`;\n\n\t\t\t} else {\n\n\t\t\t\tconst count = node.getArrayCount( builder );\n\n\t\t\t\tdeclarationPrefix = `const ${ builder.getVar( nodeVar.type, propertyName, count ) }`;\n\n\t\t\t}\n\n\t\t}\n\n\t\tbuilder.addLineFlowCode( `${ declarationPrefix } = ${ snippet }`, this );\n\n\t\treturn propertyName;\n\n\t}\n\n\t_hasStack( builder ) {\n\n\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\treturn nodeData.stack !== undefined;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a var node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node for which a variable should be created.\n * @param {?string} name - The name of the variable in the shader.\n * @returns {VarNode}\n */\nconst createVar = /*@__PURE__*/ nodeProxy( VarNode );\n\n/**\n * TSL function for creating a var node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node for which a variable should be created.\n * @param {?string} name - The name of the variable in the shader.\n * @returns {VarNode}\n */\nconst Var = ( node, name = null ) => createVar( node, name ).toStack();\n\n/**\n * TSL function for creating a const node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node for which a constant should be created.\n * @param {?string} name - The name of the constant in the shader.\n * @returns {VarNode}\n */\nconst Const = ( node, name = null ) => createVar( node, name, true ).toStack();\n\n//\n//\n\n/**\n * TSL function for creating a var intent node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node for which a variable should be created.\n * @param {?string} name - The name of the variable in the shader.\n * @returns {VarNode}\n */\nconst VarIntent = ( node ) => {\n\n\treturn createVar( node ).setIntent( true ).toStack();\n\n};\n\n// Method chaining\n\naddMethodChaining( 'toVar', Var );\naddMethodChaining( 'toConst', Const );\naddMethodChaining( 'toVarIntent', VarIntent );\n\n/**\n * This node is used to build a sub-build in the node system.\n *\n * @augments Node\n * @param {Node} node - The node to be built in the sub-build.\n * @param {string} name - The name of the sub-build.\n * @param {?string} [nodeType=null] - The type of the node, if known.\n */\nclass SubBuildNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'SubBuild';\n\n\t}\n\n\tconstructor( node, name, nodeType = null ) {\n\n\t\tsuper( nodeType );\n\n\t\t/**\n\t\t * The node to be built in the sub-build.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.node = node;\n\n\t\t/**\n\t\t * The name of the sub-build.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSubBuildNode = true;\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\tif ( this.nodeType !== null ) return this.nodeType;\n\n\t\tbuilder.addSubBuild( this.name );\n\n\t\tconst nodeType = this.node.getNodeType( builder );\n\n\t\tbuilder.removeSubBuild();\n\n\t\treturn nodeType;\n\n\t}\n\n\tbuild( builder, ...params ) {\n\n\t\tbuilder.addSubBuild( this.name );\n\n\t\tconst data = this.node.build( builder, ...params );\n\n\t\tbuilder.removeSubBuild();\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Creates a new sub-build node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node to be built in the sub-build.\n * @param {string} name - The name of the sub-build.\n * @param {?string} [type=null] - The type of the node, if known.\n * @returns {Node} A node object wrapping the SubBuildNode instance.\n */\nconst subBuild = ( node, name, type = null ) => new SubBuildNode( nodeObject( node ), name, type );\n\n/**\n * Class for representing shader varyings as nodes. Varyings are create from\n * existing nodes like the following:\n *\n * ```js\n * const positionLocal = positionGeometry.toVarying( 'vPositionLocal' );\n * ```\n *\n * @augments Node\n */\nclass VaryingNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'VaryingNode';\n\n\t}\n\n\t/**\n\t * Constructs a new varying node.\n\t *\n\t * @param {Node} node - The node for which a varying should be created.\n\t * @param {?string} name - The name of the varying in the shader.\n\t */\n\tconstructor( node, name = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node for which a varying should be created.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.node = subBuild( node, 'VERTEX' );\n\n\t\t/**\n\t\t * The name of the varying in the shader. If no name is defined,\n\t\t * the node system auto-generates one.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isVaryingNode = true;\n\n\t\t/**\n\t\t * The interpolation type of the varying data.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.interpolationType = null;\n\n\t\t/**\n\t\t * The interpolation sampling type of varying data.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.interpolationSampling = null;\n\n\t\t/**\n\t\t * This flag is used for global cache.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t}\n\n\t/**\n\t * Defines the interpolation type of the varying.\n\t *\n\t * @param {string} type - The interpolation type.\n\t * @param {?string} sampling - The interpolation sampling type\n\t * @return {VaryingNode} A reference to this node.\n\t */\n\tsetInterpolation( type, sampling = null ) {\n\n\t\tthis.interpolationType = type;\n\t\tthis.interpolationSampling = sampling;\n\n\t\treturn this;\n\n\t}\n\n\tgetHash( builder ) {\n\n\t\treturn this.name || super.getHash( builder );\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\t// VaryingNode is auto type\n\n\t\treturn this.node.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * This method performs the setup of a varying node with the current node builder.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {NodeVarying} The node varying from the node builder.\n\t */\n\tsetupVarying( builder ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\n\t\tlet varying = properties.varying;\n\n\t\tif ( varying === undefined ) {\n\n\t\t\tconst name = this.name;\n\t\t\tconst type = this.getNodeType( builder );\n\t\t\tconst interpolationType = this.interpolationType;\n\t\t\tconst interpolationSampling = this.interpolationSampling;\n\n\t\t\tproperties.varying = varying = builder.getVaryingFromNode( this, name, type, interpolationType, interpolationSampling );\n\t\t\tproperties.node = subBuild( this.node, 'VERTEX' );\n\n\t\t}\n\n\t\t// this property can be used to check if the varying can be optimized for a variable\n\t\tvarying.needsInterpolation || ( varying.needsInterpolation = ( builder.shaderStage === 'fragment' ) );\n\n\t\treturn varying;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tthis.setupVarying( builder );\n\n\t\tbuilder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );\n\n\t}\n\n\tanalyze( builder ) {\n\n\t\tthis.setupVarying( builder );\n\n\t\tbuilder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst propertyKey = builder.getSubBuildProperty( 'property', builder.currentStack );\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tconst varying = this.setupVarying( builder );\n\n\t\tif ( properties[ propertyKey ] === undefined ) {\n\n\t\t\tconst type = this.getNodeType( builder );\n\t\t\tconst propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );\n\n\t\t\t// force node run in vertex stage\n\t\t\tbuilder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, properties.node, type, propertyName );\n\n\t\t\tproperties[ propertyKey ] = propertyName;\n\n\t\t}\n\n\t\treturn builder.getPropertyName( varying );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a varying node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node for which a varying should be created.\n * @param {?string} name - The name of the varying in the shader.\n * @returns {VaryingNode}\n */\nconst varying = /*@__PURE__*/ nodeProxy( VaryingNode ).setParameterLength( 1, 2 );\n\n/**\n * Computes a node in the vertex stage.\n *\n * @tsl\n * @function\n * @param {Node} node - The node which should be executed in the vertex stage.\n * @returns {VaryingNode}\n */\nconst vertexStage = ( node ) => varying( node );\n\naddMethodChaining( 'toVarying', varying );\naddMethodChaining( 'toVertexStage', vertexStage );\n\n/**\n * Converts the given color value from sRGB to linear-sRGB color space.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The sRGB color.\n * @return {Node<vec3>} The linear-sRGB color.\n */\nconst sRGBTransferEOTF = /*@__PURE__*/ Fn( ( [ color ] ) => {\n\n\tconst a = color.mul( 0.9478672986 ).add( 0.0521327014 ).pow( 2.4 );\n\tconst b = color.mul( 0.0773993808 );\n\tconst factor = color.lessThanEqual( 0.04045 );\n\n\tconst rgbResult = mix( a, b, factor );\n\n\treturn rgbResult;\n\n} ).setLayout( {\n\tname: 'sRGBTransferEOTF',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'color', type: 'vec3' }\n\t]\n} );\n\n/**\n * Converts the given color value from linear-sRGB to sRGB color space.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The linear-sRGB color.\n * @return {Node<vec3>} The sRGB color.\n */\nconst sRGBTransferOETF = /*@__PURE__*/ Fn( ( [ color ] ) => {\n\n\tconst a = color.pow( 0.41666 ).mul( 1.055 ).sub( 0.055 );\n\tconst b = color.mul( 12.92 );\n\tconst factor = color.lessThanEqual( 0.0031308 );\n\n\tconst rgbResult = mix( a, b, factor );\n\n\treturn rgbResult;\n\n} ).setLayout( {\n\tname: 'sRGBTransferOETF',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'color', type: 'vec3' }\n\t]\n} );\n\nconst WORKING_COLOR_SPACE = 'WorkingColorSpace';\nconst OUTPUT_COLOR_SPACE = 'OutputColorSpace';\n\n/**\n * This node represents a color space conversion. Meaning it converts\n * a color value from a source to a target color space.\n *\n * @augments TempNode\n */\nclass ColorSpaceNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'ColorSpaceNode';\n\n\t}\n\n\t/**\n\t * Constructs a new color space node.\n\t *\n\t * @param {Node} colorNode - Represents the color to convert.\n\t * @param {string} source - The source color space.\n\t * @param {string} target - The target color space.\n\t */\n\tconstructor( colorNode, source, target ) {\n\n\t\tsuper( 'vec4' );\n\n\t\t/**\n\t\t * Represents the color to convert.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.colorNode = colorNode;\n\n\t\t/**\n\t\t * The source color space.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.source = source;\n\n\t\t/**\n\t\t * The target color space.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.target = target;\n\n\t}\n\n\t/**\n\t * This method resolves the constants `WORKING_COLOR_SPACE` and\n\t * `OUTPUT_COLOR_SPACE` based on the current configuration of the\n\t * color management and renderer.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} colorSpace - The color space to resolve.\n\t * @return {string} The resolved color space.\n\t */\n\tresolveColorSpace( builder, colorSpace ) {\n\n\t\tif ( colorSpace === WORKING_COLOR_SPACE ) {\n\n\t\t\treturn ColorManagement.workingColorSpace;\n\n\t\t} else if ( colorSpace === OUTPUT_COLOR_SPACE ) {\n\n\t\t\treturn builder.context.outputColorSpace || builder.renderer.outputColorSpace;\n\n\t\t}\n\n\t\treturn colorSpace;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst { colorNode } = this;\n\n\t\tconst source = this.resolveColorSpace( builder, this.source );\n\t\tconst target = this.resolveColorSpace( builder, this.target );\n\n\t\tlet outputNode = colorNode;\n\n\t\tif ( ColorManagement.enabled === false || source === target || ! source || ! target ) {\n\n\t\t\treturn outputNode;\n\n\t\t}\n\n\t\tif ( ColorManagement.getTransfer( source ) === SRGBTransfer ) {\n\n\t\t\toutputNode = vec4( sRGBTransferEOTF( outputNode.rgb ), outputNode.a );\n\n\t\t}\n\n\t\tif ( ColorManagement.getPrimaries( source ) !== ColorManagement.getPrimaries( target ) ) {\n\n\t\t\toutputNode = vec4(\n\t\t\t\tmat3( ColorManagement._getMatrix( new Matrix3(), source, target ) ).mul( outputNode.rgb ),\n\t\t\t\toutputNode.a\n\t\t\t);\n\n\t\t}\n\n\t\tif ( ColorManagement.getTransfer( target ) === SRGBTransfer ) {\n\n\t\t\toutputNode = vec4( sRGBTransferOETF( outputNode.rgb ), outputNode.a );\n\n\t\t}\n\n\t\treturn outputNode;\n\n\t}\n\n}\n\n/**\n * TSL function for converting a given color node from the current working color space to the given color space.\n *\n * @tsl\n * @function\n * @param {Node} node - Represents the node to convert.\n * @param {string} targetColorSpace - The target color space.\n * @returns {ColorSpaceNode}\n */\nconst workingToColorSpace = ( node, targetColorSpace ) => new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, targetColorSpace );\n\n/**\n * TSL function for converting a given color node from the given color space to the current working color space.\n *\n * @tsl\n * @function\n * @param {Node} node - Represents the node to convert.\n * @param {string} sourceColorSpace - The source color space.\n * @returns {ColorSpaceNode}\n */\nconst colorSpaceToWorking = ( node, sourceColorSpace ) => new ColorSpaceNode( nodeObject( node ), sourceColorSpace, WORKING_COLOR_SPACE );\n\n/**\n * TSL function for converting a given color node from one color space to another one.\n *\n * @tsl\n * @function\n * @param {Node} node - Represents the node to convert.\n * @param {string} sourceColorSpace - The source color space.\n * @param {string} targetColorSpace - The target color space.\n * @returns {ColorSpaceNode}\n */\nconst convertColorSpace = ( node, sourceColorSpace, targetColorSpace ) => new ColorSpaceNode( nodeObject( node ), sourceColorSpace, targetColorSpace );\n\naddMethodChaining( 'workingToColorSpace', workingToColorSpace );\naddMethodChaining( 'colorSpaceToWorking', colorSpaceToWorking );\n\n// TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode\n\n/**\n * This class is only relevant if the referenced property is array-like.\n * In this case, `ReferenceElementNode` allows to refer to a specific\n * element inside the data structure via an index.\n *\n * @augments ArrayElementNode\n */\nlet ReferenceElementNode$1 = class ReferenceElementNode extends ArrayElementNode {\n\n\tstatic get type() {\n\n\t\treturn 'ReferenceElementNode';\n\n\t}\n\n\t/**\n\t * Constructs a new reference element node.\n\t *\n\t * @param {ReferenceBaseNode} referenceNode - The reference node.\n\t * @param {Node} indexNode - The index node that defines the element access.\n\t */\n\tconstructor( referenceNode, indexNode ) {\n\n\t\tsuper( referenceNode, indexNode );\n\n\t\t/**\n\t\t * Similar to {@link ReferenceBaseNode#reference}, an additional\n\t\t * property references to the current node.\n\t\t *\n\t\t * @type {?ReferenceBaseNode}\n\t\t * @default null\n\t\t */\n\t\tthis.referenceNode = referenceNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isReferenceElementNode = true;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from\n\t * the uniform type of the reference node.\n\t *\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType() {\n\n\t\treturn this.referenceNode.uniformType;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst snippet = super.generate( builder );\n\t\tconst arrayType = this.referenceNode.getNodeType();\n\t\tconst elementType = this.getNodeType();\n\n\t\treturn builder.format( snippet, arrayType, elementType );\n\n\t}\n\n};\n\n/**\n * Base class for nodes which establishes a reference to a property of another object.\n * In this way, the value of the node is automatically linked to the value of\n * referenced object. Reference nodes internally represent the linked value\n * as a uniform.\n *\n * @augments Node\n */\nclass ReferenceBaseNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ReferenceBaseNode';\n\n\t}\n\n\t/**\n\t * Constructs a new reference base node.\n\t *\n\t * @param {string} property - The name of the property the node refers to.\n\t * @param {string} uniformType - The uniform type that should be used to represent the property value.\n\t * @param {?Object} [object=null] - The object the property belongs to.\n\t * @param {?number} [count=null] - When the linked property is an array-like, this parameter defines its length.\n\t */\n\tconstructor( property, uniformType, object = null, count = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The name of the property the node refers to.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.property = property;\n\n\t\t/**\n\t\t * The uniform type that should be used to represent the property value.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.uniformType = uniformType;\n\n\t\t/**\n\t\t * The object the property belongs to.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.object = object;\n\n\t\t/**\n\t\t * When the linked property is an array, this parameter defines its length.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.count = count;\n\n\t\t/**\n\t\t * The property name might have dots so nested properties can be referred.\n\t\t * The hierarchy of the names is stored inside this array.\n\t\t *\n\t\t * @type {Array<string>}\n\t\t */\n\t\tthis.properties = property.split( '.' );\n\n\t\t/**\n\t\t * Points to the current referred object. This property exists next to {@link ReferenceNode#object}\n\t\t * since the final reference might be updated from calling code.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.reference = object;\n\n\t\t/**\n\t\t * The uniform node that holds the value of the reference node.\n\t\t *\n\t\t * @type {UniformNode}\n\t\t * @default null\n\t\t */\n\t\tthis.node = null;\n\n\t\t/**\n\t\t * The uniform group of the internal uniform.\n\t\t *\n\t\t * @type {UniformGroupNode}\n\t\t * @default null\n\t\t */\n\t\tthis.group = null;\n\n\t\t/**\n\t\t * Overwritten since reference nodes are updated per object.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'object'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.OBJECT;\n\n\t}\n\n\t/**\n\t * Sets the uniform group for this reference node.\n\t *\n\t * @param {UniformGroupNode} group - The uniform group to set.\n\t * @return {ReferenceBaseNode} A reference to this node.\n\t */\n\tsetGroup( group ) {\n\n\t\tthis.group = group;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * When the referred property is array-like, this method can be used\n\t * to access elements via an index node.\n\t *\n\t * @param {IndexNode} indexNode - indexNode.\n\t * @return {ReferenceElementNode} A reference to an element.\n\t */\n\telement( indexNode ) {\n\n\t\treturn new ReferenceElementNode$1( this, nodeObject( indexNode ) );\n\n\t}\n\n\t/**\n\t * Sets the node type which automatically defines the internal\n\t * uniform type.\n\t *\n\t * @param {string} uniformType - The type to set.\n\t */\n\tsetNodeType( uniformType ) {\n\n\t\tconst node = uniform( null, uniformType );\n\n\t\tif ( this.group !== null ) {\n\n\t\t\tnode.setGroup( this.group );\n\n\t\t}\n\n\t\tthis.node = node;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from\n\t * the type of the reference node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tif ( this.node === null ) {\n\n\t\t\tthis.updateReference( builder );\n\t\t\tthis.updateValue();\n\n\t\t}\n\n\t\treturn this.node.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Returns the property value from the given referred object.\n\t *\n\t * @param {Object} [object=this.reference] - The object to retrieve the property value from.\n\t * @return {any} The value.\n\t */\n\tgetValueFromReference( object = this.reference ) {\n\n\t\tconst { properties } = this;\n\n\t\tlet value = object[ properties[ 0 ] ];\n\n\t\tfor ( let i = 1; i < properties.length; i ++ ) {\n\n\t\t\tvalue = value[ properties[ i ] ];\n\n\t\t}\n\n\t\treturn value;\n\n\t}\n\n\t/**\n\t * Allows to update the reference based on the given state. The state is only\n\t * evaluated {@link ReferenceBaseNode#object} is not set.\n\t *\n\t * @param {(NodeFrame|NodeBuilder)} state - The current state.\n\t * @return {Object} The updated reference.\n\t */\n\tupdateReference( state ) {\n\n\t\tthis.reference = this.object !== null ? this.object : state.object;\n\n\t\treturn this.reference;\n\n\t}\n\n\t/**\n\t * The output of the reference node is the internal uniform node.\n\t *\n\t * @return {UniformNode} The output node.\n\t */\n\tsetup() {\n\n\t\tthis.updateValue();\n\n\t\treturn this.node;\n\n\t}\n\n\t/**\n\t * Overwritten to update the internal uniform value.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( /*frame*/ ) {\n\n\t\tthis.updateValue();\n\n\t}\n\n\t/**\n\t * Retrieves the value from the referred object property and uses it\n\t * to updated the internal uniform.\n\t */\n\tupdateValue() {\n\n\t\tif ( this.node === null ) this.setNodeType( this.uniformType );\n\n\t\tconst value = this.getValueFromReference();\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tthis.node.array = value;\n\n\t\t} else {\n\n\t\t\tthis.node.value = value;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * TSL function for creating a reference base node.\n *\n * @tsl\n * @function\n * @param {string} name - The name of the property the node refers to.\n * @param {string} type - The uniform type that should be used to represent the property value.\n * @param {Object} object - The object the property belongs to.\n * @returns {ReferenceBaseNode}\n */\nconst reference$1 = ( name, type, object ) => new ReferenceBaseNode( name, type, object );\n\n/**\n * This node is a special type of reference node which is intended\n * for linking renderer properties with node values.\n * ```js\n * const exposureNode = rendererReference( 'toneMappingExposure', 'float', renderer );\n * ```\n * When changing `renderer.toneMappingExposure`, the node value of `exposureNode` will\n * automatically be updated.\n *\n * @augments ReferenceBaseNode\n */\nclass RendererReferenceNode extends ReferenceBaseNode {\n\n\tstatic get type() {\n\n\t\treturn 'RendererReferenceNode';\n\n\t}\n\n\t/**\n\t * Constructs a new renderer reference node.\n\t *\n\t * @param {string} property - The name of the property the node refers to.\n\t * @param {string} inputType - The uniform type that should be used to represent the property value.\n\t * @param {?Renderer} [renderer=null] - The renderer the property belongs to. When no renderer is set,\n\t * the node refers to the renderer of the current state.\n\t */\n\tconstructor( property, inputType, renderer = null ) {\n\n\t\tsuper( property, inputType, renderer );\n\n\t\t/**\n\t\t * The renderer the property belongs to. When no renderer is set,\n\t\t * the node refers to the renderer of the current state.\n\t\t *\n\t\t * @type {?Renderer}\n\t\t * @default null\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\tthis.setGroup( renderGroup );\n\n\t}\n\n\t/**\n\t * Updates the reference based on the given state. The state is only evaluated\n\t * {@link RendererReferenceNode#renderer} is not set.\n\t *\n\t * @param {(NodeFrame|NodeBuilder)} state - The current state.\n\t * @return {Object} The updated reference.\n\t */\n\tupdateReference( state ) {\n\n\t\tthis.reference = this.renderer !== null ? this.renderer : state.renderer;\n\n\t\treturn this.reference;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a renderer reference node.\n *\n * @tsl\n * @function\n * @param {string} name - The name of the property the node refers to.\n * @param {string} type - The uniform type that should be used to represent the property value.\n * @param {?Renderer} [renderer=null] - The renderer the property belongs to. When no renderer is set,\n * the node refers to the renderer of the current state.\n * @returns {RendererReferenceNode}\n */\nconst rendererReference = ( name, type, renderer = null ) => new RendererReferenceNode( name, type, renderer );\n\n/**\n * This node represents a tone mapping operation.\n *\n * @augments TempNode\n */\nclass ToneMappingNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'ToneMappingNode';\n\n\t}\n\n\t/**\n\t * Constructs a new tone mapping node.\n\t *\n\t * @param {number} toneMapping - The tone mapping type.\n\t * @param {Node} exposureNode - The tone mapping exposure.\n\t * @param {Node} [colorNode=null] - The color node to process.\n\t */\n\tconstructor( toneMapping, exposureNode = toneMappingExposure, colorNode = null ) {\n\n\t\tsuper( 'vec3' );\n\n\t\t/**\n\t\t * The tone mapping type.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t */\n\t\tthis._toneMapping = toneMapping;\n\n\t\t/**\n\t\t * The tone mapping exposure.\n\t\t *\n\t\t * @type {Node}\n\t\t * @default null\n\t\t */\n\t\tthis.exposureNode = exposureNode;\n\n\t\t/**\n\t\t * Represents the color to process.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.colorNode = colorNode;\n\n\t}\n\n\t/**\n\t * Overwrites the default `customCacheKey()` implementation by including the tone\n\t * mapping type into the cache key.\n\t *\n\t * @return {number} The hash.\n\t */\n\tcustomCacheKey() {\n\n\t\treturn hash$1( this._toneMapping );\n\n\t}\n\n\t/**\n\t * Sets the tone mapping type.\n\t *\n\t * @param {number} value - The tone mapping type.\n\t * @return {ToneMappingNode} A reference to this node.\n\t */\n\tsetToneMapping( value ) {\n\n\t\tthis._toneMapping = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Gets the tone mapping type.\n\t *\n\t * @returns {number} The tone mapping type.\n\t */\n\tgetToneMapping() {\n\n\t\treturn this._toneMapping;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst colorNode = this.colorNode || builder.context.color;\n\t\tconst toneMapping = this._toneMapping;\n\n\t\tif ( toneMapping === NoToneMapping ) return colorNode;\n\n\t\tlet outputNode = null;\n\n\t\tconst toneMappingFn = builder.renderer.library.getToneMappingFunction( toneMapping );\n\n\t\tif ( toneMappingFn !== null ) {\n\n\t\t\toutputNode = vec4( toneMappingFn( colorNode.rgb, this.exposureNode ), colorNode.a );\n\n\t\t} else {\n\n\t\t\terror( 'ToneMappingNode: Unsupported Tone Mapping configuration.', toneMapping );\n\n\t\t\toutputNode = colorNode;\n\n\t\t}\n\n\t\treturn outputNode;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a tone mapping node.\n *\n * @tsl\n * @function\n * @param {number} mapping - The tone mapping type.\n * @param {Node<float> | number} exposure - The tone mapping exposure.\n * @param {Node<vec3> | Color} color - The color node to process.\n * @returns {ToneMappingNode<vec3>}\n */\nconst toneMapping = ( mapping, exposure, color ) => new ToneMappingNode( mapping, nodeObject( exposure ), nodeObject( color ) );\n\n/**\n * TSL object that represents the global tone mapping exposure of the renderer.\n *\n * @tsl\n * @type {RendererReferenceNode<vec3>}\n */\nconst toneMappingExposure = /*@__PURE__*/ rendererReference( 'toneMappingExposure', 'float' );\n\naddMethodChaining( 'toneMapping', ( color, mapping, exposure ) => toneMapping( mapping, exposure, color ) );\n\n/**\n * Internal buffer attribute library.\n *\n * @private\n * @type {WeakMap<TypedArray, InterleavedBuffer>}\n */\nconst _bufferLib = new WeakMap();\n\n/**\n * Internal method for retrieving or creating interleaved buffers.\n *\n * @private\n * @param {TypedArray} value - The attribute data.\n * @param {number} itemSize - The attribute item size.\n * @returns {InterleavedBuffer} The interleaved buffer.\n */\nfunction _getBufferAttribute( value, itemSize ) {\n\n\tlet buffer = _bufferLib.get( value );\n\n\tif ( buffer === undefined ) {\n\n\t\tbuffer = new InterleavedBuffer( value, itemSize );\n\n\t\t_bufferLib.set( value, buffer );\n\n\t}\n\n\treturn buffer;\n\n}\n\n/**\n * In earlier `three.js` versions it was only possible to define attribute data\n * on geometry level. With `BufferAttributeNode`, it is also possible to do this\n * on the node level.\n * ```js\n * const geometry = new THREE.PlaneGeometry();\n * const positionAttribute = geometry.getAttribute( 'position' );\n *\n * const colors = [];\n * for ( let i = 0; i < position.count; i ++ ) {\n * \tcolors.push( 1, 0, 0 );\n * }\n *\n * material.colorNode = bufferAttribute( new THREE.Float32BufferAttribute( colors, 3 ) );\n * ```\n * This new approach is especially interesting when geometry data are generated via\n * compute shaders. The below line converts a storage buffer into an attribute node.\n * ```js\n * material.positionNode = positionBuffer.toAttribute();\n * ```\n * @augments InputNode\n */\nclass BufferAttributeNode extends InputNode {\n\n\tstatic get type() {\n\n\t\treturn 'BufferAttributeNode';\n\n\t}\n\n\t/**\n\t * Constructs a new buffer attribute node.\n\t *\n\t * @param {BufferAttribute|InterleavedBuffer|TypedArray} value - The attribute data.\n\t * @param {?string} [bufferType=null] - The buffer type (e.g. `'vec3'`).\n\t * @param {number} [bufferStride=0] - The buffer stride.\n\t * @param {number} [bufferOffset=0] - The buffer offset.\n\t */\n\tconstructor( value, bufferType = null, bufferStride = 0, bufferOffset = 0 ) {\n\n\t\tsuper( value, bufferType );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBufferNode = true;\n\n\t\t/**\n\t\t * The buffer type (e.g. `'vec3'`).\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.bufferType = bufferType;\n\n\t\t/**\n\t\t * The buffer stride.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.bufferStride = bufferStride;\n\n\t\t/**\n\t\t * The buffer offset.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.bufferOffset = bufferOffset;\n\n\t\t/**\n\t\t * The usage property. Set this to `THREE.DynamicDrawUsage` via `.setUsage()`,\n\t\t * if you are planning to update the attribute data per frame.\n\t\t *\n\t\t * @type {number}\n\t\t * @default StaticDrawUsage\n\t\t */\n\t\tthis.usage = StaticDrawUsage;\n\n\t\t/**\n\t\t * Whether the attribute is instanced or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.instanced = false;\n\n\t\t/**\n\t\t * A reference to the buffer attribute.\n\t\t *\n\t\t * @type {?BufferAttribute}\n\t\t * @default null\n\t\t */\n\t\tthis.attribute = null;\n\n\t\t/**\n\t\t * `BufferAttributeNode` sets this property to `true` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t\tif ( value && value.isBufferAttribute === true && value.itemSize <= 4 ) {\n\n\t\t\tthis.attribute = value;\n\t\t\tthis.usage = value.usage;\n\t\t\tthis.instanced = value.isInstancedBufferAttribute;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is overwritten since the attribute data might be shared\n\t * and thus the hash should be shared as well.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The hash.\n\t */\n\tgetHash( builder ) {\n\n\t\tlet id;\n\n\t\tif ( this.bufferStride === 0 && this.bufferOffset === 0 ) {\n\n\t\t\tlet bufferData = builder.globalCache.getData( this.value );\n\n\t\t\tif ( bufferData === undefined ) {\n\n\t\t\t\tbufferData = {\n\t\t\t\t\tnode: this\n\t\t\t\t};\n\n\t\t\t\tbuilder.globalCache.setData( this.value, bufferData );\n\n\t\t\t}\n\n\t\t\tid = bufferData.node.id;\n\n\t\t} else {\n\n\t\t\tid = this.id;\n\n\t\t}\n\n\t\treturn String( id );\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from\n\t * the buffer attribute.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tif ( this.bufferType === null ) {\n\n\t\t\tthis.bufferType = builder.getTypeFromAttribute( this.attribute );\n\n\t\t}\n\n\t\treturn this.bufferType;\n\n\t}\n\n\t/**\n\t * Depending on which value was passed to the node, `setup()` behaves\n\t * differently. If no instance of `BufferAttribute` was passed, the method\n\t * creates an internal attribute and configures it respectively.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetup( builder ) {\n\n\t\tif ( this.attribute !== null ) return;\n\n\t\t//\n\n\t\tconst type = this.getNodeType( builder );\n\t\tconst itemSize = builder.getTypeLength( type );\n\t\tconst value = this.value;\n\t\tconst stride = this.bufferStride || itemSize;\n\t\tconst offset = this.bufferOffset;\n\n\t\tlet buffer;\n\n\t\tif ( value.isInterleavedBuffer === true ) {\n\n\t\t\tbuffer = value;\n\n\t\t} else if ( value.isBufferAttribute === true ) {\n\n\t\t\tbuffer = _getBufferAttribute( value.array, stride );\n\n\t\t} else {\n\n\t\t\tbuffer = _getBufferAttribute( value, stride );\n\n\t\t}\n\n\t\tconst bufferAttribute = new InterleavedBufferAttribute( buffer, itemSize, offset );\n\n\t\tbuffer.setUsage( this.usage );\n\n\t\tthis.attribute = bufferAttribute;\n\t\tthis.attribute.isInstancedBufferAttribute = this.instanced; // @TODO: Add a possible: InstancedInterleavedBufferAttribute\n\n\t}\n\n\t/**\n\t * Generates the code snippet of the buffer attribute node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerate( builder ) {\n\n\t\tconst nodeType = this.getNodeType( builder );\n\n\t\tconst nodeAttribute = builder.getBufferAttributeFromNode( this, nodeType );\n\t\tconst propertyName = builder.getPropertyName( nodeAttribute );\n\n\t\tlet output = null;\n\n\t\tif ( builder.shaderStage === 'vertex' || builder.shaderStage === 'compute' ) {\n\n\t\t\tthis.name = propertyName;\n\n\t\t\toutput = propertyName;\n\n\t\t} else {\n\n\t\t\tconst nodeVarying = varying( this );\n\n\t\t\toutput = nodeVarying.build( builder, nodeType );\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to return a fixed value `'bufferAttribute'`.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( /*builder*/ ) {\n\n\t\treturn 'bufferAttribute';\n\n\t}\n\n\t/**\n\t * Sets the `usage` property to the given value.\n\t *\n\t * @param {number} value - The usage to set.\n\t * @return {BufferAttributeNode} A reference to this node.\n\t */\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\tif ( this.attribute && this.attribute.isBufferAttribute === true ) {\n\n\t\t\tthis.attribute.usage = value;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the `instanced` property to the given value.\n\t *\n\t * @param {boolean} value - The value to set.\n\t * @return {BufferAttributeNode} A reference to this node.\n\t */\n\tsetInstanced( value ) {\n\n\t\tthis.instanced = value;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Internal method for creating buffer attribute nodes.\n *\n * @private\n * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.\n * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).\n * @param {number} [stride=0] - The buffer stride.\n * @param {number} [offset=0] - The buffer offset.\n * @param {number} [usage=StaticDrawUsage] - The buffer usage.\n * @param {boolean} [instanced=false] - Whether the buffer is instanced.\n * @returns {BufferAttributeNode|Node} The buffer attribute node.\n */\nfunction createBufferAttribute( array, type = null, stride = 0, offset = 0, usage = StaticDrawUsage, instanced = false ) {\n\n\tif ( type === 'mat3' || ( type === null && array.itemSize === 9 ) ) {\n\n\t\treturn mat3(\n\t\t\tnew BufferAttributeNode( array, 'vec3', 9, 0 ).setUsage( usage ).setInstanced( instanced ),\n\t\t\tnew BufferAttributeNode( array, 'vec3', 9, 3 ).setUsage( usage ).setInstanced( instanced ),\n\t\t\tnew BufferAttributeNode( array, 'vec3', 9, 6 ).setUsage( usage ).setInstanced( instanced )\n\t\t);\n\n\t} else if ( type === 'mat4' || ( type === null && array.itemSize === 16 ) ) {\n\n\t\treturn mat4(\n\t\t\tnew BufferAttributeNode( array, 'vec4', 16, 0 ).setUsage( usage ).setInstanced( instanced ),\n\t\t\tnew BufferAttributeNode( array, 'vec4', 16, 4 ).setUsage( usage ).setInstanced( instanced ),\n\t\t\tnew BufferAttributeNode( array, 'vec4', 16, 8 ).setUsage( usage ).setInstanced( instanced ),\n\t\t\tnew BufferAttributeNode( array, 'vec4', 16, 12 ).setUsage( usage ).setInstanced( instanced )\n\t\t);\n\n\t}\n\n\treturn new BufferAttributeNode( array, type, stride, offset ).setUsage( usage );\n\n}\n\n/**\n * TSL function for creating a buffer attribute node.\n *\n * @tsl\n * @function\n * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.\n * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).\n * @param {number} [stride=0] - The buffer stride.\n * @param {number} [offset=0] - The buffer offset.\n * @returns {BufferAttributeNode|Node}\n */\nconst bufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => createBufferAttribute( array, type, stride, offset );\n\n/**\n * TSL function for creating a buffer attribute node but with dynamic draw usage.\n * Use this function if attribute data are updated per frame.\n *\n * @tsl\n * @function\n * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.\n * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).\n * @param {number} [stride=0] - The buffer stride.\n * @param {number} [offset=0] - The buffer offset.\n * @returns {BufferAttributeNode|Node}\n */\nconst dynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => createBufferAttribute( array, type, stride, offset, DynamicDrawUsage );\n\n/**\n * TSL function for creating a buffer attribute node but with enabled instancing\n *\n * @tsl\n * @function\n * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.\n * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).\n * @param {number} [stride=0] - The buffer stride.\n * @param {number} [offset=0] - The buffer offset.\n * @returns {BufferAttributeNode|Node}\n */\nconst instancedBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => createBufferAttribute( array, type, stride, offset, StaticDrawUsage, true );\n\n/**\n * TSL function for creating a buffer attribute node but with dynamic draw usage and enabled instancing\n *\n * @tsl\n * @function\n * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.\n * @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).\n * @param {number} [stride=0] - The buffer stride.\n * @param {number} [offset=0] - The buffer offset.\n * @returns {BufferAttributeNode|Node}\n */\nconst instancedDynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => createBufferAttribute( array, type, stride, offset, DynamicDrawUsage, true );\n\naddMethodChaining( 'toAttribute', ( bufferNode ) => bufferAttribute( bufferNode.value ) );\n\n/**\n * This class represents shader indices of different types. The following predefined node\n * objects cover frequent use cases:\n *\n * - `vertexIndex`: The index of a vertex within a mesh.\n * - `instanceIndex`: The index of either a mesh instance or an invocation of a compute shader.\n * - `drawIndex`: The index of a draw call.\n * - `invocationLocalIndex`: The index of a compute invocation within the scope of a workgroup load.\n * - `invocationSubgroupIndex`: The index of a compute invocation within the scope of a subgroup.\n * - `subgroupIndex`: The index of a compute invocation's subgroup within its workgroup.\n *\n * @augments Node\n */\nclass IndexNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'IndexNode';\n\n\t}\n\n\t/**\n\t * Constructs a new index node.\n\t *\n\t * @param {('vertex'|'instance'|'subgroup'|'invocationLocal'|'invocationGlobal'|'invocationSubgroup'|'draw')} scope - The scope of the index node.\n\t */\n\tconstructor( scope ) {\n\n\t\tsuper( 'uint' );\n\n\t\t/**\n\t\t * The scope of the index node.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.scope = scope;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isIndexNode = true;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst nodeType = this.getNodeType( builder );\n\t\tconst scope = this.scope;\n\n\t\tlet propertyName;\n\n\t\tif ( scope === IndexNode.VERTEX ) {\n\n\t\t\tpropertyName = builder.getVertexIndex();\n\n\t\t} else if ( scope === IndexNode.INSTANCE ) {\n\n\t\t\tpropertyName = builder.getInstanceIndex();\n\n\t\t} else if ( scope === IndexNode.DRAW ) {\n\n\t\t\tpropertyName = builder.getDrawIndex();\n\n\t\t} else if ( scope === IndexNode.INVOCATION_LOCAL ) {\n\n\t\t\tpropertyName = builder.getInvocationLocalIndex();\n\n\t\t} else if ( scope === IndexNode.INVOCATION_SUBGROUP ) {\n\n\t\t\tpropertyName = builder.getInvocationSubgroupIndex();\n\n\t\t} else if ( scope === IndexNode.SUBGROUP ) {\n\n\t\t\tpropertyName = builder.getSubgroupIndex();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.IndexNode: Unknown scope: ' + scope );\n\n\t\t}\n\n\t\tlet output;\n\n\t\tif ( builder.shaderStage === 'vertex' || builder.shaderStage === 'compute' ) {\n\n\t\t\toutput = propertyName;\n\n\t\t} else {\n\n\t\t\tconst nodeVarying = varying( this );\n\n\t\t\toutput = nodeVarying.build( builder, nodeType );\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nIndexNode.VERTEX = 'vertex';\nIndexNode.INSTANCE = 'instance';\nIndexNode.SUBGROUP = 'subgroup';\nIndexNode.INVOCATION_LOCAL = 'invocationLocal';\nIndexNode.INVOCATION_SUBGROUP = 'invocationSubgroup';\nIndexNode.DRAW = 'draw';\n\n/**\n * TSL object that represents the index of a vertex within a mesh.\n *\n * @tsl\n * @type {IndexNode}\n */\nconst vertexIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.VERTEX );\n\n/**\n * TSL object that represents the index of either a mesh instance or an invocation of a compute shader.\n *\n * @tsl\n * @type {IndexNode}\n */\nconst instanceIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INSTANCE );\n\n/**\n * TSL object that represents the index of the subgroup the current compute invocation belongs to.\n *\n * @tsl\n * @type {IndexNode}\n */\nconst subgroupIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.SUBGROUP );\n\n/**\n * TSL object that represents the index of a compute invocation within the scope of a subgroup.\n *\n * @tsl\n * @type {IndexNode}\n */\nconst invocationSubgroupIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INVOCATION_SUBGROUP );\n\n/**\n * TSL object that represents the index of a compute invocation within the scope of a workgroup load.\n *\n * @tsl\n * @type {IndexNode}\n */\nconst invocationLocalIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INVOCATION_LOCAL );\n\n/**\n * TSL object that represents the index of a draw call.\n *\n * @tsl\n * @type {IndexNode}\n */\nconst drawIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.DRAW );\n\n/**\n * Represents a compute shader node.\n *\n * @augments Node\n */\nclass ComputeNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ComputeNode';\n\n\t}\n\n\t/**\n\t * Constructs a new compute node.\n\t *\n\t * @param {Node} computeNode - The node that defines the compute shader logic.\n\t * @param {Array<number>} workgroupSize - An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.\n\t */\n\tconstructor( computeNode, workgroupSize ) {\n\n\t\tsuper( 'void' );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isComputeNode = true;\n\n\t\t/**\n\t\t * The node that defines the compute shader logic.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.computeNode = computeNode;\n\n\t\t/**\n\t\t * An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.\n\t\t *\n\t\t * @type {Array<number>}\n\t\t * @default [ 64 ]\n\t\t */\n\t\tthis.workgroupSize = workgroupSize;\n\n\t\t/**\n\t\t * The total number of threads (invocations) to execute. If it is a number, it will be used\n\t\t * to automatically generate bounds checking against `instanceIndex`.\n\t\t *\n\t\t * @type {number|Array<number>}\n\t\t */\n\t\tthis.count = null;\n\n\t\t/**\n\t\t * The dispatch size for workgroups on X, Y, and Z axes.\n\t\t * Used directly if `count` is not provided.\n\t\t *\n\t\t * @type {number|Array<number>}\n\t\t */\n\t\tthis.dispatchSize = null;\n\n\t\t/**\n\t\t * The version of the node.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.version = 1;\n\n\t\t/**\n\t\t * The name or label of the uniform.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The `updateBeforeType` is set to `NodeUpdateType.OBJECT` since {@link ComputeNode#updateBefore}\n\t\t * is executed once per object by default.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'object'\n\t\t */\n\t\tthis.updateBeforeType = NodeUpdateType.OBJECT;\n\n\t\t/**\n\t\t * A callback executed when the compute node finishes initialization.\n\t\t *\n\t\t * @type {?Function}\n\t\t */\n\t\tthis.onInitFunction = null;\n\n\t\t/**\n\t\t * A uniform node holding the dispatch count for bounds checking.\n\t\t * Created automatically when `count` is a number.\n\t\t *\n\t\t * @type {?UniformNode}\n\t\t */\n\t\tthis.countNode = null;\n\n\t}\n\n\t/**\n\t * Executes the `dispose` event for this node.\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\t/**\n\t * Sets the {@link ComputeNode#name} property.\n\t *\n\t * @param {string} name - The name of the uniform.\n\t * @return {ComputeNode} A reference to this node.\n\t */\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the {@link ComputeNode#name} property.\n\t *\n\t * @deprecated\n\t * @param {string} name - The name of the uniform.\n\t * @return {ComputeNode} A reference to this node.\n\t */\n\tlabel( name ) {\n\n\t\twarn( 'TSL: \"label()\" has been deprecated. Use \"setName()\" instead.', new StackTrace() ); // @deprecated r179\n\n\t\treturn this.setName( name );\n\n\t}\n\n\t/**\n\t * Sets the callback to run during initialization.\n\t *\n\t * @param {Function} callback - The callback function.\n\t * @return {ComputeNode} A reference to this node.\n\t */\n\tonInit( callback ) {\n\n\t\tthis.onInitFunction = callback;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The method execute the compute for this node.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdateBefore( { renderer } ) {\n\n\t\trenderer.compute( this );\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tif ( this.count !== null && this.countNode === null ) {\n\n\t\t\tthis.countNode = uniform( this.count, 'uint' ).onObjectUpdate( () => this.count );\n\n\t\t}\n\n\t\tconst result = this.computeNode.build( builder );\n\n\t\tif ( result ) {\n\n\t\t\tconst properties = builder.getNodeProperties( this );\n\t\t\tproperties.outputComputeNode = result.outputNode;\n\n\t\t\tresult.outputNode = null;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst { shaderStage } = builder;\n\n\t\tif ( shaderStage === 'compute' ) {\n\n\t\t\tconst snippet = this.computeNode.build( builder, 'void' );\n\n\t\t\tif ( snippet !== '' ) {\n\n\t\t\t\tbuilder.addLineFlowCode( snippet, this );\n\n\t\t\t}\n\n\t\t\tif ( this.count !== null && builder.allowEarlyReturns === true ) {\n\n\t\t\t\tconst countSnippet = this.countNode.build( builder, 'uint' );\n\t\t\t\tconst indexSnippet = instanceIndex.build( builder, 'uint' );\n\n\t\t\t\tbuilder.flow.code = `${ builder.tab }if ( ${ indexSnippet } >= ${ countSnippet } ) { return; }\\n\\n${ builder.flow.code }`;\n\n\t\t\t}\n\n\n\t\t} else {\n\n\t\t\tconst properties = builder.getNodeProperties( this );\n\t\t\tconst outputComputeNode = properties.outputComputeNode;\n\n\t\t\tif ( outputComputeNode ) {\n\n\t\t\t\treturn outputComputeNode.build( builder, output );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * TSL function for creating a compute kernel node.\n *\n * @tsl\n * @function\n * @param {Node} node - The TSL logic for the compute shader.\n * @param {Array<number>} [workgroupSize=[64]] - The workgroup size.\n * @returns {ComputeNode}\n */\nconst computeKernel = ( node, workgroupSize = [ 64 ] ) => {\n\n\tif ( workgroupSize.length === 0 || workgroupSize.length > 3 ) {\n\n\t\terror( 'TSL: compute() workgroupSize must have 1, 2, or 3 elements', new StackTrace() );\n\n\t}\n\n\tfor ( let i = 0; i < workgroupSize.length; i ++ ) {\n\n\t\tconst val = workgroupSize[ i ];\n\n\t\tif ( typeof val !== 'number' || val <= 0 || ! Number.isInteger( val ) ) {\n\n\t\t\terror( `TSL: compute() workgroupSize element at index [ ${ i } ] must be a positive integer`, new StackTrace() );\n\n\t\t}\n\n\t}\n\n\t// Implicit fill-up to [ x, y, z ] with 1s, just like WGSL treats @workgroup_size when fewer dimensions are specified\n\n\twhile ( workgroupSize.length < 3 ) workgroupSize.push( 1 );\n\n\t//\n\n\treturn new ComputeNode( nodeObject( node ), workgroupSize );\n\n};\n\n/**\n * TSL function for creating a compute node.\n *\n * @tsl\n * @function\n * @param {Node} node - The TSL logic for the compute shader.\n * @param {number|Array<number>} count - The compute count or dispatch size.\n * @param {Array<number>} [workgroupSize=[64]] - The workgroup size.\n * @returns {ComputeNode}\n,  */\nconst compute = ( node, count, workgroupSize ) => {\n\n\tconst computeNode = computeKernel( node, workgroupSize );\n\n\tif ( typeof count === 'number' ) {\n\n\t\tcomputeNode.count = count;\n\n\t} else {\n\n\t\tcomputeNode.dispatchSize = count;\n\n\t}\n\n\treturn computeNode;\n\n};\n\naddMethodChaining( 'compute', compute );\naddMethodChaining( 'computeKernel', computeKernel );\n\n/**\n * This node can be used as a cache management component for another node.\n * Caching is in general used by default in {@link NodeBuilder} but this node\n * allows the usage of a shared parent cache during the build process.\n *\n * @augments Node\n */\nclass IsolateNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'IsolateNode';\n\n\t}\n\n\t/**\n\t * Constructs a new cache node.\n\t *\n\t * @param {Node} node - The node that should be cached.\n\t * @param {boolean} [parent=true] - Whether this node refers to a shared parent cache or not.\n\t */\n\tconstructor( node, parent = true ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node that should be cached.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.node = node;\n\n\t\t/**\n\t\t * Whether this node refers to a shared parent cache or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.parent = parent;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isIsolateNode = true;\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\tconst previousCache = builder.getCache();\n\t\tconst cache = builder.getCacheFromNode( this, this.parent );\n\n\t\tbuilder.setCache( cache );\n\n\t\tconst nodeType = this.node.getNodeType( builder );\n\n\t\tbuilder.setCache( previousCache );\n\n\t\treturn nodeType;\n\n\t}\n\n\tbuild( builder, ...params ) {\n\n\t\tconst previousCache = builder.getCache();\n\t\tconst cache = builder.getCacheFromNode( this, this.parent );\n\n\t\tbuilder.setCache( cache );\n\n\t\tconst data = this.node.build( builder, ...params );\n\n\t\tbuilder.setCache( previousCache );\n\n\t\treturn data;\n\n\t}\n\n\tsetParent( parent ) {\n\n\t\tthis.parent = parent;\n\n\t\treturn this;\n\n\t}\n\n\tgetParent() {\n\n\t\treturn this.parent;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a cache node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node that should be cached.\n * @returns {IsolateNode}\n */\nconst isolate = ( node ) => new IsolateNode( nodeObject( node ) );\n\n/**\n * TSL function for creating a cache node.\n *\n * @tsl\n * @function\n * @deprecated\n * @param {Node} node - The node that should be cached.\n * @param {boolean} [parent=true] - Whether this node refers to a shared parent cache or not.\n * @returns {IsolateNode}\n */\nfunction cache( node, parent = true ) {\n\n\twarn( 'TSL: \"cache()\" has been deprecated. Use \"isolate()\" instead.' ); // @deprecated r181\n\n\treturn isolate( node ).setParent( parent );\n\n}\n\naddMethodChaining( 'cache', cache );\naddMethodChaining( 'isolate', isolate );\n\n/**\n * The class generates the code of a given node but returns another node in the output.\n * This can be used to call a method or node that does not return a value, i.e.\n * type `void` on an input where returning a value is required. Example:\n *\n * ```js\n * material.colorNode = myColor.bypass( runVoidFn() )\n *```\n *\n * @augments Node\n */\nclass BypassNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'BypassNode';\n\n\t}\n\n\t/**\n\t * Constructs a new bypass node.\n\t *\n\t * @param {Node} outputNode - The output node.\n\t * @param {Node} callNode - The call node.\n\t */\n\tconstructor( outputNode, callNode ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBypassNode = true;\n\n\t\t/**\n\t\t * The output node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.outputNode = outputNode;\n\n\t\t/**\n\t\t * The call node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.callNode = callNode;\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.outputNode.getNodeType( builder );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst snippet = this.callNode.build( builder, 'void' );\n\n\t\tif ( snippet !== '' ) {\n\n\t\t\tbuilder.addLineFlowCode( snippet, this );\n\n\t\t}\n\n\t\treturn this.outputNode.build( builder );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a bypass node.\n *\n * @tsl\n * @function\n * @param {Node} outputNode - The output node.\n * @param {Node} callNode - The call node.\n * @returns {BypassNode}\n */\nconst bypass = /*@__PURE__*/ nodeProxy( BypassNode ).setParameterLength( 2 );\n\naddMethodChaining( 'bypass', bypass );\n\n/**\n * This node allows to remap a node value from one range into another. E.g a value of\n * `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.\n * `remap` takes care of that and converts the original value of `0.4` to `0.5`.\n *\n * @tsl\n * @function\n * @param {Node} node - The node that should be remapped.\n * @param {Node} inLowNode - The source or current lower bound of the range.\n * @param {Node} inHighNode - The source or current upper bound of the range.\n * @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.\n * @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.\n * @returns {Node}\n */\nconst remap = /*@__PURE__*/ Fn( ( [ node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ), doClamp = bool( false ) ] ) => {\n\n\tlet t = node.sub( inLowNode ).div( inHighNode.sub( inLowNode ) );\n\n\tif ( defined( doClamp ) ) t = t.clamp();\n\n\treturn t.mul( outHighNode.sub( outLowNode ) ).add( outLowNode );\n\n} );\n\n/**\n * This node allows to remap a node value from one range into another but with enabled clamping. E.g a value of\n * `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.\n * `remapClamp` takes care of that and converts the original value of `0.4` to `0.5`.\n *\n * @tsl\n * @function\n * @param {Node} node - The node that should be remapped.\n * @param {Node} inLowNode - The source or current lower bound of the range.\n * @param {Node} inHighNode - The source or current upper bound of the range.\n * @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.\n * @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.\n * @returns {Node}\n */\nfunction remapClamp( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {\n\n\treturn remap( node, inLowNode, inHighNode, outLowNode, outHighNode, true );\n\n}\n\naddMethodChaining( 'remap', remap );\naddMethodChaining( 'remapClamp', remapClamp );\n\n/**\n * This class can be used to implement basic expressions in shader code.\n * Basic examples for that are `return`, `continue` or `discard` statements.\n *\n * @augments Node\n */\nclass ExpressionNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ExpressionNode';\n\n\t}\n\n\t/**\n\t * Constructs a new expression node.\n\t *\n\t * @param {string} [snippet=''] - The native code snippet.\n\t * @param {string} [nodeType='void'] - The node type.\n\t */\n\tconstructor( snippet = '', nodeType = 'void' ) {\n\n\t\tsuper( nodeType );\n\n\t\t/**\n\t\t * The native code snippet.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.snippet = snippet;\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst type = this.getNodeType( builder );\n\t\tconst snippet = this.snippet;\n\n\t\tif ( type === 'void' ) {\n\n\t\t\tbuilder.addLineFlowCode( snippet, this );\n\n\t\t} else {\n\n\t\t\treturn builder.format( snippet, type, output );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * TSL function for creating an expression node.\n *\n * @tsl\n * @function\n * @param {string} [snippet] - The native code snippet.\n * @param {?string} [nodeType='void'] - The node type.\n * @returns {ExpressionNode}\n */\nconst expression = /*@__PURE__*/ nodeProxy( ExpressionNode ).setParameterLength( 1, 2 );\n\n/**\n * Represents a `discard` shader operation in TSL.\n *\n * @tsl\n * @function\n * @param {?ConditionalNode} conditional - An optional conditional node. It allows to decide whether the discard should be executed or not.\n * @return {Node} The `discard` expression.\n */\nconst Discard = ( conditional ) => ( conditional ? select( conditional, expression( 'discard' ) ) : expression( 'discard' ) ).toStack();\n\n/**\n * Represents a `return` shader operation in TSL.\n *\n * @tsl\n * @function\n * @return {ExpressionNode} The `return` expression.\n */\nconst Return = () => expression( 'return' ).toStack();\n\naddMethodChaining( 'discard', Discard );\n\n/**\n * Normally, tone mapping and color conversion happens automatically just\n * before outputting a pixel to the default (screen) framebuffer. In certain\n * post processing setups this is too late because some effects such as FXAA\n * require e.g. sRGB input. For such scenarios, `RenderOutputNode` can be used\n * to apply tone mapping and color space conversion at an arbitrary point\n * in the effect chain.\n *\n * When applying tone mapping and color space conversion manually with this node,\n * you have to set {@link RenderPipeline#outputColorTransform} to `false`.\n *\n * ```js\n * const postProcessing = new RenderPipeline( renderer );\n * postProcessing.outputColorTransform = false;\n *\n * const scenePass = pass( scene, camera );\n * const outputPass = renderOutput( scenePass );\n *\n * postProcessing.outputNode = outputPass;\n * ```\n *\n * @augments TempNode\n */\nclass RenderOutputNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'RenderOutputNode';\n\n\t}\n\n\t/**\n\t * Constructs a new render output node.\n\t *\n\t * @param {Node} colorNode - The color node to process.\n\t * @param {?number} toneMapping - The tone mapping type.\n\t * @param {?string} outputColorSpace - The output color space.\n\t */\n\tconstructor( colorNode, toneMapping, outputColorSpace ) {\n\n\t\tsuper( 'vec4' );\n\n\t\t/**\n\t\t * The color node to process.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.colorNode = colorNode;\n\n\t\t/**\n\t\t * The tone mapping type.\n\t\t *\n\t\t * @private\n\t\t * @type {?number}\n\t\t */\n\t\tthis._toneMapping = toneMapping;\n\n\t\t/**\n\t\t * The output color space.\n\t\t *\n\t\t * @type {?string}\n\t\t */\n\t\tthis.outputColorSpace = outputColorSpace;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRenderOutputNode = true;\n\n\t}\n\n\t/**\n\t * Sets the tone mapping type.\n\t *\n\t * @param {number} value - The tone mapping type.\n\t * @return {ToneMappingNode} A reference to this node.\n\t */\n\tsetToneMapping( value ) {\n\n\t\tthis._toneMapping = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Gets the tone mapping type.\n\t *\n\t * @returns {number} The tone mapping type.\n\t */\n\tgetToneMapping() {\n\n\t\treturn this._toneMapping;\n\n\t}\n\n\tsetup( { context } ) {\n\n\t\tlet outputNode = this.colorNode || context.color;\n\n\t\t// tone mapping\n\n\t\tconst toneMapping = ( this._toneMapping !== null ? this._toneMapping : context.toneMapping ) || NoToneMapping;\n\t\tconst outputColorSpace = ( this.outputColorSpace !== null ? this.outputColorSpace : context.outputColorSpace ) || NoColorSpace;\n\n\t\tif ( toneMapping !== NoToneMapping ) {\n\n\t\t\toutputNode = outputNode.toneMapping( toneMapping );\n\n\t\t}\n\n\t\t// working to output color space\n\n\t\tif ( outputColorSpace !== NoColorSpace && outputColorSpace !== ColorManagement.workingColorSpace ) {\n\n\t\t\toutputNode = outputNode.workingToColorSpace( outputColorSpace );\n\n\t\t}\n\n\t\treturn outputNode;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a render output node.\n *\n * @tsl\n * @function\n * @param {Node} color - The color node to process.\n * @param {?number} [toneMapping=null] - The tone mapping type.\n * @param {?string} [outputColorSpace=null] - The output color space.\n * @returns {RenderOutputNode}\n */\nconst renderOutput = ( color, toneMapping = null, outputColorSpace = null ) => new RenderOutputNode( nodeObject( color ), toneMapping, outputColorSpace );\n\naddMethodChaining( 'renderOutput', renderOutput );\n\nclass DebugNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'DebugNode';\n\n\t}\n\n\tconstructor( node, callback = null ) {\n\n\t\tsuper();\n\n\t\tthis.node = node;\n\t\tthis.callback = callback;\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.node.getNodeType( builder );\n\n\t}\n\n\tsetup( builder ) {\n\n\t\treturn this.node.build( builder );\n\n\t}\n\n\tanalyze( builder ) {\n\n\t\treturn this.node.build( builder );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst callback = this.callback;\n\t\tconst snippet = this.node.build( builder );\n\n\t\tif ( callback !== null ) {\n\n\t\t\tcallback( builder, snippet );\n\n\t\t} else {\n\n\t\t\tconst title = '--- TSL debug - ' + builder.shaderStage + ' shader ---';\n\t\t\tconst border = '-'.repeat( title.length );\n\n\t\t\tlet code = '';\n\t\t\tcode += '// #' + title + '#\\n';\n\t\t\tcode += builder.flow.code.replace( /^\\t/mg, '' ) + '\\n';\n\t\t\tcode += '/* ... */ ' + snippet + ' /* ... */\\n';\n\t\t\tcode += '// #' + border + '#\\n';\n\n\t\t\tlog$1( code );\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a debug node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node to debug.\n * @param {?Function} [callback=null] - Optional callback function to handle the debug output.\n * @returns {DebugNode}\n */\nconst debug = ( node, callback = null ) => new DebugNode( nodeObject( node ), callback ).toStack();\n\naddMethodChaining( 'debug', debug );\n\n/**\n * InspectorBase is the base class for all inspectors.\n *\n * @class InspectorBase\n * @augments EventDispatcher\n */\nclass InspectorBase extends EventDispatcher {\n\n\t/**\n\t * Creates a new InspectorBase.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The renderer associated with this inspector.\n\t\t *\n\t\t * @type {WebGLRenderer}\n\t\t * @private\n\t\t */\n\t\tthis._renderer = null;\n\n\t\t/**\n\t\t * The current frame being processed.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.currentFrame = null;\n\n\t}\n\n\t/**\n\t * Returns the node frame for the current renderer.\n\t *\n\t * @return {Object} The node frame.\n\t */\n\tget nodeFrame() {\n\n\t\treturn this._renderer._nodes.nodeFrame;\n\n\t}\n\n\t/**\n\t * Sets the renderer for this inspector.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer to associate with this inspector.\n\t * @return {InspectorBase} This inspector instance.\n\t */\n\tsetRenderer( renderer ) {\n\n\t\tthis._renderer = renderer;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the renderer associated with this inspector.\n\t *\n\t * @return {WebGLRenderer} The associated renderer.\n\t */\n\tgetRenderer() {\n\n\t\treturn this._renderer;\n\n\t}\n\n\t/**\n\t * Initializes the inspector.\n\t */\n\tinit() { }\n\n\t/**\n\t * Called when a frame begins.\n\t */\n\tbegin() { }\n\n\t/**\n\t * Called when a frame ends.\n\t */\n\tfinish() { }\n\n\t/**\n\t * Inspects a node.\n\t *\n\t * @param {Node} node - The node to inspect.\n\t */\n\tinspect( /*node*/ ) { }\n\n\t/**\n\t * When a compute operation is performed.\n\t *\n\t * @param {ComputeNode} computeNode - The compute node being executed.\n\t * @param {number|Array<number>} dispatchSizeOrCount - The dispatch size or count.\n\t */\n\tcomputeAsync( /*computeNode, dispatchSizeOrCount*/ ) { }\n\n\t/**\n\t * Called when a compute operation begins.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t * @param {ComputeNode} computeNode - The compute node being executed.\n\t */\n\tbeginCompute( /*uid, computeNode*/ ) { }\n\n\t/**\n\t * Called when a compute operation ends.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t * @param {ComputeNode} computeNode - The compute node being executed.\n\t */\n\tfinishCompute( /*uid*/ ) { }\n\n\t/**\n\t * Called when a render operation begins.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t * @param {Scene} scene - The scene being rendered.\n\t * @param {Camera} camera - The camera being used for rendering.\n\t * @param {?WebGLRenderTarget} renderTarget - The render target, if any.\n\t */\n\tbeginRender( /*uid, scene, camera, renderTarget*/ ) { }\n\n\t/**\n\t * Called when an animation loop ends.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t */\n\tfinishRender( /*uid*/ ) { }\n\n\t/**\n\t * Called when a texture copy operation is performed.\n\t *\n\t * @param {Texture} srcTexture - The source texture.\n\t * @param {Texture} dstTexture - The destination texture.\n\t */\n\tcopyTextureToTexture( /*srcTexture, dstTexture*/ ) { }\n\n\t/**\n\t * Called when a framebuffer copy operation is performed.\n\t *\n\t * @param {Texture} framebufferTexture - The texture associated with the framebuffer.\n\t */\n\tcopyFramebufferToTexture( /*framebufferTexture*/ ) { }\n\n}\n\n/**\n * InspectorNode is a wrapper node that allows inspection of node values during rendering.\n * It can be used to debug or analyze node outputs in the rendering pipeline.\n *\n * @augments Node\n */\nclass InspectorNode extends Node {\n\n\t/**\n\t * Returns the type of the node.\n\t *\n\t * @returns {string}\n\t */\n\tstatic get type() {\n\n\t\treturn 'InspectorNode';\n\n\t}\n\n\t/**\n\t * Creates an InspectorNode.\n\t *\n\t * @param {Node} node - The node to inspect.\n\t * @param {string} [name=''] - Optional name for the inspector node.\n\t * @param {Function|null} [callback=null] - Optional callback to modify the node during setup.\n\t */\n\tconstructor( node, name = '', callback = null ) {\n\n\t\tsuper();\n\n\t\tthis.node = node;\n\t\tthis.name = name;\n\t\tthis.callback = callback;\n\n\t\tthis.updateType = NodeUpdateType.FRAME;\n\n\t\tthis.isInspectorNode = true;\n\n\t}\n\n\t/**\n\t * Returns the name of the inspector node.\n\t *\n\t * @returns {string}\n\t */\n\tgetName() {\n\n\t\treturn this.name || this.node.name;\n\n\t}\n\n\t/**\n\t * Updates the inspector node, allowing inspection of the wrapped node.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tframe.renderer.inspector.inspect( this );\n\n\t}\n\n\t/**\n\t * Returns the type of the wrapped node.\n\t *\n\t * @param {NodeBuilder} builder - The node builder.\n\t * @returns {string}\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.node.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Sets up the inspector node.\n\t *\n\t * @param {NodeBuilder} builder - The node builder.\n\t * @returns {Node} The setup node.\n\t */\n\tsetup( builder ) {\n\n\t\tlet node = this.node;\n\n\t\tif ( builder.context.inspector === true && this.callback !== null ) {\n\n\t\t\tnode = this.callback( node );\n\n\t\t}\n\n\t\tif ( builder.renderer.backend.isWebGPUBackend !== true && builder.renderer.inspector.constructor !== InspectorBase ) {\n\n\t\t\twarnOnce( 'TSL: \".toInspector()\" is only available with WebGPU.' );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n}\n\n/**\n * Creates an inspector node to wrap around a given node for inspection purposes.\n *\n * @tsl\n * @param {Node} node - The node to inspect.\n * @param {string} [name=''] - Optional name for the inspector node.\n * @param {Function|null} [callback=null] - Optional callback to modify the node during setup.\n * @returns {Node} The inspector node.\n */\nfunction inspector( node, name = '', callback = null ) {\n\n\tnode = nodeObject( node );\n\n\treturn node.before( new InspectorNode( node, name, callback ) );\n\n}\n\naddMethodChaining( 'toInspector', inspector );\n\nfunction addNodeElement( name/*, nodeElement*/ ) {\n\n\twarn( 'TSL: AddNodeElement has been removed in favor of tree-shaking. Trying add', name );\n\n}\n\n/**\n * Base class for representing shader attributes as nodes.\n *\n * @augments Node\n */\nclass AttributeNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'AttributeNode';\n\n\t}\n\n\t/**\n\t * Constructs a new attribute node.\n\t *\n\t * @param {string} attributeName - The name of the attribute.\n\t * @param {?string} nodeType - The node type.\n\t */\n\tconstructor( attributeName, nodeType = null ) {\n\n\t\tsuper( nodeType );\n\n\t\t/**\n\t\t * `AttributeNode` sets this property to `true` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t\tthis._attributeName = attributeName;\n\n\t}\n\n\tgetHash( builder ) {\n\n\t\treturn this.getAttributeName( builder );\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\tlet nodeType = this.nodeType;\n\n\t\tif ( nodeType === null ) {\n\n\t\t\tconst attributeName = this.getAttributeName( builder );\n\n\t\t\tif ( builder.hasGeometryAttribute( attributeName ) ) {\n\n\t\t\t\tconst attribute = builder.geometry.getAttribute( attributeName );\n\n\t\t\t\tnodeType = builder.getTypeFromAttribute( attribute );\n\n\t\t\t} else {\n\n\t\t\t\tnodeType = 'float';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn nodeType;\n\n\t}\n\n\t/**\n\t * Sets the attribute name to the given value. The method can be\n\t * overwritten in derived classes if the final name must be computed\n\t * analytically.\n\t *\n\t * @param {string} attributeName - The name of the attribute.\n\t * @return {AttributeNode} A reference to this node.\n\t */\n\tsetAttributeName( attributeName ) {\n\n\t\tthis._attributeName = attributeName;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the attribute name of this node. The method can be\n\t * overwritten in derived classes if the final name must be computed\n\t * analytically.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The attribute name.\n\t */\n\tgetAttributeName( /*builder*/ ) {\n\n\t\treturn this._attributeName;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst attributeName = this.getAttributeName( builder );\n\t\tconst nodeType = this.getNodeType( builder );\n\t\tconst geometryAttribute = builder.hasGeometryAttribute( attributeName );\n\n\t\tif ( geometryAttribute === true ) {\n\n\t\t\tconst attribute = builder.geometry.getAttribute( attributeName );\n\t\t\tconst attributeType = builder.getTypeFromAttribute( attribute );\n\n\t\t\tconst nodeAttribute = builder.getAttribute( attributeName, attributeType );\n\n\t\t\tif ( builder.shaderStage === 'vertex' ) {\n\n\t\t\t\treturn builder.format( nodeAttribute.name, attributeType, nodeType );\n\n\t\t\t} else {\n\n\t\t\t\tconst nodeVarying = varying( this );\n\n\t\t\t\treturn nodeVarying.build( builder, nodeType );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\twarn( `AttributeNode: Vertex attribute \"${ attributeName }\" not found on geometry.` );\n\n\t\t\treturn builder.generateConst( nodeType );\n\n\t\t}\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.global = this.global;\n\t\tdata._attributeName = this._attributeName;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.global = data.global;\n\t\tthis._attributeName = data._attributeName;\n\n\t}\n\n}\n\n/**\n * TSL function for creating an attribute node.\n *\n * @tsl\n * @function\n * @param {string} name - The name of the attribute.\n * @param {?string} [nodeType=null] - The node type.\n * @returns {AttributeNode}\n */\nconst attribute = ( name, nodeType = null ) => new AttributeNode( name, nodeType );\n\n/**\n * TSL function for creating an uv attribute node with the given index.\n *\n * @tsl\n * @function\n * @param {number} [index=0] - The uv index.\n * @return {AttributeNode<vec2>} The uv attribute node.\n */\nconst uv$1 = ( index = 0 ) => attribute( 'uv' + ( index > 0 ? index : '' ), 'vec2' );\n\n/**\n * A node that represents the dimensions of a texture. The texture size is\n * retrieved in the shader via built-in shader functions like `textureDimensions()`\n * or `textureSize()`.\n *\n * @augments Node\n */\nclass TextureSizeNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'TextureSizeNode';\n\n\t}\n\n\t/**\n\t * Constructs a new texture size node.\n\t *\n\t * @param {TextureNode} textureNode - A texture node which size should be retrieved.\n\t * @param {?Node<int>} [levelNode=null] - A level node which defines the requested mip.\n\t */\n\tconstructor( textureNode, levelNode = null ) {\n\n\t\tsuper( 'uvec2' );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isTextureSizeNode = true;\n\n\t\t/**\n\t\t * A texture node which size should be retrieved.\n\t\t *\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis.textureNode = textureNode;\n\n\t\t/**\n\t\t * A level node which defines the requested mip.\n\t\t *\n\t\t * @type {Node<int>}\n\t\t * @default null\n\t\t */\n\t\tthis.levelNode = levelNode;\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst textureProperty = this.textureNode.build( builder, 'property' );\n\t\tconst level = this.levelNode === null ? '0' : this.levelNode.build( builder, 'int' );\n\n\t\treturn builder.format( `${ builder.getMethod( 'textureDimensions' ) }( ${ textureProperty }, ${ level } )`, this.getNodeType( builder ), output );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a texture size node.\n *\n * @tsl\n * @function\n * @param {TextureNode} textureNode - A texture node which size should be retrieved.\n * @param {?Node<int>} [levelNode=null] - A level node which defines the requested mip.\n * @returns {TextureSizeNode}\n */\nconst textureSize = /*@__PURE__*/ nodeProxy( TextureSizeNode ).setParameterLength( 1, 2 );\n\n/**\n * A special type of uniform node that computes the\n * maximum mipmap level for a given texture node.\n *\n * ```js\n * const level = maxMipLevel( textureNode );\n * ```\n *\n * @augments UniformNode\n */\nclass MaxMipLevelNode extends UniformNode {\n\n\tstatic get type() {\n\n\t\treturn 'MaxMipLevelNode';\n\n\t}\n\n\t/**\n\t * Constructs a new max mip level node.\n\t *\n\t * @param {TextureNode} textureNode - The texture node to compute the max mip level for.\n\t */\n\tconstructor( textureNode ) {\n\n\t\tsuper( 0 );\n\n\t\t/**\n\t\t * The texture node to compute the max mip level for.\n\t\t *\n\t\t * @private\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis._textureNode = textureNode;\n\n\t\t/**\n\t\t * The `updateType` is set to `NodeUpdateType.FRAME` since the node updates\n\t\t * the texture once per frame in its {@link MaxMipLevelNode#update} method.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'frame'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.FRAME;\n\n\t}\n\n\t/**\n\t * The texture node to compute the max mip level for.\n\t *\n\t * @readonly\n\t * @type {TextureNode}\n\t */\n\tget textureNode() {\n\n\t\treturn this._textureNode;\n\n\t}\n\n\t/**\n\t * The texture.\n\t *\n\t * @readonly\n\t * @type {Texture}\n\t */\n\tget texture() {\n\n\t\treturn this._textureNode.value;\n\n\t}\n\n\tupdate() {\n\n\t\tconst texture = this.texture;\n\t\tconst images = texture.images;\n\t\tconst image = ( images && images.length > 0 ) ? ( ( images[ 0 ] && images[ 0 ].image ) || images[ 0 ] ) : texture.image;\n\n\t\tif ( image && image.width !== undefined ) {\n\n\t\t\tconst { width, height } = image;\n\n\t\t\tthis.value = Math.log2( Math.max( width, height ) );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * TSL function for creating a max mip level node.\n *\n * @tsl\n * @function\n * @param {TextureNode} textureNode - The texture node to compute the max mip level for.\n * @returns {MaxMipLevelNode}\n */\nconst maxMipLevel = /*@__PURE__*/ nodeProxy( MaxMipLevelNode ).setParameterLength( 1 );\n\n/**\n * Custom error class for node-related errors, including stack trace information.\n */\nclass NodeError extends Error {\n\n\tconstructor( message, stackTrace = null ) {\n\n\t\tsuper( message );\n\n\t\t/**\n\t\t * The name of the error.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = 'NodeError';\n\n\t\t/**\n\t\t * The stack trace associated with the error.\n\t\t *\n\t\t * @type {?StackTrace}\n\t\t */\n\t\tthis.stackTrace = stackTrace;\n\n\t}\n\n}\n\nconst EmptyTexture$1 = /*@__PURE__*/ new Texture();\n\n/**\n * This type of uniform node represents a 2D texture.\n *\n * @augments UniformNode\n */\nclass TextureNode extends UniformNode {\n\n\tstatic get type() {\n\n\t\treturn 'TextureNode';\n\n\t}\n\n\t/**\n\t * Constructs a new texture node.\n\t *\n\t * @param {Texture} [value=EmptyTexture] - The texture.\n\t * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.\n\t * @param {?Node<int>} [levelNode=null] - The level node.\n\t * @param {?Node<float>} [biasNode=null] - The bias node.\n\t */\n\tconstructor( value = EmptyTexture$1, uvNode = null, levelNode = null, biasNode = null ) {\n\n\t\tsuper( value );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isTextureNode = true;\n\n\t\t/**\n\t\t * Represents the texture coordinates.\n\t\t *\n\t\t * @type {?Node<vec2|vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.uvNode = uvNode;\n\n\t\t/**\n\t\t * Represents the mip level that should be selected.\n\t\t *\n\t\t * @type {?Node<int>}\n\t\t * @default null\n\t\t */\n\t\tthis.levelNode = levelNode;\n\n\t\t/**\n\t\t * Represents the bias to be applied during level-of-detail computation.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.biasNode = biasNode;\n\n\t\t/**\n\t\t * Represents a reference value a texture sample is compared to.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.compareNode = null;\n\n\t\t/**\n\t\t * When using texture arrays, the depth node defines the layer to select.\n\t\t *\n\t\t * @type {?Node<int>}\n\t\t * @default null\n\t\t */\n\t\tthis.depthNode = null;\n\n\t\t/**\n\t\t * When defined, a texture is sampled using explicit gradients.\n\t\t *\n\t\t * @type {?Array<Node<vec2>>}\n\t\t * @default null\n\t\t */\n\t\tthis.gradNode = null;\n\n\t\t/**\n\t\t * Represents the optional texel offset applied to the unnormalized texture\n\t\t * coordinate before sampling the texture.\n\t\t *\n\t\t * @type {?Node<ivec2|ivec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.offsetNode = null;\n\n\t\t/**\n\t\t * Whether texture values should be sampled or fetched.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.sampler = true;\n\n\t\t/**\n\t\t * Whether the uv transformation matrix should be\n\t\t * automatically updated or not. Use `setUpdateMatrix()`\n\t\t * if you want to change the value of the property.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.updateMatrix = false;\n\n\t\t/**\n\t\t * By default the `update()` method is not executed. Depending on\n\t\t * whether a uv transformation matrix and/or flipY is applied, `update()`\n\t\t * is executed per object.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'none'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.NONE;\n\n\t\t/**\n\t\t * The reference node.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.referenceNode = null;\n\n\t\t/**\n\t\t * The texture value is stored in a private property.\n\t\t *\n\t\t * @private\n\t\t * @type {Texture}\n\t\t */\n\t\tthis._value = value;\n\n\t\t/**\n\t\t * The uniform node that represents the uv transformation matrix.\n\t\t *\n\t\t * @private\n\t\t * @type {?UniformNode<mat3>}\n\t\t * @default null\n\t\t */\n\t\tthis._matrixUniform = null;\n\n\t\t/**\n\t\t * The uniform node that represents the y-flip. Only required for WebGL.\n\t\t *\n\t\t * @private\n\t\t * @type {?UniformNode<bool>}\n\t\t * @default null\n\t\t */\n\t\tthis._flipYUniform = null;\n\n\t\tthis.setUpdateMatrix( uvNode === null );\n\n\t}\n\n\tset value( value ) {\n\n\t\tif ( this.referenceNode ) {\n\n\t\t\tthis.referenceNode.value = value;\n\n\t\t} else {\n\n\t\t\tthis._value = value;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The texture value.\n\t *\n\t * @type {Texture}\n\t */\n\tget value() {\n\n\t\treturn this.referenceNode ? this.referenceNode.value : this._value;\n\n\t}\n\n\t/**\n\t * Overwritten since the uniform hash is defined by the texture's UUID.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The uniform hash.\n\t */\n\tgetUniformHash( /*builder*/ ) {\n\n\t\treturn this.value.uuid;\n\n\t}\n\n\t/**\n\t * Overwritten since the node type is inferred from the texture type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( /*builder*/ ) {\n\n\t\tif ( this.value.isDepthTexture === true ) return 'float';\n\n\t\tif ( this.value.type === UnsignedIntType ) {\n\n\t\t\treturn 'uvec4';\n\n\t\t} else if ( this.value.type === IntType ) {\n\n\t\t\treturn 'ivec4';\n\n\t\t}\n\n\t\treturn 'vec4';\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to return a fixed value `'texture'`.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( /*builder*/ ) {\n\n\t\treturn 'texture';\n\n\t}\n\n\t/**\n\t * Returns a default uvs based on the current texture's channel.\n\t *\n\t * @return {AttributeNode<vec2>} The default uvs.\n\t */\n\tgetDefaultUV() {\n\n\t\treturn uv$1( this.value.channel );\n\n\t}\n\n\t/**\n\t * Overwritten to always return the texture reference of the node.\n\t *\n\t * @param {any} state - This method can be invocated in different contexts so `state` can refer to any object type.\n\t * @return {Texture} The texture reference.\n\t */\n\tupdateReference( /*state*/ ) {\n\n\t\treturn this.value;\n\n\t}\n\n\t/**\n\t * Transforms the given uv node with the texture transformation matrix.\n\t *\n\t * @param {Node} uvNode - The uv node to transform.\n\t * @return {Node} The transformed uv node.\n\t */\n\tgetTransformedUV( uvNode ) {\n\n\t\tif ( this._matrixUniform === null ) this._matrixUniform = uniform( this.value.matrix );\n\n\t\treturn this._matrixUniform.mul( vec3( uvNode, 1 ) ).xy;\n\n\t}\n\n\t/**\n\t * Defines whether the uv transformation matrix should automatically be updated or not.\n\t *\n\t * @param {boolean} value - The update toggle.\n\t * @return {TextureNode} A reference to this node.\n\t */\n\tsetUpdateMatrix( value ) {\n\n\t\tthis.updateMatrix = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Setups the uv node. Depending on the backend as well as texture's image and type, it might be necessary\n\t * to modify the uv node for correct sampling.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node} uvNode - The uv node to setup.\n\t * @return {Node} The updated uv node.\n\t */\n\tsetupUV( builder, uvNode ) {\n\n\t\tif ( builder.isFlipY() ) {\n\n\t\t\tif ( this._flipYUniform === null ) this._flipYUniform = uniform( false );\n\n\t\t\tuvNode = uvNode.toVar();\n\n\t\t\tif ( this.sampler ) {\n\n\t\t\t\tuvNode = this._flipYUniform.select( uvNode.flipY(), uvNode );\n\n\t\t\t} else {\n\n\t\t\t\tuvNode = this._flipYUniform.select( uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) ), uvNode );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn uvNode;\n\n\t}\n\n\t/**\n\t * Setups texture node by preparing the internal nodes for code generation.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetup( builder ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tproperties.referenceNode = this.referenceNode;\n\n\t\t//\n\n\t\tconst texture = this.value;\n\n\t\tif ( ! texture || texture.isTexture !== true ) {\n\n\t\t\tthrow new NodeError( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().', this.stackTrace );\n\n\t\t}\n\n\t\t//\n\n\t\tconst uvNode = Fn( () => {\n\n\t\t\tlet uvNode = this.uvNode;\n\n\t\t\tif ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {\n\n\t\t\t\tuvNode = builder.context.getUV( this, builder );\n\n\t\t\t}\n\n\t\t\tif ( ! uvNode ) uvNode = this.getDefaultUV();\n\n\t\t\tif ( this.updateMatrix === true ) {\n\n\t\t\t\tuvNode = this.getTransformedUV( uvNode );\n\n\t\t\t}\n\n\t\t\tuvNode = this.setupUV( builder, uvNode );\n\n\t\t\t//\n\n\t\t\tthis.updateType = ( this._matrixUniform !== null || this._flipYUniform !== null ) ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;\n\n\t\t\t//\n\n\t\t\treturn uvNode;\n\n\t\t} )();\n\n\t\t//\n\n\t\tlet levelNode = this.levelNode;\n\n\t\tif ( levelNode === null && builder.context.getTextureLevel ) {\n\n\t\t\tlevelNode = builder.context.getTextureLevel( this );\n\n\t\t}\n\n\t\t//\n\n\t\tlet compareNode = null;\n\t\tlet compareStepNode = null;\n\n\t\tif ( this.compareNode !== null ) {\n\n\t\t\tif ( builder.renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {\n\n\t\t\t\tcompareNode = this.compareNode;\n\n\t\t\t} else {\n\n\t\t\t\tconst compareFunction = texture.compareFunction;\n\n\t\t\t\tif ( compareFunction === null || compareFunction === LessCompare || compareFunction === LessEqualCompare || compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {\n\n\t\t\t\t\tcompareStepNode = this.compareNode;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcompareNode = this.compareNode;\n\n\t\t\t\t\twarnOnce( 'TSL: Only \"LessCompare\", \"LessEqualCompare\", \"GreaterCompare\" and \"GreaterEqualCompare\" are supported for depth texture comparison fallback.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.uvNode = uvNode;\n\t\tproperties.levelNode = levelNode;\n\t\tproperties.biasNode = this.biasNode;\n\t\tproperties.compareNode = compareNode;\n\t\tproperties.compareStepNode = compareStepNode;\n\t\tproperties.gradNode = this.gradNode;\n\t\tproperties.depthNode = this.depthNode;\n\t\tproperties.offsetNode = this.offsetNode;\n\n\t}\n\n\t/**\n\t * Generates the uv code snippet.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node} uvNode - The uv node to generate code for.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerateUV( builder, uvNode ) {\n\n\t\treturn uvNode.build( builder, this.sampler === true ? 'vec2' : 'ivec2' );\n\n\t}\n\n\t/**\n\t * Generates the offset code snippet.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node} offsetNode - The offset node to generate code for.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerateOffset( builder, offsetNode ) {\n\n\t\treturn offsetNode.build( builder, 'ivec2' );\n\n\t}\n\n\t/**\n\t * Generates the snippet for the texture sampling.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} textureProperty - The texture property.\n\t * @param {string} uvSnippet - The uv snippet.\n\t * @param {?string} levelSnippet - The level snippet.\n\t * @param {?string} biasSnippet - The bias snippet.\n\t * @param {?string} depthSnippet - The depth snippet.\n\t * @param {?string} compareSnippet - The compare snippet.\n\t * @param {?Array<string>} gradSnippet - The grad snippet.\n\t * @param {?string} offsetSnippet - The offset snippet.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet ) {\n\n\t\tconst texture = this.value;\n\n\t\tlet snippet;\n\n\t\tif ( biasSnippet ) {\n\n\t\t\tsnippet = builder.generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet );\n\n\t\t} else if ( gradSnippet ) {\n\n\t\t\tsnippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet );\n\n\t\t} else if ( compareSnippet ) {\n\n\t\t\tsnippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet );\n\n\t\t} else if ( this.sampler === false ) {\n\n\t\t\tsnippet = builder.generateTextureLoad( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );\n\n\t\t} else if ( levelSnippet ) {\n\n\t\t\tsnippet = builder.generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );\n\n\t\t} else {\n\n\t\t\tsnippet = builder.generateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet );\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Generates the code snippet of the texture node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} output - The current output.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerate( builder, output ) {\n\n\t\tconst texture = this.value;\n\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tconst textureProperty = super.generate( builder, 'property' );\n\n\t\tif ( /^sampler/.test( output ) ) {\n\n\t\t\treturn textureProperty + '_sampler';\n\n\t\t} else if ( builder.isReference( output ) ) {\n\n\t\t\treturn textureProperty;\n\n\t\t} else {\n\n\t\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\t\tconst nodeType = this.getNodeType( builder );\n\n\t\t\tlet propertyName = nodeData.propertyName;\n\n\t\t\tif ( propertyName === undefined ) {\n\n\t\t\t\tconst { uvNode, levelNode, biasNode, compareNode, compareStepNode, depthNode, gradNode, offsetNode } = properties;\n\n\t\t\t\tconst uvSnippet = this.generateUV( builder, uvNode );\n\t\t\t\tconst levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;\n\t\t\t\tconst biasSnippet = biasNode ? biasNode.build( builder, 'float' ) : null;\n\t\t\t\tconst depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;\n\t\t\t\tconst compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;\n\t\t\t\tconst compareStepSnippet = compareStepNode ? compareStepNode.build( builder, 'float' ) : null;\n\t\t\t\tconst gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;\n\t\t\t\tconst offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;\n\n\t\t\t\tlet finalDepthSnippet = depthSnippet;\n\n\t\t\t\tif ( finalDepthSnippet === null && texture.isArrayTexture && this.isTexture3DNode !== true ) {\n\n\t\t\t\t\tfinalDepthSnippet = '0';\n\n\t\t\t\t}\n\n\t\t\t\tconst nodeVar = builder.getVarFromNode( this );\n\n\t\t\t\tpropertyName = builder.getPropertyName( nodeVar );\n\n\t\t\t\tlet snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, finalDepthSnippet, compareSnippet, gradSnippet, offsetSnippet );\n\n\t\t\t\tif ( compareStepSnippet !== null ) {\n\n\t\t\t\t\tconst compareFunction = texture.compareFunction;\n\n\t\t\t\t\tif ( compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {\n\n\t\t\t\t\t\tsnippet = step( expression( snippet, nodeType ), expression( compareStepSnippet, 'float' ) ).build( builder, nodeType );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tsnippet = step( expression( compareStepSnippet, 'float' ), expression( snippet, nodeType ) ).build( builder, nodeType );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbuilder.addLineFlowCode( `${propertyName} = ${snippet}`, this );\n\n\t\t\t\tnodeData.snippet = snippet;\n\t\t\t\tnodeData.propertyName = propertyName;\n\n\t\t\t}\n\n\t\t\tlet snippet = propertyName;\n\n\t\t\tif ( builder.needsToWorkingColorSpace( texture ) ) {\n\n\t\t\t\tsnippet = colorSpaceToWorking( expression( snippet, nodeType ), texture.colorSpace ).setup( builder ).build( builder, nodeType );\n\n\t\t\t}\n\n\t\t\treturn builder.format( snippet, nodeType, output );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the sampler value.\n\t *\n\t * @param {boolean} value - The sampler value to set.\n\t * @return {TextureNode} A reference to this texture node.\n\t */\n\tsetSampler( value ) {\n\n\t\tthis.sampler = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the sampler value.\n\t *\n\t * @return {boolean} The sampler value.\n\t */\n\tgetSampler() {\n\n\t\treturn this.sampler;\n\n\t}\n\n\t// @TODO: Move to TSL\n\n\t/**\n\t * Samples the texture with the given uv node.\n\t *\n\t * @param {Node} uvNode - The uv node.\n\t * @return {TextureNode} A texture node representing the texture sample.\n\t */\n\tsample( uvNode ) {\n\n\t\tconst textureNode = this.clone();\n\t\ttextureNode.uvNode = nodeObject( uvNode );\n\t\ttextureNode.referenceNode = this.getBase();\n\n\t\treturn nodeObject( textureNode );\n\n\t}\n\n\t/**\n\t * TSL function for creating a texture node that fetches/loads texels without interpolation.\n\t *\n\t * @param {Node<uvec2>} uvNode - The uv node.\n\t * @returns {TextureNode} A texture node representing the texture load.\n\t */\n\tload( uvNode ) {\n\n\t\treturn this.sample( uvNode ).setSampler( false );\n\n\t}\n\n\t/**\n\t * Samples a blurred version of the texture by defining an internal bias.\n\t *\n\t * @param {Node<float>} amountNode - How blurred the texture should be.\n\t * @return {TextureNode} A texture node representing the texture sample.\n\t */\n\tblur( amountNode ) {\n\n\t\tconst textureNode = this.clone();\n\t\ttextureNode.biasNode = nodeObject( amountNode ).mul( maxMipLevel( textureNode ) );\n\t\ttextureNode.referenceNode = this.getBase();\n\n\t\tconst map = textureNode.value;\n\n\t\tif ( textureNode.generateMipmaps === false && ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) ) {\n\n\t\t\twarn( 'TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture.' );\n\n\t\t\ttextureNode.biasNode = null;\n\n\t\t}\n\n\t\treturn nodeObject( textureNode );\n\n\t}\n\n\t/**\n\t * Samples a specific mip of the texture.\n\t *\n\t * @param {Node<int>} levelNode - The mip level to sample.\n\t * @return {TextureNode} A texture node representing the texture sample.\n\t */\n\tlevel( levelNode ) {\n\n\t\tconst textureNode = this.clone();\n\t\ttextureNode.levelNode = nodeObject( levelNode );\n\t\ttextureNode.referenceNode = this.getBase();\n\n\t\treturn nodeObject( textureNode );\n\n\t}\n\n\t/**\n\t * Returns the texture size of the requested level.\n\t *\n\t * @param {Node<int>} levelNode - The level to compute the size for.\n\t * @return {TextureSizeNode} The texture size.\n\t */\n\tsize( levelNode ) {\n\n\t\treturn textureSize( this, levelNode );\n\n\t}\n\n\t/**\n\t * Samples the texture with the given bias.\n\t *\n\t * @param {Node<float>} biasNode - The bias node.\n\t * @return {TextureNode} A texture node representing the texture sample.\n\t */\n\tbias( biasNode ) {\n\n\t\tconst textureNode = this.clone();\n\t\ttextureNode.biasNode = nodeObject( biasNode );\n\t\ttextureNode.referenceNode = this.getBase();\n\n\t\treturn nodeObject( textureNode );\n\n\t}\n\n\t/**\n\t * Returns the base texture of this node.\n\t * @return {TextureNode} The base texture node.\n\t */\n\tgetBase() {\n\n\t\treturn this.referenceNode ? this.referenceNode.getBase() : this;\n\n\t}\n\n\t/**\n\t * Samples the texture by executing a compare operation.\n\t *\n\t * @param {Node<float>} compareNode - The node that defines the compare value.\n\t * @return {TextureNode} A texture node representing the texture sample.\n\t */\n\tcompare( compareNode ) {\n\n\t\tconst textureNode = this.clone();\n\t\ttextureNode.compareNode = nodeObject( compareNode );\n\t\ttextureNode.referenceNode = this.getBase();\n\n\t\treturn nodeObject( textureNode );\n\n\t}\n\n\t/**\n\t * Samples the texture using an explicit gradient.\n\t *\n\t * @param {Node<vec2>} gradNodeX - The gradX node.\n\t * @param {Node<vec2>} gradNodeY - The gradY node.\n\t * @return {TextureNode} A texture node representing the texture sample.\n\t */\n\tgrad( gradNodeX, gradNodeY ) {\n\n\t\tconst textureNode = this.clone();\n\t\ttextureNode.gradNode = [ nodeObject( gradNodeX ), nodeObject( gradNodeY ) ];\n\t\ttextureNode.referenceNode = this.getBase();\n\n\t\treturn nodeObject( textureNode );\n\n\t}\n\n\t/**\n\t * Samples the texture by defining a depth node.\n\t *\n\t * @param {Node<int>} depthNode - The depth node.\n\t * @return {TextureNode} A texture node representing the texture sample.\n\t */\n\tdepth( depthNode ) {\n\n\t\tconst textureNode = this.clone();\n\t\ttextureNode.depthNode = nodeObject( depthNode );\n\t\ttextureNode.referenceNode = this.getBase();\n\n\t\treturn nodeObject( textureNode );\n\n\t}\n\n\t/**\n\t * Samples the texture by defining an offset node.\n\t *\n\t * @param {Node<ivec2>} offsetNode - The offset node.\n\t * @return {TextureNode} A texture node representing the texture sample.\n\t */\n\toffset( offsetNode ) {\n\n\t\tconst textureNode = this.clone();\n\t\ttextureNode.offsetNode = nodeObject( offsetNode );\n\t\ttextureNode.referenceNode = this.getBase();\n\n\t\treturn nodeObject( textureNode );\n\n\t}\n\n\t// --\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.value = this.value.toJSON( data.meta ).uuid;\n\t\tdata.sampler = this.sampler;\n\t\tdata.updateMatrix = this.updateMatrix;\n\t\tdata.updateType = this.updateType;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.value = data.meta.textures[ data.value ];\n\t\tthis.sampler = data.sampler;\n\t\tthis.updateMatrix = data.updateMatrix;\n\t\tthis.updateType = data.updateType;\n\n\t}\n\n\t/**\n\t * The update is used to implement the update of the uv transformation matrix.\n\t */\n\tupdate() {\n\n\t\tconst texture = this.value;\n\t\tconst matrixUniform = this._matrixUniform;\n\n\t\tif ( matrixUniform !== null ) matrixUniform.value = texture.matrix;\n\n\t\tif ( texture.matrixAutoUpdate === true ) {\n\n\t\t\ttexture.updateMatrix();\n\n\t\t}\n\n\t\t//\n\n\t\tconst flipYUniform = this._flipYUniform;\n\n\t\tif ( flipYUniform !== null ) {\n\n\t\t\tflipYUniform.value = ( ( texture.image instanceof ImageBitmap && texture.flipY === true ) || texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Clones the texture node.\n\t *\n\t * @return {TextureNode} The cloned texture node.\n\t */\n\tclone() {\n\n\t\tconst newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );\n\t\tnewNode.sampler = this.sampler;\n\t\tnewNode.depthNode = this.depthNode;\n\t\tnewNode.compareNode = this.compareNode;\n\t\tnewNode.gradNode = this.gradNode;\n\t\tnewNode.offsetNode = this.offsetNode;\n\n\t\treturn newNode;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a texture node.\n *\n * @tsl\n * @function\n * @param {?Texture} value - The texture.\n * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.\n * @param {?Node<int>} [levelNode=null] - The level node.\n * @param {?Node<float>} [biasNode=null] - The bias node.\n * @returns {TextureNode}\n */\nconst textureBase = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1, 4 ).setName( 'texture' );\n\n/**\n * TSL function for creating a texture node or sample a texture node already existing.\n *\n * @tsl\n * @function\n * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.\n * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.\n * @param {?Node<int>} [levelNode=null] - The level node.\n * @param {?Node<float>} [biasNode=null] - The bias node.\n * @returns {TextureNode}\n */\nconst texture = ( value = EmptyTexture$1, uvNode = null, levelNode = null, biasNode = null ) => {\n\n\tlet textureNode;\n\n\tif ( value && value.isTextureNode === true ) {\n\n\t\ttextureNode = nodeObject( value.clone() );\n\t\ttextureNode.referenceNode = value.getBase(); // Ensure the reference is set to the original node\n\n\t\tif ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );\n\t\tif ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );\n\t\tif ( biasNode !== null ) textureNode.biasNode = nodeObject( biasNode );\n\n\t} else {\n\n\t\ttextureNode = textureBase( value, uvNode, levelNode, biasNode );\n\n\t}\n\n\treturn textureNode;\n\n};\n\n/**\n * TSL function for creating a uniform texture node.\n *\n * @tsl\n * @function\n * @param {?Texture} value - The texture.\n * @returns {TextureNode}\n */\nconst uniformTexture = ( value = EmptyTexture$1 ) => texture( value );\n\n/**\n * TSL function for creating a texture node that fetches/loads texels without interpolation.\n *\n * @tsl\n * @function\n * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.\n * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.\n * @param {?Node<int>} [levelNode=null] - The level node.\n * @param {?Node<float>} [biasNode=null] - The bias node.\n * @returns {TextureNode}\n */\nconst textureLoad = ( ...params ) => texture( ...params ).setSampler( false );\n\nconst textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );\n\n/**\n * Converts a texture or texture node to a sampler.\n *\n * @tsl\n * @function\n * @param {TextureNode|Texture} value - The texture or texture node to convert.\n * @returns {Node}\n */\nconst sampler = ( value ) => ( value.isNode === true ? value : texture( value ) ).convert( 'sampler' );\n\n/**\n * Converts a texture or texture node to a sampler comparison.\n *\n * @tsl\n * @function\n * @param {TextureNode|Texture} value - The texture or texture node to convert.\n * @returns {Node}\n */\nconst samplerComparison = ( value ) => ( value.isNode === true ? value : texture( value ) ).convert( 'samplerComparison' );\n\n/**\n * A special type of uniform node which represents array-like data\n * as uniform buffers. The access usually happens via `element()`\n * which returns an instance of {@link ArrayElementNode}. For example:\n *\n * ```js\n * const bufferNode = buffer( array, 'mat4', count );\n * const matrixNode = bufferNode.element( index ); // access a matrix from the buffer\n * ```\n * In general, it is recommended to use the more managed {@link UniformArrayNode}\n * since it handles more input types and automatically cares about buffer paddings.\n *\n * @augments UniformNode\n */\nclass BufferNode extends UniformNode {\n\n\tstatic get type() {\n\n\t\treturn 'BufferNode';\n\n\t}\n\n\t/**\n\t * Constructs a new buffer node.\n\t *\n\t * @param {Array<number>} value - Array-like buffer data.\n\t * @param {string} bufferType - The data type of the buffer.\n\t * @param {number} [bufferCount=0] - The count of buffer elements.\n\t */\n\tconstructor( value, bufferType, bufferCount = 0 ) {\n\n\t\tsuper( value, bufferType );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBufferNode = true;\n\n\t\t/**\n\t\t * The data type of the buffer.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.bufferType = bufferType;\n\n\t\t/**\n\t\t * The uniform node that holds the value of the reference node.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.bufferCount = bufferCount;\n\n\t\t/**\n\t\t * An array of update ranges.\n\t\t *\n\t\t * @type {Array<{start: number, count: number}>}\n\t\t */\n\t\tthis.updateRanges = [];\n\n\t}\n\n\t/**\n\t * Adds a range of data in the data array to be updated on the GPU.\n\t *\n\t * @param {number} start - Position at which to start update.\n\t * @param {number} count - The number of components to update.\n\t */\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\t/**\n\t * Clears the update ranges.\n\t */\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\t/**\n\t * The data type of the buffer elements.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The element type.\n\t */\n\tgetElementType( builder ) {\n\n\t\treturn this.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to return a fixed value `'buffer'`.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( /*builder*/ ) {\n\n\t\treturn 'buffer';\n\n\t}\n\n}\n\n/**\n * TSL function for creating a buffer node.\n *\n * @tsl\n * @function\n * @param {Array<number>} value - Array-like buffer data.\n * @param {string} type - The data type of a buffer element.\n * @param {number} count - The count of buffer elements.\n * @returns {BufferNode}\n */\nconst buffer = ( value, type, count ) => new BufferNode( value, type, count );\n\n/**\n * Represents the element access on uniform array nodes.\n *\n * @augments ArrayElementNode\n */\nclass UniformArrayElementNode extends ArrayElementNode {\n\n\tstatic get type() {\n\n\t\treturn 'UniformArrayElementNode';\n\n\t}\n\n\t/**\n\t * Constructs a new buffer node.\n\t *\n\t * @param {UniformArrayNode} uniformArrayNode - The uniform array node to access.\n\t * @param {IndexNode} indexNode - The index data that define the position of the accessed element in the array.\n\t */\n\tconstructor( uniformArrayNode, indexNode ) {\n\n\t\tsuper( uniformArrayNode, indexNode );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isArrayBufferElementNode = true;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst snippet = super.generate( builder );\n\t\tconst type = this.getNodeType( builder );\n\t\tconst paddedType = this.node.getPaddedType();\n\n\t\treturn builder.format( snippet, paddedType, type );\n\n\t}\n\n}\n\n/**\n * Similar to {@link BufferNode} this module represents array-like data as\n * uniform buffers. Unlike {@link BufferNode}, it can handle more common\n * data types in the array (e.g `three.js` primitives) and automatically\n * manage buffer padding. It should be the first choice when working with\n * uniforms buffers.\n * ```js\n * const tintColors = uniformArray( [\n * \tnew Color( 1, 0, 0 ),\n * \tnew Color( 0, 1, 0 ),\n * \tnew Color( 0, 0, 1 )\n * ], 'color' );\n *\n * const redColor = tintColors.element( 0 );\n *\n * @augments BufferNode\n */\nclass UniformArrayNode extends BufferNode {\n\n\tstatic get type() {\n\n\t\treturn 'UniformArrayNode';\n\n\t}\n\n\t/**\n\t * Constructs a new uniform array node.\n\t *\n\t * @param {Array<any>} value - Array holding the buffer data.\n\t * @param {?string} [elementType=null] - The data type of a buffer element.\n\t */\n\tconstructor( value, elementType = null ) {\n\n\t\tsuper( null );\n\n\t\t/**\n\t\t * Array holding the buffer data. Unlike {@link BufferNode}, the array can\n\t\t * hold number primitives as well as three.js objects like vectors, matrices\n\t\t * or colors.\n\t\t *\n\t\t * @type {Array<any>}\n\t\t */\n\t\tthis.array = value;\n\n\t\t/**\n\t\t * The data type of an array element.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.elementType = elementType === null ? getValueType( value[ 0 ] ) : elementType;\n\n\t\t/**\n\t\t * The padded type. Uniform buffers must conform to a certain buffer layout\n\t\t * so a separate type is computed to ensure correct buffer size.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.paddedType = this.getPaddedType();\n\n\t\t/**\n\t\t * Overwritten since uniform array nodes are updated per render.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'render'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.RENDER;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isArrayBufferNode = true;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from the\n\t * {@link UniformArrayNode#paddedType}.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( /*builder*/ ) {\n\n\t\treturn this.paddedType;\n\n\t}\n\n\t/**\n\t * The data type of the array elements.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The element type.\n\t */\n\tgetElementType() {\n\n\t\treturn this.elementType;\n\n\t}\n\n\t/**\n\t * Returns the padded type based on the element type.\n\t *\n\t * @return {string} The padded type.\n\t */\n\tgetPaddedType() {\n\n\t\tconst elementType = this.elementType;\n\n\t\tlet paddedType = 'vec4';\n\n\t\tif ( elementType === 'mat2' ) {\n\n\t\t\tpaddedType = 'mat2';\n\n\t\t} else if ( /mat/.test( elementType ) === true ) {\n\n\t\t\tpaddedType = 'mat4';\n\n\t\t} else if ( elementType.charAt( 0 ) === 'i' ) {\n\n\t\t\tpaddedType = 'ivec4';\n\n\t\t} else if ( elementType.charAt( 0 ) === 'u' ) {\n\n\t\t\tpaddedType = 'uvec4';\n\n\t\t}\n\n\t\treturn paddedType;\n\n\t}\n\n\t/**\n\t * The update makes sure to correctly transfer the data from the (complex) objects\n\t * in the array to the internal, correctly padded value buffer.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( /*frame*/ ) {\n\n\t\tconst { array, value } = this;\n\n\t\tconst elementType = this.elementType;\n\n\t\tif ( elementType === 'float' || elementType === 'int' || elementType === 'uint' ) {\n\n\t\t\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\t\t\tconst index = i * 4;\n\n\t\t\t\tvalue[ index ] = array[ i ];\n\n\t\t\t}\n\n\t\t} else if ( elementType === 'color' ) {\n\n\t\t\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\t\t\tconst index = i * 4;\n\t\t\t\tconst vector = array[ i ];\n\n\t\t\t\tvalue[ index ] = vector.r;\n\t\t\t\tvalue[ index + 1 ] = vector.g;\n\t\t\t\tvalue[ index + 2 ] = vector.b || 0;\n\t\t\t\t//value[ index + 3 ] = vector.a || 0;\n\n\t\t\t}\n\n\t\t} else if ( elementType === 'mat2' ) {\n\n\t\t\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\t\t\tconst index = i * 4;\n\t\t\t\tconst matrix = array[ i ];\n\n\t\t\t\tvalue[ index ] = matrix.elements[ 0 ];\n\t\t\t\tvalue[ index + 1 ] = matrix.elements[ 1 ];\n\t\t\t\tvalue[ index + 2 ] = matrix.elements[ 2 ];\n\t\t\t\tvalue[ index + 3 ] = matrix.elements[ 3 ];\n\n\t\t\t}\n\n\t\t} else if ( elementType === 'mat3' ) {\n\n\t\t\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\t\t\tconst index = i * 16;\n\t\t\t\tconst matrix = array[ i ];\n\n\t\t\t\tvalue[ index ] = matrix.elements[ 0 ];\n\t\t\t\tvalue[ index + 1 ] = matrix.elements[ 1 ];\n\t\t\t\tvalue[ index + 2 ] = matrix.elements[ 2 ];\n\n\t\t\t\tvalue[ index + 4 ] = matrix.elements[ 3 ];\n\t\t\t\tvalue[ index + 5 ] = matrix.elements[ 4 ];\n\t\t\t\tvalue[ index + 6 ] = matrix.elements[ 5 ];\n\n\t\t\t\tvalue[ index + 8 ] = matrix.elements[ 6 ];\n\t\t\t\tvalue[ index + 9 ] = matrix.elements[ 7 ];\n\t\t\t\tvalue[ index + 10 ] = matrix.elements[ 8 ];\n\n\t\t\t\tvalue[ index + 15 ] = 1;\n\n\t\t\t}\n\n\t\t} else if ( elementType === 'mat4' ) {\n\n\t\t\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\t\t\tconst index = i * 16;\n\t\t\t\tconst matrix = array[ i ];\n\n\t\t\t\tfor ( let i = 0; i < matrix.elements.length; i ++ ) {\n\n\t\t\t\t\tvalue[ index + i ] = matrix.elements[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\t\t\tconst index = i * 4;\n\t\t\t\tconst vector = array[ i ];\n\n\t\t\t\tvalue[ index ] = vector.x;\n\t\t\t\tvalue[ index + 1 ] = vector.y;\n\t\t\t\tvalue[ index + 2 ] = vector.z || 0;\n\t\t\t\tvalue[ index + 3 ] = vector.w || 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Implement the value buffer creation based on the array data.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @return {null}\n\t */\n\tsetup( builder ) {\n\n\t\tconst length = this.array.length;\n\t\tconst elementType = this.elementType;\n\n\t\tlet arrayType = Float32Array;\n\n\t\tconst paddedType = this.paddedType;\n\t\tconst paddedElementLength = builder.getTypeLength( paddedType );\n\n\t\tif ( elementType.charAt( 0 ) === 'i' ) arrayType = Int32Array;\n\t\tif ( elementType.charAt( 0 ) === 'u' ) arrayType = Uint32Array;\n\n\t\tthis.value = new arrayType( length * paddedElementLength );\n\t\tthis.bufferCount = length;\n\t\tthis.bufferType = paddedType;\n\n\t\tthis.update(); // initialize the buffer values\n\n\t\treturn super.setup( builder );\n\n\t}\n\n\t/**\n\t * Overwrites the default `element()` method to provide element access\n\t * based on {@link UniformArrayNode}.\n\t *\n\t * @param {IndexNode} indexNode - The index node.\n\t * @return {UniformArrayElementNode}\n\t */\n\telement( indexNode ) {\n\n\t\treturn new UniformArrayElementNode( this, nodeObject( indexNode ) );\n\n\t}\n\n}\n\n/**\n * TSL function for creating an uniform array node.\n *\n * @tsl\n * @function\n * @param {Array<any>} values - Array-like data.\n * @param {?string} [nodeType] - The data type of the array elements.\n * @returns {UniformArrayNode}\n */\nconst uniformArray = ( values, nodeType ) => new UniformArrayNode( values, nodeType );\n\n/**\n * The node allows to set values for built-in shader variables. That is\n * required for features like hardware-accelerated vertex clipping.\n *\n * @augments Node\n */\nclass BuiltinNode extends Node {\n\n\t/**\n\t * Constructs a new builtin node.\n\t *\n\t * @param {string} name - The name of the built-in shader variable.\n\t */\n\tconstructor( name ) {\n\n\t\tsuper( 'float' );\n\n\t\t/**\n\t\t * The name of the built-in shader variable.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBuiltinNode = true;\n\n\t}\n\n\t/**\n\t * Generates the code snippet of the builtin node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerate( /* builder */ ) {\n\n\t\treturn this.name;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a builtin node.\n *\n * @tsl\n * @function\n * @param {string} name - The name of the built-in shader variable.\n * @returns {BuiltinNode}\n */\nconst builtin = nodeProxy( BuiltinNode ).setParameterLength( 1 );\n\nlet _screenSizeVec, _viewportVec;\n\n/**\n * This node provides a collection of screen related metrics.\n * Depending on {@link ScreenNode#scope}, the nodes can represent\n * resolution or viewport data as well as fragment or uv coordinates.\n *\n * @augments Node\n */\nclass ScreenNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ScreenNode';\n\n\t}\n\n\t/**\n\t * Constructs a new screen node.\n\t *\n\t * @param {('coordinate'|'viewport'|'size'|'uv'|'dpr')} scope - The node's scope.\n\t */\n\tconstructor( scope ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node represents different metric depending on which scope is selected.\n\t\t *\n\t\t * - `ScreenNode.COORDINATE`: Window-relative coordinates of the current fragment according to WebGPU standards.\n\t\t * - `ScreenNode.VIEWPORT`: The current viewport defined as a four-dimensional vector.\n\t\t * - `ScreenNode.SIZE`: The dimensions of the current bound framebuffer.\n\t\t * - `ScreenNode.UV`: Normalized coordinates.\n\t\t * - `ScreenNode.DPR`: Device pixel ratio.\n\t\t *\n\t\t * @type {('coordinate'|'viewport'|'size'|'uv'|'dpr')}\n\t\t */\n\t\tthis.scope = scope;\n\n\t\t/**\n\t\t * This output node.\n\t\t *\n\t\t * @private\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis._output = null;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isViewportNode = true;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type depends on the selected scope.\n\t *\n\t * @return {('float'|'vec2'|'vec4')} The node type.\n\t */\n\tgenerateNodeType() {\n\n\t\tif ( this.scope === ScreenNode.DPR ) return 'float';\n\t\tif ( this.scope === ScreenNode.VIEWPORT ) return 'vec4';\n\t\telse return 'vec2';\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node's update type depends on the selected scope.\n\t *\n\t * @return {NodeUpdateType} The update type.\n\t */\n\tgetUpdateType() {\n\n\t\tlet updateType = NodeUpdateType.NONE;\n\n\t\tif ( this.scope === ScreenNode.SIZE || this.scope === ScreenNode.VIEWPORT || this.scope === ScreenNode.DPR ) {\n\n\t\t\tupdateType = NodeUpdateType.RENDER;\n\n\t\t}\n\n\t\tthis.updateType = updateType;\n\n\t\treturn updateType;\n\n\t}\n\n\t/**\n\t * `ScreenNode` implements {@link Node#update} to retrieve viewport and size information\n\t * from the current renderer.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( { renderer } ) {\n\n\t\tconst renderTarget = renderer.getRenderTarget();\n\n\t\tif ( this.scope === ScreenNode.VIEWPORT ) {\n\n\t\t\tif ( renderTarget !== null ) {\n\n\t\t\t\t_viewportVec.copy( renderTarget.viewport );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.getViewport( _viewportVec );\n\n\t\t\t\t_viewportVec.multiplyScalar( renderer.getPixelRatio() );\n\n\t\t\t}\n\n\t\t} else if ( this.scope === ScreenNode.DPR ) {\n\n\t\t\tthis._output.value = renderer.getPixelRatio();\n\n\t\t} else {\n\n\t\t\tif ( renderTarget !== null ) {\n\n\t\t\t\t_screenSizeVec.width = renderTarget.width;\n\t\t\t\t_screenSizeVec.height = renderTarget.height;\n\n\t\t\t} else {\n\n\t\t\t\trenderer.getDrawingBufferSize( _screenSizeVec );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetup( /*builder*/ ) {\n\n\t\tconst scope = this.scope;\n\n\t\tlet output = null;\n\n\t\tif ( scope === ScreenNode.SIZE ) {\n\n\t\t\toutput = uniform( _screenSizeVec || ( _screenSizeVec = new Vector2() ) );\n\n\t\t} else if ( scope === ScreenNode.VIEWPORT ) {\n\n\t\t\toutput = uniform( _viewportVec || ( _viewportVec = new Vector4() ) );\n\n\t\t} else if ( scope === ScreenNode.DPR ) {\n\n\t\t\toutput = uniform( 1 );\n\n\t\t} else {\n\n\t\t\toutput = vec2( screenCoordinate.div( screenSize ) );\n\n\t\t}\n\n\t\tthis._output = output;\n\n\t\treturn output;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tif ( this.scope === ScreenNode.COORDINATE ) {\n\n\t\t\tlet coord = builder.getFragCoord();\n\n\t\t\tif ( builder.isFlipY() ) {\n\n\t\t\t\t// follow webgpu standards\n\n\t\t\t\tconst size = builder.getNodeProperties( screenSize ).outputNode.build( builder );\n\n\t\t\t\tcoord = `${ builder.getType( 'vec2' ) }( ${ coord }.x, ${ size }.y - ${ coord }.y )`;\n\n\t\t\t}\n\n\t\t\treturn coord;\n\n\t\t}\n\n\t\treturn super.generate( builder );\n\n\t}\n\n}\n\nScreenNode.COORDINATE = 'coordinate';\nScreenNode.VIEWPORT = 'viewport';\nScreenNode.SIZE = 'size';\nScreenNode.UV = 'uv';\nScreenNode.DPR = 'dpr';\n\n// Screen\n\n/**\n * TSL object that represents the current DPR.\n *\n * @tsl\n * @type {ScreenNode<float>}\n */\nconst screenDPR = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.DPR );\n\n/**\n * TSL object that represents normalized screen coordinates, unitless in `[0, 1]`.\n *\n * @tsl\n * @type {ScreenNode<vec2>}\n */\nconst screenUV = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.UV );\n\n/**\n * TSL object that represents the screen resolution in physical pixel units.\n *\n * @tsl\n * @type {ScreenNode<vec2>}\n */\nconst screenSize = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.SIZE );\n\n/**\n * TSL object that represents the current `x`/`y` pixel position on the screen in physical pixel units.\n *\n * @tsl\n * @type {ScreenNode<vec2>}\n */\nconst screenCoordinate = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.COORDINATE );\n\n// Viewport\n\n/**\n * TSL object that represents the viewport rectangle as `x`, `y`, `width` and `height` in physical pixel units.\n *\n * @tsl\n * @type {ScreenNode<vec4>}\n */\nconst viewport = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.VIEWPORT );\n\n/**\n * TSL object that represents the viewport resolution in physical pixel units.\n *\n * @tsl\n * @type {ScreenNode<vec2>}\n */\nconst viewportSize = viewport.zw;\n\n/**\n * TSL object that represents the current `x`/`y` pixel position on the viewport in physical pixel units.\n *\n * @tsl\n * @type {ScreenNode<vec2>}\n */\nconst viewportCoordinate = /*@__PURE__*/ screenCoordinate.sub( viewport.xy );\n\n/**\n * TSL object that represents normalized viewport coordinates, unitless in `[0, 1]`.\n *\n * @tsl\n * @type {ScreenNode<vec2>}\n */\nconst viewportUV = /*@__PURE__*/ viewportCoordinate.div( viewportSize );\n\n// Deprecated\n\n/**\n * @deprecated since r169. Use {@link screenSize} instead.\n */\nconst viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r169\n\n\twarn( 'TSL: \"viewportResolution\" is deprecated. Use \"screenSize\" instead.', new StackTrace() );\n\n\treturn screenSize;\n\n}, 'vec2' ).once() )();\n\n// Cache node uniforms\n\nlet _cameraProjectionMatrixBase = null;\nlet _cameraProjectionMatrixArray = null;\n\nlet _cameraProjectionMatrixInverseBase = null;\nlet _cameraProjectionMatrixInverseArray = null;\n\nlet _cameraViewMatrixBase = null;\nlet _cameraViewMatrixArray = null;\n\nlet _cameraWorldMatrixBase = null;\nlet _cameraWorldMatrixArray = null;\n\nlet _cameraNormalMatrixBase = null;\nlet _cameraNormalMatrixArray = null;\n\nlet _cameraPositionBase = null;\nlet _cameraPositionArray = null;\n\nlet _cameraViewportBase = null;\nlet _cameraViewportArray = null;\n\n/**\n * TSL object that represents the current `index` value of the camera if used ArrayCamera.\n *\n * @tsl\n * @type {UniformNode<uint>}\n */\nconst cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).setName( 'u_cameraIndex' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );\n\n/**\n * TSL object that represents the `near` value of the camera used for the current render.\n *\n * @tsl\n * @type {UniformNode<float>}\n */\nconst cameraNear = /*@__PURE__*/ uniform( 'float' ).setName( 'cameraNear' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.near );\n\n/**\n * TSL object that represents the `far` value of the camera used for the current render.\n *\n * @tsl\n * @type {UniformNode<float>}\n */\nconst cameraFar = /*@__PURE__*/ uniform( 'float' ).setName( 'cameraFar' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.far );\n\n/**\n * TSL object that represents the projection matrix of the camera used for the current render.\n *\n * @tsl\n * @type {UniformNode<mat4>}\n */\nconst cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {\n\n\tlet cameraProjectionMatrix;\n\n\tif ( camera.isArrayCamera && camera.cameras.length > 0 ) {\n\n\t\tconst matrices = [];\n\n\t\tfor ( const subCamera of camera.cameras ) {\n\n\t\t\tmatrices.push( subCamera.projectionMatrix );\n\n\t\t}\n\n\t\tif ( _cameraProjectionMatrixArray === null ) {\n\n\t\t\t_cameraProjectionMatrixArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatrices' );\n\n\t\t} else {\n\n\t\t\t_cameraProjectionMatrixArray.array = matrices;\n\n\t\t}\n\n\t\tcameraProjectionMatrix = _cameraProjectionMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrix' );\n\n\t} else {\n\n\t\tif ( _cameraProjectionMatrixBase === null ) {\n\n\t\t\t_cameraProjectionMatrixBase = uniform( camera.projectionMatrix ).setName( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );\n\n\t\t}\n\n\t\tcameraProjectionMatrix = _cameraProjectionMatrixBase;\n\n\t}\n\n\treturn cameraProjectionMatrix;\n\n} ).once() )();\n\n/**\n * TSL object that represents the inverse projection matrix of the camera used for the current render.\n *\n * @tsl\n * @type {UniformNode<mat4>}\n */\nconst cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } ) => {\n\n\tlet cameraProjectionMatrixInverse;\n\n\tif ( camera.isArrayCamera && camera.cameras.length > 0 ) {\n\n\t\tconst matrices = [];\n\n\t\tfor ( const subCamera of camera.cameras ) {\n\n\t\t\tmatrices.push( subCamera.projectionMatrixInverse );\n\n\t\t}\n\n\t\tif ( _cameraProjectionMatrixInverseArray === null ) {\n\n\t\t\t_cameraProjectionMatrixInverseArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatricesInverse' );\n\n\t\t} else {\n\n\t\t\t_cameraProjectionMatrixInverseArray.array = matrices;\n\n\t\t}\n\n\t\tcameraProjectionMatrixInverse = _cameraProjectionMatrixInverseArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrixInverse' );\n\n\t} else {\n\n\t\tif ( _cameraProjectionMatrixInverseBase === null ) {\n\n\t\t\t_cameraProjectionMatrixInverseBase = uniform( camera.projectionMatrixInverse ).setName( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );\n\n\t\t}\n\n\t\tcameraProjectionMatrixInverse = _cameraProjectionMatrixInverseBase;\n\n\t}\n\n\treturn cameraProjectionMatrixInverse;\n\n} ).once() )();\n\n/**\n * TSL object that represents the view matrix of the camera used for the current render.\n *\n * @tsl\n * @type {UniformNode<mat4>}\n */\nconst cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {\n\n\tlet cameraViewMatrix;\n\n\tif ( camera.isArrayCamera && camera.cameras.length > 0 ) {\n\n\t\tconst matrices = [];\n\n\t\tfor ( const subCamera of camera.cameras ) {\n\n\t\t\tmatrices.push( subCamera.matrixWorldInverse );\n\n\t\t}\n\n\t\tif ( _cameraViewMatrixArray === null ) {\n\n\t\t\t_cameraViewMatrixArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraViewMatrices' );\n\n\t\t} else {\n\n\t\t\t_cameraViewMatrixArray.array = matrices;\n\n\t\t}\n\n\t\tcameraViewMatrix = _cameraViewMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraViewMatrix' );\n\n\t} else {\n\n\t\tif ( _cameraViewMatrixBase === null ) {\n\n\t\t\t_cameraViewMatrixBase = uniform( camera.matrixWorldInverse ).setName( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );\n\n\t\t}\n\n\t\tcameraViewMatrix = _cameraViewMatrixBase;\n\n\t}\n\n\treturn cameraViewMatrix;\n\n} ).once() )();\n\n/**\n * TSL object that represents the world matrix of the camera used for the current render.\n *\n * @tsl\n * @type {UniformNode<mat4>}\n */\nconst cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {\n\n\tlet cameraWorldMatrix;\n\n\tif ( camera.isArrayCamera && camera.cameras.length > 0 ) {\n\n\t\tconst matrices = [];\n\n\t\tfor ( const subCamera of camera.cameras ) {\n\n\t\t\tmatrices.push( subCamera.matrixWorld );\n\n\t\t}\n\n\t\tif ( _cameraWorldMatrixArray === null ) {\n\n\t\t\t_cameraWorldMatrixArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraWorldMatrices' );\n\n\t\t} else {\n\n\t\t\t_cameraWorldMatrixArray.array = matrices;\n\n\t\t}\n\n\t\tcameraWorldMatrix = _cameraWorldMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraWorldMatrix' );\n\n\t} else {\n\n\t\tif ( _cameraWorldMatrixBase === null ) {\n\n\t\t\t_cameraWorldMatrixBase = uniform( camera.matrixWorld ).setName( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );\n\n\t\t}\n\n\t\tcameraWorldMatrix = _cameraWorldMatrixBase;\n\n\t}\n\n\treturn cameraWorldMatrix;\n\n} ).once() )();\n\n/**\n * TSL object that represents the normal matrix of the camera used for the current render.\n *\n * @tsl\n * @type {UniformNode<mat3>}\n */\nconst cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {\n\n\tlet cameraNormalMatrix;\n\n\tif ( camera.isArrayCamera && camera.cameras.length > 0 ) {\n\n\t\tconst matrices = [];\n\n\t\tfor ( const subCamera of camera.cameras ) {\n\n\t\t\tmatrices.push( subCamera.normalMatrix );\n\n\t\t}\n\n\t\tif ( _cameraNormalMatrixArray === null ) {\n\n\t\t\t_cameraNormalMatrixArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraNormalMatrices' );\n\n\t\t} else {\n\n\t\t\t_cameraNormalMatrixArray.array = matrices;\n\n\t\t}\n\n\t\tcameraNormalMatrix = _cameraNormalMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraNormalMatrix' );\n\n\t} else {\n\n\t\tif ( _cameraNormalMatrixBase === null ) {\n\n\t\t\t_cameraNormalMatrixBase = uniform( camera.normalMatrix ).setName( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );\n\n\t\t}\n\n\t\tcameraNormalMatrix = _cameraNormalMatrixBase;\n\n\t}\n\n\treturn cameraNormalMatrix;\n\n} ).once() )();\n\n/**\n * TSL object that represents the position in world space of the camera used for the current render.\n *\n * @tsl\n * @type {UniformNode<vec3>}\n */\nconst cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => {\n\n\tlet cameraPosition;\n\n\tif ( camera.isArrayCamera && camera.cameras.length > 0 ) {\n\n\t\tconst positions = [];\n\n\t\tfor ( let i = 0, l = camera.cameras.length; i < l; i ++ ) {\n\n\t\t\tpositions.push( new Vector3() );\n\n\t\t}\n\n\t\tif ( _cameraPositionArray === null ) {\n\n\t\t\t_cameraPositionArray = uniformArray( positions ).setGroup( renderGroup ).setName( 'cameraPositions' ).onRenderUpdate( ( { camera }, self ) => {\n\n\t\t\t\tconst subCameras = camera.cameras;\n\t\t\t\tconst array = self.array;\n\n\t\t\t\tfor ( let i = 0, l = subCameras.length; i < l; i ++ ) {\n\n\t\t\t\t\tarray[ i ].setFromMatrixPosition( subCameras[ i ].matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\t_cameraPositionArray.array = positions;\n\n\t\t}\n\n\t\tcameraPosition = _cameraPositionArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraPosition' );\n\n\t} else {\n\n\t\tif ( _cameraPositionBase === null ) {\n\n\t\t\t_cameraPositionBase = uniform( new Vector3() ).setName( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t}\n\n\t\tcameraPosition = _cameraPositionBase;\n\n\t}\n\n\treturn cameraPosition;\n\n} ).once() )();\n\n\n/**\n * TSL object that represents the viewport of the camera used for the current render.\n *\n * @tsl\n * @type {UniformNode<vec4>}\n */\nconst cameraViewport = /*@__PURE__*/ ( Fn( ( { camera } ) => {\n\n\tlet cameraViewport;\n\n\tif ( camera.isArrayCamera && camera.cameras.length > 0 ) {\n\n\t\tconst viewports = [];\n\n\t\tfor ( const subCamera of camera.cameras ) {\n\n\t\t\tviewports.push( subCamera.viewport );\n\n\t\t}\n\n\t\tif ( _cameraViewportArray === null ) {\n\n\t\t\t_cameraViewportArray = uniformArray( viewports, 'vec4' ).setGroup( renderGroup ).setName( 'cameraViewports' );\n\n\t\t} else {\n\n\t\t\t_cameraViewportArray.array = viewports;\n\n\t\t}\n\n\t\tcameraViewport = _cameraViewportArray.element( cameraIndex ).toConst( 'cameraViewport' );\n\n\t} else {\n\n\t\tif ( _cameraViewportBase === null ) {\n\n\t\t\t// Fallback for single camera\n\t\t\t_cameraViewportBase = vec4( 0, 0, screenSize.x, screenSize.y ).toConst( 'cameraViewport' );\n\n\t\t}\n\n\t\tcameraViewport = _cameraViewportBase;\n\n\t}\n\n\treturn cameraViewport;\n\n} ).once() )();\n\nconst _sphere = /*@__PURE__*/ new Sphere();\n\n/**\n * This node can be used to access transformation related metrics of 3D objects.\n * Depending on the selected scope, a different metric is represented as a uniform\n * in the shader. The following scopes are supported:\n *\n * - `POSITION`: The object's position in world space.\n * - `VIEW_POSITION`: The object's position in view/camera space.\n * - `DIRECTION`: The object's direction in world space.\n * - `SCALE`: The object's scale in world space.\n * - `WORLD_MATRIX`: The object's matrix in world space.\n *\n * @augments Node\n */\nclass Object3DNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'Object3DNode';\n\n\t}\n\n\t/**\n\t * Constructs a new object 3D node.\n\t *\n\t * @param {('position'|'viewPosition'|'direction'|'scale'|'worldMatrix')} scope - The node represents a different type of transformation depending on the scope.\n\t * @param {?Object3D} [object3d=null] - The 3D object.\n\t */\n\tconstructor( scope, object3d = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node reports a different type of transformation depending on the scope.\n\t\t *\n\t\t * @type {('position'|'viewPosition'|'direction'|'scale'|'worldMatrix')}\n\t\t */\n\t\tthis.scope = scope;\n\n\t\t/**\n\t\t * The 3D object.\n\t\t *\n\t\t * @type {?Object3D}\n\t\t * @default null\n\t\t */\n\t\tthis.object3d = object3d;\n\n\t\t/**\n\t\t * Overwritten since this type of node is updated per object.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'object'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.OBJECT;\n\n\t\t/**\n\t\t * Holds the value of the node as a uniform.\n\t\t *\n\t\t * @type {UniformNode}\n\t\t */\n\t\tthis.uniformNode = new UniformNode( null );\n\n\t}\n\n\t/**\n\t * Overwritten since the node type is inferred from the scope.\n\t *\n\t * @return {('mat4'|'vec3'|'float')} The node type.\n\t */\n\tgenerateNodeType() {\n\n\t\tconst scope = this.scope;\n\n\t\tif ( scope === Object3DNode.WORLD_MATRIX ) {\n\n\t\t\treturn 'mat4';\n\n\t\t} else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {\n\n\t\t\treturn 'vec3';\n\n\t\t} else if ( scope === Object3DNode.RADIUS ) {\n\n\t\t\treturn 'float';\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the uniform value depending on the scope.\n\t *\n\t * @param {NodeFrame} frame - The current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tconst object = this.object3d;\n\t\tconst uniformNode = this.uniformNode;\n\t\tconst scope = this.scope;\n\n\t\tif ( scope === Object3DNode.WORLD_MATRIX ) {\n\n\t\t\tuniformNode.value = object.matrixWorld;\n\n\t\t} else if ( scope === Object3DNode.POSITION ) {\n\n\t\t\tuniformNode.value = uniformNode.value || new Vector3();\n\n\t\t\tuniformNode.value.setFromMatrixPosition( object.matrixWorld );\n\n\t\t} else if ( scope === Object3DNode.SCALE ) {\n\n\t\t\tuniformNode.value = uniformNode.value || new Vector3();\n\n\t\t\tuniformNode.value.setFromMatrixScale( object.matrixWorld );\n\n\t\t} else if ( scope === Object3DNode.DIRECTION ) {\n\n\t\t\tuniformNode.value = uniformNode.value || new Vector3();\n\n\t\t\tobject.getWorldDirection( uniformNode.value );\n\n\t\t} else if ( scope === Object3DNode.VIEW_POSITION ) {\n\n\t\t\tconst camera = frame.camera;\n\n\t\t\tuniformNode.value = uniformNode.value || new Vector3();\n\t\t\tuniformNode.value.setFromMatrixPosition( object.matrixWorld );\n\n\t\t\tuniformNode.value.applyMatrix4( camera.matrixWorldInverse );\n\n\t\t} else if ( scope === Object3DNode.RADIUS ) {\n\n\t\t\tconst geometry = frame.object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t\tuniformNode.value = _sphere.radius;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Generates the code snippet of the uniform node. The node type of the uniform\n\t * node also depends on the selected scope.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerate( builder ) {\n\n\t\tconst scope = this.scope;\n\n\t\tif ( scope === Object3DNode.WORLD_MATRIX ) {\n\n\t\t\tthis.uniformNode.nodeType = 'mat4';\n\n\t\t} else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {\n\n\t\t\tthis.uniformNode.nodeType = 'vec3';\n\n\t\t} else if ( scope === Object3DNode.RADIUS ) {\n\n\t\t\tthis.uniformNode.nodeType = 'float';\n\n\t\t}\n\n\t\treturn this.uniformNode.build( builder );\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.scope = this.scope;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.scope = data.scope;\n\n\t}\n\n}\n\nObject3DNode.WORLD_MATRIX = 'worldMatrix';\nObject3DNode.POSITION = 'position';\nObject3DNode.SCALE = 'scale';\nObject3DNode.VIEW_POSITION = 'viewPosition';\nObject3DNode.DIRECTION = 'direction';\nObject3DNode.RADIUS = 'radius';\n\n/**\n * TSL function for creating an object 3D node that represents the object's direction in world space.\n *\n * @tsl\n * @function\n * @param {?Object3D} [object3d] - The 3D object.\n * @returns {Object3DNode<vec3>}\n */\nconst objectDirection = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.DIRECTION ).setParameterLength( 1 );\n\n/**\n * TSL function for creating an object 3D node that represents the object's world matrix.\n *\n * @tsl\n * @function\n * @param {?Object3D} [object3d] - The 3D object.\n * @returns {Object3DNode<mat4>}\n */\nconst objectWorldMatrix = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.WORLD_MATRIX ).setParameterLength( 1 );\n\n/**\n * TSL function for creating an object 3D node that represents the object's position in world space.\n *\n * @tsl\n * @function\n * @param {?Object3D} [object3d] - The 3D object.\n * @returns {Object3DNode<vec3>}\n */\nconst objectPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.POSITION ).setParameterLength( 1 );\n\n/**\n * TSL function for creating an object 3D node that represents the object's scale in world space.\n *\n * @tsl\n * @function\n * @param {?Object3D} [object3d] - The 3D object.\n * @returns {Object3DNode<vec3>}\n */\nconst objectScale = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.SCALE ).setParameterLength( 1 );\n\n/**\n * TSL function for creating an object 3D node that represents the object's position in view/camera space.\n *\n * @tsl\n * @function\n * @param {?Object3D} [object3d] - The 3D object.\n * @returns {Object3DNode<vec3>}\n */\nconst objectViewPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.VIEW_POSITION ).setParameterLength( 1 );\n\n/**\n * TSL function for creating an object 3D node that represents the object's radius.\n *\n * @tsl\n * @function\n * @param {?Object3D} [object3d] - The 3D object.\n * @returns {Object3DNode<float>}\n */\nconst objectRadius = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.RADIUS ).setParameterLength( 1 );\n\n/**\n * This type of node is a specialized version of `Object3DNode`\n * with larger set of model related metrics. Unlike `Object3DNode`,\n * `ModelNode` extracts the reference to the 3D object from the\n * current node frame state.\n *\n * @augments Object3DNode\n */\nclass ModelNode extends Object3DNode {\n\n\tstatic get type() {\n\n\t\treturn 'ModelNode';\n\n\t}\n\n\t/**\n\t * Constructs a new object model node.\n\t *\n\t * @param {('position'|'viewPosition'|'direction'|'scale'|'worldMatrix')} scope - The node represents a different type of transformation depending on the scope.\n\t */\n\tconstructor( scope ) {\n\n\t\tsuper( scope );\n\n\t}\n\n\t/**\n\t * Extracts the model reference from the frame state and then\n\t * updates the uniform value depending on the scope.\n\t *\n\t * @param {NodeFrame} frame - The current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tthis.object3d = frame.object;\n\n\t\tsuper.update( frame );\n\n\t}\n\n}\n\n/**\n * TSL object that represents the object's direction in world space.\n *\n * @tsl\n * @type {ModelNode<vec3>}\n */\nconst modelDirection = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.DIRECTION );\n\n/**\n * TSL object that represents the object's world matrix.\n *\n * @tsl\n * @type {ModelNode<mat4>}\n */\nconst modelWorldMatrix = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );\n\n/**\n * TSL object that represents the object's position in world space.\n *\n * @tsl\n * @type {ModelNode<vec3>}\n */\nconst modelPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.POSITION );\n\n/**\n * TSL object that represents the object's scale in world space.\n *\n * @tsl\n * @type {ModelNode<vec3>}\n */\nconst modelScale = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.SCALE );\n\n/**\n * TSL object that represents the object's position in view/camera space.\n *\n * @tsl\n * @type {ModelNode<vec3>}\n */\nconst modelViewPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );\n\n/**\n * TSL object that represents the object's radius.\n *\n * @tsl\n * @type {ModelNode<float>}\n */\nconst modelRadius = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.RADIUS );\n\n/**\n * TSL object that represents the object's normal matrix.\n *\n * @tsl\n * @type {UniformNode<mat3>}\n */\nconst modelNormalMatrix = /*@__PURE__*/ uniform( new Matrix3() ).onObjectUpdate( ( { object }, self ) => self.value.getNormalMatrix( object.matrixWorld ) );\n\n/**\n * TSL object that represents the object's inverse world matrix.\n *\n * @tsl\n * @type {UniformNode<mat4>}\n */\nconst modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).onObjectUpdate( ( { object }, self ) => self.value.copy( object.matrixWorld ).invert() );\n\n/**\n * TSL object that represents the object's model view matrix.\n *\n * @tsl\n * @type {Node<mat4>}\n */\nconst modelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\treturn builder.context.modelViewMatrix || mediumpModelViewMatrix;\n\n} ).once() )().toVar( 'modelViewMatrix' );\n\n// GPU Precision\n\n/**\n * TSL object that represents the object's model view in `mediump` precision.\n *\n * @tsl\n * @type {Node<mat4>}\n */\nconst mediumpModelViewMatrix = /*@__PURE__*/ cameraViewMatrix.mul( modelWorldMatrix );\n\n// CPU Precision\n\n/**\n * TSL object that represents the object's model view in `highp` precision\n * which is achieved by computing the matrix in JS and not in the shader.\n *\n * @tsl\n * @type {Node<mat4>}\n */\nconst highpModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tbuilder.context.isHighPrecisionModelViewMatrix = true;\n\n\treturn uniform( 'mat4' ).onObjectUpdate( ( { object, camera } ) => {\n\n\t\treturn object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\n\t} );\n\n} ).once() )().toVar( 'highpModelViewMatrix' );\n\n/**\n * TSL object that represents the object's model normal view in `highp` precision\n * which is achieved by computing the matrix in JS and not in the shader.\n *\n * @tsl\n * @type {Node<mat3>}\n */\nconst highpModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tconst isHighPrecisionModelViewMatrix = builder.context.isHighPrecisionModelViewMatrix;\n\n\treturn uniform( 'mat3' ).onObjectUpdate( ( { object, camera } ) => {\n\n\t\tif ( isHighPrecisionModelViewMatrix !== true ) {\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\n\t\t}\n\n\t\treturn object.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t} );\n\n} ).once() )().toVar( 'highpModelNormalViewMatrix' );\n\n/**\n * TSL object that represents the clip space position of the current rendered object.\n *\n * @tsl\n * @type {VaryingNode<vec4>}\n */\nconst clipSpace = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tif ( builder.shaderStage !== 'fragment' ) {\n\n\t\twarnOnce( 'TSL: `clipSpace` is only available in fragment stage.' );\n\n\t\treturn vec4();\n\n\t}\n\n\treturn builder.context.clipSpace.toVarying( 'v_clipSpace' );\n\n} ).once() )();\n\n/**\n * TSL object that represents the position attribute of the current rendered object.\n *\n * @tsl\n * @type {AttributeNode<vec3>}\n */\nconst positionGeometry = /*@__PURE__*/ attribute( 'position', 'vec3' );\n\n/**\n * TSL object that represents the vertex position in local space of the current rendered object.\n *\n * @tsl\n * @type {AttributeNode<vec3>}\n */\nconst positionLocal = /*@__PURE__*/ positionGeometry.toVarying( 'positionLocal' );\n\n/**\n * TSL object that represents the previous vertex position in local space of the current rendered object.\n * Used in context of {@link VelocityNode} for rendering motion vectors.\n *\n * @tsl\n * @type {AttributeNode<vec3>}\n */\nconst positionPrevious = /*@__PURE__*/ positionGeometry.toVarying( 'positionPrevious' );\n\n/**\n * TSL object that represents the vertex position in world space of the current rendered object.\n *\n * @tsl\n * @type {VaryingNode<vec3>}\n */\nconst positionWorld = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\treturn modelWorldMatrix.mul( positionLocal ).xyz.toVarying( builder.getSubBuildProperty( 'v_positionWorld' ) );\n\n}, 'vec3' ).once( [ 'POSITION' ] ) )();\n\n/**\n * TSL object that represents the position world direction of the current rendered object.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst positionWorldDirection = /*@__PURE__*/ ( Fn( () => {\n\n\tconst vertexPWD = positionLocal.transformDirection( modelWorldMatrix ).toVarying( 'v_positionWorldDirection' );\n\n\treturn vertexPWD.normalize().toVar( 'positionWorldDirection' );\n\n}, 'vec3' ).once( [ 'POSITION' ] ) )();\n\n/**\n * TSL object that represents the vertex position in view space of the current rendered object.\n *\n * @tsl\n * @type {VaryingNode<vec3>}\n */\nconst positionView = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tif ( builder.shaderStage === 'fragment' && builder.material.vertexNode ) {\n\n\t\t// reconstruct view position from clip space\n\n\t\tconst viewPos = cameraProjectionMatrixInverse.mul( clipSpace );\n\n\t\treturn viewPos.xyz.div( viewPos.w ).toVar( 'positionView' );\n\n\t}\n\n\treturn builder.context.setupPositionView().toVarying( 'v_positionView' );\n\n}, 'vec3' ).once( [ 'POSITION', 'VERTEX' ] ) )();\n\n/**\n * TSL object that represents the position view direction of the current rendered object.\n *\n * @tsl\n * @type {VaryingNode<vec3>}\n */\nconst positionViewDirection = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tlet output;\n\n\tif ( builder.camera.isOrthographicCamera ) {\n\n\t\toutput = vec3( 0, 0, 1 );\n\n\t} else {\n\n\t\toutput = positionView.negate().toVarying( 'v_positionViewDirection' ).normalize();\n\n\t}\n\n\treturn output.toVar( 'positionViewDirection' );\n\n}, 'vec3' ).once( [ 'POSITION' ] ) )();\n\n/**\n * This node can be used to evaluate whether a primitive is front or back facing.\n *\n * @augments Node\n */\nclass FrontFacingNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'FrontFacingNode';\n\n\t}\n\n\t/**\n\t * Constructs a new front facing node.\n\t */\n\tconstructor() {\n\n\t\tsuper( 'bool' );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isFrontFacingNode = true;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tif ( builder.shaderStage !== 'fragment' ) return 'true';\n\n\t\t//\n\n\t\tconst { material } = builder;\n\n\t\tif ( material.side === BackSide ) {\n\n\t\t\treturn 'false';\n\n\t\t}\n\n\t\treturn builder.getFrontFacing();\n\n\t}\n\n}\n\n/**\n * TSL object that represents whether a primitive is front or back facing\n *\n * @tsl\n * @type {FrontFacingNode<bool>}\n */\nconst frontFacing = /*@__PURE__*/ nodeImmutable( FrontFacingNode );\n\n/**\n * TSL object that represents the front facing status as a number instead of a bool.\n * `1` means front facing, `-1` means back facing.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst faceDirection = /*@__PURE__*/ float( frontFacing ).mul( 2.0 ).sub( 1.0 );\n\n/**\n * Converts a direction vector to a face direction vector based on the material's side.\n *\n * If the material is set to `BackSide`, the direction is inverted.\n * If the material is set to `DoubleSide`, the direction is multiplied by `faceDirection`.\n *\n * @tsl\n * @param {Node<vec3>} direction - The direction vector to convert.\n * @returns {Node<vec3>} The converted direction vector.\n */\nconst directionToFaceDirection = /*@__PURE__*/ Fn( ( [ direction ], { material } ) => {\n\n\tconst side = material.side;\n\n\tif ( side === BackSide ) {\n\n\t\tdirection = direction.mul( -1 );\n\n\t} else if ( side === DoubleSide ) {\n\n\t\tdirection = direction.mul( faceDirection );\n\n\t}\n\n\treturn direction;\n\n} );\n\n/**\n * TSL object that represents the normal attribute of the current rendered object in local space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst normalGeometry = /*@__PURE__*/ attribute( 'normal', 'vec3' );\n\n/**\n * TSL object that represents the vertex normal of the current rendered object in local space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tif ( builder.geometry.hasAttribute( 'normal' ) === false ) {\n\n\t\twarn( 'TSL: Vertex attribute \"normal\" not found on geometry.' );\n\n\t\treturn vec3( 0, 1, 0 );\n\n\t}\n\n\treturn normalGeometry;\n\n}, 'vec3' ).once() )().toVar( 'normalLocal' );\n\n/**\n * TSL object that represents the flat vertex normal of the current rendered object in view space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );\n\n/**\n * TSL object that represents the vertex normal of the current rendered object in view space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tlet node;\n\n\tif ( builder.isFlatShading() ) {\n\n\t\tnode = normalFlat;\n\n\t} else {\n\n\t\tnode = transformNormalToView( normalLocal ).toVarying( 'v_normalViewGeometry' ).normalize();\n\n\t}\n\n\treturn node;\n\n}, 'vec3' ).once() )().toVar( 'normalViewGeometry' );\n\n/**\n * TSL object that represents the vertex normal of the current rendered object in world space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tlet normal = normalViewGeometry.transformDirection( cameraViewMatrix );\n\n\tif ( builder.isFlatShading() !== true ) {\n\n\t\tnormal = normal.toVarying( 'v_normalWorldGeometry' );\n\n\t}\n\n\treturn normal.normalize().toVar( 'normalWorldGeometry' );\n\n}, 'vec3' ).once() )();\n\n/**\n * TSL object that represents the vertex normal of the current rendered object in view space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst normalView = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tlet node;\n\n\tif ( builder.subBuildFn === 'NORMAL' || builder.subBuildFn === 'VERTEX' ) {\n\n\t\tnode = normalViewGeometry;\n\n\t\tif ( builder.isFlatShading() !== true ) {\n\n\t\t\tnode = directionToFaceDirection( node );\n\n\t\t}\n\n\t} else {\n\n\t\t// Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)\n\n\t\tnode = builder.context.setupNormal().context( { getUV: null, getTextureLevel: null } );\n\n\t}\n\n\treturn node;\n\n}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'normalView' );\n\n/**\n * TSL object that represents the vertex normal of the current rendered object in world space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst normalWorld = /*@__PURE__*/ normalView.transformDirection( cameraViewMatrix ).toVar( 'normalWorld' );\n\n/**\n * TSL object that represents the clearcoat vertex normal of the current rendered object in view space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context } ) => {\n\n\tlet node;\n\n\tif ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {\n\n\t\tnode = normalView;\n\n\t} else {\n\n\t\t// Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)\n\n\t\tnode = context.setupClearcoatNormal().context( { getUV: null, getTextureLevel: null } );\n\n\t}\n\n\treturn node;\n\n}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'clearcoatNormalView' );\n\n/**\n * Transforms the normal with the given matrix.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} normal - The normal.\n * @param {Node<mat3>} [matrix=modelWorldMatrix] - The matrix.\n * @return {Node<vec3>} The transformed normal.\n */\nconst transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorldMatrix ] ) => {\n\n\tconst m = mat3( matrix );\n\n\tconst transformedNormal = normal.div( vec3( m[ 0 ].dot( m[ 0 ] ), m[ 1 ].dot( m[ 1 ] ), m[ 2 ].dot( m[ 2 ] ) ) );\n\n\treturn m.mul( transformedNormal ).xyz;\n\n} );\n\n/**\n * Transforms the given normal from local to view space.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} normal - The normal.\n * @param {NodeBuilder} builder - The current node builder.\n * @return {Node<vec3>} The transformed normal.\n */\nconst transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {\n\n\tconst modelNormalViewMatrix = builder.context.modelNormalViewMatrix;\n\n\tif ( modelNormalViewMatrix ) {\n\n\t\treturn modelNormalViewMatrix.transformDirection( normal );\n\n\t}\n\n\t//\n\n\tconst transformedNormal = modelNormalMatrix.mul( normal );\n\n\treturn cameraViewMatrix.transformDirection( transformedNormal );\n\n} );\n\n// Deprecated\n\n/**\n * TSL object that represents the transformed vertex normal of the current rendered object in view space.\n *\n * @tsl\n * @type {Node<vec3>}\n * @deprecated since r178. Use `normalView` instead.\n */\nconst transformedNormalView = ( Fn( () => { // @deprecated, r177\n\n\twarn( 'TSL: \"transformedNormalView\" is deprecated. Use \"normalView\" instead.' );\n\treturn normalView;\n\n} ).once( [ 'NORMAL', 'VERTEX' ] ) )();\n\n/**\n * TSL object that represents the transformed vertex normal of the current rendered object in world space.\n *\n * @tsl\n * @type {Node<vec3>}\n * @deprecated since r178. Use `normalWorld` instead.\n */\nconst transformedNormalWorld = ( Fn( () => { // @deprecated, r177\n\n\twarn( 'TSL: \"transformedNormalWorld\" is deprecated. Use \"normalWorld\" instead.' );\n\treturn normalWorld;\n\n} ).once( [ 'NORMAL', 'VERTEX' ] ) )();\n\n/**\n * TSL object that represents the transformed clearcoat vertex normal of the current rendered object in view space.\n *\n * @tsl\n * @type {Node<vec3>}\n * @deprecated since r178. Use `clearcoatNormalView` instead.\n */\nconst transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177\n\n\twarn( 'TSL: \"transformedClearcoatNormalView\" is deprecated. Use \"clearcoatNormalView\" instead.' );\n\treturn clearcoatNormalView;\n\n} ).once( [ 'NORMAL', 'VERTEX' ] ) )();\n\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\n\n/**\n * TSL object that represents the refraction ratio of the material used for rendering the current object.\n *\n * @tsl\n * @type {UniformNode<float>}\n */\nconst materialRefractionRatio = /*@__PURE__*/ uniform( 0 ).onReference( ( { material } ) => material ).onObjectUpdate( ( { material } ) => material.refractionRatio );\n\n/**\n * TSL object that represents the intensity of environment maps of PBR materials.\n * When `material.envMap` is set, the value is `material.envMapIntensity` otherwise `scene.environmentIntensity`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialEnvIntensity = /*@__PURE__*/ uniform( 1 ).onReference( ( { material } ) => material ).onObjectUpdate( function ( { material, scene } ) {\n\n\treturn material.envMap ? material.envMapIntensity : scene.environmentIntensity;\n\n} );\n\n/**\n * TSL object that represents the rotation of environment maps.\n * When `material.envMap` is set, the value is `material.envMapRotation`. `scene.environmentRotation` controls the\n * rotation of `scene.environment` instead.\n *\n * @tsl\n * @type {Node<mat4>}\n */\nconst materialEnvRotation = /*@__PURE__*/ uniform( new Matrix4() ).onReference( function ( frame ) {\n\n\treturn frame.material;\n\n} ).onObjectUpdate( function ( { material, scene } ) {\n\n\tconst rotation = ( scene.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;\n\n\tif ( rotation ) {\n\n\t\t// note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()\n\t\t_m1$1.makeRotationFromEuler( rotation ).transpose();\n\n\t} else {\n\n\t\t_m1$1.identity();\n\n\t}\n\n\treturn _m1$1;\n\n} );\n\n/**\n * The reflect vector in view space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect( normalView );\n\n/**\n * The refract vector in view space.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst refractView = /*@__PURE__*/ positionViewDirection.negate().refract( normalView, materialRefractionRatio );\n\n/**\n * Used for sampling cube maps when using cube reflection mapping.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst reflectVector = /*@__PURE__*/ reflectView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );\n\n/**\n * Used for sampling cube maps when using cube refraction mapping.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst refractVector = /*@__PURE__*/ refractView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );\n\nconst EmptyTexture = /*@__PURE__*/ new CubeTexture();\n\n/**\n * This type of uniform node represents a cube texture.\n *\n * @augments TextureNode\n */\nclass CubeTextureNode extends TextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'CubeTextureNode';\n\n\t}\n\n\t/**\n\t * Constructs a new cube texture node.\n\t *\n\t * @param {CubeTexture} value - The cube texture.\n\t * @param {?Node<vec3>} [uvNode=null] - The uv node.\n\t * @param {?Node<int>} [levelNode=null] - The level node.\n\t * @param {?Node<float>} [biasNode=null] - The bias node.\n\t */\n\tconstructor( value, uvNode = null, levelNode = null, biasNode = null ) {\n\n\t\tsuper( value, uvNode, levelNode, biasNode );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCubeTextureNode = true;\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to return the appropriate cube texture type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( /*builder*/ ) {\n\n\t\tif ( this.value.isDepthTexture === true ) {\n\n\t\t\treturn 'cubeDepthTexture';\n\n\t\t}\n\n\t\treturn 'cubeTexture';\n\n\t}\n\n\t/**\n\t * Returns a default uvs based on the mapping type of the cube texture.\n\t *\n\t * @return {Node<vec3>} The default uv attribute.\n\t */\n\tgetDefaultUV() {\n\n\t\tconst texture = this.value;\n\n\t\tif ( texture.mapping === CubeReflectionMapping ) {\n\n\t\t\treturn reflectVector;\n\n\t\t} else if ( texture.mapping === CubeRefractionMapping ) {\n\n\t\t\treturn refractVector;\n\n\t\t} else {\n\n\t\t\terror( 'CubeTextureNode: Mapping \"%s\" not supported.', texture.mapping );\n\n\t\t\treturn vec3( 0, 0, 0 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Overwritten with an empty implementation since the `updateMatrix` flag is ignored\n\t * for cube textures. The uv transformation matrix is not applied to cube textures.\n\t *\n\t * @param {boolean} value - The update toggle.\n\t */\n\tsetUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for CubeTextureNode\n\n\t/**\n\t * Setups the uv node. Depending on the backend as well as the texture type, it might be necessary\n\t * to modify the uv node for correct sampling.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node} uvNode - The uv node to setup.\n\t * @return {Node} The updated uv node.\n\t */\n\tsetupUV( builder, uvNode ) {\n\n\t\tconst texture = this.value;\n\n\t\t// Depth textures (shadow maps) - no environment rotation, Y flip for WebGPU\n\t\tif ( texture.isDepthTexture === true ) {\n\n\t\t\tif ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\t\treturn vec3( uvNode.x, uvNode.y.negate(), uvNode.z );\n\n\t\t\t}\n\n\t\t\treturn uvNode;\n\n\t\t}\n\n\t\t// rotate first\n\n\t\tuvNode = materialEnvRotation.mul( uvNode );\n\n\t\t// flip\n\n\t\tif ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem || ! texture.isRenderTargetTexture ) {\n\n\t\t\tuvNode = vec3( uvNode.x.negate(), uvNode.yz );\n\n\t\t}\n\n\t\treturn uvNode;\n\n\t}\n\n\t/**\n\t * Generates the uv code snippet.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node} cubeUV - The uv node to generate code for.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerateUV( builder, cubeUV ) {\n\n\t\treturn cubeUV.build( builder, this.sampler === true ? 'vec3' : 'ivec3' );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a cube texture node.\n *\n * @tsl\n * @function\n * @param {CubeTexture} value - The cube texture.\n * @param {?Node<vec3>} [uvNode=null] - The uv node.\n * @param {?Node<int>} [levelNode=null] - The level node.\n * @param {?Node<float>} [biasNode=null] - The bias node.\n * @returns {CubeTextureNode}\n */\nconst cubeTextureBase = /*@__PURE__*/ nodeProxy( CubeTextureNode ).setParameterLength( 1, 4 ).setName( 'cubeTexture' );\n\n/**\n * TSL function for creating a cube texture uniform node.\n *\n * @tsl\n * @function\n * @param {?(CubeTexture|CubeTextureNode)} [value=EmptyTexture] - The cube texture.\n * @param {?Node<vec3>} [uvNode=null] - The uv node.\n * @param {?Node<int>} [levelNode=null] - The level node.\n * @param {?Node<float>} [biasNode=null] - The bias node.\n * @returns {CubeTextureNode}\n */\nconst cubeTexture = ( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) => {\n\n\tlet textureNode;\n\n\tif ( value && value.isCubeTextureNode === true ) {\n\n\t\ttextureNode = nodeObject( value.clone() );\n\t\ttextureNode.referenceNode = value; // Ensure the reference is set to the original node\n\n\t\tif ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );\n\t\tif ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );\n\t\tif ( biasNode !== null ) textureNode.biasNode = nodeObject( biasNode );\n\n\t} else {\n\n\t\ttextureNode = cubeTextureBase( value, uvNode, levelNode, biasNode );\n\n\t}\n\n\treturn textureNode;\n\n};\n\n/**\n * TSL function for creating a uniform cube texture node.\n *\n * @tsl\n * @function\n * @param {?CubeTexture} [value=EmptyTexture] - The cube texture.\n * @returns {CubeTextureNode}\n */\nconst uniformCubeTexture = ( value = EmptyTexture ) => cubeTextureBase( value );\n\n// TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode\n\n/**\n * This class is only relevant if the referenced property is array-like.\n * In this case, `ReferenceElementNode` allows to refer to a specific\n * element inside the data structure via an index.\n *\n * @augments ArrayElementNode\n */\nclass ReferenceElementNode extends ArrayElementNode {\n\n\tstatic get type() {\n\n\t\treturn 'ReferenceElementNode';\n\n\t}\n\n\t/**\n\t * Constructs a new reference element node.\n\t *\n\t * @param {?ReferenceNode} referenceNode - The reference node.\n\t * @param {Node} indexNode - The index node that defines the element access.\n\t */\n\tconstructor( referenceNode, indexNode ) {\n\n\t\tsuper( referenceNode, indexNode );\n\n\t\t/**\n\t\t * Similar to {@link ReferenceNode#reference}, an additional\n\t\t * property references to the current node.\n\t\t *\n\t\t * @type {?ReferenceNode}\n\t\t * @default null\n\t\t */\n\t\tthis.referenceNode = referenceNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isReferenceElementNode = true;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from\n\t * the uniform type of the reference node.\n\t *\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType() {\n\n\t\treturn this.referenceNode.uniformType;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst snippet = super.generate( builder );\n\t\tconst arrayType = this.referenceNode.getNodeType( builder );\n\t\tconst elementType = this.getNodeType( builder );\n\n\t\treturn builder.format( snippet, arrayType, elementType );\n\n\t}\n\n}\n\n/**\n * This type of node establishes a reference to a property of another object.\n * In this way, the value of the node is automatically linked to the value of\n * referenced object. Reference nodes internally represent the linked value\n * as a uniform.\n *\n * @augments Node\n */\nclass ReferenceNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ReferenceNode';\n\n\t}\n\n\t/**\n\t * Constructs a new reference node.\n\t *\n\t * @param {string} property - The name of the property the node refers to.\n\t * @param {string} uniformType - The uniform type that should be used to represent the property value.\n\t * @param {?Object} [object=null] - The object the property belongs to.\n\t * @param {?number} [count=null] - When the linked property is an array-like, this parameter defines its length.\n\t */\n\tconstructor( property, uniformType, object = null, count = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The name of the property the node refers to.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.property = property;\n\n\t\t/**\n\t\t * The uniform type that should be used to represent the property value.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.uniformType = uniformType;\n\n\t\t/**\n\t\t * The object the property belongs to.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.object = object;\n\n\t\t/**\n\t\t * When the linked property is an array, this parameter defines its length.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.count = count;\n\n\t\t/**\n\t\t * The property name might have dots so nested properties can be referred.\n\t\t * The hierarchy of the names is stored inside this array.\n\t\t *\n\t\t * @type {Array<string>}\n\t\t */\n\t\tthis.properties = property.split( '.' );\n\n\t\t/**\n\t\t * Points to the current referred object. This property exists next to {@link ReferenceNode#object}\n\t\t * since the final reference might be updated from calling code.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.reference = object;\n\n\t\t/**\n\t\t * The uniform node that holds the value of the reference node.\n\t\t *\n\t\t * @type {UniformNode}\n\t\t * @default null\n\t\t */\n\t\tthis.node = null;\n\n\t\t/**\n\t\t * The uniform group of the internal uniform.\n\t\t *\n\t\t * @type {UniformGroupNode}\n\t\t * @default null\n\t\t */\n\t\tthis.group = null;\n\n\t\t/**\n\t\t * An optional label of the internal uniform node.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.name = null;\n\n\t\t/**\n\t\t * Overwritten since reference nodes are updated per object.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'object'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.OBJECT;\n\n\t}\n\n\t/**\n\t * When the referred property is array-like, this method can be used\n\t * to access elements via an index node.\n\t *\n\t * @param {IndexNode} indexNode - indexNode.\n\t * @return {ReferenceElementNode} A reference to an element.\n\t */\n\telement( indexNode ) {\n\n\t\treturn new ReferenceElementNode( this, nodeObject( indexNode ) );\n\n\t}\n\n\t/**\n\t * Sets the uniform group for this reference node.\n\t *\n\t * @param {UniformGroupNode} group - The uniform group to set.\n\t * @return {ReferenceNode} A reference to this node.\n\t */\n\tsetGroup( group ) {\n\n\t\tthis.group = group;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the name for the internal uniform.\n\t *\n\t * @param {string} name - The label to set.\n\t * @return {ReferenceNode} A reference to this node.\n\t */\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the label for the internal uniform.\n\t *\n\t * @deprecated\n\t * @param {string} name - The label to set.\n\t * @return {ReferenceNode} A reference to this node.\n\t */\n\tlabel( name ) {\n\n\t\twarn( 'TSL: \"label()\" has been deprecated. Use \"setName()\" instead.' ); // @deprecated r179\n\n\t\treturn this.setName( name );\n\n\t}\n\n\t/**\n\t * Sets the node type which automatically defines the internal\n\t * uniform type.\n\t *\n\t * @param {string} uniformType - The type to set.\n\t */\n\tsetNodeType( uniformType ) {\n\n\t\tlet node = null;\n\n\t\tif ( this.count !== null ) {\n\n\t\t\tnode = buffer( null, uniformType, this.count );\n\n\t\t} else if ( Array.isArray( this.getValueFromReference() ) ) {\n\n\t\t\tnode = uniformArray( null, uniformType );\n\n\t\t} else if ( uniformType === 'texture' ) {\n\n\t\t\tnode = texture( null );\n\n\t\t} else if ( uniformType === 'cubeTexture' ) {\n\n\t\t\tnode = cubeTexture( null );\n\n\t\t} else {\n\n\t\t\tnode = uniform( null, uniformType );\n\n\t\t}\n\n\t\tif ( this.group !== null ) {\n\n\t\t\tnode.setGroup( this.group );\n\n\t\t}\n\n\t\tif ( this.name !== null ) node.setName( this.name );\n\n\t\tthis.node = node;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from\n\t * the type of the reference node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tif ( this.node === null ) {\n\n\t\t\tthis.updateReference( builder );\n\t\t\tthis.updateValue();\n\n\t\t}\n\n\t\treturn this.node.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Returns the property value from the given referred object.\n\t *\n\t * @param {Object} [object=this.reference] - The object to retrieve the property value from.\n\t * @return {any} The value.\n\t */\n\tgetValueFromReference( object = this.reference ) {\n\n\t\tconst { properties } = this;\n\n\t\tlet value = object[ properties[ 0 ] ];\n\n\t\tfor ( let i = 1; i < properties.length; i ++ ) {\n\n\t\t\tvalue = value[ properties[ i ] ];\n\n\t\t}\n\n\t\treturn value;\n\n\t}\n\n\t/**\n\t * Allows to update the reference based on the given state. The state is only\n\t * evaluated {@link ReferenceNode#object} is not set.\n\t *\n\t * @param {(NodeFrame|NodeBuilder)} state - The current state.\n\t * @return {Object} The updated reference.\n\t */\n\tupdateReference( state ) {\n\n\t\tthis.reference = this.object !== null ? this.object : state.object;\n\n\t\treturn this.reference;\n\n\t}\n\n\t/**\n\t * The output of the reference node is the internal uniform node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {UniformNode} The output node.\n\t */\n\tsetup( /* builder */ ) {\n\n\t\tthis.updateValue();\n\n\t\treturn this.node;\n\n\t}\n\n\t/**\n\t * Overwritten to update the internal uniform value.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( /*frame*/ ) {\n\n\t\tthis.updateValue();\n\n\t}\n\n\t/**\n\t * Retrieves the value from the referred object property and uses it\n\t * to updated the internal uniform.\n\t */\n\tupdateValue() {\n\n\t\tif ( this.node === null ) this.setNodeType( this.uniformType );\n\n\t\tconst value = this.getValueFromReference();\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tthis.node.array = value;\n\n\t\t} else {\n\n\t\t\tthis.node.value = value;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * TSL function for creating a reference node.\n *\n * @tsl\n * @function\n * @param {string} name - The name of the property the node refers to.\n * @param {string} type - The uniform type that should be used to represent the property value.\n * @param {?Object} [object] - The object the property belongs to.\n * @returns {ReferenceNode}\n */\nconst reference = ( name, type, object ) => new ReferenceNode( name, type, object );\n\n/**\n * TSL function for creating a reference node. Use this function if you want need a reference\n * to an array-like property that should be represented as a uniform buffer.\n *\n * @tsl\n * @function\n * @param {string} name - The name of the property the node refers to.\n * @param {string} type - The uniform type that should be used to represent the property value.\n * @param {number} count - The number of value inside the array-like object.\n * @param {Object} object - An array-like object the property belongs to.\n * @returns {ReferenceNode}\n */\nconst referenceBuffer = ( name, type, count, object ) => new ReferenceNode( name, type, object, count );\n\n/**\n * This node is a special type of reference node which is intended\n * for linking material properties with node values.\n * ```js\n * const opacityNode = materialReference( 'opacity', 'float', material );\n * ```\n * When changing `material.opacity`, the node value of `opacityNode` will\n * automatically be updated.\n *\n * @augments ReferenceNode\n */\nclass MaterialReferenceNode extends ReferenceNode {\n\n\tstatic get type() {\n\n\t\treturn 'MaterialReferenceNode';\n\n\t}\n\n\t/**\n\t * Constructs a new material reference node.\n\t *\n\t * @param {string} property - The name of the property the node refers to.\n\t * @param {string} inputType - The uniform type that should be used to represent the property value.\n\t * @param {?Material} [material=null] - The material the property belongs to. When no material is set,\n\t * the node refers to the material of the current rendered object.\n\t */\n\tconstructor( property, inputType, material = null ) {\n\n\t\tsuper( property, inputType, material );\n\n\t\t/**\n\t\t * The material the property belongs to. When no material is set,\n\t\t * the node refers to the material of the current rendered object.\n\t\t *\n\t\t * @type {?Material}\n\t\t * @default null\n\t\t */\n\t\tthis.material = material;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMaterialReferenceNode = true;\n\n\t}\n\n\t/**\n\t * Updates the reference based on the given state. The state is only evaluated\n\t * {@link MaterialReferenceNode#material} is not set.\n\t *\n\t * @param {(NodeFrame|NodeBuilder)} state - The current state.\n\t * @return {Object} The updated reference.\n\t */\n\tupdateReference( state ) {\n\n\t\tthis.reference = this.material !== null ? this.material : state.material;\n\n\t\treturn this.reference;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a material reference node.\n *\n * @tsl\n * @function\n * @param {string} name - The name of the property the node refers to.\n * @param {string} type - The uniform type that should be used to represent the property value.\n * @param {?Material} [material=null] - The material the property belongs to.\n * When no material is set, the node refers to the material of the current rendered object.\n * @returns {MaterialReferenceNode}\n */\nconst materialReference = ( name, type, material = null ) => new MaterialReferenceNode( name, type, material );\n\n// Normal Mapping Without Precomputed Tangents\n// http://www.thetenthplanet.de/archives/1180\n\nconst uv = uv$1();\n\nconst q0 = positionView.dFdx();\nconst q1 = positionView.dFdy();\nconst st0 = uv.dFdx();\nconst st1 = uv.dFdy();\n\nconst N = normalView;\n\nconst q1perp = q1.cross( N );\nconst q0perp = N.cross( q0 );\n\nconst T = q1perp.mul( st0.x ).add( q0perp.mul( st1.x ) );\nconst B = q1perp.mul( st0.y ).add( q0perp.mul( st1.y ) );\n\nconst det = T.dot( T ).max( B.dot( B ) );\nconst scale$1 = det.equal( 0.0 ).select( 0.0, det.inverseSqrt() );\n\n/**\n * Tangent vector in view space, computed dynamically from geometry and UV derivatives.\n * Useful for normal mapping without precomputed tangents.\n *\n * Reference: http://www.thetenthplanet.de/archives/1180\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst tangentViewFrame = /*@__PURE__*/ T.mul( scale$1 ).toVar( 'tangentViewFrame' );\n\n/**\n * Bitangent vector in view space, computed dynamically from geometry and UV derivatives.\n * Complements the tangentViewFrame for constructing the tangent space basis.\n *\n * Reference: http://www.thetenthplanet.de/archives/1180\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst bitangentViewFrame = /*@__PURE__*/ B.mul( scale$1 ).toVar( 'bitangentViewFrame' );\n\n/**\n * TSL object that represents the tangent attribute of the current rendered object.\n *\n * @tsl\n * @type {Node<vec4>}\n */\nconst tangentGeometry = /*@__PURE__*/ attribute( 'tangent', 'vec4' );\n\n/**\n * TSL object that represents the vertex tangent in local space of the current rendered object.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst tangentLocal = /*@__PURE__*/ tangentGeometry.xyz.toVar( 'tangentLocal' );\n\n/**\n * TSL object that represents the vertex tangent in view space of the current rendered object.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst tangentView = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tlet node;\n\n\tif ( builder.subBuildFn === 'VERTEX' || builder.geometry.hasAttribute( 'tangent' ) ) {\n\n\t\tnode = modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz.toVarying( 'v_tangentView' ).normalize();\n\n\t} else {\n\n\t\tnode = tangentViewFrame;\n\n\t}\n\n\tif ( builder.isFlatShading() !== true ) {\n\n\t\tnode = directionToFaceDirection( node );\n\n\t}\n\n\treturn node;\n\n}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'tangentView' );\n\n/**\n * TSL object that represents the vertex tangent in world space of the current rendered object.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );\n\n/**\n * Returns the bitangent node and assigns it to a varying if the material is not flat shaded.\n *\n * @tsl\n * @private\n * @param {Node<vec3>} crossNormalTangent - The cross product of the normal and tangent vectors.\n * @param {string} varyingName - The name of the varying to assign the bitangent to.\n * @returns {Node<vec3>} The bitangent node.\n */\nconst getBitangent = /*@__PURE__*/ Fn( ( [ crossNormalTangent, varyingName ], builder ) => {\n\n\tlet bitangent = crossNormalTangent.mul( tangentGeometry.w ).xyz;\n\n\tif ( builder.subBuildFn === 'NORMAL' && builder.isFlatShading() !== true ) {\n\n\t\tbitangent = bitangent.toVarying( varyingName );\n\n\t}\n\n\treturn bitangent;\n\n} ).once( [ 'NORMAL' ] );\n\n/**\n * TSL object that represents the bitangent attribute of the current rendered object.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst bitangentGeometry = /*@__PURE__*/ getBitangent( normalGeometry.cross( tangentGeometry ), 'v_bitangentGeometry' ).normalize().toVar( 'bitangentGeometry' );\n\n/**\n * TSL object that represents the vertex bitangent in local space of the current rendered object.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst bitangentLocal = /*@__PURE__*/ getBitangent( normalLocal.cross( tangentLocal ), 'v_bitangentLocal' ).normalize().toVar( 'bitangentLocal' );\n\n/**\n * TSL object that represents the vertex bitangent in view space of the current rendered object.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst bitangentView = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\tlet node;\n\n\tif ( builder.subBuildFn === 'VERTEX' || builder.geometry.hasAttribute( 'tangent' ) ) {\n\n\t\tnode = getBitangent( normalView.cross( tangentView ), 'v_bitangentView' ).normalize();\n\n\t} else {\n\n\t\tnode = bitangentViewFrame;\n\n\t}\n\n\tif ( builder.isFlatShading() !== true ) {\n\n\t\tnode = directionToFaceDirection( node );\n\n\t}\n\n\treturn node;\n\n}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'bitangentView' );\n\n/**\n * TSL object that represents the vertex bitangent in world space of the current rendered object.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst bitangentWorld = /*@__PURE__*/ getBitangent( normalWorld.cross( tangentWorld ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );\n\n/**\n * TSL object that represents the TBN matrix in view space.\n *\n * @tsl\n * @type {Node<mat3>}\n */\nconst TBNViewMatrix = /*@__PURE__*/ mat3( tangentView, bitangentView, normalView ).toVar( 'TBNViewMatrix' );\n\n/**\n * TSL object that represents the parallax direction.\n *\n * @tsl\n * @type {Node<mat3>}\n */\nconst parallaxDirection = /*@__PURE__*/ positionViewDirection.mul( TBNViewMatrix )/*.normalize()*/;\n\n/**\n * TSL function for computing parallax uv coordinates.\n *\n * @tsl\n * @function\n * @param {Node<vec2>} uv - A uv node.\n * @param {Node<vec2>} scale - A scale node.\n * @returns {Node<vec2>} Parallax uv coordinates.\n */\nconst parallaxUV = ( uv, scale ) => uv.sub( parallaxDirection.mul( scale ) );\n\n/**\n * TSL function for computing bent normals.\n *\n * @tsl\n * @function\n * @returns {Node<vec3>} Bent normals.\n */\nconst bentNormalView = /*@__PURE__*/ ( Fn( () => {\n\n\t// https://google.github.io/filament/Filament.md.html#lighting/imagebasedlights/anisotropy\n\n\tlet bentNormal = anisotropyB.cross( positionViewDirection );\n\tbentNormal = bentNormal.cross( anisotropyB ).normalize();\n\tbentNormal = mix( bentNormal, normalView, anisotropy.mul( roughness.oneMinus() ).oneMinus().pow2().pow2() ).normalize();\n\n\treturn bentNormal;\n\n} ).once() )();\n\n/**\n * Packs a direction vector into a color value.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} node - The direction to pack.\n * @return {Node<vec3>} The color.\n */\nconst directionToColor = ( node ) => nodeObject( node ).mul( 0.5 ).add( 0.5 );\n\n/**\n * Unpacks a color value into a direction vector.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} node - The color to unpack.\n * @return {Node<vec3>} The direction.\n */\nconst colorToDirection = ( node ) => nodeObject( node ).mul( 2.0 ).sub( 1 );\n\n/**\n * Unpacks a tangent space normal, reconstructing the Z component by projecting the X,Y coordinates onto the hemisphere.\n * The X,Y coordinates are expected to be in the [-1, 1] range.\n *\n * @tsl\n * @function\n * @param {Node<vec2>} xy - The X,Y coordinates of the normal.\n * @return {Node<vec3>} The resulting normal.\n */\nconst unpackNormal = ( xy ) => vec3( xy, sqrt( saturate( float( 1.0 ).sub( dot( xy, xy ) ) ) ) );\n\n/**\n * This class can be used for applying normals maps to materials.\n *\n * ```js\n * material.normalNode = normalMap( texture( normalTex ) );\n * ```\n *\n * @augments TempNode\n */\nclass NormalMapNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'NormalMapNode';\n\n\t}\n\n\t/**\n\t * Constructs a new normal map node.\n\t *\n\t * @param {Node<vec3>} node - Represents the normal map data.\n\t * @param {?Node<vec2>} [scaleNode=null] - Controls the intensity of the effect.\n\t */\n\tconstructor( node, scaleNode = null ) {\n\n\t\tsuper( 'vec3' );\n\n\t\t/**\n\t\t * Represents the normal map data.\n\t\t *\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis.node = node;\n\n\t\t/**\n\t\t * Controls the intensity of the effect.\n\t\t *\n\t\t * @type {?Node<vec2>}\n\t\t * @default null\n\t\t */\n\t\tthis.scaleNode = scaleNode;\n\n\t\t/**\n\t\t * The normal map type.\n\t\t *\n\t\t * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}\n\t\t * @default TangentSpaceNormalMap\n\t\t */\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\n\t\t/**\n\t\t * Controls how to unpack the sampled normal map values.\n\t\t *\n\t\t * @type {string}\n\t\t * @default NoNormalPacking\n\t\t */\n\t\tthis.unpackNormalMode = NoNormalPacking;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst { normalMapType, scaleNode, unpackNormalMode } = this;\n\n\t\tlet normalMap = this.node.mul( 2.0 ).sub( 1.0 );\n\n\t\tif ( normalMapType === TangentSpaceNormalMap ) {\n\n\t\t\tif ( unpackNormalMode === NormalRGPacking ) {\n\n\t\t\t\tnormalMap = unpackNormal( normalMap.xy );\n\n\t\t\t} else if ( unpackNormalMode === NormalGAPacking ) {\n\n\t\t\t\tnormalMap = unpackNormal( normalMap.yw );\n\n\t\t\t} else if ( unpackNormalMode !== NoNormalPacking ) {\n\n\t\t\t\terror( `THREE.NodeMaterial: Unexpected unpack normal mode: ${ unpackNormalMode }` );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( unpackNormalMode !== NoNormalPacking ) {\n\n\t\t\t\terror( `THREE.NodeMaterial: Normal map type '${ normalMapType }' is not compatible with unpack normal mode '${ unpackNormalMode }'` );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scaleNode !== null ) {\n\n\t\t\tlet scale = scaleNode;\n\n\t\t\tif ( builder.isFlatShading() === true ) {\n\n\t\t\t\tscale = directionToFaceDirection( scale );\n\n\t\t\t}\n\n\t\t\tnormalMap = vec3( normalMap.xy.mul( scale ), normalMap.z );\n\n\t\t}\n\n\t\tlet output = null;\n\n\t\tif ( normalMapType === ObjectSpaceNormalMap ) {\n\n\t\t\toutput = transformNormalToView( normalMap );\n\n\t\t} else if ( normalMapType === TangentSpaceNormalMap ) {\n\n\t\t\toutput = TBNViewMatrix.mul( normalMap ).normalize();\n\n\t\t} else {\n\n\t\t\terror( `NodeMaterial: Unsupported normal map type: ${ normalMapType }` );\n\n\t\t\toutput = normalView; // Fallback to default normal view\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a normal map node.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} node - Represents the normal map data.\n * @param {?Node<vec2>} [scaleNode=null] - Controls the intensity of the effect.\n * @returns {NormalMapNode}\n */\nconst normalMap = /*@__PURE__*/ nodeProxy( NormalMapNode ).setParameterLength( 1, 2 );\n\n// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen\n// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf\n\nconst dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {\n\n\t// It's used to preserve the same TextureNode instance\n\tconst sampleTexture = ( callback ) => textureNode.isolate().context( { getUV: ( texNode ) => callback( texNode.uvNode || uv$1() ), forceUVContext: true } );\n\n\tconst Hll = float( sampleTexture( ( uvNode ) => uvNode ) );\n\n\treturn vec2(\n\t\tfloat( sampleTexture( ( uvNode ) => uvNode.add( uvNode.dFdx() ) ) ).sub( Hll ),\n\t\tfloat( sampleTexture( ( uvNode ) => uvNode.add( uvNode.dFdy() ) ) ).sub( Hll )\n\t).mul( bumpScale );\n\n} );\n\n// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\n\nconst perturbNormalArb = Fn( ( inputs ) => {\n\n\tconst { surf_pos, surf_norm, dHdxy } = inputs;\n\n\t// normalize is done to ensure that the bump map looks the same regardless of the texture's scale\n\tconst vSigmaX = surf_pos.dFdx().normalize();\n\tconst vSigmaY = surf_pos.dFdy().normalize();\n\tconst vN = surf_norm; // normalized\n\n\tconst R1 = vSigmaY.cross( vN );\n\tconst R2 = vN.cross( vSigmaX );\n\n\tconst fDet = vSigmaX.dot( R1 ).mul( faceDirection );\n\n\tconst vGrad = fDet.sign().mul( dHdxy.x.mul( R1 ).add( dHdxy.y.mul( R2 ) ) );\n\n\treturn fDet.abs().mul( surf_norm ).sub( vGrad ).normalize();\n\n} );\n\n/**\n * This class can be used for applying bump maps to materials.\n *\n * ```js\n * material.normalNode = bumpMap( texture( bumpTex ) );\n * ```\n *\n * @augments TempNode\n */\nclass BumpMapNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'BumpMapNode';\n\n\t}\n\n\t/**\n\t * Constructs a new bump map node.\n\t *\n\t * @param {Node<float>} textureNode - Represents the bump map data.\n\t * @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.\n\t */\n\tconstructor( textureNode, scaleNode = null ) {\n\n\t\tsuper( 'vec3' );\n\n\t\t/**\n\t\t * Represents the bump map data.\n\t\t *\n\t\t * @type {Node<float>}\n\t\t */\n\t\tthis.textureNode = textureNode;\n\n\t\t/**\n\t\t * Controls the intensity of the bump effect.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.scaleNode = scaleNode;\n\n\t}\n\n\tsetup() {\n\n\t\tconst bumpScale = this.scaleNode !== null ? this.scaleNode : 1;\n\t\tconst dHdxy = dHdxy_fwd( { textureNode: this.textureNode, bumpScale } );\n\n\t\treturn perturbNormalArb( {\n\t\t\tsurf_pos: positionView,\n\t\t\tsurf_norm: normalView,\n\t\t\tdHdxy\n\t\t} );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a bump map node.\n *\n * @tsl\n * @function\n * @param {Node<float>} textureNode - Represents the bump map data.\n * @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.\n * @returns {BumpMapNode}\n */\nconst bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode ).setParameterLength( 1, 2 );\n\nconst _propertyCache = new Map();\n\n/**\n * This class should simplify the node access to material properties.\n * It internal uses reference nodes to make sure  changes to material\n * properties are automatically reflected to predefined TSL objects\n * like e.g. `materialColor`.\n *\n * @augments Node\n */\nclass MaterialNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'MaterialNode';\n\n\t}\n\n\t/**\n\t * Constructs a new material node.\n\t *\n\t * @param {string} scope - The scope defines what kind of material property is referred by the node.\n\t */\n\tconstructor( scope ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The scope defines what material property is referred by the node.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.scope = scope;\n\n\t}\n\n\t/**\n\t * Returns a cached reference node for the given property and type.\n\t *\n\t * @param {string} property - The name of the material property.\n\t * @param {string} type - The uniform type of the property.\n\t * @return {MaterialReferenceNode} A material reference node representing the property access.\n\t */\n\tgetCache( property, type ) {\n\n\t\tlet node = _propertyCache.get( property );\n\n\t\tif ( node === undefined ) {\n\n\t\t\tnode = materialReference( property, type );\n\n\t\t\t_propertyCache.set( property, node );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n\t/**\n\t * Returns a float-typed material reference node for the given property name.\n\t *\n\t * @param {string} property - The name of the material property.\n\t * @return {MaterialReferenceNode<float>} A material reference node representing the property access.\n\t */\n\tgetFloat( property ) {\n\n\t\treturn this.getCache( property, 'float' );\n\n\t}\n\n\t/**\n\t * Returns a color-typed material reference node for the given property name.\n\t *\n\t * @param {string} property - The name of the material property.\n\t * @return {MaterialReferenceNode<color>} A material reference node representing the property access.\n\t */\n\tgetColor( property ) {\n\n\t\treturn this.getCache( property, 'color' );\n\n\t}\n\n\t/**\n\t * Returns a texture-typed material reference node for the given property name.\n\t *\n\t * @param {string} property - The name of the material property.\n\t * @return {MaterialReferenceNode} A material reference node representing the property access.\n\t */\n\tgetTexture( property ) {\n\n\t\treturn this.getCache( property === 'map' ? 'map' : property + 'Map', 'texture' );\n\n\t}\n\n\t/**\n\t * The node setup is done depending on the selected scope. Multiple material properties\n\t * might be grouped into a single node composition if they logically belong together.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node} The node representing the selected scope.\n\t */\n\tsetup( builder ) {\n\n\t\tconst material = builder.context.material;\n\t\tconst scope = this.scope;\n\n\t\tlet node = null;\n\n\t\tif ( scope === MaterialNode.COLOR ) {\n\n\t\t\tconst colorNode = material.color !== undefined ? this.getColor( scope ) : vec3();\n\n\t\t\tif ( material.map && material.map.isTexture === true ) {\n\n\t\t\t\tnode = colorNode.mul( this.getTexture( 'map' ) );\n\n\t\t\t} else {\n\n\t\t\t\tnode = colorNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.OPACITY ) {\n\n\t\t\tconst opacityNode = this.getFloat( scope );\n\n\t\t\tif ( material.alphaMap && material.alphaMap.isTexture === true ) {\n\n\t\t\t\tnode = opacityNode.mul( this.getTexture( 'alpha' ) );\n\n\t\t\t} else {\n\n\t\t\t\tnode = opacityNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.SPECULAR_STRENGTH ) {\n\n\t\t\tif ( material.specularMap && material.specularMap.isTexture === true ) {\n\n\t\t\t\tnode = this.getTexture( 'specular' ).r;\n\n\t\t\t} else {\n\n\t\t\t\tnode = float( 1 );\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.SPECULAR_INTENSITY ) {\n\n\t\t\tconst specularIntensityNode = this.getFloat( scope );\n\n\t\t\tif ( material.specularIntensityMap && material.specularIntensityMap.isTexture === true ) {\n\n\t\t\t\tnode = specularIntensityNode.mul( this.getTexture( scope ).a );\n\n\t\t\t} else {\n\n\t\t\t\tnode = specularIntensityNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.SPECULAR_COLOR ) {\n\n\t\t\tconst specularColorNode = this.getColor( scope );\n\n\t\t\tif ( material.specularColorMap && material.specularColorMap.isTexture === true ) {\n\n\t\t\t\tnode = specularColorNode.mul( this.getTexture( scope ).rgb );\n\n\t\t\t} else {\n\n\t\t\t\tnode = specularColorNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.ROUGHNESS ) { // TODO: cleanup similar branches\n\n\t\t\tconst roughnessNode = this.getFloat( scope );\n\n\t\t\tif ( material.roughnessMap && material.roughnessMap.isTexture === true ) {\n\n\t\t\t\tnode = roughnessNode.mul( this.getTexture( scope ).g );\n\n\t\t\t} else {\n\n\t\t\t\tnode = roughnessNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.METALNESS ) {\n\n\t\t\tconst metalnessNode = this.getFloat( scope );\n\n\t\t\tif ( material.metalnessMap && material.metalnessMap.isTexture === true ) {\n\n\t\t\t\tnode = metalnessNode.mul( this.getTexture( scope ).b );\n\n\t\t\t} else {\n\n\t\t\t\tnode = metalnessNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.EMISSIVE ) {\n\n\t\t\tconst emissiveIntensityNode = this.getFloat( 'emissiveIntensity' );\n\t\t\tconst emissiveNode = this.getColor( scope ).mul( emissiveIntensityNode );\n\n\t\t\tif ( material.emissiveMap && material.emissiveMap.isTexture === true ) {\n\n\t\t\t\tnode = emissiveNode.mul( this.getTexture( scope ) );\n\n\t\t\t} else {\n\n\t\t\t\tnode = emissiveNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.NORMAL ) {\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tnode = normalMap( this.getTexture( 'normal' ), this.getCache( 'normalScale', 'vec2' ) );\n\t\t\t\tnode.normalMapType = material.normalMapType;\n\n\t\t\t\tif ( material.normalMap.format == RGFormat || material.normalMap.format == RED_GREEN_RGTC2_Format || material.normalMap.format == RG11_EAC_Format ) {\n\n\t\t\t\t\tnode.unpackNormalMode = NormalRGPacking;\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.bumpMap ) {\n\n\t\t\t\tnode = bumpMap( this.getTexture( 'bump' ).r, this.getFloat( 'bumpScale' ) );\n\n\t\t\t} else {\n\n\t\t\t\tnode = normalView;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.CLEARCOAT ) {\n\n\t\t\tconst clearcoatNode = this.getFloat( scope );\n\n\t\t\tif ( material.clearcoatMap && material.clearcoatMap.isTexture === true ) {\n\n\t\t\t\tnode = clearcoatNode.mul( this.getTexture( scope ).r );\n\n\t\t\t} else {\n\n\t\t\t\tnode = clearcoatNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.CLEARCOAT_ROUGHNESS ) {\n\n\t\t\tconst clearcoatRoughnessNode = this.getFloat( scope );\n\n\t\t\tif ( material.clearcoatRoughnessMap && material.clearcoatRoughnessMap.isTexture === true ) {\n\n\t\t\t\tnode = clearcoatRoughnessNode.mul( this.getTexture( scope ).r );\n\n\t\t\t} else {\n\n\t\t\t\tnode = clearcoatRoughnessNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.CLEARCOAT_NORMAL ) {\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tnode = normalMap( this.getTexture( scope ), this.getCache( scope + 'Scale', 'vec2' ) );\n\n\t\t\t} else {\n\n\t\t\t\tnode = normalView;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.SHEEN ) {\n\n\t\t\tconst sheenNode = this.getColor( 'sheenColor' ).mul( this.getFloat( 'sheen' ) ); // Move this mul() to CPU\n\n\t\t\tif ( material.sheenColorMap && material.sheenColorMap.isTexture === true ) {\n\n\t\t\t\tnode = sheenNode.mul( this.getTexture( 'sheenColor' ).rgb );\n\n\t\t\t} else {\n\n\t\t\t\tnode = sheenNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.SHEEN_ROUGHNESS ) {\n\n\t\t\tconst sheenRoughnessNode = this.getFloat( scope );\n\n\t\t\tif ( material.sheenRoughnessMap && material.sheenRoughnessMap.isTexture === true ) {\n\n\t\t\t\tnode = sheenRoughnessNode.mul( this.getTexture( scope ).a );\n\n\t\t\t} else {\n\n\t\t\t\tnode = sheenRoughnessNode;\n\n\t\t\t}\n\n\t\t\tnode = node.clamp( 0.0001, 1.0 );\n\n\t\t} else if ( scope === MaterialNode.ANISOTROPY ) {\n\n\t\t\tif ( material.anisotropyMap && material.anisotropyMap.isTexture === true ) {\n\n\t\t\t\tconst anisotropyPolar = this.getTexture( scope );\n\t\t\t\tconst anisotropyMat = mat2( materialAnisotropyVector.x, materialAnisotropyVector.y, materialAnisotropyVector.y.negate(), materialAnisotropyVector.x );\n\n\t\t\t\tnode = anisotropyMat.mul( anisotropyPolar.rg.mul( 2.0 ).sub( vec2( 1.0 ) ).normalize().mul( anisotropyPolar.b ) );\n\n\t\t\t} else {\n\n\t\t\t\tnode = materialAnisotropyVector;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.IRIDESCENCE_THICKNESS ) {\n\n\t\t\tconst iridescenceThicknessMaximum = reference( '1', 'float', material.iridescenceThicknessRange );\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tconst iridescenceThicknessMinimum = reference( '0', 'float', material.iridescenceThicknessRange );\n\n\t\t\t\tnode = iridescenceThicknessMaximum.sub( iridescenceThicknessMinimum ).mul( this.getTexture( scope ).g ).add( iridescenceThicknessMinimum );\n\n\t\t\t} else {\n\n\t\t\t\tnode = iridescenceThicknessMaximum;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.TRANSMISSION ) {\n\n\t\t\tconst transmissionNode = this.getFloat( scope );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tnode = transmissionNode.mul( this.getTexture( scope ).r );\n\n\t\t\t} else {\n\n\t\t\t\tnode = transmissionNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.THICKNESS ) {\n\n\t\t\tconst thicknessNode = this.getFloat( scope );\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tnode = thicknessNode.mul( this.getTexture( scope ).g );\n\n\t\t\t} else {\n\n\t\t\t\tnode = thicknessNode;\n\n\t\t\t}\n\n\t\t} else if ( scope === MaterialNode.IOR ) {\n\n\t\t\tnode = this.getFloat( scope );\n\n\t\t} else if ( scope === MaterialNode.LIGHT_MAP ) {\n\n\t\t\tnode = this.getTexture( scope ).rgb.mul( this.getFloat( 'lightMapIntensity' ) );\n\n\t\t} else if ( scope === MaterialNode.AO ) {\n\n\t\t\tnode = this.getTexture( scope ).r.sub( 1.0 ).mul( this.getFloat( 'aoMapIntensity' ) ).add( 1.0 );\n\n\t\t} else if ( scope === MaterialNode.LINE_DASH_OFFSET ) {\n\n\t\t\tnode = ( material.dashOffset ) ? this.getFloat( scope ) : float( 0 );\n\n\t\t} else {\n\n\t\t\tconst outputType = this.getNodeType( builder );\n\n\t\t\tnode = this.getCache( scope, outputType );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n}\n\nMaterialNode.ALPHA_TEST = 'alphaTest';\nMaterialNode.COLOR = 'color';\nMaterialNode.OPACITY = 'opacity';\nMaterialNode.SHININESS = 'shininess';\nMaterialNode.SPECULAR = 'specular';\nMaterialNode.SPECULAR_STRENGTH = 'specularStrength';\nMaterialNode.SPECULAR_INTENSITY = 'specularIntensity';\nMaterialNode.SPECULAR_COLOR = 'specularColor';\nMaterialNode.REFLECTIVITY = 'reflectivity';\nMaterialNode.ROUGHNESS = 'roughness';\nMaterialNode.METALNESS = 'metalness';\nMaterialNode.NORMAL = 'normal';\nMaterialNode.CLEARCOAT = 'clearcoat';\nMaterialNode.CLEARCOAT_ROUGHNESS = 'clearcoatRoughness';\nMaterialNode.CLEARCOAT_NORMAL = 'clearcoatNormal';\nMaterialNode.EMISSIVE = 'emissive';\nMaterialNode.ROTATION = 'rotation';\nMaterialNode.SHEEN = 'sheen';\nMaterialNode.SHEEN_ROUGHNESS = 'sheenRoughness';\nMaterialNode.ANISOTROPY = 'anisotropy';\nMaterialNode.IRIDESCENCE = 'iridescence';\nMaterialNode.IRIDESCENCE_IOR = 'iridescenceIOR';\nMaterialNode.IRIDESCENCE_THICKNESS = 'iridescenceThickness';\nMaterialNode.IOR = 'ior';\nMaterialNode.TRANSMISSION = 'transmission';\nMaterialNode.THICKNESS = 'thickness';\nMaterialNode.ATTENUATION_DISTANCE = 'attenuationDistance';\nMaterialNode.ATTENUATION_COLOR = 'attenuationColor';\nMaterialNode.LINE_SCALE = 'scale';\nMaterialNode.LINE_DASH_SIZE = 'dashSize';\nMaterialNode.LINE_GAP_SIZE = 'gapSize';\nMaterialNode.LINE_WIDTH = 'linewidth';\nMaterialNode.LINE_DASH_OFFSET = 'dashOffset';\nMaterialNode.POINT_SIZE = 'size';\nMaterialNode.DISPERSION = 'dispersion';\nMaterialNode.LIGHT_MAP = 'light';\nMaterialNode.AO = 'ao';\n\n/**\n * TSL object that represents alpha test of the current material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialAlphaTest = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );\n\n/**\n * TSL object that represents the diffuse color of the current material.\n * The value is composed via `color` * `map`.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst materialColor = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.COLOR );\n\n/**\n * TSL object that represents the shininess of the current material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialShininess = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SHININESS );\n\n/**\n * TSL object that represents the emissive color of the current material.\n * The value is composed via `emissive` * `emissiveIntensity` * `emissiveMap`.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst materialEmissive = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.EMISSIVE );\n\n/**\n * TSL object that represents the opacity of the current material.\n * The value is composed via `opacity` * `alphaMap`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialOpacity = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.OPACITY );\n\n/**\n * TSL object that represents the specular of the current material.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst materialSpecular = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SPECULAR );\n\n/**\n * TSL object that represents the specular intensity of the current material.\n * The value is composed via `specularIntensity` * `specularMap.a`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialSpecularIntensity = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SPECULAR_INTENSITY );\n\n/**\n * TSL object that represents the specular color of the current material.\n * The value is composed via `specularColor` * `specularMap.rgb`.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst materialSpecularColor = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SPECULAR_COLOR );\n\n/**\n * TSL object that represents the specular strength of the current material.\n * The value is composed via `specularMap.r`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialSpecularStrength = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SPECULAR_STRENGTH );\n\n/**\n * TSL object that represents the reflectivity of the current material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialReflectivity = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.REFLECTIVITY );\n\n/**\n * TSL object that represents the roughness of the current material.\n * The value is composed via `roughness` * `roughnessMap.g`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialRoughness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );\n\n/**\n * TSL object that represents the metalness of the current material.\n * The value is composed via `metalness` * `metalnessMap.b`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialMetalness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.METALNESS );\n\n/**\n * TSL object that represents the normal of the current material.\n * The value will be either `normalMap` * `normalScale`, `bumpMap` * `bumpScale` or `normalView`.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst materialNormal = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.NORMAL );\n\n/**\n * TSL object that represents the clearcoat of the current material.\n * The value is composed via `clearcoat` * `clearcoatMap.r`\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialClearcoat = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT );\n\n/**\n * TSL object that represents the clearcoat roughness of the current material.\n * The value is composed via `clearcoatRoughness` * `clearcoatRoughnessMap.r`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialClearcoatRoughness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT_ROUGHNESS );\n\n/**\n * TSL object that represents the clearcoat normal of the current material.\n * The value will be either `clearcoatNormalMap` or `normalView`.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst materialClearcoatNormal = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT_NORMAL );\n\n/**\n * TSL object that represents the rotation of the current sprite material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialRotation = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ROTATION );\n\n/**\n * TSL object that represents the sheen color of the current material.\n * The value is composed via `sheen` * `sheenColor` * `sheenColorMap`.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst materialSheen = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SHEEN );\n\n/**\n * TSL object that represents the sheen roughness of the current material.\n * The value is composed via `sheenRoughness` * `sheenRoughnessMap.a`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialSheenRoughness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SHEEN_ROUGHNESS );\n\n/**\n * TSL object that represents the anisotropy of the current material.\n *\n * @tsl\n * @type {Node<vec2>}\n */\nconst materialAnisotropy = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ANISOTROPY );\n\n/**\n * TSL object that represents the iridescence of the current material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialIridescence = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE );\n\n/**\n * TSL object that represents the iridescence IOR of the current material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialIridescenceIOR = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_IOR );\n\n/**\n * TSL object that represents the iridescence thickness of the current material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialIridescenceThickness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_THICKNESS );\n\n/**\n * TSL object that represents the transmission of the current material.\n * The value is composed via `transmission` * `transmissionMap.r`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialTransmission = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.TRANSMISSION );\n\n/**\n * TSL object that represents the thickness of the current material.\n * The value is composed via `thickness` * `thicknessMap.g`.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialThickness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.THICKNESS );\n\n/**\n * TSL object that represents the IOR of the current material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialIOR = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.IOR );\n\n/**\n * TSL object that represents the attenuation distance of the current material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialAttenuationDistance = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ATTENUATION_DISTANCE );\n\n/**\n * TSL object that represents the attenuation color of the current material.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst materialAttenuationColor = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ATTENUATION_COLOR );\n\n/**\n * TSL object that represents the scale of the current dashed line material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialLineScale = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_SCALE );\n\n/**\n * TSL object that represents the dash size of the current dashed line material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialLineDashSize = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_DASH_SIZE );\n\n/**\n * TSL object that represents the gap size of the current dashed line material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialLineGapSize = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_GAP_SIZE );\n\n/**\n * TSL object that represents the line width of the current line material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialLineWidth = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_WIDTH );\n\n/**\n * TSL object that represents the dash offset of the current line material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialLineDashOffset = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_DASH_OFFSET );\n\n/**\n * TSL object that represents the point size of the current points material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialPointSize = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.POINT_SIZE );\n\n/**\n * TSL object that represents the dispersion of the current material.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialDispersion = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.DISPERSION );\n\n/**\n * TSL object that represents the light map of the current material.\n * The value is composed via `lightMapIntensity` * `lightMap.rgb`.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst materialLightMap = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LIGHT_MAP );\n\n/**\n * TSL object that represents the ambient occlusion map of the current material.\n * The value is composed via `aoMap.r` - 1 * `aoMapIntensity` + 1.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst materialAO = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.AO );\n\n/**\n * TSL object that represents the anisotropy vector of the current material.\n *\n * @tsl\n * @type {Node<vec2>}\n */\nconst materialAnisotropyVector = /*@__PURE__*/ uniform( new Vector2() ).onReference( function ( frame ) {\n\n\treturn frame.material;\n\n} ).onRenderUpdate( function ( { material } ) {\n\n\tthis.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );\n\n} );\n\n/**\n * TSL object that represents the position in clip space after the model-view-projection transform of the current rendered object.\n *\n * @tsl\n * @type {VaryingNode<vec4>}\n */\nconst modelViewProjection = /*@__PURE__*/ ( Fn( ( builder ) => {\n\n\treturn builder.context.setupModelViewProjection();\n\n}, 'vec4' ).once() )().toVarying( 'v_modelViewProjection' );\n\n/**\n * This class enables element access on instances of {@link StorageBufferNode}.\n * In most cases, it is indirectly used when accessing elements with the\n * {@link StorageBufferNode#element} method.\n *\n * ```js\n * const position = positionStorage.element( instanceIndex );\n * ```\n *\n * @augments ArrayElementNode\n */\nclass StorageArrayElementNode extends ArrayElementNode {\n\n\tstatic get type() {\n\n\t\treturn 'StorageArrayElementNode';\n\n\t}\n\n\t/**\n\t * Constructs storage buffer element node.\n\t *\n\t * @param {StorageBufferNode} storageBufferNode - The storage buffer node.\n\t * @param {Node} indexNode - The index node that defines the element access.\n\t */\n\tconstructor( storageBufferNode, indexNode ) {\n\n\t\tsuper( storageBufferNode, indexNode );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStorageArrayElementNode = true;\n\n\t}\n\n\t/**\n\t * The storage buffer node.\n\t *\n\t * @param {Node} value\n\t * @type {StorageBufferNode}\n\t */\n\tset storageBufferNode( value ) {\n\n\t\tthis.node = value;\n\n\t}\n\n\tget storageBufferNode() {\n\n\t\treturn this.node;\n\n\t}\n\n\tgetMemberType( builder, name ) {\n\n\t\tconst structTypeNode = this.storageBufferNode.structTypeNode;\n\n\t\tif ( structTypeNode ) {\n\n\t\t\treturn structTypeNode.getMemberType( builder, name );\n\n\t\t}\n\n\t\treturn 'void';\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tif ( builder.isAvailable( 'storageBuffer' ) === false ) {\n\n\t\t\tif ( this.node.isPBO === true ) {\n\n\t\t\t\tbuilder.setupPBO( this.node );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn super.setup( builder );\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tlet snippet;\n\n\t\tconst isAssignContext = builder.context.assign;\n\n\t\t//\n\n\t\tif ( builder.isAvailable( 'storageBuffer' ) === false ) {\n\n\t\t\tif ( this.node.isPBO === true && isAssignContext !== true && ( this.node.value.isInstancedBufferAttribute || builder.shaderStage !== 'compute' ) ) {\n\n\t\t\t\tsnippet = builder.generatePBO( this );\n\n\t\t\t} else {\n\n\t\t\t\tsnippet = this.node.build( builder );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tsnippet = super.generate( builder );\n\n\t\t}\n\n\t\tif ( isAssignContext !== true ) {\n\n\t\t\tconst type = this.getNodeType( builder );\n\n\t\t\tsnippet = builder.format( snippet, type, output );\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a storage element node.\n *\n * @tsl\n * @function\n * @param {StorageBufferNode} storageBufferNode - The storage buffer node.\n * @param {Node} indexNode - The index node that defines the element access.\n * @returns {StorageArrayElementNode}\n */\nconst storageElement = /*@__PURE__*/ nodeProxy( StorageArrayElementNode ).setParameterLength( 2 );\n\n/**\n * This node is used in context of compute shaders and allows to define a\n * storage buffer for data. A typical workflow is to create instances of\n * this node with the convenience functions `attributeArray()` or `instancedArray()`,\n * setup up a compute shader that writes into the buffers and then convert\n * the storage buffers to attribute nodes for rendering.\n *\n * ```js\n * const positionBuffer = instancedArray( particleCount, 'vec3' ); // the storage buffer node\n *\n * const computeInit = Fn( () => { // the compute shader\n *\n * \tconst position = positionBuffer.element( instanceIndex );\n *\n * \t// compute position data\n *\n * \tposition.x = 1;\n * \tposition.y = 1;\n * \tposition.z = 1;\n *\n * } )().compute( particleCount );\n *\n * const particleMaterial = new THREE.SpriteNodeMaterial();\n * particleMaterial.positionNode = positionBuffer.toAttribute();\n *\n * renderer.computeAsync( computeInit );\n *\n * ```\n *\n * @augments BufferNode\n */\nclass StorageBufferNode extends BufferNode {\n\n\tstatic get type() {\n\n\t\treturn 'StorageBufferNode';\n\n\t}\n\n\t/**\n\t * Constructs a new storage buffer node.\n\t *\n\t * @param {StorageBufferAttribute|StorageInstancedBufferAttribute|BufferAttribute} value - The buffer data.\n\t * @param {?(string|Struct)} [bufferType=null] - The buffer type (e.g. `'vec3'`).\n\t * @param {number} [bufferCount=0] - The buffer count.\n\t */\n\tconstructor( value, bufferType = null, bufferCount = 0 ) {\n\n\t\tlet nodeType, structTypeNode = null;\n\n\t\tif ( bufferType && bufferType.isStruct ) {\n\n\t\t\tnodeType = 'struct';\n\t\t\tstructTypeNode = bufferType.layout;\n\n\t\t\tif ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) {\n\n\t\t\t\tbufferCount = value.count;\n\n\t\t\t}\n\n\t\t} else if ( bufferType === null && ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) ) {\n\n\t\t\tnodeType = getTypeFromLength( value.itemSize );\n\t\t\tbufferCount = value.count;\n\n\t\t} else {\n\n\t\t\tnodeType = bufferType;\n\n\t\t}\n\n\t\tsuper( value, nodeType, bufferCount );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStorageBufferNode = true;\n\n\n\t\t/**\n\t\t * The buffer struct type.\n\t\t *\n\t\t * @type {?StructTypeNode}\n\t\t * @default null\n\t\t */\n\t\tthis.structTypeNode = structTypeNode;\n\n\t\t/**\n\t\t * The access type of the texture node.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'readWrite'\n\t\t */\n\t\tthis.access = NodeAccess.READ_WRITE;\n\n\t\t/**\n\t\t * Whether the node is atomic or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.isAtomic = false;\n\n\t\t/**\n\t\t * Whether the node represents a PBO or not.\n\t\t * Only relevant for WebGL.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.isPBO = false;\n\n\t\t/**\n\t\t * A reference to the internal buffer attribute node.\n\t\t *\n\t\t * @private\n\t\t * @type {?BufferAttributeNode}\n\t\t * @default null\n\t\t */\n\t\tthis._attribute = null;\n\n\t\t/**\n\t\t * A reference to the internal varying node.\n\t\t *\n\t\t * @private\n\t\t * @type {?VaryingNode}\n\t\t * @default null\n\t\t */\n\t\tthis._varying = null;\n\n\t\t/**\n\t\t * `StorageBufferNode` sets this property to `true` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t\tif ( value.isStorageBufferAttribute !== true && value.isStorageInstancedBufferAttribute !== true ) {\n\n\t\t\t// TODO: Improve it, possibly adding a new property to the BufferAttribute to identify it as a storage buffer read-only attribute in Renderer\n\n\t\t\tif ( value.isInstancedBufferAttribute ) value.isStorageInstancedBufferAttribute = true;\n\t\t\telse value.isStorageBufferAttribute = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is overwritten since the buffer data might be shared\n\t * and thus the hash should be shared as well.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The hash.\n\t */\n\tgetHash( builder ) {\n\n\t\tlet id;\n\n\t\tif ( this.bufferCount === 0 ) {\n\n\t\t\tlet bufferData = builder.globalCache.getData( this.value );\n\n\t\t\tif ( bufferData === undefined ) {\n\n\t\t\t\tbufferData = {\n\t\t\t\t\tnode: this\n\t\t\t\t};\n\n\t\t\t\tbuilder.globalCache.setData( this.value, bufferData );\n\n\t\t\t}\n\n\t\t\tid = bufferData.node.id;\n\n\t\t} else {\n\n\t\t\tid = this.id;\n\n\t\t}\n\n\t\treturn String( id );\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to return a fixed value `'indirectStorageBuffer'` or `'storageBuffer'`.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( /*builder*/ ) {\n\n\t\treturn this.value.isIndirectStorageBufferAttribute ? 'indirectStorageBuffer' : 'storageBuffer';\n\n\t}\n\n\t/**\n\t * Enables element access with the given index node.\n\t *\n\t * @param {IndexNode} indexNode - The index node.\n\t * @return {StorageArrayElementNode} A node representing the element access.\n\t */\n\telement( indexNode ) {\n\n\t\treturn storageElement( this, indexNode );\n\n\t}\n\n\t/**\n\t * Defines whether this node is a PBO or not. Only relevant for WebGL.\n\t *\n\t * @param {boolean} value - The value so set.\n\t * @return {StorageBufferNode} A reference to this node.\n\t */\n\tsetPBO( value ) {\n\n\t\tthis.isPBO = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the `isPBO` value.\n\t *\n\t * @return {boolean} Whether the node represents a PBO or not.\n\t */\n\tgetPBO() {\n\n\t\treturn this.isPBO;\n\n\t}\n\n\t/**\n\t * Defines the node access.\n\t *\n\t * @param {string} value - The node access.\n\t * @return {StorageBufferNode} A reference to this node.\n\t */\n\tsetAccess( value ) {\n\n\t\tthis.access = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Convenience method for configuring a read-only node access.\n\t *\n\t * @return {StorageBufferNode} A reference to this node.\n\t */\n\ttoReadOnly() {\n\n\t\treturn this.setAccess( NodeAccess.READ_ONLY );\n\n\t}\n\n\t/**\n\t * Defines whether the node is atomic or not.\n\t *\n\t * @param {boolean} value - The atomic flag.\n\t * @return {StorageBufferNode} A reference to this node.\n\t */\n\tsetAtomic( value ) {\n\n\t\tthis.isAtomic = value;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Convenience method for making this node atomic.\n\t *\n\t * @return {StorageBufferNode} A reference to this node.\n\t */\n\ttoAtomic() {\n\n\t\treturn this.setAtomic( true );\n\n\t}\n\n\t/**\n\t * Returns attribute data for this storage buffer node.\n\t *\n\t * @return {{attribute: BufferAttributeNode, varying: VaryingNode}} The attribute data.\n\t */\n\tgetAttributeData() {\n\n\t\tif ( this._attribute === null ) {\n\n\t\t\tthis._attribute = bufferAttribute( this.value );\n\t\t\tthis._varying = varying( this._attribute );\n\n\t\t}\n\n\t\treturn {\n\t\t\tattribute: this._attribute,\n\t\t\tvarying: this._varying\n\t\t};\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type from the availability of storage buffers\n\t * and the attribute data.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tif ( this.structTypeNode !== null ) {\n\n\t\t\treturn this.structTypeNode.getNodeType( builder );\n\n\t\t}\n\n\t\tif ( builder.isAvailable( 'storageBuffer' ) || builder.isAvailable( 'indirectStorageBuffer' ) ) {\n\n\t\t\treturn super.generateNodeType( builder );\n\n\t\t}\n\n\t\tconst { attribute } = this.getAttributeData();\n\n\t\treturn attribute.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Returns the type of a member of the struct.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} name - The name of the member.\n\t * @return {string} The type of the member.\n\t */\n\tgetMemberType( builder, name ) {\n\n\t\tif ( this.structTypeNode !== null ) {\n\n\t\t\treturn this.structTypeNode.getMemberType( builder, name );\n\n\t\t}\n\n\t\treturn 'void';\n\n\t}\n\n\t/**\n\t * Generates the code snippet of the storage buffer node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerate( builder ) {\n\n\t\tif ( this.structTypeNode !== null ) this.structTypeNode.build( builder );\n\n\t\tif ( builder.isAvailable( 'storageBuffer' ) || builder.isAvailable( 'indirectStorageBuffer' ) ) {\n\n\t\t\treturn super.generate( builder );\n\n\t\t}\n\n\t\tconst { attribute, varying } = this.getAttributeData();\n\n\t\tconst output = varying.build( builder );\n\n\t\tbuilder.registerTransform( output, attribute );\n\n\t\treturn output;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a storage buffer node.\n *\n * @tsl\n * @function\n * @param {StorageBufferAttribute|StorageInstancedBufferAttribute|BufferAttribute} value - The buffer data.\n * @param {?(string|Struct)} [type=null] - The buffer type (e.g. `'vec3'`).\n * @param {number} [count=0] - The buffer count.\n * @returns {StorageBufferNode}\n */\nconst storage = ( value, type = null, count = 0 ) => new StorageBufferNode( value, type, count );\n\n/**\n * This node implements the vertex shader logic which is required\n * when rendering 3D objects via instancing. The code makes sure\n * vertex positions, normals and colors can be modified via instanced\n * data.\n *\n * @augments Node\n */\nclass InstanceNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'InstanceNode';\n\n\t}\n\n\t/**\n\t * Constructs a new instance node.\n\t *\n\t * @param {number} count - The number of instances.\n\t * @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.\n\t * @param {?InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.\n\t */\n\tconstructor( count, instanceMatrix, instanceColor = null ) {\n\n\t\tsuper( 'void' );\n\n\t\t/**\n\t\t * The number of instances.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.count = count;\n\n\t\t/**\n\t\t * Instanced buffer attribute representing the transformation of instances.\n\t\t *\n\t\t * @type {InstancedBufferAttribute}\n\t\t */\n\t\tthis.instanceMatrix = instanceMatrix;\n\n\t\t/**\n\t\t * Instanced buffer attribute representing the color of instances.\n\t\t *\n\t\t * @type {InstancedBufferAttribute}\n\t\t */\n\t\tthis.instanceColor = instanceColor;\n\n\t\t/**\n\t\t * The node that represents the instance matrix data.\n\t\t *\n\t\t * @type {?Node}\n\t\t */\n\t\tthis.instanceMatrixNode = null;\n\n\t\t/**\n\t\t * The node that represents the instance color data.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.instanceColorNode = null;\n\n\t\t/**\n\t\t * The update type is set to `frame` since an update\n\t\t * of instanced buffer data must be checked per frame.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'frame'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.FRAME;\n\n\t\t/**\n\t\t * A reference to a buffer that is used by `instanceMatrixNode`.\n\t\t *\n\t\t * @type {?InstancedInterleavedBuffer}\n\t\t */\n\t\tthis.buffer = null;\n\n\t\t/**\n\t\t * A reference to a buffer that is used by `instanceColorNode`.\n\t\t *\n\t\t * @type {?InstancedBufferAttribute}\n\t\t */\n\t\tthis.bufferColor = null;\n\n\t\t/**\n\t\t * The previous instance matrices. Required for computing motion vectors.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.previousInstanceMatrixNode = null;\n\n\t}\n\n\t/**\n\t * Tracks whether the matrix data is provided via a storage buffer.\n\t *\n\t * @type {boolean}\n\t */\n\tget isStorageMatrix() {\n\n\t\tconst { instanceMatrix } = this;\n\n\t\treturn instanceMatrix && instanceMatrix.isStorageInstancedBufferAttribute === true;\n\n\t}\n\n\t/**\n\t * Tracks whether the color data is provided via a storage buffer.\n\t *\n\t * @type {boolean}\n\t */\n\tget isStorageColor() {\n\n\t\tconst { instanceColor } = this;\n\n\t\treturn instanceColor && instanceColor.isStorageInstancedBufferAttribute === true;\n\n\t}\n\n\t/**\n\t * Setups the internal buffers and nodes and assigns the transformed vertex data\n\t * to predefined node variables for accumulation. That follows the same patterns\n\t * like with morph and skinning nodes.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetup( builder ) {\n\n\t\tlet { instanceMatrixNode, instanceColorNode } = this;\n\n\t\t// instance matrix\n\n\t\tif ( instanceMatrixNode === null ) {\n\n\t\t\tinstanceMatrixNode = this._createInstanceMatrixNode( true, builder );\n\n\t\t\tthis.instanceMatrixNode = instanceMatrixNode;\n\n\t\t}\n\n\t\t// instance color\n\n\t\tconst { instanceColor, isStorageColor } = this;\n\n\t\tif ( instanceColor && instanceColorNode === null ) {\n\n\t\t\tif ( isStorageColor ) {\n\n\t\t\t\tinstanceColorNode = storage( instanceColor, 'vec3', Math.max( instanceColor.count, 1 ) ).element( instanceIndex );\n\n\t\t\t} else {\n\n\t\t\t\tconst bufferAttribute = new InstancedBufferAttribute( instanceColor.array, 3 );\n\n\t\t\t\tconst bufferFn = instanceColor.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;\n\n\t\t\t\tthis.bufferColor = bufferAttribute;\n\n\t\t\t\tinstanceColorNode = vec3( bufferFn( bufferAttribute, 'vec3', 3, 0 ) );\n\n\t\t\t}\n\n\t\t\tthis.instanceColorNode = instanceColorNode;\n\n\t\t}\n\n\t\t// POSITION\n\n\t\tconst instancePosition = instanceMatrixNode.mul( positionLocal ).xyz;\n\t\tpositionLocal.assign( instancePosition );\n\n\t\tif ( builder.needsPreviousData() ) {\n\n\t\t\tpositionPrevious.assign( this.getPreviousInstancedPosition( builder ) );\n\n\t\t}\n\n\t\t// NORMAL\n\n\t\tif ( builder.hasGeometryAttribute( 'normal' ) ) {\n\n\t\t\tconst instanceNormal = transformNormal( normalLocal, instanceMatrixNode );\n\n\t\t\t// ASSIGNS\n\n\t\t\tnormalLocal.assign( instanceNormal );\n\n\t\t}\n\n\t\t// COLOR\n\n\t\tif ( this.instanceColorNode !== null ) {\n\n\t\t\tvaryingProperty( 'vec3', 'vInstanceColor' ).assign( this.instanceColorNode );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the internal buffers require an update.\n\t *\n\t * @param {NodeFrame} frame - The current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tif ( this.buffer !== null && this.isStorageMatrix !== true ) {\n\n\t\t\tthis.buffer.clearUpdateRanges();\n\t\t\tthis.buffer.updateRanges.push( ... this.instanceMatrix.updateRanges );\n\n\t\t\t// update version if necessary\n\n\t\t\tif ( this.instanceMatrix.version !== this.buffer.version ) {\n\n\t\t\t\tthis.buffer.version = this.instanceMatrix.version;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.instanceColor && this.bufferColor !== null && this.isStorageColor !== true ) {\n\n\t\t\tthis.bufferColor.clearUpdateRanges();\n\t\t\tthis.bufferColor.updateRanges.push( ... this.instanceColor.updateRanges );\n\n\t\t\tif ( this.instanceColor.version !== this.bufferColor.version ) {\n\n\t\t\t\tthis.bufferColor.version = this.instanceColor.version;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.previousInstanceMatrixNode !== null ) {\n\n\t\t\tframe.object.previousInstanceMatrix.array.set( this.instanceMatrix.array );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Computes the transformed/instanced vertex position of the previous frame.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec3>} The instanced position from the previous frame.\n\t */\n\tgetPreviousInstancedPosition( builder ) {\n\n\t\tconst instancedMesh = builder.object;\n\n\t\tif ( this.previousInstanceMatrixNode === null ) {\n\n\t\t\tinstancedMesh.previousInstanceMatrix = this.instanceMatrix.clone();\n\n\t\t\tthis.previousInstanceMatrixNode = this._createInstanceMatrixNode( false, builder );\n\n\t\t}\n\n\t\treturn this.previousInstanceMatrixNode.mul( positionPrevious ).xyz;\n\n\t}\n\n\t/**\n\t * Creates a node representing the instance matrix data.\n\t *\n\t * @private\n\t * @param {boolean} assignBuffer - Whether the created interleaved buffer should be assigned to the `buffer` member or not.\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @return {Node} The instance matrix node.\n\t */\n\t_createInstanceMatrixNode( assignBuffer, builder ) {\n\n\t\tlet instanceMatrixNode;\n\n\t\tconst { instanceMatrix } = this;\n\t\tconst { count } = instanceMatrix;\n\n\t\tif ( this.isStorageMatrix ) {\n\n\t\t\tinstanceMatrixNode = storage( instanceMatrix, 'mat4', Math.max( count, 1 ) ).element( instanceIndex );\n\n\t\t} else {\n\n\t\t\tconst uniformBufferSize = count * 16 * 4; // count * 16 components * 4 bytes (float)\n\n\t\t\tif ( uniformBufferSize <= builder.getUniformBufferLimit() ) {\n\n\t\t\t\tinstanceMatrixNode = buffer( instanceMatrix.array, 'mat4', Math.max( count, 1 ) ).element( instanceIndex );\n\n\t\t\t} else {\n\n\t\t\t\tconst interleaved = new InstancedInterleavedBuffer( instanceMatrix.array, 16, 1 );\n\n\t\t\t\tif ( assignBuffer === true ) this.buffer = interleaved;\n\n\t\t\t\tconst bufferFn = instanceMatrix.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;\n\n\t\t\t\tconst instanceBuffers = [\n\t\t\t\t\tbufferFn( interleaved, 'vec4', 16, 0 ),\n\t\t\t\t\tbufferFn( interleaved, 'vec4', 16, 4 ),\n\t\t\t\t\tbufferFn( interleaved, 'vec4', 16, 8 ),\n\t\t\t\t\tbufferFn( interleaved, 'vec4', 16, 12 )\n\t\t\t\t];\n\n\t\t\t\tinstanceMatrixNode = mat4( ...instanceBuffers );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn instanceMatrixNode;\n\n\t}\n\n}\n\n/**\n * TSL function for creating an instance node.\n *\n * @tsl\n * @function\n * @param {number} count - The number of instances.\n * @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.\n * @param {?InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.\n * @returns {InstanceNode}\n */\nconst instance = /*@__PURE__*/ nodeProxy( InstanceNode ).setParameterLength( 2, 3 );\n\n/**\n * This is a special version of `InstanceNode` which requires the usage of {@link InstancedMesh}.\n * It allows an easier setup of the instance node.\n *\n * @augments InstanceNode\n */\nclass InstancedMeshNode extends InstanceNode {\n\n\tstatic get type() {\n\n\t\treturn 'InstancedMeshNode';\n\n\t}\n\n\t/**\n\t * Constructs a new instanced mesh node.\n\t *\n\t * @param {InstancedMesh} instancedMesh - The instanced mesh.\n\t */\n\tconstructor( instancedMesh ) {\n\n\t\tconst { count, instanceMatrix, instanceColor } = instancedMesh;\n\n\t\tsuper( count, instanceMatrix, instanceColor );\n\n\t\t/**\n\t\t * A reference to the instanced mesh.\n\t\t *\n\t\t * @type {InstancedMesh}\n\t\t */\n\t\tthis.instancedMesh = instancedMesh;\n\n\t}\n\n}\n\n/**\n * TSL function for creating an instanced mesh node.\n *\n * @tsl\n * @function\n * @param {InstancedMesh} instancedMesh - The instancedMesh.\n * @returns {InstancedMeshNode}\n */\nconst instancedMesh = /*@__PURE__*/ nodeProxy( InstancedMeshNode ).setParameterLength( 1 );\n\n/**\n * This node implements the vertex shader logic which is required\n * when rendering 3D objects via batching. `BatchNode` must be used\n * with instances of {@link BatchedMesh}.\n *\n * @augments Node\n */\nclass BatchNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'BatchNode';\n\n\t}\n\n\t/**\n\t * Constructs a new batch node.\n\t *\n\t * @param {BatchedMesh} batchMesh - A reference to batched mesh.\n\t */\n\tconstructor( batchMesh ) {\n\n\t\tsuper( 'void' );\n\n\t\t/**\n\t\t * A reference to batched mesh.\n\t\t *\n\t\t * @type {BatchedMesh}\n\t\t */\n\t\tthis.batchMesh = batchMesh;\n\n\t\t/**\n\t\t * The batching index node.\n\t\t *\n\t\t * @type {?IndexNode}\n\t\t * @default null\n\t\t */\n\t\tthis.batchingIdNode = null;\n\n\t}\n\n\t/**\n\t * Setups the internal buffers and nodes and assigns the transformed vertex data\n\t * to predefined node variables for accumulation. That follows the same patterns\n\t * like with morph and skinning nodes.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetup( builder ) {\n\n\t\tif ( this.batchingIdNode === null ) {\n\n\t\t\tif ( builder.getDrawIndex() === null ) {\n\n\t\t\t\tthis.batchingIdNode = instanceIndex;\n\n\t\t\t} else {\n\n\t\t\t\tthis.batchingIdNode = drawIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst getIndirectIndex = Fn( ( [ id ] ) => {\n\n\t\t\tconst size = int( textureSize( textureLoad( this.batchMesh._indirectTexture ), 0 ).x ).toConst();\n\t\t\tconst x = int( id ).mod( size ).toConst();\n\t\t\tconst y = int( id ).div( size ).toConst();\n\t\t\treturn textureLoad( this.batchMesh._indirectTexture, ivec2( x, y ) ).x;\n\n\t\t} ).setLayout( {\n\t\t\tname: 'getIndirectIndex',\n\t\t\ttype: 'uint',\n\t\t\tinputs: [\n\t\t\t\t{ name: 'id', type: 'int' }\n\t\t\t]\n\t\t} );\n\n\t\tconst indirectId = getIndirectIndex( int( this.batchingIdNode ) );\n\n\t\tconst matricesTexture = this.batchMesh._matricesTexture;\n\n\t\tconst size = int( textureSize( textureLoad( matricesTexture ), 0 ).x ).toConst();\n\t\tconst j = float( indirectId ).mul( 4 ).toInt().toConst();\n\n\t\tconst x = j.mod( size ).toConst();\n\t\tconst y = j.div( size ).toConst();\n\t\tconst batchingMatrix = mat4(\n\t\t\ttextureLoad( matricesTexture, ivec2( x, y ) ),\n\t\t\ttextureLoad( matricesTexture, ivec2( x.add( 1 ), y ) ),\n\t\t\ttextureLoad( matricesTexture, ivec2( x.add( 2 ), y ) ),\n\t\t\ttextureLoad( matricesTexture, ivec2( x.add( 3 ), y ) )\n\t\t);\n\n\n\t\tconst colorsTexture = this.batchMesh._colorsTexture;\n\n\t\tif ( colorsTexture !== null ) {\n\n\t\t\tconst getBatchingColor = Fn( ( [ id ] ) => {\n\n\t\t\t\tconst size = int( textureSize( textureLoad( colorsTexture ), 0 ).x ).toConst();\n\t\t\t\tconst j = id;\n\t\t\t\tconst x = j.mod( size ).toConst();\n\t\t\t\tconst y = j.div( size ).toConst();\n\t\t\t\treturn textureLoad( colorsTexture, ivec2( x, y ) ).rgb;\n\n\t\t\t} ).setLayout( {\n\t\t\t\tname: 'getBatchingColor',\n\t\t\t\ttype: 'vec3',\n\t\t\t\tinputs: [\n\t\t\t\t\t{ name: 'id', type: 'int' }\n\t\t\t\t]\n\t\t\t} );\n\n\t\t\tconst color = getBatchingColor( indirectId );\n\n\t\t\tvaryingProperty( 'vec3', 'vBatchColor' ).assign( color );\n\n\t\t}\n\n\t\tconst bm = mat3( batchingMatrix );\n\n\t\tpositionLocal.assign( batchingMatrix.mul( positionLocal ) );\n\n\t\tconst transformedNormal = normalLocal.div( vec3( bm[ 0 ].dot( bm[ 0 ] ), bm[ 1 ].dot( bm[ 1 ] ), bm[ 2 ].dot( bm[ 2 ] ) ) );\n\n\t\tconst batchingNormal = bm.mul( transformedNormal ).xyz;\n\n\t\tnormalLocal.assign( batchingNormal );\n\n\t\tif ( builder.hasGeometryAttribute( 'tangent' ) ) {\n\n\t\t\ttangentLocal.mulAssign( bm );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * TSL function for creating a batch node.\n *\n * @tsl\n * @function\n * @param {BatchedMesh} batchMesh - A reference to batched mesh.\n * @returns {BatchNode}\n */\nconst batch = /*@__PURE__*/ nodeProxy( BatchNode ).setParameterLength( 1 );\n\nconst _frameId = new WeakMap();\n\n/**\n * This node implements the vertex transformation shader logic which is required\n * for skinning/skeletal animation.\n *\n * @augments Node\n */\nclass SkinningNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'SkinningNode';\n\n\t}\n\n\t/**\n\t * Constructs a new skinning node.\n\t *\n\t * @param {SkinnedMesh} skinnedMesh - The skinned mesh.\n\t */\n\tconstructor( skinnedMesh ) {\n\n\t\tsuper( 'void' );\n\n\t\t/**\n\t\t * The skinned mesh.\n\t\t *\n\t\t * @type {SkinnedMesh}\n\t\t */\n\t\tthis.skinnedMesh = skinnedMesh;\n\n\t\t/**\n\t\t * The update type overwritten since skinning nodes are updated per object.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.updateType = NodeUpdateType.OBJECT;\n\n\t\t//\n\n\t\t/**\n\t\t * The skin index attribute.\n\t\t *\n\t\t * @type {AttributeNode}\n\t\t */\n\t\tthis.skinIndexNode = attribute( 'skinIndex', 'uvec4' );\n\n\t\t/**\n\t\t * The skin weight attribute.\n\t\t *\n\t\t * @type {AttributeNode}\n\t\t */\n\t\tthis.skinWeightNode = attribute( 'skinWeight', 'vec4' );\n\n\t\t/**\n\t\t * The bind matrix node.\n\t\t *\n\t\t * @type {Node<mat4>}\n\t\t */\n\t\tthis.bindMatrixNode = reference( 'bindMatrix', 'mat4' );\n\n\t\t/**\n\t\t * The bind matrix inverse node.\n\t\t *\n\t\t * @type {Node<mat4>}\n\t\t */\n\t\tthis.bindMatrixInverseNode = reference( 'bindMatrixInverse', 'mat4' );\n\n\t\t/**\n\t\t * The bind matrices as a uniform buffer node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.boneMatricesNode = referenceBuffer( 'skeleton.boneMatrices', 'mat4', skinnedMesh.skeleton.bones.length );\n\n\t\t/**\n\t\t * The current vertex position in local space.\n\t\t *\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis.positionNode = positionLocal;\n\n\t\t/**\n\t\t * The result of vertex position in local space.\n\t\t *\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis.toPositionNode = positionLocal;\n\n\t\t/**\n\t\t * The previous bind matrices as a uniform buffer node.\n\t\t * Required for computing motion vectors.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.previousBoneMatricesNode = null;\n\n\t}\n\n\t/**\n\t * Transforms the given vertex position via skinning.\n\t *\n\t * @param {Node} [boneMatrices=this.boneMatricesNode] - The bone matrices\n\t * @param {Node<vec3>} [position=this.positionNode] - The vertex position in local space.\n\t * @return {Node<vec3>} The transformed vertex position.\n\t */\n\tgetSkinnedPosition( boneMatrices = this.boneMatricesNode, position = this.positionNode ) {\n\n\t\tconst { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode } = this;\n\n\t\tconst boneMatX = boneMatrices.element( skinIndexNode.x );\n\t\tconst boneMatY = boneMatrices.element( skinIndexNode.y );\n\t\tconst boneMatZ = boneMatrices.element( skinIndexNode.z );\n\t\tconst boneMatW = boneMatrices.element( skinIndexNode.w );\n\n\t\t// POSITION\n\n\t\tconst skinVertex = bindMatrixNode.mul( position );\n\n\t\tconst skinned = add(\n\t\t\tboneMatX.mul( skinWeightNode.x ).mul( skinVertex ),\n\t\t\tboneMatY.mul( skinWeightNode.y ).mul( skinVertex ),\n\t\t\tboneMatZ.mul( skinWeightNode.z ).mul( skinVertex ),\n\t\t\tboneMatW.mul( skinWeightNode.w ).mul( skinVertex )\n\t\t);\n\n\t\treturn bindMatrixInverseNode.mul( skinned ).xyz;\n\n\t}\n\n\t/**\n\t * Transforms the given vertex normal and tangent via skinning.\n\t *\n\t * @param {Node} [boneMatrices=this.boneMatricesNode] - The bone matrices\n\t * @param {Node<vec3>} [normal=normalLocal] - The vertex normal in local space.\n\t * @param {Node<vec3>} [tangent=tangentLocal] - The vertex tangent in local space.\n\t * @return {{skinNormal: Node<vec3>, skinTangent:Node<vec3>}} The transformed vertex normal and tangent.\n\t */\n\tgetSkinnedNormalAndTangent( boneMatrices = this.boneMatricesNode, normal = normalLocal, tangent = tangentLocal ) {\n\n\t\tconst { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode } = this;\n\n\t\tconst boneMatX = boneMatrices.element( skinIndexNode.x );\n\t\tconst boneMatY = boneMatrices.element( skinIndexNode.y );\n\t\tconst boneMatZ = boneMatrices.element( skinIndexNode.z );\n\t\tconst boneMatW = boneMatrices.element( skinIndexNode.w );\n\n\t\t// NORMAL and TANGENT\n\n\t\tlet skinMatrix = add(\n\t\t\tskinWeightNode.x.mul( boneMatX ),\n\t\t\tskinWeightNode.y.mul( boneMatY ),\n\t\t\tskinWeightNode.z.mul( boneMatZ ),\n\t\t\tskinWeightNode.w.mul( boneMatW )\n\t\t);\n\n\t\tskinMatrix = bindMatrixInverseNode.mul( skinMatrix ).mul( bindMatrixNode );\n\n\t\tconst skinNormal = skinMatrix.transformDirection( normal ).xyz;\n\t\tconst skinTangent = skinMatrix.transformDirection( tangent ).xyz;\n\n\t\treturn { skinNormal, skinTangent };\n\n\t}\n\n\t/**\n\t * Computes the transformed/skinned vertex position of the previous frame.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec3>} The skinned position from the previous frame.\n\t */\n\tgetPreviousSkinnedPosition( builder ) {\n\n\t\tconst skinnedMesh = builder.object;\n\n\t\tif ( this.previousBoneMatricesNode === null ) {\n\n\t\t\tskinnedMesh.skeleton.previousBoneMatrices = new Float32Array( skinnedMesh.skeleton.boneMatrices );\n\n\t\t\tthis.previousBoneMatricesNode = referenceBuffer( 'skeleton.previousBoneMatrices', 'mat4', skinnedMesh.skeleton.bones.length );\n\n\t\t}\n\n\t\treturn this.getSkinnedPosition( this.previousBoneMatricesNode, positionPrevious );\n\n\t}\n\n\t/**\n\t * Setups the skinning node by assigning the transformed vertex data to predefined node variables.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec3>} The transformed vertex position.\n\t */\n\tsetup( builder ) {\n\n\t\tif ( builder.needsPreviousData() ) {\n\n\t\t\tpositionPrevious.assign( this.getPreviousSkinnedPosition( builder ) );\n\n\t\t}\n\n\t\tconst skinPosition = this.getSkinnedPosition();\n\n\t\tif ( this.toPositionNode ) this.toPositionNode.assign( skinPosition );\n\n\t\t//\n\n\t\tif ( builder.hasGeometryAttribute( 'normal' ) ) {\n\n\t\t\tconst { skinNormal, skinTangent } = this.getSkinnedNormalAndTangent();\n\n\t\t\tnormalLocal.assign( skinNormal );\n\n\t\t\tif ( builder.hasGeometryAttribute( 'tangent' ) ) {\n\n\t\t\t\ttangentLocal.assign( skinTangent );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skinPosition;\n\n\t}\n\n\t/**\n\t * Generates the code snippet of the skinning node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} output - The current output.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerate( builder, output ) {\n\n\t\tif ( output !== 'void' ) {\n\n\t\t\treturn super.generate( builder, output );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the state of the skinned mesh by updating the skeleton once per frame.\n\t *\n\t * @param {NodeFrame} frame - The current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tconst skeleton = frame.object && frame.object.skeleton ? frame.object.skeleton : this.skinnedMesh.skeleton;\n\n\t\tif ( _frameId.get( skeleton ) === frame.frameId ) return;\n\n\t\t_frameId.set( skeleton, frame.frameId );\n\n\t\tif ( this.previousBoneMatricesNode !== null ) {\n\n\t\t\tif ( skeleton.previousBoneMatrices === null ) {\n\n\t\t\t\t// cloned skeletons miss \"previousBoneMatrices\" in their first updated\n\n\t\t\t\tskeleton.previousBoneMatrices = new Float32Array( skeleton.boneMatrices );\n\n\t\t\t}\n\n\t\t\tskeleton.previousBoneMatrices.set( skeleton.boneMatrices );\n\n\n\t\t}\n\n\t\tskeleton.update();\n\n\t}\n\n}\n\n/**\n * TSL function for creating a skinning node.\n *\n * @tsl\n * @function\n * @param {SkinnedMesh} skinnedMesh - The skinned mesh.\n * @returns {SkinningNode}\n */\nconst skinning = ( skinnedMesh ) => new SkinningNode( skinnedMesh );\n\n/**\n * TSL function for computing skinning.\n *\n * @tsl\n * @function\n * @param {SkinnedMesh} skinnedMesh - The skinned mesh.\n * @param {Node<vec3>} [toPosition=null] - The target position.\n * @returns {SkinningNode}\n */\nconst computeSkinning = ( skinnedMesh, toPosition = null ) => {\n\n\tconst node = new SkinningNode( skinnedMesh );\n\tnode.positionNode = storage( new InstancedBufferAttribute( skinnedMesh.geometry.getAttribute( 'position' ).array, 3 ), 'vec3' ).setPBO( true ).toReadOnly().element( instanceIndex ).toVar();\n\tnode.skinIndexNode = storage( new InstancedBufferAttribute( new Uint32Array( skinnedMesh.geometry.getAttribute( 'skinIndex' ).array ), 4 ), 'uvec4' ).setPBO( true ).toReadOnly().element( instanceIndex ).toVar();\n\tnode.skinWeightNode = storage( new InstancedBufferAttribute( skinnedMesh.geometry.getAttribute( 'skinWeight' ).array, 4 ), 'vec4' ).setPBO( true ).toReadOnly().element( instanceIndex ).toVar();\n\tnode.bindMatrixNode = uniform( skinnedMesh.bindMatrix, 'mat4' );\n\tnode.bindMatrixInverseNode = uniform( skinnedMesh.bindMatrixInverse, 'mat4' );\n\tnode.boneMatricesNode = buffer( skinnedMesh.skeleton.boneMatrices, 'mat4', skinnedMesh.skeleton.bones.length );\n\tnode.toPositionNode = toPosition;\n\n\treturn nodeObject( node );\n\n};\n\n/**\n * This module offers a variety of ways to implement loops in TSL. In it's basic form it's:\n * ```js\n * Loop( count, ( { i } ) => {\n *\n * } );\n * ```\n * However, it is also possible to define a start and end ranges, data types and loop conditions:\n * ```js\n * Loop( { start: int( 0 ), end: int( 10 ), type: 'int', condition: '<' }, ( { i } ) => {\n *\n * } );\n *```\n * Nested loops can be defined in a compacted form:\n * ```js\n * Loop( 10, 5, ( { i, j } ) => {\n *\n * } );\n * ```\n * Loops that should run backwards can be defined like so:\n * ```js\n * Loop( { start: 10 }, () => {} );\n * ```\n * It is possible to execute with boolean values, similar to the `while` syntax.\n * ```js\n * const value = float( 0 ).toVar();\n *\n * Loop( value.lessThan( 10 ), () => {\n *\n * \tvalue.addAssign( 1 );\n *\n * } );\n * ```\n * The module also provides `Break()` and `Continue()` TSL expression for loop control.\n * @augments Node\n */\nclass LoopNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'LoopNode';\n\n\t}\n\n\t/**\n\t * Constructs a new loop node.\n\t *\n\t * @param {Array<any>} params - Depending on the loop type, array holds different parameterization values for the loop.\n\t */\n\tconstructor( params = [] ) {\n\n\t\tsuper( 'void' );\n\n\t\tthis.params = params;\n\n\t}\n\n\t/**\n\t * Returns a loop variable name based on an index. The pattern is\n\t * `0` = `i`, `1`= `j`, `2`= `k` and so on.\n\t *\n\t * @param {number} index - The index.\n\t * @return {string} The loop variable name.\n\t */\n\tgetVarName( index ) {\n\n\t\treturn String.fromCharCode( 'i'.charCodeAt( 0 ) + index );\n\n\t}\n\n\t/**\n\t * Returns properties about this node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Object} The node properties.\n\t */\n\tgetProperties( builder ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\n\t\tif ( properties.stackNode !== undefined ) return properties;\n\n\t\t//\n\n\t\tconst inputs = {};\n\n\t\tfor ( let i = 0, l = this.params.length - 1; i < l; i ++ ) {\n\n\t\t\tconst param = this.params[ i ];\n\n\t\t\tconst name = ( param.isNode !== true && param.name ) || this.getVarName( i );\n\t\t\tconst type = ( param.isNode !== true && param.type ) || 'int';\n\n\t\t\tinputs[ name ] = expression( name, type );\n\n\t\t}\n\n\t\tconst stack = builder.addStack();\n\n\t\tconst fnCall = this.params[ this.params.length - 1 ]( inputs );\n\n\t\tproperties.returnsNode = fnCall.context( { nodeLoop: fnCall } );\n\t\tproperties.stackNode = stack;\n\n\t\tconst baseParam = this.params[ 0 ];\n\n\t\tif ( baseParam.isNode !== true && typeof baseParam.update === 'function' ) {\n\n\t\t\tconst fnUpdateCall = Fn( this.params[ 0 ].update )( inputs );\n\n\t\t\tproperties.updateNode = fnUpdateCall.context( { nodeLoop: fnUpdateCall } );\n\n\t\t}\n\n\t\tbuilder.removeStack();\n\n\t\treturn properties;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\t// setup properties\n\n\t\tthis.getProperties( builder );\n\n\t\tif ( builder.fnCall ) {\n\n\t\t\tconst shaderNodeData = builder.getDataFromNode( builder.fnCall.shaderNode );\n\t\t\tshaderNodeData.hasLoop = true;\n\n\t\t}\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst properties = this.getProperties( builder );\n\n\t\tconst params = this.params;\n\t\tconst stackNode = properties.stackNode;\n\n\t\tfor ( let i = 0, l = params.length - 1; i < l; i ++ ) {\n\n\t\t\tconst param = params[ i ];\n\n\t\t\tlet isWhile = false, start = null, end = null, name = null, type = null, condition = null, update = null;\n\n\t\t\tif ( param.isNode ) {\n\n\t\t\t\tif ( param.getNodeType( builder ) === 'bool' ) {\n\n\t\t\t\t\tisWhile = true;\n\t\t\t\t\ttype = 'bool';\n\t\t\t\t\tend = param.build( builder, type );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttype = 'int';\n\t\t\t\t\tname = this.getVarName( i );\n\t\t\t\t\tstart = '0';\n\t\t\t\t\tend = param.build( builder, type );\n\t\t\t\t\tcondition = '<';\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = param.type || 'int';\n\t\t\t\tname = param.name || this.getVarName( i );\n\t\t\t\tstart = param.start;\n\t\t\t\tend = param.end;\n\t\t\t\tcondition = param.condition;\n\t\t\t\tupdate = param.update;\n\n\t\t\t\tif ( typeof start === 'number' ) start = builder.generateConst( type, start );\n\t\t\t\telse if ( start && start.isNode ) start = start.build( builder, type );\n\n\t\t\t\tif ( typeof end === 'number' ) end = builder.generateConst( type, end );\n\t\t\t\telse if ( end && end.isNode ) end = end.build( builder, type );\n\n\t\t\t\tif ( start !== undefined && end === undefined ) {\n\n\t\t\t\t\tstart = start + ' - 1';\n\t\t\t\t\tend = '0';\n\t\t\t\t\tcondition = '>=';\n\n\t\t\t\t} else if ( end !== undefined && start === undefined ) {\n\n\t\t\t\t\tstart = '0';\n\t\t\t\t\tcondition = '<';\n\n\t\t\t\t}\n\n\t\t\t\tif ( condition === undefined ) {\n\n\t\t\t\t\tif ( Number( start ) > Number( end ) ) {\n\n\t\t\t\t\t\tcondition = '>=';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcondition = '<';\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet loopSnippet;\n\n\t\t\tif ( isWhile ) {\n\n\t\t\t\tloopSnippet = `while ( ${ end } )`;\n\n\t\t\t} else {\n\n\t\t\t\tconst internalParam = { start, end};\n\n\t\t\t\t//\n\n\t\t\t\tconst startSnippet = internalParam.start;\n\t\t\t\tconst endSnippet = internalParam.end;\n\n\t\t\t\tlet updateSnippet;\n\n\t\t\t\tconst deltaOperator = () => condition.includes( '<' ) ? '+=' : '-=';\n\n\t\t\t\tif ( update !== undefined && update !== null ) {\n\n\t\t\t\t\tswitch ( typeof update ) {\n\n\t\t\t\t\t\tcase 'function':\n\n\t\t\t\t\t\t\tconst flow = builder.flowStagesNode( properties.updateNode, 'void' );\n\t\t\t\t\t\t\tconst snippet = flow.code.replace( /\\t|;/g, '' );\n\n\t\t\t\t\t\t\tupdateSnippet = snippet;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'number':\n\n\t\t\t\t\t\t\tupdateSnippet = name + ' ' + deltaOperator() + ' ' + builder.generateConst( type, update );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'string':\n\n\t\t\t\t\t\t\tupdateSnippet = name + ' ' + update;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tif ( update.isNode ) {\n\n\t\t\t\t\t\t\t\tupdateSnippet = name + ' ' + deltaOperator() + ' ' + update.build( builder );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\terror( 'TSL: \\'Loop( { update: ... } )\\' is not a function, string or number.', this.stackTrace );\n\n\t\t\t\t\t\t\t\tupdateSnippet = 'break /* invalid update */';\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( type === 'int' || type === 'uint' ) {\n\n\t\t\t\t\t\tupdate = condition.includes( '<' ) ? '++' : '--';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tupdate = deltaOperator() + ' 1.';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tupdateSnippet = name + ' ' + update;\n\n\t\t\t\t}\n\n\t\t\t\tconst declarationSnippet = builder.getVar( type, name ) + ' = ' + startSnippet;\n\t\t\t\tconst conditionalSnippet = name + ' ' + condition + ' ' + endSnippet;\n\n\t\t\t\tloopSnippet = `for ( ${ declarationSnippet }; ${ conditionalSnippet }; ${ updateSnippet } )`;\n\n\t\t\t}\n\n\t\t\tbuilder.addFlowCode( ( i === 0 ? '\\n' : '' ) + builder.tab + loopSnippet + ' {\\n\\n' ).addFlowTab();\n\n\t\t}\n\n\t\tconst stackSnippet = stackNode.build( builder, 'void' );\n\n\t\tproperties.returnsNode.build( builder, 'void' );\n\n\t\tbuilder.removeFlowTab().addFlowCode( '\\n' + builder.tab + stackSnippet );\n\n\t\tfor ( let i = 0, l = this.params.length - 1; i < l; i ++ ) {\n\n\t\t\tbuilder.addFlowCode( ( i === 0 ? '' : builder.tab ) + '}\\n\\n' ).removeFlowTab();\n\n\t\t}\n\n\t\tbuilder.addFlowTab();\n\n\t}\n\n}\n\n/**\n * TSL function for creating a loop node.\n *\n * @tsl\n * @function\n * @param {...any} params - A list of parameters.\n * @returns {LoopNode}\n */\nconst Loop = ( ...params ) => new LoopNode( nodeArray( params, 'int' ) ).toStack();\n\n/**\n * TSL function for creating a `Continue()` expression.\n *\n * @tsl\n * @function\n * @returns {ExpressionNode}\n */\nconst Continue = () => expression( 'continue' ).toStack();\n\n/**\n * TSL function for creating a `Break()` expression.\n *\n * @tsl\n * @function\n * @returns {ExpressionNode}\n */\nconst Break = () => expression( 'break' ).toStack();\n\nconst _morphTextures = /*@__PURE__*/ new WeakMap();\nconst _morphVec4 = /*@__PURE__*/ new Vector4();\n\nconst getMorph = /*@__PURE__*/ Fn( ( { bufferMap, influence, stride, width, depth, offset } ) => {\n\n\tconst texelIndex = int( vertexIndex ).mul( stride ).add( offset );\n\n\tconst y = texelIndex.div( width );\n\tconst x = texelIndex.sub( y.mul( width ) );\n\n\tconst bufferAttrib = textureLoad( bufferMap, ivec2( x, y ) ).depth( depth ).xyz;\n\n\treturn bufferAttrib.mul( influence );\n\n} );\n\nfunction getEntry( geometry ) {\n\n\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t// instead of using attributes, the WebGL 2 code path encodes morph targets\n\t// into an array of data textures. Each layer represents a single morph target.\n\n\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\tlet entry = _morphTextures.get( geometry );\n\n\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\tlet vertexDataCount = 0;\n\n\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\tlet height = 1;\n\n\t\tconst maxTextureSize = 4096; // @TODO: Use 'capabilities.maxTextureSize'\n\n\t\tif ( width > maxTextureSize ) {\n\n\t\t\theight = Math.ceil( width / maxTextureSize );\n\t\t\twidth = maxTextureSize;\n\n\t\t}\n\n\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\tconst bufferTexture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\tbufferTexture.type = FloatType;\n\t\tbufferTexture.needsUpdate = true;\n\n\t\t// fill buffer\n\n\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t_morphVec4.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\tbuffer[ offset + stride + 0 ] = _morphVec4.x;\n\t\t\t\t\tbuffer[ offset + stride + 1 ] = _morphVec4.y;\n\t\t\t\t\tbuffer[ offset + stride + 2 ] = _morphVec4.z;\n\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t_morphVec4.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\tbuffer[ offset + stride + 4 ] = _morphVec4.x;\n\t\t\t\t\tbuffer[ offset + stride + 5 ] = _morphVec4.y;\n\t\t\t\t\tbuffer[ offset + stride + 6 ] = _morphVec4.z;\n\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t_morphVec4.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\tbuffer[ offset + stride + 8 ] = _morphVec4.x;\n\t\t\t\t\tbuffer[ offset + stride + 9 ] = _morphVec4.y;\n\t\t\t\t\tbuffer[ offset + stride + 10 ] = _morphVec4.z;\n\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? _morphVec4.w : 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tentry = {\n\t\t\tcount: morphTargetsCount,\n\t\t\ttexture: bufferTexture,\n\t\t\tstride: vertexDataCount,\n\t\t\tsize: new Vector2( width, height )\n\t\t};\n\n\t\t_morphTextures.set( geometry, entry );\n\n\t\tfunction disposeTexture() {\n\n\t\t\tbufferTexture.dispose();\n\n\t\t\t_morphTextures.delete( geometry );\n\n\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t}\n\n\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t}\n\n\treturn entry;\n\n}\n\n/**\n * This node implements the vertex transformation shader logic which is required\n * for morph target animation.\n *\n * @augments Node\n */\nclass MorphNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'MorphNode';\n\n\t}\n\n\t/**\n\t * Constructs a new morph node.\n\t *\n\t * @param {Mesh} mesh - The mesh holding the morph targets.\n\t */\n\tconstructor( mesh ) {\n\n\t\tsuper( 'void' );\n\n\t\t/**\n\t\t * The mesh holding the morph targets.\n\t\t *\n\t\t * @type {Mesh}\n\t\t */\n\t\tthis.mesh = mesh;\n\n\t\t/**\n\t\t * A uniform node which represents the morph base influence value.\n\t\t *\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis.morphBaseInfluence = uniform( 1 );\n\n\t\t/**\n\t\t * The update type overwritten since morph nodes are updated per object.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.updateType = NodeUpdateType.OBJECT;\n\n\t}\n\n\t/**\n\t * Setups the morph node by assigning the transformed vertex data to predefined node variables.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetup( builder ) {\n\n\t\tconst { geometry } = builder;\n\n\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\tconst hasMorphNormals = geometry.hasAttribute( 'normal' ) && geometry.morphAttributes.normal !== undefined;\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t// nodes\n\n\t\tconst { texture: bufferMap, stride, size } = getEntry( geometry );\n\n\t\tif ( hasMorphPosition === true ) positionLocal.mulAssign( this.morphBaseInfluence );\n\t\tif ( hasMorphNormals === true ) normalLocal.mulAssign( this.morphBaseInfluence );\n\n\t\tconst width = int( size.width );\n\n\t\tLoop( morphTargetsCount, ( { i } ) => {\n\n\t\t\tconst influence = float( 0 ).toVar();\n\n\t\t\tif ( this.mesh.count > 1 && ( this.mesh.morphTexture !== null && this.mesh.morphTexture !== undefined ) ) {\n\n\t\t\t\tinfluence.assign( textureLoad( this.mesh.morphTexture, ivec2( int( i ).add( 1 ), int( instanceIndex ) ) ).r );\n\n\t\t\t} else {\n\n\t\t\t\tinfluence.assign( reference( 'morphTargetInfluences', 'float' ).element( i ).toVar() );\n\n\t\t\t}\n\n\t\t\tIf( influence.notEqual( 0 ), () => {\n\n\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\tpositionLocal.addAssign( getMorph( {\n\t\t\t\t\t\tbufferMap,\n\t\t\t\t\t\tinfluence,\n\t\t\t\t\t\tstride,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\tdepth: i,\n\t\t\t\t\t\toffset: int( 0 )\n\t\t\t\t\t} ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\tnormalLocal.addAssign( getMorph( {\n\t\t\t\t\t\tbufferMap,\n\t\t\t\t\t\tinfluence,\n\t\t\t\t\t\tstride,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\tdepth: i,\n\t\t\t\t\t\toffset: int( 1 )\n\t\t\t\t\t} ) );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates the state of the morphed mesh by updating the base influence.\n\t *\n\t * @param {NodeFrame} frame - The current node frame.\n\t */\n\tupdate( /*frame*/ ) {\n\n\t\tconst morphBaseInfluence = this.morphBaseInfluence;\n\n\t\tif ( this.mesh.geometry.morphTargetsRelative ) {\n\n\t\t\tmorphBaseInfluence.value = 1;\n\n\t\t} else {\n\n\t\t\tmorphBaseInfluence.value = 1 - this.mesh.morphTargetInfluences.reduce( ( a, b ) => a + b, 0 );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * TSL function for creating a morph node.\n *\n * @tsl\n * @function\n * @param {Mesh} mesh - The mesh holding the morph targets.\n * @returns {MorphNode}\n */\nconst morphReference = /*@__PURE__*/ nodeProxy( MorphNode ).setParameterLength( 1 );\n\n/**\n * Base class for lighting nodes.\n *\n * @augments Node\n */\nclass LightingNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'LightingNode';\n\n\t}\n\n\t/**\n\t * Constructs a new lighting node.\n\t */\n\tconstructor() {\n\n\t\tsuper( 'vec3' );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLightingNode = true;\n\n\t}\n\n}\n\n/**\n * A generic class that can be used by nodes which contribute\n * ambient occlusion to the scene. E.g. an ambient occlusion map\n * node can be used as input for this module. Used in {@link NodeMaterial}.\n *\n * @augments LightingNode\n */\nclass AONode extends LightingNode {\n\n\tstatic get type() {\n\n\t\treturn 'AONode';\n\n\t}\n\n\t/**\n\t * Constructs a new AO node.\n\t *\n\t * @param {?Node<float>} [aoNode=null] - The ambient occlusion node.\n\t */\n\tconstructor( aoNode = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The ambient occlusion node.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.aoNode = aoNode;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tbuilder.context.ambientOcclusion.mulAssign( this.aoNode );\n\n\t}\n\n}\n\n/**\n * `LightingContextNode` represents an extension of the {@link ContextNode} module\n * by adding lighting specific context data. It represents the runtime context of\n * {@link LightsNode}.\n *\n * @augments ContextNode\n */\nclass LightingContextNode extends ContextNode {\n\n\tstatic get type() {\n\n\t\treturn 'LightingContextNode';\n\n\t}\n\n\t/**\n\t * Constructs a new lighting context node.\n\t *\n\t * @param {LightsNode} lightsNode - The lights node.\n\t * @param {?LightingModel} [lightingModel=null] - The current lighting model.\n\t * @param {?Node<vec3>} [backdropNode=null] - A backdrop node.\n\t * @param {?Node<float>} [backdropAlphaNode=null] - A backdrop alpha node.\n\t */\n\tconstructor( lightsNode, lightingModel = null, backdropNode = null, backdropAlphaNode = null ) {\n\n\t\tsuper( lightsNode );\n\n\t\t/**\n\t\t * The current lighting model.\n\t\t *\n\t\t * @type {?LightingModel}\n\t\t * @default null\n\t\t */\n\t\tthis.lightingModel = lightingModel;\n\n\t\t/**\n\t\t * A backdrop node.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.backdropNode = backdropNode;\n\n\t\t/**\n\t\t * A backdrop alpha node.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.backdropAlphaNode = backdropAlphaNode;\n\n\t\tthis._value = null;\n\n\t}\n\n\t/**\n\t * Returns a lighting context object.\n\t *\n\t * @return {{\n\t * radiance: Node<vec3>,\n\t * irradiance: Node<vec3>,\n\t * iblIrradiance: Node<vec3>,\n\t * ambientOcclusion: Node<float>,\n\t * reflectedLight: {directDiffuse: Node<vec3>, directSpecular: Node<vec3>, indirectDiffuse: Node<vec3>, indirectSpecular: Node<vec3>},\n\t * backdrop: Node<vec3>,\n\t * backdropAlpha: Node<float>\n\t * }} The lighting context object.\n\t */\n\tgetContext() {\n\n\t\tconst { backdropNode, backdropAlphaNode } = this;\n\n\t\tconst directDiffuse = vec3().toVar( 'directDiffuse' ),\n\t\t\tdirectSpecular = vec3().toVar( 'directSpecular' ),\n\t\t\tindirectDiffuse = vec3().toVar( 'indirectDiffuse' ),\n\t\t\tindirectSpecular = vec3().toVar( 'indirectSpecular' );\n\n\t\tconst reflectedLight = {\n\t\t\tdirectDiffuse,\n\t\t\tdirectSpecular,\n\t\t\tindirectDiffuse,\n\t\t\tindirectSpecular\n\t\t};\n\n\t\tconst context = {\n\t\t\tradiance: vec3().toVar( 'radiance' ),\n\t\t\tirradiance: vec3().toVar( 'irradiance' ),\n\t\t\tiblIrradiance: vec3().toVar( 'iblIrradiance' ),\n\t\t\tambientOcclusion: float( 1 ).toVar( 'ambientOcclusion' ),\n\t\t\treflectedLight,\n\t\t\tbackdrop: backdropNode,\n\t\t\tbackdropAlpha: backdropAlphaNode\n\t\t};\n\n\t\treturn context;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tthis.value = this._value || ( this._value = this.getContext() );\n\t\tthis.value.lightingModel = this.lightingModel || builder.context.lightingModel;\n\n\t\treturn super.setup( builder );\n\n\t}\n\n}\n\nconst lightingContext = /*@__PURE__*/ nodeProxy( LightingContextNode );\n\n/**\n * A generic class that can be used by nodes which contribute\n * irradiance to the scene. E.g. a light map node can be used\n * as input for this module. Used in {@link NodeMaterial}.\n *\n * @augments LightingNode\n */\nclass IrradianceNode extends LightingNode {\n\n\tstatic get type() {\n\n\t\treturn 'IrradianceNode';\n\n\t}\n\n\t/**\n\t * Constructs a new irradiance node.\n\t *\n\t * @param {Node<vec3>} node - A node contributing irradiance.\n\t */\n\tconstructor( node ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * A node contributing irradiance.\n\t\t *\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis.node = node;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tbuilder.context.irradiance.addAssign( this.node );\n\n\t}\n\n}\n\nconst _size$5 = /*@__PURE__*/ new Vector2();\n\n/**\n * A special type of texture node which represents the data of the current viewport\n * as a texture. The module extracts data from the current bound framebuffer with\n * a copy operation so no extra render pass is required to produce the texture data\n * (which is good for performance). `ViewportTextureNode` can be used as an input for a\n * variety of effects like refractive or transmissive materials.\n *\n * @augments TextureNode\n */\nclass ViewportTextureNode extends TextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'ViewportTextureNode';\n\n\t}\n\n\t/**\n\t * Constructs a new viewport texture node.\n\t *\n\t * @param {Node} [uvNode=screenUV] - The uv node.\n\t * @param {?Node} [levelNode=null] - The level node.\n\t * @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.\n\t */\n\tconstructor( uvNode = screenUV, levelNode = null, framebufferTexture = null ) {\n\n\t\tlet defaultFramebuffer = null;\n\n\t\tif ( framebufferTexture === null ) {\n\n\t\t\tdefaultFramebuffer = new FramebufferTexture();\n\t\t\tdefaultFramebuffer.minFilter = LinearMipmapLinearFilter;\n\n\t\t\tframebufferTexture = defaultFramebuffer;\n\n\t\t} else {\n\n\t\t\tdefaultFramebuffer = framebufferTexture;\n\n\t\t}\n\n\t\tsuper( framebufferTexture, uvNode, levelNode );\n\n\t\t/**\n\t\t * Whether to generate mipmaps or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.generateMipmaps = false;\n\n\t\t/**\n\t\t * The reference framebuffer texture. This is used to store the framebuffer texture\n\t\t * for the current render target. If the render target changes, a new framebuffer texture\n\t\t * is created automatically.\n\t\t *\n\t\t * @type {FramebufferTexture}\n\t\t * @default null\n\t\t */\n\t\tthis.defaultFramebuffer = defaultFramebuffer;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isOutputTextureNode = true;\n\n\t\t/**\n\t\t * The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node should extract\n\t\t * the current contents of the bound framebuffer for each render call.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'render'\n\t\t */\n\t\tthis.updateBeforeType = NodeUpdateType.RENDER;\n\n\t\t/**\n\t\t * The framebuffer texture for the current renderer context.\n\t\t *\n\t\t * @type {WeakMap<RenderTarget, FramebufferTexture>}\n\t\t * @private\n\t\t */\n\t\tthis._cacheTextures = new WeakMap();\n\n\t}\n\n\t/**\n\t * This methods returns a texture for the given render target or canvas target reference.\n\t *\n\t * To avoid rendering errors, `ViewportTextureNode` must use unique framebuffer textures\n\t * for different render contexts.\n\t *\n\t * @param {?(RenderTarget|CanvasTarget)} [reference=null] - The render target or canvas target reference.\n\t * @return {Texture} The framebuffer texture.\n\t */\n\tgetTextureForReference( reference = null ) {\n\n\t\tlet defaultFramebuffer;\n\t\tlet cacheTextures;\n\n\t\tif ( this.referenceNode ) {\n\n\t\t\tdefaultFramebuffer = this.referenceNode.defaultFramebuffer;\n\t\t\tcacheTextures = this.referenceNode._cacheTextures;\n\n\t\t} else {\n\n\t\t\tdefaultFramebuffer = this.defaultFramebuffer;\n\t\t\tcacheTextures = this._cacheTextures;\n\n\t\t}\n\n\t\tif ( reference === null ) {\n\n\t\t\treturn defaultFramebuffer;\n\n\t\t}\n\n\t\tif ( cacheTextures.has( reference ) === false ) {\n\n\t\t\tconst framebufferTexture = defaultFramebuffer.clone();\n\n\t\t\tcacheTextures.set( reference, framebufferTexture );\n\n\t\t}\n\n\t\treturn cacheTextures.get( reference );\n\n\t}\n\n\tupdateReference( frame ) {\n\n\t\tconst renderer = frame.renderer;\n\t\tconst renderTarget = renderer.getRenderTarget();\n\t\tconst canvasTarget = renderer.getCanvasTarget();\n\n\t\tconst reference = renderTarget ? renderTarget : canvasTarget;\n\n\t\tthis.value = this.getTextureForReference( reference );\n\n\t\treturn this.value;\n\n\t}\n\n\tupdateBefore( frame ) {\n\n\t\tconst renderer = frame.renderer;\n\t\tconst renderTarget = renderer.getRenderTarget();\n\t\tconst canvasTarget = renderer.getCanvasTarget();\n\n\t\tconst reference = renderTarget ? renderTarget : canvasTarget;\n\n\t\tif ( reference === null ) {\n\n\t\t\trenderer.getDrawingBufferSize( _size$5 );\n\n\t\t} else if ( reference.getDrawingBufferSize ) {\n\n\t\t\treference.getDrawingBufferSize( _size$5 );\n\n\t\t} else {\n\n\t\t\t_size$5.set( reference.width, reference.height );\n\n\t\t}\n\n\t\t//\n\n\t\tconst framebufferTexture = this.getTextureForReference( reference );\n\n\t\tif ( framebufferTexture.image.width !== _size$5.width || framebufferTexture.image.height !== _size$5.height ) {\n\n\t\t\tframebufferTexture.image.width = _size$5.width;\n\t\t\tframebufferTexture.image.height = _size$5.height;\n\t\t\tframebufferTexture.needsUpdate = true;\n\n\t\t}\n\n\t\t//\n\n\t\tconst currentGenerateMipmaps = framebufferTexture.generateMipmaps;\n\t\tframebufferTexture.generateMipmaps = this.generateMipmaps;\n\n\t\trenderer.copyFramebufferToTexture( framebufferTexture );\n\n\t\tframebufferTexture.generateMipmaps = currentGenerateMipmaps;\n\n\t}\n\n\tclone() {\n\n\t\tconst viewportTextureNode = new this.constructor( this.uvNode, this.levelNode, this.value );\n\t\tviewportTextureNode.generateMipmaps = this.generateMipmaps;\n\n\t\treturn viewportTextureNode;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a viewport texture node.\n *\n * @tsl\n * @function\n * @param {?Node} [uvNode=screenUV] - The uv node.\n * @param {?Node} [levelNode=null] - The level node.\n * @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.\n * @returns {ViewportTextureNode}\n */\nconst viewportTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode ).setParameterLength( 0, 3 );\n\n/**\n * TSL function for creating a viewport texture node with enabled mipmap generation.\n *\n * @tsl\n * @function\n * @param {?Node} [uvNode=screenUV] - The uv node.\n * @param {?Node} [levelNode=null] - The level node.\n * @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.\n * @returns {ViewportTextureNode}\n */\nconst viewportMipTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } ).setParameterLength( 0, 3 );\n\n// Singleton instances for common usage\nconst _singletonOpaqueViewportTextureNode = /*@__PURE__*/ viewportMipTexture();\n\n/**\n * TSL function for creating a viewport texture node with enabled mipmap generation.\n * The texture should only contain the opaque rendering objects.\n *\n * This should be used just in transparent or transmissive materials.\n *\n * @tsl\n * @function\n * @param {?Node} [uv=screenUV] - The uv node.\n * @param {?Node} [level=null] - The level node.\n * @returns {ViewportTextureNode}\n */\nconst viewportOpaqueMipTexture = ( uv = screenUV, level = null ) => _singletonOpaqueViewportTextureNode.sample( uv, level ); // TODO: Use once() when sample() supports it\n\nlet _sharedDepthbuffer = null;\n\n/**\n * Represents the depth of the current viewport as a texture. This module\n * can be used in combination with viewport texture to achieve effects\n * that require depth evaluation.\n *\n * @augments ViewportTextureNode\n */\nclass ViewportDepthTextureNode extends ViewportTextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'ViewportDepthTextureNode';\n\n\t}\n\n\t/**\n\t * Constructs a new viewport depth texture node.\n\t *\n\t * @param {Node} [uvNode=screenUV] - The uv node.\n\t * @param {?Node} [levelNode=null] - The level node.\n\t * @param {?DepthTexture} [depthTexture=null] - A depth texture. If not provided, uses a shared depth texture.\n\t */\n\tconstructor( uvNode = screenUV, levelNode = null, depthTexture = null ) {\n\n\t\tif ( depthTexture === null ) {\n\n\t\t\tif ( _sharedDepthbuffer === null ) {\n\n\t\t\t\t_sharedDepthbuffer = new DepthTexture();\n\n\t\t\t}\n\n\t\t\tdepthTexture = _sharedDepthbuffer;\n\n\t\t}\n\n\t\tsuper( uvNode, levelNode, depthTexture );\n\n\t}\n\n}\n\n/**\n * TSL function for a viewport depth texture node.\n *\n * @tsl\n * @function\n * @param {?Node} [uvNode=screenUV] - The uv node.\n * @param {?Node} [levelNode=null] - The level node.\n * @param {?DepthTexture} [depthTexture=null] - A depth texture. If not provided, a depth texture is created automatically.\n * @returns {ViewportDepthTextureNode}\n */\nconst viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode ).setParameterLength( 0, 3 );\n\n/**\n * This node offers a collection of features in context of the depth logic in the fragment shader.\n * Depending on {@link ViewportDepthNode#scope}, it can be used to define a depth value for the current\n * fragment or for depth evaluation purposes.\n *\n * @augments Node\n */\nclass ViewportDepthNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ViewportDepthNode';\n\n\t}\n\n\t/**\n\t * Constructs a new viewport depth node.\n\t *\n\t * @param {('depth'|'depthBase'|'linearDepth')} scope - The node's scope.\n\t * @param {?Node} [valueNode=null] - The value node.\n\t */\n\tconstructor( scope, valueNode = null ) {\n\n\t\tsuper( 'float' );\n\n\t\t/**\n\t\t * The node behaves differently depending on which scope is selected.\n\t\t *\n\t\t * - `ViewportDepthNode.DEPTH_BASE`: Allows to define a value for the current fragment's depth.\n\t\t * - `ViewportDepthNode.DEPTH`: Represents the depth value for the current fragment (`valueNode` is ignored).\n\t\t * - `ViewportDepthNode.LINEAR_DEPTH`: Represents the linear (orthographic) depth value of the current fragment.\n\t\t * If a `valueNode` is set, the scope can be used to convert perspective depth data to linear data.\n\t\t *\n\t\t * @type {('depth'|'depthBase'|'linearDepth')}\n\t\t */\n\t\tthis.scope = scope;\n\n\t\t/**\n\t\t * Can be used to define a custom depth value.\n\t\t * The property is ignored in the `ViewportDepthNode.DEPTH` scope.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.valueNode = valueNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isViewportDepthNode = true;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst { scope } = this;\n\n\t\tif ( scope === ViewportDepthNode.DEPTH_BASE ) {\n\n\t\t\treturn builder.getFragDepth();\n\n\t\t}\n\n\t\treturn super.generate( builder );\n\n\t}\n\n\tsetup( { camera } ) {\n\n\t\tconst { scope } = this;\n\t\tconst value = this.valueNode;\n\n\t\tlet node = null;\n\n\t\tif ( scope === ViewportDepthNode.DEPTH_BASE ) {\n\n\t\t\tif ( value !== null ) {\n\n\t\t\t\tnode = depthBase().assign( value );\n\n\t\t\t}\n\n\t\t} else if ( scope === ViewportDepthNode.DEPTH ) {\n\n\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\tnode = viewZToPerspectiveDepth( positionView.z, cameraNear, cameraFar );\n\n\t\t\t} else {\n\n\t\t\t\tnode = viewZToOrthographicDepth( positionView.z, cameraNear, cameraFar );\n\n\t\t\t}\n\n\t\t} else if ( scope === ViewportDepthNode.LINEAR_DEPTH ) {\n\n\t\t\tif ( value !== null ) {\n\n\t\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\t\tconst viewZ = perspectiveDepthToViewZ( value, cameraNear, cameraFar );\n\n\t\t\t\t\tnode = viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnode = value;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tnode = viewZToOrthographicDepth( positionView.z, cameraNear, cameraFar );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n}\n\nViewportDepthNode.DEPTH_BASE = 'depthBase';\nViewportDepthNode.DEPTH = 'depth';\nViewportDepthNode.LINEAR_DEPTH = 'linearDepth';\n\n// NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera\n\n/**\n * TSL function for converting a viewZ value to an orthographic depth value.\n *\n * @tsl\n * @function\n * @param {Node<float>} viewZ - The viewZ node.\n * @param {Node<float>} near - The camera's near value.\n * @param {Node<float>} far - The camera's far value.\n * @returns {Node<float>}\n */\nconst viewZToOrthographicDepth = ( viewZ, near, far ) => viewZ.add( near ).div( near.sub( far ) );\n\n/**\n * TSL function for converting a viewZ value to a reversed orthographic depth value.\n *\n * @tsl\n * @function\n * @param {Node<float>} viewZ - The viewZ node.\n * @param {Node<float>} near - The camera's near value.\n * @param {Node<float>} far - The camera's far value.\n * @returns {Node<float>}\n */\nconst viewZToReversedOrthographicDepth = ( viewZ, near, far ) => viewZ.add( far ).div( far.sub( near ) );\n\n/**\n * TSL function for converting an orthographic depth value to a viewZ value.\n *\n * @tsl\n * @function\n * @param {Node<float>} depth - The orthographic depth.\n * @param {Node<float>} near - The camera's near value.\n * @param {Node<float>} far - The camera's far value.\n * @returns {Node<float>}\n */\nconst orthographicDepthToViewZ = /*@__PURE__*/ Fn( ( [ depth, near, far ], builder ) => {\n\n\tif ( builder.renderer.reversedDepthBuffer === true ) {\n\n\t\treturn far.sub( near ).mul( depth ).sub( far );\n\n\t} else {\n\n\t\treturn near.sub( far ).mul( depth ).sub( near );\n\n\t}\n\n} );\n\n/**\n * TSL function for converting a viewZ value to a perspective depth value.\n *\n * Note: {link https://twitter.com/gonnavis/status/1377183786949959682}.\n *\n * @tsl\n * @function\n * @param {Node<float>} viewZ - The viewZ node.\n * @param {Node<float>} near - The camera's near value.\n * @param {Node<float>} far - The camera's far value.\n * @returns {Node<float>}\n */\nconst viewZToPerspectiveDepth = ( viewZ, near, far ) => near.add( viewZ ).mul( far ).div( far.sub( near ).mul( viewZ ) );\n\n/**\n * TSL function for converting a viewZ value to a reversed perspective depth value.\n *\n * @tsl\n * @function\n * @param {Node<float>} viewZ - The viewZ node.\n * @param {Node<float>} near - The camera's near value.\n * @param {Node<float>} far - The camera's far value.\n * @returns {Node<float>}\n */\nconst viewZToReversedPerspectiveDepth = ( viewZ, near, far ) => near.mul( viewZ.add( far ) ).div( viewZ.mul( near.sub( far ) ) );\n\n/**\n * TSL function for converting a perspective depth value to a viewZ value.\n *\n * @tsl\n * @function\n * @param {Node<float>} depth - The perspective depth.\n * @param {Node<float>} near - The camera's near value.\n * @param {Node<float>} far - The camera's far value.\n * @returns {Node<float>}\n */\nconst perspectiveDepthToViewZ = /*@__PURE__*/ Fn( ( [ depth, near, far ], builder ) => {\n\n\tif ( builder.renderer.reversedDepthBuffer === true ) {\n\n\t\treturn near.mul( far ).div( near.sub( far ).mul( depth ).sub( near ) );\n\n\t} else {\n\n\t\treturn near.mul( far ).div( far.sub( near ).mul( depth ).sub( far ) );\n\n\t}\n\n} );\n\n/**\n * TSL function for converting a viewZ value to a logarithmic depth value.\n *\n * @tsl\n * @function\n * @param {Node<float>} viewZ - The viewZ node.\n * @param {Node<float>} near - The camera's near value.\n * @param {Node<float>} far - The camera's far value.\n * @returns {Node<float>}\n */\nconst viewZToLogarithmicDepth = ( viewZ, near, far ) => {\n\n\t// NOTE: viewZ must be negative--see explanation at the end of this comment block.\n\t// The final logarithmic depth formula used here is adapted from one described in an\n\t// article by Thatcher Ulrich (see http://tulrich.com/geekstuff/log_depth_buffer.txt),\n\t// which was an improvement upon an earlier formula one described in an\n\t// Outerra article (https://outerra.blogspot.com/2009/08/logarithmic-z-buffer.html).\n\t// Ulrich's formula is the following:\n\t//     z = K * log( w / cameraNear ) / log( cameraFar / cameraNear )\n\t//     where K = 2^k - 1, and k is the number of bits in the depth buffer.\n\t// The Outerra variant ignored the camera near plane (it assumed it was 0) and instead\n\t// opted for a \"C-constant\" for resolution adjustment of objects near the camera.\n\t// Outerra states: \"Notice that the 'C' variant doesn’t use a near plane distance, it has it\n\t// set at 0\" (quote from https://outerra.blogspot.com/2012/11/maximizing-depth-buffer-range-and.html).\n\t// Ulrich's variant has the benefit of constant relative precision over the whole near-far range.\n\t// It was debated here whether Outerra's \"C-constant\" or Ulrich's \"near plane\" variant should\n\t// be used, and ultimately Ulrich's \"near plane\" version was chosen.\n\t// Outerra eventually made another improvement to their original \"C-constant\" variant,\n\t// but it still does not incorporate the camera near plane (for this version,\n\t// see https://outerra.blogspot.com/2013/07/logarithmic-depth-buffer-optimizations.html).\n\t// Here we make 4 changes to Ulrich's formula:\n\t// 1. Clamp the camera near plane so we don't divide by 0.\n\t// 2. Use log2 instead of log to avoid an extra multiply (shaders implement log using log2).\n\t// 3. Assume K is 1 (K = maximum value in depth buffer; see Ulrich's formula above).\n\t// 4. To maintain consistency with the functions \"viewZToOrthographicDepth\" and \"viewZToPerspectiveDepth\",\n\t//    we modify the formula here to use 'viewZ' instead of 'w'. The other functions expect a negative viewZ,\n\t//    so we do the same here, hence the 'viewZ.negate()' call.\n\t// For visual representation of this depth curve, see https://www.desmos.com/calculator/uyqk0vex1u\n\tnear = near.max( 1e-6 ).toVar();\n\tconst numerator = log2( viewZ.negate().div( near ) );\n\tconst denominator = log2( far.div( near ) );\n\treturn numerator.div( denominator );\n\n};\n\n/**\n * TSL function for converting a logarithmic depth value to a viewZ value.\n *\n * @tsl\n * @function\n * @param {Node<float>} depth - The logarithmic depth.\n * @param {Node<float>} near - The camera's near value.\n * @param {Node<float>} far - The camera's far value.\n * @returns {Node<float>}\n */\nconst logarithmicDepthToViewZ = ( depth, near, far ) => {\n\n\t// NOTE: we add a 'negate()' call to the return value here to maintain consistency with\n\t// the functions \"orthographicDepthToViewZ\" and \"perspectiveDepthToViewZ\" (they return\n\t// a negative viewZ).\n\tconst exponent = depth.mul( log( far.div( near ) ) );\n\treturn float( Math.E ).pow( exponent ).mul( near ).negate();\n\n};\n\n/**\n * TSL function for defining a value for the current fragment's depth.\n *\n * @tsl\n * @function\n * @param {Node<float>} value - The depth value to set.\n * @returns {ViewportDepthNode<float>}\n */\nconst depthBase = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH_BASE );\n\n/**\n * TSL object that represents the depth value for the current fragment.\n *\n * @tsl\n * @type {ViewportDepthNode}\n */\nconst depth = /*@__PURE__*/ nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );\n\n/**\n * TSL function for converting a perspective depth value to linear depth.\n *\n * @tsl\n * @function\n * @param {?Node<float>} [value=null] - The perspective depth. If `null` is provided, the current fragment's depth is used.\n * @returns {ViewportDepthNode<float>}\n */\nconst linearDepth = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH ).setParameterLength( 0, 1 );\n\n/**\n * TSL object that represents the linear (orthographic) depth value of the current fragment\n *\n * @tsl\n * @type {ViewportDepthNode}\n */\nconst viewportLinearDepth = /*@__PURE__*/ linearDepth( viewportDepthTexture() );\n\ndepth.assign = ( value ) => depthBase( value );\n\n/**\n * This node is used in {@link NodeMaterial} to setup the clipping\n * which can happen hardware-accelerated (if supported) and optionally\n * use alpha-to-coverage for anti-aliasing clipped edges.\n *\n * @augments Node\n */\nclass ClippingNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ClippingNode';\n\n\t}\n\n\t/**\n\t * Constructs a new clipping node.\n\t *\n\t * @param {('default'|'hardware'|'alphaToCoverage')} [scope='default'] - The node's scope. Similar to other nodes,\n\t * the selected scope influences the behavior of the node and what type of code is generated.\n\t */\n\tconstructor( scope = ClippingNode.DEFAULT ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The node's scope. Similar to other nodes, the selected scope influences\n\t\t * the behavior of the node and what type of code is generated.\n\t\t *\n\t\t * @type {('default'|'hardware'|'alphaToCoverage')}\n\t\t */\n\t\tthis.scope = scope;\n\n\t}\n\n\t/**\n\t * Setups the node depending on the selected scope.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node} The result node.\n\t */\n\tsetup( builder ) {\n\n\t\tsuper.setup( builder );\n\n\t\tconst clippingContext = builder.clippingContext;\n\t\tconst { intersectionPlanes, unionPlanes } = clippingContext;\n\n\t\tthis.hardwareClipping = builder.material.hardwareClipping;\n\n\t\tif ( this.scope === ClippingNode.ALPHA_TO_COVERAGE ) {\n\n\t\t\treturn this.setupAlphaToCoverage( intersectionPlanes, unionPlanes );\n\n\t\t} else if ( this.scope === ClippingNode.HARDWARE ) {\n\n\t\t\treturn this.setupHardwareClipping( unionPlanes, builder );\n\n\t\t} else {\n\n\t\t\treturn this.setupDefault( intersectionPlanes, unionPlanes );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Setups alpha to coverage.\n\t *\n\t * @param {Array<Vector4>} intersectionPlanes - The intersection planes.\n\t * @param {Array<Vector4>} unionPlanes - The union planes.\n\t * @return {Node} The result node.\n\t */\n\tsetupAlphaToCoverage( intersectionPlanes, unionPlanes ) {\n\n\t\treturn Fn( () => {\n\n\t\t\tconst distanceToPlane = float().toVar( 'distanceToPlane' );\n\t\t\tconst distanceGradient = float().toVar( 'distanceToGradient' );\n\n\t\t\tconst clipOpacity = float( 1 ).toVar( 'clipOpacity' );\n\n\t\t\tconst numUnionPlanes = unionPlanes.length;\n\n\t\t\tif ( this.hardwareClipping === false && numUnionPlanes > 0 ) {\n\n\t\t\t\tconst clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );\n\n\t\t\t\tLoop( numUnionPlanes, ( { i } ) => {\n\n\t\t\t\t\tconst plane = clippingPlanes.element( i );\n\n\t\t\t\t\tdistanceToPlane.assign( positionView.dot( plane.xyz ).negate().add( plane.w ) );\n\t\t\t\t\tdistanceGradient.assign( distanceToPlane.fwidth().div( 2.0 ) );\n\n\t\t\t\t\tclipOpacity.mulAssign( smoothstep( distanceGradient.negate(), distanceGradient, distanceToPlane ) );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst numIntersectionPlanes = intersectionPlanes.length;\n\n\t\t\tif ( numIntersectionPlanes > 0 ) {\n\n\t\t\t\tconst clippingPlanes = uniformArray( intersectionPlanes ).setGroup( renderGroup );\n\t\t\t\tconst intersectionClipOpacity = float( 1 ).toVar( 'intersectionClipOpacity' );\n\n\t\t\t\tLoop( numIntersectionPlanes, ( { i } ) => {\n\n\t\t\t\t\tconst plane = clippingPlanes.element( i );\n\n\t\t\t\t\tdistanceToPlane.assign( positionView.dot( plane.xyz ).negate().add( plane.w ) );\n\t\t\t\t\tdistanceGradient.assign( distanceToPlane.fwidth().div( 2.0 ) );\n\n\t\t\t\t\tintersectionClipOpacity.mulAssign( smoothstep( distanceGradient.negate(), distanceGradient, distanceToPlane ).oneMinus() );\n\n\t\t\t\t} );\n\n\t\t\t\tclipOpacity.mulAssign( intersectionClipOpacity.oneMinus() );\n\n\t\t\t}\n\n\t\t\tdiffuseColor.a.mulAssign( clipOpacity );\n\n\t\t\tdiffuseColor.a.equal( 0.0 ).discard();\n\n\t\t} )();\n\n\t}\n\n\t/**\n\t * Setups the default clipping.\n\t *\n\t * @param {Array<Vector4>} intersectionPlanes - The intersection planes.\n\t * @param {Array<Vector4>} unionPlanes - The union planes.\n\t * @return {Node} The result node.\n\t */\n\tsetupDefault( intersectionPlanes, unionPlanes ) {\n\n\t\treturn Fn( () => {\n\n\t\t\tconst numUnionPlanes = unionPlanes.length;\n\n\t\t\tif ( this.hardwareClipping === false && numUnionPlanes > 0 ) {\n\n\t\t\t\tconst clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );\n\n\t\t\t\tLoop( numUnionPlanes, ( { i } ) => {\n\n\t\t\t\t\tconst plane = clippingPlanes.element( i );\n\t\t\t\t\tpositionView.dot( plane.xyz ).greaterThan( plane.w ).discard();\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst numIntersectionPlanes = intersectionPlanes.length;\n\n\t\t\tif ( numIntersectionPlanes > 0 ) {\n\n\t\t\t\tconst clippingPlanes = uniformArray( intersectionPlanes ).setGroup( renderGroup );\n\t\t\t\tconst clipped = bool( true ).toVar( 'clipped' );\n\n\t\t\t\tLoop( numIntersectionPlanes, ( { i } ) => {\n\n\t\t\t\t\tconst plane = clippingPlanes.element( i );\n\t\t\t\t\tclipped.assign( positionView.dot( plane.xyz ).greaterThan( plane.w ).and( clipped ) );\n\n\t\t\t\t} );\n\n\t\t\t\tclipped.discard();\n\n\t\t\t}\n\n\t\t} )();\n\n\t}\n\n\t/**\n\t * Setups hardware clipping.\n\t *\n\t * @param {Array<Vector4>} unionPlanes - The union planes.\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node} The result node.\n\t */\n\tsetupHardwareClipping( unionPlanes, builder ) {\n\n\t\tconst numUnionPlanes = unionPlanes.length;\n\n\t\tbuilder.enableHardwareClipping( numUnionPlanes );\n\n\t\treturn Fn( () => {\n\n\t\t\tconst clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );\n\t\t\tconst hw_clip_distances = builtin( builder.getClipDistance() );\n\n\t\t\tLoop( numUnionPlanes, ( { i } ) => {\n\n\t\t\t\tconst plane = clippingPlanes.element( i );\n\n\t\t\t\tconst distance = positionView.dot( plane.xyz ).sub( plane.w ).negate();\n\t\t\t\thw_clip_distances.element( i ).assign( distance );\n\n\t\t\t} );\n\n\t\t} )();\n\n\t}\n\n}\n\nClippingNode.ALPHA_TO_COVERAGE = 'alphaToCoverage';\nClippingNode.DEFAULT = 'default';\nClippingNode.HARDWARE = 'hardware';\n\n/**\n * TSL function for setting up the default clipping logic.\n *\n * @tsl\n * @function\n * @returns {ClippingNode}\n */\nconst clipping = () => new ClippingNode();\n\n/**\n * TSL function for setting up alpha to coverage.\n *\n * @tsl\n * @function\n * @returns {ClippingNode}\n */\nconst clippingAlpha = () => new ClippingNode( ClippingNode.ALPHA_TO_COVERAGE );\n\n/**\n * TSL function for setting up hardware-based clipping.\n *\n * @tsl\n * @function\n * @returns {ClippingNode}\n */\nconst hardwareClipping = () => new ClippingNode( ClippingNode.HARDWARE );\n\n// See: https://casual-effects.com/research/Wyman2017Hashed/index.html\n\nconst ALPHA_HASH_SCALE = 0.05; // Derived from trials only, and may be changed.\n\nconst hash2D = /*@__PURE__*/ Fn( ( [ value ] ) => {\n\n\treturn fract( mul( 1.0e4, sin( mul( 17.0, value.x ).add( mul( 0.1, value.y ) ) ) ).mul( add( 0.1, abs( sin( mul( 13.0, value.y ).add( value.x ) ) ) ) ) );\n\n} );\n\nconst hash3D = /*@__PURE__*/ Fn( ( [ value ] ) => {\n\n\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\n\n} );\n\nconst getAlphaHashThreshold = /*@__PURE__*/ Fn( ( [ position ] ) => {\n\n\t// Find the discretized derivatives of our coordinates\n\tconst maxDeriv = max$1(\n\t\tlength( dFdx( position.xyz ) ),\n\t\tlength( dFdy( position.xyz ) )\n\t);\n\n\tconst pixScale = float( 1 ).div( float( ALPHA_HASH_SCALE ).mul( maxDeriv ) ).toVar( 'pixScale' );\n\n\t// Find two nearest log-discretized noise scales\n\tconst pixScales = vec2(\n\t\texp2( floor( log2( pixScale ) ) ),\n\t\texp2( ceil( log2( pixScale ) ) )\n\t);\n\n\t// Compute alpha thresholds at our two noise scales\n\tconst alpha = vec2(\n\t\thash3D( floor( pixScales.x.mul( position.xyz ) ) ),\n\t\thash3D( floor( pixScales.y.mul( position.xyz ) ) ),\n\t);\n\n\t// Factor to interpolate lerp with\n\tconst lerpFactor = fract( log2( pixScale ) );\n\n\t// Interpolate alpha threshold from noise at two scales\n\tconst x = add( mul( lerpFactor.oneMinus(), alpha.x ), mul( lerpFactor, alpha.y ) );\n\n\t// Pass into CDF to compute uniformly distrib threshold\n\tconst a = min$1( lerpFactor, lerpFactor.oneMinus() );\n\tconst cases = vec3(\n\t\tx.mul( x ).div( mul( 2.0, a ).mul( sub( 1.0, a ) ) ),\n\t\tx.sub( mul( 0.5, a ) ).div( sub( 1.0, a ) ),\n\t\tsub( 1.0, sub( 1.0, x ).mul( sub( 1.0, x ) ).div( mul( 2.0, a ).mul( sub( 1.0, a ) ) ) ) );\n\n\t// Find our final, uniformly distributed alpha threshold (ατ)\n\tconst threshold = x.lessThan( a.oneMinus() ).select( x.lessThan( a ).select( cases.x, cases.y ), cases.z );\n\n\t// Avoids ατ == 0. Could also do ατ =1-ατ\n\treturn clamp( threshold, 1.0e-6, 1.0 );\n\n} ).setLayout( {\n\tname: 'getAlphaHashThreshold',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'position', type: 'vec3' }\n\t]\n} );\n\n/**\n * An attribute node for representing vertex colors.\n *\n * @augments AttributeNode\n */\nclass VertexColorNode extends AttributeNode {\n\n\tstatic get type() {\n\n\t\treturn 'VertexColorNode';\n\n\t}\n\n\t/**\n\t * Constructs a new vertex color node.\n\t *\n\t * @param {number} index - The attribute index.\n\t */\n\tconstructor( index ) {\n\n\t\tsuper( null, 'vec4' );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isVertexColorNode = true;\n\n\t\t/**\n\t\t * The attribute index to enable more than one sets of vertex colors.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.index = index;\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation by honoring the attribute index.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The attribute name.\n\t */\n\tgetAttributeName( /*builder*/ ) {\n\n\t\tconst index = this.index;\n\n\t\treturn 'color' + ( index > 0 ? index : '' );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst attributeName = this.getAttributeName( builder );\n\t\tconst geometryAttribute = builder.hasGeometryAttribute( attributeName );\n\n\t\tlet result;\n\n\t\tif ( geometryAttribute === true ) {\n\n\t\t\tresult = super.generate( builder );\n\n\t\t} else {\n\n\t\t\t// Vertex color fallback should be white\n\t\t\tresult = builder.generateConst( this.nodeType, new Vector4( 1, 1, 1, 1 ) );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.index = this.index;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.index = data.index;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a reference node.\n *\n * @tsl\n * @function\n * @param {number} [index=0] - The attribute index.\n * @returns {VertexColorNode}\n */\nconst vertexColor = ( index = 0 ) => new VertexColorNode( index );\n\n/**\n * Represents a \"Color Burn\" blend mode.\n *\n * It's designed to darken the base layer's colors based on the color of the blend layer.\n * It significantly increases the contrast of the base layer, making the colors more vibrant and saturated.\n * The darker the color in the blend layer, the stronger the darkening and contrast effect on the base layer.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} base - The base color.\n * @param {Node<vec3>} blend - The blend color. A white (#ffffff) blend color does not alter the base color.\n * @return {Node<vec3>} The result.\n */\nconst blendBurn = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {\n\n\treturn min$1( 1.0, base.oneMinus().div( blend ) ).oneMinus();\n\n} ).setLayout( {\n\tname: 'blendBurn',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'base', type: 'vec3' },\n\t\t{ name: 'blend', type: 'vec3' }\n\t]\n} );\n\n/**\n * Represents a \"Color Dodge\" blend mode.\n *\n * It's designed to lighten the base layer's colors based on the color of the blend layer.\n * It significantly increases the brightness of the base layer, making the colors lighter and more vibrant.\n * The brighter the color in the blend layer, the stronger the lightening and contrast effect on the base layer.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} base - The base color.\n * @param {Node<vec3>} blend - The blend color. A black (#000000) blend color does not alter the base color.\n * @return {Node<vec3>} The result.\n */\nconst blendDodge = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {\n\n\treturn min$1( base.div( blend.oneMinus() ), 1.0 );\n\n} ).setLayout( {\n\tname: 'blendDodge',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'base', type: 'vec3' },\n\t\t{ name: 'blend', type: 'vec3' }\n\t]\n} );\n\n/**\n * Represents a \"Screen\" blend mode.\n *\n * Similar to `blendDodge()`, this mode also lightens the base layer's colors based on the color of the blend layer.\n * The \"Screen\" blend mode is better for general brightening whereas the \"Dodge\" results in more subtle and nuanced\n * effects.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} base - The base color.\n * @param {Node<vec3>} blend - The blend color. A black (#000000) blend color does not alter the base color.\n * @return {Node<vec3>} The result.\n */\nconst blendScreen = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {\n\n\treturn base.oneMinus().mul( blend.oneMinus() ).oneMinus();\n\n} ).setLayout( {\n\tname: 'blendScreen',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'base', type: 'vec3' },\n\t\t{ name: 'blend', type: 'vec3' }\n\t]\n} );\n\n/**\n * Represents a \"Overlay\" blend mode.\n *\n * It's designed to increase the contrast of the base layer based on the color of the blend layer.\n * It amplifies the existing colors and contrast in the base layer, making lighter areas lighter and darker areas darker.\n * The color of the blend layer significantly influences the resulting contrast and color shift in the base layer.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} base - The base color.\n * @param {Node<vec3>} blend - The blend color\n * @return {Node<vec3>} The result.\n */\nconst blendOverlay = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {\n\n\treturn mix( base.mul( 2.0 ).mul( blend ), base.oneMinus().mul( 2.0 ).mul( blend.oneMinus() ).oneMinus(), step( 0.5, base ) );\n\n} ).setLayout( {\n\tname: 'blendOverlay',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'base', type: 'vec3' },\n\t\t{ name: 'blend', type: 'vec3' }\n\t]\n} );\n\n/**\n * This function blends two color based on their alpha values by replicating the behavior of `THREE.NormalBlending`.\n * It assumes both input colors have non-premultiplied alpha.\n *\n * @tsl\n * @function\n * @param {Node<vec4>} base - The base color.\n * @param {Node<vec4>} blend - The blend color\n * @return {Node<vec4>} The result.\n */\nconst blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {\n\n\tconst outAlpha = blend.a.add( base.a.mul( blend.a.oneMinus() ) );\n\n\treturn vec4( blend.rgb.mul( blend.a ).add( base.rgb.mul( base.a ).mul( blend.a.oneMinus() ) ).div( outAlpha ), outAlpha );\n\n} ).setLayout( {\n\tname: 'blendColor',\n\ttype: 'vec4',\n\tinputs: [\n\t\t{ name: 'base', type: 'vec4' },\n\t\t{ name: 'blend', type: 'vec4' }\n\t]\n} );\n\n/**\n * Premultiplies the RGB channels of a color by its alpha channel.\n *\n * This function is useful for converting a non-premultiplied alpha color\n * into a premultiplied alpha format, where the RGB values are scaled\n * by the alpha value. Premultiplied alpha is often used in graphics\n * rendering for certain operations, such as compositing and image processing.\n *\n * @tsl\n * @function\n * @param {Node<vec4>} color - The input color with non-premultiplied alpha.\n * @return {Node<vec4>} The color with premultiplied alpha.\n */\nconst premultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {\n\n\treturn vec4( color.rgb.mul( color.a ), color.a );\n\n}, { color: 'vec4', return: 'vec4' } );\n\n/**\n * Unpremultiplies the RGB channels of a color by its alpha channel.\n *\n * This function is useful for converting a premultiplied alpha color\n * back into a non-premultiplied alpha format, where the RGB values are\n * divided by the alpha value. Unpremultiplied alpha is often used in graphics\n * rendering for certain operations, such as compositing and image processing.\n *\n * @tsl\n * @function\n * @param {Node<vec4>} color - The input color with premultiplied alpha.\n * @return {Node<vec4>} The color with non-premultiplied alpha.\n */\nconst unpremultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {\n\n\tIf( color.a.equal( 0.0 ), () => vec4( 0.0 ) );\n\n\treturn vec4( color.rgb.div( color.a ), color.a );\n\n}, { color: 'vec4', return: 'vec4' } );\n\n/**\n * Base class for all node materials.\n *\n * @augments Material\n */\nclass NodeMaterial extends Material {\n\n\tstatic get type() {\n\n\t\treturn 'NodeMaterial';\n\n\t}\n\n\t/**\n\t * Represents the type of the node material.\n\t *\n\t * @type {string}\n\t */\n\tget type() {\n\n\t\treturn this.constructor.type;\n\n\t}\n\n\tset type( _value ) { /* */ }\n\n\t/**\n\t * Constructs a new node material.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isNodeMaterial = true;\n\n\t\t/**\n\t\t * Whether this material is affected by fog or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.fog = true;\n\n\t\t/**\n\t\t * Whether this material is affected by lights or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.lights = false;\n\n\t\t/**\n\t\t * Whether this material uses hardware clipping or not.\n\t\t * This property is managed by the engine and should not be\n\t\t * modified by apps.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.hardwareClipping = false;\n\n\t\t/**\n\t\t * Node materials which set their `lights` property to `true`\n\t\t * are affected by all lights of the scene. Sometimes selective\n\t\t * lighting is wanted which means only _some_ lights in the scene\n\t\t * affect a material. This can be achieved by creating an instance\n\t\t * of {@link LightsNode} with a list of selective\n\t\t * lights and assign the node to this property.\n\t\t *\n\t\t * ```js\n\t\t * const customLightsNode = lights( [ light1, light2 ] );\n\t\t * material.lightsNode = customLightsNode;\n\t\t * ```\n\t\t *\n\t\t * @type {?LightsNode}\n\t\t * @default null\n\t\t */\n\t\tthis.lightsNode = null;\n\n\t\t/**\n\t\t * The environment of node materials can be defined by an environment\n\t\t * map assigned to the `envMap` property or by `Scene.environment`\n\t\t * if the node material is a PBR material. This node property allows to overwrite\n\t\t * the default behavior and define the environment with a custom node.\n\t\t *\n\t\t * ```js\n\t\t * material.envNode = pmremTexture( renderTarget.texture );\n\t\t * ```\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.envNode = null;\n\n\t\t/**\n\t\t * The lighting of node materials might be influenced by ambient occlusion.\n\t\t * The default AO is inferred from an ambient occlusion map assigned to `aoMap`\n\t\t * and the respective `aoMapIntensity`. This node property allows to overwrite\n\t\t * the default and define the ambient occlusion with a custom node instead.\n\t\t *\n\t\t * If you don't want to overwrite the diffuse color but modify the existing\n\t\t * values instead, use {@link materialAO}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.aoNode = null;\n\n\t\t/**\n\t\t * The diffuse color of node materials is by default inferred from the\n\t\t * `color` and `map` properties. This node property allows to overwrite the default\n\t\t * and define the diffuse color with a node instead.\n\t\t *\n\t\t * ```js\n\t\t * material.colorNode = color( 0xff0000 ); // define red color\n\t\t * ```\n\t\t *\n\t\t * If you don't want to overwrite the diffuse color but modify the existing\n\t\t * values instead, use {@link materialColor}.\n\t\t *\n\t\t * ```js\n\t\t * material.colorNode = materialColor.mul( color( 0xff0000 ) ); // give diffuse colors a red tint\n\t\t * ```\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.colorNode = null;\n\n\t\t/**\n\t\t * The normals of node materials are by default inferred from the `normalMap`/`normalScale`\n\t\t * or `bumpMap`/`bumpScale` properties. This node property allows to overwrite the default\n\t\t * and define the normals with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the normals but modify the existing values instead,\n\t\t * use {@link materialNormal}.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.normalNode = null;\n\n\t\t/**\n\t\t * The opacity of node materials is by default inferred from the `opacity`\n\t\t * and `alphaMap` properties. This node property allows to overwrite the default\n\t\t * and define the opacity with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the opacity but modify the existing\n\t\t * value instead, use {@link materialOpacity}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.opacityNode = null;\n\n\t\t/**\n\t\t * This node can be used to implement a variety of filter-like effects. The idea is\n\t\t * to store the current rendering into a texture e.g. via `viewportSharedTexture()`, use it\n\t\t * to create an arbitrary effect and then assign the node composition to this property.\n\t\t * Everything behind the object using this material will now be affected by a filter.\n\t\t *\n\t\t * ```js\n\t\t * const material = new NodeMaterial()\n\t\t * material.transparent = true;\n\t\t *\n\t\t * // everything behind the object will be monochromatic\n\t\t * material.backdropNode = saturation( viewportSharedTexture().rgb, 0 );\n\t\t * ```\n\t\t *\n\t\t * Backdrop computations are part of the lighting so only lit materials can use this property.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.backdropNode = null;\n\n\t\t/**\n\t\t * This node allows to modulate the influence of `backdropNode` to the outgoing light.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.backdropAlphaNode = null;\n\n\t\t/**\n\t\t * The alpha test of node materials is by default inferred from the `alphaTest`\n\t\t * property. This node property allows to overwrite the default and define the\n\t\t * alpha test with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the alpha test but modify the existing\n\t\t * value instead, use {@link materialAlphaTest}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.alphaTestNode = null;\n\n\n\t\t/**\n\t\t * Discards the fragment if the mask value is `false`.\n\t\t *\n\t\t * @type {?Node<bool>}\n\t\t * @default null\n\t\t */\n\t\tthis.maskNode = null;\n\n\t\t/**\n\t\t * This node can be used to implement a shadow mask for the material.\n\t\t *\n\t\t * @type {?Node<bool>}\n\t\t * @default null\n\t\t */\n\t\tthis.maskShadowNode = null;\n\n\t\t/**\n\t\t * The local vertex positions are computed based on multiple factors like the\n\t\t * attribute data, morphing or skinning. This node property allows to overwrite\n\t\t * the default and define local vertex positions with nodes instead.\n\t\t *\n\t\t * If you don't want to overwrite the vertex positions but modify the existing\n\t\t * values instead, use {@link positionLocal}.\n\t\t *\n\t\t *```js\n\t\t * material.positionNode = positionLocal.add( displace );\n\t\t * ```\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.positionNode = null;\n\n\t\t/**\n\t\t * This node property is intended for logic which modifies geometry data once or per animation step.\n\t\t * Apps usually place such logic randomly in initialization routines or in the animation loop.\n\t\t * `geometryNode` is intended as a dedicated API so there is an intended spot where geometry modifications\n\t\t * can be implemented.\n\t\t *\n\t\t * The idea is to assign a `Fn` definition that holds the geometry modification logic. A typical example\n\t\t * would be a GPU based particle system that provides a node material for usage on app level. The particle\n\t\t * simulation would be implemented as compute shaders and managed inside a `Fn` function. This function is\n\t\t * eventually assigned to `geometryNode`.\n\t\t *\n\t\t * @type {?Function}\n\t\t * @default null\n\t\t */\n\t\tthis.geometryNode = null;\n\n\t\t/**\n\t\t * Allows to overwrite depth values in the fragment shader.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.depthNode = null;\n\n\t\t/**\n\t\t * Allows to overwrite the position used for shadow map rendering which\n\t\t * is by default {@link positionWorld}, the vertex position\n\t\t * in world space.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.receivedShadowPositionNode = null;\n\n\t\t/**\n\t\t * Allows to overwrite the geometry position used for shadow map projection which\n\t\t * is by default {@link positionLocal}, the vertex position in local space.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.castShadowPositionNode = null;\n\n\t\t/**\n\t\t * This node can be used to influence how an object using this node material\n\t\t * receive shadows.\n\t\t *\n\t\t * ```js\n\t\t * const totalShadows = float( 1 ).toVar();\n\t\t * material.receivedShadowNode = Fn( ( [ shadow ] ) => {\n\t\t * \ttotalShadows.mulAssign( shadow );\n\t\t * \t//return float( 1 ); // bypass received shadows\n\t\t * \treturn shadow.mix( color( 0xff0000 ), 1 ); // modify shadow color\n\t\t * } );\n\t\t *\n\t\t * @type {?(Function|FunctionNode<vec4>)}\n\t\t * @default null\n\t\t */\n\t\tthis.receivedShadowNode = null;\n\n\t\t/**\n\t\t * This node can be used to influence how an object using this node material\n\t\t * casts shadows. To apply a color to shadows, you can simply do:\n\t\t *\n\t\t * ```js\n\t\t * material.castShadowNode = vec4( 1, 0, 0, 1 );\n\t\t * ```\n\t\t *\n\t\t * Which can be nice to fake colored shadows of semi-transparent objects. It\n\t\t * is also common to use the property with `Fn` function so checks are performed\n\t\t * per fragment.\n\t\t *\n\t\t * ```js\n\t\t * materialCustomShadow.castShadowNode = Fn( () => {\n\t\t * \thash( vertexIndex ).greaterThan( 0.5 ).discard();\n\t\t * \treturn materialColor;\n\t\t * } )();\n\t\t *  ```\n\t\t *\n\t\t * @type {?Node<vec4>}\n\t\t * @default null\n\t\t */\n\t\tthis.castShadowNode = null;\n\n\t\t/**\n\t\t * This node can be used to define the final output of the material.\n\t\t *\n\t\t * TODO: Explain the differences to `fragmentNode`.\n\t\t *\n\t\t * @type {?Node<vec4>}\n\t\t * @default null\n\t\t */\n\t\tthis.outputNode = null;\n\n\t\t/**\n\t\t * MRT configuration is done on renderer or pass level. This node allows to\n\t\t * overwrite what values are written into MRT targets on material level. This\n\t\t * can be useful for implementing selective FX features that should only affect\n\t\t * specific objects.\n\t\t *\n\t\t * @type {?MRTNode}\n\t\t * @default null\n\t\t */\n\t\tthis.mrtNode = null;\n\n\t\t/**\n\t\t * This node property can be used if you need complete freedom in implementing\n\t\t * the fragment shader. Assigning a node will replace the built-in material\n\t\t * logic used in the fragment stage.\n\t\t *\n\t\t * @type {?Node<vec4>}\n\t\t * @default null\n\t\t */\n\t\tthis.fragmentNode = null;\n\n\t\t/**\n\t\t * This node property can be used if you need complete freedom in implementing\n\t\t * the vertex shader. Assigning a node will replace the built-in material logic\n\t\t * used in the vertex stage.\n\t\t *\n\t\t * @type {?Node<vec4>}\n\t\t * @default null\n\t\t */\n\t\tthis.vertexNode = null;\n\n\t\t/**\n\t\t * This node can be used as a global context management component for this material.\n\t\t *\n\t\t * @type {?ContextNode}\n\t\t * @default null\n\t\t */\n\t\tthis.contextNode = null;\n\n\t}\n\n\t/**\n\t * Returns an array of child nodes for this material.\n\t *\n\t * @private\n\t * @returns {Array<{property: string, childNode: Node}>}\n\t */\n\t_getNodeChildren() {\n\n\t\tconst children = [];\n\n\t\tfor ( const property of Object.getOwnPropertyNames( this ) ) {\n\n\t\t\tif ( property.startsWith( '_' ) === true ) continue;\n\n\t\t\tconst object = this[ property ];\n\n\t\t\tif ( object && object.isNode === true ) {\n\n\t\t\t\tchildren.push( { property, childNode: object } );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn children;\n\n\t}\n\n\t/**\n\t * Allows to define a custom cache key that influence the material key computation\n\t * for render objects.\n\t *\n\t * @return {string} The custom cache key.\n\t */\n\tcustomProgramCacheKey() {\n\n\t\tconst values = [];\n\n\t\tfor ( const { property, childNode } of this._getNodeChildren() ) {\n\n\t\t\tvalues.push( hashString( property.slice( 0, -4 ) ), childNode.getCacheKey() );\n\n\t\t}\n\n\t\treturn this.type + hashArray( values );\n\n\t}\n\n\t/**\n\t * Builds this material with the given node builder.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tbuild( builder ) {\n\n\t\tthis.setup( builder );\n\n\t}\n\n\t/**\n\t * Setups a node material observer with the given builder.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {NodeMaterialObserver} The node material observer.\n\t */\n\tsetupObserver( builder ) {\n\n\t\treturn new NodeMaterialObserver( builder );\n\n\t}\n\n\t/**\n\t * Setups the vertex and fragment stage of this node material.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetup( builder ) {\n\n\t\tbuilder.context.setupNormal = () => subBuild( this.setupNormal( builder ), 'NORMAL', 'vec3' );\n\t\tbuilder.context.setupPositionView = () => this.setupPositionView( builder );\n\t\tbuilder.context.setupModelViewProjection = () => this.setupModelViewProjection( builder );\n\n\t\tconst renderer = builder.renderer;\n\t\tconst renderTarget = renderer.getRenderTarget();\n\n\t\t// < VERTEX STAGE >\n\n\t\tbuilder.addStack();\n\n\t\tconst mvp = this.setupVertex( builder );\n\n\t\tconst vertexNode = subBuild( this.vertexNode || mvp, 'VERTEX' );\n\n\t\tbuilder.context.clipSpace = vertexNode;\n\n\t\tbuilder.stack.outputNode = vertexNode;\n\n\t\tthis.setupHardwareClipping( builder );\n\n\t\tif ( this.geometryNode !== null ) {\n\n\t\t\tbuilder.stack.outputNode = builder.stack.outputNode.bypass( this.geometryNode );\n\n\t\t}\n\n\t\tbuilder.addFlow( 'vertex', builder.removeStack() );\n\n\t\t// < FRAGMENT STAGE >\n\n\t\tbuilder.addStack();\n\n\t\tlet resultNode;\n\n\t\tconst clippingNode = this.setupClipping( builder );\n\n\t\tif ( this.depthWrite === true || this.depthTest === true ) {\n\n\t\t\t// only write depth if depth buffer is configured\n\n\t\t\tif ( renderTarget !== null ) {\n\n\t\t\t\tif ( renderTarget.depthBuffer === true ) this.setupDepth( builder );\n\n\t\t\t} else {\n\n\t\t\t\tif ( renderer.depth === true ) this.setupDepth( builder );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.fragmentNode === null ) {\n\n\t\t\tthis.setupDiffuseColor( builder );\n\t\t\tthis.setupVariants( builder );\n\n\t\t\tconst outgoingLightNode = this.setupLighting( builder );\n\n\t\t\tif ( clippingNode !== null ) builder.stack.addToStack( clippingNode );\n\n\t\t\t// force unsigned floats - useful for RenderTargets\n\n\t\t\tconst basicOutput = vec4( outgoingLightNode, diffuseColor.a ).max( 0 );\n\n\t\t\tresultNode = this.setupOutput( builder, basicOutput );\n\n\t\t\t// OUTPUT NODE\n\n\t\t\toutput.assign( resultNode );\n\n\t\t\t//\n\n\t\t\tconst isCustomOutput = this.outputNode !== null;\n\n\t\t\tif ( isCustomOutput ) resultNode = this.outputNode;\n\n\t\t\t//\n\n\t\t\tif ( builder.context.getOutput ) {\n\n\t\t\t\tresultNode = builder.context.getOutput( resultNode, builder );\n\n\t\t\t}\n\n\t\t\t// MRT\n\n\t\t\tif ( renderTarget !== null ) {\n\n\t\t\t\tconst mrt = renderer.getMRT();\n\t\t\t\tconst materialMRT = this.mrtNode;\n\n\t\t\t\tif ( mrt !== null ) {\n\n\t\t\t\t\tif ( isCustomOutput ) output.assign( resultNode );\n\n\t\t\t\t\tresultNode = mrt;\n\n\t\t\t\t\tif ( materialMRT !== null ) {\n\n\t\t\t\t\t\tresultNode = mrt.merge( materialMRT );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialMRT !== null ) {\n\n\t\t\t\t\tresultNode = materialMRT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tlet fragmentNode = this.fragmentNode;\n\n\t\t\tif ( fragmentNode.isOutputStructNode !== true ) {\n\n\t\t\t\tfragmentNode = vec4( fragmentNode );\n\n\t\t\t}\n\n\t\t\tresultNode = this.setupOutput( builder, fragmentNode );\n\n\t\t}\n\n\t\tbuilder.stack.outputNode = resultNode;\n\n\t\tbuilder.addFlow( 'fragment', builder.removeStack() );\n\n\t\t// < OBSERVER >\n\n\t\tbuilder.observer = this.setupObserver( builder );\n\n\t}\n\n\t/**\n\t * Setups the clipping node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {ClippingNode} The clipping node.\n\t */\n\tsetupClipping( builder ) {\n\n\t\tif ( builder.clippingContext === null ) return null;\n\n\t\tconst { unionPlanes, intersectionPlanes } = builder.clippingContext;\n\n\t\tlet result = null;\n\n\t\tif ( unionPlanes.length > 0 || intersectionPlanes.length > 0 ) {\n\n\t\t\tconst samples = builder.renderer.currentSamples;\n\n\t\t\tif ( this.alphaToCoverage && samples > 1 ) {\n\n\t\t\t\t// to be added to flow when the color/alpha value has been determined\n\t\t\t\tresult = clippingAlpha();\n\n\t\t\t} else {\n\n\t\t\t\tbuilder.stack.addToStack( clipping() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Setups the hardware clipping if available on the current device.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetupHardwareClipping( builder ) {\n\n\t\tthis.hardwareClipping = false;\n\n\t\tif ( builder.clippingContext === null ) return;\n\n\t\tconst candidateCount = builder.clippingContext.unionPlanes.length;\n\n\t\t// 8 planes supported by WebGL ANGLE_clip_cull_distance and WebGPU clip-distances\n\n\t\tif ( candidateCount > 0 && candidateCount <= 8 && builder.isAvailable( 'clipDistance' ) ) {\n\n\t\t\tbuilder.stack.addToStack( hardwareClipping() );\n\n\t\t\tthis.hardwareClipping = true;\n\n\t\t}\n\n\t\treturn;\n\n\t}\n\n\t/**\n\t * Setups the depth of this material.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetupDepth( builder ) {\n\n\t\tconst { renderer, camera } = builder;\n\n\t\t// Depth\n\n\t\tlet depthNode = this.depthNode;\n\n\t\tif ( depthNode === null ) {\n\n\t\t\tconst mrt = renderer.getMRT();\n\n\t\t\tif ( mrt && mrt.has( 'depth' ) ) {\n\n\t\t\t\tdepthNode = mrt.get( 'depth' );\n\n\t\t\t} else if ( renderer.logarithmicDepthBuffer === true ) {\n\n\t\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\t\tdepthNode = viewZToLogarithmicDepth( positionView.z, cameraNear, cameraFar );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdepthNode = viewZToOrthographicDepth( positionView.z, cameraNear, cameraFar );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( depthNode !== null ) {\n\n\t\t\tdepth.assign( depthNode ).toStack();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Setups the position node in view space. This method exists\n\t * so derived node materials can modify the implementation e.g. sprite materials.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec3>} The position in view space.\n\t */\n\tsetupPositionView( /*builder*/ ) {\n\n\t\treturn modelViewMatrix.mul( positionLocal ).xyz;\n\n\t}\n\n\t/**\n\t * Setups the position in clip space.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec4>} The position in view space.\n\t */\n\tsetupModelViewProjection( /*builder*/ ) {\n\n\t\treturn cameraProjectionMatrix.mul( positionView );\n\n\t}\n\n\t/**\n\t * Setups the logic for the vertex stage.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec4>} The position in clip space.\n\t */\n\tsetupVertex( builder ) {\n\n\t\tbuilder.addStack();\n\n\t\tthis.setupPosition( builder );\n\n\t\tbuilder.context.position = builder.removeStack();\n\n\t\treturn modelViewProjection;\n\n\t}\n\n\t/**\n\t * Setups the computation of the position in local space.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec3>} The position in local space.\n\t */\n\tsetupPosition( builder ) {\n\n\t\tconst { object, geometry } = builder;\n\n\t\tif ( geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color ) {\n\n\t\t\tmorphReference( object ).toStack();\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh === true ) {\n\n\t\t\tskinning( object ).toStack();\n\n\t\t}\n\n\t\tif ( this.displacementMap ) {\n\n\t\t\tconst displacementMap = materialReference( 'displacementMap', 'texture' );\n\t\t\tconst displacementScale = materialReference( 'displacementScale', 'float' );\n\t\t\tconst displacementBias = materialReference( 'displacementBias', 'float' );\n\n\t\t\tpositionLocal.addAssign( normalLocal.normalize().mul( ( displacementMap.x.mul( displacementScale ).add( displacementBias ) ) ) );\n\n\t\t}\n\n\t\tif ( object.isBatchedMesh ) {\n\n\t\t\tbatch( object ).toStack();\n\n\t\t}\n\n\t\tif ( ( object.isInstancedMesh && object.instanceMatrix && object.instanceMatrix.isInstancedBufferAttribute === true ) ) {\n\n\t\t\tinstancedMesh( object ).toStack();\n\n\t\t}\n\n\t\tif ( this.positionNode !== null ) {\n\n\t\t\tpositionLocal.assign( subBuild( this.positionNode, 'POSITION', 'vec3' ) );\n\n\t\t}\n\n\t\treturn positionLocal;\n\n\t}\n\n\t/**\n\t * Setups the computation of the material's diffuse color.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {BufferGeometry} geometry - The geometry.\n\t */\n\tsetupDiffuseColor( builder ) {\n\n\t\tconst { object, geometry } = builder;\n\n\t\t// MASK\n\n\t\tif ( this.maskNode !== null ) {\n\n\t\t\t// Discard if the mask is `false`\n\n\t\t\tbool( this.maskNode ).not().discard();\n\n\t\t}\n\n\t\t// COLOR\n\n\t\tlet colorNode = this.colorNode ? vec4( this.colorNode ) : materialColor;\n\n\t\t// VERTEX COLORS\n\n\t\tif ( this.vertexColors === true && geometry.hasAttribute( 'color' ) ) {\n\n\t\t\tcolorNode = colorNode.mul( vertexColor() );\n\n\t\t}\n\n\t\t// INSTANCED COLORS\n\n\t\tif ( object.instanceColor ) {\n\n\t\t\tconst instanceColor = varyingProperty( 'vec3', 'vInstanceColor' );\n\n\t\t\tcolorNode = instanceColor.mul( colorNode );\n\n\t\t}\n\n\t\tif ( object.isBatchedMesh && object._colorsTexture ) {\n\n\t\t\tconst batchColor = varyingProperty( 'vec3', 'vBatchColor' );\n\n\t\t\tcolorNode = batchColor.mul( colorNode );\n\n\t\t}\n\n\t\t// DIFFUSE COLOR\n\n\t\tdiffuseColor.assign( colorNode );\n\n\t\t// OPACITY\n\n\t\tconst opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;\n\t\tdiffuseColor.a.assign( diffuseColor.a.mul( opacityNode ) );\n\n\t\t// ALPHA TEST\n\n\t\tlet alphaTestNode = null;\n\n\t\tif ( this.alphaTestNode !== null || this.alphaTest > 0 ) {\n\n\t\t\talphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;\n\n\t\t\tif ( this.alphaToCoverage === true ) {\n\n\t\t\t\tdiffuseColor.a = smoothstep( alphaTestNode, alphaTestNode.add( fwidth( diffuseColor.a ) ), diffuseColor.a );\n\t\t\t\tdiffuseColor.a.lessThanEqual( 0 ).discard();\n\n\t\t\t} else {\n\n\t\t\t\tdiffuseColor.a.lessThanEqual( alphaTestNode ).discard();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ALPHA HASH\n\n\t\tif ( this.alphaHash === true ) {\n\n\t\t\tdiffuseColor.a.lessThan( getAlphaHashThreshold( positionLocal ) ).discard();\n\n\t\t}\n\n\t\t// OPAQUE\n\n\t\tif ( builder.isOpaque() ) {\n\n\t\t\tdiffuseColor.a.assign( 1.0 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Abstract interface method that can be implemented by derived materials\n\t * to setup material-specific node variables.\n\t *\n\t * @abstract\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetupVariants( /*builder*/ ) {\n\n\t\t// Interface function.\n\n\t}\n\n\t/**\n\t * Setups the outgoing light node variable\n\t *\n\t * @return {Node<vec3>} The outgoing light node.\n\t */\n\tsetupOutgoingLight() {\n\n\t\treturn ( this.lights === true ) ? vec3( 0 ) : diffuseColor.rgb;\n\n\t}\n\n\t/**\n\t * Setups the normal node from the material.\n\t *\n\t * @return {Node<vec3>} The normal node.\n\t */\n\tsetupNormal() {\n\n\t\treturn this.normalNode ? vec3( this.normalNode ) : materialNormal;\n\n\t}\n\n\t/**\n\t * Setups the environment node from the material.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec4>} The environment node.\n\t */\n\tsetupEnvironment( /*builder*/ ) {\n\n\t\tlet node = null;\n\n\t\tif ( this.envNode ) {\n\n\t\t\tnode = this.envNode;\n\n\t\t} else if ( this.envMap ) {\n\n\t\t\tnode = this.envMap.isCubeTexture ? materialReference( 'envMap', 'cubeTexture' ) : materialReference( 'envMap', 'texture' );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n\t/**\n\t * Setups the light map node from the material.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec3>} The light map node.\n\t */\n\tsetupLightMap( builder ) {\n\n\t\tlet node = null;\n\n\t\tif ( builder.material.lightMap ) {\n\n\t\t\tnode = new IrradianceNode( materialLightMap );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n\t/**\n\t * Setups the lights node based on the scene, environment and material.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {LightsNode} The lights node.\n\t */\n\tsetupLights( builder ) {\n\n\t\tconst materialLightsNode = [];\n\n\t\t//\n\n\t\tconst envNode = this.setupEnvironment( builder );\n\n\t\tif ( envNode && envNode.isLightingNode ) {\n\n\t\t\tmaterialLightsNode.push( envNode );\n\n\t\t}\n\n\t\tconst lightMapNode = this.setupLightMap( builder );\n\n\t\tif ( lightMapNode && lightMapNode.isLightingNode ) {\n\n\t\t\tmaterialLightsNode.push( lightMapNode );\n\n\t\t}\n\n\t\tlet aoNode = this.aoNode;\n\n\t\tif ( aoNode === null && builder.material.aoMap ) {\n\n\t\t\taoNode = materialAO;\n\n\t\t}\n\n\t\tif ( builder.context.getAO ) {\n\n\t\t\taoNode = builder.context.getAO( aoNode, builder );\n\n\t\t}\n\n\t\tif ( aoNode ) {\n\n\t\t\tmaterialLightsNode.push( new AONode( aoNode ) );\n\n\t\t}\n\n\t\tlet lightsN = this.lightsNode || builder.lightsNode;\n\n\t\tif ( materialLightsNode.length > 0 ) {\n\n\t\t\tlightsN = builder.renderer.lighting.createNode( [ ...lightsN.getLights(), ...materialLightsNode ] );\n\n\t\t}\n\n\t\treturn lightsN;\n\n\t}\n\n\t/**\n\t * This method should be implemented by most derived materials\n\t * since it defines the material's lighting model.\n\t *\n\t * @abstract\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {LightingModel} The lighting model.\n\t */\n\tsetupLightingModel( /*builder*/ ) {\n\n\t\t// Interface function.\n\n\t}\n\n\t/**\n\t * Setups the outgoing light node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec3>} The outgoing light node.\n\t */\n\tsetupLighting( builder ) {\n\n\t\tconst { material } = builder;\n\t\tconst { backdropNode, backdropAlphaNode, emissiveNode } = this;\n\n\t\t// OUTGOING LIGHT\n\n\t\tconst lights = this.lights === true || this.lightsNode !== null;\n\n\t\tconst lightsNode = lights ? this.setupLights( builder ) : null;\n\n\t\tlet outgoingLightNode = this.setupOutgoingLight( builder );\n\n\t\tif ( lightsNode && lightsNode.getScope().hasLights ) {\n\n\t\t\tconst lightingModel = this.setupLightingModel( builder ) || null;\n\n\t\t\toutgoingLightNode = lightingContext( lightsNode, lightingModel, backdropNode, backdropAlphaNode );\n\n\t\t} else if ( backdropNode !== null ) {\n\n\t\t\toutgoingLightNode = vec3( backdropAlphaNode !== null ? mix( outgoingLightNode, backdropNode, backdropAlphaNode ) : backdropNode );\n\n\t\t}\n\n\t\t// EMISSIVE\n\n\t\tif ( ( emissiveNode && emissiveNode.isNode === true ) || ( material.emissive && material.emissive.isColor === true ) ) {\n\n\t\t\temissive.assign( vec3( emissiveNode ? emissiveNode : materialEmissive ) );\n\n\t\t\toutgoingLightNode = outgoingLightNode.add( emissive );\n\n\t\t}\n\n\t\treturn outgoingLightNode;\n\n\t}\n\n\t/**\n\t * Setup the fog.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node<vec4>} outputNode - The existing output node.\n\t * @return {Node<vec4>} The output node.\n\t */\n\tsetupFog( builder, outputNode ) {\n\n\t\tconst fogNode = builder.fogNode;\n\n\t\tif ( fogNode ) {\n\n\t\t\toutput.assign( outputNode );\n\n\t\t\toutputNode = vec4( fogNode.toVar() );\n\n\t\t}\n\n\t\treturn outputNode;\n\n\t}\n\n\t/**\n\t * Setups premultiplied alpha.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node<vec4>} outputNode - The existing output node.\n\t * @return {Node<vec4>} The output node.\n\t */\n\tsetupPremultipliedAlpha( builder, outputNode ) {\n\n\t\treturn premultiplyAlpha( outputNode );\n\n\t}\n\n\t/**\n\t * Setups the output node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node<vec4>} outputNode - The existing output node.\n\t * @return {Node<vec4>} The output node.\n\t */\n\tsetupOutput( builder, outputNode ) {\n\n\t\t// FOG\n\n\t\tif ( this.fog === true ) {\n\n\t\t\toutputNode = this.setupFog( builder, outputNode );\n\n\t\t}\n\n\t\t// PREMULTIPLIED ALPHA\n\n\t\tif ( this.premultipliedAlpha === true ) {\n\n\t\t\toutputNode = this.setupPremultipliedAlpha( builder, outputNode );\n\n\t\t}\n\n\t\treturn outputNode;\n\n\t}\n\n\t/**\n\t * Most classic material types have a node pendant e.g. for `MeshBasicMaterial`\n\t * there is `MeshBasicNodeMaterial`. This utility method is intended for\n\t * defining all material properties of the classic type in the node type.\n\t *\n\t * @param {Material} material - The material to copy properties with their values to this node material.\n\t */\n\tsetDefaultValues( material ) {\n\n\t\t// This approach is to reuse the native refreshUniforms*\n\t\t// and turn available the use of features like transmission and environment in core\n\n\t\tfor ( const property in material ) {\n\n\t\t\tconst value = material[ property ];\n\n\t\t\tif ( this[ property ] === undefined ) {\n\n\t\t\t\tthis[ property ] = value;\n\n\t\t\t\tif ( value && value.clone ) this[ property ] = value.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst descriptors = Object.getOwnPropertyDescriptors( material.constructor.prototype );\n\n\t\tfor ( const key in descriptors ) {\n\n\t\t\tif ( Object.getOwnPropertyDescriptor( this.constructor.prototype, key ) === undefined &&\n\t\t\t     descriptors[ key ].get !== undefined ) {\n\n\t\t\t\tObject.defineProperty( this.constructor.prototype, key, descriptors[ key ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Serializes this material to JSON.\n\t *\n\t * @param {?(Object|string)} meta - The meta information for serialization.\n\t * @return {Object} The serialized node.\n\t */\n\ttoJSON( meta ) {\n\n\t\tconst isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = Material.prototype.toJSON.call( this, meta );\n\t\tdata.inputNodes = {};\n\n\t\tfor ( const { property, childNode } of this._getNodeChildren() ) {\n\n\t\t\tdata.inputNodes[ property ] = childNode.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\t\t\tif ( nodes.length > 0 ) data.nodes = nodes;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Copies the properties of the given node material to this instance.\n\t *\n\t * @param {NodeMaterial} source - The material to copy.\n\t * @return {NodeMaterial} A reference to this node material.\n\t */\n\tcopy( source ) {\n\n\t\tthis.lightsNode = source.lightsNode;\n\t\tthis.envNode = source.envNode;\n\t\tthis.aoNode = source.aoNode;\n\n\t\tthis.colorNode = source.colorNode;\n\t\tthis.normalNode = source.normalNode;\n\t\tthis.opacityNode = source.opacityNode;\n\t\tthis.backdropNode = source.backdropNode;\n\t\tthis.backdropAlphaNode = source.backdropAlphaNode;\n\t\tthis.alphaTestNode = source.alphaTestNode;\n\t\tthis.maskNode = source.maskNode;\n\t\tthis.maskShadowNode = source.maskShadowNode;\n\n\t\tthis.positionNode = source.positionNode;\n\t\tthis.geometryNode = source.geometryNode;\n\n\t\tthis.depthNode = source.depthNode;\n\t\tthis.receivedShadowPositionNode = source.receivedShadowPositionNode;\n\t\tthis.castShadowPositionNode = source.castShadowPositionNode;\n\t\tthis.receivedShadowNode = source.receivedShadowNode;\n\t\tthis.castShadowNode = source.castShadowNode;\n\n\t\tthis.outputNode = source.outputNode;\n\t\tthis.mrtNode = source.mrtNode;\n\n\t\tthis.fragmentNode = source.fragmentNode;\n\t\tthis.vertexNode = source.vertexNode;\n\n\t\tthis.contextNode = source.contextNode;\n\n\t\treturn super.copy( source );\n\n\t}\n\n}\n\nconst _defaultValues$d = /*@__PURE__*/ new LineBasicMaterial();\n\n/**\n * Node material version of {@link LineBasicMaterial}.\n *\n * @augments NodeMaterial\n */\nclass LineBasicNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'LineBasicNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new line basic node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineBasicNodeMaterial = true;\n\n\t\tthis.setDefaultValues( _defaultValues$d );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nconst _defaultValues$c = /*@__PURE__*/ new LineDashedMaterial();\n\n/**\n * Node material version of  {@link LineDashedMaterial}.\n *\n * @augments NodeMaterial\n */\nclass LineDashedNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'LineDashedNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new line dashed node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineDashedNodeMaterial = true;\n\n\t\tthis.setDefaultValues( _defaultValues$c );\n\n\t\t/**\n\t\t * The dash offset.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.dashOffset = 0;\n\n\t\t/**\n\t\t * The offset of dash materials is by default inferred from the `dashOffset`\n\t\t * property. This node property allows to overwrite the default\n\t\t * and define the offset with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the offset but modify the existing\n\t\t * value instead, use {@link materialLineDashOffset}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.offsetNode = null;\n\n\t\t/**\n\t\t * The scale of dash materials is by default inferred from the `scale`\n\t\t * property. This node property allows to overwrite the default\n\t\t * and define the scale with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the scale but modify the existing\n\t\t * value instead, use {@link materialLineScale}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.dashScaleNode = null;\n\n\t\t/**\n\t\t * The dash size of dash materials is by default inferred from the `dashSize`\n\t\t * property. This node property allows to overwrite the default\n\t\t * and define the dash size with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the dash size but modify the existing\n\t\t * value instead, use {@link materialLineDashSize}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.dashSizeNode = null;\n\n\t\t/**\n\t\t * The gap size of dash materials is by default inferred from the `gapSize`\n\t\t * property. This node property allows to overwrite the default\n\t\t * and define the gap size with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the gap size but modify the existing\n\t\t * value instead, use {@link materialLineGapSize}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.gapSizeNode = null;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Setups the dash specific node variables.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetupVariants( /* builder */ ) {\n\n\t\tconst offsetNode = this.offsetNode ? float( this.offsetNode ) : materialLineDashOffset;\n\t\tconst dashScaleNode = this.dashScaleNode ? float( this.dashScaleNode ) : materialLineScale;\n\t\tconst dashSizeNode = this.dashSizeNode ? float( this.dashSizeNode ) : materialLineDashSize;\n\t\tconst gapSizeNode = this.gapSizeNode ? float( this.gapSizeNode ) : materialLineGapSize;\n\n\t\tdashSize.assign( dashSizeNode );\n\t\tgapSize.assign( gapSizeNode );\n\n\t\tconst vLineDistance = varying( attribute( 'lineDistance' ).mul( dashScaleNode ) );\n\t\tconst vLineDistanceOffset = offsetNode ? vLineDistance.add( offsetNode ) : vLineDistance;\n\n\t\tvLineDistanceOffset.mod( dashSize.add( gapSize ) ).greaterThan( dashSize ).discard();\n\n\t}\n\n}\n\nconst _defaultValues$b = /*@__PURE__*/ new LineDashedMaterial();\n\n/**\n * This node material can be used to render lines with a size larger than one\n * by representing them as instanced meshes.\n *\n * @augments NodeMaterial\n */\nclass Line2NodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'Line2NodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new node material for wide line rendering.\n\t *\n\t * @param {Object} [parameters={}] - The configuration parameter.\n\t */\n\tconstructor( parameters = {} ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLine2NodeMaterial = true;\n\n\t\tthis.setDefaultValues( _defaultValues$b );\n\n\t\t/**\n\t\t * Whether vertex colors should be used or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.vertexColors = parameters.vertexColors;\n\n\t\t/**\n\t\t * The dash offset.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.dashOffset = 0;\n\n\t\t/**\n\t\t * Defines the lines color.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.lineColorNode = null;\n\n\t\t/**\n\t\t * Defines the offset.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.offsetNode = null;\n\n\t\t/**\n\t\t * Defines the dash scale.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.dashScaleNode = null;\n\n\t\t/**\n\t\t * Defines the dash size.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.dashSizeNode = null;\n\n\t\t/**\n\t\t * Defines the gap size.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.gapSizeNode = null;\n\n\t\t/**\n\t\t * Blending is set to `NoBlending` since transparency\n\t\t * is not supported, yet.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.blending = NoBlending;\n\n\t\tthis._useDash = parameters.dashed;\n\t\tthis._useAlphaToCoverage = true;\n\t\tthis._useWorldUnits = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Setups the vertex and fragment stage of this node material.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetup( builder ) {\n\n\t\tconst { renderer } = builder;\n\n\t\tconst useAlphaToCoverage = this._useAlphaToCoverage;\n\t\tconst vertexColors = this.vertexColors;\n\t\tconst useDash = this._useDash;\n\t\tconst useWorldUnits = this._useWorldUnits;\n\n\t\tconst trimSegment = Fn( ( { start, end } ) => {\n\n\t\t\tconst a = cameraProjectionMatrix.element( 2 ).element( 2 ); // 3nd entry in 3th column\n\t\t\tconst b = cameraProjectionMatrix.element( 3 ).element( 2 ); // 3nd entry in 4th column\n\t\t\tconst nearEstimate = b.mul( -0.5 ).div( a );\n\n\t\t\tconst alpha = nearEstimate.sub( start.z ).div( end.z.sub( start.z ) );\n\n\t\t\treturn vec4( mix( start.xyz, end.xyz, alpha ), end.w );\n\n\t\t} ).setLayout( {\n\t\t\tname: 'trimSegment',\n\t\t\ttype: 'vec4',\n\t\t\tinputs: [\n\t\t\t\t{ name: 'start', type: 'vec4' },\n\t\t\t\t{ name: 'end', type: 'vec4' }\n\t\t\t]\n\t\t} );\n\n\t\tthis.vertexNode = Fn( () => {\n\n\t\t\tconst instanceStart = attribute( 'instanceStart' );\n\t\t\tconst instanceEnd = attribute( 'instanceEnd' );\n\n\t\t\t// camera space\n\n\t\t\tconst start = vec4( modelViewMatrix.mul( vec4( instanceStart, 1.0 ) ) ).toVar( 'start' );\n\t\t\tconst end = vec4( modelViewMatrix.mul( vec4( instanceEnd, 1.0 ) ) ).toVar( 'end' );\n\n\t\t\tif ( useDash ) {\n\n\t\t\t\tconst dashScaleNode = this.dashScaleNode ? float( this.dashScaleNode ) : materialLineScale;\n\t\t\t\tconst offsetNode = this.offsetNode ? float( this.offsetNode ) : materialLineDashOffset;\n\n\t\t\t\tconst instanceDistanceStart = attribute( 'instanceDistanceStart' );\n\t\t\t\tconst instanceDistanceEnd = attribute( 'instanceDistanceEnd' );\n\n\t\t\t\tlet lineDistance = positionGeometry.y.lessThan( 0.5 ).select( dashScaleNode.mul( instanceDistanceStart ), dashScaleNode.mul( instanceDistanceEnd ) );\n\t\t\t\tlineDistance = lineDistance.add( offsetNode );\n\n\t\t\t\tvaryingProperty( 'float', 'lineDistance' ).assign( lineDistance );\n\n\t\t\t}\n\n\t\t\tif ( useWorldUnits ) {\n\n\t\t\t\tvaryingProperty( 'vec3', 'worldStart' ).assign( start.xyz );\n\t\t\t\tvaryingProperty( 'vec3', 'worldEnd' ).assign( end.xyz );\n\n\t\t\t}\n\n\t\t\tconst aspect = viewport.z.div( viewport.w );\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tconst perspective = cameraProjectionMatrix.element( 2 ).element( 3 ).equal( -1 ); // 4th entry in the 3rd column\n\n\t\t\tIf( perspective, () => {\n\n\t\t\t\tIf( start.z.lessThan( 0.0 ).and( end.z.greaterThan( 0.0 ) ), () => {\n\n\t\t\t\t\tend.assign( trimSegment( { start: start, end: end } ) );\n\n\t\t\t\t} ).ElseIf( end.z.lessThan( 0.0 ).and( start.z.greaterThanEqual( 0.0 ) ), () => {\n\n\t\t\t\t\tstart.assign( trimSegment( { start: end, end: start } ) );\n\n\t\t\t \t} );\n\n\t\t\t} );\n\n\t\t\t// clip space\n\t\t\tconst clipStart = cameraProjectionMatrix.mul( start );\n\t\t\tconst clipEnd = cameraProjectionMatrix.mul( end );\n\n\t\t\t// ndc space\n\t\t\tconst ndcStart = clipStart.xyz.div( clipStart.w );\n\t\t\tconst ndcEnd = clipEnd.xyz.div( clipEnd.w );\n\n\t\t\t// direction\n\t\t\tconst dir = ndcEnd.xy.sub( ndcStart.xy ).toVar();\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x.assign( dir.x.mul( aspect ) );\n\t\t\tdir.assign( dir.normalize() );\n\n\t\t\tconst clip = vec4().toVar();\n\n\t\t\tif ( useWorldUnits ) {\n\n\t\t\t\t// get the offset direction as perpendicular to the view vector\n\n\t\t\t\tconst worldDir = end.xyz.sub( start.xyz ).normalize();\n\t\t\t\tconst tmpFwd = mix( start.xyz, end.xyz, 0.5 ).normalize();\n\t\t\t\tconst worldUp = worldDir.cross( tmpFwd ).normalize();\n\t\t\t\tconst worldFwd = worldDir.cross( worldUp );\n\n\t\t\t\tconst worldPos = varyingProperty( 'vec4', 'worldPos' );\n\n\t\t\t\tworldPos.assign( positionGeometry.y.lessThan( 0.5 ).select( start, end ) );\n\n\t\t\t\t// height offset\n\t\t\t\tconst hw = materialLineWidth.mul( 0.5 );\n\t\t\t\tworldPos.addAssign( vec4( positionGeometry.x.lessThan( 0.0 ).select( worldUp.mul( hw ), worldUp.mul( hw ).negate() ), 0 ) );\n\n\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t// won't be rendering the endcaps\n\t\t\t\tif ( ! useDash ) {\n\n\t\t\t\t\t// cap extension\n\t\t\t\t\tworldPos.addAssign( vec4( positionGeometry.y.lessThan( 0.5 ).select( worldDir.mul( hw ).negate(), worldDir.mul( hw ) ), 0 ) );\n\n\t\t\t\t\t// add width to the box\n\t\t\t\t\tworldPos.addAssign( vec4( worldFwd.mul( hw ), 0 ) );\n\n\t\t\t\t\t// endcaps\n\t\t\t\t\tIf( positionGeometry.y.greaterThan( 1.0 ).or( positionGeometry.y.lessThan( 0.0 ) ), () => {\n\n\t\t\t\t\t\tworldPos.subAssign( vec4( worldFwd.mul( 2.0 ).mul( hw ), 0 ) );\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t// project the worldpos\n\t\t\t\tclip.assign( cameraProjectionMatrix.mul( worldPos ) );\n\n\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t// segments overlap neatly\n\t\t\t\tconst clipPose = vec3().toVar();\n\n\t\t\t\tclipPose.assign( positionGeometry.y.lessThan( 0.5 ).select( ndcStart, ndcEnd ) );\n\t\t\t\tclip.z.assign( clipPose.z.mul( clip.w ) );\n\n\t\t\t} else {\n\n\t\t\t\tconst offset = vec2( dir.y, dir.x.negate() ).toVar( 'offset' );\n\n\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\tdir.x.assign( dir.x.div( aspect ) );\n\t\t\t\toffset.x.assign( offset.x.div( aspect ) );\n\n\t\t\t\t// sign flip\n\t\t\t\toffset.assign( positionGeometry.x.lessThan( 0.0 ).select( offset.negate(), offset ) );\n\n\t\t\t\t// endcaps\n\t\t\t\tIf( positionGeometry.y.lessThan( 0.0 ), () => {\n\n\t\t\t\t\toffset.assign( offset.sub( dir ) );\n\n\t\t\t\t} ).ElseIf( positionGeometry.y.greaterThan( 1.0 ), () => {\n\n\t\t\t\t\toffset.assign( offset.add( dir ) );\n\n\t\t\t\t} );\n\n\t\t\t\t// adjust for linewidth\n\t\t\t\toffset.assign( offset.mul( materialLineWidth ) );\n\n\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\toffset.assign( offset.div( viewport.w.div( screenDPR ) ) );\n\n\t\t\t\t// select end\n\t\t\t\tclip.assign( positionGeometry.y.lessThan( 0.5 ).select( clipStart, clipEnd ) );\n\n\t\t\t\t// back to clip space\n\t\t\t\toffset.assign( offset.mul( clip.w ) );\n\n\t\t\t\tclip.assign( clip.add( vec4( offset, 0, 0 ) ) );\n\n\t\t\t}\n\n\t\t\treturn clip;\n\n\t\t} )();\n\n\t\tconst closestLineToLine = Fn( ( { p1, p2, p3, p4 } ) => {\n\n\t\t\tconst p13 = p1.sub( p3 );\n\t\t\tconst p43 = p4.sub( p3 );\n\n\t\t\tconst p21 = p2.sub( p1 );\n\n\t\t\tconst d1343 = p13.dot( p43 );\n\t\t\tconst d4321 = p43.dot( p21 );\n\t\t\tconst d1321 = p13.dot( p21 );\n\t\t\tconst d4343 = p43.dot( p43 );\n\t\t\tconst d2121 = p21.dot( p21 );\n\n\t\t\tconst denom = d2121.mul( d4343 ).sub( d4321.mul( d4321 ) );\n\t\t\tconst numer = d1343.mul( d4321 ).sub( d1321.mul( d4343 ) );\n\n\t\t\tconst mua = numer.div( denom ).clamp();\n\t\t\tconst mub = d1343.add( d4321.mul( mua ) ).div( d4343 ).clamp();\n\n\t\t\treturn vec2( mua, mub );\n\n\t\t} );\n\n\t\tthis.colorNode = Fn( () => {\n\n\t\t\tconst vUv = uv$1();\n\n\t\t\tif ( useDash ) {\n\n\t\t\t\tconst dashSizeNode = this.dashSizeNode ? float( this.dashSizeNode ) : materialLineDashSize;\n\t\t\t\tconst gapSizeNode = this.gapSizeNode ? float( this.gapSizeNode ) : materialLineGapSize;\n\n\t\t\t\tdashSize.assign( dashSizeNode );\n\t\t\t\tgapSize.assign( gapSizeNode );\n\n\t\t\t\tconst vLineDistance = varyingProperty( 'float', 'lineDistance' );\n\n\t\t\t\tvUv.y.lessThan( -1 ).or( vUv.y.greaterThan( 1.0 ) ).discard(); // discard endcaps\n\t\t\t\tvLineDistance.mod( dashSize.add( gapSize ) ).greaterThan( dashSize ).discard(); // todo - FIX\n\n\t\t\t}\n\n\t\t\tconst alpha = float( 1 ).toVar( 'alpha' );\n\n\t\t\tif ( useWorldUnits ) {\n\n\t\t\t\tconst worldStart = varyingProperty( 'vec3', 'worldStart' );\n\t\t\t\tconst worldEnd = varyingProperty( 'vec3', 'worldEnd' );\n\n\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\tconst rayEnd = varyingProperty( 'vec4', 'worldPos' ).xyz.normalize().mul( 1e5 );\n\t\t\t\tconst lineDir = worldEnd.sub( worldStart );\n\t\t\t\tconst params = closestLineToLine( { p1: worldStart, p2: worldEnd, p3: vec3( 0.0, 0.0, 0.0 ), p4: rayEnd } );\n\n\t\t\t\tconst p1 = worldStart.add( lineDir.mul( params.x ) );\n\t\t\t\tconst p2 = rayEnd.mul( params.y );\n\t\t\t\tconst delta = p1.sub( p2 );\n\t\t\t\tconst len = delta.length();\n\t\t\t\tconst norm = len.div( materialLineWidth );\n\n\t\t\t\tif ( ! useDash ) {\n\n\t\t\t\t\tif ( useAlphaToCoverage && renderer.currentSamples > 0 ) {\n\n\t\t\t\t\t\tconst dnorm = norm.fwidth();\n\t\t\t\t\t\talpha.assign( smoothstep( dnorm.negate().add( 0.5 ), dnorm.add( 0.5 ), norm ).oneMinus() );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnorm.greaterThan( 0.5 ).discard();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// round endcaps\n\n\t\t\t\tif ( useAlphaToCoverage && renderer.currentSamples > 0 ) {\n\n\t\t\t\t\tconst a = vUv.x;\n\t\t\t\t\tconst b = vUv.y.greaterThan( 0.0 ).select( vUv.y.sub( 1.0 ), vUv.y.add( 1.0 ) );\n\n\t\t\t\t\tconst len2 = a.mul( a ).add( b.mul( b ) );\n\n\t\t\t\t\tconst dlen = float( len2.fwidth() ).toVar( 'dlen' );\n\n\t\t\t\t\tIf( vUv.y.abs().greaterThan( 1.0 ), () => {\n\n\t\t\t\t\t\talpha.assign( smoothstep( dlen.oneMinus(), dlen.add( 1 ), len2 ).oneMinus() );\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tIf( vUv.y.abs().greaterThan( 1.0 ), () => {\n\n\t\t\t\t\t\tconst a = vUv.x;\n\t\t\t\t\t\tconst b = vUv.y.greaterThan( 0.0 ).select( vUv.y.sub( 1.0 ), vUv.y.add( 1.0 ) );\n\t\t\t\t\t\tconst len2 = a.mul( a ).add( b.mul( b ) );\n\n\t\t\t\t\t\tlen2.greaterThan( 1.0 ).discard();\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet lineColorNode;\n\n\t\t\tif ( this.lineColorNode ) {\n\n\t\t\t\tlineColorNode = this.lineColorNode;\n\n\t\t\t} else {\n\n\t\t\t\tif ( vertexColors ) {\n\n\t\t\t\t\tconst instanceColorStart = attribute( 'instanceColorStart' );\n\t\t\t\t\tconst instanceColorEnd = attribute( 'instanceColorEnd' );\n\n\t\t\t\t\tconst instanceColor = positionGeometry.y.lessThan( 0.5 ).select( instanceColorStart, instanceColorEnd );\n\n\t\t\t\t\tlineColorNode = instanceColor.mul( materialColor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlineColorNode = materialColor;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn vec4( lineColorNode, alpha );\n\n\t\t} )();\n\n\t\tif ( this.transparent ) {\n\n\t\t\tconst opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;\n\n\t\t\tthis.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add( viewportOpaqueMipTexture().rgb.mul( opacityNode.oneMinus() ) ), this.colorNode.a );\n\n\t\t}\n\n\t\tsuper.setup( builder );\n\n\t}\n\n\t/**\n\t * Whether the lines should sized in world units or not.\n\t * When set to `false` the unit is pixel.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t */\n\tget worldUnits() {\n\n\t\treturn this._useWorldUnits;\n\n\t}\n\n\tset worldUnits( value ) {\n\n\t\tif ( this._useWorldUnits !== value ) {\n\n\t\t\tthis._useWorldUnits = value;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Whether the lines should be dashed or not.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t */\n\tget dashed() {\n\n\t\treturn this._useDash;\n\n\t}\n\n\tset dashed( value ) {\n\n\t\tif ( this._useDash !== value ) {\n\n\t\t\tthis._useDash = value;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Whether alpha to coverage should be used or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget alphaToCoverage() {\n\n\t\treturn this._useAlphaToCoverage;\n\n\t}\n\n\tset alphaToCoverage( value ) {\n\n\t\tif ( this._useAlphaToCoverage !== value ) {\n\n\t\t\tthis._useAlphaToCoverage = value;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Copies the properties of the given material to this instance.\n\t *\n\t * @param {Line2NodeMaterial} source - The material to copy.\n\t * @return {Line2NodeMaterial} A reference to this material.\n\t */\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.vertexColors = source.vertexColors;\n\t\tthis.dashOffset = source.dashOffset;\n\n\t\tthis.lineColorNode = source.lineColorNode;\n\t\tthis.offsetNode = source.offsetNode;\n\t\tthis.dashScaleNode = source.dashScaleNode;\n\t\tthis.dashSizeNode = source.dashSizeNode;\n\t\tthis.gapSizeNode = source.gapSizeNode;\n\n\t\tthis._useDash = source._useDash;\n\t\tthis._useAlphaToCoverage = source._useAlphaToCoverage;\n\t\tthis._useWorldUnits = source._useWorldUnits;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _defaultValues$a = /*@__PURE__*/ new MeshNormalMaterial();\n\n/**\n * Node material version of {@link MeshNormalMaterial}.\n *\n * @augments NodeMaterial\n */\nclass MeshNormalNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshNormalNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new mesh normal node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshNormalNodeMaterial = true;\n\n\t\tthis.setDefaultValues( _defaultValues$a );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation by computing the diffuse color\n\t * based on the normal data.\n\t */\n\tsetupDiffuseColor() {\n\n\t\tconst opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;\n\n\t\t// By convention, a normal packed to RGB is in sRGB color space. Convert it to working color space.\n\n\t\tdiffuseColor.assign( colorSpaceToWorking( vec4( directionToColor( normalView ), opacityNode ), SRGBColorSpace ) );\n\n\t}\n\n}\n\n/**\n * TSL function for creating an equirect uv node.\n *\n * Can be used to compute texture coordinates for projecting an\n * equirectangular texture onto a mesh for using it as the scene's\n * background.\n *\n * ```js\n * scene.backgroundNode = texture( equirectTexture, equirectUV() );\n * ```\n *\n * @tsl\n * @function\n * @param {?Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.\n * @returns {Node<vec2>}\n */\nconst equirectUV = /*@__PURE__*/ Fn( ( [ dir = positionWorldDirection ] ) => {\n\n\tconst u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );\n\tconst v = dir.y.clamp( -1, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );\n\n\treturn vec2( u, v );\n\n} );\n\n/**\n * This class represents a cube render target. It is a special version\n * of `WebGLCubeRenderTarget` which is compatible with `WebGPURenderer`.\n *\n * @augments RenderTarget\n */\nclass CubeRenderTarget extends RenderTarget {\n\n\t/**\n\t * Constructs a new cube render target.\n\t *\n\t * @param {number} [size=1] - The size of the render target.\n\t * @param {RenderTarget~Options} [options] - The configuration object.\n\t */\n\tconstructor( size = 1, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\t/**\n\t\t * Overwritten with a different texture type.\n\t\t *\n\t\t * @type {DataArrayTexture}\n\t\t */\n\t\tthis.texture = new CubeTexture( images );\n\t\tthis._setTextureOptions( options );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n\t/**\n\t * Converts the given equirectangular texture to a cube map.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t * @param {Texture} texture - The equirectangular texture.\n\t * @return {CubeRenderTarget} A reference to this cube render target.\n\t */\n\tfromEquirectangularTexture( renderer, texture$1 ) {\n\n\t\tconst currentMinFilter = texture$1.minFilter;\n\t\tconst currentGenerateMipmaps = texture$1.generateMipmaps;\n\n\t\ttexture$1.generateMipmaps = true;\n\n\t\tthis.texture.type = texture$1.type;\n\t\tthis.texture.colorSpace = texture$1.colorSpace;\n\n\t\tthis.texture.generateMipmaps = texture$1.generateMipmaps;\n\t\tthis.texture.minFilter = texture$1.minFilter;\n\t\tthis.texture.magFilter = texture$1.magFilter;\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst uvNode = equirectUV( positionWorldDirection );\n\n\t\tconst material = new NodeMaterial();\n\t\tmaterial.colorNode = texture( texture$1, uvNode, 0 );\n\t\tmaterial.side = BackSide;\n\t\tmaterial.blending = NoBlending;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst scene = new Scene();\n\t\tscene.add( mesh );\n\n\t\t// Avoid blurred poles\n\t\tif ( texture$1.minFilter === LinearMipmapLinearFilter ) texture$1.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\n\t\tconst currentMRT = renderer.getMRT();\n\t\trenderer.setMRT( null );\n\n\t\tcamera.update( renderer, scene );\n\n\t\trenderer.setMRT( currentMRT );\n\n\t\ttexture$1.minFilter = currentMinFilter;\n\t\ttexture$1.generateMipmaps = currentGenerateMipmaps;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Clears this cube render target.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.\n\t * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.\n\t * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.\n\t */\n\tclear( renderer, color = true, depth = true, stencil = true ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nconst _cache$1 = new WeakMap();\n\n/**\n * This node can be used to automatically convert environment maps in the\n * equirectangular format into the cube map format.\n *\n * @augments TempNode\n */\nclass CubeMapNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'CubeMapNode';\n\n\t}\n\n\t/**\n\t * Constructs a new cube map node.\n\t *\n\t * @param {Node} envNode - The node representing the environment map.\n\t */\n\tconstructor( envNode ) {\n\n\t\tsuper( 'vec3' );\n\n\t\t/**\n\t\t * The node representing the environment map.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.envNode = envNode;\n\n\t\t/**\n\t\t * A reference to the internal cube texture.\n\t\t *\n\t\t * @private\n\t\t * @type {?CubeTexture}\n\t\t * @default null\n\t\t */\n\t\tthis._cubeTexture = null;\n\n\t\t/**\n\t\t * A reference to the internal cube texture node.\n\t\t *\n\t\t * @private\n\t\t * @type {CubeTextureNode}\n\t\t */\n\t\tthis._cubeTextureNode = cubeTexture( null );\n\n\t\tconst defaultTexture = new CubeTexture();\n\t\tdefaultTexture.isRenderTargetTexture = true;\n\n\t\t/**\n\t\t * A default cube texture that acts as a placeholder.\n\t\t * It is used when the conversion from equirectangular to cube\n\t\t * map has not finished yet for a given texture.\n\t\t *\n\t\t * @private\n\t\t * @type {CubeTexture}\n\t\t */\n\t\tthis._defaultTexture = defaultTexture;\n\n\t\t/**\n\t\t * The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node updates\n\t\t * the texture once per render in its {@link CubeMapNode#updateBefore} method.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'render'\n\t\t */\n\t\tthis.updateBeforeType = NodeUpdateType.RENDER;\n\n\t}\n\n\tupdateBefore( frame ) {\n\n\t\tconst { renderer, material } = frame;\n\n\t\tconst envNode = this.envNode;\n\n\t\tif ( envNode.isTextureNode || envNode.isMaterialReferenceNode ) {\n\n\t\t\tconst texture = ( envNode.isTextureNode ) ? envNode.value : material[ envNode.property ];\n\n\t\t\tif ( texture && texture.isTexture ) {\n\n\t\t\t\tconst mapping = texture.mapping;\n\n\t\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\t\t// check for converted cubemap map\n\n\t\t\t\t\tif ( _cache$1.has( texture ) ) {\n\n\t\t\t\t\t\tconst cubeMap = _cache$1.get( texture );\n\n\t\t\t\t\t\tmapTextureMapping( cubeMap, texture.mapping );\n\t\t\t\t\t\tthis._cubeTexture = cubeMap;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// create cube map from equirectangular map\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( isEquirectangularMapReady$1( image ) ) {\n\n\t\t\t\t\t\t\tconst renderTarget = new CubeRenderTarget( image.height );\n\t\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\n\t\t\t\t\t\t\tmapTextureMapping( renderTarget.texture, texture.mapping );\n\t\t\t\t\t\t\tthis._cubeTexture = renderTarget.texture;\n\n\t\t\t\t\t\t\t_cache$1.set( texture, renderTarget.texture );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// default cube texture as fallback when equirectangular texture is not yet loaded\n\n\t\t\t\t\t\t\tthis._cubeTexture = this._defaultTexture;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//\n\n\t\t\t\t\tthis._cubeTextureNode.value = this._cubeTexture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// envNode already refers to a cube map\n\n\t\t\t\t\tthis._cubeTextureNode = this.envNode;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tthis.updateBefore( builder );\n\n\t\treturn this._cubeTextureNode;\n\n\t}\n\n}\n\n/**\n * Returns true if the given equirectangular image has been fully loaded\n * and is ready for further processing.\n *\n * @private\n * @param {Image} image - The equirectangular image to check.\n * @return {boolean} Whether the image is ready or not.\n */\nfunction isEquirectangularMapReady$1( image ) {\n\n\tif ( image === null || image === undefined ) return false;\n\n\treturn image.height > 0;\n\n}\n\n/**\n * This function is executed when `dispose()` is called on the equirectangular\n * texture. In this case, the generated cube map with its render target\n * is deleted as well.\n *\n * @private\n * @param {Object} event - The event object.\n */\nfunction onTextureDispose( event ) {\n\n\tconst texture = event.target;\n\n\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\tconst renderTarget = _cache$1.get( texture );\n\n\tif ( renderTarget !== undefined ) {\n\n\t\t_cache$1.delete( texture );\n\n\t\trenderTarget.dispose();\n\n\t}\n\n}\n\n/**\n * This function makes sure the generated cube map uses the correct\n * texture mapping that corresponds to the equirectangular original.\n *\n * @private\n * @param {Texture} texture - The cube texture.\n * @param {number} mapping - The original texture mapping.\n */\nfunction mapTextureMapping( texture, mapping ) {\n\n\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\ttexture.mapping = CubeReflectionMapping;\n\n\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\ttexture.mapping = CubeRefractionMapping;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a cube map node.\n *\n * @tsl\n * @function\n * @param {Node} envNode - The node representing the environment map.\n * @returns {CubeMapNode}\n */\nconst cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode ).setParameterLength( 1 );\n\n/**\n * Represents a basic model for Image-based lighting (IBL). The environment\n * is defined via environment maps in the equirectangular or cube map format.\n * `BasicEnvironmentNode` is intended for non-PBR materials like {@link MeshBasicNodeMaterial}\n * or {@link MeshPhongNodeMaterial}.\n *\n * @augments LightingNode\n */\nclass BasicEnvironmentNode extends LightingNode {\n\n\tstatic get type() {\n\n\t\treturn 'BasicEnvironmentNode';\n\n\t}\n\n\t/**\n\t * Constructs a new basic environment node.\n\t *\n\t * @param {Node} [envNode=null] - A node representing the environment.\n\t */\n\tconstructor( envNode = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * A node representing the environment.\n\t\t *\n\t\t * @type {Node}\n\t\t * @default null\n\t\t */\n\t\tthis.envNode = envNode;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\t// environment property is used in the finish() method of BasicLightingModel\n\n\t\tbuilder.context.environment = cubeMapNode( this.envNode );\n\n\t}\n\n}\n\n/**\n * A specific version of {@link IrradianceNode} that is only relevant\n * for {@link MeshBasicNodeMaterial}. Since the material is unlit, it\n * requires a special scaling factor for the light map.\n *\n * @augments LightingNode\n */\nclass BasicLightMapNode extends LightingNode {\n\n\tstatic get type() {\n\n\t\treturn 'BasicLightMapNode';\n\n\t}\n\n\t/**\n\t * Constructs a new basic light map node.\n\t *\n\t * @param {?Node<vec3>} [lightMapNode=null] - The light map node.\n\t */\n\tconstructor( lightMapNode = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The light map node.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t */\n\t\tthis.lightMapNode = lightMapNode;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\t// irradianceLightMap property is used in the indirectDiffuse() method of BasicLightingModel\n\n\t\tconst RECIPROCAL_PI = float( 1 / Math.PI );\n\n\t\tbuilder.context.irradianceLightMap = this.lightMapNode.mul( RECIPROCAL_PI );\n\n\t}\n\n}\n\n/**\n * Abstract class for implementing lighting models. The module defines\n * multiple methods that concrete lighting models can implement. These\n * methods are executed at different points during the light evaluation\n * process.\n */\nclass LightingModel {\n\n\t/**\n\t * This method is intended for setting up lighting model and context data\n\t * which are later used in the evaluation process.\n\t *\n\t * @abstract\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tstart( builder ) {\n\n\t\t// lights ( direct )\n\n\t\tbuilder.lightsNode.setupLights( builder, builder.lightsNode.getLightNodes( builder ) );\n\n\t\t// indirect\n\n\t\tthis.indirect( builder );\n\n\t}\n\n\t/**\n\t * This method is intended for executing final tasks like final updates\n\t * to the outgoing light.\n\t *\n\t * @abstract\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tfinish( /*builder*/ ) { }\n\n\t/**\n\t * This method is intended for implementing the direct light term and\n\t * executed during the build process of directional, point and spot light nodes.\n\t *\n\t * @abstract\n\t * @param {Object} lightData - The light data.\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tdirect( /*lightData, builder*/ ) { }\n\n\t/**\n\t * This method is intended for implementing the direct light term for\n\t * rect area light nodes.\n\t *\n\t * @abstract\n\t * @param {Object} lightData - The light data.\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tdirectRectArea( /*lightData, builder*/ ) {}\n\n\t/**\n\t * This method is intended for implementing the indirect light term.\n\t *\n\t * @abstract\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tindirect( /*builder*/ ) { }\n\n\t/**\n\t * This method is intended for implementing the ambient occlusion term.\n\t * Unlike other methods, this method must be called manually by the lighting\n\t * model in its indirect term.\n\t *\n\t * @abstract\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tambientOcclusion( /*input, stack, builder*/ ) { }\n\n}\n\n/**\n * Represents the lighting model for unlit materials. The only light contribution\n * is baked indirect lighting modulated with ambient occlusion and the material's\n * diffuse color. Environment mapping is supported. Used in {@link MeshBasicNodeMaterial}.\n *\n * @augments LightingModel\n */\nclass BasicLightingModel extends LightingModel {\n\n\t/**\n\t * Constructs a new basic lighting model.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t}\n\n\t/**\n\t * Implements the baked indirect lighting with its modulation.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tindirect( { context } ) {\n\n\t\tconst ambientOcclusion = context.ambientOcclusion;\n\t\tconst reflectedLight = context.reflectedLight;\n\t\tconst irradianceLightMap = context.irradianceLightMap;\n\n\t\treflectedLight.indirectDiffuse.assign( vec4( 0.0 ) );\n\n\t\t// accumulation (baked indirect lighting only)\n\n\t\tif ( irradianceLightMap ) {\n\n\t\t\treflectedLight.indirectDiffuse.addAssign( irradianceLightMap );\n\n\t\t} else {\n\n\t\t\treflectedLight.indirectDiffuse.addAssign( vec4( 1.0, 1.0, 1.0, 0.0 ) );\n\n\t\t}\n\n\t\t// modulation\n\n\t\treflectedLight.indirectDiffuse.mulAssign( ambientOcclusion );\n\n\t\treflectedLight.indirectDiffuse.mulAssign( diffuseColor.rgb );\n\n\t}\n\n\t/**\n\t * Implements the environment mapping.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tfinish( builder ) {\n\n\t\tconst { material, context } = builder;\n\n\t\tconst outgoingLight = context.outgoingLight;\n\t\tconst envNode = builder.context.environment;\n\n\t\tif ( envNode ) {\n\n\t\t\tswitch ( material.combine ) {\n\n\t\t\t\tcase MultiplyOperation:\n\t\t\t\t\toutgoingLight.rgb.assign( mix( outgoingLight.rgb, outgoingLight.rgb.mul( envNode.rgb ), materialSpecularStrength.mul( materialReflectivity ) ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MixOperation:\n\t\t\t\t\toutgoingLight.rgb.assign( mix( outgoingLight.rgb, envNode.rgb, materialSpecularStrength.mul( materialReflectivity ) ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase AddOperation:\n\t\t\t\t\toutgoingLight.rgb.addAssign( envNode.rgb.mul( materialSpecularStrength.mul( materialReflectivity ) ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\twarn( 'BasicLightingModel: Unsupported .combine value:', material.combine );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nconst _defaultValues$9 = /*@__PURE__*/ new MeshBasicMaterial();\n\n/**\n * Node material version of {@link MeshBasicMaterial}.\n *\n * @augments NodeMaterial\n */\nclass MeshBasicNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshBasicNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new mesh basic node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshBasicNodeMaterial = true;\n\n\t\t/**\n\t\t * Although the basic material is by definition unlit, we set\n\t\t * this property to `true` since we use a lighting model to compute\n\t\t * the outgoing light of the fragment shader.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.lights = true;\n\n\t\tthis.setDefaultValues( _defaultValues$9 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Basic materials are not affected by normal and bump maps so we\n\t * return by default {@link normalViewGeometry}.\n\t *\n\t * @return {Node<vec3>} The normal node.\n\t */\n\tsetupNormal() {\n\n\t\treturn directionToFaceDirection( normalViewGeometry ); // see #28839\n\n\t}\n\n\t/**\n\t * Overwritten since this type of material uses {@link BasicEnvironmentNode}\n\t * to implement the default environment mapping.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {?BasicEnvironmentNode<vec3>} The environment node.\n\t */\n\tsetupEnvironment( builder ) {\n\n\t\tconst envNode = super.setupEnvironment( builder );\n\n\t\treturn envNode ? new BasicEnvironmentNode( envNode ) : null;\n\n\t}\n\n\t/**\n\t * This method must be overwritten since light maps are evaluated\n\t * with a special scaling factor for basic materials.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {?BasicLightMapNode<vec3>} The light map node.\n\t */\n\tsetupLightMap( builder ) {\n\n\t\tlet node = null;\n\n\t\tif ( builder.material.lightMap ) {\n\n\t\t\tnode = new BasicLightMapNode( materialLightMap );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n\t/**\n\t * The material overwrites this method because `lights` is set to `true` but\n\t * we still want to return the diffuse color as the outgoing light.\n\t *\n\t * @return {Node<vec3>} The outgoing light node.\n\t */\n\tsetupOutgoingLight() {\n\n\t\treturn diffuseColor.rgb;\n\n\t}\n\n\t/**\n\t * Setups the lighting model.\n\t *\n\t * @return {BasicLightingModel} The lighting model.\n\t */\n\tsetupLightingModel() {\n\n\t\treturn new BasicLightingModel();\n\n\t}\n\n}\n\nconst F_Schlick = /*@__PURE__*/ Fn( ( { f0, f90, dotVH } ) => {\n\n\t// Original approximation by Christophe Schlick '94\n\t// float fresnel = pow( 1.0 - dotVH, 5.0 );\n\n\t// Optimized variant (presented by Epic at SIGGRAPH '13)\n\t// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf\n\tconst fresnel = dotVH.mul( -5.55473 ).sub( 6.98316 ).mul( dotVH ).exp2();\n\n\treturn f0.mul( fresnel.oneMinus() ).add( f90.mul( fresnel ) );\n\n} ); // validated\n\nconst BRDF_Lambert = /*@__PURE__*/ Fn( ( inputs ) => {\n\n\treturn inputs.diffuseColor.mul( 1 / Math.PI ); // punctual light\n\n} ); // validated\n\nconst G_BlinnPhong_Implicit = () => float( 0.25 );\n\nconst D_BlinnPhong = /*@__PURE__*/ Fn( ( { dotNH } ) => {\n\n\treturn shininess.mul( float( 0.5 ) ).add( 1.0 ).mul( float( 1 / Math.PI ) ).mul( dotNH.pow( shininess ) );\n\n} );\n\nconst BRDF_BlinnPhong = /*@__PURE__*/ Fn( ( { lightDirection } ) => {\n\n\tconst halfDir = lightDirection.add( positionViewDirection ).normalize();\n\n\tconst dotNH = normalView.dot( halfDir ).clamp();\n\tconst dotVH = positionViewDirection.dot( halfDir ).clamp();\n\n\tconst F = F_Schlick( { f0: specularColor, f90: 1.0, dotVH } );\n\tconst G = G_BlinnPhong_Implicit();\n\tconst D = D_BlinnPhong( { dotNH } );\n\n\treturn F.mul( G ).mul( D );\n\n} );\n\n/**\n * Represents the lighting model for a phong material. Used in {@link MeshPhongNodeMaterial}.\n *\n * @augments BasicLightingModel\n */\nclass PhongLightingModel extends BasicLightingModel {\n\n\t/**\n\t * Constructs a new phong lighting model.\n\t *\n\t * @param {boolean} [specular=true] - Whether specular is supported or not.\n\t */\n\tconstructor( specular = true ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * Whether specular is supported or not. Set this to `false` if you are\n\t\t * looking for a Lambert-like material meaning a material for non-shiny\n\t\t * surfaces, without specular highlights.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.specular = specular;\n\n\t}\n\n\t/**\n\t * Implements the direct lighting. The specular portion is optional an can be controlled\n\t * with the {@link PhongLightingModel#specular} flag.\n\t *\n\t * @param {Object} lightData - The light data.\n\t */\n\tdirect( { lightDirection, lightColor, reflectedLight } ) {\n\n\t\tconst dotNL = normalView.dot( lightDirection ).clamp();\n\t\tconst irradiance = dotNL.mul( lightColor );\n\n\t\treflectedLight.directDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseColor.rgb } ) ) );\n\n\t\tif ( this.specular === true ) {\n\n\t\t\treflectedLight.directSpecular.addAssign( irradiance.mul( BRDF_BlinnPhong( { lightDirection } ) ).mul( materialSpecularStrength ) );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Implements the indirect lighting.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tindirect( builder ) {\n\n\t\tconst { ambientOcclusion, irradiance, reflectedLight } = builder.context;\n\n\t\treflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );\n\n\t\treflectedLight.indirectDiffuse.mulAssign( ambientOcclusion );\n\n\t}\n\n}\n\nconst _defaultValues$8 = /*@__PURE__*/ new MeshLambertMaterial();\n\n/**\n * Node material version of {@link MeshLambertMaterial}.\n *\n * @augments NodeMaterial\n */\nclass MeshLambertNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshLambertNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new mesh lambert node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshLambertNodeMaterial = true;\n\n\t\t/**\n\t\t * Set to `true` because lambert materials react on lights.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.lights = true;\n\n\t\tthis.setDefaultValues( _defaultValues$8 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Overwritten since this type of material uses {@link BasicEnvironmentNode}\n\t * to implement the default environment mapping.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {?BasicEnvironmentNode<vec3>} The environment node.\n\t */\n\tsetupEnvironment( builder ) {\n\n\t\tconst envNode = super.setupEnvironment( builder );\n\n\t\treturn envNode ? new BasicEnvironmentNode( envNode ) : null;\n\n\t}\n\n\t/**\n\t * Setups the lighting model.\n\t *\n\t * @return {PhongLightingModel} The lighting model.\n\t */\n\tsetupLightingModel( /*builder*/ ) {\n\n\t\treturn new PhongLightingModel( false ); // ( specular ) -> force lambert\n\n\t}\n\n}\n\nconst _defaultValues$7 = /*@__PURE__*/ new MeshPhongMaterial();\n\n/**\n * Node material version of {@link MeshPhongMaterial}.\n *\n * @augments NodeMaterial\n */\nclass MeshPhongNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshPhongNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new mesh lambert node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshPhongNodeMaterial = true;\n\n\t\t/**\n\t\t * Set to `true` because phong materials react on lights.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.lights = true;\n\n\t\t/**\n\t\t * The shininess of phong materials is by default inferred from the `shininess`\n\t\t * property. This node property allows to overwrite the default\n\t\t * and define the shininess with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the shininess but modify the existing\n\t\t * value instead, use {@link materialShininess}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.shininessNode = null;\n\n\t\t/**\n\t\t * The specular color of phong materials is by default inferred from the\n\t\t * `specular` property. This node property allows to overwrite the default\n\t\t * and define the specular color with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the specular color but modify the existing\n\t\t * value instead, use {@link materialSpecular}.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.specularNode = null;\n\n\t\tthis.setDefaultValues( _defaultValues$7 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Overwritten since this type of material uses {@link BasicEnvironmentNode}\n\t * to implement the default environment mapping.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {?BasicEnvironmentNode<vec3>} The environment node.\n\t */\n\tsetupEnvironment( builder ) {\n\n\t\tconst envNode = super.setupEnvironment( builder );\n\n\t\treturn envNode ? new BasicEnvironmentNode( envNode ) : null;\n\n\t}\n\n\t/**\n\t * Setups the lighting model.\n\t *\n\t * @return {PhongLightingModel} The lighting model.\n\t */\n\tsetupLightingModel( /*builder*/ ) {\n\n\t\treturn new PhongLightingModel();\n\n\t}\n\n\t/**\n\t * Setups the phong specific node variables.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetupVariants( /*builder*/ ) {\n\n\t\t// SHININESS\n\n\t\tconst shininessNode = ( this.shininessNode ? float( this.shininessNode ) : materialShininess ).max( 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tshininess.assign( shininessNode );\n\n\t\t// SPECULAR COLOR\n\n\t\tconst specularNode = this.specularNode || materialSpecular;\n\n\t\tspecularColor.assign( specularNode );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.shininessNode = source.shininessNode;\n\t\tthis.specularNode = source.specularNode;\n\n\t\treturn super.copy( source );\n\n\t}\n\n}\n\nconst getGeometryRoughness = /*@__PURE__*/ Fn( ( builder ) => {\n\n\tif ( builder.geometry.hasAttribute( 'normal' ) === false ) {\n\n\t\treturn float( 0 );\n\n\t}\n\n\tconst dxy = normalViewGeometry.dFdx().abs().max( normalViewGeometry.dFdy().abs() );\n\tconst geometryRoughness = dxy.x.max( dxy.y ).max( dxy.z );\n\n\treturn geometryRoughness;\n\n} );\n\nconst getRoughness = /*@__PURE__*/ Fn( ( inputs ) => {\n\n\tconst { roughness } = inputs;\n\n\tconst geometryRoughness = getGeometryRoughness();\n\n\tlet roughnessFactor = roughness.max( 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.\n\troughnessFactor = roughnessFactor.add( geometryRoughness );\n\troughnessFactor = roughnessFactor.min( 1.0 );\n\n\treturn roughnessFactor;\n\n} );\n\n// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2\n// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\nconst V_GGX_SmithCorrelated = /*@__PURE__*/ Fn( ( { alpha, dotNL, dotNV } ) => {\n\n\tconst a2 = alpha.pow2();\n\n\tconst gv = dotNL.mul( a2.add( a2.oneMinus().mul( dotNV.pow2() ) ).sqrt() );\n\tconst gl = dotNV.mul( a2.add( a2.oneMinus().mul( dotNL.pow2() ) ).sqrt() );\n\n\treturn div( 0.5, gv.add( gl ).max( EPSILON ) );\n\n} ).setLayout( {\n\tname: 'V_GGX_SmithCorrelated',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'alpha', type: 'float' },\n\t\t{ name: 'dotNL', type: 'float' },\n\t\t{ name: 'dotNV', type: 'float' }\n\t]\n} ); // validated\n\n// https://google.github.io/filament/Filament.md.html#materialsystem/anisotropicmodel/anisotropicspecularbrdf\n\nconst V_GGX_SmithCorrelated_Anisotropic = /*@__PURE__*/ Fn( ( { alphaT, alphaB, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL } ) => {\n\n\tconst gv = dotNL.mul( vec3( alphaT.mul( dotTV ), alphaB.mul( dotBV ), dotNV ).length() );\n\tconst gl = dotNV.mul( vec3( alphaT.mul( dotTL ), alphaB.mul( dotBL ), dotNL ).length() );\n\n\treturn div( 0.5, gv.add( gl ).max( EPSILON ) );\n\n} ).setLayout( {\n\tname: 'V_GGX_SmithCorrelated_Anisotropic',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'alphaT', type: 'float', qualifier: 'in' },\n\t\t{ name: 'alphaB', type: 'float', qualifier: 'in' },\n\t\t{ name: 'dotTV', type: 'float', qualifier: 'in' },\n\t\t{ name: 'dotBV', type: 'float', qualifier: 'in' },\n\t\t{ name: 'dotTL', type: 'float', qualifier: 'in' },\n\t\t{ name: 'dotBL', type: 'float', qualifier: 'in' },\n\t\t{ name: 'dotNV', type: 'float', qualifier: 'in' },\n\t\t{ name: 'dotNL', type: 'float', qualifier: 'in' }\n\t]\n} );\n\n// Microfacet Models for Refraction through Rough Surfaces - equation (33)\n// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html\n// alpha is \"roughness squared\" in Disney’s reparameterization\nconst D_GGX = /*@__PURE__*/ Fn( ( { alpha, dotNH } ) => {\n\n\tconst a2 = alpha.pow2();\n\n\tconst denom = dotNH.pow2().mul( a2.oneMinus() ).oneMinus(); // avoid alpha = 0 with dotNH = 1\n\n\treturn a2.div( denom.pow2() ).mul( 1 / Math.PI );\n\n} ).setLayout( {\n\tname: 'D_GGX',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'alpha', type: 'float' },\n\t\t{ name: 'dotNH', type: 'float' }\n\t]\n} ); // validated\n\nconst RECIPROCAL_PI = /*@__PURE__*/ float( 1 / Math.PI );\n\n// https://google.github.io/filament/Filament.md.html#materialsystem/anisotropicmodel/anisotropicspecularbrdf\n\nconst D_GGX_Anisotropic = /*@__PURE__*/ Fn( ( { alphaT, alphaB, dotNH, dotTH, dotBH } ) => {\n\n\tconst a2 = alphaT.mul( alphaB );\n\tconst v = vec3( alphaB.mul( dotTH ), alphaT.mul( dotBH ), a2.mul( dotNH ) );\n\tconst v2 = v.dot( v );\n\tconst w2 = a2.div( v2 );\n\n\treturn RECIPROCAL_PI.mul( a2.mul( w2.pow2() ) );\n\n} ).setLayout( {\n\tname: 'D_GGX_Anisotropic',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'alphaT', type: 'float', qualifier: 'in' },\n\t\t{ name: 'alphaB', type: 'float', qualifier: 'in' },\n\t\t{ name: 'dotNH', type: 'float', qualifier: 'in' },\n\t\t{ name: 'dotTH', type: 'float', qualifier: 'in' },\n\t\t{ name: 'dotBH', type: 'float', qualifier: 'in' }\n\t]\n} );\n\n// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility\nconst BRDF_GGX = /*@__PURE__*/ Fn( ( { lightDirection, f0, f90, roughness, f, normalView: normalView$1 = normalView, USE_IRIDESCENCE, USE_ANISOTROPY } ) => {\n\n\tconst alpha = roughness.pow2(); // UE4's roughness\n\n\tconst halfDir = lightDirection.add( positionViewDirection ).normalize();\n\n\tconst dotNL = normalView$1.dot( lightDirection ).clamp();\n\tconst dotNV = normalView$1.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV\n\tconst dotNH = normalView$1.dot( halfDir ).clamp();\n\tconst dotVH = positionViewDirection.dot( halfDir ).clamp();\n\n\tlet F = F_Schlick( { f0, f90, dotVH } );\n\tlet V, D;\n\n\tif ( defined( USE_IRIDESCENCE ) ) {\n\n\t\tF = iridescence.mix( F, f );\n\n\t}\n\n\tif ( defined( USE_ANISOTROPY ) ) {\n\n\t\tconst dotTL = anisotropyT.dot( lightDirection );\n\t\tconst dotTV = anisotropyT.dot( positionViewDirection );\n\t\tconst dotTH = anisotropyT.dot( halfDir );\n\t\tconst dotBL = anisotropyB.dot( lightDirection );\n\t\tconst dotBV = anisotropyB.dot( positionViewDirection );\n\t\tconst dotBH = anisotropyB.dot( halfDir );\n\n\t\tV = V_GGX_SmithCorrelated_Anisotropic( { alphaT, alphaB: alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL } );\n\t\tD = D_GGX_Anisotropic( { alphaT, alphaB: alpha, dotNH, dotTH, dotBH } );\n\n\t} else {\n\n\t\tV = V_GGX_SmithCorrelated( { alpha, dotNL, dotNV } );\n\t\tD = D_GGX( { alpha, dotNH } );\n\n\t}\n\n\treturn F.mul( V ).mul( D );\n\n} ); // validated\n\n/**\n * Precomputed DFG LUT for Image-Based Lighting\n * Resolution: 16x16\n * Samples: 4096 per texel\n * Format: RG16F (2 half floats per texel: scale, bias)\n */\n\nconst DATA = new Uint16Array( [\n\t0x30b5, 0x3ad1, 0x314c, 0x3a4d, 0x33d2, 0x391c, 0x35ef, 0x3828, 0x37f3, 0x36a6, 0x38d1, 0x3539, 0x3979, 0x3410, 0x39f8, 0x3252, 0x3a53, 0x30f0, 0x3a94, 0x2fc9, 0x3abf, 0x2e35, 0x3ada, 0x2d05, 0x3ae8, 0x2c1f, 0x3aed, 0x2ae0, 0x3aea, 0x29d1, 0x3ae1, 0x28ff,\n\t0x3638, 0x38e4, 0x364a, 0x38ce, 0x3699, 0x385e, 0x374e, 0x372c, 0x3839, 0x35a4, 0x38dc, 0x3462, 0x396e, 0x32c4, 0x39de, 0x3134, 0x3a2b, 0x3003, 0x3a59, 0x2e3a, 0x3a6d, 0x2ce1, 0x3a6e, 0x2bba, 0x3a5f, 0x2a33, 0x3a49, 0x290a, 0x3a2d, 0x2826, 0x3a0a, 0x26e8,\n\t0x3894, 0x36d7, 0x3897, 0x36c9, 0x38a3, 0x3675, 0x38bc, 0x35ac, 0x38ee, 0x349c, 0x393e, 0x3332, 0x3997, 0x3186, 0x39e2, 0x3038, 0x3a13, 0x2e75, 0x3a29, 0x2cf5, 0x3a2d, 0x2bac, 0x3a21, 0x29ff, 0x3a04, 0x28bc, 0x39dc, 0x2790, 0x39ad, 0x261a, 0x3978, 0x24fa,\n\t0x39ac, 0x34a8, 0x39ac, 0x34a3, 0x39ae, 0x3480, 0x39ae, 0x3423, 0x39b1, 0x330e, 0x39c2, 0x31a9, 0x39e0, 0x3063, 0x39fc, 0x2eb5, 0x3a0c, 0x2d1d, 0x3a14, 0x2bcf, 0x3a07, 0x29ff, 0x39e9, 0x28a3, 0x39be, 0x273c, 0x3989, 0x25b3, 0x394a, 0x2488, 0x3907, 0x2345,\n\t0x3a77, 0x3223, 0x3a76, 0x321f, 0x3a73, 0x3204, 0x3a6a, 0x31b3, 0x3a58, 0x3114, 0x3a45, 0x303b, 0x3a34, 0x2eb6, 0x3a26, 0x2d31, 0x3a1e, 0x2bef, 0x3a0b, 0x2a0d, 0x39ec, 0x28a1, 0x39c0, 0x271b, 0x3987, 0x2580, 0x3944, 0x2449, 0x38fa, 0x22bd, 0x38ac, 0x2155,\n\t0x3b07, 0x2fca, 0x3b06, 0x2fca, 0x3b00, 0x2fb8, 0x3af4, 0x2f7c, 0x3adb, 0x2eea, 0x3ab4, 0x2e00, 0x3a85, 0x2cec, 0x3a5e, 0x2bc5, 0x3a36, 0x2a00, 0x3a0d, 0x2899, 0x39dc, 0x2707, 0x39a0, 0x2562, 0x395a, 0x2424, 0x390b, 0x2268, 0x38b7, 0x20fd, 0x385f, 0x1fd1,\n\t0x3b69, 0x2cb9, 0x3b68, 0x2cbb, 0x3b62, 0x2cbb, 0x3b56, 0x2cae, 0x3b3b, 0x2c78, 0x3b0d, 0x2c0a, 0x3acf, 0x2ae3, 0x3a92, 0x2998, 0x3a54, 0x2867, 0x3a17, 0x26d0, 0x39d3, 0x253c, 0x3989, 0x2402, 0x3935, 0x2226, 0x38dc, 0x20bd, 0x387d, 0x1f54, 0x381d, 0x1db3,\n\t0x3ba9, 0x296b, 0x3ba8, 0x296f, 0x3ba3, 0x297b, 0x3b98, 0x2987, 0x3b7f, 0x2976, 0x3b4e, 0x2927, 0x3b0e, 0x2895, 0x3ac2, 0x27b7, 0x3a73, 0x263b, 0x3a23, 0x24e7, 0x39d0, 0x239b, 0x3976, 0x21d9, 0x3917, 0x207e, 0x38b2, 0x1ee7, 0x384b, 0x1d53, 0x37c7, 0x1c1e,\n\t0x3bd2, 0x25cb, 0x3bd1, 0x25d3, 0x3bcd, 0x25f0, 0x3bc2, 0x261f, 0x3bad, 0x2645, 0x3b7d, 0x262d, 0x3b3e, 0x25c4, 0x3aec, 0x250f, 0x3a93, 0x243a, 0x3a32, 0x22ce, 0x39d0, 0x215b, 0x3969, 0x202a, 0x38fe, 0x1e6e, 0x388f, 0x1cf1, 0x381f, 0x1b9b, 0x3762, 0x19dd,\n\t0x3be9, 0x21ab, 0x3be9, 0x21b7, 0x3be5, 0x21e5, 0x3bdd, 0x2241, 0x3bc9, 0x22a7, 0x3ba0, 0x22ec, 0x3b62, 0x22cd, 0x3b0f, 0x2247, 0x3aae, 0x2175, 0x3a44, 0x2088, 0x39d4, 0x1f49, 0x3960, 0x1dbe, 0x38e9, 0x1c77, 0x3870, 0x1ae8, 0x37f1, 0x1953, 0x3708, 0x181b,\n\t0x3bf6, 0x1cea, 0x3bf6, 0x1cfb, 0x3bf3, 0x1d38, 0x3bec, 0x1dbd, 0x3bda, 0x1e7c, 0x3bb7, 0x1f25, 0x3b7d, 0x1f79, 0x3b2c, 0x1f4c, 0x3ac6, 0x1ea6, 0x3a55, 0x1dbb, 0x39da, 0x1cbd, 0x395a, 0x1b9d, 0x38d8, 0x1a00, 0x3855, 0x18ac, 0x37ab, 0x173c, 0x36b7, 0x1598,\n\t0x3bfc, 0x1736, 0x3bfc, 0x1759, 0x3bf9, 0x17e7, 0x3bf4, 0x1896, 0x3be4, 0x1997, 0x3bc6, 0x1aa8, 0x3b91, 0x1b84, 0x3b43, 0x1bd2, 0x3ade, 0x1b8a, 0x3a65, 0x1acd, 0x39e2, 0x19d3, 0x3957, 0x18cd, 0x38ca, 0x17b3, 0x383e, 0x1613, 0x376d, 0x14bf, 0x366f, 0x135e,\n\t0x3bff, 0x101b, 0x3bff, 0x1039, 0x3bfc, 0x10c8, 0x3bf9, 0x1226, 0x3bea, 0x1428, 0x3bcf, 0x1584, 0x3b9f, 0x16c5, 0x3b54, 0x179a, 0x3af0, 0x17ce, 0x3a76, 0x1771, 0x39ea, 0x16a4, 0x3956, 0x15a7, 0x38bf, 0x14a7, 0x3829, 0x1379, 0x3735, 0x11ea, 0x362d, 0x10a1,\n\t0x3c00, 0x061b, 0x3c00, 0x066a, 0x3bfe, 0x081c, 0x3bfa, 0x0a4c, 0x3bed, 0x0d16, 0x3bd5, 0x0fb3, 0x3ba9, 0x114d, 0x3b63, 0x127c, 0x3b01, 0x132f, 0x3a85, 0x1344, 0x39f4, 0x12d2, 0x3957, 0x120d, 0x38b5, 0x1122, 0x3817, 0x103c, 0x3703, 0x0ed3, 0x35f0, 0x0d6d,\n\t0x3c00, 0x007a, 0x3c00, 0x0089, 0x3bfe, 0x011d, 0x3bfb, 0x027c, 0x3bf0, 0x04fa, 0x3bda, 0x0881, 0x3bb1, 0x0acd, 0x3b6f, 0x0c97, 0x3b10, 0x0d7b, 0x3a93, 0x0df1, 0x39fe, 0x0def, 0x3959, 0x0d8a, 0x38af, 0x0ce9, 0x3808, 0x0c31, 0x36d5, 0x0af0, 0x35b9, 0x09a3,\n\t0x3c00, 0x0000, 0x3c00, 0x0001, 0x3bff, 0x0015, 0x3bfb, 0x0059, 0x3bf2, 0x00fd, 0x3bdd, 0x01df, 0x3bb7, 0x031c, 0x3b79, 0x047c, 0x3b1d, 0x05d4, 0x3aa0, 0x06d5, 0x3a08, 0x075a, 0x395d, 0x075e, 0x38aa, 0x06f7, 0x37f4, 0x0648, 0x36ac, 0x0576, 0x3586, 0x049f\n] );\n\nlet lut = null;\n\nconst DFGLUT = /*@__PURE__*/ Fn( ( { roughness, dotNV } ) => {\n\n\tif ( lut === null ) {\n\n\t\tlut = new DataTexture( DATA, 16, 16, RGFormat, HalfFloatType );\n\t\tlut.name = 'DFG_LUT';\n\t\tlut.minFilter = LinearFilter;\n\t\tlut.magFilter = LinearFilter;\n\t\tlut.wrapS = ClampToEdgeWrapping;\n\t\tlut.wrapT = ClampToEdgeWrapping;\n\t\tlut.generateMipmaps = false;\n\t\tlut.needsUpdate = true;\n\n\t}\n\n\tconst uv = vec2( roughness, dotNV );\n\n\treturn texture( lut, uv ).rg;\n\n} );\n\n// GGX BRDF with multi-scattering energy compensation for direct lighting\n// This provides more accurate energy conservation, especially for rough materials\n// Based on \"Practical Multiple Scattering Compensation for Microfacet Models\"\n// https://blog.selfshadow.com/publications/turquin/ms_comp_final.pdf\nconst BRDF_GGX_Multiscatter = /*@__PURE__*/ Fn( ( { lightDirection, f0, f90, roughness: _roughness, f, USE_IRIDESCENCE, USE_ANISOTROPY } ) => {\n\n\t// Single-scattering BRDF (standard GGX)\n\tconst singleScatter = BRDF_GGX( { lightDirection, f0, f90, roughness: _roughness, f, USE_IRIDESCENCE, USE_ANISOTROPY } );\n\n\t// Multi-scattering compensation\n\tconst dotNL = normalView.dot( lightDirection ).clamp();\n\tconst dotNV = normalView.dot( positionViewDirection ).clamp();\n\n\t// Precomputed DFG values for view and light directions\n\tconst dfgV = DFGLUT( { roughness: _roughness, dotNV } );\n\tconst dfgL = DFGLUT( { roughness: _roughness, dotNV: dotNL } );\n\n\t// Single-scattering energy for view and light\n\tconst FssEss_V = f0.mul( dfgV.x ).add( f90.mul( dfgV.y ) );\n\tconst FssEss_L = f0.mul( dfgL.x ).add( f90.mul( dfgL.y ) );\n\n\tconst Ess_V = dfgV.x.add( dfgV.y );\n\tconst Ess_L = dfgL.x.add( dfgL.y );\n\n\t// Energy lost to multiple scattering\n\tconst Ems_V = float( 1.0 ).sub( Ess_V );\n\tconst Ems_L = float( 1.0 ).sub( Ess_L );\n\n\t// Average Fresnel reflectance\n\tconst Favg = f0.add( f0.oneMinus().mul( 0.047619 ) ); // 1/21\n\n\t// Multiple scattering contribution\n\t// Uses geometric mean of view and light contributions for better energy distribution\n\tconst Fms = FssEss_V.mul( FssEss_L ).mul( Favg ).div( float( 1.0 ).sub( Ems_V.mul( Ems_L ).mul( Favg ).mul( Favg ) ).add( EPSILON ) );\n\n\t// Energy compensation factor\n\tconst compensationFactor = Ems_V.mul( Ems_L );\n\n\tconst multiScatter = Fms.mul( compensationFactor );\n\n\treturn singleScatter.add( multiScatter );\n\n} );\n\nconst EnvironmentBRDF = /*@__PURE__*/ Fn( ( inputs ) => {\n\n\tconst { dotNV, specularColor, specularF90, roughness } = inputs;\n\n\tconst fab = DFGLUT( { dotNV, roughness } );\n\treturn specularColor.mul( fab.x ).add( specularF90.mul( fab.y ) );\n\n} );\n\nconst Schlick_to_F0 = /*@__PURE__*/ Fn( ( { f, f90, dotVH } ) => {\n\n\tconst x = dotVH.oneMinus().saturate();\n\tconst x2 = x.mul( x );\n\tconst x5 = x.mul( x2, x2 ).clamp( 0, .9999 );\n\n\treturn f.sub( vec3( f90 ).mul( x5 ) ).div( x5.oneMinus() );\n\n} ).setLayout( {\n\tname: 'Schlick_to_F0',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'f', type: 'vec3' },\n\t\t{ name: 'f90', type: 'float' },\n\t\t{ name: 'dotVH', type: 'float' }\n\t]\n} );\n\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\nconst D_Charlie = /*@__PURE__*/ Fn( ( { roughness, dotNH } ) => {\n\n\tconst alpha = roughness.pow2();\n\n\t// Estevez and Kulla 2017, \"Production Friendly Microfacet Sheen BRDF\"\n\tconst invAlpha = float( 1.0 ).div( alpha );\n\tconst cos2h = dotNH.pow2();\n\tconst sin2h = cos2h.oneMinus().max( 0.0078125 ); // 2^(-14/2), so sin2h^2 > 0 in fp16\n\n\treturn float( 2.0 ).add( invAlpha ).mul( sin2h.pow( invAlpha.mul( 0.5 ) ) ).div( 2.0 * Math.PI );\n\n} ).setLayout( {\n\tname: 'D_Charlie',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'roughness', type: 'float' },\n\t\t{ name: 'dotNH', type: 'float' }\n\t]\n} );\n\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\nconst V_Neubelt = /*@__PURE__*/ Fn( ( { dotNV, dotNL } ) => {\n\n\t// Neubelt and Pettineo 2013, \"Crafting a Next-gen Material Pipeline for The Order: 1886\"\n\treturn float( 1.0 ).div( float( 4.0 ).mul( dotNL.add( dotNV ).sub( dotNL.mul( dotNV ) ) ) );\n\n} ).setLayout( {\n\tname: 'V_Neubelt',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'dotNV', type: 'float' },\n\t\t{ name: 'dotNL', type: 'float' }\n\t]\n} );\n\nconst BRDF_Sheen = /*@__PURE__*/ Fn( ( { lightDirection } ) => {\n\n\tconst halfDir = lightDirection.add( positionViewDirection ).normalize();\n\n\tconst dotNL = normalView.dot( lightDirection ).clamp();\n\tconst dotNV = normalView.dot( positionViewDirection ).clamp();\n\tconst dotNH = normalView.dot( halfDir ).clamp();\n\n\tconst D = D_Charlie( { roughness: sheenRoughness, dotNH } );\n\tconst V = V_Neubelt( { dotNV, dotNL } );\n\n\treturn sheen.mul( D ).mul( V );\n\n} );\n\n// Rect Area Light\n\n// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\n// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt\n// code: https://github.com/selfshadow/ltc_code/\n\nconst LTC_Uv = /*@__PURE__*/ Fn( ( { N, V, roughness } ) => {\n\n\tconst LUT_SIZE = 64.0;\n\tconst LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst LUT_BIAS = 0.5 / LUT_SIZE;\n\n\tconst dotNV = N.dot( V ).saturate();\n\n\t// texture parameterized by sqrt( GGX alpha ) and sqrt( 1 - cos( theta ) )\n\tconst uv = vec2( roughness, dotNV.oneMinus().sqrt() );\n\n\tuv.assign( uv.mul( LUT_SCALE ).add( LUT_BIAS ) );\n\n\treturn uv;\n\n} ).setLayout( {\n\tname: 'LTC_Uv',\n\ttype: 'vec2',\n\tinputs: [\n\t\t{ name: 'N', type: 'vec3' },\n\t\t{ name: 'V', type: 'vec3' },\n\t\t{ name: 'roughness', type: 'float' }\n\t]\n} );\n\nconst LTC_ClippedSphereFormFactor = /*@__PURE__*/ Fn( ( { f } ) => {\n\n\t// Real-Time Area Lighting: a Journey from Research to Production (p.102)\n\t// An approximation of the form factor of a horizon-clipped rectangle.\n\n\tconst l = f.length();\n\n\treturn max$1( l.mul( l ).add( f.z ).div( l.add( 1.0 ) ), 0 );\n\n} ).setLayout( {\n\tname: 'LTC_ClippedSphereFormFactor',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'f', type: 'vec3' }\n\t]\n} );\n\nconst LTC_EdgeVectorFormFactor = /*@__PURE__*/ Fn( ( { v1, v2 } ) => {\n\n\tconst x = v1.dot( v2 );\n\tconst y = x.abs().toVar();\n\n\t// rational polynomial approximation to theta / sin( theta ) / 2PI\n\tconst a = y.mul( 0.0145206 ).add( 0.4965155 ).mul( y ).add( 0.8543985 ).toVar();\n\tconst b = y.add( 4.1616724 ).mul( y ).add( 3.4175940 ).toVar();\n\tconst v = a.div( b );\n\n\tconst theta_sintheta = x.greaterThan( 0.0 ).select( v, max$1( x.mul( x ).oneMinus(), 1e-7 ).inverseSqrt().mul( 0.5 ).sub( v ) );\n\n\treturn v1.cross( v2 ).mul( theta_sintheta );\n\n} ).setLayout( {\n\tname: 'LTC_EdgeVectorFormFactor',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'v1', type: 'vec3' },\n\t\t{ name: 'v2', type: 'vec3' }\n\t]\n} );\n\nconst LTC_Evaluate = /*@__PURE__*/ Fn( ( { N, V, P, mInv, p0, p1, p2, p3 } ) => {\n\n\t// bail if point is on back side of plane of light\n\t// assumes ccw winding order of light vertices\n\tconst v1 = p1.sub( p0 ).toVar();\n\tconst v2 = p3.sub( p0 ).toVar();\n\n\tconst lightNormal = v1.cross( v2 );\n\tconst result = vec3().toVar();\n\n\tIf( lightNormal.dot( P.sub( p0 ) ).greaterThanEqual( 0.0 ), () => {\n\n\t\t// construct orthonormal basis around N\n\t\tconst T1 = V.sub( N.mul( V.dot( N ) ) ).normalize();\n\t\tconst T2 = N.cross( T1 ).negate(); // negated from paper; possibly due to a different handedness of world coordinate system\n\n\t\t// compute transform\n\t\tconst mat = mInv.mul( mat3( T1, T2, N ).transpose() ).toVar();\n\n\t\t// transform rect\n\t\t// & project rect onto sphere\n\t\tconst coords0 = mat.mul( p0.sub( P ) ).normalize().toVar();\n\t\tconst coords1 = mat.mul( p1.sub( P ) ).normalize().toVar();\n\t\tconst coords2 = mat.mul( p2.sub( P ) ).normalize().toVar();\n\t\tconst coords3 = mat.mul( p3.sub( P ) ).normalize().toVar();\n\n\t\t// calculate vector form factor\n\t\tconst vectorFormFactor = vec3( 0 ).toVar();\n\t\tvectorFormFactor.addAssign( LTC_EdgeVectorFormFactor( { v1: coords0, v2: coords1 } ) );\n\t\tvectorFormFactor.addAssign( LTC_EdgeVectorFormFactor( { v1: coords1, v2: coords2 } ) );\n\t\tvectorFormFactor.addAssign( LTC_EdgeVectorFormFactor( { v1: coords2, v2: coords3 } ) );\n\t\tvectorFormFactor.addAssign( LTC_EdgeVectorFormFactor( { v1: coords3, v2: coords0 } ) );\n\n\t\t// adjust for horizon clipping\n\t\tresult.assign( vec3( LTC_ClippedSphereFormFactor( { f: vectorFormFactor } ) ) );\n\n\t} );\n\n\treturn result;\n\n} ).setLayout( {\n\tname: 'LTC_Evaluate',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'N', type: 'vec3' },\n\t\t{ name: 'V', type: 'vec3' },\n\t\t{ name: 'P', type: 'vec3' },\n\t\t{ name: 'mInv', type: 'mat3' },\n\t\t{ name: 'p0', type: 'vec3' },\n\t\t{ name: 'p1', type: 'vec3' },\n\t\t{ name: 'p2', type: 'vec3' },\n\t\t{ name: 'p3', type: 'vec3' }\n\t]\n} );\n\nconst LTC_Evaluate_Volume = /*@__PURE__*/ Fn( ( { P, p0, p1, p2, p3 } ) => {\n\n\t// bail if point is on back side of plane of light\n\t// assumes ccw winding order of light vertices\n\tconst v1 = p1.sub( p0 ).toVar();\n\tconst v2 = p3.sub( p0 ).toVar();\n\n\tconst lightNormal = v1.cross( v2 );\n\tconst result = vec3().toVar();\n\n\tIf( lightNormal.dot( P.sub( p0 ) ).greaterThanEqual( 0.0 ), () => {\n\n\t\t// transform rect\n\t\t// & project rect onto sphere\n\t\tconst coords0 = p0.sub( P ).normalize().toVar();\n\t\tconst coords1 = p1.sub( P ).normalize().toVar();\n\t\tconst coords2 = p2.sub( P ).normalize().toVar();\n\t\tconst coords3 = p3.sub( P ).normalize().toVar();\n\n\t\t// calculate vector form factor\n\t\tconst vectorFormFactor = vec3( 0 ).toVar();\n\t\tvectorFormFactor.addAssign( LTC_EdgeVectorFormFactor( { v1: coords0, v2: coords1 } ) );\n\t\tvectorFormFactor.addAssign( LTC_EdgeVectorFormFactor( { v1: coords1, v2: coords2 } ) );\n\t\tvectorFormFactor.addAssign( LTC_EdgeVectorFormFactor( { v1: coords2, v2: coords3 } ) );\n\t\tvectorFormFactor.addAssign( LTC_EdgeVectorFormFactor( { v1: coords3, v2: coords0 } ) );\n\n\t\t// adjust for horizon clipping\n\t\tresult.assign( vec3( LTC_ClippedSphereFormFactor( { f: vectorFormFactor.abs() } ) ) );\n\n\t} );\n\n\treturn result;\n\n} ).setLayout( {\n\tname: 'LTC_Evaluate',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'P', type: 'vec3' },\n\t\t{ name: 'p0', type: 'vec3' },\n\t\t{ name: 'p1', type: 'vec3' },\n\t\t{ name: 'p2', type: 'vec3' },\n\t\t{ name: 'p3', type: 'vec3' }\n\t]\n} );\n\n// Mipped Bicubic Texture Filtering by N8\n// https://www.shadertoy.com/view/Dl2SDW\n\nconst bC = 1.0 / 6.0;\n\nconst w0 = ( a ) => mul( bC, mul( a, mul( a, a.negate().add( 3.0 ) ).sub( 3.0 ) ).add( 1.0 ) );\n\nconst w1 = ( a ) => mul( bC, mul( a, mul( a, mul( 3.0, a ).sub( 6.0 ) ) ).add( 4.0 ) );\n\nconst w2 = ( a ) => mul( bC, mul( a, mul( a, mul( -3, a ).add( 3.0 ) ).add( 3.0 ) ).add( 1.0 ) );\n\nconst w3 = ( a ) => mul( bC, pow( a, 3 ) );\n\nconst g0 = ( a ) => w0( a ).add( w1( a ) );\n\nconst g1 = ( a ) => w2( a ).add( w3( a ) );\n\n// h0 and h1 are the two offset functions\nconst h0 = ( a ) => add( -1, w1( a ).div( w0( a ).add( w1( a ) ) ) );\n\nconst h1 = ( a ) => add( 1.0, w3( a ).div( w2( a ).add( w3( a ) ) ) );\n\nconst bicubic = ( textureNode, texelSize, lod ) => {\n\n\tconst uv = textureNode.uvNode;\n\tconst uvScaled = mul( uv, texelSize.zw ).add( 0.5 );\n\n\tconst iuv = floor( uvScaled );\n\tconst fuv = fract( uvScaled );\n\n\tconst g0x = g0( fuv.x );\n\tconst g1x = g1( fuv.x );\n\tconst h0x = h0( fuv.x );\n\tconst h1x = h1( fuv.x );\n\tconst h0y = h0( fuv.y );\n\tconst h1y = h1( fuv.y );\n\n\tconst p0 = vec2( iuv.x.add( h0x ), iuv.y.add( h0y ) ).sub( 0.5 ).mul( texelSize.xy );\n\tconst p1 = vec2( iuv.x.add( h1x ), iuv.y.add( h0y ) ).sub( 0.5 ).mul( texelSize.xy );\n\tconst p2 = vec2( iuv.x.add( h0x ), iuv.y.add( h1y ) ).sub( 0.5 ).mul( texelSize.xy );\n\tconst p3 = vec2( iuv.x.add( h1x ), iuv.y.add( h1y ) ).sub( 0.5 ).mul( texelSize.xy );\n\n\tconst a = g0( fuv.y ).mul( add( g0x.mul( textureNode.sample( p0 ).level( lod ) ), g1x.mul( textureNode.sample( p1 ).level( lod ) ) ) );\n\tconst b = g1( fuv.y ).mul( add( g0x.mul( textureNode.sample( p2 ).level( lod ) ), g1x.mul( textureNode.sample( p3 ).level( lod ) ) ) );\n\n\treturn a.add( b );\n\n};\n\n/**\n * Applies mipped bicubic texture filtering to the given texture node.\n *\n * @tsl\n * @function\n * @param {TextureNode} textureNode - The texture node that should be filtered.\n * @param {Node<float>} lodNode - Defines the LOD to sample from.\n * @return {Node} The filtered texture sample.\n */\nconst textureBicubicLevel = /*@__PURE__*/ Fn( ( [ textureNode, lodNode ] ) => {\n\n\tconst fLodSize = vec2( textureNode.size( int( lodNode ) ) );\n\tconst cLodSize = vec2( textureNode.size( int( lodNode.add( 1.0 ) ) ) );\n\tconst fLodSizeInv = div( 1.0, fLodSize );\n\tconst cLodSizeInv = div( 1.0, cLodSize );\n\tconst fSample = bicubic( textureNode, vec4( fLodSizeInv, fLodSize ), floor( lodNode ) );\n\tconst cSample = bicubic( textureNode, vec4( cLodSizeInv, cLodSize ), ceil( lodNode ) );\n\n\treturn fract( lodNode ).mix( fSample, cSample );\n\n} );\n\n/**\n * Applies mipped bicubic texture filtering to the given texture node.\n *\n * @tsl\n * @function\n * @param {TextureNode} textureNode - The texture node that should be filtered.\n * @param {Node<float>} [strength] - Defines the strength of the bicubic filtering.\n * @return {Node} The filtered texture sample.\n */\nconst textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, strength ] ) => {\n\n\tconst lod = strength.mul( maxMipLevel( textureNode ) );\n\n\treturn textureBicubicLevel( textureNode, lod );\n\n} );\n\n//\n// Transmission\n//\n\nconst getVolumeTransmissionRay = /*@__PURE__*/ Fn( ( [ n, v, thickness, ior, modelMatrix ] ) => {\n\n\t// Direction of refracted light.\n\tconst refractionVector = vec3( refract( v.negate(), normalize( n ), div( 1.0, ior ) ) );\n\n\t// Compute rotation-independent scaling of the model matrix.\n\tconst modelScale = vec3(\n\t\tlength( modelMatrix[ 0 ].xyz ),\n\t\tlength( modelMatrix[ 1 ].xyz ),\n\t\tlength( modelMatrix[ 2 ].xyz )\n\t);\n\n\t// The thickness is specified in local space.\n\treturn normalize( refractionVector ).mul( thickness.mul( modelScale ) );\n\n} ).setLayout( {\n\tname: 'getVolumeTransmissionRay',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'n', type: 'vec3' },\n\t\t{ name: 'v', type: 'vec3' },\n\t\t{ name: 'thickness', type: 'float' },\n\t\t{ name: 'ior', type: 'float' },\n\t\t{ name: 'modelMatrix', type: 'mat4' }\n\t]\n} );\n\nconst applyIorToRoughness = /*@__PURE__*/ Fn( ( [ roughness, ior ] ) => {\n\n\t// Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and\n\t// an IOR of 1.5 results in the default amount of microfacet refraction.\n\treturn roughness.mul( clamp( ior.mul( 2.0 ).sub( 2.0 ), 0.0, 1.0 ) );\n\n} ).setLayout( {\n\tname: 'applyIorToRoughness',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'roughness', type: 'float' },\n\t\t{ name: 'ior', type: 'float' }\n\t]\n} );\n\nconst viewportBackSideTexture = /*@__PURE__*/ viewportMipTexture();\nconst viewportFrontSideTexture = /*@__PURE__*/ viewportOpaqueMipTexture();\n\nconst getTransmissionSample = /*@__PURE__*/ Fn( ( [ fragCoord, roughness, ior ], { material } ) => {\n\n\tconst vTexture = material.side === BackSide ? viewportBackSideTexture : viewportFrontSideTexture;\n\n\tconst transmissionSample = vTexture.sample( fragCoord );\n\t//const transmissionSample = viewportMipTexture( fragCoord );\n\n\tconst lod = log2( screenSize.x ).mul( applyIorToRoughness( roughness, ior ) );\n\n\treturn textureBicubicLevel( transmissionSample, lod );\n\n} );\n\nconst volumeAttenuation = /*@__PURE__*/ Fn( ( [ transmissionDistance, attenuationColor, attenuationDistance ] ) => {\n\n\tIf( attenuationDistance.notEqual( 0 ), () => {\n\n\t\t// Compute light attenuation using Beer's law.\n\t\tconst attenuationCoefficient = log( attenuationColor ).negate().div( attenuationDistance );\n\t\tconst transmittance = exp( attenuationCoefficient.negate().mul( transmissionDistance ) );\n\n\t\treturn transmittance;\n\n\t} );\n\n\t// Attenuation distance is +∞, i.e. the transmitted color is not attenuated at all.\n\treturn vec3( 1.0 );\n\n} ).setLayout( {\n\tname: 'volumeAttenuation',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'transmissionDistance', type: 'float' },\n\t\t{ name: 'attenuationColor', type: 'vec3' },\n\t\t{ name: 'attenuationDistance', type: 'float' }\n\t]\n} );\n\nconst getIBLVolumeRefraction = /*@__PURE__*/ Fn( ( [ n, v, roughness, diffuseColor, specularColor, specularF90, position, modelMatrix, viewMatrix, projMatrix, ior, thickness, attenuationColor, attenuationDistance, dispersion ] ) => {\n\n\tlet transmittedLight, transmittance;\n\n\tif ( dispersion ) {\n\n\t\ttransmittedLight = vec4().toVar();\n\t\ttransmittance = vec3().toVar();\n\n\t\tconst halfSpread = ior.sub( 1.0 ).mul( dispersion.mul( 0.025 ) );\n\t\tconst iors = vec3( ior.sub( halfSpread ), ior, ior.add( halfSpread ) );\n\n\t\tLoop( { start: 0, end: 3 }, ( { i } ) => {\n\n\t\t\tconst ior = iors.element( i );\n\n\t\t\tconst transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tconst refractedRayExit = position.add( transmissionRay );\n\n\t\t\t// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.\n\t\t\tconst ndcPos = projMatrix.mul( viewMatrix.mul( vec4( refractedRayExit, 1.0 ) ) );\n\t\t\tconst refractionCoords = vec2( ndcPos.xy.div( ndcPos.w ) ).toVar();\n\t\t\trefractionCoords.addAssign( 1.0 );\n\t\t\trefractionCoords.divAssign( 2.0 );\n\t\t\trefractionCoords.assign( vec2( refractionCoords.x, refractionCoords.y.oneMinus() ) ); // webgpu\n\n\t\t\t// Sample framebuffer to get pixel the refracted ray hits.\n\t\t\tconst transmissionSample = getTransmissionSample( refractionCoords, roughness, ior );\n\n\t\t\ttransmittedLight.element( i ).assign( transmissionSample.element( i ) );\n\t\t\ttransmittedLight.a.addAssign( transmissionSample.a );\n\n\t\t\ttransmittance.element( i ).assign( diffuseColor.element( i ).mul( volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance ).element( i ) ) );\n\n\t\t} );\n\n\t\ttransmittedLight.a.divAssign( 3.0 );\n\n\t} else {\n\n\t\tconst transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tconst refractedRayExit = position.add( transmissionRay );\n\n\t\t// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.\n\t\tconst ndcPos = projMatrix.mul( viewMatrix.mul( vec4( refractedRayExit, 1.0 ) ) );\n\t\tconst refractionCoords = vec2( ndcPos.xy.div( ndcPos.w ) ).toVar();\n\t\trefractionCoords.addAssign( 1.0 );\n\t\trefractionCoords.divAssign( 2.0 );\n\t\trefractionCoords.assign( vec2( refractionCoords.x, refractionCoords.y.oneMinus() ) ); // webgpu\n\n\t\t// Sample framebuffer to get pixel the refracted ray hits.\n\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\ttransmittance = diffuseColor.mul( volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance ) );\n\n\t}\n\n\tconst attenuatedColor = transmittance.rgb.mul( transmittedLight.rgb );\n\tconst dotNV = n.dot( v ).clamp();\n\n\t// Get the specular component.\n\tconst F = vec3( EnvironmentBRDF( { // n, v, specularColor, specularF90, roughness\n\t\tdotNV,\n\t\tspecularColor,\n\t\tspecularF90,\n\t\troughness\n\t} ) );\n\n\t// As less light is transmitted, the opacity should be increased. This simple approximation does a decent job\n\t// of modulating a CSS background, and has no effect when the buffer is opaque, due to a solid object or clear color.\n\tconst transmittanceFactor = transmittance.r.add( transmittance.g, transmittance.b ).div( 3.0 );\n\n\treturn vec4( F.oneMinus().mul( attenuatedColor ), transmittedLight.a.oneMinus().mul( transmittanceFactor ).oneMinus() );\n\n} );\n\n//\n// Iridescence\n//\n\n// XYZ to linear-sRGB color space\nconst XYZ_TO_REC709 = /*@__PURE__*/ mat3(\n\t3.2404542, -0.969266, 0.0556434,\n\t-1.5371385, 1.8760108, -0.2040259,\n\t-0.4985314, 0.0415560, 1.0572252\n);\n\n// Assume air interface for top\n// Note: We don't handle the case fresnel0 == 1\nconst Fresnel0ToIor = ( fresnel0 ) => {\n\n\tconst sqrtF0 = fresnel0.sqrt();\n\treturn vec3( 1.0 ).add( sqrtF0 ).div( vec3( 1.0 ).sub( sqrtF0 ) );\n\n};\n\n// ior is a value between 1.0 and 3.0. 1.0 is air interface\nconst IorToFresnel0 = ( transmittedIor, incidentIor ) => {\n\n\treturn transmittedIor.sub( incidentIor ).div( transmittedIor.add( incidentIor ) ).pow2();\n\n};\n\n// Fresnel equations for dielectric/dielectric interfaces.\n// Ref: https://belcour.github.io/blog/research/2017/05/01/brdf-thin-film.html\n// Evaluation XYZ sensitivity curves in Fourier space\nconst evalSensitivity = ( OPD, shift ) => {\n\n\tconst phase = OPD.mul( 2.0 * Math.PI * 1.0e-9 );\n\tconst val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\tconst pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\tconst VAR = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\n\tconst x = float( 9.7470e-14 * Math.sqrt( 2.0 * Math.PI * 4.5282e+09 ) ).mul( phase.mul( 2.2399e+06 ).add( shift.x ).cos() ).mul( phase.pow2().mul( -45282e5 ).exp() );\n\n\tlet xyz = val.mul( VAR.mul( 2.0 * Math.PI ).sqrt() ).mul( pos.mul( phase ).add( shift ).cos() ).mul( phase.pow2().negate().mul( VAR ).exp() );\n\txyz = vec3( xyz.x.add( x ), xyz.y, xyz.z ).div( 1.0685e-7 );\n\n\tconst rgb = XYZ_TO_REC709.mul( xyz );\n\n\treturn rgb;\n\n};\n\nconst evalIridescence = /*@__PURE__*/ Fn( ( { outsideIOR, eta2, cosTheta1, thinFilmThickness, baseF0 } ) => {\n\n\t// Force iridescenceIOR -> outsideIOR when thinFilmThickness -> 0.0\n\tconst iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t// Evaluate the cosTheta on the base layer (Snell law)\n\tconst sinTheta2Sq = outsideIOR.div( iridescenceIOR ).pow2().mul( cosTheta1.pow2().oneMinus() );\n\n\t// Handle TIR:\n\tconst cosTheta2Sq = sinTheta2Sq.oneMinus();\n\n\tIf( cosTheta2Sq.lessThan( 0 ), () => {\n\n\t\treturn vec3( 1.0 );\n\n\t} );\n\n\tconst cosTheta2 = cosTheta2Sq.sqrt();\n\n\t// First interface\n\tconst R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\tconst R12 = F_Schlick( { f0: R0, f90: 1.0, dotVH: cosTheta1 } );\n\t//const R21 = R12;\n\tconst T121 = R12.oneMinus();\n\tconst phi12 = iridescenceIOR.lessThan( outsideIOR ).select( Math.PI, 0.0 );\n\tconst phi21 = float( Math.PI ).sub( phi12 );\n\n\t// Second interface\n\tconst baseIOR = Fresnel0ToIor( baseF0.clamp( 0.0, 0.9999 ) ); // guard against 1.0\n\tconst R1 = IorToFresnel0( baseIOR, iridescenceIOR.toVec3() );\n\tconst R23 = F_Schlick( { f0: R1, f90: 1.0, dotVH: cosTheta2 } );\n\tconst phi23 = vec3(\n\t\tbaseIOR.x.lessThan( iridescenceIOR ).select( Math.PI, 0.0 ),\n\t\tbaseIOR.y.lessThan( iridescenceIOR ).select( Math.PI, 0.0 ),\n\t\tbaseIOR.z.lessThan( iridescenceIOR ).select( Math.PI, 0.0 )\n\t);\n\n\t// Phase shift\n\tconst OPD = iridescenceIOR.mul( thinFilmThickness, cosTheta2, 2.0 );\n\tconst phi = vec3( phi21 ).add( phi23 );\n\n\t// Compound terms\n\tconst R123 = R12.mul( R23 ).clamp( 1e-5, 0.9999 );\n\tconst r123 = R123.sqrt();\n\tconst Rs = T121.pow2().mul( R23 ).div( vec3( 1.0 ).sub( R123 ) );\n\n\t// Reflectance term for m = 0 (DC term amplitude)\n\tconst C0 = R12.add( Rs );\n\tconst I = C0.toVar();\n\n\t// Reflectance term for m > 0 (pairs of diracs)\n\tconst Cm = Rs.sub( T121 ).toVar();\n\n\tLoop( { start: 1, end: 2, condition: '<=', name: 'm' }, ( { m } ) => {\n\n\t\tCm.mulAssign( r123 );\n\t\tconst Sm = evalSensitivity( float( m ).mul( OPD ), float( m ).mul( phi ) ).mul( 2.0 );\n\t\tI.addAssign( Cm.mul( Sm ) );\n\n\t} );\n\n\t// Since out of gamut colors might be produced, negative color values are clamped to 0.\n\treturn I.max( vec3( 0.0 ) );\n\n} ).setLayout( {\n\tname: 'evalIridescence',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'outsideIOR', type: 'float' },\n\t\t{ name: 'eta2', type: 'float' },\n\t\t{ name: 'cosTheta1', type: 'float' },\n\t\t{ name: 'thinFilmThickness', type: 'float' },\n\t\t{ name: 'baseF0', type: 'vec3' }\n\t]\n} );\n\n//\n//\tSheen\n//\n\n// This is a curve-fit approximation to the \"Charlie sheen\" BRDF integrated over the hemisphere from\n// Estevez and Kulla 2017, \"Production Friendly Microfacet Sheen BRDF\".\nconst IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {\n\n\tconst dotNV = normal.dot( viewDir ).saturate();\n\tconst r2 = roughness.mul( roughness );\n\tconst rInv = roughness.add( 0.1 ).reciprocal();\n\n\tconst a = float( -1.9362 ).add( roughness.mul( 1.0678 ) ).add( r2.mul( 0.4573 ) ).sub( rInv.mul( 0.8469 ) );\n\tconst b = float( -0.6014 ).add( roughness.mul( 0.5538 ) ).sub( r2.mul( 0.4670 ) ).sub( rInv.mul( 0.1255 ) );\n\n\tconst DG = a.mul( dotNV ).add( b ).exp();\n\n\treturn DG.saturate();\n\n} );\n\nconst clearcoatF0 = vec3( 0.04 );\nconst clearcoatF90 = float( 1 );\n\n\n/**\n * Represents the lighting model for a PBR material.\n *\n * @augments LightingModel\n */\nclass PhysicalLightingModel extends LightingModel {\n\n\t/**\n\t * Constructs a new physical lighting model.\n\t *\n\t * @param {boolean} [clearcoat=false] - Whether clearcoat is supported or not.\n\t * @param {boolean} [sheen=false] - Whether sheen is supported or not.\n\t * @param {boolean} [iridescence=false] - Whether iridescence is supported or not.\n\t * @param {boolean} [anisotropy=false] - Whether anisotropy is supported or not.\n\t * @param {boolean} [transmission=false] - Whether transmission is supported or not.\n\t * @param {boolean} [dispersion=false] - Whether dispersion is supported or not.\n\t */\n\tconstructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * Whether clearcoat is supported or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clearcoat = clearcoat;\n\n\t\t/**\n\t\t * Whether sheen is supported or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.sheen = sheen;\n\n\t\t/**\n\t\t * Whether iridescence is supported or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.iridescence = iridescence;\n\n\t\t/**\n\t\t * Whether anisotropy is supported or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.anisotropy = anisotropy;\n\n\t\t/**\n\t\t * Whether transmission is supported or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.transmission = transmission;\n\n\t\t/**\n\t\t * Whether dispersion is supported or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.dispersion = dispersion;\n\n\t\t/**\n\t\t * The clear coat radiance.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.clearcoatRadiance = null;\n\n\t\t/**\n\t\t * The clear coat specular direct.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.clearcoatSpecularDirect = null;\n\n\t\t/**\n\t\t * The clear coat specular indirect.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.clearcoatSpecularIndirect = null;\n\n\t\t/**\n\t\t * The sheen specular direct.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.sheenSpecularDirect = null;\n\n\t\t/**\n\t\t * The sheen specular indirect.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.sheenSpecularIndirect = null;\n\n\t\t/**\n\t\t * The iridescence Fresnel.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.iridescenceFresnel = null;\n\n\t\t/**\n\t\t * The iridescence F0.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.iridescenceF0 = null;\n\n\t\t/**\n\t\t * The iridescence F0 dielectric.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.iridescenceF0Dielectric = null;\n\n\t\t/**\n\t\t * The iridescence F0 metallic.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.iridescenceF0Metallic = null;\n\n\t}\n\n\t/**\n\t * Depending on what features are requested, the method prepares certain node variables\n\t * which are later used for lighting computations.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tstart( builder ) {\n\n\t\tif ( this.clearcoat === true ) {\n\n\t\t\tthis.clearcoatRadiance = vec3().toVar( 'clearcoatRadiance' );\n\t\t\tthis.clearcoatSpecularDirect = vec3().toVar( 'clearcoatSpecularDirect' );\n\t\t\tthis.clearcoatSpecularIndirect = vec3().toVar( 'clearcoatSpecularIndirect' );\n\n\t\t}\n\n\t\tif ( this.sheen === true ) {\n\n\t\t\tthis.sheenSpecularDirect = vec3().toVar( 'sheenSpecularDirect' );\n\t\t\tthis.sheenSpecularIndirect = vec3().toVar( 'sheenSpecularIndirect' );\n\n\t\t}\n\n\t\tif ( this.iridescence === true ) {\n\n\t\t\tconst dotNVi = normalView.dot( positionViewDirection ).clamp();\n\n\t\t\tconst iridescenceFresnelDielectric = evalIridescence( {\n\t\t\t\toutsideIOR: float( 1.0 ),\n\t\t\t\teta2: iridescenceIOR,\n\t\t\t\tcosTheta1: dotNVi,\n\t\t\t\tthinFilmThickness: iridescenceThickness,\n\t\t\t\tbaseF0: specularColor\n\t\t\t} );\n\n\t\t\tconst iridescenceFresnelMetallic = evalIridescence( {\n\t\t\t\toutsideIOR: float( 1.0 ),\n\t\t\t\teta2: iridescenceIOR,\n\t\t\t\tcosTheta1: dotNVi,\n\t\t\t\tthinFilmThickness: iridescenceThickness,\n\t\t\t\tbaseF0: diffuseColor.rgb\n\t\t\t} );\n\n\t\t\tthis.iridescenceFresnel = mix( iridescenceFresnelDielectric, iridescenceFresnelMetallic, metalness );\n\n\t\t\tthis.iridescenceF0Dielectric = Schlick_to_F0( { f: iridescenceFresnelDielectric, f90: 1.0, dotVH: dotNVi } );\n\t\t\tthis.iridescenceF0Metallic = Schlick_to_F0( { f: iridescenceFresnelMetallic, f90: 1.0, dotVH: dotNVi } );\n\n\t\t\tthis.iridescenceF0 = mix( this.iridescenceF0Dielectric, this.iridescenceF0Metallic, metalness );\n\n\t\t}\n\n\t\tif ( this.transmission === true ) {\n\n\t\t\tconst position = positionWorld;\n\t\t\tconst v = cameraPosition.sub( positionWorld ).normalize(); // TODO: Create Node for this, same issue in MaterialX\n\t\t\tconst n = normalWorld;\n\n\t\t\tconst context = builder.context;\n\n\t\t\tcontext.backdrop = getIBLVolumeRefraction(\n\t\t\t\tn,\n\t\t\t\tv,\n\t\t\t\troughness,\n\t\t\t\tdiffuseContribution,\n\t\t\t\tspecularColorBlended,\n\t\t\t\tspecularF90, // specularF90\n\t\t\t\tposition, // positionWorld\n\t\t\t\tmodelWorldMatrix, // modelMatrix\n\t\t\t\tcameraViewMatrix, // viewMatrix\n\t\t\t\tcameraProjectionMatrix, // projMatrix\n\t\t\t\tior,\n\t\t\t\tthickness,\n\t\t\t\tattenuationColor,\n\t\t\t\tattenuationDistance,\n\t\t\t\tthis.dispersion ? dispersion : null\n\t\t\t);\n\n\t\t\tcontext.backdropAlpha = transmission;\n\n\t\t\tdiffuseColor.a.mulAssign( mix( 1, context.backdrop.a, transmission ) );\n\n\t\t}\n\n\t\tsuper.start( builder );\n\n\t}\n\n\t// Fdez-Agüera's \"Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting\"\n\t// Approximates multi-scattering in order to preserve energy.\n\t// http://www.jcgt.org/published/0008/01/03/\n\n\tcomputeMultiscattering( singleScatter, multiScatter, specularF90, f0, iridescenceF0 = null ) {\n\n\t\tconst dotNV = normalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV\n\n\t\tconst fab = DFGLUT( { roughness, dotNV } );\n\n\t\tconst Fr = iridescenceF0 ? iridescence.mix( f0, iridescenceF0 ) : f0;\n\n\t\tconst FssEss = Fr.mul( fab.x ).add( specularF90.mul( fab.y ) );\n\n\t\tconst Ess = fab.x.add( fab.y );\n\t\tconst Ems = Ess.oneMinus();\n\n\t\tconst Favg = Fr.add( Fr.oneMinus().mul( 0.047619 ) ); // 1/21\n\t\tconst Fms = FssEss.mul( Favg ).div( Ems.mul( Favg ).oneMinus() );\n\n\t\tsingleScatter.addAssign( FssEss );\n\t\tmultiScatter.addAssign( Fms.mul( Ems ) );\n\n\t}\n\n\t/**\n\t * Implements the direct light.\n\t *\n\t * @param {Object} lightData - The light data.\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tdirect( { lightDirection, lightColor, reflectedLight }, /* builder */ ) {\n\n\t\tconst dotNL = normalView.dot( lightDirection ).clamp();\n\t\tconst irradiance = dotNL.mul( lightColor ).toVar();\n\n\t\tif ( this.sheen === true ) {\n\n\t\t\tthis.sheenSpecularDirect.addAssign( irradiance.mul( BRDF_Sheen( { lightDirection } ) ) );\n\n\t\t\tconst sheenAlbedoV = IBLSheenBRDF( { normal: normalView, viewDir: positionViewDirection, roughness: sheenRoughness } );\n\t\t\tconst sheenAlbedoL = IBLSheenBRDF( { normal: normalView, viewDir: lightDirection, roughness: sheenRoughness } );\n\n\t\t\tconst sheenEnergyComp = sheen.r.max( sheen.g ).max( sheen.b ).mul( sheenAlbedoV.max( sheenAlbedoL ) ).oneMinus();\n\n\t\t\tirradiance.mulAssign( sheenEnergyComp );\n\n\t\t}\n\n\t\tif ( this.clearcoat === true ) {\n\n\t\t\tconst dotNLcc = clearcoatNormalView.dot( lightDirection ).clamp();\n\t\t\tconst ccIrradiance = dotNLcc.mul( lightColor );\n\n\t\t\tthis.clearcoatSpecularDirect.addAssign( ccIrradiance.mul( BRDF_GGX( { lightDirection, f0: clearcoatF0, f90: clearcoatF90, roughness: clearcoatRoughness, normalView: clearcoatNormalView } ) ) );\n\n\t\t}\n\n\t\treflectedLight.directDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseContribution } ) ) );\n\n\t\treflectedLight.directSpecular.addAssign( irradiance.mul( BRDF_GGX_Multiscatter( { lightDirection, f0: specularColorBlended, f90: 1, roughness, f: this.iridescenceFresnel, USE_IRIDESCENCE: this.iridescence, USE_ANISOTROPY: this.anisotropy } ) ) );\n\n\t}\n\n\t/**\n\t * This method is intended for implementing the direct light term for\n\t * rect area light nodes.\n\t *\n\t * @param {Object} input - The input data.\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tdirectRectArea( { lightColor, lightPosition, halfWidth, halfHeight, reflectedLight, ltc_1, ltc_2 }, /* builder */ ) {\n\n\t\tconst p0 = lightPosition.add( halfWidth ).sub( halfHeight ); // counterclockwise; light shines in local neg z direction\n\t\tconst p1 = lightPosition.sub( halfWidth ).sub( halfHeight );\n\t\tconst p2 = lightPosition.sub( halfWidth ).add( halfHeight );\n\t\tconst p3 = lightPosition.add( halfWidth ).add( halfHeight );\n\n\t\tconst N = normalView;\n\t\tconst V = positionViewDirection;\n\t\tconst P = positionView.toVar();\n\n\t\tconst uv = LTC_Uv( { N, V, roughness } );\n\n\t\tconst t1 = ltc_1.sample( uv ).toVar();\n\t\tconst t2 = ltc_2.sample( uv ).toVar();\n\n\t\tconst mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t).toVar();\n\n\t\t// LTC Fresnel Approximation by Stephen Hill\n\t\t// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf\n\t\tconst fresnel = specularColorBlended.mul( t2.x ).add( specularF90.sub( specularColorBlended ).mul( t2.y ) ).toVar();\n\n\t\treflectedLight.directSpecular.addAssign( lightColor.mul( fresnel ).mul( LTC_Evaluate( { N, V, P, mInv, p0, p1, p2, p3 } ) ) );\n\n\t\treflectedLight.directDiffuse.addAssign( lightColor.mul( diffuseContribution ).mul( LTC_Evaluate( { N, V, P, mInv: mat3( 1, 0, 0, 0, 1, 0, 0, 0, 1 ), p0, p1, p2, p3 } ) ) );\n\n\t\tif ( this.clearcoat === true ) {\n\n\t\t\tconst Ncc = clearcoatNormalView;\n\n\t\t\tconst uvClearcoat = LTC_Uv( { N: Ncc, V, roughness: clearcoatRoughness } );\n\n\t\t\tconst t1Clearcoat = ltc_1.sample( uvClearcoat );\n\t\t\tconst t2Clearcoat = ltc_2.sample( uvClearcoat );\n\n\t\t\tconst mInvClearcoat = mat3(\n\t\t\t\tvec3( t1Clearcoat.x, 0, t1Clearcoat.y ),\n\t\t\t\tvec3( 0, 1, 0 ),\n\t\t\t\tvec3( t1Clearcoat.z, 0, t1Clearcoat.w )\n\t\t\t);\n\n\t\t\t// LTC Fresnel Approximation for clearcoat\n\t\t\tconst fresnelClearcoat = clearcoatF0.mul( t2Clearcoat.x ).add( clearcoatF90.sub( clearcoatF0 ).mul( t2Clearcoat.y ) );\n\n\t\t\tthis.clearcoatSpecularDirect.addAssign( lightColor.mul( fresnelClearcoat ).mul( LTC_Evaluate( { N: Ncc, V, P, mInv: mInvClearcoat, p0, p1, p2, p3 } ) ) );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Implements the indirect lighting.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tindirect( builder ) {\n\n\t\tthis.indirectDiffuse( builder );\n\t\tthis.indirectSpecular( builder );\n\t\tthis.ambientOcclusion( builder );\n\n\t}\n\n\t/**\n\t * Implements the indirect diffuse term.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tindirectDiffuse( builder ) {\n\n\t\tconst { irradiance, reflectedLight } = builder.context;\n\n\t\tconst diffuse = irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseContribution } ) ).toVar();\n\n\t\tif ( this.sheen === true ) {\n\n\t\t\tconst sheenAlbedo = IBLSheenBRDF( { normal: normalView, viewDir: positionViewDirection, roughness: sheenRoughness } );\n\n\t\t\tconst sheenEnergyComp = sheen.r.max( sheen.g ).max( sheen.b ).mul( sheenAlbedo ).oneMinus();\n\n\t\t\tdiffuse.mulAssign( sheenEnergyComp );\n\n\t\t}\n\n\t\treflectedLight.indirectDiffuse.addAssign( diffuse );\n\n\t}\n\n\t/**\n\t * Implements the indirect specular term.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tindirectSpecular( builder ) {\n\n\t\tconst { radiance, iblIrradiance, reflectedLight } = builder.context;\n\n\t\tif ( this.sheen === true ) {\n\n\t\t\tthis.sheenSpecularIndirect.addAssign( iblIrradiance.mul(\n\t\t\t\tsheen,\n\t\t\t\tIBLSheenBRDF( {\n\t\t\t\t\tnormal: normalView,\n\t\t\t\t\tviewDir: positionViewDirection,\n\t\t\t\t\troughness: sheenRoughness\n\t\t\t\t} )\n\t\t\t) );\n\n\t\t}\n\n\t\tif ( this.clearcoat === true ) {\n\n\t\t\tconst dotNVcc = clearcoatNormalView.dot( positionViewDirection ).clamp();\n\n\t\t\tconst clearcoatEnv = EnvironmentBRDF( {\n\t\t\t\tdotNV: dotNVcc,\n\t\t\t\tspecularColor: clearcoatF0,\n\t\t\t\tspecularF90: clearcoatF90,\n\t\t\t\troughness: clearcoatRoughness\n\t\t\t} );\n\n\t\t\tthis.clearcoatSpecularIndirect.addAssign( this.clearcoatRadiance.mul( clearcoatEnv ) );\n\n\t\t}\n\n\t\t// Both indirect specular and indirect diffuse light accumulate here\n\t\t// Compute multiscattering separately for dielectric and metallic, then mix\n\n\t\tconst singleScatteringDielectric = vec3().toVar( 'singleScatteringDielectric' );\n\t\tconst multiScatteringDielectric = vec3().toVar( 'multiScatteringDielectric' );\n\t\tconst singleScatteringMetallic = vec3().toVar( 'singleScatteringMetallic' );\n\t\tconst multiScatteringMetallic = vec3().toVar( 'multiScatteringMetallic' );\n\n\t\tthis.computeMultiscattering( singleScatteringDielectric, multiScatteringDielectric, specularF90, specularColor, this.iridescenceF0Dielectric );\n\t\tthis.computeMultiscattering( singleScatteringMetallic, multiScatteringMetallic, specularF90, diffuseColor.rgb, this.iridescenceF0Metallic );\n\n\t\t// Mix based on metalness\n\t\tconst singleScattering = mix( singleScatteringDielectric, singleScatteringMetallic, metalness );\n\t\tconst multiScattering = mix( multiScatteringDielectric, multiScatteringMetallic, metalness );\n\n\t\t// Diffuse energy conservation uses dielectric path\n\t\tconst totalScatteringDielectric = singleScatteringDielectric.add( multiScatteringDielectric );\n\n\t\tconst diffuse = diffuseContribution.mul( totalScatteringDielectric.oneMinus() );\n\n\t\tconst cosineWeightedIrradiance = iblIrradiance.mul( 1 / Math.PI );\n\n\t\tconst indirectSpecular = radiance.mul( singleScattering ).add( multiScattering.mul( cosineWeightedIrradiance ) ).toVar();\n\t\tconst indirectDiffuse = diffuse.mul( cosineWeightedIrradiance ).toVar();\n\n\t\tif ( this.sheen === true ) {\n\n\t\t\tconst sheenAlbedo = IBLSheenBRDF( { normal: normalView, viewDir: positionViewDirection, roughness: sheenRoughness } );\n\n\t\t\tconst sheenEnergyComp = sheen.r.max( sheen.g ).max( sheen.b ).mul( sheenAlbedo ).oneMinus();\n\n\t\t\tindirectSpecular.mulAssign( sheenEnergyComp );\n\t\t\tindirectDiffuse.mulAssign( sheenEnergyComp );\n\n\t\t}\n\n\t\treflectedLight.indirectSpecular.addAssign( indirectSpecular );\n\n\t\treflectedLight.indirectDiffuse.addAssign( indirectDiffuse );\n\n\t}\n\n\t/**\n\t * Implements the ambient occlusion term.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tambientOcclusion( builder ) {\n\n\t\tconst { ambientOcclusion, reflectedLight } = builder.context;\n\n\t\tconst dotNV = normalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV\n\n\t\tconst aoNV = dotNV.add( ambientOcclusion );\n\t\tconst aoExp = roughness.mul( -16 ).oneMinus().negate().exp2();\n\n\t\tconst aoNode = ambientOcclusion.sub( aoNV.pow( aoExp ).oneMinus() ).clamp();\n\n\t\tif ( this.clearcoat === true ) {\n\n\t\t\tthis.clearcoatSpecularIndirect.mulAssign( ambientOcclusion );\n\n\t\t}\n\n\t\tif ( this.sheen === true ) {\n\n\t\t\tthis.sheenSpecularIndirect.mulAssign( ambientOcclusion );\n\n\t\t}\n\n\t\treflectedLight.indirectDiffuse.mulAssign( ambientOcclusion );\n\t\treflectedLight.indirectSpecular.mulAssign( aoNode );\n\n\t}\n\n\t/**\n\t * Used for final lighting accumulations depending on the requested features.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tfinish( { context } ) {\n\n\t\tconst { outgoingLight } = context;\n\n\t\tif ( this.clearcoat === true ) {\n\n\t\t\tconst dotNVcc = clearcoatNormalView.dot( positionViewDirection ).clamp();\n\n\t\t\tconst Fcc = F_Schlick( {\n\t\t\t\tdotVH: dotNVcc,\n\t\t\t\tf0: clearcoatF0,\n\t\t\t\tf90: clearcoatF90\n\t\t\t} );\n\n\t\t\tconst clearcoatLight = outgoingLight.mul( clearcoat.mul( Fcc ).oneMinus() ).add( this.clearcoatSpecularDirect.add( this.clearcoatSpecularIndirect ).mul( clearcoat ) );\n\n\t\t\toutgoingLight.assign( clearcoatLight );\n\n\t\t}\n\n\t\tif ( this.sheen === true ) {\n\n\t\t\tconst sheenLight = outgoingLight.add( this.sheenSpecularDirect, this.sheenSpecularIndirect.mul( 1.0 / Math.PI ) );\n\n\t\t\toutgoingLight.assign( sheenLight );\n\n\t\t}\n\n\t}\n\n}\n\n// These defines must match with PMREMGenerator\n\nconst cubeUV_r0 = /*@__PURE__*/ float( 1.0 );\nconst cubeUV_m0 = /*@__PURE__*/ float( -2 );\nconst cubeUV_r1 = /*@__PURE__*/ float( 0.8 );\nconst cubeUV_m1 = /*@__PURE__*/ float( -1 );\nconst cubeUV_r4 = /*@__PURE__*/ float( 0.4 );\nconst cubeUV_m4 = /*@__PURE__*/ float( 2.0 );\nconst cubeUV_r5 = /*@__PURE__*/ float( 0.305 );\nconst cubeUV_m5 = /*@__PURE__*/ float( 3.0 );\nconst cubeUV_r6 = /*@__PURE__*/ float( 0.21 );\nconst cubeUV_m6 = /*@__PURE__*/ float( 4.0 );\n\nconst cubeUV_minMipLevel = /*@__PURE__*/ float( 4.0 );\nconst cubeUV_minTileSize = /*@__PURE__*/ float( 16.0 );\n\n// These shader functions convert between the UV coordinates of a single face of\n// a cubemap, the 0-5 integer index of a cube face, and the direction vector for\n// sampling a textureCube (not generally normalized ).\n\nconst getFace = /*@__PURE__*/ Fn( ( [ direction ] ) => {\n\n\tconst absDirection = vec3( abs( direction ) ).toVar();\n\tconst face = float( -1 ).toVar();\n\n\tIf( absDirection.x.greaterThan( absDirection.z ), () => {\n\n\t\tIf( absDirection.x.greaterThan( absDirection.y ), () => {\n\n\t\t\tface.assign( select( direction.x.greaterThan( 0.0 ), 0.0, 3.0 ) );\n\n\t\t} ).Else( () => {\n\n\t\t\tface.assign( select( direction.y.greaterThan( 0.0 ), 1.0, 4.0 ) );\n\n\t\t} );\n\n\t} ).Else( () => {\n\n\t\tIf( absDirection.z.greaterThan( absDirection.y ), () => {\n\n\t\t\tface.assign( select( direction.z.greaterThan( 0.0 ), 2.0, 5.0 ) );\n\n\t\t} ).Else( () => {\n\n\t\t\tface.assign( select( direction.y.greaterThan( 0.0 ), 1.0, 4.0 ) );\n\n\t\t} );\n\n\t} );\n\n\treturn face;\n\n} ).setLayout( {\n\tname: 'getFace',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'direction', type: 'vec3' }\n\t]\n} );\n\n// RH coordinate system; PMREM face-indexing convention\nconst getUV = /*@__PURE__*/ Fn( ( [ direction, face ] ) => {\n\n\tconst uv = vec2().toVar();\n\n\tIf( face.equal( 0.0 ), () => {\n\n\t\tuv.assign( vec2( direction.z, direction.y ).div( abs( direction.x ) ) ); // pos x\n\n\t} ).ElseIf( face.equal( 1.0 ), () => {\n\n\t\tuv.assign( vec2( direction.x.negate(), direction.z.negate() ).div( abs( direction.y ) ) ); // pos y\n\n\t} ).ElseIf( face.equal( 2.0 ), () => {\n\n\t\tuv.assign( vec2( direction.x.negate(), direction.y ).div( abs( direction.z ) ) ); // pos z\n\n\t} ).ElseIf( face.equal( 3.0 ), () => {\n\n\t\tuv.assign( vec2( direction.z.negate(), direction.y ).div( abs( direction.x ) ) ); // neg x\n\n\t} ).ElseIf( face.equal( 4.0 ), () => {\n\n\t\tuv.assign( vec2( direction.x.negate(), direction.z ).div( abs( direction.y ) ) ); // neg y\n\n\t} ).Else( () => {\n\n\t\tuv.assign( vec2( direction.x, direction.y ).div( abs( direction.z ) ) ); // neg z\n\n\t} );\n\n\treturn mul( 0.5, uv.add( 1.0 ) );\n\n} ).setLayout( {\n\tname: 'getUV',\n\ttype: 'vec2',\n\tinputs: [\n\t\t{ name: 'direction', type: 'vec3' },\n\t\t{ name: 'face', type: 'float' }\n\t]\n} );\n\nconst roughnessToMip = /*@__PURE__*/ Fn( ( [ roughness ] ) => {\n\n\tconst mip = float( 0.0 ).toVar();\n\n\tIf( roughness.greaterThanEqual( cubeUV_r1 ), () => {\n\n\t\tmip.assign( cubeUV_r0.sub( roughness ).mul( cubeUV_m1.sub( cubeUV_m0 ) ).div( cubeUV_r0.sub( cubeUV_r1 ) ).add( cubeUV_m0 ) );\n\n\t} ).ElseIf( roughness.greaterThanEqual( cubeUV_r4 ), () => {\n\n\t\tmip.assign( cubeUV_r1.sub( roughness ).mul( cubeUV_m4.sub( cubeUV_m1 ) ).div( cubeUV_r1.sub( cubeUV_r4 ) ).add( cubeUV_m1 ) );\n\n\t} ).ElseIf( roughness.greaterThanEqual( cubeUV_r5 ), () => {\n\n\t\tmip.assign( cubeUV_r4.sub( roughness ).mul( cubeUV_m5.sub( cubeUV_m4 ) ).div( cubeUV_r4.sub( cubeUV_r5 ) ).add( cubeUV_m4 ) );\n\n\t} ).ElseIf( roughness.greaterThanEqual( cubeUV_r6 ), () => {\n\n\t\tmip.assign( cubeUV_r5.sub( roughness ).mul( cubeUV_m6.sub( cubeUV_m5 ) ).div( cubeUV_r5.sub( cubeUV_r6 ) ).add( cubeUV_m5 ) );\n\n\t} ).Else( () => {\n\n\t\tmip.assign( float( -2 ).mul( log2( mul( 1.16, roughness ) ) ) ); // 1.16 = 1.79^0.25\n\n\t} );\n\n\treturn mip;\n\n} ).setLayout( {\n\tname: 'roughnessToMip',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'roughness', type: 'float' }\n\t]\n} );\n\n// RH coordinate system; PMREM face-indexing convention\nconst getDirection = /*@__PURE__*/ Fn( ( [ uv_immutable, face ] ) => {\n\n\tconst uv = uv_immutable.toVar();\n\tuv.assign( mul( 2.0, uv ).sub( 1.0 ) );\n\tconst direction = vec3( uv, 1.0 ).toVar();\n\n\tIf( face.equal( 0.0 ), () => {\n\n\t\tdirection.assign( direction.zyx ); // ( 1, v, u ) pos x\n\n\t} ).ElseIf( face.equal( 1.0 ), () => {\n\n\t\tdirection.assign( direction.xzy );\n\t\tdirection.xz.mulAssign( -1 ); // ( -u, 1, -v ) pos y\n\n\t} ).ElseIf( face.equal( 2.0 ), () => {\n\n\t\tdirection.x.mulAssign( -1 ); // ( -u, v, 1 ) pos z\n\n\t} ).ElseIf( face.equal( 3.0 ), () => {\n\n\t\tdirection.assign( direction.zyx );\n\t\tdirection.xz.mulAssign( -1 ); // ( -1, v, -u ) neg x\n\n\t} ).ElseIf( face.equal( 4.0 ), () => {\n\n\t\tdirection.assign( direction.xzy );\n\t\tdirection.xy.mulAssign( -1 ); // ( -u, -1, v ) neg y\n\n\t} ).ElseIf( face.equal( 5.0 ), () => {\n\n\t\tdirection.z.mulAssign( -1 ); // ( u, v, -1 ) neg zS\n\n\t} );\n\n\treturn direction;\n\n} ).setLayout( {\n\tname: 'getDirection',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'uv', type: 'vec2' },\n\t\t{ name: 'face', type: 'float' }\n\t]\n} );\n\n//\n\nconst textureCubeUV = /*@__PURE__*/ Fn( ( [ envMap, sampleDir_immutable, roughness_immutable, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP ] ) => {\n\n\tconst roughness = float( roughness_immutable );\n\tconst sampleDir = vec3( sampleDir_immutable );\n\n\tconst mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\tconst mipF = fract( mip );\n\tconst mipInt = floor( mip );\n\tconst color0 = vec3( bilinearCubeUV( envMap, sampleDir, mipInt, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP ) ).toVar();\n\n\tIf( mipF.notEqual( 0.0 ), () => {\n\n\t\tconst color1 = vec3( bilinearCubeUV( envMap, sampleDir, mipInt.add( 1.0 ), CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP ) ).toVar();\n\n\t\tcolor0.assign( mix( color0, color1, mipF ) );\n\n\t} );\n\n\treturn color0;\n\n} );\n\nconst bilinearCubeUV = /*@__PURE__*/ Fn( ( [ envMap, direction_immutable, mipInt_immutable, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP ] ) => {\n\n\tconst mipInt = float( mipInt_immutable ).toVar();\n\tconst direction = vec3( direction_immutable );\n\tconst face = float( getFace( direction ) ).toVar();\n\tconst filterInt = float( max$1( cubeUV_minMipLevel.sub( mipInt ), 0.0 ) ).toVar();\n\tmipInt.assign( max$1( mipInt, cubeUV_minMipLevel ) );\n\tconst faceSize = float( exp2( mipInt ) ).toVar();\n\tconst uv = vec2( getUV( direction, face ).mul( faceSize.sub( 2.0 ) ).add( 1.0 ) ).toVar();\n\n\tIf( face.greaterThan( 2.0 ), () => {\n\n\t\tuv.y.addAssign( faceSize );\n\t\tface.subAssign( 3.0 );\n\n\t} );\n\n\tuv.x.addAssign( face.mul( faceSize ) );\n\tuv.x.addAssign( filterInt.mul( mul( 3.0, cubeUV_minTileSize ) ) );\n\tuv.y.addAssign( mul( 4.0, exp2( CUBEUV_MAX_MIP ).sub( faceSize ) ) );\n\tuv.x.mulAssign( CUBEUV_TEXEL_WIDTH );\n\tuv.y.mulAssign( CUBEUV_TEXEL_HEIGHT );\n\n\treturn envMap.sample( uv ).grad( vec2(), vec2() ); // disable anisotropic filtering\n\n} );\n\nconst getSample = /*@__PURE__*/ Fn( ( { envMap, mipInt, outputDirection, theta, axis, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) => {\n\n\tconst cosTheta = cos( theta );\n\n\t// Rodrigues' axis-angle rotation\n\tconst sampleDirection = outputDirection.mul( cosTheta )\n\t\t.add( axis.cross( outputDirection ).mul( sin( theta ) ) )\n\t\t.add( axis.mul( axis.dot( outputDirection ).mul( cosTheta.oneMinus() ) ) );\n\n\treturn bilinearCubeUV( envMap, sampleDirection, mipInt, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP );\n\n} );\n\nconst blur = /*@__PURE__*/ Fn( ( { n, latitudinal, poleAxis, outputDirection, weights, samples, dTheta, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) => {\n\n\tconst axis = vec3( select( latitudinal, poleAxis, cross( poleAxis, outputDirection ) ) ).toVar();\n\n\tIf( axis.equal( vec3( 0.0 ) ), () => {\n\n\t\taxis.assign( vec3( outputDirection.z, 0.0, outputDirection.x.negate() ) );\n\n\t} );\n\n\taxis.assign( normalize( axis ) );\n\n\tconst gl_FragColor = vec3().toVar();\n\tgl_FragColor.addAssign( weights.element( 0 ).mul( getSample( { theta: 0.0, axis, outputDirection, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) ) );\n\n\tLoop( { start: int( 1 ), end: n }, ( { i } ) => {\n\n\t\tIf( i.greaterThanEqual( samples ), () => {\n\n\t\t\tBreak();\n\n\t\t} );\n\n\t\tconst theta = float( dTheta.mul( float( i ) ) ).toVar();\n\t\tgl_FragColor.addAssign( weights.element( i ).mul( getSample( { theta: theta.mul( -1 ), axis, outputDirection, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) ) );\n\t\tgl_FragColor.addAssign( weights.element( i ).mul( getSample( { theta, axis, outputDirection, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) ) );\n\n\t} );\n\n\treturn vec4( gl_FragColor, 1 );\n\n} );\n\n// GGX VNDF importance sampling functions\n\n// Van der Corput radical inverse for generating quasi-random sequences\nconst radicalInverse_VdC = /*@__PURE__*/ Fn( ( [ bits_immutable ] ) => {\n\n\tconst bits = uint( bits_immutable ).toVar();\n\tbits.assign( bits.shiftLeft( uint( 16 ) ).bitOr( bits.shiftRight( uint( 16 ) ) ) );\n\tbits.assign( bits.bitAnd( uint( 0x55555555 ) ).shiftLeft( uint( 1 ) ).bitOr( bits.bitAnd( uint( 0xAAAAAAAA ) ).shiftRight( uint( 1 ) ) ) );\n\tbits.assign( bits.bitAnd( uint( 0x33333333 ) ).shiftLeft( uint( 2 ) ).bitOr( bits.bitAnd( uint( 0xCCCCCCCC ) ).shiftRight( uint( 2 ) ) ) );\n\tbits.assign( bits.bitAnd( uint( 0x0F0F0F0F ) ).shiftLeft( uint( 4 ) ).bitOr( bits.bitAnd( uint( 0xF0F0F0F0 ) ).shiftRight( uint( 4 ) ) ) );\n\tbits.assign( bits.bitAnd( uint( 0x00FF00FF ) ).shiftLeft( uint( 8 ) ).bitOr( bits.bitAnd( uint( 0xFF00FF00 ) ).shiftRight( uint( 8 ) ) ) );\n\treturn float( bits ).mul( 2.3283064365386963e-10 ); // / 0x100000000\n\n} );\n\n// Hammersley sequence for quasi-Monte Carlo sampling\nconst hammersley = /*@__PURE__*/ Fn( ( [ i, N ] ) => {\n\n\treturn vec2( float( i ).div( float( N ) ), radicalInverse_VdC( i ) );\n\n} );\n\n// GGX VNDF importance sampling (Eric Heitz 2018)\n// \"Sampling the GGX Distribution of Visible Normals\"\n// https://jcgt.org/published/0007/04/01/\nconst importanceSampleGGX_VNDF = /*@__PURE__*/ Fn( ( [ Xi, V, roughness ] ) => {\n\n\tconst alpha = roughness.mul( roughness ).toConst();\n\n\t// Section 4.1: Orthonormal basis\n\tconst T1 = vec3( 1.0, 0.0, 0.0 ).toConst();\n\tconst T2 = cross( V, T1 ).toConst();\n\n\t// Section 4.2: Parameterization of projected area\n\tconst r = sqrt( Xi.x ).toConst();\n\tconst phi = mul( 2.0, 3.14159265359 ).mul( Xi.y ).toConst();\n\tconst t1 = r.mul( cos( phi ) ).toConst();\n\tconst t2 = r.mul( sin( phi ) ).toVar();\n\tconst s = mul( 0.5, V.z.add( 1.0 ) ).toConst();\n\tt2.assign( s.oneMinus().mul( sqrt( t1.mul( t1 ).oneMinus() ) ).add( s.mul( t2 ) ) );\n\n\t// Section 4.3: Reprojection onto hemisphere\n\tconst Nh = T1.mul( t1 ).add( T2.mul( t2 ) ).add( V.mul( sqrt( max$1( 0.0, t1.mul( t1 ).add( t2.mul( t2 ) ).oneMinus() ) ) ) );\n\n\t// Section 3.4: Transform back to ellipsoid configuration\n\treturn normalize( vec3( alpha.mul( Nh.x ), alpha.mul( Nh.y ), max$1( 0.0, Nh.z ) ) );\n\n} );\n\n// GGX convolution using VNDF importance sampling\nconst ggxConvolution = /*@__PURE__*/ Fn( ( { roughness, mipInt, envMap, N_immutable, GGX_SAMPLES, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) => {\n\n\tconst N = vec3( N_immutable ).toVar();\n\n\tconst prefilteredColor = vec3( 0.0 ).toVar();\n\tconst totalWeight = float( 0.0 ).toVar();\n\n\t// For very low roughness, just sample the environment directly\n\tIf( roughness.lessThan( 0.001 ), () => {\n\n\t\tprefilteredColor.assign( bilinearCubeUV( envMap, N, mipInt, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP ) );\n\n\t} ).Else( () => {\n\n\t\t// Tangent space basis for VNDF sampling\n\t\tconst up = select( abs( N.z ).lessThan( 0.999 ), vec3( 0.0, 0.0, 1.0 ), vec3( 1.0, 0.0, 0.0 ) );\n\t\tconst tangent = normalize( cross( up, N ) ).toVar();\n\t\tconst bitangent = cross( N, tangent ).toVar();\n\n\t\tLoop( { start: uint( 0 ), end: GGX_SAMPLES }, ( { i } ) => {\n\n\t\t\tconst Xi = hammersley( i, GGX_SAMPLES );\n\n\t\t\t// For PMREM, V = N, so in tangent space V is always (0, 0, 1)\n\t\t\tconst H_tangent = importanceSampleGGX_VNDF( Xi, vec3( 0.0, 0.0, 1.0 ), roughness );\n\n\t\t\t// Transform H back to world space\n\t\t\tconst H = normalize( tangent.mul( H_tangent.x ).add( bitangent.mul( H_tangent.y ) ).add( N.mul( H_tangent.z ) ) );\n\t\t\tconst L = normalize( H.mul( dot( N, H ).mul( 2.0 ) ).sub( N ) );\n\n\t\t\tconst NdotL = max$1( dot( N, L ), 0.0 );\n\n\t\t\tIf( NdotL.greaterThan( 0.0 ), () => {\n\n\t\t\t\t// Sample environment at fixed mip level\n\t\t\t\t// VNDF importance sampling handles the distribution filtering\n\t\t\t\tconst sampleColor = bilinearCubeUV( envMap, L, mipInt, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP );\n\n\t\t\t\t// Weight by NdotL for the split-sum approximation\n\t\t\t\t// VNDF PDF naturally accounts for the visible microfacet distribution\n\t\t\t\tprefilteredColor.addAssign( sampleColor.mul( NdotL ) );\n\t\t\t\ttotalWeight.addAssign( NdotL );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\tIf( totalWeight.greaterThan( 0.0 ), () => {\n\n\t\t\tprefilteredColor.assign( prefilteredColor.div( totalWeight ) );\n\n\t\t} );\n\n\t} );\n\n\treturn vec4( prefilteredColor, 1.0 );\n\n} );\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips.\n// Used for scene blur in fromScene() method.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\n// Used for scene blur in fromScene() method.\nconst MAX_SAMPLES = 20;\n\n// GGX VNDF importance sampling configuration\nconst GGX_SAMPLES = 512;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera( -1, 1, 1, -1, 0, 1 );\nconst _cubeCamera = /*@__PURE__*/ new PerspectiveCamera( 90, 1 );\nconst _clearColor$2 = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\nlet _oldActiveCubeFace = 0;\nlet _oldActiveMipmapLevel = 0;\n\nconst _origin = /*@__PURE__*/ new Vector3();\n\n// maps blur materials to their uniforms dictionary\n\nconst _uniformsMap = new WeakMap();\n\n// WebGPU Face indices\nconst _faceLib = [\n\t3, 1, 5,\n\t0, 4, 2\n];\n\nconst _direction = /*@__PURE__*/ getDirection( uv$1(), attribute( 'faceIndex' ) ).normalize();\nconst _outputDirection = /*@__PURE__*/ vec3( _direction.x, _direction.y, _direction.z );\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * The prefiltering uses GGX VNDF (Visible Normal Distribution Function)\n * importance sampling based on \"Sampling the GGX Distribution of Visible Normals\"\n * (Heitz, 2018) to generate environment maps that accurately match the GGX BRDF\n * used in material rendering for physically-based image-based lighting.\n */\nclass PMREMGenerator {\n\n\t/**\n\t * Constructs a new PMREM generator.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t */\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\t\tthis._lodMeshes = [];\n\n\t\tthis._blurMaterial = null;\n\t\tthis._ggxMaterial = null;\n\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\t\tthis._backgroundBox = null;\n\n\t}\n\n\tget _hasInitialized() {\n\n\t\treturn this._renderer.hasInitialized();\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety.\n\t *\n\t * @param {Scene} scene - The scene to be captured.\n\t * @param {number} [sigma=0] - The blur radius in radians.\n\t * @param {number} [near=0.1] - The near plane distance.\n\t * @param {number} [far=100] - The far plane distance.\n\t * @param {Object} [options={}] - The configuration options.\n\t * @param {number} [options.size=256] - The texture size of the PMREM.\n\t * @param {Vector3} [options.renderTarget=origin] - The position of the internal cube camera that renders the scene.\n\t * @param {?RenderTarget} [options.renderTarget=null] - The render target to use.\n\t * @return {RenderTarget} The resulting PMREM.\n\t * @see {@link PMREMGenerator#fromScene}\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {\n\n\t\tconst {\n\t\t\tsize = 256,\n\t\t\tposition = _origin,\n\t\t\trenderTarget = null,\n\t\t} = options;\n\n\t\tthis._setSize( size );\n\n\t\tif ( this._hasInitialized === false ) {\n\n\t\t\twarn( 'PMREMGenerator: \".fromScene()\" called before the backend is initialized. Try using \"await renderer.init()\" instead.' );\n\n\t\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTarget();\n\n\t\t\toptions.renderTarget = cubeUVRenderTarget;\n\n\t\t\tthis.fromSceneAsync( scene, sigma, near, far, options );\n\n\t\t\treturn cubeUVRenderTarget;\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTarget();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._init( cubeUVRenderTarget );\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t *\n\t * @deprecated\n\t * @param {Scene} scene - The scene to be captured.\n\t * @param {number} [sigma=0] - The blur radius in radians.\n\t * @param {number} [near=0.1] - The near plane distance.\n\t * @param {number} [far=100] - The far plane distance.\n\t * @param {Object} [options={}] - The configuration options.\n\t * @param {number} [options.size=256] - The texture size of the PMREM.\n\t * @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.\n\t * @param {?RenderTarget} [options.renderTarget=null] - The render target to use.\n\t * @return {Promise<RenderTarget>} A Promise that resolve with the PMREM when the generation has been finished.\n\t * @see {@link PMREMGenerator#fromScene}\n\t */\n\tasync fromSceneAsync( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {\n\n\t\twarnOnce( 'PMREMGenerator: \".fromSceneAsync()\" is deprecated. Use \"await renderer.init()\" instead.' ); // @deprecated r181\n\n\t\tawait this._renderer.init();\n\n\t\treturn this.fromScene( scene, sigma, near, far, options );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t *\n\t * @param {Texture} equirectangular - The equirectangular texture to be converted.\n\t * @param {?RenderTarget} [renderTarget=null] - The render target to use.\n\t * @return {RenderTarget} The resulting PMREM.\n\t * @see {@link PMREMGenerator#fromEquirectangularAsync}\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\tif ( this._hasInitialized === false ) {\n\n\t\t\twarn( 'PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using \"await renderer.init()\" instead.' );\n\n\t\t\tthis._setSizeFromTexture( equirectangular );\n\n\t\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTarget();\n\n\t\t\tthis.fromEquirectangularAsync( equirectangular, cubeUVRenderTarget );\n\n\t\t\treturn cubeUVRenderTarget;\n\n\t\t}\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t *\n\t * @deprecated\n\t * @param {Texture} equirectangular - The equirectangular texture to be converted.\n\t * @param {?RenderTarget} [renderTarget=null] - The render target to use.\n\t * @return {Promise<RenderTarget>} The resulting PMREM.\n\t * @see {@link PMREMGenerator#fromEquirectangular}\n\t */\n\tasync fromEquirectangularAsync( equirectangular, renderTarget = null ) {\n\n\t\twarnOnce( 'PMREMGenerator: \".fromEquirectangularAsync()\" is deprecated. Use \"await renderer.init()\" instead.' ); // @deprecated r181\n\n\t\tawait this._renderer.init();\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t *\n\t * @param {Texture} cubemap - The cubemap texture to be converted.\n\t * @param {?RenderTarget} [renderTarget=null] - The render target to use.\n\t * @return {RenderTarget} The resulting PMREM.\n\t * @see {@link PMREMGenerator#fromCubemapAsync}\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\tif ( this._hasInitialized === false ) {\n\n\t\t\twarn( 'PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead.' );\n\n\t\t\tthis._setSizeFromTexture( cubemap );\n\n\t\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTarget();\n\n\t\t\tthis.fromCubemapAsync( cubemap, renderTarget );\n\n\t\t\treturn cubeUVRenderTarget;\n\n\t\t}\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * with the 256 x 256 cubemap output.\n\t *\n\t * @deprecated\n\t * @param {Texture} cubemap - The cubemap texture to be converted.\n\t * @param {?RenderTarget} [renderTarget=null] - The render target to use.\n\t * @return {Promise<RenderTarget>} The resulting PMREM.\n\t * @see {@link PMREMGenerator#fromCubemap}\n\t */\n\tasync fromCubemapAsync( cubemap, renderTarget = null ) {\n\n\t\twarnOnce( 'PMREMGenerator: \".fromCubemapAsync()\" is deprecated. Use \"await renderer.init()\" instead.' ); // @deprecated r181\n\n\t\tawait this._renderer.init();\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t *\n\t * @returns {Promise}\n\t */\n\tasync compileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tawait this._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t *\n\t * @returns {Promise}\n\t */\n\tasync compileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tawait this._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\t\tif ( this._backgroundBox !== null ) {\n\n\t\t\tthis._backgroundBox.geometry.dispose();\n\t\t\tthis._backgroundBox.material.dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_setSizeFromTexture( texture ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t}\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\t\tif ( this._ggxMaterial !== null ) this._ggxMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodMeshes.length; i ++ ) {\n\n\t\t\tthis._lodMeshes[ i ].geometry.dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );\n\t\toutputTarget.scissorTest = false;\n\t\tthis._setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tthis._setSizeFromTexture( texture );\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTarget();\n\t\tthis._init( cubeUVRenderTarget );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTarget() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_init( renderTarget ) {\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== renderTarget.width || this._pingPongRenderTarget.height !== renderTarget.height ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( renderTarget.width, renderTarget.height );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, renderTarget.width, renderTarget.height );\n\t\t\tthis._ggxMaterial = _getGGXShader( _lodMax, renderTarget.width, renderTarget.height );\n\n\t\t}\n\n\t}\n\n\tasync _compileMaterial( material ) {\n\n\t\tconst mesh = new Mesh( new BufferGeometry(), material );\n\t\tawait this._renderer.compile( mesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position ) {\n\n\t\tconst cubeCamera = _cubeCamera;\n\t\tcubeCamera.near = near;\n\t\tcubeCamera.far = far;\n\n\t\t// px, py, pz, nx, ny, nz\n\t\tconst upSign = [ 1, 1, 1, 1, -1, 1 ];\n\t\tconst forwardSign = [ 1, -1, 1, -1, 1, -1 ];\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.getClearColor( _clearColor$2 );\n\n\t\trenderer.autoClear = false;\n\n\t\tif ( this._backgroundBox === null ) {\n\n\t\t\tthis._backgroundBox = new Mesh(\n\t\t\t\tnew BoxGeometry(),\n\t\t\t\tnew MeshBasicMaterial( {\n\t\t\t\t\tname: 'PMREM.Background',\n\t\t\t\t\tside: BackSide,\n\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\tdepthTest: false,\n\t\t\t\t} )\n\t\t\t);\n\n\t\t}\n\n\t\tconst backgroundBox = this._backgroundBox;\n\t\tconst backgroundMaterial = backgroundBox.material;\n\n\t\tlet useSolidColor = false;\n\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor$2 );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\trenderer.clear();\n\n\t\tif ( useSolidColor ) {\n\n\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.position.set( position.x, position.y, position.z );\n\t\t\t\tcubeCamera.lookAt( position.x + forwardSign[ i ], position.y, position.z );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.position.set( position.x, position.y, position.z );\n\t\t\t\tcubeCamera.lookAt( position.x, position.y + forwardSign[ i ], position.z );\n\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.position.set( position.x, position.y, position.z );\n\t\t\t\tcubeCamera.lookAt( position.x, position.y, position.z + forwardSign[ i ] );\n\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\tthis._setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial( texture );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial( texture );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\t\tmaterial.fragmentNode.value = texture;\n\n\t\tconst mesh = this._lodMeshes[ 0 ];\n\t\tmesh.material = material;\n\n\t\tconst size = this._cubeSize;\n\t\tthis._setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tconst n = this._lodMeshes.length;\n\n\t\t// Use GGX VNDF importance sampling\n\t\tfor ( let i = 1; i < n; i ++ ) {\n\n\t\t\tthis._applyGGXFilter( cubeUVRenderTarget, i - 1, i );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * Applies GGX VNDF importance sampling filter to generate a prefiltered environment map.\n\t * Uses Monte Carlo integration with VNDF importance sampling to accurately represent the\n\t * GGX BRDF for physically-based rendering. Reads from the previous LOD level and\n\t * applies incremental roughness filtering to avoid over-blurring.\n\t *\n\t * @private\n\t * @param {RenderTarget} cubeUVRenderTarget\n\t * @param {number} lodIn - Source LOD level to read from\n\t * @param {number} lodOut - Target LOD level to write to\n\t */\n\t_applyGGXFilter( cubeUVRenderTarget, lodIn, lodOut ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tconst ggxMaterial = this._ggxMaterial;\n\t\tconst ggxMesh = this._lodMeshes[ lodOut ];\n\t\tggxMesh.material = ggxMaterial;\n\n\t\tconst ggxUniforms = _uniformsMap.get( ggxMaterial );\n\n\t\t// Calculate incremental roughness between LOD levels\n\t\tconst targetRoughness = lodOut / ( this._lodMeshes.length - 1 );\n\t\tconst sourceRoughness = lodIn / ( this._lodMeshes.length - 1 );\n\t\tconst incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );\n\n\t\t// Apply blur strength mapping for better quality across the roughness range\n\t\tconst blurStrength = 0.0 + targetRoughness * 1.25;\n\t\tconst adjustedRoughness = incrementalRoughness * blurStrength;\n\n\t\t// Calculate viewport position based on output LOD level\n\t\tconst { _lodMax } = this;\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t// Read from previous LOD with incremental roughness\n\t\tcubeUVRenderTarget.texture.frame = ( cubeUVRenderTarget.texture.frame || 0 ) + 1;\n\t\tggxUniforms.envMap.value = cubeUVRenderTarget.texture;\n\t\tggxUniforms.roughness.value = adjustedRoughness;\n\t\tggxUniforms.mipInt.value = _lodMax - lodIn; // Sample from input LOD\n\n\t\tthis._setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( pingPongRenderTarget );\n\t\trenderer.render( ggxMesh, _flatCamera );\n\n\t\t// Copy from pingPong back to cubeUV (simple direct copy)\n\t\tpingPongRenderTarget.texture.frame = ( pingPongRenderTarget.texture.frame || 0 ) + 1;\n\t\tggxUniforms.envMap.value = pingPongRenderTarget.texture;\n\t\tggxUniforms.roughness.value = 0.0; // Direct copy\n\t\tggxUniforms.mipInt.value = _lodMax - lodOut; // Read from the level we just wrote\n\n\t\tthis._setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( ggxMesh, _flatCamera );\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t *\n\t * Used for initial scene blur in fromScene() method when sigma > 0.\n\t *\n\t * @private\n\t * @param {RenderTarget} cubeUVRenderTarget - The cubemap render target.\n\t * @param {number} lodIn - The input level-of-detail.\n\t * @param {number} lodOut - The output level-of-detail.\n\t * @param {number} sigma - The blur radius in radians.\n\t * @param {Vector3} [poleAxis] - The pole axis.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\terror( 'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = this._lodMeshes[ lodOut ];\n\t\tblurMesh.material = blurMaterial;\n\n\t\tconst blurUniforms = _uniformsMap.get( blurMaterial );\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\twarn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\ttargetIn.texture.frame = ( targetIn.texture.frame || 0 ) + 1;\n\n\t\tblurUniforms.envMap.value = targetIn.texture;\n\t\tblurUniforms.samples.value = samples;\n\t\tblurUniforms.weights.array = weights;\n\t\tblurUniforms.latitudinal.value = direction === 'latitudinal' ? 1 : 0;\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms.poleAxis.value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms.dTheta.value = radiansPerPixel;\n\t\tblurUniforms.mipInt.value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\tthis._setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n\t_setViewport( target, x, y, width, height ) {\n\n\t\tif ( this._renderer.isWebGLRenderer ) {\n\n\t\t\ttarget.viewport.set( x, target.height - height - y, width, height );\n\t\t\ttarget.scissor.set( x, target.height - height - y, width, height );\n\n\t\t} else {\n\n\t\t\ttarget.viewport.set( x, y, width, height );\n\t\t\ttarget.scissor.set( x, y, width, height );\n\n\t\t}\n\n\t}\n\n\n}\n\nfunction _createPlanes( lodMax ) {\n\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\tconst lodMeshes = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : -1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\n\t\t\tconst faceIdx = _faceLib[ face ];\n\t\t\tposition.set( coordinates, positionSize * vertices * faceIdx );\n\t\t\tuv.set( uv1, uvSize * vertices * faceIdx );\n\t\t\tconst fill = [ faceIdx, faceIdx, faceIdx, faceIdx, faceIdx, faceIdx ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * faceIdx );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodMeshes.push( new Mesh( planes, null ) );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodMeshes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height ) {\n\n\tconst params = {\n\t\tmagFilter: LinearFilter,\n\t\tminFilter: LinearFilter,\n\t\tgenerateMipmaps: false,\n\t\ttype: HalfFloatType,\n\t\tformat: RGBAFormat,\n\t\tcolorSpace: LinearSRGBColorSpace,\n\t\t//depthBuffer: false\n\t};\n\n\tconst cubeUVRenderTarget = new RenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.texture.isPMREMTexture = true;\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _getMaterial( type ) {\n\n\tconst material = new NodeMaterial();\n\tmaterial.depthTest = false;\n\tmaterial.depthWrite = false;\n\tmaterial.blending = NoBlending;\n\tmaterial.name = `PMREM_${ type }`;\n\n\treturn material;\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = uniformArray( new Array( MAX_SAMPLES ).fill( 0 ) );\n\tconst poleAxis = uniform( new Vector3( 0, 1, 0 ) );\n\tconst dTheta = uniform( 0 );\n\tconst n = float( MAX_SAMPLES );\n\tconst latitudinal = uniform( 0 ); // false, bool\n\tconst samples = uniform( 1 ); // int\n\tconst envMap = texture();\n\tconst mipInt = uniform( 0 ); // int\n\tconst CUBEUV_TEXEL_WIDTH = float( 1 / width );\n\tconst CUBEUV_TEXEL_HEIGHT = float( 1 / height );\n\tconst CUBEUV_MAX_MIP = float( lodMax );\n\n\tconst materialUniforms = {\n\t\tn,\n\t\tlatitudinal,\n\t\tweights,\n\t\tpoleAxis,\n\t\toutputDirection: _outputDirection,\n\t\tdTheta,\n\t\tsamples,\n\t\tenvMap,\n\t\tmipInt,\n\t\tCUBEUV_TEXEL_WIDTH,\n\t\tCUBEUV_TEXEL_HEIGHT,\n\t\tCUBEUV_MAX_MIP\n\t};\n\n\tconst material = _getMaterial( 'blur' );\n\tmaterial.fragmentNode = blur( { ...materialUniforms, latitudinal: latitudinal.equal( 1 ) } );\n\n\t_uniformsMap.set( material, materialUniforms );\n\n\treturn material;\n\n}\n\nfunction _getGGXShader( lodMax, width, height ) {\n\n\tconst envMap = texture();\n\tconst roughness = uniform( 0 );\n\tconst mipInt = uniform( 0 );\n\tconst CUBEUV_TEXEL_WIDTH = float( 1 / width );\n\tconst CUBEUV_TEXEL_HEIGHT = float( 1 / height );\n\tconst CUBEUV_MAX_MIP = float( lodMax );\n\n\tconst materialUniforms = {\n\t\tenvMap,\n\t\troughness,\n\t\tmipInt,\n\t\tCUBEUV_TEXEL_WIDTH,\n\t\tCUBEUV_TEXEL_HEIGHT,\n\t\tCUBEUV_MAX_MIP\n\t};\n\n\tconst material = _getMaterial( 'ggx' );\n\tmaterial.fragmentNode = ggxConvolution( {\n\t\t...materialUniforms,\n\t\tN_immutable: _outputDirection,\n\t\tGGX_SAMPLES: uint( GGX_SAMPLES )\n\t} );\n\n\t_uniformsMap.set( material, materialUniforms );\n\n\treturn material;\n\n}\n\nfunction _getCubemapMaterial( envTexture ) {\n\n\tconst material = _getMaterial( 'cubemap' );\n\tmaterial.fragmentNode = cubeTexture( envTexture, _outputDirection );\n\n\treturn material;\n\n}\n\nfunction _getEquirectMaterial( envTexture ) {\n\n\tconst material = _getMaterial( 'equirect' );\n\tmaterial.fragmentNode = texture( envTexture, equirectUV( _outputDirection ), 0 );\n\n\treturn material;\n\n}\n\nconst _cache = new WeakMap();\n\n/**\n * Generates the cubeUV size based on the given image height.\n *\n * @private\n * @param {number} imageHeight - The image height.\n * @return {{texelWidth: number,texelHeight: number, maxMip: number}} The result object.\n */\nfunction _generateCubeUVSize( imageHeight ) {\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\n/**\n * Generates a PMREM from the given texture.\n *\n * @private\n * @param {Texture} texture - The texture to create the PMREM for.\n * @param {Renderer} renderer - The renderer.\n * @param {PMREMGenerator} generator - The PMREM generator.\n * @return {?Texture} The PMREM.\n */\nfunction _getPMREMFromTexture( texture, renderer, generator ) {\n\n\tconst cache = _getCache( renderer );\n\n\tlet cacheTexture = cache.get( texture );\n\n\tconst pmremVersion = cacheTexture !== undefined ? cacheTexture.pmremVersion : -1;\n\n\tif ( pmremVersion !== texture.pmremVersion ) {\n\n\t\tconst image = texture.image;\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\tif ( isCubeMapReady( image ) ) {\n\n\t\t\t\tcacheTexture = generator.fromCubemap( texture, cacheTexture );\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\n\t\t} else {\n\n\t\t\tif ( isEquirectangularMapReady( image ) ) {\n\n\t\t\t\tcacheTexture = generator.fromEquirectangular( texture, cacheTexture );\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcacheTexture.pmremVersion = texture.pmremVersion;\n\n\t\tcache.set( texture, cacheTexture );\n\n\t}\n\n\treturn cacheTexture.texture;\n\n}\n\n/**\n * Returns a cache that stores generated PMREMs for the respective textures.\n * A cache must be maintained per renderer since PMREMs are render target textures\n * which can't be shared across render contexts.\n *\n * @private\n * @param {Renderer} renderer - The renderer.\n * @return {WeakMap<Texture, Texture>} The PMREM cache.\n */\nfunction _getCache( renderer ) {\n\n\tlet rendererCache = _cache.get( renderer );\n\n\tif ( rendererCache === undefined ) {\n\n\t\trendererCache = new WeakMap();\n\t\t_cache.set( renderer, rendererCache );\n\n\t}\n\n\treturn rendererCache;\n\n}\n\n/**\n * This node represents a PMREM which is a special type of preprocessed\n * environment map intended for PBR materials.\n *\n * ```js\n * const material = new MeshStandardNodeMaterial();\n * material.envNode = pmremTexture( envMap );\n * ```\n *\n * @augments TempNode\n */\nclass PMREMNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'PMREMNode';\n\n\t}\n\n\t/**\n\t * Constructs a new function overloading node.\n\t *\n\t * @param {Texture} value - The input texture.\n\t * @param {Node<vec2>} [uvNode=null] - The uv node.\n\t * @param {Node<float>} [levelNode=null] - The level node.\n\t */\n\tconstructor( value, uvNode = null, levelNode = null ) {\n\n\t\tsuper( 'vec3' );\n\n\t\t/**\n\t\t * Reference to the input texture.\n\t\t *\n\t\t * @private\n\t\t * @type {Texture}\n\t\t */\n\t\tthis._value = value;\n\n\t\t/**\n\t\t * Reference to the generated PMREM.\n\t\t *\n\t\t * @private\n\t\t * @type {Texture | null}\n\t\t * @default null\n\t\t */\n\t\tthis._pmrem = null;\n\n\t\t/**\n\t\t *  The uv node.\n\t\t *\n\t\t * @type {Node<vec2>}\n\t\t */\n\t\tthis.uvNode = uvNode;\n\n\t\t/**\n\t\t *  The level node.\n\t\t *\n\t\t * @type {Node<float>}\n\t\t */\n\t\tthis.levelNode = levelNode;\n\n\t\t/**\n\t\t * Reference to a PMREM generator.\n\t\t *\n\t\t * @private\n\t\t * @type {?PMREMGenerator}\n\t\t * @default null\n\t\t */\n\t\tthis._generator = null;\n\n\t\tconst defaultTexture = new Texture();\n\t\tdefaultTexture.isRenderTargetTexture = true;\n\n\t\t/**\n\t\t * The texture node holding the generated PMREM.\n\t\t *\n\t\t * @private\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis._texture = texture( defaultTexture );\n\n\t\t/**\n\t\t * A uniform representing the PMREM's width.\n\t\t *\n\t\t * @private\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis._width = uniform( 0 );\n\n\t\t/**\n\t\t * A uniform representing the PMREM's height.\n\t\t *\n\t\t * @private\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis._height = uniform( 0 );\n\n\t\t/**\n\t\t * A uniform representing the PMREM's max Mip.\n\t\t *\n\t\t * @private\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis._maxMip = uniform( 0 );\n\n\t\t/**\n\t\t * The `updateBeforeType` is set to `NodeUpdateType.RENDER`.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'render'\n\t\t */\n\t\tthis.updateBeforeType = NodeUpdateType.RENDER;\n\n\t}\n\n\tset value( value ) {\n\n\t\tthis._value = value;\n\t\tthis._pmrem = null;\n\n\t}\n\n\t/**\n\t * The node's texture value.\n\t *\n\t * @type {Texture}\n\t */\n\tget value() {\n\n\t\treturn this._value;\n\n\t}\n\n\t/**\n\t * Uses the given PMREM texture to update internal values.\n\t *\n\t * @param {Texture} texture - The PMREM texture.\n\t */\n\tupdateFromTexture( texture ) {\n\n\t\tconst cubeUVSize = _generateCubeUVSize( texture.image.height );\n\n\t\tthis._texture.value = texture;\n\t\tthis._width.value = cubeUVSize.texelWidth;\n\t\tthis._height.value = cubeUVSize.texelHeight;\n\t\tthis._maxMip.value = cubeUVSize.maxMip;\n\n\t}\n\n\tupdateBefore( frame ) {\n\n\t\tlet pmrem = this._pmrem;\n\n\t\tconst pmremVersion = pmrem ? pmrem.pmremVersion : -1;\n\t\tconst texture = this._value;\n\n\t\tif ( pmremVersion !== texture.pmremVersion ) {\n\n\t\t\tif ( texture.isPMREMTexture === true ) {\n\n\t\t\t\tpmrem = texture;\n\n\t\t\t} else {\n\n\t\t\t\tpmrem = _getPMREMFromTexture( texture, frame.renderer, this._generator );\n\n\t\t\t}\n\n\t\t\tif ( pmrem !== null ) {\n\n\t\t\t\tthis._pmrem = pmrem;\n\n\t\t\t\tthis.updateFromTexture( pmrem );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tif ( this._generator === null ) {\n\n\t\t\tthis._generator = new PMREMGenerator( builder.renderer );\n\n\t\t}\n\n\t\tthis.updateBefore( builder );\n\n\t\t//\n\n\t\tlet uvNode = this.uvNode;\n\n\t\tif ( uvNode === null && builder.context.getUV ) {\n\n\t\t\tuvNode = builder.context.getUV( this, builder );\n\n\t\t}\n\n\t\t//\n\n\t\tuvNode = materialEnvRotation.mul( vec3( uvNode.x, uvNode.y.negate(), uvNode.z ) );\n\n\t\t//\n\n\t\tlet levelNode = this.levelNode;\n\n\t\tif ( levelNode === null && builder.context.getTextureLevel ) {\n\n\t\t\tlevelNode = builder.context.getTextureLevel( this );\n\n\t\t}\n\n\t\t//\n\n\t\treturn textureCubeUV( this._texture, uvNode, levelNode, this._width, this._height, this._maxMip );\n\n\t}\n\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tif ( this._generator !== null ) this._generator.dispose();\n\n\t}\n\n}\n\n/**\n * Returns `true` if the given cube map image has been fully loaded.\n *\n * @private\n * @param {?Array<(Image|Object)>} [image] - The cube map image.\n * @return {boolean} Whether the given cube map is ready or not.\n */\nfunction isCubeMapReady( image ) {\n\n\tif ( image === null || image === undefined ) return false;\n\n\tlet count = 0;\n\tconst length = 6;\n\n\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t}\n\n\treturn count === length;\n\n\n}\n\n/**\n * Returns `true` if the given equirectangular image has been fully loaded.\n *\n * @private\n * @param {(Image|Object)} image - The equirectangular image.\n * @return {boolean} Whether the given cube map is ready or not.\n */\nfunction isEquirectangularMapReady( image ) {\n\n\tif ( image === null || image === undefined ) return false;\n\n\treturn image.height > 0;\n\n}\n\n/**\n * TSL function for creating a PMREM node.\n *\n * @tsl\n * @function\n * @param {Texture} value - The input texture.\n * @param {?Node<vec2>} [uvNode=null] - The uv node.\n * @param {?Node<float>} [levelNode=null] - The level node.\n * @returns {PMREMNode}\n */\nconst pmremTexture = /*@__PURE__*/ nodeProxy( PMREMNode ).setParameterLength( 1, 3 );\n\nconst _rendererCache = new WeakMap();\n\n/**\n * Represents a physical model for Image-based lighting (IBL). The environment\n * is defined via environment maps in the equirectangular, cube map or cubeUV (PMREM) format.\n * `EnvironmentNode` is intended for PBR materials like {@link MeshStandardNodeMaterial}.\n *\n * @augments LightingNode\n */\nclass EnvironmentNode extends LightingNode {\n\n\tstatic get type() {\n\n\t\treturn 'EnvironmentNode';\n\n\t}\n\n\t/**\n\t * Constructs a new environment node.\n\t *\n\t * @param {Node} [envNode=null] - A node representing the environment.\n\t */\n\tconstructor( envNode = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * A node representing the environment.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.envNode = envNode;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst { material } = builder;\n\n\t\tlet envNode = this.envNode;\n\n\t\tif ( envNode.isTextureNode || envNode.isMaterialReferenceNode ) {\n\n\t\t\tconst value = ( envNode.isTextureNode ) ? envNode.value : material[ envNode.property ];\n\n\t\t\tconst cache = this._getPMREMNodeCache( builder.renderer );\n\n\t\t\tlet cacheEnvNode = cache.get( value );\n\n\t\t\tif ( cacheEnvNode === undefined ) {\n\n\t\t\t\tcacheEnvNode = pmremTexture( value );\n\n\t\t\t\tcache.set( value, cacheEnvNode );\n\n\t\t\t}\n\n\t\t\tenvNode\t= cacheEnvNode;\n\n\t\t}\n\n\t\t//\n\n\t\tconst useAnisotropy = material.useAnisotropy === true || material.anisotropy > 0;\n\t\tconst radianceNormalView = useAnisotropy ? bentNormalView : normalView;\n\n\t\tconst radiance = envNode.context( createRadianceContext( roughness, radianceNormalView ) ).mul( materialEnvIntensity );\n\t\tconst irradiance = envNode.context( createIrradianceContext( normalWorld ) ).mul( Math.PI ).mul( materialEnvIntensity );\n\n\t\tconst isolateRadiance = isolate( radiance );\n\t\tconst isolateIrradiance = isolate( irradiance );\n\n\t\t//\n\n\t\tbuilder.context.radiance.addAssign( isolateRadiance );\n\n\t\tbuilder.context.iblIrradiance.addAssign( isolateIrradiance );\n\n\t\t//\n\n\t\tconst clearcoatRadiance = builder.context.lightingModel.clearcoatRadiance;\n\n\t\tif ( clearcoatRadiance ) {\n\n\t\t\tconst clearcoatRadianceContext = envNode.context( createRadianceContext( clearcoatRoughness, clearcoatNormalView ) ).mul( materialEnvIntensity );\n\t\t\tconst isolateClearcoatRadiance = isolate( clearcoatRadianceContext );\n\n\t\t\tclearcoatRadiance.addAssign( isolateClearcoatRadiance );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the PMREM node cache of the current renderer.\n\t *\n\t * @private\n\t * @param {Renderer} renderer - The current renderer.\n\t * @return {WeakMap} The node cache.\n\t */\n\t_getPMREMNodeCache( renderer ) {\n\n\t\tlet pmremCache = _rendererCache.get( renderer );\n\n\t\tif ( pmremCache === undefined ) {\n\n\t\t\tpmremCache = new WeakMap();\n\n\t\t\t_rendererCache.set( renderer, pmremCache );\n\n\t\t}\n\n\t\treturn pmremCache;\n\n\t}\n\n}\n\nconst createRadianceContext = ( roughnessNode, normalViewNode ) => {\n\n\tlet reflectVec = null;\n\n\treturn {\n\t\tgetUV: () => {\n\n\t\t\tif ( reflectVec === null ) {\n\n\t\t\t\treflectVec = positionViewDirection.negate().reflect( normalViewNode );\n\n\t\t\t\t// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.\n\t\t\t\treflectVec = pow4( roughnessNode ).mix( reflectVec, normalViewNode ).normalize();\n\n\t\t\t\treflectVec = reflectVec.transformDirection( cameraViewMatrix );\n\n\t\t\t}\n\n\t\t\treturn reflectVec;\n\n\t\t},\n\t\tgetTextureLevel: () => {\n\n\t\t\treturn roughnessNode;\n\n\t\t}\n\t};\n\n};\n\nconst createIrradianceContext = ( normalWorldNode ) => {\n\n\treturn {\n\t\tgetUV: () => {\n\n\t\t\treturn normalWorldNode;\n\n\t\t},\n\t\tgetTextureLevel: () => {\n\n\t\t\treturn float( 1.0 );\n\n\t\t}\n\t};\n\n};\n\nconst _defaultValues$6 = /*@__PURE__*/ new MeshStandardMaterial();\n\n/**\n * Node material version of {@link MeshStandardMaterial}.\n *\n * @augments NodeMaterial\n */\nclass MeshStandardNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshStandardNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new mesh standard node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshStandardNodeMaterial = true;\n\n\t\t/**\n\t\t * Set to `true` because standard materials react on lights.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.lights = true;\n\n\t\t/**\n\t\t * The emissive color of standard materials is by default inferred from the `emissive`,\n\t\t * `emissiveIntensity` and `emissiveMap` properties. This node property allows to\n\t\t * overwrite the default and define the emissive color with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the emissive color but modify the existing\n\t\t * value instead, use {@link materialEmissive}.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.emissiveNode = null;\n\n\t\t/**\n\t\t * The metalness of standard materials is by default inferred from the `metalness`,\n\t\t * and `metalnessMap` properties. This node property allows to\n\t\t * overwrite the default and define the metalness with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the metalness but modify the existing\n\t\t * value instead, use {@link materialMetalness}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.metalnessNode = null;\n\n\t\t/**\n\t\t * The roughness of standard materials is by default inferred from the `roughness`,\n\t\t * and `roughnessMap` properties. This node property allows to\n\t\t * overwrite the default and define the roughness with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the roughness but modify the existing\n\t\t * value instead, use {@link materialRoughness}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.roughnessNode = null;\n\n\t\tthis.setDefaultValues( _defaultValues$6 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Overwritten since this type of material uses {@link EnvironmentNode}\n\t * to implement the PBR (PMREM based) environment mapping. Besides, the\n\t * method honors `Scene.environment`.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {?EnvironmentNode<vec3>} The environment node.\n\t */\n\tsetupEnvironment( builder ) {\n\n\t\tlet envNode = super.setupEnvironment( builder );\n\n\t\tif ( envNode === null && builder.environmentNode ) {\n\n\t\t\tenvNode = builder.environmentNode;\n\n\t\t}\n\n\t\treturn envNode ? new EnvironmentNode( envNode ) : null;\n\n\t}\n\n\t/**\n\t * Setups the lighting model.\n\t *\n\t * @return {PhysicalLightingModel} The lighting model.\n\t */\n\tsetupLightingModel( /*builder*/ ) {\n\n\t\treturn new PhysicalLightingModel();\n\n\t}\n\n\t/**\n\t * Setups the specular related node variables.\n\t */\n\tsetupSpecular() {\n\n\t\tconst specularColorNode = mix( vec3( 0.04 ), diffuseColor.rgb, metalness );\n\n\t\tspecularColor.assign( vec3( 0.04 ) );\n\t\tspecularColorBlended.assign( specularColorNode );\n\t\tspecularF90.assign( 1.0 );\n\n\t}\n\n\t/**\n\t * Setups the standard specific node variables.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetupVariants() {\n\n\t\t// METALNESS\n\n\t\tconst metalnessNode = this.metalnessNode ? float( this.metalnessNode ) : materialMetalness;\n\n\t\tmetalness.assign( metalnessNode );\n\n\t\t// ROUGHNESS\n\n\t\tlet roughnessNode = this.roughnessNode ? float( this.roughnessNode ) : materialRoughness;\n\t\troughnessNode = getRoughness( { roughness: roughnessNode } );\n\n\t\troughness.assign( roughnessNode );\n\n\t\t// SPECULAR COLOR\n\n\t\tthis.setupSpecular();\n\n\t\t// DIFFUSE COLOR\n\n\t\tdiffuseContribution.assign( diffuseColor.rgb.mul( metalnessNode.oneMinus() ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.emissiveNode = source.emissiveNode;\n\n\t\tthis.metalnessNode = source.metalnessNode;\n\t\tthis.roughnessNode = source.roughnessNode;\n\n\t\treturn super.copy( source );\n\n\t}\n\n}\n\nconst _defaultValues$5 = /*@__PURE__*/ new MeshPhysicalMaterial();\n\n/**\n * Node material version of {@link MeshPhysicalMaterial}.\n *\n * @augments MeshStandardNodeMaterial\n */\nclass MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshPhysicalNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new mesh physical node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshPhysicalNodeMaterial = true;\n\n\t\t/**\n\t\t * The clearcoat of physical materials is by default inferred from the `clearcoat`\n\t\t * and `clearcoatMap` properties. This node property allows to overwrite the default\n\t\t * and define the clearcoat with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the clearcoat but modify the existing\n\t\t * value instead, use {@link materialClearcoat}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.clearcoatNode = null;\n\n\t\t/**\n\t\t * The clearcoat roughness of physical materials is by default inferred from the `clearcoatRoughness`\n\t\t * and `clearcoatRoughnessMap` properties. This node property allows to overwrite the default\n\t\t * and define the clearcoat roughness with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the clearcoat roughness but modify the existing\n\t\t * value instead, use {@link materialClearcoatRoughness}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.clearcoatRoughnessNode = null;\n\n\t\t/**\n\t\t * The clearcoat normal of physical materials is by default inferred from the `clearcoatNormalMap`\n\t\t * property. This node property allows to overwrite the default\n\t\t * and define the clearcoat normal with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the clearcoat normal but modify the existing\n\t\t * value instead, use {@link materialClearcoatNormal}.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.clearcoatNormalNode = null;\n\n\t\t/**\n\t\t * The sheen of physical materials is by default inferred from the `sheen`, `sheenColor`\n\t\t * and `sheenColorMap` properties. This node property allows to overwrite the default\n\t\t * and define the sheen with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the sheen but modify the existing\n\t\t * value instead, use {@link materialSheen}.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.sheenNode = null;\n\n\t\t/**\n\t\t * The sheen roughness of physical materials is by default inferred from the `sheenRoughness` and\n\t\t * `sheenRoughnessMap` properties. This node property allows to overwrite the default\n\t\t * and define the sheen roughness with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the sheen roughness but modify the existing\n\t\t * value instead, use {@link materialSheenRoughness}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.sheenRoughnessNode = null;\n\n\t\t/**\n\t\t * The iridescence of physical materials is by default inferred from the `iridescence`\n\t\t * property. This node property allows to overwrite the default\n\t\t * and define the iridescence with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the iridescence but modify the existing\n\t\t * value instead, use {@link materialIridescence}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.iridescenceNode = null;\n\n\t\t/**\n\t\t * The iridescence IOR of physical materials is by default inferred from the `iridescenceIOR`\n\t\t * property. This node property allows to overwrite the default\n\t\t * and define the iridescence IOR with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the iridescence IOR but modify the existing\n\t\t * value instead, use {@link materialIridescenceIOR}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.iridescenceIORNode = null;\n\n\t\t/**\n\t\t * The iridescence thickness of physical materials is by default inferred from the `iridescenceThicknessRange`\n\t\t * and `iridescenceThicknessMap` properties. This node property allows to overwrite the default\n\t\t * and define the iridescence thickness with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the iridescence thickness but modify the existing\n\t\t * value instead, use {@link materialIridescenceThickness}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.iridescenceThicknessNode = null;\n\n\t\t/**\n\t\t * The specular intensity of physical materials is by default inferred from the `specularIntensity`\n\t\t * and `specularIntensityMap` properties. This node property allows to overwrite the default\n\t\t * and define the specular intensity with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the specular intensity but modify the existing\n\t\t * value instead, use {@link materialSpecularIntensity}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.specularIntensityNode = null;\n\n\t\t/**\n\t\t * The specular color of physical materials is by default inferred from the `specularColor`\n\t\t * and `specularColorMap` properties. This node property allows to overwrite the default\n\t\t * and define the specular color with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the specular color but modify the existing\n\t\t * value instead, use {@link materialSpecularColor}.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.specularColorNode = null;\n\n\t\t/**\n\t\t * The ior of physical materials is by default inferred from the `ior`\n\t\t * property. This node property allows to overwrite the default\n\t\t * and define the ior with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the ior but modify the existing\n\t\t * value instead, use {@link materialIOR}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.iorNode = null;\n\n\t\t/**\n\t\t * The transmission of physical materials is by default inferred from the `transmission` and\n\t\t * `transmissionMap` properties. This node property allows to overwrite the default\n\t\t * and define the transmission with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the transmission but modify the existing\n\t\t * value instead, use {@link materialTransmission}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.transmissionNode = null;\n\n\t\t/**\n\t\t * The thickness of physical materials is by default inferred from the `thickness` and\n\t\t * `thicknessMap` properties. This node property allows to overwrite the default\n\t\t * and define the thickness with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the thickness but modify the existing\n\t\t * value instead, use {@link materialThickness}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.thicknessNode = null;\n\n\t\t/**\n\t\t * The attenuation distance of physical materials is by default inferred from the\n\t\t * `attenuationDistance` property. This node property allows to overwrite the default\n\t\t * and define the attenuation distance with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the attenuation distance but modify the existing\n\t\t * value instead, use {@link materialAttenuationDistance}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.attenuationDistanceNode = null;\n\n\t\t/**\n\t\t * The attenuation color of physical materials is by default inferred from the\n\t\t * `attenuationColor` property. This node property allows to overwrite the default\n\t\t * and define the attenuation color with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the attenuation color but modify the existing\n\t\t * value instead, use {@link materialAttenuationColor}.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.attenuationColorNode = null;\n\n\t\t/**\n\t\t * The dispersion of physical materials is by default inferred from the\n\t\t * `dispersion` property. This node property allows to overwrite the default\n\t\t * and define the dispersion with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the dispersion but modify the existing\n\t\t * value instead, use {@link materialDispersion}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.dispersionNode = null;\n\n\t\t/**\n\t\t * The anisotropy of physical materials is by default inferred from the\n\t\t * `anisotropy` property. This node property allows to overwrite the default\n\t\t * and define the anisotropy with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the anisotropy but modify the existing\n\t\t * value instead, use {@link materialAnisotropy}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.anisotropyNode = null;\n\n\t\tthis.setDefaultValues( _defaultValues$5 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Whether the lighting model should use clearcoat or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget useClearcoat() {\n\n\t\treturn this.clearcoat > 0 || this.clearcoatNode !== null;\n\n\t}\n\n\t/**\n\t * Whether the lighting model should use iridescence or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget useIridescence() {\n\n\t\treturn this.iridescence > 0 || this.iridescenceNode !== null;\n\n\t}\n\n\t/**\n\t * Whether the lighting model should use sheen or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget useSheen() {\n\n\t\treturn this.sheen > 0 || this.sheenNode !== null;\n\n\t}\n\n\t/**\n\t * Whether the lighting model should use anisotropy or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget useAnisotropy() {\n\n\t\treturn this.anisotropy > 0 || this.anisotropyNode !== null;\n\n\t}\n\n\t/**\n\t * Whether the lighting model should use transmission or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget useTransmission() {\n\n\t\treturn this.transmission > 0 || this.transmissionNode !== null;\n\n\t}\n\n\t/**\n\t * Whether the lighting model should use dispersion or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget useDispersion() {\n\n\t\treturn this.dispersion > 0 || this.dispersionNode !== null;\n\n\t}\n\n\t/**\n\t * Setups the specular related node variables.\n\t */\n\tsetupSpecular() {\n\n\t\tconst iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;\n\n\t\tior.assign( iorNode );\n\t\tspecularColor.assign( min$1( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ) );\n\t\tspecularColorBlended.assign( mix( specularColor, diffuseColor.rgb, metalness ) );\n\t\tspecularF90.assign( mix( materialSpecularIntensity, 1.0, metalness ) );\n\n\t}\n\n\t/**\n\t * Setups the lighting model.\n\t *\n\t * @return {PhysicalLightingModel} The lighting model.\n\t */\n\tsetupLightingModel( /*builder*/ ) {\n\n\t\treturn new PhysicalLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion );\n\n\t}\n\n\t/**\n\t * Setups the physical specific node variables.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetupVariants( builder ) {\n\n\t\tsuper.setupVariants( builder );\n\n\t\t// CLEARCOAT\n\n\t\tif ( this.useClearcoat ) {\n\n\t\t\tconst clearcoatNode = this.clearcoatNode ? float( this.clearcoatNode ) : materialClearcoat;\n\t\t\tconst clearcoatRoughnessNode = this.clearcoatRoughnessNode ? float( this.clearcoatRoughnessNode ) : materialClearcoatRoughness;\n\n\t\t\tclearcoat.assign( clearcoatNode );\n\t\t\tclearcoatRoughness.assign( getRoughness( { roughness: clearcoatRoughnessNode } ) );\n\n\t\t}\n\n\t\t// SHEEN\n\n\t\tif ( this.useSheen ) {\n\n\t\t\tconst sheenNode = this.sheenNode ? vec3( this.sheenNode ) : materialSheen;\n\t\t\tconst sheenRoughnessNode = this.sheenRoughnessNode ? float( this.sheenRoughnessNode ) : materialSheenRoughness;\n\n\t\t\tsheen.assign( sheenNode );\n\t\t\tsheenRoughness.assign( sheenRoughnessNode );\n\n\t\t}\n\n\t\t// IRIDESCENCE\n\n\t\tif ( this.useIridescence ) {\n\n\t\t\tconst iridescenceNode = this.iridescenceNode ? float( this.iridescenceNode ) : materialIridescence;\n\t\t\tconst iridescenceIORNode = this.iridescenceIORNode ? float( this.iridescenceIORNode ) : materialIridescenceIOR;\n\t\t\tconst iridescenceThicknessNode = this.iridescenceThicknessNode ? float( this.iridescenceThicknessNode ) : materialIridescenceThickness;\n\n\t\t\tiridescence.assign( iridescenceNode );\n\t\t\tiridescenceIOR.assign( iridescenceIORNode );\n\t\t\tiridescenceThickness.assign( iridescenceThicknessNode );\n\n\t\t}\n\n\t\t// ANISOTROPY\n\n\t\tif ( this.useAnisotropy ) {\n\n\t\t\tconst anisotropyV = ( this.anisotropyNode ? vec2( this.anisotropyNode ) : materialAnisotropy ).toVar();\n\n\t\t\tanisotropy.assign( anisotropyV.length() );\n\n\t\t\tIf( anisotropy.equal( 0.0 ), () => {\n\n\t\t\t\tanisotropyV.assign( vec2( 1.0, 0.0 ) );\n\n\t\t\t} ).Else( () => {\n\n\t\t\t\tanisotropyV.divAssign( vec2( anisotropy ) );\n\t\t\t\tanisotropy.assign( anisotropy.saturate() );\n\n\t\t\t} );\n\n\t\t\t// Roughness along the anisotropy bitangent is the material roughness, while the tangent roughness increases with anisotropy.\n\t\t\talphaT.assign( anisotropy.pow2().mix( roughness.pow2(), 1.0 ) );\n\n\t\t\tanisotropyT.assign( TBNViewMatrix[ 0 ].mul( anisotropyV.x ).add( TBNViewMatrix[ 1 ].mul( anisotropyV.y ) ) );\n\t\t\tanisotropyB.assign( TBNViewMatrix[ 1 ].mul( anisotropyV.x ).sub( TBNViewMatrix[ 0 ].mul( anisotropyV.y ) ) );\n\n\t\t}\n\n\t\t// TRANSMISSION\n\n\t\tif ( this.useTransmission ) {\n\n\t\t\tconst transmissionNode = this.transmissionNode ? float( this.transmissionNode ) : materialTransmission;\n\t\t\tconst thicknessNode = this.thicknessNode ? float( this.thicknessNode ) : materialThickness;\n\t\t\tconst attenuationDistanceNode = this.attenuationDistanceNode ? float( this.attenuationDistanceNode ) : materialAttenuationDistance;\n\t\t\tconst attenuationColorNode = this.attenuationColorNode ? vec3( this.attenuationColorNode ) : materialAttenuationColor;\n\n\t\t\ttransmission.assign( transmissionNode );\n\t\t\tthickness.assign( thicknessNode );\n\t\t\tattenuationDistance.assign( attenuationDistanceNode );\n\t\t\tattenuationColor.assign( attenuationColorNode );\n\n\t\t\tif ( this.useDispersion ) {\n\n\t\t\t\tconst dispersionNode = this.dispersionNode ? float( this.dispersionNode ) : materialDispersion;\n\n\t\t\t\tdispersion.assign( dispersionNode );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Setups the clearcoat normal node.\n\t *\n\t * @return {Node<vec3>} The clearcoat normal.\n\t */\n\tsetupClearcoatNormal() {\n\n\t\treturn this.clearcoatNormalNode ? vec3( this.clearcoatNormalNode ) : materialClearcoatNormal;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tbuilder.context.setupClearcoatNormal = () => subBuild( this.setupClearcoatNormal( builder ), 'NORMAL', 'vec3' );\n\n\t\tsuper.setup( builder );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.clearcoatNode = source.clearcoatNode;\n\t\tthis.clearcoatRoughnessNode = source.clearcoatRoughnessNode;\n\t\tthis.clearcoatNormalNode = source.clearcoatNormalNode;\n\n\t\tthis.sheenNode = source.sheenNode;\n\t\tthis.sheenRoughnessNode = source.sheenRoughnessNode;\n\n\t\tthis.iridescenceNode = source.iridescenceNode;\n\t\tthis.iridescenceIORNode = source.iridescenceIORNode;\n\t\tthis.iridescenceThicknessNode = source.iridescenceThicknessNode;\n\n\t\tthis.specularIntensityNode = source.specularIntensityNode;\n\t\tthis.specularColorNode = source.specularColorNode;\n\n\t\tthis.iorNode = source.iorNode;\n\n\t\tthis.transmissionNode = source.transmissionNode;\n\t\tthis.thicknessNode = source.thicknessNode;\n\t\tthis.attenuationDistanceNode = source.attenuationDistanceNode;\n\t\tthis.attenuationColorNode = source.attenuationColorNode;\n\t\tthis.dispersionNode = source.dispersionNode;\n\n\t\tthis.anisotropyNode = source.anisotropyNode;\n\n\t\treturn super.copy( source );\n\n\t}\n\n}\n\n/**\n * Represents the lighting model for {@link MeshSSSNodeMaterial}.\n *\n * @augments PhysicalLightingModel\n */\nclass SSSLightingModel extends PhysicalLightingModel {\n\n\t/**\n\t * Constructs a new physical lighting model.\n\t *\n\t * @param {boolean} [clearcoat=false] - Whether clearcoat is supported or not.\n\t * @param {boolean} [sheen=false] - Whether sheen is supported or not.\n\t * @param {boolean} [iridescence=false] - Whether iridescence is supported or not.\n\t * @param {boolean} [anisotropy=false] - Whether anisotropy is supported or not.\n\t * @param {boolean} [transmission=false] - Whether transmission is supported or not.\n\t * @param {boolean} [dispersion=false] - Whether dispersion is supported or not.\n\t * @param {boolean} [sss=false] - Whether SSS is supported or not.\n\t */\n\tconstructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false, sss = false ) {\n\n\t\tsuper( clearcoat, sheen, iridescence, anisotropy, transmission, dispersion );\n\n\t\t/**\n\t\t * Whether the lighting model should use SSS or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.useSSS = sss;\n\n\t}\n\n\t/**\n\t * Extends the default implementation with a SSS term.\n\t *\n\t * Reference: [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look](https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/)\n\t *\n\t * @param {Object} input - The input data.\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tdirect( { lightDirection, lightColor, reflectedLight }, builder ) {\n\n\t\tif ( this.useSSS === true ) {\n\n\t\t\tconst material = builder.material;\n\n\t\t\tconst { thicknessColorNode, thicknessDistortionNode, thicknessAmbientNode, thicknessAttenuationNode, thicknessPowerNode, thicknessScaleNode } = material;\n\n\t\t\tconst scatteringHalf = lightDirection.add( normalView.mul( thicknessDistortionNode ) ).normalize();\n\t\t\tconst scatteringDot = float( positionViewDirection.dot( scatteringHalf.negate() ).saturate().pow( thicknessPowerNode ).mul( thicknessScaleNode ) );\n\t\t\tconst scatteringIllu = vec3( scatteringDot.add( thicknessAmbientNode ).mul( thicknessColorNode ) );\n\n\t\t\treflectedLight.directDiffuse.addAssign( scatteringIllu.mul( thicknessAttenuationNode.mul( lightColor ) ) );\n\n\t\t}\n\n\t\tsuper.direct( { lightDirection, lightColor, reflectedLight }, builder );\n\n\t}\n\n}\n\n/**\n * This node material is an experimental extension of {@link MeshPhysicalNodeMaterial}\n * that implements a Subsurface scattering (SSS) term.\n *\n * @augments MeshPhysicalNodeMaterial\n */\nclass MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshSSSNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new mesh SSS node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\t/**\n\t\t * Represents the thickness color.\n\t\t *\n\t\t * @type {?Node<vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.thicknessColorNode = null;\n\n\t\t/**\n\t\t * Represents the distortion factor.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t */\n\t\tthis.thicknessDistortionNode = float( 0.1 );\n\n\t\t/**\n\t\t * Represents the thickness ambient factor.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t */\n\t\tthis.thicknessAmbientNode = float( 0.0 );\n\n\t\t/**\n\t\t * Represents the thickness attenuation.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t */\n\t\tthis.thicknessAttenuationNode = float( .1 );\n\n\t\t/**\n\t\t * Represents the thickness power.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t */\n\t\tthis.thicknessPowerNode = float( 2.0 );\n\n\t\t/**\n\t\t * Represents the thickness scale.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t */\n\t\tthis.thicknessScaleNode = float( 10.0 );\n\n\t}\n\n\t/**\n\t * Whether the lighting model should use SSS or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget useSSS() {\n\n\t\treturn this.thicknessColorNode !== null;\n\n\t}\n\n\t/**\n\t * Setups the lighting model.\n\t *\n\t * @return {SSSLightingModel} The lighting model.\n\t */\n\tsetupLightingModel( /*builder*/ ) {\n\n\t\treturn new SSSLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion, this.useSSS );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.thicknessColorNode = source.thicknessColorNode;\n\t\tthis.thicknessDistortionNode = source.thicknessDistortionNode;\n\t\tthis.thicknessAmbientNode = source.thicknessAmbientNode;\n\t\tthis.thicknessAttenuationNode = source.thicknessAttenuationNode;\n\t\tthis.thicknessPowerNode = source.thicknessPowerNode;\n\t\tthis.thicknessScaleNode = source.thicknessScaleNode;\n\n\t\treturn super.copy( source );\n\n\t}\n\n}\n\nconst getGradientIrradiance = /*@__PURE__*/ Fn( ( { normal, lightDirection, builder } ) => {\n\n\t// dotNL will be from -1.0 to 1.0\n\tconst dotNL = normal.dot( lightDirection );\n\tconst coord = vec2( dotNL.mul( 0.5 ).add( 0.5 ), 0.0 );\n\n\tif ( builder.material.gradientMap ) {\n\n\t\tconst gradientMap = materialReference( 'gradientMap', 'texture' ).context( { getUV: () => coord } );\n\n\t\treturn vec3( gradientMap.r );\n\n\t} else {\n\n\t\tconst fw = coord.fwidth().mul( 0.5 );\n\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( float( 0.7 ).sub( fw.x ), float( 0.7 ).add( fw.x ), coord.x ) );\n\n\t}\n\n} );\n\n/**\n * Represents the lighting model for a toon material. Used in {@link MeshToonNodeMaterial}.\n *\n * @augments LightingModel\n */\nclass ToonLightingModel extends LightingModel {\n\n\t/**\n\t * Implements the direct lighting. Instead of using a conventional smooth irradiance, the irradiance is\n\t * reduced to a small number of discrete shades to create a comic-like, flat look.\n\t *\n\t * @param {Object} lightData - The light data.\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tdirect( { lightDirection, lightColor, reflectedLight }, builder ) {\n\n\t\tconst irradiance = getGradientIrradiance( { normal: normalGeometry, lightDirection, builder } ).mul( lightColor );\n\n\t\treflectedLight.directDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseColor.rgb } ) ) );\n\n\t}\n\n\t/**\n\t * Implements the indirect lighting.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tindirect( builder ) {\n\n\t\tconst { ambientOcclusion, irradiance, reflectedLight } = builder.context;\n\n\t\treflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );\n\n\t\treflectedLight.indirectDiffuse.mulAssign( ambientOcclusion );\n\n\t}\n\n}\n\nconst _defaultValues$4 = /*@__PURE__*/ new MeshToonMaterial();\n\n/**\n * Node material version of {@link MeshToonMaterial}.\n *\n * @augments NodeMaterial\n */\nclass MeshToonNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshToonNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new mesh toon node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshToonNodeMaterial = true;\n\n\t\t/**\n\t\t * Set to `true` because toon materials react on lights.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.lights = true;\n\n\t\tthis.setDefaultValues( _defaultValues$4 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Setups the lighting model.\n\t *\n\t * @return {ToonLightingModel} The lighting model.\n\t */\n\tsetupLightingModel( /*builder*/ ) {\n\n\t\treturn new ToonLightingModel();\n\n\t}\n\n}\n\n/**\n * TSL function for creating a matcap uv node.\n *\n * Can be used to compute texture coordinates for projecting a\n * matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.\n *\n * @tsl\n * @function\n * @returns {Node<vec2>} The matcap UV coordinates.\n */\nconst matcapUV = /*@__PURE__*/ Fn( () => {\n\n\tconst x = vec3( positionViewDirection.z, 0, positionViewDirection.x.negate() ).normalize();\n\tconst y = positionViewDirection.cross( x );\n\n\treturn vec2( x.dot( normalView ), y.dot( normalView ) ).mul( 0.495 ).add( 0.5 ); // 0.495 to remove artifacts caused by undersized matcap disks\n\n} ).once( [ 'NORMAL', 'VERTEX' ] )().toVar( 'matcapUV' );\n\nconst _defaultValues$3 = /*@__PURE__*/ new MeshMatcapMaterial();\n\n/**\n * Node material version of {@link MeshMatcapMaterial}.\n *\n * @augments NodeMaterial\n */\nclass MeshMatcapNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'MeshMatcapNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new mesh normal node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMeshMatcapNodeMaterial = true;\n\n\t\tthis.setDefaultValues( _defaultValues$3 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Setups the matcap specific node variables.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetupVariants( builder ) {\n\n\t\tconst uv = matcapUV;\n\n\t\tlet matcapColor;\n\n\t\tif ( builder.material.matcap ) {\n\n\t\t\tmatcapColor = materialReference( 'matcap', 'texture' ).context( { getUV: () => uv } );\n\n\t\t} else {\n\n\t\t\tmatcapColor = vec3( mix( 0.2, 0.8, uv.y ) ); // default if matcap is missing\n\n\t\t}\n\n\t\tdiffuseColor.rgb.mulAssign( matcapColor.rgb );\n\n\t}\n\n}\n\n/**\n * Applies a rotation to the given position node.\n *\n * @augments TempNode\n */\nclass RotateNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'RotateNode';\n\n\t}\n\n\t/**\n\t * Constructs a new rotate node.\n\t *\n\t * @param {Node} positionNode - The position node.\n\t * @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending\n\t * on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.\n\t */\n\tconstructor( positionNode, rotationNode ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The position node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.positionNode = positionNode;\n\n\t\t/**\n\t\t *  Represents the rotation that is applied to the position node.\n\t\t *  Depending on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.rotationNode = rotationNode;\n\n\t}\n\n\t/**\n\t * The type of the {@link RotateNode#positionNode} defines the node's type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node's type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.positionNode.getNodeType( builder );\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst { rotationNode, positionNode } = this;\n\n\t\tconst nodeType = this.getNodeType( builder );\n\n\t\tif ( nodeType === 'vec2' ) {\n\n\t\t\tconst cosAngle = rotationNode.cos();\n\t\t\tconst sinAngle = rotationNode.sin();\n\n\t\t\tconst rotationMatrix = mat2(\n\t\t\t\tcosAngle, sinAngle,\n\t\t\t\tsinAngle.negate(), cosAngle\n\t\t\t);\n\n\t\t\treturn rotationMatrix.mul( positionNode );\n\n\t\t} else {\n\n\t\t\tconst rotation = rotationNode;\n\t\t\tconst rotationXMatrix = mat4( vec4( 1.0, 0.0, 0.0, 0.0 ), vec4( 0.0, cos( rotation.x ), sin( rotation.x ).negate(), 0.0 ), vec4( 0.0, sin( rotation.x ), cos( rotation.x ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) );\n\t\t\tconst rotationYMatrix = mat4( vec4( cos( rotation.y ), 0.0, sin( rotation.y ), 0.0 ), vec4( 0.0, 1.0, 0.0, 0.0 ), vec4( sin( rotation.y ).negate(), 0.0, cos( rotation.y ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) );\n\t\t\tconst rotationZMatrix = mat4( vec4( cos( rotation.z ), sin( rotation.z ).negate(), 0.0, 0.0 ), vec4( sin( rotation.z ), cos( rotation.z ), 0.0, 0.0 ), vec4( 0.0, 0.0, 1.0, 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) );\n\n\t\t\treturn rotationXMatrix.mul( rotationYMatrix ).mul( rotationZMatrix ).mul( vec4( positionNode, 1.0 ) ).xyz;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * TSL function for creating a rotate node.\n *\n * @tsl\n * @function\n * @param {Node} positionNode - The position node.\n * @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending\n * on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.\n * @returns {RotateNode}\n */\nconst rotate = /*@__PURE__*/ nodeProxy( RotateNode ).setParameterLength( 2 );\n\nconst _defaultValues$2 = /*@__PURE__*/ new SpriteMaterial();\n\n/**\n * Node material version of {@link SpriteMaterial}.\n *\n * @augments NodeMaterial\n */\nclass SpriteNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'SpriteNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new sprite node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSpriteNodeMaterial = true;\n\n\t\tthis._useSizeAttenuation = true;\n\n\t\t/**\n\t\t * This property makes it possible to define the position of the sprite with a\n\t\t * node. That can be useful when the material is used with instanced rendering\n\t\t * and node data are defined with an instanced attribute node:\n\t\t * ```js\n\t\t * const positionAttribute = new InstancedBufferAttribute( new Float32Array( positions ), 3 );\n\t\t * material.positionNode = instancedBufferAttribute( positionAttribute );\n\t\t * ```\n\t\t * Another possibility is to compute the instanced data with a compute shader:\n\t\t * ```js\n\t\t * const positionBuffer = instancedArray( particleCount, 'vec3' );\n\t\t * particleMaterial.positionNode = positionBuffer.toAttribute();\n\t\t * ```\n\t\t *\n\t\t * @type {?Node<vec2>}\n\t\t * @default null\n\t\t */\n\t\tthis.positionNode = null;\n\n\t\t/**\n\t\t * The rotation of sprite materials is by default inferred from the `rotation`,\n\t\t * property. This node property allows to overwrite the default and define\n\t\t * the rotation with a node instead.\n\t\t *\n\t\t * If you don't want to overwrite the rotation but modify the existing\n\t\t * value instead, use {@link materialRotation}.\n\t\t *\n\t\t * @type {?Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.rotationNode = null;\n\n\t\t/**\n\t\t * This node property provides an additional way to scale sprites next to\n\t\t * `Object3D.scale`. The scale transformation based in `Object3D.scale`\n\t\t * is multiplied with the scale value of this node in the vertex shader.\n\t\t *\n\t\t * @type {?Node<vec2>}\n\t\t * @default null\n\t\t */\n\t\tthis.scaleNode = null;\n\n\t\t/**\n\t\t * In Sprites, the transparent property is enabled by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.transparent = true;\n\n\t\tthis.setDefaultValues( _defaultValues$2 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Setups the position node in view space. This method implements\n\t * the sprite specific vertex shader.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node<vec3>} The position in view space.\n\t */\n\tsetupPositionView( builder ) {\n\n\t\tconst { object, camera } = builder;\n\n\t\tconst { positionNode, rotationNode, scaleNode, sizeAttenuation } = this;\n\n\t\tconst mvPosition = modelViewMatrix.mul( vec3( positionNode || 0 ) );\n\n\t\tlet scale = vec2( modelWorldMatrix[ 0 ].xyz.length(), modelWorldMatrix[ 1 ].xyz.length() );\n\n\t\tif ( scaleNode !== null ) {\n\n\t\t\tscale = scale.mul( vec2( scaleNode ) );\n\n\t\t}\n\n\t\tif ( camera.isPerspectiveCamera && sizeAttenuation === false ) {\n\n\t\t\tscale = scale.mul( mvPosition.z.negate() );\n\n\t\t}\n\n\t\tlet alignedPosition = positionGeometry.xy;\n\n\t\tif ( object.center && object.center.isVector2 === true ) {\n\n\t\t\tconst center = reference$1( 'center', 'vec2', object );\n\n\t\t\talignedPosition = alignedPosition.sub( center.sub( 0.5 ) );\n\n\t\t}\n\n\t\talignedPosition = alignedPosition.mul( scale );\n\n\t\tconst rotation = float( rotationNode || materialRotation );\n\n\t\tconst rotatedPosition = rotate( alignedPosition, rotation );\n\n\t\treturn vec4( mvPosition.xy.add( rotatedPosition ), mvPosition.zw );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.positionNode = source.positionNode;\n\t\tthis.rotationNode = source.rotationNode;\n\t\tthis.scaleNode = source.scaleNode;\n\n\t\treturn super.copy( source );\n\n\t}\n\n\t/**\n\t * Whether to use size attenuation or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget sizeAttenuation() {\n\n\t\treturn this._useSizeAttenuation;\n\n\t}\n\n\tset sizeAttenuation( value ) {\n\n\t\tif ( this._useSizeAttenuation !== value ) {\n\n\t\t\tthis._useSizeAttenuation = value;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nconst _defaultValues$1 = /*@__PURE__*/ new PointsMaterial();\nconst _size$4 = /*@__PURE__*/ new Vector2();\n\n/**\n * Node material version of {@link PointsMaterial}.\n *\n * This material can be used in two ways:\n *\n * - By rendering point primitives with {@link Points}. Since WebGPU only supports point primitives\n * with a pixel size of `1`, it's not possible to define a size.\n *\n * ```js\n * const pointCloud = new THREE.Points( geometry, new THREE.PointsNodeMaterial() );\n * ```\n *\n * - By rendering point primitives with {@link Sprites}. In this case, size is honored,\n * see {@link PointsNodeMaterial#sizeNode}.\n *\n * ```js\n * const instancedPoints = new THREE.Sprite( new THREE.PointsNodeMaterial( { positionNode: instancedBufferAttribute( positionAttribute ) } ) );\n * ```\n *\n * @augments SpriteNodeMaterial\n */\nclass PointsNodeMaterial extends SpriteNodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'PointsNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new points node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This node property provides an additional way to set the point size.\n\t\t *\n\t\t * Note that WebGPU only supports point primitives with 1 pixel size. Consequently,\n\t\t * this node has no effect when the material is used with {@link Points} and a WebGPU\n\t\t * backend. If an application wants to render points with a size larger than 1 pixel,\n\t\t * the material should be used with {@link Sprite} and instancing.\n\t\t *\n\t\t * @type {?Node<vec2>}\n\t\t * @default null\n\t\t */\n\t\tthis.sizeNode = null;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPointsNodeMaterial = true;\n\n\t\tthis.setDefaultValues( _defaultValues$1 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tsetupPositionView() {\n\n\t\tconst { positionNode } = this;\n\n\t\treturn modelViewMatrix.mul( vec3( positionNode || positionLocal ) ).xyz;\n\n\t}\n\n\tsetupVertexSprite( builder ) {\n\n\t\tconst { material, camera } = builder;\n\n\t\tconst { rotationNode, scaleNode, sizeNode, sizeAttenuation } = this;\n\n\t\tlet mvp = super.setupVertex( builder );\n\n\t\t// skip further processing if the material is not a node material\n\n\t\tif ( material.isNodeMaterial !== true ) {\n\n\t\t\treturn mvp;\n\n\t\t}\n\n\t\t// point size\n\n\t\tlet pointSize = sizeNode !== null ? vec2( sizeNode ) : materialPointSize;\n\n\t\tpointSize = pointSize.mul( screenDPR );\n\n\t\t// size attenuation\n\n\t\tif ( camera.isPerspectiveCamera && sizeAttenuation === true ) {\n\n\t\t\t// follow WebGLRenderer's implementation, and scale by half the canvas height in logical units\n\n\t\t\tpointSize = pointSize.mul( scale.div( positionView.z.negate() ) );\n\n\t\t}\n\n\t\t// scale\n\n\t\tif ( scaleNode && scaleNode.isNode ) {\n\n\t\t\tpointSize = pointSize.mul( vec2( scaleNode ) );\n\n\t\t}\n\n\t\t// compute offset\n\n\t\tlet offset = positionGeometry.xy;\n\n\t\t// apply rotation\n\n\t\tif ( rotationNode && rotationNode.isNode ) {\n\n\t\t\tconst rotation = float( rotationNode );\n\n\t\t\toffset = rotate( offset, rotation );\n\n\t\t}\n\n\t\t// account for point size\n\n\t\toffset = offset.mul( pointSize );\n\n\t\t// scale by viewport size\n\n\t\toffset = offset.div( viewportSize.div( 2 ) );\n\n\t\t// compensate for the perspective divide\n\n\t\toffset = offset.mul( mvp.w );\n\n\t\t// add offset\n\n\t\tmvp = mvp.add( vec4( offset, 0, 0 ) );\n\n\t\treturn mvp;\n\n\t}\n\n\tsetupVertex( builder ) {\n\n\t\tif ( builder.object.isPoints ) {\n\n\t\t\treturn super.setupVertex( builder );\n\n\n\t\t} else {\n\n\t\t\treturn this.setupVertexSprite( builder );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Whether alpha to coverage should be used or not.\n\t *\n\t * @type {boolean}\n\t * @default true\n\t */\n\tget alphaToCoverage() {\n\n\t\treturn this._useAlphaToCoverage;\n\n\t}\n\n\tset alphaToCoverage( value ) {\n\n\t\tif ( this._useAlphaToCoverage !== value ) {\n\n\t\t\tthis._useAlphaToCoverage = value;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nconst scale = /*@__PURE__*/ uniform( 1 ).onFrameUpdate( function ( { renderer } ) {\n\n\tconst size = renderer.getSize( _size$4 ); // logical units\n\n\tthis.value = 0.5 * size.y;\n\n} );\n\n/**\n * Represents lighting model for a shadow material. Used in {@link ShadowNodeMaterial}.\n *\n * @augments LightingModel\n */\nclass ShadowMaskModel extends LightingModel {\n\n\t/**\n\t * Constructs a new shadow mask model.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The shadow mask node.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.shadowNode = float( 1 ).toVar( 'shadowMask' );\n\n\t}\n\n\t/**\n\t * Only used to save the shadow mask.\n\t *\n\t * @param {Object} input - The input data.\n\t */\n\tdirect( { lightNode } ) {\n\n\t\tif ( lightNode.shadowNode !== null ) {\n\n\t\t\tthis.shadowNode.mulAssign( lightNode.shadowNode );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uses the shadow mask to produce the final color.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tfinish( { context } ) {\n\n\t\tdiffuseColor.a.mulAssign( this.shadowNode.oneMinus() );\n\n\t\tcontext.outgoingLight.rgb.assign( diffuseColor.rgb ); // TODO: Optimize LightsNode to avoid this assignment\n\n\t}\n\n}\n\nconst _defaultValues = /*@__PURE__*/ new ShadowMaterial();\n\n/**\n * Node material version of {@link ShadowMaterial}.\n *\n * @augments NodeMaterial\n */\nclass ShadowNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'ShadowNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new shadow node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isShadowNodeMaterial = true;\n\n\t\t/**\n\t\t * Set to `true` because so it's possible to implement\n\t\t * the shadow mask effect.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.lights = true;\n\n\t\t/**\n\t\t * Overwritten since shadow materials are transparent\n\t\t * by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.transparent = true;\n\n\t\tthis.setDefaultValues( _defaultValues );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * Setups the lighting model.\n\t *\n\t * @return {ShadowMaskModel} The lighting model.\n\t */\n\tsetupLightingModel( /*builder*/ ) {\n\n\t\treturn new ShadowMaskModel();\n\n\t}\n\n}\n\nconst scatteringDensity = property( 'vec3' );\nconst linearDepthRay = property( 'vec3' );\nconst outgoingRayLight = property( 'vec3' );\n\n/**\n * VolumetricLightingModel class extends the LightingModel to implement volumetric lighting effects.\n * This model calculates the scattering and transmittance of light through a volumetric medium.\n * It dynamically adjusts the direction of the ray based on the camera and object positions.\n * The model supports custom scattering and depth nodes to enhance the lighting effects.\n *\n * @augments LightingModel\n */\nclass VolumetricLightingModel extends LightingModel {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t}\n\n\tstart( builder ) {\n\n\t\tconst { material } = builder;\n\n\t\tconst startPos = property( 'vec3' );\n\t\tconst endPos = property( 'vec3' );\n\n\t\t// This approach dynamically changes the direction of the ray,\n\t\t// prioritizing the ray from the camera to the object if it is inside the mesh, and from the object to the camera if it is far away.\n\n\t\tIf( cameraPosition.sub( positionWorld ).length().greaterThan( modelRadius.mul( 2 ) ), () => {\n\n\t\t\tstartPos.assign( cameraPosition );\n\t\t\tendPos.assign( positionWorld );\n\n\t\t} ).Else( () => {\n\n\t\t\tstartPos.assign( positionWorld );\n\t\t\tendPos.assign( cameraPosition );\n\n\t\t} );\n\n\t\t//\n\n\t\tconst viewVector = endPos.sub( startPos );\n\n\t\tconst steps = uniform( 'int' ).onRenderUpdate( ( { material } ) => material.steps );\n\t\tconst stepSize = viewVector.length().div( steps ).toVar();\n\n\t\tconst rayDir = viewVector.normalize().toVar(); // TODO: toVar() should be automatic here ( in loop )\n\n\t\tconst distTravelled = float( 0.0 ).toVar();\n\t\tconst transmittance = vec3( 1 ).toVar();\n\n\t\tif ( material.offsetNode ) {\n\n\t\t\t// reduce banding\n\n\t\t\tdistTravelled.addAssign( material.offsetNode.mul( stepSize ) );\n\n\t\t}\n\n\t\tLoop( steps, () => {\n\n\t\t\tconst positionRay = startPos.add( rayDir.mul( distTravelled ) );\n\t\t\tconst positionViewRay = cameraViewMatrix.mul( vec4( positionRay, 1 ) ).xyz;\n\n\t\t\tif ( material.depthNode !== null ) {\n\n\t\t\t\tlinearDepthRay.assign( linearDepth( viewZToPerspectiveDepth( positionViewRay.z, cameraNear, cameraFar ) ) );\n\n\t\t\t\tbuilder.context.sceneDepthNode = linearDepth( material.depthNode ).toVar();\n\n\t\t\t}\n\n\t\t\tbuilder.context.positionWorld = positionRay;\n\t\t\tbuilder.context.shadowPositionWorld = positionRay;\n\t\t\tbuilder.context.positionView = positionViewRay;\n\n\t\t\tscatteringDensity.assign( 0 );\n\n\t\t\tlet scatteringNode;\n\n\t\t\tif ( material.scatteringNode ) {\n\n\t\t\t\tscatteringNode = material.scatteringNode( {\n\t\t\t\t\tpositionRay\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tsuper.start( builder );\n\n\t\t\tif ( scatteringNode ) {\n\n\t\t\t\tscatteringDensity.mulAssign( scatteringNode );\n\n\t\t\t}\n\n\t\t\t// beer's law\n\n\t\t\tconst falloff = scatteringDensity.mul( .01 ).negate().mul( stepSize ).exp();\n\t\t\ttransmittance.mulAssign( falloff );\n\n\t\t\t// move along the ray\n\n\t\t\tdistTravelled.addAssign( stepSize );\n\n\t\t} );\n\n\t\toutgoingRayLight.addAssign( transmittance.saturate().oneMinus() );\n\n\t}\n\n\tscatteringLight( lightColor, builder ) {\n\n\t\tconst sceneDepthNode = builder.context.sceneDepthNode;\n\n\t\tif ( sceneDepthNode ) {\n\n\t\t\tIf( sceneDepthNode.greaterThanEqual( linearDepthRay ), () => {\n\n\t\t\t\tscatteringDensity.addAssign( lightColor );\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\tscatteringDensity.addAssign( lightColor );\n\n\t\t}\n\n\t}\n\n\tdirect( { lightNode, lightColor }, builder ) {\n\n\t\t// Ignore lights with infinite distance\n\n\t\tif ( lightNode.light.distance === undefined ) return;\n\n\t\t// TODO: We need a viewportOpaque*() ( output, depth ) to fit with modern rendering approaches\n\n\t\tconst directLight = lightColor.xyz.toVar();\n\t\tdirectLight.mulAssign( lightNode.shadowNode ); // it no should be necessary if used in the same render pass\n\n\t\tthis.scatteringLight( directLight, builder );\n\n\t}\n\n\tdirectRectArea( { lightColor, lightPosition, halfWidth, halfHeight }, builder ) {\n\n\t\tconst p0 = lightPosition.add( halfWidth ).sub( halfHeight ); // counterclockwise; light shines in local neg z direction\n\t\tconst p1 = lightPosition.sub( halfWidth ).sub( halfHeight );\n\t\tconst p2 = lightPosition.sub( halfWidth ).add( halfHeight );\n\t\tconst p3 = lightPosition.add( halfWidth ).add( halfHeight );\n\n\t\tconst P = builder.context.positionView;\n\n\t\tconst directLight = lightColor.xyz.mul( LTC_Evaluate_Volume( { P, p0, p1, p2, p3 } ) ).pow( 1.5 );\n\n\t\tthis.scatteringLight( directLight, builder );\n\n\t}\n\n\tfinish( builder ) {\n\n\t\tbuilder.context.outgoingLight.assign( outgoingRayLight );\n\n\t}\n\n}\n\n/**\n * Volume node material.\n *\n * @augments NodeMaterial\n */\nclass VolumeNodeMaterial extends NodeMaterial {\n\n\tstatic get type() {\n\n\t\treturn 'VolumeNodeMaterial';\n\n\t}\n\n\t/**\n\t * Constructs a new volume node material.\n\t *\n\t * @param {Object} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isVolumeNodeMaterial = true;\n\n\t\t/**\n\t\t * Number of steps used for raymarching.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 25\n\t\t */\n\t\tthis.steps = 25;\n\n\t\t/**\n\t\t * Offsets the distance a ray has been traveled through a volume.\n\t\t * Can be used to implement dithering to reduce banding.\n\t\t *\n\t\t * @type {Node<float>}\n\t\t * @default null\n\t\t */\n\t\tthis.offsetNode = null;\n\n\t\t/**\n\t\t * Node used for scattering calculations.\n\t\t *\n\t\t * @type {Function|FunctionNode<vec4>}\n\t\t * @default null\n\t\t */\n\t\tthis.scatteringNode = null;\n\n\t\tthis.lights = true;\n\n\t\tthis.transparent = true;\n\t\tthis.side = BackSide;\n\n\t\tthis.depthTest = false;\n\t\tthis.depthWrite = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tsetupLightingModel() {\n\n\t\treturn new VolumetricLightingModel();\n\n\t}\n\n}\n\n/**\n * This module manages the internal animation loop of the renderer.\n *\n * @private\n */\nclass Animation {\n\n\t/**\n\t * Constructs a new animation loop management component.\n\t *\n\t * @param {Renderer} renderer - A reference to the main renderer.\n\t * @param {NodeManager} nodes - Renderer component for managing nodes related logic.\n\t * @param {Info} info - Renderer component for managing metrics and monitoring data.\n\t */\n\tconstructor( renderer, nodes, info ) {\n\n\t\t/**\n\t\t * A reference to the main renderer.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\t/**\n\t\t * Renderer component for managing nodes related logic.\n\t\t *\n\t\t * @type {NodeManager}\n\t\t */\n\t\tthis.nodes = nodes;\n\n\t\t/**\n\t\t * Renderer component for managing metrics and monitoring data.\n\t\t *\n\t\t * @type {Info}\n\t\t */\n\t\tthis.info = info;\n\n\t\t/**\n\t\t * A reference to the context from `requestAnimationFrame()` can\n\t\t * be called (usually `window`).\n\t\t *\n\t\t * @type {?(Window|XRSession)}\n\t\t */\n\t\tthis._context = typeof self !== 'undefined' ? self : null;\n\n\t\t/**\n\t\t * The user-defined animation loop.\n\t\t *\n\t\t * @type {?Function}\n\t\t * @default null\n\t\t */\n\t\tthis._animationLoop = null;\n\n\t\t/**\n\t\t * The requestId which is returned from the `requestAnimationFrame()` call.\n\t\t * Can be used to cancel the stop the animation loop.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis._requestId = null;\n\n\t}\n\n\t/**\n\t * Starts the internal animation loop.\n\t */\n\tstart() {\n\n\t\tconst update = ( time, xrFrame ) => {\n\n\t\t\tthis._requestId = this._context.requestAnimationFrame( update );\n\n\t\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t\tthis.nodes.nodeFrame.update();\n\n\t\t\tthis.info.frame = this.nodes.nodeFrame.frameId;\n\n\t\t\tthis.renderer._inspector.begin();\n\n\t\t\tif ( this._animationLoop !== null ) this._animationLoop( time, xrFrame );\n\n\t\t\tthis.renderer._inspector.finish();\n\n\t\t};\n\n\t\tupdate();\n\n\t}\n\n\t/**\n\t * Stops the internal animation loop.\n\t */\n\tstop() {\n\n\t\tif ( this._context !== null ) this._context.cancelAnimationFrame( this._requestId );\n\n\t\tthis._requestId = null;\n\n\t}\n\n\t/**\n\t * Returns the user-level animation loop.\n\t *\n\t * @return {?Function} The animation loop.\n\t */\n\tgetAnimationLoop() {\n\n\t\treturn this._animationLoop;\n\n\t}\n\n\t/**\n\t * Defines the user-level animation loop.\n\t *\n\t * @param {?Function} callback - The animation loop.\n\t */\n\tsetAnimationLoop( callback ) {\n\n\t\tthis._animationLoop = callback;\n\n\t}\n\n\t/**\n\t * Returns the animation context.\n\t *\n\t * @return {Window|XRSession} The animation context.\n\t */\n\tgetContext() {\n\n\t\treturn this._context;\n\n\t}\n\n\t/**\n\t * Defines the context in which `requestAnimationFrame()` is executed.\n\t *\n\t * @param {Window|XRSession} context - The context to set.\n\t */\n\tsetContext( context ) {\n\n\t\tthis._context = context;\n\n\t}\n\n\t/**\n\t * Frees all internal resources and stops the animation loop.\n\t */\n\tdispose() {\n\n\t\tthis.stop();\n\n\t}\n\n}\n\n/**\n * Data structure for the renderer. It allows defining values\n * with chained, hierarchical keys. Keys are meant to be\n * objects since the module internally works with Weak Maps\n * for performance reasons.\n *\n * @private\n */\nclass ChainMap {\n\n\t/**\n\t * Constructs a new Chain Map.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * A map of Weak Maps by their key length.\n\t\t *\n\t\t * @type {Object<number, WeakMap>}\n\t\t */\n\t\tthis.weakMaps = {};\n\n\n\t}\n\n\t/**\n\t * Returns the Weak Map for the given keys.\n\t *\n\t * @param {Array<Object>} keys - List of keys.\n\t * @return {WeakMap} The weak map.\n\t */\n\t_getWeakMap( keys ) {\n\n\t\tconst length = keys.length;\n\n\t\tlet weakMap = this.weakMaps[ length ];\n\n\t\tif ( weakMap === undefined ) {\n\n\t\t\tweakMap = new WeakMap();\n\t\t\tthis.weakMaps[ length ] = weakMap;\n\n\t\t}\n\n\t\treturn weakMap;\n\n\t}\n\n\t/**\n\t * Returns the value for the given array of keys.\n\t *\n\t * @param {Array<Object>} keys - List of keys.\n\t * @return {any} The value. Returns `undefined` if no value was found.\n\t */\n\tget( keys ) {\n\n\t\tlet map = this._getWeakMap( keys );\n\n\t\tfor ( let i = 0; i < keys.length - 1; i ++ ) {\n\n\t\t\tmap = map.get( keys[ i ] );\n\n\t\t\tif ( map === undefined ) return undefined;\n\n\t\t}\n\n\t\treturn map.get( keys[ keys.length - 1 ] );\n\n\t}\n\n\t/**\n\t * Sets the value for the given keys.\n\t *\n\t * @param {Array<Object>} keys - List of keys.\n\t * @param {any} value - The value to set.\n\t * @return {ChainMap} A reference to this Chain Map.\n\t */\n\tset( keys, value ) {\n\n\t\tlet map = this._getWeakMap( keys );\n\n\t\tfor ( let i = 0; i < keys.length - 1; i ++ ) {\n\n\t\t\tconst key = keys[ i ];\n\n\t\t\tif ( map.has( key ) === false ) map.set( key, new WeakMap() );\n\n\t\t\tmap = map.get( key );\n\n\t\t}\n\n\t\tmap.set( keys[ keys.length - 1 ], value );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Deletes a value for the given keys.\n\t *\n\t * @param {Array<Object>} keys - The keys.\n\t * @return {boolean} Returns `true` if the value has been removed successfully and `false` if the value has not be found.\n\t */\n\tdelete( keys ) {\n\n\t\tlet map = this._getWeakMap( keys );\n\n\t\tfor ( let i = 0; i < keys.length - 1; i ++ ) {\n\n\t\t\tmap = map.get( keys[ i ] );\n\n\t\t\tif ( map === undefined ) return false;\n\n\t\t}\n\n\t\treturn map.delete( keys[ keys.length - 1 ] );\n\n\t}\n\n}\n\nlet _id$a = 0;\n\nfunction getKeys( obj ) {\n\n\tconst keys = Object.keys( obj );\n\n\tlet proto = Object.getPrototypeOf( obj );\n\n\twhile ( proto ) {\n\n\t\tconst descriptors = Object.getOwnPropertyDescriptors( proto );\n\n\t\tfor ( const key in descriptors ) {\n\n\t\t\tif ( descriptors[ key ] !== undefined ) {\n\n\t\t\t\tconst descriptor = descriptors[ key ];\n\n\t\t\t\tif ( descriptor && typeof descriptor.get === 'function' ) {\n\n\t\t\t\t\tkeys.push( key );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tproto = Object.getPrototypeOf( proto );\n\n\t}\n\n\treturn keys;\n\n}\n\n/**\n * A render object is the renderer's representation of single entity that gets drawn\n * with a draw command. There is no unique mapping of render objects to 3D objects in the\n * scene since render objects also depend from the used material, the current render context\n * and the current scene's lighting.\n *\n * In general, the basic process of the renderer is:\n *\n * - Analyze the 3D objects in the scene and generate render lists containing render items.\n * - Process the render lists by calling one or more render commands for each render item.\n * - For each render command, request a render object and perform the draw.\n *\n * The module provides an interface to get data required for the draw command like the actual\n * draw parameters or vertex buffers. It also holds a series of caching related methods since\n * creating render objects should only be done when necessary.\n *\n * @private\n */\nclass RenderObject {\n\n\t/**\n\t * Constructs a new render object.\n\t *\n\t * @param {NodeManager} nodes - Renderer component for managing nodes related logic.\n\t * @param {Geometries} geometries - Renderer component for managing geometries.\n\t * @param {Renderer} renderer - The renderer.\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Material} material - The 3D object's material.\n\t * @param {Scene} scene - The scene the 3D object belongs to.\n\t * @param {Camera} camera - The camera the object should be rendered with.\n\t * @param {LightsNode} lightsNode - The lights node.\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {ClippingContext} clippingContext - The clipping context.\n\t */\n\tconstructor( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext ) {\n\n\t\tthis.id = _id$a ++;\n\n\t\t/**\n\t\t * Renderer component for managing nodes related logic.\n\t\t *\n\t\t * @type {NodeManager}\n\t\t * @private\n\t\t */\n\t\tthis._nodes = nodes;\n\n\t\t/**\n\t\t * Renderer component for managing geometries.\n\t\t *\n\t\t * @type {Geometries}\n\t\t * @private\n\t\t */\n\t\tthis._geometries = geometries;\n\n\t\t/**\n\t\t * The renderer.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\t/**\n\t\t * The 3D object.\n\t\t *\n\t\t * @type {Object3D}\n\t\t */\n\t\tthis.object = object;\n\n\t\t/**\n\t\t * The 3D object's material.\n\t\t *\n\t\t * @type {Material}\n\t\t */\n\t\tthis.material = material;\n\n\t\t/**\n\t\t * The scene the 3D object belongs to.\n\t\t *\n\t\t * @type {Scene}\n\t\t */\n\t\tthis.scene = scene;\n\n\t\t/**\n\t\t * The camera the 3D object should be rendered with.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * The lights node.\n\t\t *\n\t\t * @type {LightsNode}\n\t\t */\n\t\tthis.lightsNode = lightsNode;\n\n\t\t/**\n\t\t * The render context.\n\t\t *\n\t\t * @type {RenderContext}\n\t\t */\n\t\tthis.context = renderContext;\n\n\t\t/**\n\t\t * The 3D object's geometry.\n\t\t *\n\t\t * @type {BufferGeometry}\n\t\t */\n\t\tthis.geometry = object.geometry;\n\n\t\t/**\n\t\t * The render object's version.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.version = material.version;\n\n\t\t/**\n\t\t * The draw range of the geometry.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.drawRange = null;\n\n\t\t/**\n\t\t * An array holding the buffer attributes\n\t\t * of the render object. This entails attribute\n\t\t * definitions on geometry and node level.\n\t\t *\n\t\t * @type {?Array<BufferAttribute>}\n\t\t * @default null\n\t\t */\n\t\tthis.attributes = null;\n\n\t\t/**\n\t\t * An object holding the version of the\n\t\t * attributes. The keys are the attribute names\n\t\t * and the values are the attribute versions.\n\t\t *\n\t\t * @type {?Object<string, number>}\n\t\t * @default null\n\t\t */\n\t\tthis.attributesId = null;\n\n\t\t/**\n\t\t * A reference to a render pipeline the render\n\t\t * object is processed with.\n\t\t *\n\t\t * @type {RenderPipeline}\n\t\t * @default null\n\t\t */\n\t\tthis.pipeline = null;\n\n\t\t/**\n\t\t * Only relevant for objects using\n\t\t * multiple materials. This represents a group entry\n\t\t * from the respective `BufferGeometry`.\n\t\t *\n\t\t * @type {?{start: number, count: number}}\n\t\t * @default null\n\t\t */\n\t\tthis.group = null;\n\n\t\t/**\n\t\t * An array holding the vertex buffers which can\n\t\t * be buffer attributes but also interleaved buffers.\n\t\t *\n\t\t * @type {?Array<BufferAttribute|InterleavedBuffer>}\n\t\t * @default null\n\t\t */\n\t\tthis.vertexBuffers = null;\n\n\t\t/**\n\t\t * The parameters for the draw command.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.drawParams = null;\n\n\t\t/**\n\t\t * If this render object is used inside a render bundle,\n\t\t * this property points to the respective bundle group.\n\t\t *\n\t\t * @type {?BundleGroup}\n\t\t * @default null\n\t\t */\n\t\tthis.bundle = null;\n\n\t\t/**\n\t\t * The clipping context.\n\t\t *\n\t\t * @type {ClippingContext}\n\t\t */\n\t\tthis.clippingContext = clippingContext;\n\n\t\t/**\n\t\t * The clipping context's cache key.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.clippingContextCacheKey = clippingContext !== null ? clippingContext.cacheKey : '';\n\n\t\t/**\n\t\t * The initial node cache key.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.initialNodesCacheKey = this.getDynamicCacheKey();\n\n\t\t/**\n\t\t * The initial cache key.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.initialCacheKey = this.getCacheKey();\n\n\t\t/**\n\t\t * The node builder state.\n\t\t *\n\t\t * @type {?NodeBuilderState}\n\t\t * @private\n\t\t * @default null\n\t\t */\n\t\tthis._nodeBuilderState = null;\n\n\t\t/**\n\t\t * An array of bindings.\n\t\t *\n\t\t * @type {?Array<BindGroup>}\n\t\t * @private\n\t\t * @default null\n\t\t */\n\t\tthis._bindings = null;\n\n\t\t/**\n\t\t * Reference to the node material observer.\n\t\t *\n\t\t * @type {?NodeMaterialObserver}\n\t\t * @private\n\t\t * @default null\n\t\t */\n\t\tthis._monitor = null;\n\n\t\t/**\n\t\t * An event listener which is defined by `RenderObjects`. It performs\n\t\t * clean up tasks when `dispose()` on this render object.\n\t\t *\n\t\t * @method\n\t\t */\n\t\tthis.onDispose = null;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRenderObject = true;\n\n\t\t/**\n\t\t * An event listener which is executed when `dispose()` is called on\n\t\t * the material of this render object.\n\t\t *\n\t\t * @method\n\t\t */\n\t\tthis.onMaterialDispose = () => {\n\n\t\t\tthis.dispose();\n\n\t\t};\n\n\t\t/**\n\t\t * An event listener which is executed when `dispose()` is called on\n\t\t * the geometry of this render object.\n\t\t *\n\t\t * @method\n\t\t */\n\t\tthis.onGeometryDispose = () => {\n\n\t\t\t// clear geometry cache attributes\n\n\t\t\tthis.attributes = null;\n\t\t\tthis.attributesId = null;\n\n\t\t};\n\n\t\tthis.material.addEventListener( 'dispose', this.onMaterialDispose );\n\t\tthis.geometry.addEventListener( 'dispose', this.onGeometryDispose );\n\n\t}\n\n\t/**\n\t * Updates the clipping context.\n\t *\n\t * @param {ClippingContext} context - The clipping context to set.\n\t */\n\tupdateClipping( context ) {\n\n\t\tthis.clippingContext = context;\n\n\t}\n\n\t/**\n\t * Whether the clipping requires an update or not.\n\t *\n\t * @type {boolean}\n\t * @readonly\n\t */\n\tget clippingNeedsUpdate() {\n\n\t\tif ( this.clippingContext === null || this.clippingContext.cacheKey === this.clippingContextCacheKey ) return false;\n\n\t\tthis.clippingContextCacheKey = this.clippingContext.cacheKey;\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * The number of clipping planes defined in context of hardware clipping.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget hardwareClippingPlanes() {\n\n\t\treturn this.material.hardwareClipping === true ? this.clippingContext.unionClippingCount : 0;\n\n\t}\n\n\t/**\n\t * Returns the node builder state of this render object.\n\t *\n\t * @return {NodeBuilderState} The node builder state.\n\t */\n\tgetNodeBuilderState() {\n\n\t\treturn this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );\n\n\t}\n\n\t/**\n\t * Returns the node material observer of this render object.\n\t *\n\t * @return {NodeMaterialObserver} The node material observer.\n\t */\n\tgetMonitor() {\n\n\t\treturn this._monitor || ( this._monitor = this.getNodeBuilderState().observer );\n\n\t}\n\n\t/**\n\t * Returns an array of bind groups of this render object.\n\t *\n\t * @return {Array<BindGroup>} The bindings.\n\t */\n\tgetBindings() {\n\n\t\treturn this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );\n\n\t}\n\n\t/**\n\t * Returns a binding group by group name of this render object.\n\t *\n\t * @param {string} name - The name of the binding group.\n\t * @return {?BindGroup} The bindings.\n\t */\n\tgetBindingGroup( name ) {\n\n\t\tfor ( const bindingGroup of this.getBindings() ) {\n\n\t\t\tif ( bindingGroup.name === name ) {\n\n\t\t\t\treturn bindingGroup;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the index of the render object's geometry.\n\t *\n\t * @return {?BufferAttribute} The index. Returns `null` for non-indexed geometries.\n\t */\n\tgetIndex() {\n\n\t\treturn this._geometries.getIndex( this );\n\n\t}\n\n\t/**\n\t * Returns the indirect buffer attribute.\n\t *\n\t * @return {?BufferAttribute} The indirect attribute. `null` if no indirect drawing is used.\n\t */\n\tgetIndirect() {\n\n\t\treturn this._geometries.getIndirect( this );\n\n\t}\n\n\t/**\n\t * Returns the byte offset into the indirect attribute buffer.\n\t *\n\t * @return {number|Array<number>} The byte offset into the indirect attribute buffer.\n\t */\n\tgetIndirectOffset() {\n\n\t\treturn this._geometries.getIndirectOffset( this );\n\n\t}\n\n\t/**\n\t * Returns an array that acts as a key for identifying the render object in a chain map.\n\t *\n\t * @return {Array<Object>} An array with object references.\n\t */\n\tgetChainArray() {\n\n\t\treturn [ this.object, this.material, this.context, this.lightsNode ];\n\n\t}\n\n\t/**\n\t * This method is used when the geometry of a 3D object has been exchanged and the\n\t * respective render object now requires an update.\n\t *\n\t * @param {BufferGeometry} geometry - The geometry to set.\n\t */\n\tsetGeometry( geometry ) {\n\n\t\tthis.geometry = geometry;\n\t\tthis.attributes = null;\n\t\tthis.attributesId = null;\n\n\t}\n\n\t/**\n\t * Returns the buffer attributes of the render object. The returned array holds\n\t * attribute definitions on geometry and node level.\n\t *\n\t * @return {Array<BufferAttribute>} An array with buffer attributes.\n\t */\n\tgetAttributes() {\n\n\t\tif ( this.attributes !== null ) return this.attributes;\n\n\t\tconst nodeAttributes = this.getNodeBuilderState().nodeAttributes;\n\t\tconst geometry = this.geometry;\n\n\t\tconst attributes = [];\n\t\tconst vertexBuffers = new Set();\n\n\t\tconst attributesId = {};\n\n\t\tfor ( const nodeAttribute of nodeAttributes ) {\n\n\t\t\tlet attribute;\n\n\t\t\tif ( nodeAttribute.node && nodeAttribute.node.attribute ) {\n\n\t\t\t\t// node attribute\n\t\t\t\tattribute = nodeAttribute.node.attribute;\n\n\t\t\t} else {\n\n\t\t\t\t// geometry attribute\n\t\t\t\tattribute = geometry.getAttribute( nodeAttribute.name );\n\t\t\t\tattributesId[ nodeAttribute.name ] = attribute.id;\n\n\t\t\t}\n\n\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\tattributes.push( attribute );\n\n\t\t\tconst bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;\n\t\t\tvertexBuffers.add( bufferAttribute );\n\n\t\t}\n\n\t\tthis.attributes = attributes;\n\t\tthis.attributesId = attributesId;\n\t\tthis.vertexBuffers = Array.from( vertexBuffers.values() );\n\n\t\treturn attributes;\n\n\t}\n\n\t/**\n\t * Returns the vertex buffers of the render object.\n\t *\n\t * @return {Array<BufferAttribute|InterleavedBuffer>} An array with buffer attribute or interleaved buffers.\n\t */\n\tgetVertexBuffers() {\n\n\t\tif ( this.vertexBuffers === null ) this.getAttributes();\n\n\t\treturn this.vertexBuffers;\n\n\t}\n\n\t/**\n\t * Returns the draw parameters for the render object.\n\t *\n\t * @return {?{vertexCount: number, firstVertex: number, instanceCount: number, firstInstance: number}} The draw parameters.\n\t */\n\tgetDrawParameters() {\n\n\t\tconst { object, material, geometry, group, drawRange } = this;\n\n\t\tconst drawParams = this.drawParams || ( this.drawParams = {\n\t\t\tvertexCount: 0,\n\t\t\tfirstVertex: 0,\n\t\t\tinstanceCount: 0,\n\t\t\tfirstInstance: 0\n\t\t} );\n\n\t\tconst index = this.getIndex();\n\t\tconst hasIndex = ( index !== null );\n\n\t\tlet instanceCount = 1;\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tinstanceCount = geometry.instanceCount;\n\n\t\t} else if ( object.count !== undefined ) {\n\n\t\t\tinstanceCount = Math.max( 0, object.count );\n\n\t\t}\n\n\t\tif ( instanceCount === 0 ) return null;\n\n\t\tdrawParams.instanceCount = instanceCount;\n\n\t\tif ( object.isBatchedMesh === true ) return drawParams;\n\n\t\tlet rangeFactor = 1;\n\n\t\tif ( material.wireframe === true && ! object.isPoints && ! object.isLineSegments && ! object.isLine && ! object.isLineLoop ) {\n\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tlet firstVertex = drawRange.start * rangeFactor;\n\t\tlet lastVertex = ( drawRange.start + drawRange.count ) * rangeFactor;\n\n\t\tif ( group !== null ) {\n\n\t\t\tfirstVertex = Math.max( firstVertex, group.start * rangeFactor );\n\t\t\tlastVertex = Math.min( lastVertex, ( group.start + group.count ) * rangeFactor );\n\n\t\t}\n\n\t\tconst position = geometry.attributes.position;\n\t\tlet itemCount = Infinity;\n\n\t\tif ( hasIndex ) {\n\n\t\t\titemCount = index.count;\n\n\t\t} else if ( position !== undefined && position !== null ) {\n\n\t\t\titemCount = position.count;\n\n\t\t}\n\n\t\tfirstVertex = Math.max( firstVertex, 0 );\n\t\tlastVertex = Math.min( lastVertex, itemCount );\n\n\t\tconst count = lastVertex - firstVertex;\n\n\t\tif ( count < 0 || count === Infinity ) return null;\n\n\t\tdrawParams.vertexCount = count;\n\t\tdrawParams.firstVertex = firstVertex;\n\n\t\treturn drawParams;\n\n\t}\n\n\t/**\n\t * Returns the render object's geometry cache key.\n\t *\n\t * The geometry cache key is part of the material cache key.\n\t *\n\t * @return {string} The geometry cache key.\n\t */\n\tgetGeometryCacheKey() {\n\n\t\tconst { geometry } = this;\n\n\t\tlet cacheKey = '';\n\n\t\tfor ( const name of Object.keys( geometry.attributes ).sort() ) {\n\n\t\t\tconst attribute = geometry.attributes[ name ];\n\n\t\t\tcacheKey += name + ',';\n\n\t\t\tif ( attribute.data ) cacheKey += attribute.data.stride + ',';\n\t\t\tif ( attribute.offset ) cacheKey += attribute.offset + ',';\n\t\t\tif ( attribute.itemSize ) cacheKey += attribute.itemSize + ',';\n\t\t\tif ( attribute.normalized ) cacheKey += 'n,';\n\n\t\t}\n\n\t\t// structural equality isn't sufficient for morph targets since the\n\t\t// data are maintained in textures. only if the targets are all equal\n\t\t// the texture and thus the instance of `MorphNode` can be shared.\n\n\t\tfor ( const name of Object.keys( geometry.morphAttributes ).sort() ) {\n\n\t\t\tconst targets = geometry.morphAttributes[ name ];\n\n\t\t\tcacheKey += 'morph-' + name + ',';\n\n\t\t\tfor ( let i = 0, l = targets.length; i < l; i ++ ) {\n\n\t\t\t\tconst attribute = targets[ i ];\n\n\t\t\t\tcacheKey += attribute.id + ',';\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( geometry.index ) {\n\n\t\t\tcacheKey += 'index,';\n\n\t\t}\n\n\t\treturn cacheKey;\n\n\t}\n\n\t/**\n\t * Returns the render object's material cache key.\n\t *\n\t * The material cache key is part of the render object cache key.\n\t *\n\t * @return {number} The material cache key.\n\t */\n\tgetMaterialCacheKey() {\n\n\t\tconst { object, material, renderer } = this;\n\n\t\tlet cacheKey = material.customProgramCacheKey();\n\n\t\tfor ( const property of getKeys( material ) ) {\n\n\t\t\tif ( /^(is[A-Z]|_)|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;\n\n\t\t\tconst value = material[ property ];\n\n\t\t\tlet valueKey;\n\n\t\t\tif ( value !== null ) {\n\n\t\t\t\t// some material values require a formatting\n\n\t\t\t\tconst type = typeof value;\n\n\t\t\t\tif ( type === 'number' ) {\n\n\t\t\t\t\tvalueKey = value !== 0 ? '1' : '0'; // Convert to on/off, important for clearcoat, transmission, etc\n\n\t\t\t\t} else if ( type === 'object' ) {\n\n\t\t\t\t\tvalueKey = '{';\n\n\t\t\t\t\tif ( value.isTexture ) {\n\n\t\t\t\t\t\tvalueKey += value.mapping;\n\n\t\t\t\t\t\t// WebGPU must honor the sampler data because they are part of the bindings\n\n\t\t\t\t\t\tif ( renderer.backend.isWebGPUBackend === true ) {\n\n\t\t\t\t\t\t\tvalueKey += value.magFilter;\n\t\t\t\t\t\t\tvalueKey += value.minFilter;\n\t\t\t\t\t\t\tvalueKey += value.wrapS;\n\t\t\t\t\t\t\tvalueKey += value.wrapT;\n\t\t\t\t\t\t\tvalueKey += value.wrapR;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvalueKey += '}';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvalueKey = String( value );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvalueKey = String( value );\n\n\t\t\t}\n\n\t\t\tcacheKey += /*property + ':' +*/ valueKey + ',';\n\n\t\t}\n\n\t\tcacheKey += this.clippingContextCacheKey + ',';\n\n\t\tif ( object.geometry ) {\n\n\t\t\tcacheKey += this.getGeometryCacheKey();\n\n\t\t}\n\n\t\tif ( object.skeleton ) {\n\n\t\t\tcacheKey += object.skeleton.bones.length + ',';\n\n\t\t}\n\n\t\tif ( object.isBatchedMesh ) {\n\n\t\t\tcacheKey += object._matricesTexture.uuid + ',';\n\n\t\t\tif ( object._colorsTexture !== null ) {\n\n\t\t\t\tcacheKey += object._colorsTexture.uuid + ',';\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh || object.count > 1 || Array.isArray( object.morphTargetInfluences ) ) {\n\n\t\t\t// TODO: https://github.com/mrdoob/three.js/pull/29066#issuecomment-2269400850\n\n\t\t\tcacheKey += object.uuid + ',';\n\n\t\t}\n\n\t\tcacheKey += this.context.id + ',';\n\n\t\tcacheKey += object.receiveShadow + ',';\n\n\t\treturn hashString( cacheKey );\n\n\t}\n\n\t/**\n\t * Whether the geometry requires an update or not.\n\t *\n\t * @type {boolean}\n\t * @readonly\n\t */\n\tget needsGeometryUpdate() {\n\n\t\tif ( this.geometry.id !== this.object.geometry.id ) return true;\n\n\t\tif ( this.attributes !== null ) {\n\n\t\t\tconst attributesId = this.attributesId;\n\n\t\t\tfor ( const name in attributesId ) {\n\n\t\t\t\tconst attribute = this.geometry.getAttribute( name );\n\n\t\t\t\tif ( attribute === undefined || attributesId[ name ] !== attribute.id ) {\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Whether the render object requires an update or not.\n\t *\n\t * Note: There are two distinct places where render objects are checked for an update.\n\t *\n\t * 1. In `RenderObjects.get()` which is executed when the render object is request. This\n\t * method checks the `needsUpdate` flag and recreates the render object if necessary.\n\t * 2. In `Renderer._renderObjectDirect()` right after getting the render object via\n\t * `RenderObjects.get()`. The render object's NodeMaterialObserver is then used to detect\n\t * a need for a refresh due to material, geometry or object related value changes.\n\t *\n\t * TODO: Investigate if it's possible to merge both steps so there is only a single place\n\t * that performs the 'needsUpdate' check.\n\t *\n\t * @type {boolean}\n\t * @readonly\n\t */\n\tget needsUpdate() {\n\n\t\treturn /*this.object.static !== true &&*/ ( this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate );\n\n\t}\n\n\t/**\n\t * Returns the dynamic cache key which represents a key that is computed per draw command.\n\t *\n\t * @return {number} The cache key.\n\t */\n\tgetDynamicCacheKey() {\n\n\t\tlet cacheKey = 0;\n\n\t\t// `Nodes.getCacheKey()` returns an environment cache key which is not relevant when\n\t\t// the renderer is inside a shadow pass.\n\n\t\tif ( this.material.isShadowPassMaterial !== true ) {\n\n\t\t\tcacheKey = this._nodes.getCacheKey( this.scene, this.lightsNode );\n\n\t\t}\n\n\t\tif ( this.camera.isArrayCamera ) {\n\n\t\t\tcacheKey = hash$1( cacheKey, this.camera.cameras.length );\n\n\t\t}\n\n\t\tif ( this.object.receiveShadow ) {\n\n\t\t\tcacheKey = hash$1( cacheKey, 1 );\n\n\t\t}\n\n\t\tcacheKey = hash$1( cacheKey, this.renderer.contextNode.id, this.renderer.contextNode.version );\n\n\t\treturn cacheKey;\n\n\t}\n\n\t/**\n\t * Returns the render object's cache key.\n\t *\n\t * @return {number} The cache key.\n\t */\n\tgetCacheKey() {\n\n\t\treturn this.getMaterialCacheKey() + this.getDynamicCacheKey();\n\n\t}\n\n\t/**\n\t * Frees internal resources.\n\t */\n\tdispose() {\n\n\t\tthis.material.removeEventListener( 'dispose', this.onMaterialDispose );\n\t\tthis.geometry.removeEventListener( 'dispose', this.onGeometryDispose );\n\n\t\tthis.onDispose();\n\n\t}\n\n}\n\nconst _chainKeys$3 = [];\n\n/**\n * This module manages the render objects of the renderer.\n *\n * @private\n */\nclass RenderObjects {\n\n\t/**\n\t * Constructs a new render object management component.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t * @param {NodeManager} nodes - Renderer component for managing nodes related logic.\n\t * @param {Geometries} geometries - Renderer component for managing geometries.\n\t * @param {Pipelines} pipelines - Renderer component for managing pipelines.\n\t * @param {Bindings} bindings - Renderer component for managing bindings.\n\t * @param {Info} info - Renderer component for managing metrics and monitoring data.\n\t */\n\tconstructor( renderer, nodes, geometries, pipelines, bindings, info ) {\n\n\t\t/**\n\t\t * The renderer.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\t/**\n\t\t * Renderer component for managing nodes related logic.\n\t\t *\n\t\t * @type {NodeManager}\n\t\t */\n\t\tthis.nodes = nodes;\n\n\t\t/**\n\t\t * Renderer component for managing geometries.\n\t\t *\n\t\t * @type {Geometries}\n\t\t */\n\t\tthis.geometries = geometries;\n\n\t\t/**\n\t\t * Renderer component for managing pipelines.\n\t\t *\n\t\t * @type {Pipelines}\n\t\t */\n\t\tthis.pipelines = pipelines;\n\n\t\t/**\n\t\t * Renderer component for managing bindings.\n\t\t *\n\t\t * @type {Bindings}\n\t\t */\n\t\tthis.bindings = bindings;\n\n\t\t/**\n\t\t * Renderer component for managing metrics and monitoring data.\n\t\t *\n\t\t * @type {Info}\n\t\t */\n\t\tthis.info = info;\n\n\t\t/**\n\t\t * A dictionary that manages render contexts in chain maps\n\t\t * for each pass ID.\n\t\t *\n\t\t * @type {Object<string,ChainMap>}\n\t\t */\n\t\tthis.chainMaps = {};\n\n\t}\n\n\t/**\n\t * Returns a render object for the given object and state data.\n\t *\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Material} material - The 3D object's material.\n\t * @param {Scene} scene - The scene the 3D object belongs to.\n\t * @param {Camera} camera - The camera the 3D object should be rendered with.\n\t * @param {LightsNode} lightsNode - The lights node.\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {ClippingContext} clippingContext - The clipping context.\n\t * @param {string} [passId] - An optional ID for identifying the pass.\n\t * @return {RenderObject} The render object.\n\t */\n\tget( object, material, scene, camera, lightsNode, renderContext, clippingContext, passId ) {\n\n\t\tconst chainMap = this.getChainMap( passId );\n\n\t\t// set chain keys\n\n\t\t_chainKeys$3[ 0 ] = object;\n\t\t_chainKeys$3[ 1 ] = material;\n\t\t_chainKeys$3[ 2 ] = renderContext;\n\t\t_chainKeys$3[ 3 ] = lightsNode;\n\n\t\t//\n\n\t\tlet renderObject = chainMap.get( _chainKeys$3 );\n\n\t\tif ( renderObject === undefined ) {\n\n\t\t\trenderObject = this.createRenderObject( this.nodes, this.geometries, this.renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext, passId );\n\n\t\t\tchainMap.set( _chainKeys$3, renderObject );\n\n\t\t} else {\n\n\t\t\t// update references\n\n\t\t\trenderObject.camera = camera;\n\n\t\t\t//\n\n\t\t\trenderObject.updateClipping( clippingContext );\n\n\t\t\tif ( renderObject.needsGeometryUpdate ) {\n\n\t\t\t\trenderObject.setGeometry( object.geometry );\n\n\t\t\t}\n\n\t\t\tif ( renderObject.version !== material.version || renderObject.needsUpdate ) {\n\n\t\t\t\tif ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {\n\n\t\t\t\t\trenderObject.dispose();\n\n\t\t\t\t\trenderObject = this.get( object, material, scene, camera, lightsNode, renderContext, clippingContext, passId );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderObject.version = material.version;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// reset chain array\n\n\t\t_chainKeys$3[ 0 ] = null;\n\t\t_chainKeys$3[ 1 ] = null;\n\t\t_chainKeys$3[ 2 ] = null;\n\t\t_chainKeys$3[ 3 ] = null;\n\n\t\t//\n\n\t\treturn renderObject;\n\n\t}\n\n\t/**\n\t * Returns a chain map for the given pass ID.\n\t *\n\t * @param {string} [passId='default'] - The pass ID.\n\t * @return {ChainMap} The chain map.\n\t */\n\tgetChainMap( passId = 'default' ) {\n\n\t\treturn this.chainMaps[ passId ] || ( this.chainMaps[ passId ] = new ChainMap() );\n\n\t}\n\n\t/**\n\t * Frees internal resources.\n\t */\n\tdispose() {\n\n\t\tthis.chainMaps = {};\n\n\t}\n\n\t/**\n\t * Factory method for creating render objects with the given list of parameters.\n\t *\n\t * @param {NodeManager} nodes - Renderer component for managing nodes related logic.\n\t * @param {Geometries} geometries - Renderer component for managing geometries.\n\t * @param {Renderer} renderer - The renderer.\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Material} material - The object's material.\n\t * @param {Scene} scene - The scene the 3D object belongs to.\n\t * @param {Camera} camera - The camera the object should be rendered with.\n\t * @param {LightsNode} lightsNode - The lights node.\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {ClippingContext} clippingContext - The clipping context.\n\t * @param {string} [passId] - An optional ID for identifying the pass.\n\t * @return {RenderObject} The render object.\n\t */\n\tcreateRenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext, passId ) {\n\n\t\tconst chainMap = this.getChainMap( passId );\n\n\t\tconst renderObject = new RenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext );\n\n\t\trenderObject.onDispose = () => {\n\n\t\t\tthis.pipelines.delete( renderObject );\n\t\t\tthis.bindings.deleteForRender( renderObject );\n\t\t\tthis.nodes.delete( renderObject );\n\n\t\t\tchainMap.delete( renderObject.getChainArray() );\n\n\t\t};\n\n\t\treturn renderObject;\n\n\t}\n\n\n}\n\n/**\n * Data structure for the renderer. It is intended to manage\n * data of objects in dictionaries.\n *\n * @private\n */\nclass DataMap {\n\n\t/**\n\t * Constructs a new data map.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * `DataMap` internally uses a weak map\n\t\t * to manage its data.\n\t\t *\n\t\t * @type {WeakMap<Object, Object>}\n\t\t */\n\t\tthis.data = new WeakMap();\n\n\t}\n\n\t/**\n\t * Returns the dictionary for the given object.\n\t *\n\t * @param {Object} object - The object.\n\t * @return {Object} The dictionary.\n\t */\n\tget( object ) {\n\n\t\tlet map = this.data.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tthis.data.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\t/**\n\t * Deletes the dictionary for the given object.\n\t *\n\t * @param {Object} object - The object.\n\t * @return {?Object} The deleted dictionary.\n\t */\n\tdelete( object ) {\n\n\t\tlet map = null;\n\n\t\tif ( this.data.has( object ) ) {\n\n\t\t\tmap = this.data.get( object );\n\n\t\t\tthis.data.delete( object );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given object has a dictionary defined.\n\t *\n\t * @param {Object} object - The object to test.\n\t * @return {boolean} Whether a dictionary is defined or not.\n\t */\n\thas( object ) {\n\n\t\treturn this.data.has( object );\n\n\t}\n\n\t/**\n\t * Frees internal resources.\n\t */\n\tdispose() {\n\n\t\tthis.data = new WeakMap();\n\n\t}\n\n}\n\nconst AttributeType = {\n\tVERTEX: 1,\n\tINDEX: 2,\n\tSTORAGE: 3,\n\tINDIRECT: 4\n};\n\n// size of a chunk in bytes (STD140 layout)\n\nconst GPU_CHUNK_BYTES = 16;\n\n// @TODO: Move to src/constants.js\n\nconst BlendColorFactor = 211;\nconst OneMinusBlendColorFactor = 212;\n\n/**\n * This renderer module manages geometry attributes.\n *\n * @private\n * @augments DataMap\n */\nclass Attributes extends DataMap {\n\n\t/**\n\t * Constructs a new attribute management component.\n\t *\n\t * @param {Backend} backend - The renderer's backend.\n\t * @param {Info} info - Renderer component for managing metrics and monitoring data.\n\t */\n\tconstructor( backend, info ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The renderer's backend.\n\t\t *\n\t\t * @type {Backend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * Renderer component for managing metrics and monitoring data.\n\t\t *\n\t\t * @type {Info}\n\t\t */\n\t\tthis.info = info;\n\n\t}\n\n\t/**\n\t * Deletes the data for the given attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The attribute.\n\t * @return {?Object} The deleted attribute data.\n\t */\n\tdelete( attribute ) {\n\n\t\tconst attributeData = super.delete( attribute );\n\n\t\tif ( attributeData !== null ) {\n\n\t\t\tthis.backend.destroyAttribute( attribute );\n\n\t\t\tthis.info.destroyAttribute( attribute );\n\n\t\t}\n\n\t\treturn attributeData;\n\n\t}\n\n\t/**\n\t * Updates the given attribute. This method creates attribute buffers\n\t * for new attributes and updates data for existing ones.\n\t *\n\t * @param {BufferAttribute} attribute - The attribute to update.\n\t * @param {number} type - The attribute type.\n\t */\n\tupdate( attribute, type ) {\n\n\t\tconst data = this.get( attribute );\n\n\t\tif ( data.version === undefined ) {\n\n\t\t\tif ( type === AttributeType.VERTEX ) {\n\n\t\t\t\tthis.backend.createAttribute( attribute );\n\t\t\t\tthis.info.createAttribute( attribute );\n\n\t\t\t} else if ( type === AttributeType.INDEX ) {\n\n\t\t\t\tthis.backend.createIndexAttribute( attribute );\n\t\t\t\tthis.info.createIndexAttribute( attribute );\n\n\t\t\t} else if ( type === AttributeType.STORAGE ) {\n\n\t\t\t\tthis.backend.createStorageAttribute( attribute );\n\t\t\t\tthis.info.createStorageAttribute( attribute );\n\n\t\t\t} else if ( type === AttributeType.INDIRECT ) {\n\n\t\t\t\tthis.backend.createIndirectStorageAttribute( attribute );\n\t\t\t\tthis.info.createIndirectStorageAttribute( attribute );\n\n\t\t\t}\n\n\t\t\tdata.version = this._getBufferAttribute( attribute ).version;\n\n\t\t} else {\n\n\t\t\tconst bufferAttribute = this._getBufferAttribute( attribute );\n\n\t\t\tif ( data.version < bufferAttribute.version || bufferAttribute.usage === DynamicDrawUsage ) {\n\n\t\t\t\tthis.backend.updateAttribute( attribute );\n\n\t\t\t\tdata.version = bufferAttribute.version;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Utility method for handling interleaved buffer attributes correctly.\n\t * To process them, their `InterleavedBuffer` is returned.\n\t *\n\t * @param {BufferAttribute} attribute - The attribute.\n\t * @return {BufferAttribute|InterleavedBuffer}\n\t */\n\t_getBufferAttribute( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn attribute;\n\n\t}\n\n}\n\n/**\n * Returns the wireframe version for the given geometry.\n *\n * @private\n * @function\n * @param {BufferGeometry} geometry - The geometry.\n * @return {number} The version.\n */\nfunction getWireframeVersion( geometry ) {\n\n\treturn ( geometry.index !== null ) ? geometry.index.version : geometry.attributes.position.version;\n\n}\n\n/**\n * Returns the wireframe ID for the given geometry.\n *\n * @private\n * @function\n * @param {BufferGeometry} geometry - The geometry.\n * @return {number} The ID.\n */\nfunction getWireframeId( geometry ) {\n\n\treturn ( geometry.index !== null ) ? geometry.index.id : geometry.attributes.position.id;\n\n}\n\n/**\n * Returns a wireframe index attribute for the given geometry.\n *\n * @private\n * @function\n * @param {BufferGeometry} geometry - The geometry.\n * @return {BufferAttribute} The wireframe index attribute.\n */\nfunction getWireframeIndex( geometry ) {\n\n\tconst indices = [];\n\n\tconst geometryIndex = geometry.index;\n\tconst geometryPosition = geometry.attributes.position;\n\n\tif ( geometryIndex !== null ) {\n\n\t\tconst array = geometryIndex.array;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst a = array[ i + 0 ];\n\t\t\tconst b = array[ i + 1 ];\n\t\t\tconst c = array[ i + 2 ];\n\n\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t}\n\n\t} else {\n\n\t\tconst array = geometryPosition.array;\n\n\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\tconst a = i + 0;\n\t\t\tconst b = i + 1;\n\t\t\tconst c = i + 2;\n\n\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t}\n\n\t}\n\n\tconst attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\tattribute.version = getWireframeVersion( geometry );\n\tattribute.__id = getWireframeId( geometry );\n\n\treturn attribute;\n\n}\n\n/**\n * This renderer module manages geometries.\n *\n * @private\n * @augments DataMap\n */\nclass Geometries extends DataMap {\n\n\t/**\n\t * Constructs a new geometry management component.\n\t *\n\t * @param {Attributes} attributes - Renderer component for managing attributes.\n\t * @param {Info} info - Renderer component for managing metrics and monitoring data.\n\t */\n\tconstructor( attributes, info ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * Renderer component for managing attributes.\n\t\t *\n\t\t * @type {Attributes}\n\t\t */\n\t\tthis.attributes = attributes;\n\n\t\t/**\n\t\t * Renderer component for managing metrics and monitoring data.\n\t\t *\n\t\t * @type {Info}\n\t\t */\n\t\tthis.info = info;\n\n\t\t/**\n\t\t * Weak Map for managing attributes for wireframe rendering.\n\t\t *\n\t\t * @type {WeakMap<BufferGeometry,BufferAttribute>}\n\t\t */\n\t\tthis.wireframes = new WeakMap();\n\n\t\t/**\n\t\t * This Weak Map is used to make sure buffer attributes are\n\t\t * updated only once per render call.\n\t\t *\n\t\t * @type {WeakMap<BufferAttribute,number>}\n\t\t */\n\t\tthis.attributeCall = new WeakMap();\n\n\t\t/**\n\t\t * Stores the event listeners attached to geometries.\n\t\t *\n\t\t * @private\n\t\t * @type {Map<BufferGeometry,Function>}\n\t\t */\n\t\tthis._geometryDisposeListeners = new Map();\n\n\t}\n\n\t/**\n\t * Returns `true` if the given render object has an initialized geometry.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {boolean} Whether if the given render object has an initialized geometry or not.\n\t */\n\thas( renderObject ) {\n\n\t\tconst geometry = renderObject.geometry;\n\n\t\treturn super.has( geometry ) && this.get( geometry ).initialized === true;\n\n\t}\n\n\t/**\n\t * Prepares the geometry of the given render object for rendering.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t */\n\tupdateForRender( renderObject ) {\n\n\t\tif ( this.has( renderObject ) === false ) this.initGeometry( renderObject );\n\n\t\tthis.updateAttributes( renderObject );\n\n\t}\n\n\t/**\n\t * Initializes the geometry of the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t */\n\tinitGeometry( renderObject ) {\n\n\t\tconst geometry = renderObject.geometry;\n\t\tconst geometryData = this.get( geometry );\n\n\t\tgeometryData.initialized = true;\n\n\t\tthis.info.memory.geometries ++;\n\n\t\tconst onDispose = () => {\n\n\t\t\tthis.info.memory.geometries --;\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst geometryAttributes = renderObject.getAttributes();\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tthis.attributes.delete( index );\n\n\t\t\t}\n\n\t\t\tfor ( const geometryAttribute of geometryAttributes ) {\n\n\t\t\t\tthis.attributes.delete( geometryAttribute );\n\n\t\t\t}\n\n\t\t\tconst wireframeAttribute = this.wireframes.get( geometry );\n\n\t\t\tif ( wireframeAttribute !== undefined ) {\n\n\t\t\t\tthis.attributes.delete( wireframeAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry.removeEventListener( 'dispose', onDispose );\n\n\t\t\tthis._geometryDisposeListeners.delete( geometry );\n\n\t\t};\n\n\t\tgeometry.addEventListener( 'dispose', onDispose );\n\n\t\t// see #31798 why tracking separate remove listeners is required right now\n\t\t// TODO: Re-evaluate how onDispose() is managed in this component\n\t\tthis._geometryDisposeListeners.set( geometry, onDispose );\n\n\t}\n\n\t/**\n\t * Updates the geometry attributes of the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t */\n\tupdateAttributes( renderObject ) {\n\n\t\t// attributes\n\n\t\tconst attributes = renderObject.getAttributes();\n\n\t\tfor ( const attribute of attributes ) {\n\n\t\t\tif ( attribute.isStorageBufferAttribute || attribute.isStorageInstancedBufferAttribute ) {\n\n\t\t\t\tthis.updateAttribute( attribute, AttributeType.STORAGE );\n\n\t\t\t} else {\n\n\t\t\t\tthis.updateAttribute( attribute, AttributeType.VERTEX );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indexes\n\n\t\tconst index = this.getIndex( renderObject );\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.updateAttribute( index, AttributeType.INDEX );\n\n\t\t}\n\n\t\t// indirect\n\n\t\tconst indirect = renderObject.geometry.indirect;\n\n\t\tif ( indirect !== null ) {\n\n\t\t\tthis.updateAttribute( indirect, AttributeType.INDIRECT );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the given attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The attribute to update.\n\t * @param {number} type - The attribute type.\n\t */\n\tupdateAttribute( attribute, type ) {\n\n\t\tconst callId = this.info.render.calls;\n\n\t\tif ( ! attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( this.attributeCall.get( attribute ) !== callId ) {\n\n\t\t\t\tthis.attributes.update( attribute, type );\n\n\t\t\t\tthis.attributeCall.set( attribute, callId );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this.attributeCall.get( attribute ) === undefined ) {\n\n\t\t\t\tthis.attributes.update( attribute, type );\n\n\t\t\t\tthis.attributeCall.set( attribute, callId );\n\n\t\t\t} else if ( this.attributeCall.get( attribute.data ) !== callId ) {\n\n\t\t\t\tthis.attributes.update( attribute, type );\n\n\t\t\t\tthis.attributeCall.set( attribute.data, callId );\n\n\t\t\t\tthis.attributeCall.set( attribute, callId );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the indirect buffer attribute of the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {?BufferAttribute} The indirect attribute. `null` if no indirect drawing is used.\n\t */\n\tgetIndirect( renderObject ) {\n\n\t\treturn renderObject.geometry.indirect;\n\n\t}\n\n\t/**\n\t * Returns the byte offset into the indirect attribute buffer of the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {number} The byte offset into the indirect attribute buffer.\n\t */\n\tgetIndirectOffset( renderObject ) {\n\n\t\treturn renderObject.geometry.indirectOffset;\n\n\t}\n\n\t/**\n\t * Returns the index of the given render object's geometry. This is implemented\n\t * in a method to return a wireframe index if necessary.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {?BufferAttribute} The index. Returns `null` for non-indexed geometries.\n\t */\n\tgetIndex( renderObject ) {\n\n\t\tconst { geometry, material } = renderObject;\n\n\t\tlet index = geometry.index;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tconst wireframes = this.wireframes;\n\n\t\t\tlet wireframeAttribute = wireframes.get( geometry );\n\n\t\t\tif ( wireframeAttribute === undefined ) {\n\n\t\t\t\twireframeAttribute = getWireframeIndex( geometry );\n\n\t\t\t\twireframes.set( geometry, wireframeAttribute );\n\n\t\t\t} else if ( wireframeAttribute.version !== getWireframeVersion( geometry ) || wireframeAttribute.__id !== getWireframeId( geometry ) ) {\n\n\t\t\t\tthis.attributes.delete( wireframeAttribute );\n\n\t\t\t\twireframeAttribute = getWireframeIndex( geometry );\n\n\t\t\t\twireframes.set( geometry, wireframeAttribute );\n\n\t\t\t}\n\n\t\t\tindex = wireframeAttribute;\n\n\t\t}\n\n\t\treturn index;\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( const [ geometry, onDispose ] of this._geometryDisposeListeners.entries() ) {\n\n\t\t\tgeometry.removeEventListener( 'dispose', onDispose );\n\n\t\t}\n\n\t\tthis._geometryDisposeListeners.clear();\n\n\t}\n\n}\n\n/**\n * This renderer module provides a series of statistical information\n * about the GPU memory and the rendering process. Useful for debugging\n * and monitoring.\n */\nclass Info {\n\n\t/**\n\t * Constructs a new info component.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * Whether frame related metrics should automatically\n\t\t * be resetted or not. This property should be set to `false`\n\t\t * by apps which manage their own animation loop. They must\n\t\t * then call `renderer.info.reset()` once per frame manually.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoReset = true;\n\n\t\t/**\n\t\t * The current frame ID. This ID is managed\n\t\t * by `NodeFrame`.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default 0\n\t\t */\n\t\tthis.frame = 0;\n\n\t\t/**\n\t\t * The number of render calls since the\n\t\t * app has been started.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default 0\n\t\t */\n\t\tthis.calls = 0;\n\n\t\t/**\n\t\t * Render related metrics.\n\t\t *\n\t\t * @type {Object}\n\t\t * @readonly\n\t\t * @property {number} calls - The number of render calls since the app has been started.\n\t\t * @property {number} frameCalls - The number of render calls of the current frame.\n\t\t * @property {number} drawCalls - The number of draw calls of the current frame.\n\t\t * @property {number} triangles - The number of rendered triangle primitives of the current frame.\n\t\t * @property {number} points - The number of rendered point primitives of the current frame.\n\t\t * @property {number} lines - The number of rendered line primitives of the current frame.\n\t\t * @property {number} timestamp - The timestamp of the frame.\n\t\t */\n\t\tthis.render = {\n\t\t\tcalls: 0,\n\t\t\tframeCalls: 0,\n\t\t\tdrawCalls: 0,\n\t\t\ttriangles: 0,\n\t\t\tpoints: 0,\n\t\t\tlines: 0,\n\t\t\ttimestamp: 0,\n\t\t};\n\n\t\t/**\n\t\t * Compute related metrics.\n\t\t *\n\t\t * @type {Object}\n\t\t * @readonly\n\t\t * @property {number} calls - The number of compute calls since the app has been started.\n\t\t * @property {number} frameCalls - The number of compute calls of the current frame.\n\t\t * @property {number} timestamp - The timestamp of the frame when using `renderer.computeAsync()`.\n\t\t */\n\t\tthis.compute = {\n\t\t\tcalls: 0,\n\t\t\tframeCalls: 0,\n\t\t\ttimestamp: 0\n\t\t};\n\n\t\t/**\n\t\t * Memory related metrics.\n\t\t *\n\t\t * @type {Object}\n\t\t * @readonly\n\t\t * @property {number} geometries - The number of active geometries.\n\t\t * @property {number} textures - The number of active textures.\n\t\t * @property {number} attributes - The number of active attributes.\n\t\t * @property {number} indexAttributes - The number of active index attributes.\n\t\t * @property {number} storageAttributes - The number of active storage attributes.\n\t\t * @property {number} indirectStorageAttributes - The number of active indirect storage attributes.\n\t\t * @property {number} readbackBuffers - The number of active readback buffers.\n\t\t * @property {number} programs - The number of active programs.\n\t\t * @property {number} renderTargets - The number of active renderTargets.\n\t\t * @property {number} total - The total memory size in bytes.\n\t\t * @property {number} texturesSize - The memory size of active textures in bytes.\n\t\t * @property {number} attributesSize - The memory size of active attributes in bytes.\n\t\t * @property {number} indexAttributesSize - The memory size of active index attributes in bytes.\n\t\t * @property {number} storageAttributesSize - The memory size of active storage attributes in bytes.\n\t\t * @property {number} indirectStorageAttributesSize - The memory size of active indirect storage attributes in bytes.\n\t\t * @property {number} readbackBuffersSize - The memory size of active readback buffers in bytes.\n\t\t * @property {number} programsSize - The memory size of active programs in bytes.\n\t\t */\n\t\tthis.memory = {\n\t\t\tgeometries: 0,\n\t\t\ttextures: 0,\n\t\t\tattributes: 0,\n\t\t\tindexAttributes: 0,\n\t\t\tstorageAttributes: 0,\n\t\t\tindirectStorageAttributes: 0,\n\t\t\treadbackBuffers: 0,\n\t\t\tprograms: 0,\n\t\t\trenderTargets: 0,\n\t\t\ttotal: 0,\n\t\t\ttexturesSize: 0,\n\t\t\tattributesSize: 0,\n\t\t\tindexAttributesSize: 0,\n\t\t\tstorageAttributesSize: 0,\n\t\t\tindirectStorageAttributesSize: 0,\n\t\t\treadbackBuffersSize: 0,\n\t\t\tprogramsSize: 0\n\t\t};\n\n\t\t/**\n\t\t * Map for storing calculated byte sizes of tracked objects.\n\t\t *\n\t\t * @type {Map<Object, number>}\n\t\t * @private\n\t\t */\n\t\tthis.memoryMap = new Map();\n\n\t}\n\n\t/**\n\t * This method should be executed per draw call and updates the corresponding metrics.\n\t *\n\t * @param {Object3D} object - The 3D object that is going to be rendered.\n\t * @param {number} count - The vertex or index count.\n\t * @param {number} instanceCount - The instance count.\n\t */\n\tupdate( object, count, instanceCount ) {\n\n\t\tthis.render.drawCalls ++;\n\n\t\tif ( object.isMesh || object.isSprite ) {\n\n\t\t\tthis.render.triangles += instanceCount * ( count / 3 );\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\tthis.render.points += instanceCount * count;\n\n\t\t} else if ( object.isLineSegments ) {\n\n\t\t\tthis.render.lines += instanceCount * ( count / 2 );\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tthis.render.lines += instanceCount * ( count - 1 );\n\n\t\t} else {\n\n\t\t\terror( 'WebGPUInfo: Unknown object type.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Resets frame related metrics.\n\t */\n\treset() {\n\n\t\tthis.render.drawCalls = 0;\n\t\tthis.render.frameCalls = 0;\n\t\tthis.compute.frameCalls = 0;\n\n\t\tthis.render.triangles = 0;\n\t\tthis.render.points = 0;\n\t\tthis.render.lines = 0;\n\n\n\t}\n\n\t/**\n\t * Performs a complete reset of the object.\n\t */\n\tdispose() {\n\n\t\tthis.reset();\n\n\t\tthis.calls = 0;\n\n\t\tthis.render.calls = 0;\n\t\tthis.compute.calls = 0;\n\n\t\tthis.render.timestamp = 0;\n\t\tthis.compute.timestamp = 0;\n\n\t\tfor ( const prop in this.memory ) {\n\n\t\t\tthis.memory[ prop ] = 0;\n\n\t\t}\n\n\t\tthis.memoryMap.clear();\n\n\t}\n\n\t/**\n\t * Tracks texture memory explicitly, updating counts and byte tracking.\n\t *\n\t * @param {Texture} texture\n\t */\n\tcreateTexture( texture ) {\n\n\t\tconst size = this._getTextureMemorySize( texture );\n\t\tthis.memoryMap.set( texture, size );\n\n\t\tthis.memory.textures ++;\n\t\tthis.memory.total += size;\n\t\tthis.memory.texturesSize += size;\n\n\t}\n\n\t/**\n\t * Tracks texture memory explicitly, updating counts and byte tracking.\n\t *\n\t * @param {Texture} texture\n\t */\n\tdestroyTexture( texture ) {\n\n\t\tconst size = this.memoryMap.get( texture ) || 0;\n\t\tthis.memoryMap.delete( texture );\n\n\t\tthis.memory.textures --;\n\t\tthis.memory.total -= size;\n\t\tthis.memory.texturesSize -= size;\n\n\t}\n\n\t/**\n\t * Tracks attribute memory explicitly, updating counts and byte tracking.\n\t *\n\t * @param {BufferAttribute} attribute\n\t * @param {string} type - type of attribute\n\t * @private\n\t */\n\t_createAttribute( attribute, type ) {\n\n\t\tconst size = this._getAttributeMemorySize( attribute );\n\t\tthis.memoryMap.set( attribute, { size, type } );\n\n\t\tthis.memory[ type ] ++;\n\t\tthis.memory.total += size;\n\t\tthis.memory[ type + 'Size' ] += size;\n\n\t}\n\n\t/**\n\t * Tracks a regular attribute memory explicitly.\n\t *\n\t * @param {BufferAttribute} attribute - The attribute to track.\n\t */\n\tcreateAttribute( attribute ) {\n\n\t\tthis._createAttribute( attribute, 'attributes' );\n\n\t}\n\n\t/**\n\t * Tracks an index attribute memory explicitly.\n\t *\n\t * @param {BufferAttribute} attribute - The index attribute to track.\n\t */\n\tcreateIndexAttribute( attribute ) {\n\n\t\tthis._createAttribute( attribute, 'indexAttributes' );\n\n\t}\n\n\t/**\n\t * Tracks a storage attribute memory explicitly.\n\t *\n\t * @param {BufferAttribute} attribute - The storage attribute to track.\n\t */\n\tcreateStorageAttribute( attribute ) {\n\n\t\tthis._createAttribute( attribute, 'storageAttributes' );\n\n\t}\n\n\t/**\n\t * Tracks an indirect storage attribute memory explicitly.\n\t *\n\t * @param {BufferAttribute} attribute - The indirect storage attribute to track.\n\t */\n\tcreateIndirectStorageAttribute( attribute ) {\n\n\t\tthis._createAttribute( attribute, 'indirectStorageAttributes' );\n\n\t}\n\n\t/**\n\t * Tracks attribute memory explicitly, updating counts and byte tracking.\n\t *\n\t * @param {BufferAttribute} attribute\n\t */\n\tdestroyAttribute( attribute ) {\n\n\t\tconst data = this.memoryMap.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tthis.memoryMap.delete( attribute );\n\n\t\t\tthis.memory[ data.type ] --;\n\t\t\tthis.memory.total -= data.size;\n\t\t\tthis.memory[ data.type + 'Size' ] -= data.size;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Tracks a readback buffer memory explicitly.\n\t *\n\t * @param {ReadbackBuffer} readbackBuffer - The readback buffer to track.\n\t */\n\tcreateReadbackBuffer( readbackBuffer ) {\n\n\t\tconst maxByteLength = readbackBuffer.maxByteLength;\n\t\tthis.memoryMap.set( readbackBuffer, { size: maxByteLength, type: 'readbackBuffers' } );\n\n\t\tthis.memory.readbackBuffers ++;\n\t\tthis.memory.total += maxByteLength;\n\t\tthis.memory.readbackBuffersSize += maxByteLength;\n\n\t}\n\n\t/**\n\t * Tracks a readback buffer memory explicitly.\n\t *\n\t * @param {ReadbackBuffer} readbackBuffer - The readback buffer to track.\n\t */\n\tdestroyReadbackBuffer( readbackBuffer ) {\n\n\t\tconst { size } = this.memoryMap.get( readbackBuffer );\n\t\tthis.memoryMap.delete( readbackBuffer );\n\n\t\tthis.memory.readbackBuffers --;\n\t\tthis.memory.total -= size;\n\t\tthis.memory.readbackBuffersSize -= size;\n\n\t}\n\n\t/**\n\t * Tracks program memory explicitly, updating counts and byte tracking.\n\t *\n\t * @param {ProgrammableStage} program - The program to track.\n\t */\n\tcreateProgram( program ) {\n\n\t\tconst size = program.code.length; // Approx size\n\n\t\tthis.memoryMap.set( program, size );\n\n\t\tthis.memory.programs ++;\n\t\tthis.memory.total += size;\n\t\tthis.memory.programsSize += size;\n\n\t}\n\n\t/**\n\t * Tracks program memory explicitly, updating counts and byte tracking.\n\t *\n\t * @param {Object} program - The program to track.\n\t */\n\tdestroyProgram( program ) {\n\n\t\tconst size = this.memoryMap.get( program ) || 0;\n\t\tthis.memoryMap.delete( program );\n\n\t\tthis.memory.programs --;\n\t\tthis.memory.total -= size;\n\t\tthis.memory.programsSize -= size;\n\n\t}\n\n\t/**\n\t * Calculates the memory size of a texture in bytes.\n\t *\n\t * @param {Texture} texture - The texture to calculate the size for.\n\t * @return {number} The calculated size in bytes.\n\t * @private\n\t */\n\t_getTextureMemorySize( texture ) {\n\n\t\tif ( texture.isCompressedTexture ) {\n\n\t\t\treturn 1; // Fallback estimate since exact format decompressed isn't readily available without format maps\n\n\t\t}\n\n\t\tlet bytesPerChannel = 1;\n\n\t\tif ( texture.type === ByteType || texture.type === UnsignedByteType ) bytesPerChannel = 1;\n\t\telse if ( texture.type === ShortType || texture.type === UnsignedShortType || texture.type === HalfFloatType ) bytesPerChannel = 2;\n\t\telse if ( texture.type === IntType || texture.type === UnsignedIntType || texture.type === FloatType ) bytesPerChannel = 4;\n\n\t\tlet channels = 4; // RGBA default\n\n\t\tif ( texture.format === AlphaFormat || texture.format === RedFormat || texture.format === RedIntegerFormat || texture.format === DepthFormat || texture.format === DepthStencilFormat ) channels = 1;\n\t\telse if ( texture.format === RGFormat || texture.format === RGIntegerFormat ) channels = 2;\n\t\telse if ( texture.format === RGBFormat || texture.format === RGBIntegerFormat ) channels = 3;\n\n\t\tlet bytesPerPixel = bytesPerChannel * channels;\n\n\t\t// Packed overrides\n\t\tif ( texture.type === UnsignedShort4444Type || texture.type === UnsignedShort5551Type ) bytesPerPixel = 2;\n\t\telse if ( texture.type === UnsignedInt248Type || texture.type === UnsignedInt5999Type || texture.type === UnsignedInt101111Type ) bytesPerPixel = 4;\n\n\t\tconst width = texture.width || 1;\n\t\tconst height = texture.height || 1;\n\t\tconst depth = texture.isCubeTexture ? 6 : ( texture.depth || 1 );\n\n\t\tlet size = width * height * depth * bytesPerPixel;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tif ( mipmaps && mipmaps.length > 0 ) {\n\n\t\t\tlet mipmapSize = 0;\n\t\t\tfor ( let i = 0; i < mipmaps.length; i ++ ) {\n\n\t\t\t\tconst mipmap = mipmaps[ i ];\n\t\t\t\tif ( mipmap.data ) {\n\n\t\t\t\t\tmipmapSize += mipmap.data.byteLength;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst mipWidth = mipmap.width || Math.max( 1, width >> i );\n\t\t\t\t\tconst mipHeight = mipmap.height || Math.max( 1, height >> i );\n\t\t\t\t\tmipmapSize += mipWidth * mipHeight * depth * bytesPerPixel;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tsize += mipmapSize;\n\n\t\t} else if ( texture.generateMipmaps ) {\n\n\t\t\tsize = size * 1.333; // MiP chain approximation\n\n\t\t}\n\n\t\treturn Math.round( size );\n\n\t}\n\n\t/**\n\t * Calculates the memory size of an attribute in bytes.\n\t *\n\t * @param {BufferAttribute} attribute - The attribute to calculate the size for.\n\t * @return {number} The calculated size in bytes.\n\t * @private\n\t */\n\t_getAttributeMemorySize( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tif ( attribute.array ) {\n\n\t\t\treturn attribute.array.byteLength;\n\n\t\t} else if ( attribute.count && attribute.itemSize ) {\n\n\t\t\treturn attribute.count * attribute.itemSize * 4; // Assume Float32\n\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n}\n\n/**\n * Abstract class for representing pipelines.\n *\n * @private\n * @abstract\n */\nclass Pipeline {\n\n\t/**\n\t * Constructs a new pipeline.\n\t *\n\t * @param {string} cacheKey - The pipeline's cache key.\n\t */\n\tconstructor( cacheKey ) {\n\n\t\t/**\n\t\t * The pipeline's cache key.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.cacheKey = cacheKey;\n\n\t\t/**\n\t\t * How often the pipeline is currently in use.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\n/**\n * Class for representing render pipelines.\n *\n * @private\n * @augments Pipeline\n */\nclass RenderObjectPipeline extends Pipeline {\n\n\t/**\n\t * Constructs a new render object pipeline.\n\t *\n\t * @param {string} cacheKey - The pipeline's cache key.\n\t * @param {ProgrammableStage} vertexProgram - The pipeline's vertex shader.\n\t * @param {ProgrammableStage} fragmentProgram - The pipeline's fragment shader.\n\t */\n\tconstructor( cacheKey, vertexProgram, fragmentProgram ) {\n\n\t\tsuper( cacheKey );\n\n\t\t/**\n\t\t * The pipeline's vertex shader.\n\t\t *\n\t\t * @type {ProgrammableStage}\n\t\t */\n\t\tthis.vertexProgram = vertexProgram;\n\n\t\t/**\n\t\t * The pipeline's fragment shader.\n\t\t *\n\t\t * @type {ProgrammableStage}\n\t\t */\n\t\tthis.fragmentProgram = fragmentProgram;\n\n\t}\n\n}\n\n/**\n * Class for representing compute pipelines.\n *\n * @private\n * @augments Pipeline\n */\nclass ComputePipeline extends Pipeline {\n\n\t/**\n\t * Constructs a new compute pipeline.\n\t *\n\t * @param {string} cacheKey - The pipeline's cache key.\n\t * @param {ProgrammableStage} computeProgram - The pipeline's compute shader.\n\t */\n\tconstructor( cacheKey, computeProgram ) {\n\n\t\tsuper( cacheKey );\n\n\t\t/**\n\t\t * The pipeline's compute shader.\n\t\t *\n\t\t * @type {ProgrammableStage}\n\t\t */\n\t\tthis.computeProgram = computeProgram;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isComputePipeline = true;\n\n\t}\n\n}\n\nlet _id$9 = 0;\n\n/**\n * Class for representing programmable stages which are vertex,\n * fragment or compute shaders. Unlike fixed-function states (like blending),\n * they represent the programmable part of a pipeline.\n *\n * @private\n */\nclass ProgrammableStage {\n\n\t/**\n\t * Constructs a new programmable stage.\n\t *\n\t * @param {string} code - The shader code.\n\t * @param {('vertex'|'fragment'|'compute')} stage - The type of stage.\n\t * @param {string} name - The name of the shader.\n\t * @param {?Array<Object>} [transforms=null] - The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).\n\t * @param {?Array<Object>} [attributes=null] - The attributes (only relevant for compute stages with WebGL 2 which uses Transform Feedback).\n\t */\n\tconstructor( code, stage, name, transforms = null, attributes = null ) {\n\n\t\t/**\n\t\t * The id of the programmable stage.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.id = _id$9 ++;\n\n\t\t/**\n\t\t * The shader code.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.code = code;\n\n\t\t/**\n\t\t * The type of stage.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.stage = stage;\n\n\t\t/**\n\t\t * The name of the stage.\n\t\t * This is used for debugging purposes.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).\n\t\t *\n\t\t * @type {?Array<Object>}\n\t\t */\n\t\tthis.transforms = transforms;\n\n\t\t/**\n\t\t * The attributes (only relevant for compute stages with WebGL 2 which uses Transform Feedback).\n\t\t *\n\t\t * @type {?Array<Object>}\n\t\t */\n\t\tthis.attributes = attributes;\n\n\t\t/**\n\t\t * How often the programmable stage is currently in use.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\n/**\n * This renderer module manages the pipelines of the renderer.\n *\n * @private\n * @augments DataMap\n */\nclass Pipelines extends DataMap {\n\n\t/**\n\t * Constructs a new pipeline management component.\n\t *\n\t * @param {Backend} backend - The renderer's backend.\n\t * @param {NodeManager} nodes - Renderer component for managing nodes related logic.\n\t * @param {Info} info - Renderer component for managing metrics and monitoring data.\n\t */\n\tconstructor( backend, nodes, info ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The renderer's backend.\n\t\t *\n\t\t * @type {Backend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * Renderer component for managing nodes related logic.\n\t\t *\n\t\t * @type {NodeManager}\n\t\t */\n\t\tthis.nodes = nodes;\n\n\t\t/**\n\t\t * Renderer component for managing metrics and monitoring data.\n\t\t *\n\t\t * @type {Info}\n\t\t */\n\t\tthis.info = info;\n\n\t\t/**\n\t\t * A references to the bindings management component.\n\t\t * This reference will be set inside the `Bindings`\n\t\t * constructor.\n\t\t *\n\t\t * @type {?Bindings}\n\t\t * @default null\n\t\t */\n\t\tthis.bindings = null;\n\n\t\t/**\n\t\t * Internal cache for maintaining pipelines.\n\t\t * The key of the map is a cache key, the value the pipeline.\n\t\t *\n\t\t * @type {Map<string,Pipeline>}\n\t\t */\n\t\tthis.caches = new Map();\n\n\t\t/**\n\t\t * This dictionary maintains for each shader stage type (vertex,\n\t\t * fragment and compute) the programmable stage objects which\n\t\t * represent the actual shader code.\n\t\t *\n\t\t * @type {Object<string,Map<string, ProgrammableStage>>}\n\t\t */\n\t\tthis.programs = {\n\t\t\tvertex: new Map(),\n\t\t\tfragment: new Map(),\n\t\t\tcompute: new Map()\n\t\t};\n\n\t}\n\n\t/**\n\t * Returns a compute pipeline for the given compute node.\n\t *\n\t * @param {Node} computeNode - The compute node.\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t * @return {ComputePipeline} The compute pipeline.\n\t */\n\tgetForCompute( computeNode, bindings ) {\n\n\t\tconst { backend } = this;\n\n\t\tconst data = this.get( computeNode );\n\n\t\tif ( this._needsComputeUpdate( computeNode ) ) {\n\n\t\t\tconst previousPipeline = data.pipeline;\n\n\t\t\tif ( previousPipeline ) {\n\n\t\t\t\tpreviousPipeline.usedTimes --;\n\t\t\t\tpreviousPipeline.computeProgram.usedTimes --;\n\n\t\t\t}\n\n\t\t\t// get shader\n\n\t\t\tconst nodeBuilderState = this.nodes.getForCompute( computeNode );\n\n\t\t\t// programmable stage\n\n\t\t\tlet stageCompute = this.programs.compute.get( nodeBuilderState.computeShader );\n\n\t\t\tif ( stageCompute === undefined ) {\n\n\t\t\t\tif ( previousPipeline && previousPipeline.computeProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.computeProgram );\n\n\t\t\t\tstageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', computeNode.name, nodeBuilderState.transforms, nodeBuilderState.nodeAttributes );\n\t\t\t\tthis.programs.compute.set( nodeBuilderState.computeShader, stageCompute );\n\n\t\t\t\tbackend.createProgram( stageCompute );\n\t\t\t\tthis.info.createProgram( stageCompute );\n\n\t\t\t}\n\n\t\t\t// determine compute pipeline\n\n\t\t\tconst cacheKey = this._getComputeCacheKey( computeNode, stageCompute );\n\n\t\t\tlet pipeline = this.caches.get( cacheKey );\n\n\t\t\tif ( pipeline === undefined ) {\n\n\t\t\t\tif ( previousPipeline && previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );\n\n\t\t\t\tpipeline = this._getComputePipeline( computeNode, stageCompute, cacheKey, bindings );\n\n\t\t\t}\n\n\t\t\t// keep track of all used times\n\n\t\t\tpipeline.usedTimes ++;\n\t\t\tstageCompute.usedTimes ++;\n\n\t\t\t//\n\n\t\t\tdata.version = computeNode.version;\n\t\t\tdata.pipeline = pipeline;\n\n\t\t}\n\n\t\treturn data.pipeline;\n\n\t}\n\n\t/**\n\t * Returns a render pipeline for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {?Array<Promise>} [promises=null] - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.\n\t * @return {RenderObjectPipeline} The render pipeline.\n\t */\n\tgetForRender( renderObject, promises = null ) {\n\n\t\tconst { backend } = this;\n\n\t\tconst data = this.get( renderObject );\n\n\t\tif ( this._needsRenderUpdate( renderObject ) ) {\n\n\t\t\tconst previousPipeline = data.pipeline;\n\n\t\t\tif ( previousPipeline ) {\n\n\t\t\t\tpreviousPipeline.usedTimes --;\n\t\t\t\tpreviousPipeline.vertexProgram.usedTimes --;\n\t\t\t\tpreviousPipeline.fragmentProgram.usedTimes --;\n\n\t\t\t}\n\n\t\t\t// get shader\n\n\t\t\tconst nodeBuilderState = renderObject.getNodeBuilderState();\n\n\t\t\tconst name = renderObject.material ? renderObject.material.name : '';\n\n\t\t\t// programmable stages\n\n\t\t\tlet stageVertex = this.programs.vertex.get( nodeBuilderState.vertexShader );\n\n\t\t\tif ( stageVertex === undefined ) {\n\n\t\t\t\tif ( previousPipeline && previousPipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.vertexProgram );\n\n\t\t\t\tstageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex', name );\n\t\t\t\tthis.programs.vertex.set( nodeBuilderState.vertexShader, stageVertex );\n\n\t\t\t\tbackend.createProgram( stageVertex );\n\t\t\t\tthis.info.createProgram( stageVertex );\n\n\t\t\t}\n\n\t\t\tlet stageFragment = this.programs.fragment.get( nodeBuilderState.fragmentShader );\n\n\t\t\tif ( stageFragment === undefined ) {\n\n\t\t\t\tif ( previousPipeline && previousPipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.fragmentProgram );\n\n\t\t\t\tstageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment', name );\n\t\t\t\tthis.programs.fragment.set( nodeBuilderState.fragmentShader, stageFragment );\n\n\t\t\t\tbackend.createProgram( stageFragment );\n\t\t\t\tthis.info.createProgram( stageFragment );\n\n\t\t\t}\n\n\t\t\t// determine render pipeline\n\n\t\t\tconst cacheKey = this._getRenderCacheKey( renderObject, stageVertex, stageFragment );\n\n\t\t\tlet pipeline = this.caches.get( cacheKey );\n\n\t\t\tif ( pipeline === undefined ) {\n\n\t\t\t\tif ( previousPipeline && previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );\n\n\t\t\t\tpipeline = this._getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises );\n\n\t\t\t} else {\n\n\t\t\t\trenderObject.pipeline = pipeline;\n\n\t\t\t}\n\n\t\t\t// keep track of all used times\n\n\t\t\tpipeline.usedTimes ++;\n\t\t\tstageVertex.usedTimes ++;\n\t\t\tstageFragment.usedTimes ++;\n\n\t\t\t//\n\n\t\t\tdata.pipeline = pipeline;\n\n\t\t}\n\n\t\treturn data.pipeline;\n\n\t}\n\n\t/**\n\t * Checks if the render pipeline for the given render object is ready for drawing.\n\t * Returns false if the GPU pipeline is still being compiled asynchronously.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {boolean} True if the pipeline is ready for drawing.\n\t */\n\tisReady( renderObject ) {\n\n\t\tconst data = this.get( renderObject );\n\t\tconst pipeline = data.pipeline;\n\n\t\tif ( pipeline === undefined ) return false;\n\n\t\tconst pipelineData = this.backend.get( pipeline );\n\n\t\treturn pipelineData.pipeline !== undefined && pipelineData.pipeline !== null;\n\n\t}\n\n\t/**\n\t * Deletes the pipeline for the given render object.\n\t *\n\t * @param {RenderObject} object - The render object.\n\t * @return {?Object} The deleted dictionary.\n\t */\n\tdelete( object ) {\n\n\t\tconst pipeline = this.get( object ).pipeline;\n\n\t\tif ( pipeline ) {\n\n\t\t\t// pipeline\n\n\t\t\tpipeline.usedTimes --;\n\n\t\t\tif ( pipeline.usedTimes === 0 ) this._releasePipeline( pipeline );\n\n\t\t\t// programs\n\n\t\t\tif ( pipeline.isComputePipeline ) {\n\n\t\t\t\tpipeline.computeProgram.usedTimes --;\n\n\t\t\t\tif ( pipeline.computeProgram.usedTimes === 0 ) this._releaseProgram( pipeline.computeProgram );\n\n\t\t\t} else {\n\n\t\t\t\tpipeline.fragmentProgram.usedTimes --;\n\t\t\t\tpipeline.vertexProgram.usedTimes --;\n\n\t\t\t\tif ( pipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( pipeline.vertexProgram );\n\t\t\t\tif ( pipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( pipeline.fragmentProgram );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn super.delete( object );\n\n\t}\n\n\t/**\n\t * Frees internal resources.\n\t */\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tthis.caches = new Map();\n\t\tthis.programs = {\n\t\t\tvertex: new Map(),\n\t\t\tfragment: new Map(),\n\t\t\tcompute: new Map()\n\t\t};\n\n\t}\n\n\t/**\n\t * Updates the pipeline for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t */\n\tupdateForRender( renderObject ) {\n\n\t\tthis.getForRender( renderObject );\n\n\t}\n\n\t/**\n\t * Returns a compute pipeline for the given parameters.\n\t *\n\t * @private\n\t * @param {Node} computeNode - The compute node.\n\t * @param {ProgrammableStage} stageCompute - The programmable stage representing the compute shader.\n\t * @param {string} cacheKey - The cache key.\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t * @return {ComputePipeline} The compute pipeline.\n\t */\n\t_getComputePipeline( computeNode, stageCompute, cacheKey, bindings ) {\n\n\t\t// check for existing pipeline\n\n\t\tcacheKey = cacheKey || this._getComputeCacheKey( computeNode, stageCompute );\n\n\t\tlet pipeline = this.caches.get( cacheKey );\n\n\t\tif ( pipeline === undefined ) {\n\n\t\t\tpipeline = new ComputePipeline( cacheKey, stageCompute );\n\n\t\t\tthis.caches.set( cacheKey, pipeline );\n\n\t\t\tthis.backend.createComputePipeline( pipeline, bindings );\n\n\t\t}\n\n\t\treturn pipeline;\n\n\t}\n\n\t/**\n\t * Returns a render pipeline for the given parameters.\n\t *\n\t * @private\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {ProgrammableStage} stageVertex - The programmable stage representing the vertex shader.\n\t * @param {ProgrammableStage} stageFragment - The programmable stage representing the fragment shader.\n\t * @param {string} cacheKey - The cache key.\n\t * @param {?Array<Promise>} promises - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.\n\t * @return {RenderObjectPipeline} The render pipeline.\n\t */\n\t_getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises ) {\n\n\t\t// check for existing pipeline\n\n\t\tcacheKey = cacheKey || this._getRenderCacheKey( renderObject, stageVertex, stageFragment );\n\n\t\tlet pipeline = this.caches.get( cacheKey );\n\n\t\tif ( pipeline === undefined ) {\n\n\t\t\tpipeline = new RenderObjectPipeline( cacheKey, stageVertex, stageFragment );\n\n\t\t\tthis.caches.set( cacheKey, pipeline );\n\n\t\t\trenderObject.pipeline = pipeline;\n\n\t\t\t// The `promises` array is `null` by default and only set to an empty array when\n\t\t\t// `Renderer.compileAsync()` is used. The next call actually fills the array with\n\t\t\t// pending promises that resolve when the render pipelines are ready for rendering.\n\n\t\t\tthis.backend.createRenderPipeline( renderObject, promises );\n\n\t\t}\n\n\t\treturn pipeline;\n\n\t}\n\n\t/**\n\t * Computes a cache key representing a compute pipeline.\n\t *\n\t * @private\n\t * @param {Node} computeNode - The compute node.\n\t * @param {ProgrammableStage} stageCompute - The programmable stage representing the compute shader.\n\t * @return {string} The cache key.\n\t */\n\t_getComputeCacheKey( computeNode, stageCompute ) {\n\n\t\treturn computeNode.id + ',' + stageCompute.id;\n\n\t}\n\n\t/**\n\t * Computes a cache key representing a render pipeline.\n\t *\n\t * @private\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {ProgrammableStage} stageVertex - The programmable stage representing the vertex shader.\n\t * @param {ProgrammableStage} stageFragment - The programmable stage representing the fragment shader.\n\t * @return {string} The cache key.\n\t */\n\t_getRenderCacheKey( renderObject, stageVertex, stageFragment ) {\n\n\t\treturn stageVertex.id + ',' + stageFragment.id + ',' + this.backend.getRenderCacheKey( renderObject );\n\n\t}\n\n\t/**\n\t * Releases the given pipeline.\n\t *\n\t * @private\n\t * @param {Pipeline} pipeline - The pipeline to release.\n\t */\n\t_releasePipeline( pipeline ) {\n\n\t\tthis.caches.delete( pipeline.cacheKey );\n\n\t}\n\n\t/**\n\t * Releases the shader program.\n\t *\n\t * @private\n\t * @param {Object} program - The shader program to release.\n\t */\n\t_releaseProgram( program ) {\n\n\t\tconst code = program.code;\n\t\tconst stage = program.stage;\n\n\t\tthis.programs[ stage ].delete( code );\n\n\t\tthis.info.destroyProgram( program );\n\n\t}\n\n\t/**\n\t * Returns `true` if the compute pipeline for the given compute node requires an update.\n\t *\n\t * @private\n\t * @param {Node} computeNode - The compute node.\n\t * @return {boolean} Whether the compute pipeline for the given compute node requires an update or not.\n\t */\n\t_needsComputeUpdate( computeNode ) {\n\n\t\tconst data = this.get( computeNode );\n\n\t\treturn data.pipeline === undefined || data.version !== computeNode.version;\n\n\t}\n\n\t/**\n\t * Returns `true` if the render pipeline for the given render object requires an update.\n\t *\n\t * @private\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {boolean} Whether the render object for the given render object requires an update or not.\n\t */\n\t_needsRenderUpdate( renderObject ) {\n\n\t\tconst data = this.get( renderObject );\n\n\t\treturn data.pipeline === undefined || this.backend.needsRenderUpdate( renderObject );\n\n\t}\n\n}\n\n/**\n * This renderer module manages the bindings of the renderer.\n *\n * @private\n * @augments DataMap\n */\nclass Bindings extends DataMap {\n\n\t/**\n\t * Constructs a new bindings management component.\n\t *\n\t * @param {Backend} backend - The renderer's backend.\n\t * @param {NodeManager} nodes - Renderer component for managing nodes related logic.\n\t * @param {Textures} textures - Renderer component for managing textures.\n\t * @param {Attributes} attributes - Renderer component for managing attributes.\n\t * @param {Pipelines} pipelines - Renderer component for managing pipelines.\n\t * @param {Info} info - Renderer component for managing metrics and monitoring data.\n\t */\n\tconstructor( backend, nodes, textures, attributes, pipelines, info ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The renderer's backend.\n\t\t *\n\t\t * @type {Backend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * Renderer component for managing textures.\n\t\t *\n\t\t * @type {Textures}\n\t\t */\n\t\tthis.textures = textures;\n\n\t\t/**\n\t\t * Renderer component for managing pipelines.\n\t\t *\n\t\t * @type {Pipelines}\n\t\t */\n\t\tthis.pipelines = pipelines;\n\n\t\t/**\n\t\t * Renderer component for managing attributes.\n\t\t *\n\t\t * @type {Attributes}\n\t\t */\n\t\tthis.attributes = attributes;\n\n\t\t/**\n\t\t * Renderer component for managing nodes related logic.\n\t\t *\n\t\t * @type {NodeManager}\n\t\t */\n\t\tthis.nodes = nodes;\n\n\t\t/**\n\t\t * Renderer component for managing metrics and monitoring data.\n\t\t *\n\t\t * @type {Info}\n\t\t */\n\t\tthis.info = info;\n\n\t\tthis.pipelines.bindings = this; // assign bindings to pipelines\n\n\t}\n\n\t/**\n\t * Returns the bind groups for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {Array<BindGroup>} The bind groups.\n\t */\n\tgetForRender( renderObject ) {\n\n\t\tconst bindings = renderObject.getBindings();\n\n\t\tfor ( const bindGroup of bindings ) {\n\n\t\t\tconst groupData = this.get( bindGroup );\n\n\t\t\tif ( groupData.bindGroup === undefined ) {\n\n\t\t\t\t// each object defines an array of bindings (ubos, textures, samplers etc.)\n\n\t\t\t\tthis._init( bindGroup );\n\n\t\t\t\tthis.backend.createBindings( bindGroup, bindings, 0 );\n\n\t\t\t\tgroupData.bindGroup = bindGroup;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bindings;\n\n\t}\n\n\t/**\n\t * Returns the bind groups for the given compute node.\n\t *\n\t * @param {Node} computeNode - The compute node.\n\t * @return {Array<BindGroup>} The bind groups.\n\t */\n\tgetForCompute( computeNode ) {\n\n\t\tconst bindings = this.nodes.getForCompute( computeNode ).bindings;\n\n\t\tfor ( const bindGroup of bindings ) {\n\n\t\t\tconst groupData = this.get( bindGroup );\n\n\t\t\tif ( groupData.bindGroup === undefined ) {\n\n\t\t\t\tthis._init( bindGroup );\n\n\t\t\t\tthis.backend.createBindings( bindGroup, bindings, 0 );\n\n\t\t\t\tgroupData.bindGroup = bindGroup;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bindings;\n\n\t}\n\n\t/**\n\t * Updates the bindings for the given compute node.\n\t *\n\t * @param {Node} computeNode - The compute node.\n\t */\n\tupdateForCompute( computeNode ) {\n\n\t\tthis._updateBindings( this.getForCompute( computeNode ) );\n\n\t}\n\n\t/**\n\t * Updates the bindings for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t */\n\tupdateForRender( renderObject ) {\n\n\t\tthis._updateBindings( this.getForRender( renderObject ) );\n\n\t}\n\n\t/**\n\t * Deletes the bindings for the given compute node.\n\t *\n\t * @param {Node} computeNode - The compute node.\n\t */\n\tdeleteForCompute( computeNode ) {\n\n\t\tconst bindings = this.nodes.getForCompute( computeNode ).bindings;\n\n\t\tfor ( const bindGroup of bindings ) {\n\n\t\t\tthis.backend.deleteBindGroupData( bindGroup );\n\t\t\tthis.delete( bindGroup );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Deletes the bindings for the given renderObject node.\n\t *\n\t * @param {RenderObject} renderObject - The renderObject.\n\t */\n\tdeleteForRender( renderObject ) {\n\n\t\tconst bindings = renderObject.getBindings();\n\n\t\tfor ( const bindGroup of bindings ) {\n\n\t\t\tthis.backend.deleteBindGroupData( bindGroup );\n\t\t\tthis.delete( bindGroup );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the given array of bindings.\n\t *\n\t * @param {Array<BindGroup>} bindings - The bind groups.\n\t */\n\t_updateBindings( bindings ) {\n\n\t\tfor ( const bindGroup of bindings ) {\n\n\t\t\tthis._update( bindGroup, bindings );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Initializes the given bind group.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group to initialize.\n\t */\n\t_init( bindGroup ) {\n\n\t\tfor ( const binding of bindGroup.bindings ) {\n\n\t\t\tif ( binding.isSampledTexture ) {\n\n\t\t\t\tthis.textures.updateTexture( binding.texture );\n\n\t\t\t} else if ( binding.isSampler ) {\n\n\t\t\t\tthis.textures.updateSampler( binding.texture );\n\n\t\t\t} else if ( binding.isStorageBuffer ) {\n\n\t\t\t\tconst attribute = binding.attribute;\n\t\t\t\tconst attributeType = attribute.isIndirectStorageBufferAttribute ? AttributeType.INDIRECT : AttributeType.STORAGE;\n\n\t\t\t\tthis.attributes.update( attribute, attributeType );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the given bind group.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group to update.\n\t * @param {Array<BindGroup>} bindings - The bind groups.\n\t */\n\t_update( bindGroup, bindings ) {\n\n\t\tconst { backend } = this;\n\n\t\tlet needsBindingsUpdate = false;\n\t\tlet cacheBindings = true;\n\t\tlet cacheIndex = 0;\n\t\tlet version = 0;\n\n\t\t// iterate over all bindings and check if buffer updates or a new binding group is required\n\n\t\tfor ( const binding of bindGroup.bindings ) {\n\n\t\t\tconst updatedGroup = this.nodes.updateGroup( binding );\n\n\t\t\t// every uniforms group is a uniform buffer. So if no update is required,\n\t\t\t// we move one with the next binding. Otherwise the next if block will update the group.\n\n\t\t\tif ( updatedGroup === false ) continue;\n\n\t\t\t//\n\n\t\t\tif ( binding.isStorageBuffer ) {\n\n\t\t\t\tconst attribute = binding.attribute;\n\t\t\t\tconst attributeType = attribute.isIndirectStorageBufferAttribute ? AttributeType.INDIRECT : AttributeType.STORAGE;\n\n\t\t\t\tconst bindingData = backend.get( binding );\n\n\t\t\t\tthis.attributes.update( attribute, attributeType );\n\n\t\t\t\tif ( bindingData.attribute !== attribute ) {\n\n\t\t\t\t\tbindingData.attribute = attribute;\n\n\t\t\t\t\tneedsBindingsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( binding.isUniformBuffer ) {\n\n\t\t\t\tconst updated = binding.update();\n\n\t\t\t\tif ( updated ) {\n\n\t\t\t\t\tbackend.updateBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t} else if ( binding.isSampledTexture ) {\n\n\t\t\t\tconst updated = binding.update();\n\n\t\t\t\t// get the texture data after the update, to sync the texture reference from node\n\n\t\t\t\tconst texture = binding.texture;\n\t\t\t\tconst texturesTextureData = this.textures.get( texture );\n\n\t\t\t\tif ( updated ) {\n\n\t\t\t\t\t// version: update the texture data or create a new one\n\n\t\t\t\t\tthis.textures.updateTexture( texture );\n\n\t\t\t\t\t// generation: update the bindings if the binding refers to a different texture object\n\n\t\t\t\t\tif ( binding.generation !== texturesTextureData.generation ) {\n\n\t\t\t\t\t\tbinding.generation = texturesTextureData.generation;\n\n\t\t\t\t\t\tneedsBindingsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// keep track which bind groups refer to the current texture (this is needed for dispose)\n\n\t\t\t\t\ttexturesTextureData.bindGroups.add( bindGroup );\n\n\t\t\t\t}\n\n\t\t\t\tconst textureData = backend.get( texture );\n\n\t\t\t\tif ( textureData.externalTexture !== undefined || texturesTextureData.isDefaultTexture ) {\n\n\t\t\t\t\tcacheBindings = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcacheIndex = cacheIndex * 10 + texture.id;\n\t\t\t\t\tversion += texture.version;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.isStorageTexture === true && texture.mipmapsAutoUpdate === true ) {\n\n\t\t\t\t\tconst textureData = this.get( texture );\n\n\t\t\t\t\tif ( binding.store === true ) {\n\n\t\t\t\t\t\ttextureData.needsMipmap = true;\n\n\t\t\t\t\t} else if ( this.textures.needsMipmaps( texture ) && textureData.needsMipmap === true ) {\n\n\t\t\t\t\t\tthis.backend.generateMipmaps( texture );\n\n\t\t\t\t\t\ttextureData.needsMipmap = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( binding.isSampler ) {\n\n\t\t\t\tconst updated = binding.update();\n\n\t\t\t\tif ( updated ) {\n\n\t\t\t\t\tconst samplerKey = this.textures.updateSampler( binding.texture );\n\n\t\t\t\t\tif ( binding.samplerKey !== samplerKey ) {\n\n\t\t\t\t\t\tbinding.samplerKey = samplerKey;\n\n\t\t\t\t\t\tneedsBindingsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( binding.isBuffer && binding.updateRanges.length > 0 ) {\n\n\t\t\t\tbinding.clearUpdateRanges();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsBindingsUpdate === true ) {\n\n\t\t\tthis.backend.updateBindings( bindGroup, bindings, cacheBindings ? cacheIndex : 0, version );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Default sorting function for opaque render items.\n *\n * @private\n * @function\n * @param {Object} a - The first render item.\n * @param {Object} b - The second render item.\n * @return {number} A numeric value which defines the sort order.\n */\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n/**\n * Default sorting function for transparent render items.\n *\n * @private\n * @function\n * @param {Object} a - The first render item.\n * @param {Object} b - The second render item.\n * @return {number} A numeric value which defines the sort order.\n */\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n/**\n * Returns `true` if the given transparent material requires a double pass.\n *\n * @private\n * @function\n * @param {Material} material - The transparent material.\n * @return {boolean} Whether the given material requires a double pass or not.\n */\nfunction needsDoublePass( material ) {\n\n\tconst hasTransmission = material.transmission > 0 || ( material.transmissionNode && material.transmissionNode.isNode );\n\n\treturn hasTransmission && material.side === DoubleSide && material.forceSinglePass === false;\n\n}\n\n/**\n * When the renderer analyzes the scene at the beginning of a render call,\n * it stores 3D object for further processing in render lists. Depending on the\n * properties of a 3D objects (like their transformation or material state), the\n * objects are maintained in ordered lists for the actual rendering.\n *\n * Render lists are unique per scene and camera combination.\n *\n * @private\n * @augments Pipeline\n */\nclass RenderList {\n\n\t/**\n\t * Constructs a render list.\n\t *\n\t * @param {Lighting} lighting - The lighting management component.\n\t * @param {Scene} scene - The scene.\n\t * @param {Camera} camera - The camera the scene is rendered with.\n\t */\n\tconstructor( lighting, scene, camera ) {\n\n\t\t/**\n\t\t * 3D objects are transformed into render items and stored in this array.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.renderItems = [];\n\n\t\t/**\n\t\t * The current render items index.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.renderItemsIndex = 0;\n\n\t\t/**\n\t\t * A list with opaque render items.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.opaque = [];\n\n\t\t/**\n\t\t * A list with transparent render items which require\n\t\t * double pass rendering (e.g. transmissive objects).\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.transparentDoublePass = [];\n\n\t\t/**\n\t\t * A list with transparent render items.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.transparent = [];\n\n\t\t/**\n\t\t * A list with transparent render bundle data.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.bundles = [];\n\n\t\t/**\n\t\t * The render list's lights node. This node is later\n\t\t * relevant for the actual analytical light nodes which\n\t\t * compute the scene's lighting in the shader.\n\t\t *\n\t\t * @type {LightsNode}\n\t\t */\n\t\tthis.lightsNode = lighting.getNode( scene, camera );\n\n\t\t/**\n\t\t * The scene's lights stored in an array. This array\n\t\t * is used to setup the lights node.\n\t\t *\n\t\t * @type {Array<Light>}\n\t\t */\n\t\tthis.lightsArray = [];\n\n\t\t/**\n\t\t * The scene.\n\t\t *\n\t\t * @type {Scene}\n\t\t */\n\t\tthis.scene = scene;\n\n\t\t/**\n\t\t * The camera the scene is rendered with.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * How many objects perform occlusion query tests.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.occlusionQueryCount = 0;\n\n\t}\n\n\t/**\n\t * This method is called right at the beginning of a render call\n\t * before the scene is analyzed. It prepares the internal data\n\t * structures for the upcoming render lists generation.\n\t *\n\t * @return {RenderList} A reference to this render list.\n\t */\n\tbegin() {\n\n\t\tthis.renderItemsIndex = 0;\n\n\t\tthis.opaque.length = 0;\n\t\tthis.transparentDoublePass.length = 0;\n\t\tthis.transparent.length = 0;\n\t\tthis.bundles.length = 0;\n\n\t\tthis.lightsArray.length = 0;\n\n\t\tthis.occlusionQueryCount = 0;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a render item for the giving render item state. The state is defined\n\t * by a series of object-related parameters.\n\t *\n\t * The method avoids object creation by holding render items and reusing them in\n\t * subsequent render calls (just with different property values).\n\t *\n\t * @param {Object3D} object - The 3D object.\n\t * @param {BufferGeometry} geometry - The 3D object's geometry.\n\t * @param {Material} material - The 3D object's material.\n\t * @param {number} groupOrder - The current group order.\n\t * @param {number} z - Th 3D object's depth value (z value in clip space).\n\t * @param {?number} group - {?Object} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.\n\t * @param {ClippingContext} clippingContext - The current clipping context.\n\t * @return {Object} The render item.\n\t */\n\tgetNextRenderItem( object, geometry, material, groupOrder, z, group, clippingContext ) {\n\n\t\tlet renderItem = this.renderItems[ this.renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group,\n\t\t\t\tclippingContext: clippingContext\n\t\t\t};\n\n\t\t\tthis.renderItems[ this.renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\t\t\trenderItem.clippingContext = clippingContext;\n\n\t\t}\n\n\t\tthis.renderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\t/**\n\t * Pushes the given object as a render item to the internal render lists.\n\t * The selected lists depend on the object properties.\n\t *\n\t * @param {Object3D} object - The 3D object.\n\t * @param {BufferGeometry} geometry - The 3D object's geometry.\n\t * @param {Material} material - The 3D object's material.\n\t * @param {number} groupOrder - The current group order.\n\t * @param {number} z - Th 3D object's depth value (z value in clip space).\n\t * @param {?number} group - {?Object} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.\n\t * @param {ClippingContext} clippingContext - The current clipping context.\n\t */\n\tpush( object, geometry, material, groupOrder, z, group, clippingContext ) {\n\n\t\tconst renderItem = this.getNextRenderItem( object, geometry, material, groupOrder, z, group, clippingContext );\n\n\t\tif ( object.occlusionTest === true ) this.occlusionQueryCount ++;\n\n\t\tif ( material.transparent === true || material.transmission > 0 ||\n\t\t\t( material.transmissionNode && material.transmissionNode.isNode ) ||\n\t\t\t( material.backdropNode && material.backdropNode.isNode ) ) {\n\n\t\t\tif ( needsDoublePass( material ) ) this.transparentDoublePass.push( renderItem );\n\n\t\t\tthis.transparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\tthis.opaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Inserts the given object as a render item at the start of the internal render lists.\n\t * The selected lists depend on the object properties.\n\t *\n\t * @param {Object3D} object - The 3D object.\n\t * @param {BufferGeometry} geometry - The 3D object's geometry.\n\t * @param {Material} material - The 3D object's material.\n\t * @param {number} groupOrder - The current group order.\n\t * @param {number} z - Th 3D object's depth value (z value in clip space).\n\t * @param {?number} group - {?Object} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.\n\t * @param {ClippingContext} clippingContext - The current clipping context.\n\t */\n\tunshift( object, geometry, material, groupOrder, z, group, clippingContext ) {\n\n\t\tconst renderItem = this.getNextRenderItem( object, geometry, material, groupOrder, z, group, clippingContext );\n\n\t\tif ( material.transparent === true || material.transmission > 0 ||\n\t\t\t( material.transmissionNode && material.transmissionNode.isNode ) ||\n\t\t\t( material.backdropNode && material.backdropNode.isNode ) ) {\n\n\t\t\tif ( needsDoublePass( material ) ) this.transparentDoublePass.unshift( renderItem );\n\n\t\t\tthis.transparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\tthis.opaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pushes render bundle group data into the render list.\n\t *\n\t * @param {Object} group - Bundle group data.\n\t */\n\tpushBundle( group ) {\n\n\t\tthis.bundles.push( group );\n\n\t}\n\n\t/**\n\t * Pushes a light into the render list.\n\t *\n\t * @param {Light} light - The light.\n\t */\n\tpushLight( light ) {\n\n\t\tthis.lightsArray.push( light );\n\n\t}\n\n\t/**\n\t * Sorts the internal render lists.\n\t *\n\t * @param {?function(any, any): number} customOpaqueSort - A custom sort function for opaque objects.\n\t * @param {?function(any, any): number} customTransparentSort -  A custom sort function for transparent objects.\n\t */\n\tsort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( this.opaque.length > 1 ) this.opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( this.transparentDoublePass.length > 1 ) this.transparentDoublePass.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( this.transparent.length > 1 ) this.transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\t/**\n\t * This method performs finalizing tasks right after the render lists\n\t * have been generated.\n\t */\n\tfinish() {\n\n\t\t// update lights\n\n\t\tthis.lightsNode.setLights( this.lightsArray );\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = this.renderItemsIndex, il = this.renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = this.renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.groupOrder = null;\n\t\t\trenderItem.renderOrder = null;\n\t\t\trenderItem.z = null;\n\t\t\trenderItem.group = null;\n\t\t\trenderItem.clippingContext = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _chainKeys$2 = [];\n\n/**\n * This renderer module manages the render lists which are unique\n * per scene and camera combination.\n *\n * @private\n */\nclass RenderLists {\n\n\t/**\n\t * Constructs a render lists management component.\n\t *\n\t * @param {Lighting} lighting - The lighting management component.\n\t */\n\tconstructor( lighting ) {\n\n\t\t/**\n\t\t * The lighting management component.\n\t\t *\n\t\t * @type {Lighting}\n\t\t */\n\t\tthis.lighting = lighting;\n\n\t\t/**\n\t\t * The internal chain map which holds the render lists.\n\t\t *\n\t\t * @type {ChainMap}\n\t\t */\n\t\tthis.lists = new ChainMap();\n\n\t}\n\n\t/**\n\t * Returns a render list for the given scene and camera.\n\t *\n\t * @param {Scene} scene - The scene.\n\t * @param {Camera} camera - The camera.\n\t * @return {RenderList} The render list.\n\t */\n\tget( scene, camera ) {\n\n\t\tconst lists = this.lists;\n\n\t\t_chainKeys$2[ 0 ] = scene;\n\t\t_chainKeys$2[ 1 ] = camera;\n\n\t\tlet list = lists.get( _chainKeys$2 );\n\n\t\tif ( list === undefined ) {\n\n\t\t\tlist = new RenderList( this.lighting, scene, camera );\n\t\t\tlists.set( _chainKeys$2, list );\n\n\t\t}\n\n\t\t_chainKeys$2[ 0 ] = null;\n\t\t_chainKeys$2[ 1 ] = null;\n\n\t\treturn list;\n\n\t}\n\n\t/**\n\t * Frees all internal resources.\n\t */\n\tdispose() {\n\n\t\tthis.lists = new ChainMap();\n\n\t}\n\n}\n\nlet _id$8 = 0;\n\n/**\n * Any render or compute command is executed in a specific context that defines\n * the state of the renderer and its backend. Typical examples for such context\n * data are the current clear values or data from the active framebuffer. This\n * module is used to represent these contexts as objects.\n *\n * @private\n */\nclass RenderContext {\n\n\t/**\n\t * Constructs a new render context.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * The context's ID.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.id = _id$8 ++;\n\n\t\t/**\n\t\t * The MRT configuration.\n\t\t *\n\t\t * @type {?MRTNode}\n\t\t * @default null\n\t\t */\n\t\tthis.mrt = null;\n\n\t\t/**\n\t\t * Whether the current active framebuffer has a color attachment.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.color = true;\n\n\t\t/**\n\t\t * Whether the color attachment should be cleared or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.clearColor = true;\n\n\t\t/**\n\t\t * The clear color value.\n\t\t *\n\t\t * @type {Object}\n\t\t * @default true\n\t\t */\n\t\tthis.clearColorValue = { r: 0, g: 0, b: 0, a: 1 };\n\n\t\t/**\n\t\t * Whether the current active framebuffer has a depth attachment.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.depth = true;\n\n\t\t/**\n\t\t * Whether the depth attachment should be cleared or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.clearDepth = true;\n\n\t\t/**\n\t\t * The clear depth value.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.clearDepthValue = 1;\n\n\t\t/**\n\t\t * Whether the current active framebuffer has a stencil attachment.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.stencil = false;\n\n\t\t/**\n\t\t * Whether the stencil attachment should be cleared or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.clearStencil = true;\n\n\t\t/**\n\t\t * The clear stencil value.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.clearStencilValue = 1;\n\n\t\t/**\n\t\t * By default the viewport encloses the entire framebuffer If a smaller\n\t\t * viewport is manually defined, this property is to `true` by the renderer.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.viewport = false;\n\n\t\t/**\n\t\t * The viewport value. This value is in physical pixels meaning it incorporates\n\t\t * the renderer's pixel ratio. The viewport property of render targets or\n\t\t * the renderer is in logical pixels.\n\t\t *\n\t\t * @type {Vector4}\n\t\t */\n\t\tthis.viewportValue = new Vector4();\n\n\t\t/**\n\t\t * When the scissor test is active and scissor rectangle smaller than the\n\t\t * framebuffers dimensions, this property is to `true` by the renderer.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.scissor = false;\n\n\t\t/**\n\t\t * The scissor rectangle.\n\t\t *\n\t\t * @type {Vector4}\n\t\t */\n\t\tthis.scissorValue = new Vector4();\n\n\t\t/**\n\t\t * The active render target.\n\t\t *\n\t\t * @type {?RenderTarget}\n\t\t * @default null\n\t\t */\n\t\tthis.renderTarget = null;\n\n\t\t/**\n\t\t * The textures of the active render target.\n\t\t * `null` when no render target is set.\n\t\t *\n\t\t * @type {?Array<Texture>}\n\t\t * @default null\n\t\t */\n\t\tthis.textures = null;\n\n\t\t/**\n\t\t * The depth texture of the active render target.\n\t\t * `null` when no render target is set.\n\t\t *\n\t\t * @type {?DepthTexture}\n\t\t * @default null\n\t\t */\n\t\tthis.depthTexture = null;\n\n\t\t/**\n\t\t * The active cube face.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.activeCubeFace = 0;\n\n\t\t/**\n\t\t * The active mipmap level.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.activeMipmapLevel = 0;\n\n\t\t/**\n\t\t * The number of MSAA samples. This value is always `1` when\n\t\t * MSAA isn't used.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.sampleCount = 1;\n\n\t\t/**\n\t\t * The active render target's width in physical pixels.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.width = 0;\n\n\t\t/**\n\t\t * The active render target's height in physical pixels.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.height = 0;\n\n\t\t/**\n\t\t * The occlusion query count.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.occlusionQueryCount = 0;\n\n\t\t/**\n\t\t * The current clipping context.\n\t\t *\n\t\t * @type {?ClippingContext}\n\t\t * @default null\n\t\t */\n\t\tthis.clippingContext = null;\n\n\t\t/**\n\t\t * The current camera.\n\t\t *\n\t\t * @type {?Camera}\n\t\t * @default null\n\t\t */\n\t\tthis.camera = null;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRenderContext = true;\n\n\t}\n\n\t/**\n\t * Returns the cache key of this render context.\n\t *\n\t * @return {number} The cache key.\n\t */\n\tgetCacheKey() {\n\n\t\treturn getCacheKey( this );\n\n\t}\n\n}\n\n/**\n * Computes a cache key for the given render context. This key\n * should identify the render target state so it is possible to\n * configure the correct attachments in the respective backend.\n *\n * @param {RenderContext} renderContext - The render context.\n * @return {number} The cache key.\n */\nfunction getCacheKey( renderContext ) {\n\n\tconst { textures, activeCubeFace, activeMipmapLevel } = renderContext;\n\n\tconst values = [ activeCubeFace, activeMipmapLevel ];\n\n\tfor ( const texture of textures ) {\n\n\t\tvalues.push( texture.id );\n\n\t}\n\n\treturn hashArray( values );\n\n}\n\n/**\n * This module manages the render contexts of the renderer.\n *\n * @private\n */\nclass RenderContexts {\n\n\t/**\n\t * Constructs a new render context management component.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t */\n\tconstructor( renderer ) {\n\n\t\t/**\n\t\t * The renderer.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\t/**\n\t\t * A dictionary that manages render contexts.\n\t\t *\n\t\t * @type {Object<string,RenderContext>}\n\t\t */\n\t\tthis._renderContexts = {};\n\n\t}\n\n\t/**\n\t * Returns a render context for the given scene, camera and render target.\n\t *\n\t * @param {?RenderTarget} [renderTarget=null] - The active render target.\n\t * @param {?MRTNode} [mrt=null] - The MRT configuration\n\t * @param {?number} [callDepth=0] - The call depth of the renderer.\n\t * @return {RenderContext} The render context.\n\t */\n\tget( renderTarget = null, mrt = null, callDepth = 0 ) {\n\n\t\t//\n\n\t\tlet attachmentState;\n\n\t\tif ( renderTarget === null ) {\n\n\t\t\tattachmentState = 'default';\n\n\t\t} else {\n\n\t\t\tconst format = renderTarget.texture.format;\n\t\t\tconst type = renderTarget.texture.type;\n\t\t\tconst count = renderTarget.textures.length;\n\n\t\t\tattachmentState = `${ count }:${ format }:${ type }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;\n\n\t\t}\n\n\t\t//\n\n\t\tconst mrtState = ( mrt !== null ) ? mrt.id : 'default';\n\n\t\t//\n\n\t\tconst renderStateKey = attachmentState + '-' + mrtState + '-' + callDepth;\n\n\t\tlet renderState = this._renderContexts[ renderStateKey ];\n\n\t\tif ( renderState === undefined ) {\n\n\t\t\trenderState = new RenderContext();\n\t\t\trenderState.mrt = mrt;\n\n\t\t\tthis._renderContexts[ renderStateKey ] = renderState;\n\n\t\t}\n\n\t\tif ( renderTarget !== null ) renderState.sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;\n\n\t\trenderState.clearDepthValue = this.renderer.getClearDepth();\n\t\trenderState.clearStencilValue = this.renderer.getClearStencil();\n\n\t\treturn renderState;\n\n\t}\n\n\t/**\n\t * Frees internal resources.\n\t */\n\tdispose() {\n\n\t\tthis._renderContexts = {};\n\n\t}\n\n}\n\nconst _size$3 = /*@__PURE__*/ new Vector3();\n\n/**\n * This module manages the textures of the renderer.\n *\n * @private\n * @augments DataMap\n */\nclass Textures extends DataMap {\n\n\t/**\n\t * Constructs a new texture management component.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t * @param {Backend} backend - The renderer's backend.\n\t * @param {Info} info - Renderer component for managing metrics and monitoring data.\n\t */\n\tconstructor( renderer, backend, info ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The renderer.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\t/**\n\t\t * The backend.\n\t\t *\n\t\t * @type {Backend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * Renderer component for managing metrics and monitoring data.\n\t\t *\n\t\t * @type {Info}\n\t\t */\n\t\tthis.info = info;\n\n\t\t/**\n\t\t * A set of HTMLTextures that need paint updates.\n\t\t *\n\t\t * @type {Set<HTMLTexture>}\n\t\t */\n\t\tthis._htmlTextures = new Set();\n\n\t}\n\n\t/**\n\t * Updates the given render target. Based on the given render target configuration,\n\t * it updates the texture states representing the attachments of the framebuffer.\n\t *\n\t * @param {RenderTarget} renderTarget - The render target to update.\n\t * @param {number} [activeMipmapLevel=0] - The active mipmap level.\n\t */\n\tupdateRenderTarget( renderTarget, activeMipmapLevel = 0 ) {\n\n\t\tconst renderTargetData = this.get( renderTarget );\n\n\t\tconst sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;\n\t\tconst depthTextureMips = renderTargetData.depthTextureMips || ( renderTargetData.depthTextureMips = {} );\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tconst size = this.getSize( textures[ 0 ] );\n\n\t\tconst mipWidth = size.width >> activeMipmapLevel;\n\t\tconst mipHeight = size.height >> activeMipmapLevel;\n\n\t\tlet depthTexture = renderTarget.depthTexture || depthTextureMips[ activeMipmapLevel ];\n\t\tconst useDepthTexture = renderTarget.depthBuffer === true || renderTarget.stencilBuffer === true;\n\n\t\tlet textureNeedsUpdate = false;\n\n\t\tif ( depthTexture === undefined && useDepthTexture ) {\n\n\t\t\tdepthTexture = new DepthTexture();\n\n\t\t\tdepthTexture.format = renderTarget.stencilBuffer ? DepthStencilFormat : DepthFormat;\n\t\t\tdepthTexture.type = renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType; // FloatType\n\t\t\tdepthTexture.image.width = mipWidth;\n\t\t\tdepthTexture.image.height = mipHeight;\n\t\t\tdepthTexture.image.depth = size.depth;\n\t\t\tdepthTexture.renderTarget = renderTarget;\n\t\t\tdepthTexture.isArrayTexture = renderTarget.multiview === true && size.depth > 1;\n\n\t\t\tdepthTextureMips[ activeMipmapLevel ] = depthTexture;\n\n\t\t}\n\n\t\tif ( renderTargetData.width !== size.width || size.height !== renderTargetData.height ) {\n\n\t\t\ttextureNeedsUpdate = true;\n\n\t\t\tif ( depthTexture ) {\n\n\t\t\t\tdepthTexture.needsUpdate = true;\n\t\t\t\tdepthTexture.image.width = mipWidth;\n\t\t\t\tdepthTexture.image.height = mipHeight;\n\t\t\t\tdepthTexture.image.depth = depthTexture.isArrayTexture ? depthTexture.image.depth : 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\trenderTargetData.width = size.width;\n\t\trenderTargetData.height = size.height;\n\t\trenderTargetData.textures = textures;\n\t\trenderTargetData.depthTexture = depthTexture || null;\n\t\trenderTargetData.depth = renderTarget.depthBuffer;\n\t\trenderTargetData.stencil = renderTarget.stencilBuffer;\n\t\trenderTargetData.renderTarget = renderTarget;\n\n\t\tif ( renderTargetData.sampleCount !== sampleCount ) {\n\n\t\t\ttextureNeedsUpdate = true;\n\n\t\t\tif ( depthTexture ) {\n\n\t\t\t\tdepthTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\trenderTargetData.sampleCount = sampleCount;\n\n\t\t}\n\n\t\t//\n\n\n\t\tconst options = { sampleCount };\n\n\t\t// XR render targets require no texture updates\n\n\t\tif ( renderTarget.isXRRenderTarget !== true ) {\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tif ( textureNeedsUpdate ) texture.needsUpdate = true;\n\n\t\t\t\tthis.updateTexture( texture, options );\n\n\t\t\t}\n\n\t\t\tif ( depthTexture ) {\n\n\t\t\t\tthis.updateTexture( depthTexture, options );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// dispose handler\n\n\t\tif ( renderTargetData.initialized !== true ) {\n\n\t\t\trenderTargetData.initialized = true;\n\n\t\t\tthis.info.memory.renderTargets ++;\n\n\t\t\t// dispose\n\n\t\t\trenderTargetData.onDispose = () => {\n\n\t\t\t\tthis._destroyRenderTarget( renderTarget );\n\n\t\t\t};\n\n\t\t\trenderTarget.addEventListener( 'dispose', renderTargetData.onDispose );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the given texture. Depending on the texture state, this method\n\t * triggers the upload of texture data to the GPU memory. If the texture data are\n\t * not yet ready for the upload, it uses default texture data for as a placeholder.\n\t *\n\t * @param {Texture} texture - The texture to update.\n\t * @param {Object} [options={}] - The options.\n\t */\n\tupdateTexture( texture, options = {} ) {\n\n\t\tconst textureData = this.get( texture );\n\t\tif ( textureData.initialized === true && textureData.version === texture.version ) return;\n\n\t\tconst isRenderTarget = texture.isRenderTargetTexture || texture.isDepthTexture || texture.isFramebufferTexture;\n\t\tconst backend = this.backend;\n\n\t\tif ( isRenderTarget && textureData.initialized === true ) {\n\n\t\t\t// it's an update\n\n\t\t\tbackend.destroyTexture( texture );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( texture.isFramebufferTexture ) {\n\n\t\t\tconst renderTarget = this.renderer.getRenderTarget();\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\ttexture.type = renderTarget.texture.type;\n\n\t\t\t} else {\n\n\t\t\t\ttexture.type = UnsignedByteType;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Ensure HTMLTexture elements are in the canvas before measuring size.\n\n\t\tif ( texture.isHTMLTexture && texture.image ) {\n\n\t\t\tconst canvas = this.renderer.domElement;\n\n\t\t\tif ( 'requestPaint' in canvas ) {\n\n\t\t\t\tif ( ! canvas.hasAttribute( 'layoutsubtree' ) ) {\n\n\t\t\t\t\tcanvas.setAttribute( 'layoutsubtree', 'true' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.image.parentNode !== canvas ) {\n\n\t\t\t\t\tcanvas.appendChild( texture.image );\n\n\t\t\t\t}\n\n\t\t\t\t// Set up shared paint callback for all HTMLTextures.\n\n\t\t\t\tif ( this._htmlTextures.size === 0 ) {\n\n\t\t\t\t\tconst htmlTextures = this._htmlTextures;\n\n\t\t\t\t\tcanvas.onpaint = ( event ) => {\n\n\t\t\t\t\t\tconst changed = event && event.changedElements;\n\n\t\t\t\t\t\tfor ( const t of htmlTextures ) {\n\n\t\t\t\t\t\t\tif ( ! changed || changed.includes( t.image ) ) {\n\n\t\t\t\t\t\t\t\tt.needsUpdate = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tthis._htmlTextures.add( texture );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst { width, height, depth } = this.getSize( texture );\n\n\t\toptions.width = width;\n\t\toptions.height = height;\n\t\toptions.depth = depth;\n\t\toptions.needsMipmaps = this.needsMipmaps( texture );\n\t\toptions.levels = options.needsMipmaps ? this.getMipLevels( texture, width, height ) : 1;\n\n\t\t// TODO: Uniformly handle mipmap definitions\n\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\tif ( texture.isCubeTexture && texture.mipmaps.length > 0 ) options.levels ++;\n\n\t\t//\n\n\t\tif ( isRenderTarget || texture.isStorageTexture === true || texture.isExternalTexture === true ) {\n\n\t\t\tbackend.createTexture( texture, options );\n\n\t\t\ttextureData.generation = texture.version;\n\n\t\t} else {\n\n\t\t\tif ( texture.version > 0 ) {\n\n\t\t\t\tconst image = texture.image;\n\n\t\t\t\tif ( image === undefined ) {\n\n\t\t\t\t\twarn( 'Renderer: Texture marked for update but image is undefined.' );\n\n\t\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\t\twarn( 'Renderer: Texture marked for update but image is incomplete.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( texture.images ) {\n\n\t\t\t\t\t\tconst images = [];\n\n\t\t\t\t\t\tfor ( const image of texture.images ) {\n\n\t\t\t\t\t\t\timages.push( image );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\toptions.images = images;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\toptions.image = image;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( textureData.isDefaultTexture === undefined || textureData.isDefaultTexture === true ) {\n\n\t\t\t\t\t\tbackend.createTexture( texture, options );\n\n\t\t\t\t\t\ttextureData.isDefaultTexture = false;\n\t\t\t\t\t\ttextureData.generation = texture.version;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( texture.source.dataReady === true ) backend.updateTexture( texture, options );\n\n\t\t\t\t\tconst skipAutoGeneration = texture.isStorageTexture === true && texture.mipmapsAutoUpdate === false;\n\n\t\t\t\t\tif ( options.needsMipmaps && texture.mipmaps.length === 0 && ! skipAutoGeneration ) {\n\n\t\t\t\t\t\tbackend.generateMipmaps( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// async update\n\n\t\t\t\tbackend.createDefaultTexture( texture );\n\n\t\t\t\ttextureData.isDefaultTexture = true;\n\t\t\t\ttextureData.generation = texture.version;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// dispose handler\n\n\t\tif ( textureData.initialized !== true ) {\n\n\t\t\ttextureData.initialized = true;\n\t\t\ttextureData.generation = texture.version;\n\t\t\ttextureData.bindGroups = new Set();\n\n\t\t\t//\n\n\t\t\tthis.info.createTexture( texture );\n\n\t\t\t//\n\n\t\t\tif ( texture.isVideoTexture && ColorManagement.enabled === true && ColorManagement.getTransfer( texture.colorSpace ) !== SRGBTransfer ) {\n\n\t\t\t\twarn( 'WebGPURenderer: Video textures must use a color space with a sRGB transfer function, e.g. SRGBColorSpace.' );\n\n\t\t\t}\n\n\t\t\t// dispose\n\n\t\t\ttextureData.onDispose = () => {\n\n\t\t\t\tthis._destroyTexture( texture );\n\n\t\t\t};\n\n\t\t\ttexture.addEventListener( 'dispose', textureData.onDispose );\n\n\t\t}\n\n\t\t//\n\n\t\ttextureData.version = texture.version;\n\n\t}\n\n\t/**\n\t * Updates the sampler for the given texture. This method has no effect\n\t * for the WebGL backend since it has no concept of samplers. Texture\n\t * parameters are configured with the `texParameter()` command for each\n\t * texture.\n\t *\n\t * In WebGPU, samplers are objects like textures and it's possible to share\n\t * them when the texture parameters match.\n\t *\n\t * @param {Texture} texture - The texture to update the sampler for.\n\t * @return {string} The current sampler key.\n\t */\n\tupdateSampler( texture ) {\n\n\t\treturn this.backend.updateSampler( texture );\n\n\t}\n\n\t/**\n\t * Computes the size of the given texture and writes the result\n\t * into the target vector. This vector is also returned by the\n\t * method.\n\t *\n\t * If no texture data are available for the compute yet, the method\n\t * returns default size values.\n\t *\n\t * @param {Texture} texture - The texture to compute the size for.\n\t * @param {Vector3} target - The target vector.\n\t * @return {Vector3} The target vector.\n\t */\n\tgetSize( texture, target = _size$3 ) {\n\n\t\tlet image = texture.images ? texture.images[ 0 ] : texture.image;\n\n\t\tif ( image ) {\n\n\t\t\tif ( image.image !== undefined ) image = image.image;\n\n\t\t\tif ( texture.isHTMLTexture ) {\n\n\t\t\t\ttarget.width = image.offsetWidth || 1;\n\t\t\t\ttarget.height = image.offsetHeight || 1;\n\t\t\t\ttarget.depth = 1;\n\n\t\t\t} else if ( ( typeof HTMLVideoElement !== 'undefined' ) && ( image instanceof HTMLVideoElement ) ) {\n\n\t\t\t\ttarget.width = image.videoWidth || 1;\n\t\t\t\ttarget.height = image.videoHeight || 1;\n\t\t\t\ttarget.depth = 1;\n\n\t\t\t} else if ( ( typeof VideoFrame !== 'undefined' ) && ( image instanceof VideoFrame ) ) {\n\n\t\t\t\ttarget.width = image.displayWidth || 1;\n\t\t\t\ttarget.height = image.displayHeight || 1;\n\t\t\t\ttarget.depth = 1;\n\n\t\t\t} else {\n\n\t\t\t\ttarget.width = image.width || 1;\n\t\t\t\ttarget.height = image.height || 1;\n\t\t\t\ttarget.depth = texture.isCubeTexture ? 6 : ( image.depth || 1 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\ttarget.width = target.height = target.depth = 1;\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Computes the number of mipmap levels for the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {number} width - The texture's width.\n\t * @param {number} height - The texture's height.\n\t * @return {number} The number of mipmap levels.\n\t */\n\tgetMipLevels( texture, width, height ) {\n\n\t\tlet mipLevelCount;\n\n\t\tif ( texture.mipmaps.length > 0 ) {\n\n\t\t\tmipLevelCount = texture.mipmaps.length;\n\n\t\t} else {\n\n\t\t\tif ( texture.isCompressedTexture === true ) {\n\n\t\t\t\t// it is not possible to compute mipmaps for compressed textures. So\n\t\t\t\t// when no mipmaps are defined in \"texture.mipmaps\", force a texture\n\t\t\t\t// level of 1\n\n\t\t\t\tmipLevelCount = 1;\n\n\t\t\t} else {\n\n\t\t\t\tmipLevelCount = Math.floor( Math.log2( Math.max( width, height ) ) ) + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn mipLevelCount;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given texture makes use of mipmapping.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @return {boolean} Whether mipmaps are required or not.\n\t */\n\tneedsMipmaps( texture ) {\n\n\t\treturn texture.generateMipmaps === true || texture.mipmaps.length > 0;\n\n\t}\n\n\t/**\n\t * Frees internal resources when the given render target isn't\n\t * required anymore.\n\t *\n\t * @param {RenderTarget} renderTarget - The render target to destroy.\n\t */\n\t_destroyRenderTarget( renderTarget ) {\n\n\t\tif ( this.has( renderTarget ) === true ) {\n\n\t\t\tconst renderTargetData = this.get( renderTarget );\n\n\t\t\tconst textures = renderTargetData.textures;\n\t\t\tconst depthTexture = renderTargetData.depthTexture;\n\n\t\t\t//\n\n\t\t\trenderTarget.removeEventListener( 'dispose', renderTargetData.onDispose );\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tthis._destroyTexture( textures[ i ] );\n\n\t\t\t}\n\n\t\t\tif ( depthTexture ) {\n\n\t\t\t\tthis._destroyTexture( depthTexture );\n\n\t\t\t}\n\n\t\t\tthis.delete( renderTarget );\n\t\t\tthis.backend.delete( renderTarget );\n\n\t\t\tthis.info.memory.renderTargets --;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Frees internal resource when the given texture isn't\n\t * required anymore.\n\t *\n\t * @param {Texture} texture - The texture to destroy.\n\t */\n\t_destroyTexture( texture ) {\n\n\t\tif ( this.has( texture ) === true ) {\n\n\t\t\tconst textureData = this.get( texture );\n\n\t\t\t//\n\n\t\t\ttexture.removeEventListener( 'dispose', textureData.onDispose );\n\n\t\t\t// if a texture is not ready for use, it falls back to a default texture so it's possible\n\t\t\t// to use it for rendering. If a texture in this state is disposed, it's important to\n\t\t\t// not destroy/delete the underlying GPU texture object since it is cached and shared with\n\t\t\t// other textures.\n\n\t\t\tconst isDefaultTexture = textureData.isDefaultTexture;\n\t\t\tthis.backend.destroyTexture( texture, isDefaultTexture );\n\n\t\t\t// delete cached bind groups so they don't point to destroyed textures\n\n\t\t\tif ( textureData.bindGroups ) {\n\n\t\t\t\tfor ( const bindGroup of textureData.bindGroups ) {\n\n\t\t\t\t\tconst bindingsData = this.backend.get( bindGroup );\n\n\t\t\t\t\tbindingsData.groups = undefined;\n\t\t\t\t\tbindingsData.versions = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._htmlTextures.delete( texture );\n\n\t\t\tthis.delete( texture );\n\n\t\t\tthis.info.destroyTexture( texture );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * A four-component version of {@link Color} which is internally\n * used by the renderer to represents clear color with alpha as\n * one object.\n *\n * @private\n * @augments Color\n */\nclass Color4 extends Color {\n\n\t/**\n\t * Constructs a new four-component color.\n\t * You can also pass a single THREE.Color, hex or\n\t * string argument to this constructor.\n\t *\n\t * @param {number|string} [r=1] - The red value.\n\t * @param {number} [g=1] - The green value.\n\t * @param {number} [b=1] - The blue value.\n\t * @param {number} [a=1] - The alpha value.\n\t */\n\tconstructor( r, g, b, a = 1 ) {\n\n\t\tsuper( r, g, b );\n\n\t\tthis.a = a;\n\n\t}\n\n\t/**\n\t * Overwrites the default to honor alpha.\n\t * You can also pass a single THREE.Color, hex or\n\t * string argument to this method.\n\t *\n\t * @param {number|string|Color} r - The red value.\n\t * @param {number} [g] - The green value.\n\t * @param {number} [b] - The blue value.\n\t * @param {number} [a=1] - The alpha value.\n\t * @return {Color4} A reference to this object.\n\t */\n\tset( r, g, b, a = 1 ) {\n\n\t\tthis.a = a;\n\n\t\treturn super.set( r, g, b );\n\n\t}\n\n\t/**\n\t * Overwrites the default to honor alpha.\n\t *\n\t * @param {Color4} color - The color to copy.\n\t * @return {Color4} A reference to this object.\n\t */\n\tcopy( color ) {\n\n\t\tif ( color.a !== undefined ) this.a = color.a;\n\n\t\treturn super.copy( color );\n\n\t}\n\n\t/**\n\t * Overwrites the default to honor alpha.\n\t *\n\t * @return {Color4} The cloned color.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b, this.a );\n\n\t}\n\n}\n\n/**\n * Special version of {@link PropertyNode} which is used for parameters.\n *\n * @augments PropertyNode\n */\nclass ParameterNode extends PropertyNode {\n\n\tstatic get type() {\n\n\t\treturn 'ParameterNode';\n\n\t}\n\n\t/**\n\t * Constructs a new parameter node.\n\t *\n\t * @param {string} nodeType - The type of the node.\n\t * @param {?string} [name=null] - The name of the parameter in the shader.\n\t */\n\tconstructor( nodeType, name = null ) {\n\n\t\tsuper( nodeType, name );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isParameterNode = true;\n\n\t}\n\n\t/**\n\t * Gets the type of a member variable in the parameter node.\n\t *\n\t * @param {NodeBuilder} builder - The node builder.\n\t * @param {string} name - The name of the member variable.\n\t * @returns {string}\n\t */\n\tgetMemberType( builder, name ) {\n\n\t\tconst type = this.getNodeType( builder );\n\t\tconst struct = builder.getStructTypeNode( type );\n\n\t\tlet memberType;\n\n\t\tif ( struct !== null ) {\n\n\t\t\tmemberType = struct.getMemberType( builder, name );\n\n\t\t} else {\n\n\t\t\terror( `TSL: Member \"${ name }\" not found in struct \"${ type }\".`, new StackTrace() );\n\n\t\t\tmemberType = 'float';\n\n\t\t}\n\n\t\treturn memberType;\n\n\t}\n\n\tgetHash() {\n\n\t\treturn String( this.id );\n\n\t}\n\n\tgenerate() {\n\n\t\treturn this.name;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a parameter node.\n *\n * @tsl\n * @function\n * @param {string} type - The type of the node.\n * @param {?string} name - The name of the parameter in the shader.\n * @returns {ParameterNode}\n */\nconst parameter = ( type, name ) => new ParameterNode( type, name );\n\n/**\n * Stack is a helper for Nodes that need to produce stack-based code instead of continuous flow.\n * They are usually needed in cases like `If`, `Else`.\n *\n * @augments Node\n */\nclass StackNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'StackNode';\n\n\t}\n\n\t/**\n\t * Constructs a new stack node.\n\t *\n\t * @param {?StackNode} [parent=null] - The parent stack node.\n\t */\n\tconstructor( parent = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * List of nodes.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.nodes = [];\n\n\t\t/**\n\t\t * The output node.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.outputNode = null;\n\n\t\t/**\n\t\t * The parent stack node.\n\t\t *\n\t\t * @type {?StackNode}\n\t\t * @default null\n\t\t */\n\t\tthis.parent = parent;\n\n\t\t/**\n\t\t * The current conditional node.\n\t\t *\n\t\t * @private\n\t\t * @type {ConditionalNode}\n\t\t * @default null\n\t\t */\n\t\tthis._currentCond = null;\n\n\t\t/**\n\t\t * The expression node. Only\n\t\t * relevant for Switch/Case.\n\t\t *\n\t\t * @private\n\t\t * @type {Node}\n\t\t * @default null\n\t\t */\n\t\tthis._expressionNode = null;\n\n\t\t/**\n\t\t * The current node being processed.\n\t\t *\n\t\t * @private\n\t\t * @type {Node}\n\t\t * @default null\n\t\t */\n\t\tthis._currentNode = null;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStackNode = true;\n\n\t}\n\n\tgetElementType( builder ) {\n\n\t\treturn this.hasOutput( builder ) ? this.outputNode.getElementType( builder ) : 'void';\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.hasOutput( builder ) ? this.outputNode.getNodeType( builder ) : 'void';\n\n\t}\n\n\tgetMemberType( builder, name ) {\n\n\t\treturn this.hasOutput( builder ) ? this.outputNode.getMemberType( builder, name ) : 'void';\n\n\t}\n\n\t/**\n\t * Adds a node to this stack.\n\t *\n\t * @param {Node} node - The node to add.\n\t * @param {number} [index=this.nodes.length] - The index where the node should be added.\n\t * @return {StackNode} A reference to this stack node.\n\t */\n\taddToStack( node, index = this.nodes.length ) {\n\n\t\tif ( node.isNode !== true ) {\n\n\t\t\terror( 'TSL: Invalid node added to stack.', new StackTrace() );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.nodes.splice( index, 0, node );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds a node to the stack before the current node.\n\t *\n\t * @param {Node} node - The node to add.\n\t * @return {StackNode} A reference to this stack node.\n\t */\n\taddToStackBefore( node ) {\n\n\t\tconst index = this._currentNode ? this.nodes.indexOf( this._currentNode ) : 0;\n\n\t\treturn this.addToStack( node, index );\n\n\t}\n\n\t/**\n\t * Represent an `if` statement in TSL.\n\t *\n\t * @param {Node} boolNode - Represents the condition.\n\t * @param {Function} method - TSL code which is executed if the condition evaluates to `true`.\n\t * @return {StackNode} A reference to this stack node.\n\t */\n\tIf( boolNode, method ) {\n\n\t\tconst methodNode = new ShaderNode( method );\n\t\tthis._currentCond = select( boolNode, methodNode );\n\n\t\treturn this.addToStack( this._currentCond );\n\n\t}\n\n\t/**\n\t * Represent an `elseif` statement in TSL.\n\t *\n\t * @param {Node} boolNode - Represents the condition.\n\t * @param {Function} method - TSL code which is executed if the condition evaluates to `true`.\n\t * @return {StackNode} A reference to this stack node.\n\t */\n\tElseIf( boolNode, method ) {\n\n\t\tconst methodNode = new ShaderNode( method );\n\t\tconst ifNode = select( boolNode, methodNode );\n\n\t\tthis._currentCond.elseNode = ifNode;\n\t\tthis._currentCond = ifNode;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Represent an `else` statement in TSL.\n\t *\n\t * @param {Function} method - TSL code which is executed in the `else` case.\n\t * @return {StackNode} A reference to this stack node.\n\t */\n\tElse( method ) {\n\n\t\tthis._currentCond.elseNode = new ShaderNode( method );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Represents a `switch` statement in TSL.\n\t *\n\t * @param {any} expression - Represents the expression.\n\t * @param {Function} method - TSL code which is executed if the condition evaluates to `true`.\n\t * @return {StackNode} A reference to this stack node.\n\t */\n\tSwitch( expression ) {\n\n\t\tthis._expressionNode = nodeObject( expression );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Represents a `case` statement in TSL. The TSL version accepts an arbitrary numbers of values.\n\t * The last parameter must be the callback method that should be executed in the `true` case.\n\t *\n\t * @param {...any} params - The values of the `Case()` statement as well as the callback method.\n\t * @return {StackNode} A reference to this stack node.\n\t */\n\tCase( ...params ) {\n\n\t\tconst caseNodes = [];\n\n\t\t// extract case nodes from the parameter list\n\n\t\tif ( params.length >= 2 ) {\n\n\t\t\tfor ( let i = 0; i < params.length - 1; i ++ ) {\n\n\t\t\t\tcaseNodes.push( this._expressionNode.equal( nodeObject( params[ i ] ) ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\terror( 'TSL: Invalid parameter length. Case() requires at least two parameters.', new StackTrace() );\n\n\t\t}\n\n\t\t// extract method\n\n\t\tconst method = params[ params.length - 1 ];\n\t\tconst methodNode = new ShaderNode( method );\n\n\t\t// chain multiple cases when using Case( 1, 2, 3, () => {} )\n\n\t\tlet caseNode = caseNodes[ 0 ];\n\n\t\tfor ( let i = 1; i < caseNodes.length; i ++ ) {\n\n\t\t\tcaseNode = caseNode.or( caseNodes[ i ] );\n\n\t\t}\n\n\t\t// build condition\n\n\t\tconst condNode = select( caseNode, methodNode );\n\n\t\tif ( this._currentCond === null ) {\n\n\t\t\tthis._currentCond = condNode;\n\n\t\t\treturn this.addToStack( this._currentCond );\n\n\t\t} else {\n\n\t\t\tthis._currentCond.elseNode = condNode;\n\t\t\tthis._currentCond = condNode;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Represents the default code block of a Switch/Case statement.\n\t *\n\t * @param {Function} method - TSL code which is executed in the `else` case.\n\t * @return {StackNode} A reference to this stack node.\n\t */\n\tDefault( method ) {\n\n\t\tthis.Else( method );\n\n\t\treturn this;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst nodeProperties = builder.getNodeProperties( this );\n\n\t\tlet index = 0;\n\n\t\tfor ( const childNode of this.getChildren() ) {\n\n\t\t\tif ( childNode.isVarNode && childNode.isIntent( builder ) ) {\n\n\t\t\t\tif ( childNode.isAssign( builder ) !== true ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tnodeProperties[ 'node' + index ++ ] = childNode;\n\n\t\t}\n\n\t\t// return a outputNode if exists or null\n\n\t\treturn nodeProperties.outputNode || null;\n\n\t}\n\n\thasOutput( builder ) {\n\n\t\treturn this.outputNode && this.outputNode.isNode && this.outputNode.getNodeType( builder ) !== 'void';\n\n\t}\n\n\tbuild( builder, ...params ) {\n\n\t\tconst previousStack = getCurrentStack();\n\n\t\tconst buildStage = builder.buildStage;\n\n\t\tsetCurrentStack( this );\n\n\t\tbuilder.setActiveStack( this );\n\n\t\t//\n\n\t\tconst buildNode = ( node ) => {\n\n\t\t\tthis._currentNode = node;\n\n\t\t\tif ( node.isVarNode && node.isIntent( builder ) ) {\n\n\t\t\t\tif ( node.isAssign( builder ) !== true ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( buildStage === 'setup' ) {\n\n\t\t\t\tnode.build( builder );\n\n\t\t\t} else if ( buildStage === 'analyze' ) {\n\n\t\t\t\tnode.build( builder, this );\n\n\t\t\t} else if ( buildStage === 'generate' ) {\n\n\t\t\t\tconst stages = builder.getDataFromNode( node, 'any' ).stages;\n\t\t\t\tconst parents = stages && stages[ builder.shaderStage ];\n\n\t\t\t\tif ( node.isVarNode && parents && parents.length === 1 && parents[ 0 ] && parents[ 0 ].isStackNode ) {\n\n\t\t\t\t\treturn; // skip var nodes that are only used in .toVarying()\n\n\t\t\t\t}\n\n\t\t\t\tnode.build( builder, 'void' );\n\n\t\t\t}\n\n\t\t};\n\n\t\t//\n\n\t\tconst nodes = [ ...this.nodes ];\n\n\t\tfor ( const node of nodes ) {\n\n\t\t\tbuildNode( node );\n\n\t\t}\n\n\t\tthis._currentNode = null;\n\n\t\tconst newNodes = this.nodes.filter( ( node ) => nodes.indexOf( node ) === -1 );\n\n\t\tfor ( const node of newNodes ) {\n\n\t\t\tbuildNode( node );\n\n\t\t}\n\n\t\t//\n\n\t\tlet result;\n\n\t\tif ( this.hasOutput( builder ) ) {\n\n\t\t\tresult = this.outputNode.build( builder, ...params );\n\n\t\t} else {\n\n\t\t\tresult = super.build( builder, ...params );\n\n\t\t}\n\n\t\tsetCurrentStack( previousStack );\n\n\t\tbuilder.removeActiveStack( this );\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a stack node.\n *\n * @tsl\n * @function\n * @param {?StackNode} [parent=null] - The parent stack node.\n * @returns {StackNode}\n */\nconst stack = /*@__PURE__*/ nodeProxy( StackNode ).setParameterLength( 0, 1 );\n\n/**\n * Generates a layout for struct members.\n * This function takes an object representing struct members and returns an array of member layouts.\n * Each member layout includes the member's name, type, and whether it is atomic.\n *\n * @param {Object.<string, string|Object>} members - An object where keys are member names and values are either types (as strings) or objects with type and atomic properties.\n * @returns {Array.<{name: string, type: string, atomic: boolean}>} An array of member layouts.\n */\nfunction getMembersLayout( members ) {\n\n\treturn Object.entries( members ).map( ( [ name, value ] ) => {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\treturn { name, type: value, atomic: false };\n\n\t\t}\n\n\t\treturn { name, type: value.type, atomic: value.atomic || false };\n\n\t} );\n\n}\n\n/**\n * Represents a struct type node in the node-based system.\n * This class is used to define and manage the layout and types of struct members.\n * It extends the base Node class and provides methods to get the length of the struct,\n * retrieve member types, and generate the struct type for a builder.\n *\n * @augments Node\n */\nclass StructTypeNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'StructTypeNode';\n\n\t}\n\n\t/**\n\t * Creates an instance of StructTypeNode.\n\t *\n\t * @param {Object} membersLayout - The layout of the members for the struct.\n\t * @param {?string} [name=null] - The optional name of the struct.\n\t */\n\tconstructor( membersLayout, name = null ) {\n\n\t\tsuper( 'struct' );\n\n\t\t/**\n\t\t * The layout of the members for the struct\n\t\t *\n\t\t * @type {Array.<{name: string, type: string, atomic: boolean}>}\n\t\t */\n\t\tthis.membersLayout = getMembersLayout( membersLayout );\n\n\t\t/**\n\t\t * The name of the struct.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStructLayoutNode = true;\n\n\t}\n\n\t/**\n\t * Returns the length of the struct.\n\t * The length is calculated by summing the lengths of the struct's members.\n\t *\n\t * @returns {number} The length of the struct.\n\t */\n\tgetLength() {\n\n\t\tconst BYTES_PER_ELEMENT = Float32Array.BYTES_PER_ELEMENT;\n\t\tlet maxAlignment = 1; // maximum alignment value in this struct\n\t\tlet offset = 0; // global buffer offset in 4 byte elements\n\n\t\tfor ( const member of this.membersLayout ) {\n\n\t\t\tconst type = member.type;\n\n\t\t\tconst itemSize = getMemoryLengthFromType( type );\n\t\t\tconst alignment = getAlignmentFromType( type ) / BYTES_PER_ELEMENT;\n\t\t\tmaxAlignment = Math.max( maxAlignment, alignment );\n\n\t\t\tconst chunkOffset = offset % maxAlignment; // offset in the current chunk of maxAlignment elements\n\t\t\tconst overhang = chunkOffset % alignment; // distance from the last aligned offset\n\t\t\tif ( overhang !== 0 ) {\n\n\t\t\t\toffset += alignment - overhang; // move to next aligned offset\n\n\t\t\t}\n\n\t\t\toffset += itemSize;\n\n\t\t}\n\n\t\treturn ( Math.ceil( offset / maxAlignment ) * maxAlignment ); // ensure length is a multiple of maxAlignment\n\n\t}\n\n\tgetMemberType( builder, name ) {\n\n\t\tconst member = this.membersLayout.find( m => m.name === name );\n\n\t\treturn member ? member.type : 'void';\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\tconst structType = builder.getStructTypeFromNode( this, this.membersLayout, this.name );\n\n\t\treturn structType.name;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tbuilder.getStructTypeFromNode( this, this.membersLayout, this.name );\n\t\tbuilder.addInclude( this );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\treturn this.getNodeType( builder );\n\n\t}\n\n}\n\n/**\n * StructNode allows to create custom structures with multiple members.\n * This can also be used to define structures in attribute and uniform data.\n *\n * ```js\n * // Define a custom struct\n * const BoundingBox = struct( { min: 'vec3', max: 'vec3' } );\n *\n * // Create a new instance of the struct\n * const bb = BoundingBox( vec3( 0 ), vec3( 1 ) ); // style 1\n * const bb = BoundingBox( { min: vec3( 0 ), max: vec3( 1 ) } ); // style 2\n *\n * // Access the struct members\n * const min = bb.get( 'min' );\n *\n * // Assign a new value to a member\n * min.assign( vec3() );\n * ```\n * @augments Node\n */\nclass StructNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'StructNode';\n\n\t}\n\n\tconstructor( structTypeNode, values ) {\n\n\t\tsuper( 'vec3' );\n\n\t\tthis.structTypeNode = structTypeNode;\n\t\tthis.values = values;\n\n\t\tthis.isStructNode = true;\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.structTypeNode.getNodeType( builder );\n\n\t}\n\n\tgetMemberType( builder, name ) {\n\n\t\treturn this.structTypeNode.getMemberType( builder, name );\n\n\t}\n\n\t_getChildren() {\n\n\t\t// Ensure struct type is the last child for correct code generation order\n\n\t\tconst children = super._getChildren();\n\n\t\tconst structTypeProperty = children.find( child => child.childNode === this.structTypeNode );\n\n\t\tchildren.splice( children.indexOf( structTypeProperty ), 1 );\n\t\tchildren.push( structTypeProperty );\n\n\t\treturn children;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst nodeVar = builder.getVarFromNode( this );\n\t\tconst structType = nodeVar.type;\n\t\tconst propertyName = builder.getPropertyName( nodeVar );\n\n\t\tbuilder.addLineFlowCode( `${ propertyName } = ${ builder.generateStruct( structType, this.structTypeNode.membersLayout, this.values ) }`, this );\n\n\t\treturn nodeVar.name;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a struct node.\n *\n * @tsl\n * @function\n * @param {Object} membersLayout - The layout of the struct members.\n * @param {?string} [name=null] - The name of the struct.\n * @returns {Function} The struct function.\n */\nconst struct = ( membersLayout, name = null ) => {\n\n\tconst structLayout = new StructTypeNode( membersLayout, name );\n\n\tconst struct = ( ...params ) => {\n\n\t\tlet values = null;\n\n\t\tif ( params.length > 0 ) {\n\n\t\t\tif ( params[ 0 ].isNode ) {\n\n\t\t\t\tvalues = {};\n\n\t\t\t\tconst names = Object.keys( membersLayout );\n\n\t\t\t\tfor ( let i = 0; i < params.length; i ++ ) {\n\n\t\t\t\t\tvalues[ names[ i ] ] = params[ i ];\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvalues = params[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn new StructNode( structLayout, values );\n\n\t};\n\n\tstruct.layout = structLayout;\n\tstruct.isStruct = true;\n\n\treturn struct;\n\n};\n\n/**\n * This node can be used to define multiple outputs in a shader programs.\n *\n * @augments Node\n */\nclass OutputStructNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'OutputStructNode';\n\n\t}\n\n\t/**\n\t * Constructs a new output struct node. The constructor can be invoked with an\n\t * arbitrary number of nodes representing the members.\n\t *\n\t * @param {...Node} members - A parameter list of nodes.\n\t */\n\tconstructor( ...members ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * An array of nodes which defines the output.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.members = members;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isOutputStructNode = true;\n\n\t}\n\n\tgenerateNodeType( /*builder*/ ) {\n\n\t\treturn 'OutputType';\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\tif ( nodeData.membersLayout === undefined ) {\n\n\t\t\tconst members = this.members;\n\t\t\tconst membersLayout = [];\n\n\t\t\tfor ( let i = 0; i < members.length; i ++ ) {\n\n\t\t\t\tconst name = 'm' + i;\n\t\t\t\tconst type = members[ i ].getNodeType( builder );\n\n\t\t\t\tmembersLayout.push( { name, type, index: i } );\n\n\t\t\t}\n\n\t\t\tnodeData.membersLayout = membersLayout;\n\t\t\tnodeData.structType = builder.getOutputStructTypeFromNode( this, nodeData.membersLayout );\n\n\t\t}\n\n\t\t//\n\n\t\tconst propertyName = builder.getOutputStructName();\n\t\tconst members = this.members;\n\n\t\tconst structPrefix = propertyName !== '' ? propertyName + '.' : '';\n\n\t\tfor ( let i = 0; i < members.length; i ++ ) {\n\n\t\t\tconst snippet = members[ i ].build( builder );\n\n\t\t\tbuilder.addLineFlowCode( `${ structPrefix }m${ i } = ${ snippet }`, this );\n\n\t\t}\n\n\t\treturn propertyName;\n\n\t}\n\n}\n\n/**\n * TSL function for creating an output struct node.\n *\n * @tsl\n * @function\n * @param {...Node} members - A parameter list of nodes.\n * @returns {OutputStructNode}\n */\nconst outputStruct = /*@__PURE__*/ nodeProxy( OutputStructNode );\n\n/**\n * Represents blending configuration.\n *\n * This class encapsulates all blending-related properties that control how\n * a material's colors are combined with the colors already in the frame buffer.\n */\nclass BlendMode {\n\n\t/**\n\t * Constructs a new blending configuration.\n\t *\n\t * @param {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)} [blending=NormalBlending] - The blending mode.\n\t */\n\tconstructor( blending = NormalBlending ) {\n\n\t\t/**\n\t\t * Defines the blending type.\n\t\t *\n\t\t * It must be set to `CustomBlending` if custom blending properties like\n\t\t * {@link BlendMode#blendSrc}, {@link BlendMode#blendDst} or {@link BlendMode#blendEquation}\n\t\t * should have any effect.\n\t\t *\n\t\t * @type {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)}\n\t\t * @default NormalBlending\n\t\t */\n\t\tthis.blending = blending;\n\n\t\t/**\n\t\t * Defines the blending source factor.\n\t\t *\n\t\t * This determines how the source (incoming) fragment color is factored before being added\n\t\t * to the destination (existing) fragment color in the frame buffer.\n\t\t *\n\t\t * @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}\n\t\t * @default SrcAlphaFactor\n\t\t */\n\t\tthis.blendSrc = SrcAlphaFactor;\n\n\t\t/**\n\t\t * Defines the blending destination factor.\n\t\t *\n\t\t * This determines how the destination (existing) fragment color in the frame buffer\n\t\t * is factored before being combined with the source (incoming) fragment color.\n\t\t *\n\t\t * @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}\n\t\t * @default OneMinusSrcAlphaFactor\n\t\t */\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\n\t\t/**\n\t\t * Defines the blending equation.\n\t\t *\n\t\t * This determines how the source and destination colors are combined.\n\t\t *\n\t\t * @type {(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}\n\t\t * @default AddEquation\n\t\t */\n\t\tthis.blendEquation = AddEquation;\n\n\t\t/**\n\t\t * Defines the blending source alpha factor.\n\t\t *\n\t\t * When set, this allows separate control of the alpha channel's source blending factor.\n\t\t * If `null`, {@link BlendMode#blendSrc} is used for the alpha channel as well.\n\t\t *\n\t\t * @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}\n\t\t * @default null\n\t\t */\n\t\tthis.blendSrcAlpha = null;\n\n\t\t/**\n\t\t * Defines the blending destination alpha factor.\n\t\t *\n\t\t * When set, this allows separate control of the alpha channel's destination blending factor.\n\t\t * If `null`, {@link BlendMode#blendDst} is used for the alpha channel as well.\n\t\t *\n\t\t * @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}\n\t\t * @default null\n\t\t */\n\t\tthis.blendDstAlpha = null;\n\n\t\t/**\n\t\t * Defines the blending equation of the alpha channel.\n\t\t *\n\t\t * When set, this allows separate control of the alpha channel's blending equation.\n\t\t * If `null`, {@link BlendMode#blendEquation} is used for the alpha channel as well.\n\t\t *\n\t\t * @type {?(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}\n\t\t * @default null\n\t\t */\n\t\tthis.blendEquationAlpha = null;\n\n\t\t/**\n\t\t * Defines whether to premultiply the alpha (transparency) value.\n\t\t *\n\t\t * If `true`, the RGB color of the texture or material is multiplied by its alpha value.\n\t\t * This is useful for transparent textures/materials where the color data\n\t\t * should already include the transparency information.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.premultiplyAlpha = false;\n\n\t}\n\n\t/**\n\t * Copies the blending properties from the given source to this instance.\n\t *\n\t * @param {BlendMode} source - The blending configuration to copy from.\n\t * @return {BlendMode} A reference to this instance.\n\t */\n\tcopy( source ) {\n\n\t\tthis.blending = source.blending;\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a clone of this blending configuration.\n\t *\n\t * @return {BlendMode} A new Blending instance with the same properties.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n// Predefined blend modes for MRT nodes.\nconst _noBlending = /**@__PURE__*/ new BlendMode( NoBlending );\nconst _materialBlending = /**@__PURE__*/ new BlendMode( MaterialBlending );\n\n/**\n * Returns the MRT texture index for the given name.\n *\n * @param {Array<Texture>} textures - The textures of a MRT-configured render target.\n * @param {string} name - The name of the MRT texture which index is requested.\n * @return {number} The texture index.\n */\nfunction getTextureIndex( textures, name ) {\n\n\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\tif ( textures[ i ].name === name ) {\n\n\t\t\treturn i;\n\n\t\t}\n\n\t}\n\n\treturn -1;\n\n}\n\n/**\n * This node can be used setup a MRT context for rendering. A typical MRT setup for\n * post-processing is shown below:\n * ```js\n * const mrtNode = mrt( {\n *   output: output,\n *   normal: normalView\n * } ) ;\n * ```\n * The MRT output is defined as a dictionary.\n *\n * @augments OutputStructNode\n */\nclass MRTNode extends OutputStructNode {\n\n\tstatic get type() {\n\n\t\treturn 'MRTNode';\n\n\t}\n\n\t/**\n\t * Constructs a new output struct node.\n\t *\n\t * @param {Object<string, Node>} outputNodes - The MRT outputs.\n\t */\n\tconstructor( outputNodes ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * A dictionary representing the MRT outputs. The key\n\t\t * is the name of the output, the value the node which produces\n\t\t * the output result.\n\t\t *\n\t\t * @type {Object<string, Node>}\n\t\t */\n\t\tthis.outputNodes = outputNodes;\n\n\t\t/**\n\t\t * A dictionary storing the blend modes for each output.\n\t\t *\n\t\t * @type {Object<string, BlendMode>}\n\t\t */\n\t\tthis.blendModes = {\n\t\t\toutput: _materialBlending\n\t\t};\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMRTNode = true;\n\n\t}\n\n\t/**\n\t * Sets the blend mode for the given output name.\n\t *\n\t * @param {string} name - The name of the output.\n\t * @param {BlendMode} blend - The blending mode.\n\t * @return {MRTNode} The current MRT node.\n\t */\n\tsetBlendMode( name, blend ) {\n\n\t\tthis.blendModes[ name ] = blend;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the blend mode for the given output name.\n\t *\n\t * @param {string} name - The name of the output.\n\t * @return {BlendMode} The blend mode.\n\t */\n\tgetBlendMode( name ) {\n\n\t\treturn this.blendModes[ name ] || _noBlending;\n\n\t}\n\n\t/**\n\t * Returns `true` if the MRT node has an output with the given name.\n\t *\n\t * @param {string} name - The name of the output.\n\t * @return {NodeBuilder} Whether the MRT node has an output for the given name or not.\n\t */\n\thas( name ) {\n\n\t\treturn this.outputNodes[ name ] !== undefined;\n\n\t}\n\n\t/**\n\t * Returns the output node for the given name.\n\t *\n\t * @param {string} name - The name of the output.\n\t * @return {Node} The output node.\n\t */\n\tget( name ) {\n\n\t\treturn this.outputNodes[ name ];\n\n\t}\n\n\t/**\n\t * Merges the outputs of the given MRT node with the outputs of this node.\n\t *\n\t * @param {MRTNode} mrtNode - The MRT to merge.\n\t * @return {MRTNode} A new MRT node with merged outputs..\n\t */\n\tmerge( mrtNode ) {\n\n\t\tconst outputs = { ...this.outputNodes, ...mrtNode.outputNodes };\n\t\tconst blendings = { ...this.blendModes, ...mrtNode.blendModes };\n\n\t\tconst mrtTarget = mrt( outputs );\n\t\tmrtTarget.blendings = blendings;\n\n\t\treturn mrtTarget;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst outputNodes = this.outputNodes;\n\t\tconst mrt = builder.renderer.getRenderTarget();\n\n\t\tconst members = [];\n\n\t\tconst textures = mrt.textures;\n\n\t\tfor ( const name in outputNodes ) {\n\n\t\t\tconst index = getTextureIndex( textures, name );\n\n\t\t\tmembers[ index ] = vec4( outputNodes[ name ] );\n\n\t\t}\n\n\t\tthis.members = members;\n\n\t\treturn super.setup( builder );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a MRT node.\n *\n * @tsl\n * @function\n * @param {Object<string, Node>} outputNodes - The MRT outputs.\n * @returns {MRTNode}\n */\nconst mrt = /*@__PURE__*/ nodeProxy( MRTNode );\n\n/**\n * This node represents an operation that reinterprets the bit representation of a value\n * in one type as a value in another type.\n *\n * @augments TempNode\n */\nclass BitcastNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'BitcastNode';\n\n\t}\n\n\t/**\n\t * Constructs a new bitcast node.\n\t *\n\t * @param {Node} valueNode - The value to convert.\n\t * @param {string} conversionType - The type to convert to.\n\t * @param {?string} [inputType = null] - The expected input data type of the bitcast operation.\n\t */\n\tconstructor( valueNode, conversionType, inputType = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The data to bitcast to a new type.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.valueNode = valueNode;\n\n\t\t/**\n\t\t * The type the value will be converted to.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.conversionType = conversionType;\n\n\n\t\t/**\n\t\t * The expected input data type of the bitcast operation.\n\t\t *\n\t\t *\n\t\t * @type {string}\n\t\t * @default null\n\t\t */\n\t\tthis.inputType = inputType;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBitcastNode = true;\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\t// GLSL aliasing\n\t\tif ( this.inputType !== null ) {\n\n\t\t\tconst valueType = this.valueNode.getNodeType( builder );\n\t\t\tconst valueLength = builder.getTypeLength( valueType );\n\n\t\t\treturn builder.getTypeFromLength( valueLength, this.conversionType );\n\n\t\t}\n\n\t\treturn this.conversionType;\n\n\t}\n\n\n\tgenerate( builder ) {\n\n\t\tconst type = this.getNodeType( builder );\n\t\tlet inputType = '';\n\n\t\tif ( this.inputType !== null ) {\n\n\t\t\tconst valueType = this.valueNode.getNodeType( builder );\n\t\t\tconst valueTypeLength = builder.getTypeLength( valueType );\n\n\t\t\tinputType = valueTypeLength === 1 ? this.inputType : builder.changeComponentType( valueType, this.inputType );\n\n\t\t} else {\n\n\t\t\tinputType = this.valueNode.getNodeType( builder );\n\n\t\t}\n\n\t\treturn `${ builder.getBitcastMethod( type, inputType ) }( ${ this.valueNode.build( builder, inputType ) } )`;\n\n\n\t}\n\n}\n\n/**\n * Reinterpret the bit representation of a value in one type as a value in another type.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The parameter.\n * @param {string} y - The new type.\n * @returns {Node}\n */\nconst bitcast = /*@__PURE__*/ nodeProxyIntent( BitcastNode ).setParameterLength( 2 );\n\n/**\n * Bitcasts a float or a vector of floats to a corresponding integer type with the same element size.\n *\n * @tsl\n * @function\n * @param {Node<float>} value - The float or vector of floats to bitcast.\n * @returns {BitcastNode}\n */\nconst floatBitsToInt = ( value ) => new BitcastNode( value, 'int', 'float' );\n\n/**\n * Bitcasts a float or a vector of floats to a corresponding unsigned integer type with the same element size.\n *\n * @tsl\n * @function\n * @param {Node<float>} value - The float or vector of floats to bitcast.\n * @returns {BitcastNode}\n */\nconst floatBitsToUint = ( value ) => new BitcastNode( value, 'uint', 'float' );\n\n/**\n * Bitcasts an integer or a vector of integers to a corresponding float type with the same element size.\n *\n * @tsl\n * @function\n * @param {Node<int>} value - The integer or vector of integers to bitcast.\n * @returns {BitcastNode}\n */\nconst intBitsToFloat = ( value ) => new BitcastNode( value, 'float', 'int' );\n\n/**\n * Bitcast an unsigned integer or a vector of unsigned integers to a corresponding float type with the same element size.\n *\n * @tsl\n * @function\n * @param {Node<uint>} value - The unsigned integer or vector of unsigned integers to bitcast.\n * @returns {BitcastNode}\n */\nconst uintBitsToFloat = ( value ) => new BitcastNode( value, 'float', 'uint' );\n\nconst registeredBitcountFunctions = {};\n\n/**\n * This node represents an operation that counts the bits of a piece of shader data.\n *\n * @augments MathNode\n */\nclass BitcountNode extends MathNode {\n\n\tstatic get type() {\n\n\t\treturn 'BitcountNode';\n\n\t}\n\n\t/**\n\t * Constructs a new math node.\n\t *\n\t * @param {'countTrailingZeros'|'countLeadingZeros'|'countOneBits'} method - The method name.\n\t * @param {Node} aNode - The first input.\n\t */\n\tconstructor( method, aNode ) {\n\n\t\tsuper( method, aNode );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBitcountNode = true;\n\n\t}\n\n\t/**\n\t * Casts the input value of the function to an integer if necessary.\n\t *\n\t * @private\n\t * @param {Node<uint>|Node<int>} inputNode - The input value.\n\t * @param {Node<uint>} outputNode - The output value.\n\t * @param {string} elementType - The type of the input value.\n\t */\n\t_resolveElementType( inputNode, outputNode, elementType ) {\n\n\t\tif ( elementType === 'int' ) {\n\n\t\t\toutputNode.assign( bitcast( inputNode, 'uint' ) );\n\n\t\t} else {\n\n\t\t\toutputNode.assign( inputNode );\n\n\t\t}\n\n\t}\n\n\t_returnDataNode( inputType ) {\n\n\t\tswitch ( inputType ) {\n\n\t\t\tcase 'uint': {\n\n\t\t\t\treturn uint;\n\n\t\t\t}\n\n\t\t\tcase 'int': {\n\n\t\t\t\treturn int;\n\n\t\t\t}\n\n\t\t\tcase 'uvec2': {\n\n\t\t\t\treturn uvec2;\n\n\t\t\t}\n\n\t\t\tcase 'uvec3': {\n\n\t\t\t\treturn uvec3;\n\n\t\t\t}\n\n\t\t\tcase 'uvec4': {\n\n\t\t\t\treturn uvec4;\n\n\t\t\t}\n\n\t\t\tcase 'ivec2': {\n\n\t\t\t\treturn ivec2;\n\n\t\t\t}\n\n\t\t\tcase 'ivec3': {\n\n\t\t\t\treturn ivec3;\n\n\t\t\t}\n\n\t\t\tcase 'ivec4': {\n\n\t\t\t\treturn ivec4;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates and registers a reusable GLSL function that emulates the behavior of countTrailingZeros.\n\t *\n\t * @private\n\t * @param {string} method - The name of the function to create.\n\t * @param {string} elementType - The type of the input value.\n\t * @returns {Function} - The generated function\n\t */\n\t_createTrailingZerosBaseLayout( method, elementType ) {\n\n\t\tconst outputConvertNode = this._returnDataNode( elementType );\n\n\t\tconst fnDef = Fn( ( [ value ] ) => {\n\n\t\t\tconst v = uint( 0.0 );\n\n\t\t\tthis._resolveElementType( value, v, elementType );\n\n\t\t\tconst f = float( v.bitAnd( negate( v ) ) );\n\t\t\tconst uintBits = floatBitsToUint( f );\n\n\t\t\tconst numTrailingZeros = ( uintBits.shiftRight( 23 ) ).sub( 127 );\n\n\t\t\treturn outputConvertNode( numTrailingZeros );\n\n\t\t} ).setLayout( {\n\t\t\tname: method,\n\t\t\ttype: elementType,\n\t\t\tinputs: [\n\t\t\t\t{ name: 'value', type: elementType }\n\t\t\t]\n\t\t} );\n\n\t\treturn fnDef;\n\n\t}\n\n\t/**\n\t * Creates and registers a reusable GLSL function that emulates the behavior of countLeadingZeros.\n\t *\n\t * @private\n\t * @param {string} method - The name of the function to create.\n\t * @param {string} elementType - The type of the input value.\n\t * @returns {Function} - The generated function\n\t */\n\t_createLeadingZerosBaseLayout( method, elementType ) {\n\n\t\tconst outputConvertNode = this._returnDataNode( elementType );\n\n\t\tconst fnDef = Fn( ( [ value ] ) => {\n\n\t\t\tIf( value.equal( uint( 0 ) ), () => {\n\n\t\t\t\treturn uint( 32 );\n\n\t\t\t} );\n\n\t\t\tconst v = uint( 0 );\n\t\t\tconst n = uint( 0 );\n\t\t\tthis._resolveElementType( value, v, elementType );\n\n\t\t\tIf( v.shiftRight( 16 ).equal( 0 ), () => {\n\n\t\t\t\tn.addAssign( 16 );\n\t\t\t\tv.shiftLeftAssign( 16 );\n\n\t\t\t} );\n\n\t\t\tIf( v.shiftRight( 24 ).equal( 0 ), () => {\n\n\t\t\t\tn.addAssign( 8 );\n\t\t\t\tv.shiftLeftAssign( 8 );\n\n\t\t\t} );\n\n\t\t\tIf( v.shiftRight( 28 ).equal( 0 ), () => {\n\n\t\t\t\tn.addAssign( 4 );\n\t\t\t\tv.shiftLeftAssign( 4 );\n\n\t\t\t} );\n\n\t\t\tIf( v.shiftRight( 30 ).equal( 0 ), () => {\n\n\t\t\t\tn.addAssign( 2 );\n\t\t\t\tv.shiftLeftAssign( 2 );\n\n\t\t\t} );\n\n\t\t\tIf( v.shiftRight( 31 ).equal( 0 ), () => {\n\n\t\t\t\tn.addAssign( 1 );\n\n\t\t\t} );\n\n\t\t\treturn outputConvertNode( n );\n\n\t\t} ).setLayout( {\n\t\t\tname: method,\n\t\t\ttype: elementType,\n\t\t\tinputs: [\n\t\t\t\t{ name: 'value', type: elementType }\n\t\t\t]\n\t\t} );\n\n\t\treturn fnDef;\n\n\t}\n\n\t/**\n\t * Creates and registers a reusable GLSL function that emulates the behavior of countOneBits.\n\t *\n\t * @private\n\t * @param {string} method - The name of the function to create.\n\t * @param {string} elementType - The type of the input value.\n\t * @returns {Function} - The generated function\n\t */\n\t_createOneBitsBaseLayout( method, elementType ) {\n\n\t\tconst outputConvertNode = this._returnDataNode( elementType );\n\n\t\tconst fnDef = Fn( ( [ value ] ) => {\n\n\t\t\tconst v = uint( 0.0 );\n\n\t\t\tthis._resolveElementType( value, v, elementType );\n\n\t\t\tv.assign( v.sub( v.shiftRight( uint( 1 ) ).bitAnd( uint( 0x55555555 ) ) ) );\n\t\t\tv.assign( v.bitAnd( uint( 0x33333333 ) ).add( v.shiftRight( uint( 2 ) ).bitAnd( uint( 0x33333333 ) ) ) );\n\n\t\t\tconst numBits = v.add( v.shiftRight( uint( 4 ) ) ).bitAnd( uint( 0xF0F0F0F ) ).mul( uint( 0x1010101 ) ).shiftRight( uint( 24 ) );\n\n\t\t\treturn outputConvertNode( numBits );\n\n\t\t} ).setLayout( {\n\t\t\tname: method,\n\t\t\ttype: elementType,\n\t\t\tinputs: [\n\t\t\t\t{ name: 'value', type: elementType }\n\t\t\t]\n\t\t} );\n\n\t\treturn fnDef;\n\n\t}\n\n\t/**\n\t * Creates and registers a reusable GLSL function that emulates the behavior of the specified bitcount function.\n\t * including considerations for component-wise bitcounts on vector type inputs.\n\t *\n\t * @private\n\t * @param {string} method - The name of the function to create.\n\t * @param {string} inputType - The type of the input value.\n\t * @param {number} typeLength - The vec length of the input value.\n\t * @param {Function} baseFn - The base function that operates on an individual component of the vector.\n\t * @returns {Function} - The alias function for the specified bitcount method.\n\t */\n\t_createMainLayout( method, inputType, typeLength, baseFn ) {\n\n\t\tconst outputConvertNode = this._returnDataNode( inputType );\n\n\t\tconst fnDef = Fn( ( [ value ] ) => {\n\n\t\t\tif ( typeLength === 1 ) {\n\n\t\t\t\treturn outputConvertNode( baseFn( value ) );\n\n\t\t\t} else {\n\n\t\t\t\tconst vec = outputConvertNode( 0 );\n\n\t\t\t\tconst components = [ 'x', 'y', 'z', 'w' ];\n\t\t\t\tfor ( let i = 0; i < typeLength; i ++ ) {\n\n\t\t\t\t\tconst component = components[ i ];\n\n\t\t\t\t\tvec[ component ].assign( baseFn( value[ component ] ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn vec;\n\n\t\t\t}\n\n\t\t} ).setLayout( {\n\t\t\tname: method,\n\t\t\ttype: inputType,\n\t\t\tinputs: [\n\t\t\t\t{ name: 'value', type: inputType }\n\t\t\t]\n\t\t} );\n\n\t\treturn fnDef;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst { method, aNode } = this;\n\n\t\tconst { renderer } = builder;\n\n\t\tif ( renderer.backend.isWebGPUBackend ) {\n\n\t\t\t// use built-in WGSL functions for WebGPU\n\n\t\t\treturn super.setup( builder );\n\n\t\t}\n\n\t\tconst inputType = this.getInputType( builder );\n\t\tconst elementType = builder.getElementType( inputType );\n\n\t\tconst typeLength = builder.getTypeLength( inputType );\n\n\t\tconst baseMethod = `${method}_base_${elementType}`;\n\t\tconst newMethod = `${method}_${inputType}`;\n\n\t\tlet baseFn = registeredBitcountFunctions[ baseMethod ];\n\n\t\tif ( baseFn === undefined ) {\n\n\t\t\tswitch ( method ) {\n\n\t\t\t\tcase BitcountNode.COUNT_LEADING_ZEROS: {\n\n\t\t\t\t\tbaseFn = this._createLeadingZerosBaseLayout( baseMethod, elementType );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tcase BitcountNode.COUNT_TRAILING_ZEROS: {\n\n\t\t\t\t\tbaseFn = this._createTrailingZerosBaseLayout( baseMethod, elementType );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tcase BitcountNode.COUNT_ONE_BITS: {\n\n\t\t\t\t\tbaseFn = this._createOneBitsBaseLayout( baseMethod, elementType );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tregisteredBitcountFunctions[ baseMethod ] = baseFn;\n\n\t\t}\n\n\t\tlet fn = registeredBitcountFunctions[ newMethod ];\n\n\t\tif ( fn === undefined ) {\n\n\t\t\tfn = this._createMainLayout( newMethod, inputType, typeLength, baseFn );\n\t\t\tregisteredBitcountFunctions[ newMethod ] = fn;\n\n\t\t}\n\n\t\tconst output = Fn( () => {\n\n\t\t\treturn fn(\n\t\t\t\taNode,\n\t\t\t);\n\n\t\t} );\n\n\t\treturn output();\n\n\t}\n\n}\n\nBitcountNode.COUNT_TRAILING_ZEROS = 'countTrailingZeros';\nBitcountNode.COUNT_LEADING_ZEROS = 'countLeadingZeros';\nBitcountNode.COUNT_ONE_BITS = 'countOneBits';\n\n/**\n * Finds the number of consecutive 0 bits from the least significant bit of the input value,\n * which is also the index of the least significant bit of the input value.\n *\n * Can only be used with {@link WebGPURenderer} and a WebGPU backend.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The input value.\n * @returns {Node}\n */\nconst countTrailingZeros = /*@__PURE__*/ nodeProxyIntent( BitcountNode, BitcountNode.COUNT_TRAILING_ZEROS ).setParameterLength( 1 );\n\n/**\n * Finds the number of consecutive 0 bits starting from the most significant bit of the input value.\n *\n * Can only be used with {@link WebGPURenderer} and a WebGPU backend.\n *\n * @tsl\n * @function\n * @param {Node | number} x - The input value.\n * @returns {Node}\n */\nconst countLeadingZeros = /*@__PURE__*/ nodeProxyIntent( BitcountNode, BitcountNode.COUNT_LEADING_ZEROS ).setParameterLength( 1 );\n\n/**\n * Finds the number of '1' bits set in the input value\n *\n * Can only be used with {@link WebGPURenderer} and a WebGPU backend.\n *\n * @tsl\n * @function\n * @returns {Node}\n */\nconst countOneBits = /*@__PURE__*/ nodeProxyIntent( BitcountNode, BitcountNode.COUNT_ONE_BITS ).setParameterLength( 1 );\n\n/**\n * Generates a hash value in the range `[0, 1]` from the given seed.\n *\n * @tsl\n * @function\n * @param {Node<float>} seed - The seed.\n * @return {Node<float>} The hash value.\n */\nconst hash = /*@__PURE__*/ Fn( ( [ seed ] ) => {\n\n\t// Taken from https://www.shadertoy.com/view/XlGcRh, originally from pcg-random.org\n\n\tconst state = seed.toUint().mul( 747796405 ).add( 2891336453 );\n\tconst word = state.shiftRight( state.shiftRight( 28 ).add( 4 ) ).bitXor( state ).mul( 277803737 );\n\tconst result = word.shiftRight( 22 ).bitXor( word );\n\n\treturn result.toFloat().mul( 1 / 2 ** 32 ); // Convert to range [0, 1)\n\n} );\n\n/**\n * A function that remaps the `[0,1]` interval into the `[0,1]` interval.\n * The corners are mapped to `0` and the center to `1`.\n * Reference: {@link https://iquilezles.org/articles/functions/}.\n *\n * @tsl\n * @function\n * @param {Node<float>} x - The value to remap.\n * @param {Node<float>} k - Allows to control the remapping functions shape by rising the parabola to a power `k`.\n * @return {Node<float>} The remapped value.\n */\nconst parabola = ( x, k ) => pow( mul( 4.0, x.mul( sub( 1.0, x ) ) ), k );\n\n/**\n * A function that remaps the `[0,1]` interval into the `[0,1]` interval.\n * Expands the sides and compresses the center, and keeps `0.5` mapped to `0.5`.\n * Reference: {@link https://iquilezles.org/articles/functions/}.\n *\n * @tsl\n * @function\n * @param {Node<float>} x - The value to remap.\n * @param {Node<float>} k - `k=1` is the identity curve,`k<1` produces the classic `gain()` shape, and `k>1` produces \"s\" shaped curves.\n * @return {Node<float>} The remapped value.\n */\nconst gain = ( x, k ) => x.lessThan( 0.5 ) ? parabola( x.mul( 2.0 ), k ).div( 2.0 ) : sub( 1.0, parabola( mul( sub( 1.0, x ), 2.0 ), k ).div( 2.0 ) );\n\n/**\n * A function that remaps the `[0,1]` interval into the `[0,1]` interval.\n * A generalization of the `parabola()`. Keeps the corners mapped to 0 but allows the control of the shape one either side of the curve.\n * Reference: {@link https://iquilezles.org/articles/functions/}.\n *\n * @tsl\n * @function\n * @param {Node<float>} x - The value to remap.\n * @param {Node<float>} a - First control parameter.\n * @param {Node<float>} b - Second control parameter.\n * @return {Node<float>} The remapped value.\n */\nconst pcurve = ( x, a, b ) => pow( div( pow( x, a ), add( pow( x, a ), pow( sub( 1.0, x ), b ) ) ), 1.0 / a );\n\n/**\n * A phase shifted sinus curve that starts at zero and ends at zero, with bouncing behavior.\n * Reference: {@link https://iquilezles.org/articles/functions/}.\n *\n * @tsl\n * @function\n * @param {Node<float>} x - The value to compute the sin for.\n * @param {Node<float>} k - Controls the amount of bounces.\n * @return {Node<float>} The result value.\n */\nconst sinc = ( x, k ) => sin( PI.mul( k.mul( x ).sub( 1.0 ) ) ).div( PI.mul( k.mul( x ).sub( 1.0 ) ) );\n\n/**\n * This node represents an operation that packs floating-point values of a vector into an unsigned 32-bit integer\n *\n * @augments TempNode\n */\nclass PackFloatNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'PackFloatNode';\n\n\t}\n\n\t/**\n\t *\n\t * @param {'snorm' | 'unorm' | 'float16'} encoding - The numeric encoding that describes how the float values are mapped to the integer range.\n\t * @param {Node} vectorNode - The vector node to be packed\n\t */\n\tconstructor( encoding, vectorNode ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The vector to be packed.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.vectorNode = vectorNode;\n\n\t\t/**\n\t\t * The numeric encoding.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.encoding = encoding;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPackFloatNode = true;\n\n\t}\n\n\tgenerateNodeType() {\n\n\t\treturn 'uint';\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst inputType = this.vectorNode.getNodeType( builder );\n\t\treturn `${ builder.getFloatPackingMethod( this.encoding ) }(${ this.vectorNode.build( builder, inputType )})`;\n\n\t}\n\n}\n\n/**\n * Converts each component of the normalized float to 16-bit integer values. The results are packed into a single unsigned integer.\n * round(clamp(c, -1, +1) * 32767.0)\n *\n * @tsl\n * @function\n * @param {Node<vec2>} value - The 2-component vector to be packed\n * @returns {Node}\n */\nconst packSnorm2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'snorm' ).setParameterLength( 1 );\n\n/**\n * Converts each component of the normalized float to 16-bit integer values. The results are packed into a single unsigned integer.\n * round(clamp(c, 0, +1) * 65535.0)\n *\n * @tsl\n * @function\n * @param {Node<vec2>} value - The 2-component vector to be packed\n * @returns {Node}\n */\nconst packUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'unorm' ).setParameterLength( 1 );\n\n/**\n * Converts each component of the vec2 to 16-bit floating-point values. The results are packed into a single unsigned integer.\n *\n * @tsl\n * @function\n * @param {Node<vec2>} value - The 2-component vector to be packed\n * @returns {Node}\n */\nconst packHalf2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'float16' ).setParameterLength( 1 );\n\n/**\n * This node represents an operation that unpacks values from a 32-bit unsigned integer, reinterpreting the results as a floating-point vector\n *\n * @augments TempNode\n */\nclass UnpackFloatNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'UnpackFloatNode';\n\n\t}\n\n\t/**\n\t *\n\t * @param {'snorm' | 'unorm' | 'float16'} encoding - The numeric encoding that describes how the integer values are mapped to the float range\n\t * @param {Node} uintNode - The uint node to be unpacked\n\t */\n\tconstructor( encoding, uintNode ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The unsigned integer to be unpacked.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.uintNode = uintNode;\n\n\t\t/**\n\t\t * The numeric encoding.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.encoding = encoding;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isUnpackFloatNode = true;\n\n\t}\n\n\tgenerateNodeType() {\n\n\t\treturn 'vec2';\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst inputType = this.uintNode.getNodeType( builder );\n\t\treturn `${ builder.getFloatUnpackingMethod( this.encoding ) }(${ this.uintNode.build( builder, inputType )})`;\n\n\t}\n\n}\n\n/**\n * Unpacks a 32-bit unsigned integer into two 16-bit values, interpreted as normalized signed integers. Returns a vec2 with both values.\n *\n * @tsl\n * @function\n * @param {Node<uint>} value - The unsigned integer to be unpacked\n * @returns {Node}\n */\nconst unpackSnorm2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'snorm' ).setParameterLength( 1 );\n\n/**\n * Unpacks a 32-bit unsigned integer into two 16-bit values, interpreted as normalized unsigned integers. Returns a vec2 with both values.\n *\n * @tsl\n * @function\n * @param {Node<uint>} value - The unsigned integer to be unpacked\n * @returns {Node}\n */\nconst unpackUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'unorm' ).setParameterLength( 1 );\n\n/**\n * Unpacks a 32-bit unsigned integer into two 16-bit values, interpreted as 16-bit floating-point numbers. Returns a vec2 with both values.\n *\n * @tsl\n * @function\n * @param {Node<uint>} value - The unsigned integer to be unpacked\n * @returns {Node}\n */\nconst unpackHalf2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'float16' ).setParameterLength( 1 );\n\n// https://github.com/cabbibo/glsl-tri-noise-3d\n\n\nconst tri = /*@__PURE__*/ Fn( ( [ x ] ) => {\n\n\treturn x.fract().sub( .5 ).abs();\n\n} ).setLayout( {\n\tname: 'tri',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'x', type: 'float' }\n\t]\n} );\n\nconst tri3 = /*@__PURE__*/ Fn( ( [ p ] ) => {\n\n\treturn vec3( tri( p.z.add( tri( p.y.mul( 1. ) ) ) ), tri( p.z.add( tri( p.x.mul( 1. ) ) ) ), tri( p.y.add( tri( p.x.mul( 1. ) ) ) ) );\n\n} ).setLayout( {\n\tname: 'tri3',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' }\n\t]\n} );\n\n/**\n * Generates a noise value from the given position, speed and time parameters.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} position - The position.\n * @param {Node<float>} speed - The speed.\n * @param {Node<float>} time - The time.\n * @return {Node<float>} The generated noise.\n */\nconst triNoise3D = /*@__PURE__*/ Fn( ( [ position, speed, time ] ) => {\n\n\tconst p = vec3( position ).toVar();\n\tconst z = float( 1.4 ).toVar();\n\tconst rz = float( 0.0 ).toVar();\n\tconst bp = vec3( p ).toVar();\n\n\tLoop( { start: float( 0.0 ), end: float( 3.0 ), type: 'float', condition: '<=' }, () => {\n\n\t\tconst dg = vec3( tri3( bp.mul( 2.0 ) ) ).toVar();\n\t\tp.addAssign( dg.add( time.mul( float( 0.1 ).mul( speed ) ) ) );\n\t\tbp.mulAssign( 1.8 );\n\t\tz.mulAssign( 1.5 );\n\t\tp.mulAssign( 1.2 );\n\n\t\tconst t = float( tri( p.z.add( tri( p.x.add( tri( p.y ) ) ) ) ) ).toVar();\n\t\trz.addAssign( t.div( z ) );\n\t\tbp.addAssign( 0.14 );\n\n\t} );\n\n\treturn rz;\n\n} ).setLayout( {\n\tname: 'triNoise3D',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'position', type: 'vec3' },\n\t\t{ name: 'speed', type: 'float' },\n\t\t{ name: 'time', type: 'float' }\n\t]\n} );\n\n/**\n * This class allows to define multiple overloaded versions\n * of the same function. Depending on the parameters of the function\n * call, the node picks the best-fit overloaded version.\n *\n * @augments Node\n */\nclass FunctionOverloadingNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'FunctionOverloadingNode';\n\n\t}\n\n\t/**\n\t * Constructs a new function overloading node.\n\t *\n\t * @param {Array<Function>} functionNodes - Array of `Fn` function definitions.\n\t * @param {...Node} parametersNodes - A list of parameter nodes.\n\t */\n\tconstructor( functionNodes = [], ...parametersNodes ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * Array of `Fn` function definitions.\n\t\t *\n\t\t * @type {Array<Function>}\n\t\t */\n\t\tthis.functionNodes = functionNodes;\n\n\t\t/**\n\t\t * A list of parameter nodes.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.parametersNodes = parametersNodes;\n\n\t\t/**\n\t\t * The selected overloaded function call.\n\t\t *\n\t\t * @private\n\t\t * @type {ShaderCallNodeInternal}\n\t\t */\n\t\tthis._candidateFn = null;\n\n\t\t/**\n\t\t * This node is marked as global.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from\n\t * the function's return type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\tconst candidateFn = this.getCandidateFn( builder );\n\n\t\treturn candidateFn.shaderNode.layout.type;\n\n\t}\n\n\t/**\n\t * Returns the candidate function for the current parameters.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {FunctionNode} The candidate function.\n\t */\n\tgetCandidateFn( builder ) {\n\n\t\tconst params = this.parametersNodes;\n\n\t\tlet candidateFn = this._candidateFn;\n\n\t\tif ( candidateFn === null ) {\n\n\t\t\tlet bestCandidateFn = null;\n\t\t\tlet bestScore = -1;\n\n\t\t\tfor ( const functionNode of this.functionNodes ) {\n\n\t\t\t\tconst shaderNode = functionNode.shaderNode;\n\t\t\t\tconst layout = shaderNode.layout;\n\n\t\t\t\tif ( layout === null ) {\n\n\t\t\t\t\tthrow new Error( 'FunctionOverloadingNode: FunctionNode must be a layout.' );\n\n\t\t\t\t}\n\n\t\t\t\tconst inputs = layout.inputs;\n\n\t\t\t\tif ( params.length === inputs.length ) {\n\n\t\t\t\t\tlet currentScore = 0;\n\n\t\t\t\t\tfor ( let i = 0; i < params.length; i ++ ) {\n\n\t\t\t\t\t\tconst param = params[ i ];\n\t\t\t\t\t\tconst input = inputs[ i ];\n\n\t\t\t\t\t\tif ( param.getNodeType( builder ) === input.type ) {\n\n\t\t\t\t\t\t\tcurrentScore ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( currentScore > bestScore ) {\n\n\t\t\t\t\t\tbestCandidateFn = functionNode;\n\t\t\t\t\t\tbestScore = currentScore;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._candidateFn = candidateFn = bestCandidateFn;\n\n\t\t}\n\n\t\treturn candidateFn;\n\n\t}\n\n\t/**\n\t * Sets up the node for the current parameters.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Node} The setup node.\n\t */\n\tsetup( builder ) {\n\n\t\tconst candidateFn = this.getCandidateFn( builder );\n\n\t\treturn candidateFn( ...this.parametersNodes );\n\n\t}\n\n}\n\nconst overloadingBaseFn = /*@__PURE__*/ nodeProxy( FunctionOverloadingNode );\n\n/**\n * TSL function for creating a function overloading node.\n *\n * @tsl\n * @function\n * @param {Array<Function>} functionNodes - Array of `Fn` function definitions.\n * @returns {FunctionOverloadingNode}\n */\nconst overloadingFn = ( functionNodes ) => ( ...params ) => overloadingBaseFn( functionNodes, ...params );\n\n/**\n * Represents the elapsed time in seconds.\n *\n * @tsl\n * @type {UniformNode<float>}\n */\nconst time = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.time );\n\n/**\n * Represents the delta time in seconds.\n *\n * @tsl\n * @type {UniformNode<float>}\n */\nconst deltaTime = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.deltaTime );\n\n/**\n * Represents the current frame ID.\n *\n * @tsl\n * @type {UniformNode<uint>}\n */\nconst frameId = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => frame.frameId );\n\n/**\n * Generates a sine wave oscillation based on a timer.\n *\n * @tsl\n * @function\n * @param {Node<float>} t - The timer to generate the oscillation with.\n * @return {Node<float>} The oscillation node.\n */\nconst oscSine = ( t = time ) => t.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );\n\n/**\n * Generates a square wave oscillation based on a timer.\n *\n * @tsl\n * @function\n * @param {Node<float>} t - The timer to generate the oscillation with.\n * @return {Node<float>} The oscillation node.\n */\nconst oscSquare = ( t = time ) => t.fract().round();\n\n/**\n * Generates a triangle wave oscillation based on a timer.\n *\n * @tsl\n * @function\n * @param {Node<float>} t - The timer to generate the oscillation with.\n * @return {Node<float>} The oscillation node.\n */\nconst oscTriangle = ( t = time ) => t.add( 0.5 ).fract().mul( 2 ).sub( 1 ).abs();\n\n/**\n * Generates a sawtooth wave oscillation based on a timer.\n *\n * @tsl\n * @function\n * @param {Node<float>} t - The timer to generate the oscillation with.\n * @return {Node<float>} The oscillation node.\n */\nconst oscSawtooth = ( t = time ) => t.fract();\n\n/**\n * Replaces the default UV coordinates used in texture lookups.\n *\n * ```js\n *material.contextNode = replaceDefaultUV( ( textureNode ) => {\n *\n *\t// ...\n *\treturn customUVCoordinates;\n *\n *} );\n *```\n *\n * @tsl\n * @function\n * @param {function(Node):Node<vec2>|Node<vec2>} callback - A callback that receives the texture node\n * and must return the new uv coordinates.\n * @param {Node} [node=null] - An optional node to which the context will be applied.\n * @return {ContextNode} A context node that replaces the default UV coordinates.\n */\nfunction replaceDefaultUV( callback, node = null ) {\n\n\tconst getUV = typeof callback === 'function' ? callback : () => callback;\n\n\treturn context( node, { getUV } );\n\n}\n\n/**\n * Rotates the given uv coordinates around a center point\n *\n * @tsl\n * @function\n * @param {Node<vec2>} uv - The uv coordinates.\n * @param {Node<float>} rotation - The rotation defined in radians.\n * @param {Node<vec2>} center - The center of rotation\n * @return {Node<vec2>} The rotated uv coordinates.\n */\nconst rotateUV = /*@__PURE__*/ Fn( ( [ uv, rotation, center = vec2( 0.5 ) ] ) => {\n\n\treturn rotate( uv.sub( center ), rotation ).add( center );\n\n} );\n\n/**\n * Applies a spherical warping effect to the given uv coordinates.\n *\n * @tsl\n * @function\n * @param {Node<vec2>} uv - The uv coordinates.\n * @param {Node<float>} strength - The strength of the effect.\n * @param {Node<vec2>} center - The center point\n * @return {Node<vec2>} The updated uv coordinates.\n */\nconst spherizeUV = /*@__PURE__*/ Fn( ( [ uv, strength, center = vec2( 0.5 ) ] ) => {\n\n\tconst delta = uv.sub( center );\n\tconst delta2 = delta.dot( delta );\n\tconst delta4 = delta2.mul( delta2 );\n\tconst deltaOffset = delta4.mul( strength );\n\n\treturn uv.add( delta.mul( deltaOffset ) );\n\n} );\n\n/**\n * This can be used to achieve a billboarding behavior for flat meshes. That means they are\n * oriented always towards the camera.\n *\n * ```js\n * material.vertexNode = billboarding();\n * ```\n *\n * @tsl\n * @function\n * @param {Object} config - The configuration object.\n * @param {?Node<vec3>} [config.position=null] - Can be used to define the vertex positions in world space.\n * @param {boolean} [config.horizontal=true] - Whether to follow the camera rotation horizontally or not.\n * @param {boolean} [config.vertical=false] - Whether to follow the camera rotation vertically or not.\n * @return {Node<vec3>} The updated vertex position in clip space.\n */\nconst billboarding = /*@__PURE__*/ Fn( ( { position = null, horizontal = true, vertical = false } ) => {\n\n\tlet worldMatrix;\n\n\tif ( position !== null ) {\n\n\t\tworldMatrix = modelWorldMatrix.toVar();\n\t\tworldMatrix[ 3 ][ 0 ] = position.x;\n\t\tworldMatrix[ 3 ][ 1 ] = position.y;\n\t\tworldMatrix[ 3 ][ 2 ] = position.z;\n\n\t} else {\n\n\t\tworldMatrix = modelWorldMatrix;\n\n\t}\n\n\tconst modelViewMatrix = cameraViewMatrix.mul( worldMatrix );\n\n\tif ( defined( horizontal ) ) {\n\n\t\tmodelViewMatrix[ 0 ][ 0 ] = modelWorldMatrix[ 0 ].length();\n\t\tmodelViewMatrix[ 0 ][ 1 ] = 0;\n\t\tmodelViewMatrix[ 0 ][ 2 ] = 0;\n\n\t}\n\n\tif ( defined( vertical ) ) {\n\n\t\tmodelViewMatrix[ 1 ][ 0 ] = 0;\n\t\tmodelViewMatrix[ 1 ][ 1 ] = modelWorldMatrix[ 1 ].length();\n\t\tmodelViewMatrix[ 1 ][ 2 ] = 0;\n\n\t}\n\n\tmodelViewMatrix[ 2 ][ 0 ] = 0;\n\tmodelViewMatrix[ 2 ][ 1 ] = 0;\n\tmodelViewMatrix[ 2 ][ 2 ] = 1;\n\n\treturn cameraProjectionMatrix.mul( modelViewMatrix ).mul( positionLocal );\n\n} );\n\n/**\n * A special version of a screen uv function that involves a depth comparison\n * when computing the final uvs. The function mitigates visual errors when\n * using viewport texture nodes for refraction purposes. Without this function\n * objects in front of a refractive surface might appear on the refractive surface\n * which is incorrect.\n *\n * @tsl\n * @function\n * @param {?Node<vec2>} uv - Optional uv coordinates. By default `screenUV` is used.\n * @return {Node<vec2>} The update uv coordinates.\n */\nconst viewportSafeUV = /*@__PURE__*/ Fn( ( [ uv = null ] ) => {\n\n\tconst depth = linearDepth();\n\tconst depthDiff = linearDepth( viewportDepthTexture( uv ) ).sub( depth );\n\tconst finalUV = depthDiff.lessThan( 0 ).select( screenUV, uv );\n\n\treturn finalUV;\n\n} );\n\n/**\n * TSL function for computing texture coordinates for animated sprite sheets.\n *\n * ```js\n * const uvNode = spritesheetUV( vec2( 6, 6 ), uv(), time.mul( animationSpeed ) );\n *\n * material.colorNode = texture( spriteSheet, uvNode );\n * ```\n *\n * @tsl\n * @function\n * @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).\n * @param {?Node<vec2>} [uvNode=uv()] - The uv node.\n * @param {?Node<float>} [frameNode=float(0)] - The node that defines the current frame/sprite.\n * @returns {Node<vec2>}\n */\nconst spritesheetUV = /*@__PURE__*/ Fn( ( [ countNode, uvNode = uv$1(), frameNode = float( 0 ) ] ) => {\n\n\tconst width = countNode.x;\n\tconst height = countNode.y;\n\n\tconst frameNum = frameNode.mod( width.mul( height ) ).floor();\n\n\tconst column = frameNum.mod( width );\n\tconst row = height.sub( frameNum.add( 1 ).div( width ).ceil() );\n\n\tconst scale = countNode.reciprocal();\n\tconst uvFrameOffset = vec2( column, row );\n\n\treturn uvNode.add( uvFrameOffset ).mul( scale );\n\n} );\n\n/**\n * TSL function for creating a triplanar textures node.\n *\n * Can be used for triplanar texture mapping.\n *\n * ```js\n * material.colorNode = triplanarTexture( texture( diffuseMap ) );\n * ```\n *\n * @tsl\n * @function\n * @param {Node} textureXNode - First texture node.\n * @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.\n * @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.\n * @param {?Node<float>} [scaleNode=float(1)] - The scale node.\n * @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.\n * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.\n * @returns {Node<vec4>}\n */\nconst triplanarTextures = /*@__PURE__*/ Fn( ( [ textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ] ) => {\n\n\t// Reference: https://github.com/keijiro/StandardTriplanar\n\n\t// Blending factor of triplanar mapping\n\tlet bf = normalNode.abs().normalize();\n\tbf = bf.div( bf.dot( vec3( 1.0 ) ) );\n\n\t// Triplanar mapping\n\tconst tx = positionNode.yz.mul( scaleNode );\n\tconst ty = positionNode.zx.mul( scaleNode );\n\tconst tz = positionNode.xy.mul( scaleNode );\n\n\t// Base color\n\tconst textureX = textureXNode.value;\n\tconst textureY = textureYNode !== null ? textureYNode.value : textureX;\n\tconst textureZ = textureZNode !== null ? textureZNode.value : textureX;\n\n\tconst cx = texture( textureX, tx ).mul( bf.x );\n\tconst cy = texture( textureY, ty ).mul( bf.y );\n\tconst cz = texture( textureZ, tz ).mul( bf.z );\n\n\treturn add( cx, cy, cz );\n\n} );\n\n/**\n * TSL function for creating a triplanar textures node.\n *\n * @tsl\n * @function\n * @param {Node} textureXNode - First texture node.\n * @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.\n * @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.\n * @param {?Node<float>} [scaleNode=float(1)] - The scale node.\n * @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.\n * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.\n * @returns {Node<vec4>}\n */\nconst triplanarTexture = ( ...params ) => triplanarTextures( ...params );\n\nconst _reflectorPlane = new Plane();\nconst _normal = new Vector3();\nconst _reflectorWorldPosition = new Vector3();\nconst _cameraWorldPosition = new Vector3();\nconst _rotationMatrix = new Matrix4();\nconst _lookAtPosition = new Vector3( 0, 0, -1 );\nconst clipPlane = new Vector4();\n\nconst _view = new Vector3();\nconst _target = new Vector3();\nconst _q = new Vector4();\n\nconst _size$2 = new Vector2();\n\nconst _defaultRT = new RenderTarget();\nconst _defaultUV = screenUV.flipX();\n\n_defaultRT.depthTexture = new DepthTexture( 1, 1 );\n\nlet _inReflector = false;\n\n/**\n * This node can be used to implement mirror-like flat reflective surfaces.\n *\n * ```js\n * const groundReflector = reflector();\n * material.colorNode = groundReflector;\n *\n * const plane = new Mesh( geometry, material );\n * plane.add( groundReflector.target );\n * ```\n *\n * @augments TextureNode\n */\nclass ReflectorNode extends TextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'ReflectorNode';\n\n\t}\n\n\t/**\n\t * Constructs a new reflector node.\n\t *\n\t * @param {Object} [parameters={}] - An object holding configuration parameters.\n\t * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.\n\t * @param {number} [parameters.resolutionScale=1] - The resolution scale.\n\t * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.\n\t * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.\n\t * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.\n\t * @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.\n\t * @param {TextureNode} [parameters.defaultTexture] - The default texture node.\n\t * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.\n\t */\n\tconstructor( parameters = {} ) {\n\n\t\tsuper( parameters.defaultTexture || _defaultRT.texture, _defaultUV );\n\n\t\t/**\n\t\t * A reference to the internal reflector base node which holds the actual implementation.\n\t\t *\n\t\t * @private\n\t\t * @type {ReflectorBaseNode}\n\t\t * @default ReflectorBaseNode\n\t\t */\n\t\tthis._reflectorBaseNode = parameters.reflector || new ReflectorBaseNode( this, parameters );\n\n\t\t/**\n\t\t * A reference to the internal depth node.\n\t\t *\n\t\t * @private\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis._depthNode = null;\n\n\t\tthis.setUpdateMatrix( false );\n\n\t}\n\n\t/**\n\t * A reference to the internal reflector node.\n\t *\n\t * @type {ReflectorBaseNode}\n\t */\n\tget reflector() {\n\n\t\treturn this._reflectorBaseNode;\n\n\t}\n\n\t/**\n\t * A reference to 3D object the reflector is linked to.\n\t *\n\t * @type {Object3D}\n\t */\n\tget target() {\n\n\t\treturn this._reflectorBaseNode.target;\n\n\t}\n\n\t/**\n\t * Returns a node representing the mirror's depth. That can be used\n\t * to implement more advanced reflection effects like distance attenuation.\n\t *\n\t * @return {Node} The depth node.\n\t */\n\tgetDepthNode() {\n\n\t\tif ( this._depthNode === null ) {\n\n\t\t\tif ( this._reflectorBaseNode.depth !== true ) {\n\n\t\t\t\tthrow new Error( 'THREE.ReflectorNode: Depth node can only be requested when the reflector is created with { depth: true }. ' );\n\n\t\t\t}\n\n\t\t\tthis._depthNode = new ReflectorNode( {\n\t\t\t\tdefaultTexture: _defaultRT.depthTexture,\n\t\t\t\treflector: this._reflectorBaseNode\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this._depthNode;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\t// ignore if used in post-processing\n\t\tif ( ! builder.object.isQuadMesh ) this._reflectorBaseNode.build( builder );\n\n\t\treturn super.setup( builder );\n\n\t}\n\n\tclone() {\n\n\t\tconst newNode = new this.constructor( this.reflectorNode );\n\t\tnewNode.uvNode = this.uvNode;\n\t\tnewNode.levelNode = this.levelNode;\n\t\tnewNode.biasNode = this.biasNode;\n\t\tnewNode.sampler = this.sampler;\n\t\tnewNode.depthNode = this.depthNode;\n\t\tnewNode.compareNode = this.compareNode;\n\t\tnewNode.gradNode = this.gradNode;\n\t\tnewNode.offsetNode = this.offsetNode;\n\t\tnewNode._reflectorBaseNode = this._reflectorBaseNode;\n\n\t\treturn newNode;\n\n\t}\n\n\t/**\n\t * Frees internal resources. Should be called when the node is no longer in use.\n\t */\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tthis._reflectorBaseNode.dispose();\n\n\t}\n\n}\n\n/**\n * Holds the actual implementation of the reflector.\n *\n * TODO: Explain why `ReflectorBaseNode`. Originally the entire logic was implemented\n * in `ReflectorNode`, see #29619.\n *\n * @private\n * @augments Node\n */\nclass ReflectorBaseNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ReflectorBaseNode';\n\n\t}\n\n\t/**\n\t * Constructs a new reflector base node.\n\t *\n\t * @param {TextureNode} textureNode - Represents the rendered reflections as a texture node.\n\t * @param {Object} [parameters={}] - An object holding configuration parameters.\n\t * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.\n\t * @param {number} [parameters.resolutionScale=1] - The resolution scale.\n\t * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.\n\t * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.\n\t * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.\n\t * @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.\n\t */\n\tconstructor( textureNode, parameters = {} ) {\n\n\t\tsuper();\n\n\t\tconst {\n\t\t\ttarget = new Object3D(),\n\t\t\tresolutionScale = 1,\n\t\t\tgenerateMipmaps = false,\n\t\t\tbounces = true,\n\t\t\tdepth = false,\n\t\t\tsamples = 0\n\t\t} = parameters;\n\n\t\t/**\n\t\t * Represents the rendered reflections as a texture node.\n\t\t *\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis.textureNode = textureNode;\n\n\t\t/**\n\t\t * The 3D object the reflector is linked to.\n\t\t *\n\t\t * @type {Object3D}\n\t\t * @default {new Object3D()}\n\t\t */\n\t\tthis.target = target;\n\n\t\t/**\n\t\t * The resolution scale.\n\t\t *\n\t\t * @type {number}\n\t\t * @default {1}\n\t\t */\n\t\tthis.resolutionScale = resolutionScale;\n\n\t\tif ( parameters.resolution !== undefined ) {\n\n\t\t\twarnOnce( 'ReflectorNode: The \"resolution\" parameter has been renamed to \"resolutionScale\".' ); // @deprecated r180\n\n\t\t\tthis.resolutionScale = parameters.resolution;\n\n\t\t}\n\n\t\t/**\n\t\t * Whether mipmaps should be generated or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default {false}\n\t\t */\n\t\tthis.generateMipmaps = generateMipmaps;\n\n\t\t/**\n\t\t * Whether reflectors can render other reflector nodes or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default {true}\n\t\t */\n\t\tthis.bounces = bounces;\n\n\t\t/**\n\t\t * Whether depth data should be generated or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default {false}\n\t\t */\n\t\tthis.depth = depth;\n\n\t\t/**\n\t\t * The number of anti-aliasing samples for the render-target\n\t\t *\n\t\t * @type {number}\n\t\t * @default {0}\n\t\t */\n\t\tthis.samples = samples;\n\n\t\t/**\n\t\t * The `updateBeforeType` is set to `NodeUpdateType.RENDER` when {@link ReflectorBaseNode#bounces}\n\t\t * is `true`. Otherwise it's `NodeUpdateType.FRAME`.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'render'\n\t\t */\n\t\tthis.updateBeforeType = bounces ? NodeUpdateType.RENDER : NodeUpdateType.FRAME;\n\n\t\t/**\n\t\t * Weak map for managing virtual cameras.\n\t\t *\n\t\t * @type {WeakMap<Camera, Camera>}\n\t\t */\n\t\tthis.virtualCameras = new WeakMap();\n\n\t\t/**\n\t\t * Weak map for managing render targets.\n\t\t *\n\t\t * @type {Map<Camera, RenderTarget>}\n\t\t */\n\t\tthis.renderTargets = new Map();\n\n\t\t/**\n\t\t * Force render even if reflector is facing away from camera.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default {false}\n\t\t */\n\t\tthis.forceUpdate = false;\n\n\t\t/**\n\t\t * Whether the reflector has been rendered or not.\n\t\t *\n\t\t * When the reflector is facing away from the camera,\n\t\t * this flag is set to `false` and the texture will be empty(black).\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default {false}\n\t\t */\n\t\tthis.hasOutput = false;\n\n\t}\n\n\t/**\n\t * Updates the resolution of the internal render target.\n\t *\n\t * @private\n\t * @param {RenderTarget} renderTarget - The render target to resize.\n\t * @param {Renderer} renderer - The renderer that is used to determine the new size.\n\t */\n\t_updateResolution( renderTarget, renderer ) {\n\n\t\tconst resolution = this.resolutionScale;\n\n\t\trenderer.getDrawingBufferSize( _size$2 );\n\n\t\trenderTarget.setSize( Math.round( _size$2.width * resolution ), Math.round( _size$2.height * resolution ) );\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tthis._updateResolution( _defaultRT, builder.renderer );\n\n\t\treturn super.setup( builder );\n\n\t}\n\n\t/**\n\t * Frees internal resources. Should be called when the node is no longer in use.\n\t */\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tfor ( const renderTarget of this.renderTargets.values() ) {\n\n\t\t\trenderTarget.dispose();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a virtual camera for the given camera. The virtual camera is used to\n\t * render the scene from the reflector's view so correct reflections can be produced.\n\t *\n\t * @param {Camera} camera - The scene's camera.\n\t * @return {Camera} The corresponding virtual camera.\n\t */\n\tgetVirtualCamera( camera ) {\n\n\t\tlet virtualCamera = this.virtualCameras.get( camera );\n\n\t\tif ( virtualCamera === undefined ) {\n\n\t\t\tvirtualCamera = camera.clone();\n\n\t\t\tthis.virtualCameras.set( camera, virtualCamera );\n\n\t\t}\n\n\t\treturn virtualCamera;\n\n\t}\n\n\t/**\n\t * Returns a render target for the given camera. The reflections are rendered\n\t * into this render target.\n\t *\n\t * @param {Camera} camera - The scene's camera.\n\t * @return {RenderTarget} The render target.\n\t */\n\tgetRenderTarget( camera ) {\n\n\t\tlet renderTarget = this.renderTargets.get( camera );\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\trenderTarget = new RenderTarget( 0, 0, { type: HalfFloatType, samples: this.samples } );\n\n\t\t\tif ( this.generateMipmaps === true ) {\n\n\t\t\t\trenderTarget.texture.minFilter = LinearMipMapLinearFilter;\n\t\t\t\trenderTarget.texture.generateMipmaps = true;\n\n\t\t\t}\n\n\t\t\tif ( this.depth === true ) {\n\n\t\t\t\trenderTarget.depthTexture = new DepthTexture();\n\n\t\t\t}\n\n\t\t\tthis.renderTargets.set( camera, renderTarget );\n\n\t\t}\n\n\t\treturn renderTarget;\n\n\t}\n\n\tupdateBefore( frame ) {\n\n\t\tif ( this.bounces === false && _inReflector ) return false;\n\n\t\t_inReflector = true;\n\n\t\tconst { scene, camera, renderer, material } = frame;\n\t\tconst { target } = this;\n\n\t\tconst virtualCamera = this.getVirtualCamera( camera );\n\t\tconst renderTarget = this.getRenderTarget( virtualCamera );\n\n\t\trenderer.getDrawingBufferSize( _size$2 );\n\n\t\tthis._updateResolution( renderTarget, renderer );\n\n\t\t//\n\n\t\t_reflectorWorldPosition.setFromMatrixPosition( target.matrixWorld );\n\t\t_cameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t_rotationMatrix.extractRotation( target.matrixWorld );\n\n\t\t_normal.set( 0, 0, 1 );\n\t\t_normal.applyMatrix4( _rotationMatrix );\n\n\t\t_view.subVectors( _reflectorWorldPosition, _cameraWorldPosition );\n\n\t\t// Avoid rendering when reflector is facing away unless forcing an update\n\t\tconst isFacingAway = _view.dot( _normal ) > 0;\n\n\t\tlet needsClear = false;\n\n\t\tif ( isFacingAway === true && this.forceUpdate === false ) {\n\n\t\t\tif ( this.hasOutput === false ) {\n\n\t\t\t\t_inReflector = false;\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tneedsClear = true;\n\n\t\t}\n\n\t\t_view.reflect( _normal ).negate();\n\t\t_view.add( _reflectorWorldPosition );\n\n\t\t_rotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t_lookAtPosition.set( 0, 0, -1 );\n\t\t_lookAtPosition.applyMatrix4( _rotationMatrix );\n\t\t_lookAtPosition.add( _cameraWorldPosition );\n\n\t\t_target.subVectors( _reflectorWorldPosition, _lookAtPosition );\n\t\t_target.reflect( _normal ).negate();\n\t\t_target.add( _reflectorWorldPosition );\n\n\t\t//\n\n\t\tvirtualCamera.coordinateSystem = camera.coordinateSystem;\n\t\tvirtualCamera.position.copy( _view );\n\t\tvirtualCamera.up.set( 0, 1, 0 );\n\t\tvirtualCamera.up.applyMatrix4( _rotationMatrix );\n\t\tvirtualCamera.up.reflect( _normal );\n\t\tvirtualCamera.lookAt( _target );\n\n\t\tvirtualCamera.near = camera.near;\n\t\tvirtualCamera.far = camera.far;\n\n\t\tvirtualCamera.updateMatrixWorld();\n\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n\t\t// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n\t\t_reflectorPlane.setFromNormalAndCoplanarPoint( _normal, _reflectorWorldPosition );\n\t\t_reflectorPlane.applyMatrix4( virtualCamera.matrixWorldInverse );\n\n\t\tclipPlane.set( _reflectorPlane.normal.x, _reflectorPlane.normal.y, _reflectorPlane.normal.z, _reflectorPlane.constant );\n\n\t\tconst projectionMatrix = virtualCamera.projectionMatrix;\n\n\t\t_q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t_q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t_q.z = -1;\n\t\t_q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t// Calculate the scaled plane vector\n\t\tclipPlane.multiplyScalar( 1.0 / clipPlane.dot( _q ) );\n\n\t\tconst clipBias = 0;\n\n\t\t// Replacing the third row of the projection matrix\n\t\tprojectionMatrix.elements[ 2 ] = clipPlane.x;\n\t\tprojectionMatrix.elements[ 6 ] = clipPlane.y;\n\t\tprojectionMatrix.elements[ 10 ] = ( renderer.coordinateSystem === WebGPUCoordinateSystem ) ? ( clipPlane.z - clipBias ) : ( clipPlane.z + 1.0 - clipBias );\n\t\tprojectionMatrix.elements[ 14 ] = clipPlane.w;\n\n\t\t//\n\n\t\tthis.textureNode.value = renderTarget.texture;\n\n\t\tif ( this.depth === true ) {\n\n\t\t\tthis.textureNode.getDepthNode().value = renderTarget.depthTexture;\n\n\t\t}\n\n\t\tmaterial.visible = false;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst currentMRT = renderer.getMRT();\n\t\tconst currentAutoClear = renderer.autoClear;\n\n\t\trenderer.setMRT( null );\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = true;\n\n\t\tconst previousName = scene.name;\n\n\t\tscene.name = ( scene.name || 'Scene' ) + ' [ Reflector ]'; // TODO: Add bounce index\n\n\t\tif ( needsClear ) {\n\n\t\t\trenderer.clear();\n\n\t\t\tthis.hasOutput = false;\n\n\t\t} else {\n\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\tthis.hasOutput = true;\n\n\t\t}\n\n\t\tscene.name = previousName;\n\n\t\trenderer.setMRT( currentMRT );\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\t\trenderer.autoClear = currentAutoClear;\n\n\t\tmaterial.visible = true;\n\n\t\t_inReflector = false;\n\n\t\tthis.forceUpdate = false;\n\n\t}\n\n\t/**\n\t * The resolution scale.\n\t *\n\t * @deprecated\n\t * @type {number}\n\t * @default {1}\n\t */\n\tget resolution() {\n\n\t\twarnOnce( 'ReflectorNode: The \"resolution\" property has been renamed to \"resolutionScale\".' ); // @deprecated r180\n\n\t\treturn this.resolutionScale;\n\n\t}\n\n\tset resolution( value ) {\n\n\t\twarnOnce( 'ReflectorNode: The \"resolution\" property has been renamed to \"resolutionScale\".' ); // @deprecated r180\n\n\t\tthis.resolutionScale = value;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a reflector node.\n *\n * @tsl\n * @function\n * @param {Object} [parameters={}] - An object holding configuration parameters.\n * @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.\n * @param {number} [parameters.resolution=1] - The resolution scale.\n * @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.\n * @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.\n * @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.\n * @param {number} [parameters.samples] - Anti-Aliasing samples of the internal render-target.\n * @param {TextureNode} [parameters.defaultTexture] - The default texture node.\n * @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.\n * @returns {ReflectorNode}\n */\nconst reflector = ( parameters ) => new ReflectorNode( parameters );\n\nconst _camera = /*@__PURE__*/ new OrthographicCamera( -1, 1, 1, -1, 0, 1 );\n\n/**\n * The purpose of this special geometry is to fill the entire viewport with a single triangle.\n *\n * Reference: {@link https://github.com/mrdoob/three.js/pull/21358}\n *\n * @private\n * @augments BufferGeometry\n */\nclass QuadGeometry extends BufferGeometry {\n\n\t/**\n\t * Constructs a new quad geometry.\n\t *\n\t * @param {boolean} [flipY=false] - Whether the uv coordinates should be flipped along the vertical axis or not.\n\t */\n\tconstructor( flipY = false ) {\n\n\t\tsuper();\n\n\t\tconst uv = flipY === false ? [ 0, -1, 0, 1, 2, 1 ] : [ 0, 2, 0, 0, 2, 0 ];\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( [ -1, 3, 0, -1, -1, 0, 3, -1, 0 ], 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uv, 2 ) );\n\n\t}\n\n}\n\nconst _geometry = /*@__PURE__*/ new QuadGeometry();\n\n\n/**\n * This module is a helper for passes which need to render a full\n * screen effect which is quite common in context of post processing.\n *\n * The intended usage is to reuse a single quad mesh for rendering\n * subsequent passes by just reassigning the `material` reference.\n *\n * Note: This module can only be used with `WebGPURenderer`.\n *\n * @augments Mesh\n */\nclass QuadMesh extends Mesh {\n\n\t/**\n\t * Constructs a new quad mesh.\n\t *\n\t * @param {?Material} [material=null] - The material to render the quad mesh with.\n\t */\n\tconstructor( material = null ) {\n\n\t\tsuper( _geometry, material );\n\n\t\t/**\n\t\t * The camera to render the quad mesh with.\n\t\t *\n\t\t * @type {OrthographicCamera}\n\t\t * @readonly\n\t\t */\n\t\tthis.camera = _camera;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isQuadMesh = true;\n\n\t}\n\n\t/**\n\t * Async version of `render()`.\n\t *\n\t * @async\n\t * @deprecated\n\t * @param {Renderer} renderer - The renderer.\n\t * @return {Promise} A Promise that resolves when the render has been finished.\n\t */\n\tasync renderAsync( renderer ) {\n\n\t\twarnOnce( 'QuadMesh: \"renderAsync()\" has been deprecated. Use \"render()\" and \"await renderer.init();\" when creating the renderer.' ); // @deprecated r181\n\n\t\tawait renderer.init();\n\n\t\trenderer.render( this, _camera );\n\n\t}\n\n\t/**\n\t * Renders the quad mesh\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t */\n\trender( renderer ) {\n\n\t\trenderer.render( this, _camera );\n\n\t}\n\n}\n\nconst _size$1 = /*@__PURE__*/ new Vector2();\n\n/**\n * `RTTNode` takes another node and uses it with a `QuadMesh` to render into a texture (RTT).\n * This module is especially relevant in context of post processing where certain nodes require\n * texture input for their effects. With the helper function `convertToTexture()` which is based\n * on this module, the node system can automatically ensure texture input if required.\n *\n * @augments TextureNode\n */\nclass RTTNode extends TextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'RTTNode';\n\n\t}\n\n\t/**\n\t * Constructs a new RTT node.\n\t *\n\t * @param {Node} node - The node to render a texture with.\n\t * @param {?number} [width=null] - The width of the internal render target. If not width is applied, the render target is automatically resized.\n\t * @param {?number} [height=null] - The height of the internal render target.\n\t * @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.\n\t */\n\tconstructor( node, width = null, height = null, options = { type: HalfFloatType } ) {\n\n\t\tconst renderTarget = new RenderTarget( width, height, options );\n\n\t\tsuper( renderTarget.texture, uv$1() );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRTTNode = true;\n\n\t\t/**\n\t\t * The node to render a texture with.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.node = node;\n\n\t\t/**\n\t\t * The width of the internal render target.\n\t\t * If not width is applied, the render target is automatically resized.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.width = width;\n\n\t\t/**\n\t\t * The height of the internal render target.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.height = height;\n\n\t\t/**\n\t\t * The pixel ratio\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.pixelRatio = 1;\n\n\t\t/**\n\t\t * The render target\n\t\t *\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis.renderTarget = renderTarget;\n\n\t\t/**\n\t\t * Whether the texture requires an update or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.textureNeedsUpdate = true;\n\n\t\t/**\n\t\t * Whether the texture should automatically be updated or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoUpdate = true;\n\n\t\t/**\n\t\t * The node which is used with the quad mesh for RTT.\n\t\t *\n\t\t * @private\n\t\t * @type {Node}\n\t\t * @default null\n\t\t */\n\t\tthis._rttNode = null;\n\n\t\t/**\n\t\t * The internal quad mesh for RTT.\n\t\t *\n\t\t * @private\n\t\t * @type {QuadMesh}\n\t\t */\n\t\tthis._quadMesh = new QuadMesh( new NodeMaterial() );\n\n\t\t/**\n\t\t * The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node updates\n\t\t * the texture once per render in its {@link RTTNode#updateBefore} method.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'render'\n\t\t */\n\t\tthis.updateBeforeType = NodeUpdateType.RENDER;\n\n\t}\n\n\t/**\n\t * Whether the internal render target should automatically be resized or not.\n\t *\n\t * @type {boolean}\n\t * @readonly\n\t * @default true\n\t */\n\tget autoResize() {\n\n\t\treturn this.width === null;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tthis._rttNode = this.node.context( builder.getSharedContext() );\n\t\tthis._quadMesh.material.name = 'RTT';\n\t\tthis._quadMesh.material.needsUpdate = true;\n\n\t\treturn super.setup( builder );\n\n\t}\n\n\t/**\n\t * Sets the size of the internal render target\n\t *\n\t * @param {number} width - The width to set.\n\t * @param {number} height - The width to set.\n\t */\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tconst effectiveWidth = width * this.pixelRatio;\n\t\tconst effectiveHeight = height * this.pixelRatio;\n\n\t\tthis.renderTarget.setSize( effectiveWidth, effectiveHeight );\n\n\t\tthis.textureNeedsUpdate = true;\n\n\t}\n\n\t/**\n\t * Sets the pixel ratio. This will also resize the render target.\n\t *\n\t * @param {number} pixelRatio - The pixel ratio to set.\n\t */\n\tsetPixelRatio( pixelRatio ) {\n\n\t\tthis.pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this.width, this.height );\n\n\t}\n\n\tupdateBefore( { renderer } ) {\n\n\t\tif ( this.textureNeedsUpdate === false && this.autoUpdate === false ) return;\n\n\t\tthis.textureNeedsUpdate = false;\n\n\t\t//\n\n\t\tif ( this.autoResize === true ) {\n\n\t\t\tconst pixelRatio = renderer.getPixelRatio();\n\t\t\tconst size = renderer.getSize( _size$1 );\n\n\t\t\tconst effectiveWidth = Math.floor( size.width * pixelRatio );\n\t\t\tconst effectiveHeight = Math.floor( size.height * pixelRatio );\n\n\t\t\tif ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {\n\n\t\t\t\tthis.renderTarget.setSize( effectiveWidth, effectiveHeight );\n\n\t\t\t\tthis.textureNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet name = 'RTT';\n\n\t\tif ( this.node.name ) {\n\n\t\t\tname = this.node.name + ' [ ' + name + ' ]';\n\n\t\t}\n\n\n\t\tthis._quadMesh.material.fragmentNode = this._rttNode;\n\t\tthis._quadMesh.name = name;\n\n\t\t//\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\trenderer.setRenderTarget( this.renderTarget );\n\n\t\tthis._quadMesh.render( renderer );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\tclone() {\n\n\t\tconst newNode = new TextureNode( this.value, this.uvNode, this.levelNode );\n\t\tnewNode.sampler = this.sampler;\n\t\tnewNode.referenceNode = this;\n\n\t\treturn newNode;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a RTT node.\n *\n * @tsl\n * @function\n * @param {Node} node - The node to render a texture with.\n * @param {?number} [width=null] - The width of the internal render target. If not width is applied, the render target is automatically resized.\n * @param {?number} [height=null] - The height of the internal render target.\n * @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.\n * @returns {RTTNode}\n */\nconst rtt = ( node, ...params ) => new RTTNode( nodeObject( node ), ...params );\n\n/**\n * TSL function for converting nodes to textures nodes.\n *\n * @tsl\n * @function\n * @param {Node} node - The node to render a texture with.\n * @param {?number} [width=null] - The width of the internal render target. If not width is applied, the render target is automatically resized.\n * @param {?number} [height=null] - The height of the internal render target.\n * @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.\n * @returns {RTTNode}\n */\nconst convertToTexture = ( node, ...params ) => {\n\n\tif ( node.isSampleNode || node.isTextureNode ) return node;\n\tif ( node.isPassNode ) return node.getTextureNode();\n\n\treturn rtt( node, ...params );\n\n};\n\n/**\n * Computes a position in view space based on a fragment's screen position expressed as uv coordinates, the fragments\n * depth value and the camera's inverse projection matrix.\n *\n * @tsl\n * @function\n * @param {Node<vec2>} screenPosition - The fragment's screen position expressed as uv coordinates.\n * @param {Node<float>} depth - The fragment's depth value.\n * @param {Node<mat4>} projectionMatrixInverse - The camera's inverse projection matrix.\n * @return {Node<vec3>} The fragments position in view space.\n */\nconst getViewPosition = /*@__PURE__*/ Fn( ( [ screenPosition, depth, projectionMatrixInverse ], builder ) => {\n\n\tlet clipSpacePosition;\n\n\tif ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\tscreenPosition = vec2( screenPosition.x, screenPosition.y.oneMinus() ).mul( 2.0 ).sub( 1.0 );\n\t\tclipSpacePosition = vec4( vec3( screenPosition, depth ), 1.0 );\n\n\t} else {\n\n\t\tclipSpacePosition = vec4( vec3( screenPosition.x, screenPosition.y.oneMinus(), depth ).mul( 2.0 ).sub( 1.0 ), 1.0 );\n\n\t}\n\n\tconst viewSpacePosition = vec4( projectionMatrixInverse.mul( clipSpacePosition ) );\n\n\treturn viewSpacePosition.xyz.div( viewSpacePosition.w );\n\n} );\n\n/**\n * Computes a screen position expressed as uv coordinates based on a fragment's position in view space\n * and the camera's projection matrix\n *\n * @tsl\n * @function\n * @param {Node<vec3>} viewPosition - The fragments position in view space.\n * @param {Node<mat4>} projectionMatrix - The camera's projection matrix.\n * @return {Node<vec2>} The fragment's screen position expressed as uv coordinates.\n */\nconst getScreenPosition = /*@__PURE__*/ Fn( ( [ viewPosition, projectionMatrix ] ) => {\n\n\tconst sampleClipPos = projectionMatrix.mul( vec4( viewPosition, 1.0 ) );\n\tconst sampleUv = sampleClipPos.xy.div( sampleClipPos.w ).mul( 0.5 ).add( 0.5 ).toVar();\n\treturn vec2( sampleUv.x, sampleUv.y.oneMinus() );\n\n} );\n\n/**\n * Computes a normal vector based on depth data. Can be used as a fallback when no normal render\n * target is available or if flat surface normals are required.\n *\n * @tsl\n * @function\n * @param {Node<vec2>} uv - The texture coordinate.\n * @param {DepthTexture} depthTexture - The depth texture.\n * @param {Node<mat4>} projectionMatrixInverse - The camera's inverse projection matrix.\n * @return {Node<vec3>} The computed normal vector.\n */\nconst getNormalFromDepth = /*@__PURE__*/ Fn( ( [ uv, depthTexture, projectionMatrixInverse ] ) => {\n\n\tconst size = textureSize( textureLoad( depthTexture ) );\n\tconst p = ivec2( uv.mul( size ) ).toVar();\n\n\tconst c0 = textureLoad( depthTexture, p ).toVar();\n\n\tconst l2 = textureLoad( depthTexture, p.sub( ivec2( 2, 0 ) ) ).toVar();\n\tconst l1 = textureLoad( depthTexture, p.sub( ivec2( 1, 0 ) ) ).toVar();\n\tconst r1 = textureLoad( depthTexture, p.add( ivec2( 1, 0 ) ) ).toVar();\n\tconst r2 = textureLoad( depthTexture, p.add( ivec2( 2, 0 ) ) ).toVar();\n\tconst b2 = textureLoad( depthTexture, p.add( ivec2( 0, 2 ) ) ).toVar();\n\tconst b1 = textureLoad( depthTexture, p.add( ivec2( 0, 1 ) ) ).toVar();\n\tconst t1 = textureLoad( depthTexture, p.sub( ivec2( 0, 1 ) ) ).toVar();\n\tconst t2 = textureLoad( depthTexture, p.sub( ivec2( 0, 2 ) ) ).toVar();\n\n\tconst dl = abs( sub( float( 2 ).mul( l1 ).sub( l2 ), c0 ) ).toVar();\n\tconst dr = abs( sub( float( 2 ).mul( r1 ).sub( r2 ), c0 ) ).toVar();\n\tconst db = abs( sub( float( 2 ).mul( b1 ).sub( b2 ), c0 ) ).toVar();\n\tconst dt = abs( sub( float( 2 ).mul( t1 ).sub( t2 ), c0 ) ).toVar();\n\n\tconst ce = getViewPosition( uv, c0, projectionMatrixInverse ).toVar();\n\n\tconst dpdx = dl.lessThan( dr ).select( ce.sub( getViewPosition( uv.sub( vec2( float( 1 ).div( size.x ), 0 ) ), l1, projectionMatrixInverse ) ), ce.negate().add( getViewPosition( uv.add( vec2( float( 1 ).div( size.x ), 0 ) ), r1, projectionMatrixInverse ) ) );\n\tconst dpdy = db.lessThan( dt ).select( ce.sub( getViewPosition( uv.add( vec2( 0, float( 1 ).div( size.y ) ) ), b1, projectionMatrixInverse ) ), ce.negate().add( getViewPosition( uv.sub( vec2( 0, float( 1 ).div( size.y ) ) ), t1, projectionMatrixInverse ) ) );\n\n\treturn normalize( cross( dpdx, dpdy ) );\n\n} );\n\n/**\n * Interleaved Gradient Noise (IGN) from Jimenez 2014.\n *\n * IGN has \"low discrepancy\" resulting in evenly distributed samples. It's superior compared to\n * default white noise, blue noise or Bayer.\n *\n * References:\n * - {@link https://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare/}\n * - {@link https://blog.demofox.org/2022/01/01/interleaved-gradient-noise-a-different-kind-of-low-discrepancy-sequence/}\n *\n * @tsl\n * @function\n * @param {Node<vec2>} position - The input position, usually screen coordinates.\n * @return {Node<float>} The noise value.\n */\nconst interleavedGradientNoise = Fn( ( [ position ] ) => {\n\n\treturn fract( float( 52.9829189 ).mul( fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) ) );\n\n} ).setLayout( {\n\tname: 'interleavedGradientNoise',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'position', type: 'vec2' }\n\t]\n} );\n\n/**\n * Vogel disk sampling for uniform circular distribution.\n *\n * This function generates sample points distributed uniformly on a disk using the golden angle,\n * resulting in an efficient low-discrepancy sequence for sampling. The rotation parameter (phi)\n * allows randomizing the pattern per-pixel when combined with IGN.\n *\n * @tsl\n * @function\n * @param {Node<int>} sampleIndex - The index of the current sample (0-based).\n * @param {Node<int>} samplesCount - The total number of samples.\n * @param {Node<float>} phi - Rotation angle in radians (typically from IGN * 2π).\n * @return {Node<vec2>} A 2D point on the unit disk.\n */\nconst vogelDiskSample = Fn( ( [ sampleIndex, samplesCount, phi ] ) => {\n\n\tconst goldenAngle = float( 2.399963229728653 ); // 2π * (2 - φ) where φ is golden ratio\n\tconst r = sqrt( float( sampleIndex ).add( 0.5 ).div( float( samplesCount ) ) );\n\tconst theta = float( sampleIndex ).mul( goldenAngle ).add( phi );\n\treturn vec2( cos( theta ), sin( theta ) ).mul( r );\n\n} ).setLayout( {\n\tname: 'vogelDiskSample',\n\ttype: 'vec2',\n\tinputs: [\n\t\t{ name: 'sampleIndex', type: 'int' },\n\t\t{ name: 'samplesCount', type: 'int' },\n\t\t{ name: 'phi', type: 'float' }\n\t]\n} );\n\n/**\n * Class representing a node that samples a value using a provided callback function.\n *\n * @extends Node\n */\nclass SampleNode extends Node {\n\n\t/**\n\t * Returns the type of the node.\n\t *\n\t * @type {string}\n\t * @readonly\n\t * @static\n\t */\n\tstatic get type() {\n\n\t\treturn 'SampleNode';\n\n\t}\n\n\t/**\n\t * Creates an instance of SampleNode.\n\t *\n\t * @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.\n\t * @param {?Node<vec2>} [uvNode=null] - The UV node to be used in the texture sampling.\n\t */\n\tconstructor( callback, uvNode = null ) {\n\n\t\tsuper();\n\n\t\tthis.callback = callback;\n\n\t\t/**\n\t\t * Represents the texture coordinates.\n\t\t *\n\t\t * @type {?Node<vec2|vec3>}\n\t\t * @default null\n\t\t */\n\t\tthis.uvNode = uvNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSampleNode = true;\n\n\t}\n\n\t/**\n\t * Sets up the node by sampling with the default UV accessor.\n\t *\n\t * @returns {Node} The result of the callback function when called with the UV node.\n\t */\n\tsetup() {\n\n\t\treturn this.sample( uv$1() );\n\n\t}\n\n\t/**\n\t * Calls the callback function with the provided UV node.\n\t *\n\t * @param {Node<vec2>} uv - The UV node or value to be passed to the callback.\n\t * @returns {Node} The result of the callback function.\n\t */\n\tsample( uv ) {\n\n\t\treturn this.callback( uv );\n\n\t}\n\n}\n\n/**\n * Helper function to create a SampleNode wrapped as a node object.\n *\n * @function\n * @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.\n * @param {?Node<vec2>} [uv=null] - The UV node to be used in the texture sampling.\n * @returns {SampleNode} The created SampleNode instance wrapped as a node object.\n */\nconst sample = ( callback, uv = null ) => new SampleNode( callback, nodeObject( uv ) );\n\n/**\n * EventNode is a node that executes a callback during specific update phases.\n *\n * @augments Node\n */\nclass EventNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'EventNode';\n\n\t}\n\n\t/**\n\t * Creates an EventNode.\n\t *\n\t * @param {string} eventType - The type of event\n\t * @param {Function} callback - The callback to execute on update.\n\t */\n\tconstructor( eventType, callback ) {\n\n\t\tsuper( 'void' );\n\n\t\tthis.eventType = eventType;\n\t\tthis.callback = callback;\n\n\t\tif ( eventType === EventNode.OBJECT ) {\n\n\t\t\tthis.updateType = NodeUpdateType.OBJECT;\n\n\t\t} else if ( eventType === EventNode.MATERIAL ) {\n\n\t\t\tthis.updateType = NodeUpdateType.RENDER;\n\n\t\t} else if ( eventType === EventNode.FRAME ) {\n\n\t\t\tthis.updateType = NodeUpdateType.FRAME;\n\n\t\t} else if ( eventType === EventNode.BEFORE_OBJECT ) {\n\n\t\t\tthis.updateBeforeType = NodeUpdateType.OBJECT;\n\n\t\t} else if ( eventType === EventNode.BEFORE_MATERIAL ) {\n\n\t\t\tthis.updateBeforeType = NodeUpdateType.RENDER;\n\n\t\t} else if ( eventType === EventNode.BEFORE_FRAME ) {\n\n\t\t\tthis.updateBeforeType = NodeUpdateType.FRAME;\n\n\t\t}\n\n\t}\n\n\tupdate( frame ) {\n\n\t\tthis.callback( frame );\n\n\t}\n\n\tupdateBefore( frame ) {\n\n\t\tthis.callback( frame );\n\n\t}\n\n}\n\nEventNode.OBJECT = 'object';\nEventNode.MATERIAL = 'material';\nEventNode.FRAME = 'frame';\nEventNode.BEFORE_OBJECT = 'beforeObject';\nEventNode.BEFORE_MATERIAL = 'beforeMaterial';\nEventNode.BEFORE_FRAME = 'beforeFrame';\n\n/**\n * Helper to create an EventNode and add it to the stack.\n *\n * @param {string} type - The event type.\n * @param {Function} callback - The callback function.\n * @returns {EventNode}\n */\nconst createEvent = ( type, callback ) => new EventNode( type, callback ).toStack();\n\n/**\n * Creates an event that triggers a function every time an object (Mesh|Sprite) is rendered.\n *\n * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.\n *\n * @param {Function} callback - The callback function.\n * @returns {EventNode}\n */\nconst OnObjectUpdate = ( callback ) => createEvent( EventNode.OBJECT, callback );\n\n/**\n * Creates an event that triggers a function when the first object that uses the material is rendered.\n *\n * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.\n *\n * @param {Function} callback - The callback function.\n * @returns {EventNode}\n */\nconst OnMaterialUpdate = ( callback ) => createEvent( EventNode.MATERIAL, callback );\n\n/**\n * Creates an event that triggers a function every frame.\n *\n * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.\n *\n * @param {Function} callback - The callback function.\n * @returns {EventNode}\n */\nconst OnFrameUpdate = ( callback ) => createEvent( EventNode.FRAME, callback );\n\n/**\n * Creates an event that triggers a function before an object (Mesh|Sprite) is updated.\n *\n * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.\n *\n * @param {Function} callback - The callback function.\n * @returns {EventNode}\n */\nconst OnBeforeObjectUpdate = ( callback ) => createEvent( EventNode.BEFORE_OBJECT, callback );\n\n/**\n * Creates an event that triggers a function before the material is updated.\n *\n * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.\n *\n * @param {Function} callback - The callback function.\n * @returns {EventNode}\n */\nconst OnBeforeMaterialUpdate = ( callback ) => createEvent( EventNode.BEFORE_MATERIAL, callback );\n\n/**\n * Creates an event that triggers a function before every frame.\n *\n * The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.\n *\n * @param {Function} callback - The callback function.\n * @returns {EventNode}\n */\nconst OnBeforeFrameUpdate = ( callback ) => createEvent( EventNode.BEFORE_FRAME, callback );\n\n/**\n * This special type of instanced buffer attribute is intended for compute shaders.\n * In earlier three.js versions it was only possible to update attribute data\n * on the CPU via JavaScript and then upload the data to the GPU. With the\n * new material system and renderer it is now possible to use compute shaders\n * to compute the data for an attribute more efficiently on the GPU.\n *\n * The idea is to create an instance of this class and provide it as an input\n * to {@link StorageBufferNode}.\n *\n * Note: This type of buffer attribute can only be used with `WebGPURenderer`.\n *\n * @augments InstancedBufferAttribute\n */\nclass StorageInstancedBufferAttribute extends InstancedBufferAttribute {\n\n\t/**\n\t * Constructs a new storage instanced buffer attribute.\n\t *\n\t * @param {number|TypedArray} count - The item count. It is also valid to pass a typed array as an argument.\n\t * The subsequent parameters are then obsolete.\n\t * @param {number} itemSize - The item size.\n\t * @param {TypedArray.constructor} [typeClass=Float32Array] - A typed array constructor.\n\t */\n\tconstructor( count, itemSize, typeClass = Float32Array ) {\n\n\t\tconst array = ArrayBuffer.isView( count ) ? count : new typeClass( count * itemSize );\n\n\t\tsuper( array, itemSize );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStorageInstancedBufferAttribute = true;\n\n\t}\n\n}\n\n/**\n * This special type of buffer attribute is intended for compute shaders.\n * In earlier three.js versions it was only possible to update attribute data\n * on the CPU via JavaScript and then upload the data to the GPU. With the\n * new material system and renderer it is now possible to use compute shaders\n * to compute the data for an attribute more efficiently on the GPU.\n *\n * The idea is to create an instance of this class and provide it as an input\n * to {@link StorageBufferNode}.\n *\n * Note: This type of buffer attribute can only be used with `WebGPURenderer`.\n *\n * @augments BufferAttribute\n */\nclass StorageBufferAttribute extends BufferAttribute {\n\n\t/**\n\t * Constructs a new storage buffer attribute.\n\t *\n\t * @param {number|TypedArray} count - The item count. It is also valid to pass a typed array as an argument.\n\t * The subsequent parameters are then obsolete.\n\t * @param {number} itemSize - The item size.\n\t * @param {TypedArray.constructor} [typeClass=Float32Array] - A typed array constructor.\n\t */\n\tconstructor( count, itemSize, typeClass = Float32Array ) {\n\n\t\tconst array = ArrayBuffer.isView( count ) ? count : new typeClass( count * itemSize );\n\n\t\tsuper( array, itemSize );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStorageBufferAttribute = true;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a storage buffer node with a configured `StorageBufferAttribute`.\n *\n * @tsl\n * @function\n * @param {number|TypedArray} count - The data count. It is also valid to pass a typed array as an argument.\n * @param {string|Struct} [type='float'] - The data type.\n * @returns {StorageBufferNode}\n */\nconst attributeArray = ( count, type = 'float' ) => {\n\n\tlet itemSize, typedArray;\n\n\tif ( type.isStruct === true ) {\n\n\t\titemSize = type.layout.getLength();\n\t\ttypedArray = getTypedArrayFromType( 'float' );\n\n\t} else {\n\n\t\titemSize = getLengthFromType( type );\n\t\ttypedArray = getTypedArrayFromType( type );\n\n\t}\n\n\tconst buffer = new StorageBufferAttribute( count, itemSize, typedArray );\n\tconst node = storage( buffer, type, count );\n\n\treturn node;\n\n};\n\n/**\n * TSL function for creating a storage buffer node with a configured `StorageInstancedBufferAttribute`.\n *\n * @tsl\n * @function\n * @param {number|TypedArray} count - The data count. It is also valid to pass a typed array as an argument.\n * @param {string|Struct} [type='float'] - The data type.\n * @returns {StorageBufferNode}\n */\nconst instancedArray = ( count, type = 'float' ) => {\n\n\tlet itemSize, typedArray;\n\n\tif ( type.isStruct === true ) {\n\n\t\titemSize = type.layout.getLength();\n\t\ttypedArray = getTypedArrayFromType( 'float' );\n\n\t} else {\n\n\t\titemSize = getLengthFromType( type );\n\t\ttypedArray = getTypedArrayFromType( type );\n\n\t}\n\n\tconst buffer = new StorageInstancedBufferAttribute( count, itemSize, typedArray );\n\tconst node = storage( buffer, type, buffer.count );\n\n\treturn node;\n\n};\n\n/**\n * A node for representing the uv coordinates of points.\n *\n * Can only be used with a WebGL backend. In WebGPU, point\n * primitives always have the size of one pixel and can thus\n * can't be used as sprite-like objects that display textures.\n *\n * @augments Node\n */\nclass PointUVNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'PointUVNode';\n\n\t}\n\n\t/**\n\t * Constructs a new point uv node.\n\t */\n\tconstructor() {\n\n\t\tsuper( 'vec2' );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPointUVNode = true;\n\n\t}\n\n\tgenerate( /*builder*/ ) {\n\n\t\treturn 'vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )';\n\n\t}\n\n}\n\n/**\n * TSL object that represents the uv coordinates of points.\n *\n * @tsl\n * @type {PointUVNode}\n */\nconst pointUV = /*@__PURE__*/ nodeImmutable( PointUVNode );\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\n\n/**\n * TSL object that represents the scene's background blurriness.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst backgroundBlurriness = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundBlurriness );\n\n/**\n * TSL object that represents the scene's background intensity.\n *\n * @tsl\n * @type {Node<float>}\n */\nconst backgroundIntensity = /*@__PURE__*/ uniform( 1 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundIntensity );\n\n/**\n * TSL object that represents the scene's background rotation.\n *\n * @tsl\n * @type {Node<mat4>}\n */\nconst backgroundRotation = /*@__PURE__*/ uniform( new Matrix4() ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => {\n\n\tconst background = scene.background;\n\n\tif ( background !== null && background.isTexture && background.mapping !== UVMapping ) {\n\n\t\t// note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()\n\t\t_m1.makeRotationFromEuler( scene.backgroundRotation ).transpose();\n\n\t} else {\n\n\t\t_m1.identity();\n\n\t}\n\n\treturn _m1;\n\n} );\n\n/**\n * This special version of a texture node can be used to\n * write data into a storage texture with a compute shader.\n *\n * ```js\n * const storageTexture = new THREE.StorageTexture( width, height );\n *\n * const computeTexture = Fn( ( { storageTexture } ) => {\n *\n * \tconst posX = instanceIndex.mod( width );\n * \tconst posY = instanceIndex.div( width );\n * \tconst indexUV = uvec2( posX, posY );\n *\n * \t// generate RGB values\n *\n * \tconst r = 1;\n * \tconst g = 1;\n * \tconst b = 1;\n *\n * \ttextureStore( storageTexture, indexUV, vec4( r, g, b, 1 ) ).toWriteOnly();\n *\n * } );\n *\n * const computeNode = computeTexture( { storageTexture } ).compute( width * height );\n * renderer.computeAsync( computeNode );\n * ```\n *\n * This node can only be used with a WebGPU backend.\n *\n * @augments TextureNode\n */\nclass StorageTextureNode extends TextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'StorageTextureNode';\n\n\t}\n\n\t/**\n\t * Constructs a new storage texture node.\n\t *\n\t * @param {StorageTexture} value - The storage texture.\n\t * @param {Node<vec2|vec3>} uvNode - The uv node.\n\t * @param {?Node} [storeNode=null] - The value node that should be stored in the texture.\n\t */\n\tconstructor( value, uvNode, storeNode = null ) {\n\n\t\tsuper( value, uvNode );\n\n\t\t/**\n\t\t * The value node that should be stored in the texture.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.storeNode = storeNode;\n\n\t\t/**\n\t\t * The mip level to write to for storage textures.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.mipLevel = 0;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStorageTextureNode = true;\n\n\t\t/**\n\t\t * The access type of the texture node.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'writeOnly'\n\t\t */\n\t\tthis.access = NodeAccess.WRITE_ONLY;\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to return a fixed value `'storageTexture'`.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( /*builder*/ ) {\n\n\t\treturn 'storageTexture';\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tsuper.setup( builder );\n\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tproperties.storeNode = this.storeNode;\n\n\t\treturn properties;\n\n\t}\n\n\t/**\n\t * Defines the node access.\n\t *\n\t * @param {string} value - The node access.\n\t * @return {StorageTextureNode} A reference to this node.\n\t */\n\tsetAccess( value ) {\n\n\t\tthis.access = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the mip level to write to.\n\t *\n\t * @param {number} level - The mip level.\n\t * @return {StorageTextureNode} A reference to this node.\n\t */\n\tsetMipLevel( level ) {\n\n\t\tthis.mipLevel = level;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Generates the code snippet of the storage node. If no `storeNode`\n\t * is defined, the texture node is generated as normal texture.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} output - The current output.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerate( builder, output ) {\n\n\t\tif ( this.storeNode !== null ) {\n\n\t\t\tthis.generateStore( builder );\n\t\t\treturn '';\n\n\t\t}\n\n\t\treturn super.generate( builder, output );\n\n\t}\n\n\t/**\n\t * Generates the snippet for the storage texture.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} textureProperty - The texture property.\n\t * @param {string} uvSnippet - The uv snippet.\n\t * @param {?string} levelSnippet - The level snippet.\n\t * @param {?string} biasSnippet - The bias snippet.\n\t * @param {?string} depthSnippet - The depth snippet.\n\t * @param {?string} compareSnippet - The compare snippet.\n\t * @param {?Array<string>} gradSnippet - The grad snippet.\n\t * @param {?string} offsetSnippet - The offset snippet.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet ) {\n\n\t\tconst texture = this.value;\n\n\t\treturn builder.generateStorageTextureLoad( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );\n\n\t}\n\n\t/**\n\t * Convenience method for configuring a read/write node access.\n\t *\n\t * @return {StorageTextureNode} A reference to this node.\n\t */\n\ttoReadWrite() {\n\n\t\treturn this.setAccess( NodeAccess.READ_WRITE );\n\n\t}\n\n\t/**\n\t * Convenience method for configuring a read-only node access.\n\t *\n\t * @return {StorageTextureNode} A reference to this node.\n\t */\n\ttoReadOnly() {\n\n\t\treturn this.setAccess( NodeAccess.READ_ONLY );\n\n\t}\n\n\t/**\n\t * Convenience method for configuring a write-only node access.\n\t *\n\t * @return {StorageTextureNode} A reference to this node.\n\t */\n\ttoWriteOnly() {\n\n\t\treturn this.setAccess( NodeAccess.WRITE_ONLY );\n\n\t}\n\n\t/**\n\t * Generates the code snippet of the storage texture node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tgenerateStore( builder ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\n\t\tconst { uvNode, storeNode, depthNode } = properties;\n\n\t\tconst textureProperty = super.generate( builder, 'property' );\n\t\tconst uvSnippet = uvNode.build( builder, this.value.is3DTexture === true ? 'uvec3' : 'uvec2' );\n\t\tconst storeSnippet = storeNode.build( builder, 'vec4' );\n\t\tconst depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;\n\n\t\tconst snippet = builder.generateTextureStore( this.value, textureProperty, uvSnippet, depthSnippet, storeSnippet );\n\n\t\tbuilder.addLineFlowCode( snippet, this );\n\n\t}\n\n\tclone() {\n\n\t\tconst newNode = super.clone();\n\t\tnewNode.storeNode = this.storeNode;\n\t\tnewNode.mipLevel = this.mipLevel;\n\t\tnewNode.access = this.access;\n\t\treturn newNode;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a storage texture node.\n *\n * @tsl\n * @function\n * @param {StorageTexture} value - The storage texture.\n * @param {?Node<vec2|vec3>} uvNode - The uv node.\n * @param {?Node} [storeNode=null] - The value node that should be stored in the texture.\n * @returns {StorageTextureNode}\n */\nconst storageTexture = /*@__PURE__*/ nodeProxy( StorageTextureNode ).setParameterLength( 1, 3 );\n\n\n/**\n * TODO: Explain difference to `storageTexture()`.\n *\n * @tsl\n * @function\n * @param {StorageTexture} value - The storage texture.\n * @param {Node<vec2|vec3>} uvNode - The uv node.\n * @param {?Node} [storeNode=null] - The value node that should be stored in the texture.\n * @returns {StorageTextureNode}\n */\nconst textureStore = ( value, uvNode, storeNode ) => {\n\n\tlet node;\n\n\tif ( value.isStorageTextureNode === true ) {\n\n\t\t// Derive new storage texture node from existing one\n\t\tnode = value.clone();\n\t\tnode.uvNode = uvNode;\n\t\tnode.storeNode = storeNode;\n\n\t} else {\n\n\t\tnode = storageTexture( value, uvNode, storeNode );\n\n\t}\n\n\tif ( storeNode !== null ) node.toStack();\n\n\treturn node;\n\n};\n\nconst normal = Fn( ( { texture, uv } ) => {\n\n\tconst epsilon = 0.0001;\n\n\tconst ret = vec3().toVar();\n\n\tIf( uv.x.lessThan( epsilon ), () => {\n\n\t\tret.assign( vec3( 1, 0, 0 ) );\n\n\t} ).ElseIf( uv.y.lessThan( epsilon ), () => {\n\n\t\tret.assign( vec3( 0, 1, 0 ) );\n\n\t} ).ElseIf( uv.z.lessThan( epsilon ), () => {\n\n\t\tret.assign( vec3( 0, 0, 1 ) );\n\n\t} ).ElseIf( uv.x.greaterThan( 1 - epsilon ), () => {\n\n\t\tret.assign( vec3( -1, 0, 0 ) );\n\n\t} ).ElseIf( uv.y.greaterThan( 1 - epsilon ), () => {\n\n\t\tret.assign( vec3( 0, -1, 0 ) );\n\n\t} ).ElseIf( uv.z.greaterThan( 1 - epsilon ), () => {\n\n\t\tret.assign( vec3( 0, 0, -1 ) );\n\n\t} ).Else( () => {\n\n\t\tconst step = 0.01;\n\n\t\tconst x = texture.sample( uv.add( vec3( - step, 0.0, 0.0 ) ) ).r.sub( texture.sample( uv.add( vec3( step, 0.0, 0.0 ) ) ).r );\n\t\tconst y = texture.sample( uv.add( vec3( 0.0, - step, 0.0 ) ) ).r.sub( texture.sample( uv.add( vec3( 0.0, step, 0.0 ) ) ).r );\n\t\tconst z = texture.sample( uv.add( vec3( 0.0, 0.0, - step ) ) ).r.sub( texture.sample( uv.add( vec3( 0.0, 0.0, step ) ) ).r );\n\n\t\tret.assign( vec3( x, y, z ) );\n\n\t} );\n\n\treturn ret.normalize();\n\n} );\n\n/**\n * This type of uniform node represents a 3D texture.\n *\n * @augments TextureNode\n */\nclass Texture3DNode extends TextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'Texture3DNode';\n\n\t}\n\n\t/**\n\t * Constructs a new 3D texture node.\n\t *\n\t * @param {Data3DTexture} value - The 3D texture.\n\t * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.\n\t * @param {?Node<int>} [levelNode=null] - The level node.\n\t */\n\tconstructor( value, uvNode = null, levelNode = null ) {\n\n\t\tsuper( value, uvNode, levelNode );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isTexture3DNode = true;\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to return a fixed value `'texture3D'`.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( /*builder*/ ) {\n\n\t\treturn 'texture3D';\n\n\t}\n\n\t/**\n\t * Returns a default uv node which is in context of 3D textures a three-dimensional\n\t * uv node.\n\t *\n\t * @return {Node<vec3>} The default uv node.\n\t */\n\tgetDefaultUV() {\n\n\t\treturn vec3( 0.5, 0.5, 0.5 );\n\n\t}\n\n\t/**\n\t * Overwritten with an empty implementation since the `updateMatrix` flag is ignored\n\t * for 3D textures. The uv transformation matrix is not applied to 3D textures.\n\t *\n\t * @param {boolean} value - The update toggle.\n\t */\n\tsetUpdateMatrix( /*value*/ ) { } // Ignore .updateMatrix for 3d TextureNode\n\n\t/**\n\t * Generates the uv code snippet.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node} uvNode - The uv node to generate code for.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerateUV( builder, uvNode ) {\n\n\t\treturn uvNode.build( builder, this.sampler === true ? 'vec3' : 'ivec3' );\n\n\t}\n\n\t/**\n\t * Generates the offset code snippet.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {Node} offsetNode - The offset node to generate code for.\n\t * @return {string} The generated code snippet.\n\t */\n\tgenerateOffset( builder, offsetNode ) {\n\n\t\treturn offsetNode.build( builder, 'ivec3' );\n\n\t}\n\n\t/**\n\t * Computes the normal for the given uv. These texture coordiantes represent a\n\t * position inside the 3D texture. Unlike geometric normals, this normal\n\t * represents a slope or gradient of scalar data inside the 3D texture.\n\t *\n\t * @param {Node<vec3>} uvNode - The uv node that defines a position in the 3D texture.\n\t * @return {Node<vec3>} The normal representing the slope/gradient in the data.\n\t */\n\tnormal( uvNode ) {\n\n\t\treturn normal( { texture: this, uv: uvNode } );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a 3D texture node.\n *\n * @tsl\n * @function\n * @param {Data3DTexture} value - The 3D texture.\n * @param {?Node<vec3>} [uvNode=null] - The uv node.\n * @param {?Node<int>} [levelNode=null] - The level node.\n * @returns {Texture3DNode}\n */\nconst texture3D = /*@__PURE__*/ nodeProxy( Texture3DNode ).setParameterLength( 1, 3 );\n\n/**\n * TSL function for creating a texture node that fetches/loads texels without interpolation.\n *\n * @tsl\n * @function\n * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.\n * @param {?Node<vec3>} [uvNode=null] - The uv node.\n * @param {?Node<int>} [levelNode=null] - The level node.\n * @param {?Node<float>} [biasNode=null] - The bias node.\n * @returns {TextureNode}\n */\nconst texture3DLoad = ( ...params ) => texture3D( ...params ).setSampler( false );\n\n/**\n * TSL function for creating a texture node that fetches/loads texels without interpolation.\n *\n * @tsl\n * @function\n * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.\n * @param {?Node<vec3>} [uvNode=null] - The uv node.\n * @param {?Node<int>} [levelNode=null] - The level node.\n * @returns {TextureNode}\n */\nconst texture3DLevel = ( value, uvNode, levelNode ) => texture3D( value, uvNode ).level( levelNode );\n\n/**\n * A special type of reference node that allows to link values in\n * `userData` fields to node objects.\n * ```js\n * sprite.userData.rotation = 1; // stores individual rotation per sprite\n *\n * const material = new THREE.SpriteNodeMaterial();\n * material.rotationNode = userData( 'rotation', 'float' );\n * ```\n * Since `UserDataNode` is extended from {@link ReferenceNode}, the node value\n * will automatically be updated when the `rotation` user data field changes.\n *\n * @augments ReferenceNode\n */\nclass UserDataNode extends ReferenceNode {\n\n\tstatic get type() {\n\n\t\treturn 'UserDataNode';\n\n\t}\n\n\t/**\n\t * Constructs a new user data node.\n\t *\n\t * @param {string} property - The property name that should be referenced by the node.\n\t * @param {string} inputType - The node data type of the reference.\n\t * @param {?Object} [userData=null] - A reference to the `userData` object. If not provided, the `userData` property of the 3D object that uses the node material is evaluated.\n\t */\n\tconstructor( property, inputType, userData = null ) {\n\n\t\tsuper( property, inputType, userData );\n\n\t\t/**\n\t\t * A reference to the `userData` object. If not provided, the `userData`\n\t\t * property of the 3D object that uses the node material is evaluated.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.userData = userData;\n\n\t}\n\n\t/**\n\t * Overwritten to make sure {@link ReferenceNode#reference} points to the correct\n\t * `userData` field.\n\t *\n\t * @param {(NodeFrame|NodeBuilder)} state - The current state to evaluate.\n\t * @return {Object} A reference to the `userData` field.\n\t */\n\tupdateReference( state ) {\n\n\t\tthis.reference = this.userData !== null ? this.userData : state.object.userData;\n\n\t\treturn this.reference;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a user data node.\n *\n * @tsl\n * @function\n * @param {string} name - The property name that should be referenced by the node.\n * @param {string} inputType - The node data type of the reference.\n * @param {?Object} userData - A reference to the `userData` object. If not provided, the `userData` property of the 3D object that uses the node material is evaluated.\n * @returns {UserDataNode}\n */\nconst userData = ( name, inputType, userData ) => new UserDataNode( name, inputType, userData );\n\nconst _objectData = new WeakMap();\n\n/**\n * A node for representing motion or velocity vectors. Foundation\n * for advanced post processing effects like motion blur or TRAA.\n *\n * The node keeps track of the model, view and projection matrices\n * of the previous frame and uses them to compute offsets in NDC space.\n * These offsets represent the final velocity.\n *\n * @augments TempNode\n */\nclass VelocityNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'VelocityNode';\n\n\t}\n\n\t/**\n\t * Constructs a new vertex color node.\n\t */\n\tconstructor() {\n\n\t\tsuper( 'vec2' );\n\n\t\t/**\n\t\t * The current projection matrix.\n\t\t *\n\t\t * @type {?Matrix4}\n\t\t * @default null\n\t\t */\n\t\tthis.projectionMatrix = null;\n\n\t\t/**\n\t\t * Overwritten since velocity nodes are updated per object.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'object'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.OBJECT;\n\n\t\t/**\n\t\t * Overwritten since velocity nodes save data after the update.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'object'\n\t\t */\n\t\tthis.updateAfterType = NodeUpdateType.OBJECT;\n\n\t\t/**\n\t\t * Uniform node representing the previous model matrix in world space.\n\t\t *\n\t\t * @type {UniformNode<mat4>}\n\t\t * @default null\n\t\t */\n\t\tthis.previousModelWorldMatrix = uniform( new Matrix4() );\n\n\t\t/**\n\t\t * Uniform node representing the previous projection matrix.\n\t\t *\n\t\t * @type {UniformNode<mat4>}\n\t\t * @default null\n\t\t */\n\t\tthis.previousProjectionMatrix = uniform( new Matrix4() ).setGroup( renderGroup );\n\n\t\t/**\n\t\t * Uniform node representing the previous view matrix.\n\t\t *\n\t\t * @type {UniformNode<mat4>}\n\t\t * @default null\n\t\t */\n\t\tthis.previousCameraViewMatrix = uniform( new Matrix4() );\n\n\t}\n\n\t/**\n\t * Sets the given projection matrix.\n\t *\n\t * @param {Matrix4} projectionMatrix - The projection matrix to set.\n\t */\n\tsetProjectionMatrix( projectionMatrix ) {\n\n\t\tthis.projectionMatrix = projectionMatrix;\n\n\t}\n\n\t/**\n\t * Updates velocity specific uniforms.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( { frameId, camera, object } ) {\n\n\t\tconst previousModelMatrix = getPreviousMatrix( object );\n\n\t\tthis.previousModelWorldMatrix.value.copy( previousModelMatrix );\n\n\t\t//\n\n\t\tconst cameraData = getData( camera );\n\n\t\tif ( cameraData.frameId !== frameId ) {\n\n\t\t\tcameraData.frameId = frameId;\n\n\t\t\tif ( cameraData.previousProjectionMatrix === undefined ) {\n\n\t\t\t\tcameraData.previousProjectionMatrix = new Matrix4();\n\t\t\t\tcameraData.previousCameraViewMatrix = new Matrix4();\n\n\t\t\t\tcameraData.currentProjectionMatrix = new Matrix4();\n\t\t\t\tcameraData.currentCameraViewMatrix = new Matrix4();\n\n\t\t\t\tcameraData.previousProjectionMatrix.copy( this.projectionMatrix || camera.projectionMatrix );\n\t\t\t\tcameraData.previousCameraViewMatrix.copy( camera.matrixWorldInverse );\n\n\t\t\t} else {\n\n\t\t\t\tcameraData.previousProjectionMatrix.copy( cameraData.currentProjectionMatrix );\n\t\t\t\tcameraData.previousCameraViewMatrix.copy( cameraData.currentCameraViewMatrix );\n\n\t\t\t}\n\n\t\t\tcameraData.currentProjectionMatrix.copy( this.projectionMatrix || camera.projectionMatrix );\n\t\t\tcameraData.currentCameraViewMatrix.copy( camera.matrixWorldInverse );\n\n\t\t\tthis.previousProjectionMatrix.value.copy( cameraData.previousProjectionMatrix );\n\t\t\tthis.previousCameraViewMatrix.value.copy( cameraData.previousCameraViewMatrix );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Overwritten to updated velocity specific uniforms.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdateAfter( { object } ) {\n\n\t\tgetPreviousMatrix( object ).copy( object.matrixWorld );\n\n\t}\n\n\t/**\n\t * Implements the velocity computation based on the previous and current vertex data.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @return {Node<vec2>} The motion vector.\n\t */\n\tsetup( /*builder*/ ) {\n\n\t\tconst projectionMatrix = ( this.projectionMatrix === null ) ? cameraProjectionMatrix : uniform( this.projectionMatrix );\n\n\t\tconst previousModelViewMatrix = this.previousCameraViewMatrix.mul( this.previousModelWorldMatrix );\n\n\t\tconst clipPositionCurrent = projectionMatrix.mul( modelViewMatrix ).mul( positionLocal );\n\t\tconst clipPositionPrevious = this.previousProjectionMatrix.mul( previousModelViewMatrix ).mul( positionPrevious );\n\n\t\tconst ndcPositionCurrent = clipPositionCurrent.xy.div( clipPositionCurrent.w );\n\t\tconst ndcPositionPrevious = clipPositionPrevious.xy.div( clipPositionPrevious.w );\n\n\t\tconst velocity = sub( ndcPositionCurrent, ndcPositionPrevious );\n\n\t\treturn velocity;\n\n\t}\n\n}\n\nfunction getData( object ) {\n\n\tlet objectData = _objectData.get( object );\n\n\tif ( objectData === undefined ) {\n\n\t\tobjectData = {};\n\t\t_objectData.set( object, objectData );\n\n\t}\n\n\treturn objectData;\n\n}\n\nfunction getPreviousMatrix( object, index = 0 ) {\n\n\tconst objectData = getData( object );\n\n\tlet matrix = objectData[ index ];\n\n\tif ( matrix === undefined ) {\n\n\t\tobjectData[ index ] = matrix = new Matrix4();\n\t\tobjectData[ index ].copy( object.matrixWorld );\n\n\t}\n\n\treturn matrix;\n\n}\n\n/**\n * TSL object that represents the velocity of a render pass.\n *\n * @tsl\n * @type {VelocityNode}\n */\nconst velocity = /*@__PURE__*/ nodeImmutable( VelocityNode );\n\n/**\n * Computes a grayscale value for the given RGB color value.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The color value to compute the grayscale for.\n * @return {Node<vec3>} The grayscale color.\n */\nconst grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {\n\n\treturn luminance( color.rgb );\n\n} );\n\n/**\n * Super-saturates or desaturates the given RGB color.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The input color.\n * @param {Node<float>} [adjustment=1] - Specifies the amount of the conversion. A value under `1` desaturates the color, a value over `1` super-saturates it.\n * @return {Node<vec3>} The saturated color.\n */\nconst saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {\n\n\treturn adjustment.mix( luminance( color.rgb ), color.rgb );\n\n} );\n\n/**\n * Selectively enhance the intensity of less saturated RGB colors. Can result\n * in a more natural and visually appealing image with enhanced color depth\n * compared to {@link ColorAdjustment#saturation}.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The input color.\n * @param {Node<float>} [adjustment=1] - Controls the intensity of the vibrance effect.\n * @return {Node<vec3>} The updated color.\n */\nconst vibrance = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {\n\n\tconst average = add( color.r, color.g, color.b ).div( 3.0 );\n\n\tconst mx = color.r.max( color.g.max( color.b ) );\n\tconst amt = mx.sub( average ).mul( adjustment ).mul( -3 );\n\n\treturn mix( color.rgb, mx, amt );\n\n} );\n\n/**\n * Updates the hue component of the given RGB color while preserving its luminance and saturation.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The input color.\n * @param {Node<float>} [adjustment=1] - Defines the degree of hue rotation in radians. A positive value rotates the hue clockwise, while a negative value rotates it counterclockwise.\n * @return {Node<vec3>} The updated color.\n */\nconst hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {\n\n\tconst k = vec3( 0.57735, 0.57735, 0.57735 );\n\n\tconst cosAngle = adjustment.cos();\n\n\treturn vec3( color.rgb.mul( cosAngle ).add( k.cross( color.rgb ).mul( adjustment.sin() ).add( k.mul( dot( k, color.rgb ).mul( cosAngle.oneMinus() ) ) ) ) );\n\n} );\n\n/**\n * Computes the luminance for the given RGB color value.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The color value to compute the luminance for.\n * @param {?Node<vec3>} luminanceCoefficients - The luminance coefficients. By default predefined values of the current working color space are used.\n * @return {Node<float>} The luminance.\n */\nconst luminance = (\n\tcolor,\n\tluminanceCoefficients = vec3( ColorManagement.getLuminanceCoefficients( new Vector3() ) )\n) => dot( color, luminanceCoefficients );\n\n/**\n * Color Decision List (CDL) v1.2\n *\n * Compact representation of color grading information, defined by slope, offset, power, and\n * saturation. The CDL should be typically be given input in a log space (such as LogC, ACEScc,\n * or AgX Log), and will return output in the same space. Output may require clamping >=0.\n *\n * @tsl\n * @function\n * @param {Node<vec4>} color Input (-Infinity < input < +Infinity)\n * @param {Node<vec3>} slope Slope (0 ≤ slope < +Infinity)\n * @param {Node<vec3>} offset Offset (-Infinity < offset < +Infinity; typically -1 < offset < 1)\n * @param {Node<vec3>} power Power (0 < power < +Infinity)\n * @param {Node<float>} saturation Saturation (0 ≤ saturation < +Infinity; typically 0 ≤ saturation < 4)\n * @param {Node<vec3>} luminanceCoefficients Luminance coefficients for saturation term, typically Rec. 709\n * @return {Node<vec4>} Output, -Infinity < output < +Infinity\n *\n * References:\n * - ASC CDL v1.2\n * - {@link https://blender.stackexchange.com/a/55239/43930}\n * - {@link https://docs.acescentral.com/specifications/acescc/}\n */\nconst cdl = /*@__PURE__*/ Fn( ( [\n\tcolor,\n\tslope = vec3( 1 ),\n\toffset = vec3( 0 ),\n\tpower = vec3( 1 ),\n\tsaturation = float( 1 ),\n\t// ASC CDL v1.2 explicitly requires Rec. 709 luminance coefficients.\n\tluminanceCoefficients = vec3( ColorManagement.getLuminanceCoefficients( new Vector3(), LinearSRGBColorSpace ) )\n] ) => {\n\n\t// NOTE: The ASC CDL v1.2 defines a [0, 1] clamp on the slope+offset term, and another on the\n\t// saturation term. Per the ACEScc specification and Filament, limits may be omitted to support\n\t// values outside [0, 1], requiring a workaround for negative values in the power expression.\n\n\tconst luma = color.rgb.dot( vec3( luminanceCoefficients ) );\n\n\tconst v = max$1( color.rgb.mul( slope ).add( offset ), 0.0 ).toVar();\n\tconst pv = v.pow( power ).toVar();\n\n\tIf( v.r.greaterThan( 0.0 ), () => { v.r.assign( pv.r ); } ); // eslint-disable-line\n\tIf( v.g.greaterThan( 0.0 ), () => { v.g.assign( pv.g ); } ); // eslint-disable-line\n\tIf( v.b.greaterThan( 0.0 ), () => { v.b.assign( pv.b ); } ); // eslint-disable-line\n\n\tv.assign( luma.add( v.sub( luma ).mul( saturation ) ) );\n\n\treturn vec4( v.rgb, color.a );\n\n} );\n\n/**\n * TSL function for creating a posterize effect which reduces the number of colors\n * in an image, resulting in a more blocky and stylized appearance.\n *\n * @tsl\n * @function\n * @param {Node} sourceNode - The input color.\n * @param {Node} stepsNode - Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.\n * @returns {Node} The posterized color.\n */\nconst posterize = Fn( ( [ source, steps ] ) => {\n\n\treturn source.mul( steps ).floor().div( steps );\n\n} );\n\nlet _sharedFramebuffer = null;\n\n/**\n * `ViewportTextureNode` creates an internal texture for each node instance. This module\n * shares a texture across all instances of `ViewportSharedTextureNode`. It should\n * be the first choice when using data of the default/screen framebuffer for performance reasons.\n *\n * @augments ViewportTextureNode\n */\nclass ViewportSharedTextureNode extends ViewportTextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'ViewportSharedTextureNode';\n\n\t}\n\n\t/**\n\t * Constructs a new viewport shared texture node.\n\t *\n\t * @param {Node} [uvNode=screenUV] - The uv node.\n\t * @param {?Node} [levelNode=null] - The level node.\n\t */\n\tconstructor( uvNode = screenUV, levelNode = null ) {\n\n\t\tif ( _sharedFramebuffer === null ) {\n\n\t\t\t_sharedFramebuffer = new FramebufferTexture();\n\n\t\t}\n\n\t\tsuper( uvNode, levelNode, _sharedFramebuffer );\n\n\t}\n\n\t/**\n\t * Overwritten so the method always returns the unique shared\n\t * framebuffer texture.\n\t *\n\t * @return {FramebufferTexture} The shared framebuffer texture.\n\t */\n\tgetTextureForReference() {\n\n\t\treturn _sharedFramebuffer;\n\n\t}\n\n\tupdateReference() {\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a shared viewport texture node.\n *\n * @tsl\n * @function\n * @param {?Node} [uvNode=screenUV] - The uv node.\n * @param {?Node} [levelNode=null] - The level node.\n * @returns {ViewportSharedTextureNode}\n */\nconst viewportSharedTexture = /*@__PURE__*/ nodeProxy( ViewportSharedTextureNode ).setParameterLength( 0, 2 );\n\nconst _size = /*@__PURE__*/ new Vector2();\n\n/**\n * Represents the texture of a pass node.\n *\n * @augments TextureNode\n */\nclass PassTextureNode extends TextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'PassTextureNode';\n\n\t}\n\n\t/**\n\t * Constructs a new pass texture node.\n\t *\n\t * @param {PassNode} passNode - The pass node.\n\t * @param {Texture} texture - The output texture.\n\t */\n\tconstructor( passNode, texture ) {\n\n\t\tsuper( texture );\n\n\t\t/**\n\t\t * A reference to the pass node.\n\t\t *\n\t\t * @type {PassNode}\n\t\t */\n\t\tthis.passNode = passNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t * @readonly\n\t\t */\n\t\tthis.isPassTextureNode = true;\n\n\t\tthis.setUpdateMatrix( false );\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tproperties.passNode = this.passNode;\n\n\t\treturn super.setup( builder );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.passNode, this.value );\n\n\t}\n\n}\n\n/**\n * An extension of `PassTextureNode` which allows to manage more than one\n * internal texture. Relevant for the `getPreviousTexture()` related API.\n *\n * @augments PassTextureNode\n */\nclass PassMultipleTextureNode extends PassTextureNode {\n\n\tstatic get type() {\n\n\t\treturn 'PassMultipleTextureNode';\n\n\t}\n\n\t/**\n\t * Constructs a new pass texture node.\n\t *\n\t * @param {PassNode} passNode - The pass node.\n\t * @param {string} textureName - The output texture name.\n\t * @param {boolean} [previousTexture=false] - Whether previous frame data should be used or not.\n\t */\n\tconstructor( passNode, textureName, previousTexture = false ) {\n\n\t\t// null is passed to the super call since this class does not\n\t\t// use an external texture for rendering pass data into. Instead\n\t\t// the texture is managed by the pass node itself\n\n\t\tsuper( passNode, null );\n\n\t\t/**\n\t\t * The output texture name.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.textureName = textureName;\n\n\t\t/**\n\t\t * Whether previous frame data should be used or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.previousTexture = previousTexture;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t * @readonly\n\t\t */\n\t\tthis.isPassMultipleTextureNode = true;\n\n\t}\n\n\t/**\n\t * Updates the texture reference of this node.\n\t */\n\tupdateTexture() {\n\n\t\tthis.value = this.previousTexture ? this.passNode.getPreviousTexture( this.textureName ) : this.passNode.getTexture( this.textureName );\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tthis.updateTexture();\n\n\t\treturn super.setup( builder );\n\n\t}\n\n\tclone() {\n\n\t\tconst newNode = new this.constructor( this.passNode, this.textureName, this.previousTexture );\n\t\tnewNode.uvNode = this.uvNode;\n\t\tnewNode.levelNode = this.levelNode;\n\t\tnewNode.biasNode = this.biasNode;\n\t\tnewNode.sampler = this.sampler;\n\t\tnewNode.depthNode = this.depthNode;\n\t\tnewNode.compareNode = this.compareNode;\n\t\tnewNode.gradNode = this.gradNode;\n\t\tnewNode.offsetNode = this.offsetNode;\n\n\t\treturn newNode;\n\n\t}\n\n}\n\n/**\n * Represents a render pass (sometimes called beauty pass) in context of post processing.\n * This pass produces a render for the given scene and camera and can provide multiple outputs\n * via MRT for further processing.\n *\n * ```js\n * const postProcessing = new RenderPipeline( renderer );\n *\n * const scenePass = pass( scene, camera );\n *\n * postProcessing.outputNode = scenePass;\n * ```\n *\n * @augments TempNode\n */\nclass PassNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'PassNode';\n\n\t}\n\n\t/**\n\t * Constructs a new pass node.\n\t *\n\t * @param {('color'|'depth')} scope - The scope of the pass. The scope determines whether the node outputs color or depth.\n\t * @param {Scene} scene - A reference to the scene.\n\t * @param {Camera} camera - A reference to the camera.\n\t * @param {Object} options - Options for the internal render target.\n\t */\n\tconstructor( scope, scene, camera, options = {} ) {\n\n\t\tsuper( 'vec4' );\n\n\t\t/**\n\t\t * The scope of the pass. The scope determines whether the node outputs color or depth.\n\t\t *\n\t\t * @type {('color'|'depth')}\n\t\t */\n\t\tthis.scope = scope;\n\n\t\t/**\n\t\t * A reference to the scene.\n\t\t *\n\t\t * @type {Scene}\n\t\t */\n\t\tthis.scene = scene;\n\n\t\t/**\n\t\t * A reference to the camera.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * Options for the internal render target.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.options = options;\n\n\t\t/**\n\t\t * The pass's pixel ratio. Will be kept automatically kept in sync with the renderer's pixel ratio.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis._pixelRatio = 1;\n\n\t\t/**\n\t\t * The pass's pixel width. Will be kept automatically kept in sync with the renderer's width.\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis._width = 1;\n\n\t\t/**\n\t\t * The pass's pixel height. Will be kept automatically kept in sync with the renderer's height.\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis._height = 1;\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.isRenderTargetTexture = true;\n\t\t//depthTexture.type = FloatType;\n\t\tdepthTexture.name = 'depth';\n\n\t\tconst renderTarget = new RenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, { type: HalfFloatType, ...options, } );\n\t\trenderTarget.texture.name = 'output';\n\t\trenderTarget.depthTexture = depthTexture;\n\n\t\t/**\n\t\t * The pass's render target.\n\t\t *\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis.renderTarget = renderTarget;\n\n\t\t/**\n\t\t * An optional override material for the pass.\n\t\t *\n\t\t * @type {Material|null}\n\t\t */\n\t\tthis.overrideMaterial = null;\n\n\t\t/**\n\t\t * Whether the pass is transparent.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.transparent = true;\n\n\t\t/**\n\t\t * Whether the pass is opaque.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.opaque = true;\n\n\t\t/**\n\t\t * An optional global context for the pass.\n\t\t *\n\t\t * @type {ContextNode|null}\n\t\t */\n\t\tthis.contextNode = null;\n\n\t\t/**\n\t\t * A cache for the context node.\n\t\t *\n\t\t * @private\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis._contextNodeCache = null;\n\n\t\t/**\n\t\t * A dictionary holding the internal result textures.\n\t\t *\n\t\t * @private\n\t\t * @type {Object<string, Texture>}\n\t\t */\n\t\tthis._textures = {\n\t\t\toutput: renderTarget.texture,\n\t\t\tdepth: depthTexture\n\t\t};\n\n\t\t/**\n\t\t * A dictionary holding the internal texture nodes.\n\t\t *\n\t\t * @private\n\t\t * @type {Object<string, TextureNode>}\n\t\t */\n\t\tthis._textureNodes = {};\n\n\t\t/**\n\t\t * A dictionary holding the internal depth nodes.\n\t\t *\n\t\t * @private\n\t\t * @type {Object}\n\t\t */\n\t\tthis._linearDepthNodes = {};\n\n\t\t/**\n\t\t * A dictionary holding the internal viewZ nodes.\n\t\t *\n\t\t * @private\n\t\t * @type {Object}\n\t\t */\n\t\tthis._viewZNodes = {};\n\n\t\t/**\n\t\t * A dictionary holding the texture data of the previous frame.\n\t\t * Used for computing velocity/motion vectors.\n\t\t *\n\t\t * @private\n\t\t * @type {Object<string, Texture>}\n\t\t */\n\t\tthis._previousTextures = {};\n\n\t\t/**\n\t\t * A dictionary holding the texture nodes of the previous frame.\n\t\t * Used for computing velocity/motion vectors.\n\t\t *\n\t\t * @private\n\t\t * @type {Object<string, TextureNode>}\n\t\t */\n\t\tthis._previousTextureNodes = {};\n\n\t\t/**\n\t\t * The `near` property of the camera as a uniform.\n\t\t *\n\t\t * @private\n\t\t * @type {UniformNode}\n\t\t */\n\t\tthis._cameraNear = uniform( 0 );\n\n\t\t/**\n\t\t * The `far` property of the camera as a uniform.\n\t\t *\n\t\t * @private\n\t\t * @type {UniformNode}\n\t\t */\n\t\tthis._cameraFar = uniform( 0 );\n\n\t\t/**\n\t\t * A MRT node configuring the MRT settings.\n\t\t *\n\t\t * @private\n\t\t * @type {?MRTNode}\n\t\t * @default null\n\t\t */\n\t\tthis._mrt = null;\n\n\t\t/**\n\t\t * Layer object for configuring the camera that is used\n\t\t * to produce the pass.\n\t\t *\n\t\t * @private\n\t\t * @type {?Layers}\n\t\t * @default null\n\t\t */\n\t\tthis._layers = null;\n\n\t\t/**\n\t\t * Scales the resolution of the internal render target.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis._resolutionScale = 1;\n\n\t\t/**\n\t\t * Custom viewport definition.\n\t\t *\n\t\t * @private\n\t\t * @type {?Vector4}\n\t\t * @default null\n\t\t */\n\t\tthis._viewport = null;\n\n\t\t/**\n\t\t * Custom scissor definition.\n\t\t *\n\t\t * @private\n\t\t * @type {?Vector4}\n\t\t * @default null\n\t\t */\n\t\tthis._scissor = null;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPassNode = true;\n\n\t\t/**\n\t\t * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders the\n\t\t * scene once per frame in its {@link PassNode#updateBefore} method.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'frame'\n\t\t */\n\t\tthis.updateBeforeType = NodeUpdateType.FRAME;\n\n\t\t/**\n\t\t * This flag is used for global cache.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t}\n\n\t/**\n\t * Sets the resolution scale for the pass.\n\t * The resolution scale is a factor that is multiplied with the renderer's width and height.\n\t *\n\t * @param {number} resolutionScale - The resolution scale to set. A value of `1` means full resolution.\n\t * @return {PassNode} A reference to this pass.\n\t */\n\tsetResolutionScale( resolutionScale ) {\n\n\t\tthis._resolutionScale = resolutionScale;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Gets the current resolution scale of the pass.\n\t *\n\t * @return {number} The current resolution scale. A value of `1` means full resolution.\n\t */\n\tgetResolutionScale() {\n\n\t\treturn this._resolutionScale;\n\n\t}\n\n\t/**\n\t * Sets the resolution for the pass.\n\t * The resolution is a factor that is multiplied with the renderer's width and height.\n\t *\n\t * @param {number} resolution - The resolution to set. A value of `1` means full resolution.\n\t * @return {PassNode} A reference to this pass.\n\t * @deprecated since r181. Use {@link PassNode#setResolutionScale `setResolutionScale()`} instead.\n\t */\n\tsetResolution( resolution ) { // @deprecated, r181\n\n\t\twarn( 'PassNode: .setResolution() is deprecated. Use .setResolutionScale() instead.' );\n\n\t\treturn this.setResolutionScale( resolution );\n\n\t}\n\n\t/**\n\t * Gets the current resolution of the pass.\n\t *\n\t * @return {number} The current resolution. A value of `1` means full resolution.\n\t * @deprecated since r181. Use {@link PassNode#getResolutionScale `getResolutionScale()`} instead.\n\t */\n\tgetResolution() { // @deprecated, r181\n\n\t\twarn( 'PassNode: .getResolution() is deprecated. Use .getResolutionScale() instead.' );\n\n\t\treturn this.getResolutionScale();\n\n\t}\n\n\t/**\n\t * Sets the layer configuration that should be used when rendering the pass.\n\t *\n\t * @param {Layers} layers - The layers object to set.\n\t * @return {PassNode} A reference to this pass.\n\t */\n\tsetLayers( layers ) {\n\n\t\tthis._layers = layers;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Gets the current layer configuration of the pass.\n\t *\n\t * @return {?Layers} .\n\t */\n\tgetLayers() {\n\n\t\treturn this._layers;\n\n\t}\n\n\t/**\n\t * Sets the given MRT node to setup MRT for this pass.\n\t *\n\t * @param {MRTNode} mrt - The MRT object.\n\t * @return {PassNode} A reference to this pass.\n\t */\n\tsetMRT( mrt ) {\n\n\t\tthis._mrt = mrt;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the current MRT node.\n\t *\n\t * @return {MRTNode} The current MRT node.\n\t */\n\tgetMRT() {\n\n\t\treturn this._mrt;\n\n\t}\n\n\t/**\n\t * Returns the texture for the given output name.\n\t *\n\t * @param {string} name - The output name to get the texture for.\n\t * @return {Texture} The texture.\n\t */\n\tgetTexture( name ) {\n\n\t\tlet texture = this._textures[ name ];\n\n\t\tif ( texture === undefined ) {\n\n\t\t\tconst refTexture = this.renderTarget.texture;\n\n\t\t\ttexture = refTexture.clone();\n\t\t\ttexture.name = name;\n\n\t\t\tthis._textures[ name ] = texture;\n\n\t\t\tthis.renderTarget.textures.push( texture );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t/**\n\t * Returns the texture holding the data of the previous frame for the given output name.\n\t *\n\t * @param {string} name - The output name to get the texture for.\n\t * @return {Texture} The texture holding the data of the previous frame.\n\t */\n\tgetPreviousTexture( name ) {\n\n\t\tlet texture = this._previousTextures[ name ];\n\n\t\tif ( texture === undefined ) {\n\n\t\t\ttexture = this.getTexture( name ).clone();\n\n\t\t\tthis._previousTextures[ name ] = texture;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t/**\n\t * Switches current and previous textures for the given output name.\n\t *\n\t * @param {string} name - The output name.\n\t */\n\ttoggleTexture( name ) {\n\n\t\tconst prevTexture = this._previousTextures[ name ];\n\n\t\tif ( prevTexture !== undefined ) {\n\n\t\t\tconst texture = this._textures[ name ];\n\n\t\t\tconst index = this.renderTarget.textures.indexOf( texture );\n\t\t\tthis.renderTarget.textures[ index ] = prevTexture;\n\n\t\t\tthis._textures[ name ] = prevTexture;\n\t\t\tthis._previousTextures[ name ] = texture;\n\n\t\t\tthis._textureNodes[ name ].updateTexture();\n\t\t\tthis._previousTextureNodes[ name ].updateTexture();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the texture node for the given output name.\n\t *\n\t * @param {string} [name='output'] - The output name to get the texture node for.\n\t * @return {TextureNode} The texture node.\n\t */\n\tgetTextureNode( name = 'output' ) {\n\n\t\tlet textureNode = this._textureNodes[ name ];\n\n\t\tif ( textureNode === undefined ) {\n\n\t\t\ttextureNode = new PassMultipleTextureNode( this, name );\n\t\t\ttextureNode.updateTexture();\n\t\t\tthis._textureNodes[ name ] = textureNode;\n\n\t\t}\n\n\t\treturn textureNode;\n\n\t}\n\n\t/**\n\t * Returns the previous texture node for the given output name.\n\t *\n\t * @param {string} [name='output'] - The output name to get the previous texture node for.\n\t * @return {TextureNode} The previous texture node.\n\t */\n\tgetPreviousTextureNode( name = 'output' ) {\n\n\t\tlet textureNode = this._previousTextureNodes[ name ];\n\n\t\tif ( textureNode === undefined ) {\n\n\t\t\tif ( this._textureNodes[ name ] === undefined ) this.getTextureNode( name );\n\n\t\t\ttextureNode = new PassMultipleTextureNode( this, name, true );\n\t\t\ttextureNode.updateTexture();\n\t\t\tthis._previousTextureNodes[ name ] = textureNode;\n\n\t\t}\n\n\t\treturn textureNode;\n\n\t}\n\n\t/**\n\t * Returns a viewZ node of this pass.\n\t *\n\t * @param {string} [name='depth'] - The output name to get the viewZ node for. In most cases the default `'depth'` can be used however the parameter exists for custom depth outputs.\n\t * @return {Node} The viewZ node.\n\t */\n\tgetViewZNode( name = 'depth' ) {\n\n\t\tlet viewZNode = this._viewZNodes[ name ];\n\n\t\tif ( viewZNode === undefined ) {\n\n\t\t\tconst cameraNear = this._cameraNear;\n\t\t\tconst cameraFar = this._cameraFar;\n\n\t\t\tthis._viewZNodes[ name ] = viewZNode = perspectiveDepthToViewZ( this.getTextureNode( name ), cameraNear, cameraFar );\n\n\t\t}\n\n\t\treturn viewZNode;\n\n\t}\n\n\t/**\n\t * Returns a linear depth node of this pass.\n\t *\n\t * @param {string} [name='depth'] - The output name to get the linear depth node for. In most cases the default `'depth'` can be used however the parameter exists for custom depth outputs.\n\t * @return {Node} The linear depth node.\n\t */\n\tgetLinearDepthNode( name = 'depth' ) {\n\n\t\tlet linearDepthNode = this._linearDepthNodes[ name ];\n\n\t\tif ( linearDepthNode === undefined ) {\n\n\t\t\tconst cameraNear = this._cameraNear;\n\t\t\tconst cameraFar = this._cameraFar;\n\t\t\tconst viewZNode = this.getViewZNode( name );\n\n\t\t\t// TODO: just if ( builder.camera.isPerspectiveCamera )\n\n\t\t\tthis._linearDepthNodes[ name ] = linearDepthNode = viewZToOrthographicDepth( viewZNode, cameraNear, cameraFar );\n\n\t\t}\n\n\t\treturn linearDepthNode;\n\n\t}\n\n\t/**\n\t * Precompiles the pass.\n\t *\n\t * Note that this method must be called after the pass configuration is complete.\n\t * So calls like `setMRT()` and `getTextureNode()` must proceed the precompilation.\n\t *\n\t * @async\n\t * @param {Renderer} renderer - The renderer.\n\t * @return {Promise} A Promise that resolves when the compile has been finished.\n\t * @see {@link Renderer#compileAsync}\n\t */\n\tasync compileAsync( renderer ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst currentMRT = renderer.getMRT();\n\n\t\trenderer.setRenderTarget( this.renderTarget );\n\t\trenderer.setMRT( this._mrt );\n\n\t\tawait renderer.compileAsync( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\t\trenderer.setMRT( currentMRT );\n\n\t}\n\n\tsetup( { renderer } ) {\n\n\t\tthis.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;\n\n\t\tthis.renderTarget.texture.type = renderer.getOutputBufferType();\n\n\t\tif ( renderer.reversedDepthBuffer === true ) {\n\n\t\t\tthis.renderTarget.depthTexture.type = FloatType;\n\n\t\t}\n\n\t\treturn this.scope === PassNode.COLOR ? this.getTextureNode() : this.getLinearDepthNode();\n\n\t}\n\n\tupdateBefore( frame ) {\n\n\t\tconst { renderer } = frame;\n\t\tconst { scene } = this;\n\n\t\tlet camera;\n\t\tlet pixelRatio;\n\n\t\tconst outputRenderTarget = renderer.getOutputRenderTarget();\n\n\t\tif ( outputRenderTarget && outputRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\tpixelRatio = 1;\n\t\t\tcamera = renderer.xr.getCamera();\n\n\t\t\trenderer.xr.updateCamera( camera );\n\n\t\t\t_size.set( outputRenderTarget.width, outputRenderTarget.height );\n\n\t\t} else {\n\n\t\t\tcamera = this.camera;\n\t\t\tpixelRatio = renderer.getPixelRatio();\n\n\t\t\trenderer.getSize( _size );\n\n\t\t}\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( _size.width, _size.height );\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst currentMRT = renderer.getMRT();\n\t\tconst currentAutoClear = renderer.autoClear;\n\t\tconst currentTransparent = renderer.transparent;\n\t\tconst currentOpaque = renderer.opaque;\n\t\tconst currentMask = camera.layers.mask;\n\t\tconst currentContextNode = renderer.contextNode;\n\t\tconst currentOverrideMaterial = scene.overrideMaterial;\n\n\t\tthis._cameraNear.value = camera.near;\n\t\tthis._cameraFar.value = camera.far;\n\n\t\tif ( this._layers !== null ) {\n\n\t\t\tcamera.layers.mask = this._layers.mask;\n\n\t\t}\n\n\t\tfor ( const name in this._previousTextures ) {\n\n\t\t\tthis.toggleTexture( name );\n\n\t\t}\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\tscene.overrideMaterial = this.overrideMaterial;\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderTarget );\n\t\trenderer.setMRT( this._mrt );\n\t\trenderer.autoClear = true;\n\t\trenderer.transparent = this.transparent;\n\t\trenderer.opaque = this.opaque;\n\n\t\tif ( this.contextNode !== null ) {\n\n\t\t\tif ( this._contextNodeCache === null || this._contextNodeCache.version !== this.version ) {\n\n\t\t\t\tthis._contextNodeCache = {\n\t\t\t\t\tversion: this.version,\n\t\t\t\t\tcontext: context( { ...renderer.contextNode.getFlowContextData(), ...this.contextNode.getFlowContextData() } )\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\trenderer.contextNode = this._contextNodeCache.context;\n\n\t\t}\n\n\t\tconst currentSceneName = scene.name;\n\n\t\tscene.name = this.name ? this.name : scene.name;\n\n\t\trenderer.render( scene, camera );\n\n\t\tscene.name = currentSceneName;\n\t\tscene.overrideMaterial = currentOverrideMaterial;\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\t\trenderer.setMRT( currentMRT );\n\t\trenderer.autoClear = currentAutoClear;\n\t\trenderer.transparent = currentTransparent;\n\t\trenderer.opaque = currentOpaque;\n\t\trenderer.contextNode = currentContextNode;\n\n\t\tcamera.layers.mask = currentMask;\n\n\t}\n\n\t/**\n\t * Sets the size of the pass's render target. Honors the pixel ratio.\n\t *\n\t * @param {number} width - The width to set.\n\t * @param {number} height - The height to set.\n\t */\n\tsetSize( width, height ) {\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tconst effectiveWidth = Math.floor( this._width * this._pixelRatio * this._resolutionScale );\n\t\tconst effectiveHeight = Math.floor( this._height * this._pixelRatio * this._resolutionScale );\n\n\t\tthis.renderTarget.setSize( effectiveWidth, effectiveHeight );\n\n\t\t// scissor\n\n\t\tif ( this._scissor !== null ) {\n\n\t\t\tthis.renderTarget.scissor.copy( this._scissor ).multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();\n\t\t\tthis.renderTarget.scissorTest = true;\n\n\t\t} else {\n\n\t\t\tthis.renderTarget.scissorTest = false;\n\n\t\t}\n\n\t\t// viewport\n\n\t\tif ( this._viewport !== null ) {\n\n\t\t\tthis.renderTarget.viewport.copy( this._viewport ).multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method allows to define the pass's scissor rectangle. By default, the scissor rectangle is kept\n\t * in sync with the pass's dimensions. To reverse the process and use auto-sizing again, call the method\n\t * with `null` as the single argument.\n\t *\n\t * @param {?(number | Vector4)} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.\n\t * Instead of passing four arguments, the method also works with a single four-dimensional vector.\n\t * @param {number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.\n\t * @param {number} width - The width of the scissor box in logical pixel unit.\n\t * @param {number} height - The height of the scissor box in logical pixel unit.\n\t */\n\tsetScissor( x, y, width, height ) {\n\n\t\tif ( x === null ) {\n\n\t\t\tthis._scissor = null;\n\n\t\t} else {\n\n\t\t\tif ( this._scissor === null ) this._scissor = new Vector4();\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\tthis._scissor.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\tthis._scissor.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method allows to define the pass's viewport. By default, the viewport is kept in sync\n\t * with the pass's dimensions. To reverse the process and use auto-sizing again, call the method\n\t * with `null` as the single argument.\n\t *\n\t * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.\n\t * @param {number} y - The vertical coordinate for the lower left corner of the viewport origin  in logical pixel unit.\n\t * @param {number} width - The width of the viewport in logical pixel unit.\n\t * @param {number} height - The height of the viewport in logical pixel unit.\n\t */\n\tsetViewport( x, y, width, height ) {\n\n\t\tif ( x === null ) {\n\n\t\t\tthis._viewport = null;\n\n\t\t} else {\n\n\t\t\tif ( this._viewport === null ) this._viewport = new Vector4();\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\tthis._viewport.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\tthis._viewport.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the pixel ratio the pass's render target and updates the size.\n\t *\n\t * @param {number} pixelRatio - The pixel ratio to set.\n\t */\n\tsetPixelRatio( pixelRatio ) {\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this._width, this._height );\n\n\t}\n\n\t/**\n\t * Frees internal resources. Should be called when the node is no longer in use.\n\t */\n\tdispose() {\n\n\t\tthis.renderTarget.dispose();\n\n\t}\n\n\n}\n\n/**\n * @static\n * @type {'color'}\n * @default 'color'\n */\nPassNode.COLOR = 'color';\n\n/**\n * @static\n * @type {'depth'}\n * @default 'depth'\n */\nPassNode.DEPTH = 'depth';\n\n/**\n * TSL function for creating a pass node.\n *\n * @tsl\n * @function\n * @param {Scene} scene - A reference to the scene.\n * @param {Camera} camera - A reference to the camera.\n * @param {Object} options - Options for the internal render target.\n * @returns {PassNode}\n */\nconst pass = ( scene, camera, options ) => new PassNode( PassNode.COLOR, scene, camera, options );\n\n/**\n * TSL function for creating a pass texture node.\n *\n * @tsl\n * @function\n * @param {PassNode} pass - The pass node.\n * @param {Texture} texture - The output texture.\n * @returns {PassTextureNode}\n */\nconst passTexture = ( pass, texture ) => new PassTextureNode( pass, texture );\n\n/**\n * TSL function for creating a depth pass node.\n *\n * @tsl\n * @function\n * @param {Scene} scene - A reference to the scene.\n * @param {Camera} camera - A reference to the camera.\n * @param {Object} options - Options for the internal render target.\n * @returns {PassNode}\n */\nconst depthPass = ( scene, camera, options ) => new PassNode( PassNode.DEPTH, scene, camera, options );\n\n/**\n * Represents a render pass for producing a toon outline effect on compatible objects.\n * Only 3D objects with materials of type `MeshToonMaterial` and `MeshToonNodeMaterial`\n * will receive the outline.\n *\n * ```js\n * const postProcessing = new RenderPipeline( renderer );\n *\n * const scenePass = toonOutlinePass( scene, camera );\n *\n * postProcessing.outputNode = scenePass;\n * ```\n * @augments PassNode\n */\nclass ToonOutlinePassNode extends PassNode {\n\n\tstatic get type() {\n\n\t\treturn 'ToonOutlinePassNode';\n\n\t}\n\n\t/**\n\t * Constructs a new outline pass node.\n\t *\n\t * @param {Scene} scene - A reference to the scene.\n\t * @param {Camera} camera - A reference to the camera.\n\t * @param {Node} colorNode - Defines the outline's color.\n\t * @param {Node} thicknessNode - Defines the outline's thickness.\n\t * @param {Node} alphaNode - Defines the outline's alpha.\n\t */\n\tconstructor( scene, camera, colorNode, thicknessNode, alphaNode ) {\n\n\t\tsuper( PassNode.COLOR, scene, camera );\n\n\t\t/**\n\t\t * Defines the outline's color.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.colorNode = colorNode;\n\n\t\t/**\n\t\t * Defines the outline's thickness.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.thicknessNode = thicknessNode;\n\n\t\t/**\n\t\t * Defines the outline's alpha.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.alphaNode = alphaNode;\n\n\t\t/**\n\t\t * An internal material cache.\n\t\t *\n\t\t * @private\n\t\t * @type {WeakMap<Material, NodeMaterial>}\n\t\t */\n\t\tthis._materialCache = new WeakMap();\n\n\t\t/**\n\t\t * The name of this pass.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'Outline Pass'\n\t\t */\n\t\tthis.name = 'Outline Pass';\n\n\t}\n\n\tupdateBefore( frame ) {\n\n\t\tconst { renderer } = frame;\n\n\t\tconst currentRenderObjectFunction = renderer.getRenderObjectFunction();\n\n\t\trenderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, group, lightsNode, clippingContext ) => {\n\n\t\t\t// only render outline for supported materials\n\n\t\t\tif ( material.isMeshToonMaterial || material.isMeshToonNodeMaterial ) {\n\n\t\t\t\tif ( material.wireframe === false ) {\n\n\t\t\t\t\tconst outlineMaterial = this._getOutlineMaterial( material );\n\t\t\t\t\trenderer.renderObject( object, scene, camera, geometry, outlineMaterial, group, lightsNode, clippingContext );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// default\n\n\t\t\trenderer.renderObject( object, scene, camera, geometry, material, group, lightsNode, clippingContext );\n\n\t\t} );\n\n\t\tsuper.updateBefore( frame );\n\n\t\trenderer.setRenderObjectFunction( currentRenderObjectFunction );\n\n\t}\n\n\t/**\n\t * Creates the material used for outline rendering.\n\t *\n\t * @private\n\t * @return {NodeMaterial} The outline material.\n\t */\n\t_createMaterial() {\n\n\t\tconst material = new NodeMaterial();\n\t\tmaterial.isMeshToonOutlineMaterial = true;\n\t\tmaterial.name = 'Toon_Outline';\n\t\tmaterial.side = BackSide;\n\n\t\t// vertex node\n\n\t\tconst outlineNormal = normalLocal.negate();\n\t\tconst mvp = cameraProjectionMatrix.mul( modelViewMatrix );\n\n\t\tconst ratio = float( 1.0 ); // TODO: support outline thickness ratio for each vertex\n\t\tconst pos = mvp.mul( vec4( positionLocal, 1.0 ) );\n\t\tconst pos2 = mvp.mul( vec4( positionLocal.add( outlineNormal ), 1.0 ) );\n\t\tconst norm = normalize( pos.sub( pos2 ) ); // NOTE: subtract pos2 from pos because BackSide objectNormal is negative\n\n\t\tmaterial.vertexNode = pos.add( norm.mul( this.thicknessNode ).mul( pos.w ).mul( ratio ) );\n\n\t\t// color node\n\n\t\tmaterial.colorNode = vec4( this.colorNode, this.alphaNode );\n\n\t\treturn material;\n\n\t}\n\n\t/**\n\t * For the given toon material, this method returns a corresponding\n\t * outline material.\n\t *\n\t * @private\n\t * @param {(MeshToonMaterial|MeshToonNodeMaterial)} originalMaterial - The toon material.\n\t * @return {NodeMaterial} The outline material.\n\t */\n\t_getOutlineMaterial( originalMaterial ) {\n\n\t\tlet outlineMaterial = this._materialCache.get( originalMaterial );\n\n\t\tif ( outlineMaterial === undefined ) {\n\n\t\t\toutlineMaterial = this._createMaterial();\n\n\t\t\tthis._materialCache.set( originalMaterial, outlineMaterial );\n\n\t\t}\n\n\t\treturn outlineMaterial;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a toon outline pass node.\n *\n * @tsl\n * @function\n * @param {Scene} scene - A reference to the scene.\n * @param {Camera} camera - A reference to the camera.\n * @param {Color} color - Defines the outline's color.\n * @param {number} [thickness=0.003] - Defines the outline's thickness.\n * @param {number} [alpha=1] - Defines the outline's alpha.\n * @returns {ToonOutlinePassNode}\n */\nconst toonOutlinePass = ( scene, camera, color = new Color( 0, 0, 0 ), thickness = 0.003, alpha = 1 ) => new ToonOutlinePassNode( scene, camera, nodeObject( color ), nodeObject( thickness ), nodeObject( alpha ) );\n\n/**\n * Linear tone mapping, exposure only.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The color that should be tone mapped.\n * @param {Node<float>} exposure - The exposure.\n * @return {Node<vec3>} The tone mapped color.\n */\nconst linearToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {\n\n\treturn color.mul( exposure ).clamp();\n\n} ).setLayout( {\n\tname: 'linearToneMapping',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'color', type: 'vec3' },\n\t\t{ name: 'exposure', type: 'float' }\n\t]\n} );\n\n/**\n * Reinhard tone mapping.\n *\n * Reference: {@link https://www.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf}\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The color that should be tone mapped.\n * @param {Node<float>} exposure - The exposure.\n * @return {Node<vec3>} The tone mapped color.\n */\nconst reinhardToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {\n\n\tcolor = color.mul( exposure );\n\n\treturn color.div( color.add( 1.0 ) ).clamp();\n\n} ).setLayout( {\n\tname: 'reinhardToneMapping',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'color', type: 'vec3' },\n\t\t{ name: 'exposure', type: 'float' }\n\t]\n} );\n\n/**\n * Cineon tone mapping.\n *\n * Reference: {@link http://filmicworlds.com/blog/filmic-tonemapping-operators/}\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The color that should be tone mapped.\n * @param {Node<float>} exposure - The exposure.\n * @return {Node<vec3>} The tone mapped color.\n */\nconst cineonToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {\n\n\t// filmic operator by Jim Hejl and Richard Burgess-Dawson\n\tcolor = color.mul( exposure );\n\tcolor = color.sub( 0.004 ).max( 0.0 );\n\n\tconst a = color.mul( color.mul( 6.2 ).add( 0.5 ) );\n\tconst b = color.mul( color.mul( 6.2 ).add( 1.7 ) ).add( 0.06 );\n\n\treturn a.div( b ).pow( 2.2 );\n\n} ).setLayout( {\n\tname: 'cineonToneMapping',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'color', type: 'vec3' },\n\t\t{ name: 'exposure', type: 'float' }\n\t]\n} );\n\n// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\n\nconst RRTAndODTFit = /*@__PURE__*/ Fn( ( [ color ] ) => {\n\n\tconst a = color.mul( color.add( 0.0245786 ) ).sub( 0.000090537 );\n\tconst b = color.mul( color.add( 0.4329510 ).mul( 0.983729 ) ).add( 0.238081 );\n\n\treturn a.div( b );\n\n} );\n\n/**\n * ACESFilmic tone mapping.\n *\n * Reference: {@link https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs}\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The color that should be tone mapped.\n * @param {Node<float>} exposure - The exposure.\n * @return {Node<vec3>} The tone mapped color.\n */\nconst acesFilmicToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {\n\n\t// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\n\tconst ACESInputMat = mat3(\n\t\t0.59719, 0.35458, 0.04823,\n\t\t0.07600, 0.90834, 0.01566,\n\t\t0.02840, 0.13383, 0.83777\n\t);\n\n\t// ODT_SAT => XYZ => D60_2_D65 => sRGB\n\tconst ACESOutputMat = mat3(\n\t\t1.60475, -0.53108, -0.07367,\n\t\t-0.10208, 1.10813, -605e-5,\n\t\t-327e-5, -0.07276, 1.07602\n\t);\n\n\tcolor = color.mul( exposure ).div( 0.6 );\n\n\tcolor = ACESInputMat.mul( color );\n\n\t// Apply RRT and ODT\n\tcolor = RRTAndODTFit( color );\n\n\tcolor = ACESOutputMat.mul( color );\n\n\t// Clamp to [0, 1]\n\treturn color.clamp();\n\n} ).setLayout( {\n\tname: 'acesFilmicToneMapping',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'color', type: 'vec3' },\n\t\t{ name: 'exposure', type: 'float' }\n\t]\n} );\n\nconst LINEAR_REC2020_TO_LINEAR_SRGB = /*@__PURE__*/ mat3( vec3( 1.6605, -0.1246, -0.0182 ), vec3( -0.5876, 1.1329, -0.1006 ), vec3( -0.0728, -83e-4, 1.1187 ) );\nconst LINEAR_SRGB_TO_LINEAR_REC2020 = /*@__PURE__*/ mat3( vec3( 0.6274, 0.0691, 0.0164 ), vec3( 0.3293, 0.9195, 0.0880 ), vec3( 0.0433, 0.0113, 0.8956 ) );\n\nconst agxDefaultContrastApprox = /*@__PURE__*/ Fn( ( [ x_immutable ] ) => {\n\n\tconst x = vec3( x_immutable ).toVar();\n\tconst x2 = vec3( x.mul( x ) ).toVar();\n\tconst x4 = vec3( x2.mul( x2 ) ).toVar();\n\n\treturn float( 15.5 ).mul( x4.mul( x2 ) ).sub( mul( 40.14, x4.mul( x ) ) ).add( mul( 31.96, x4 ).sub( mul( 6.868, x2.mul( x ) ) ).add( mul( 0.4298, x2 ).add( mul( 0.1191, x ).sub( 0.00232 ) ) ) );\n\n} );\n\n/**\n * AgX tone mapping.\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The color that should be tone mapped.\n * @param {Node<float>} exposure - The exposure.\n * @return {Node<vec3>} The tone mapped color.\n */\nconst agxToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {\n\n\tconst colortone = vec3( color ).toVar();\n\tconst AgXInsetMatrix = mat3( vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ), vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ), vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 ) );\n\tconst AgXOutsetMatrix = mat3( vec3( 1.1271005818144368, -0.1413297634984383, -0.14132976349843826 ), vec3( -0.11060664309660323, 1.157823702216272, -0.11060664309660294 ), vec3( -0.016493938717834573, -0.016493938717834257, 1.2519364065950405 ) );\n\tconst AgxMinEv = float( -12.47393 );\n\tconst AgxMaxEv = float( 4.026069 );\n\tcolortone.mulAssign( exposure );\n\tcolortone.assign( LINEAR_SRGB_TO_LINEAR_REC2020.mul( colortone ) );\n\tcolortone.assign( AgXInsetMatrix.mul( colortone ) );\n\tcolortone.assign( max$1( colortone, 1e-10 ) );\n\tcolortone.assign( log2( colortone ) );\n\tcolortone.assign( colortone.sub( AgxMinEv ).div( AgxMaxEv.sub( AgxMinEv ) ) );\n\tcolortone.assign( clamp( colortone, 0.0, 1.0 ) );\n\tcolortone.assign( agxDefaultContrastApprox( colortone ) );\n\tcolortone.assign( AgXOutsetMatrix.mul( colortone ) );\n\tcolortone.assign( pow( max$1( vec3( 0.0 ), colortone ), vec3( 2.2 ) ) );\n\tcolortone.assign( LINEAR_REC2020_TO_LINEAR_SRGB.mul( colortone ) );\n\tcolortone.assign( clamp( colortone, 0.0, 1.0 ) );\n\n\treturn colortone;\n\n} ).setLayout( {\n\tname: 'agxToneMapping',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'color', type: 'vec3' },\n\t\t{ name: 'exposure', type: 'float' }\n\t]\n} );\n\n/**\n * Neutral tone mapping.\n *\n * Reference: {@link https://modelviewer.dev/examples/tone-mapping}\n *\n * @tsl\n * @function\n * @param {Node<vec3>} color - The color that should be tone mapped.\n * @param {Node<float>} exposure - The exposure.\n * @return {Node<vec3>} The tone mapped color.\n */\nconst neutralToneMapping = /*@__PURE__*/ Fn( ( [ color, exposure ] ) => {\n\n\tconst StartCompression = float( 0.8 - 0.04 );\n\tconst Desaturation = float( 0.15 );\n\n\tcolor = color.mul( exposure );\n\n\tconst x = min$1( color.r, min$1( color.g, color.b ) );\n\tconst offset = select( x.lessThan( 0.08 ), x.sub( mul( 6.25, x.mul( x ) ) ), 0.04 );\n\n\tcolor.subAssign( offset );\n\n\tconst peak = max$1( color.r, max$1( color.g, color.b ) );\n\n\tIf( peak.lessThan( StartCompression ), () => {\n\n\t\treturn color;\n\n\t} );\n\n\tconst d = sub( 1, StartCompression );\n\tconst newPeak = sub( 1, d.mul( d ).div( peak.add( d.sub( StartCompression ) ) ) );\n\tcolor.mulAssign( newPeak.div( peak ) );\n\tconst g = sub( 1, div( 1, Desaturation.mul( peak.sub( newPeak ) ).add( 1 ) ) );\n\n\treturn mix( color, vec3( newPeak ), g );\n\n} ).setLayout( {\n\tname: 'neutralToneMapping',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'color', type: 'vec3' },\n\t\t{ name: 'exposure', type: 'float' }\n\t]\n} );\n\n/**\n * This class represents native code sections. It is the base\n * class for modules like {@link FunctionNode} which allows to implement\n * functions with native shader languages.\n *\n * @augments Node\n */\nclass CodeNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'CodeNode';\n\n\t}\n\n\t/**\n\t * Constructs a new code node.\n\t *\n\t * @param {string} [code=''] - The native code.\n\t * @param {Array<Node>} [includes=[]] - An array of includes.\n\t * @param {('js'|'wgsl'|'glsl')} [language=''] - The used language.\n\t */\n\tconstructor( code = '', includes = [], language = '' ) {\n\n\t\tsuper( 'code' );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isCodeNode = true;\n\n\t\t/**\n\t\t * This flag is used for global cache.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t\t/**\n\t\t * The native code.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.code = code;\n\n\t\t/**\n\t\t * An array of includes\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t * @default []\n\t\t */\n\t\tthis.includes = includes;\n\n\t\t/**\n\t\t * The used language.\n\t\t *\n\t\t * @type {('js'|'wgsl'|'glsl')}\n\t\t * @default ''\n\t\t */\n\t\tthis.language = language;\n\n\t}\n\n\t/**\n\t * Sets the includes of this code node.\n\t *\n\t * @param {Array<Node>} includes - The includes to set.\n\t * @return {CodeNode} A reference to this node.\n\t */\n\tsetIncludes( includes ) {\n\n\t\tthis.includes = includes;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the includes of this code node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Array<Node>} The includes.\n\t */\n\tgetIncludes( /*builder*/ ) {\n\n\t\treturn this.includes;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst includes = this.getIncludes( builder );\n\n\t\tfor ( const include of includes ) {\n\n\t\t\tinclude.build( builder );\n\n\t\t}\n\n\t\tconst nodeCode = builder.getCodeFromNode( this, this.getNodeType( builder ) );\n\t\tnodeCode.code = this.code;\n\n\t\treturn nodeCode.code;\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.code = this.code;\n\t\tdata.language = this.language;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.code = data.code;\n\t\tthis.language = data.language;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a code node.\n *\n * @tsl\n * @function\n * @param {string} [code] - The native code.\n * @param {?Array<Node>} [includes=[]] - An array of includes.\n * @param {?('js'|'wgsl'|'glsl')} [language=''] - The used language.\n * @returns {CodeNode}\n */\nconst code = /*@__PURE__*/ nodeProxy( CodeNode ).setParameterLength( 1, 3 );\n\n/**\n * TSL function for creating a JS code node.\n *\n * @tsl\n * @function\n * @param {string} src - The native code.\n * @param {Array<Node>} includes - An array of includes.\n * @returns {CodeNode}\n */\nconst js = ( src, includes ) => code( src, includes, 'js' );\n\n/**\n * TSL function for creating a WGSL code node.\n *\n * @tsl\n * @function\n * @param {string} src - The native code.\n * @param {Array<Node>} includes - An array of includes.\n * @returns {CodeNode}\n */\nconst wgsl = ( src, includes ) => code( src, includes, 'wgsl' );\n\n/**\n * TSL function for creating a GLSL code node.\n *\n * @tsl\n * @function\n * @param {string} src - The native code.\n * @param {Array<Node>} includes - An array of includes.\n * @returns {CodeNode}\n */\nconst glsl = ( src, includes ) => code( src, includes, 'glsl' );\n\n/**\n * This class represents a native shader function. It can be used to implement\n * certain aspects of a node material with native shader code. There are two predefined\n * TSL functions for easier usage.\n *\n * - `wgslFn`: Creates a WGSL function node.\n * - `glslFn`: Creates a GLSL function node.\n *\n * A basic example with one include looks like so:\n *\n * ```js\n * const desaturateWGSLFn = wgslFn( `\n *\tfn desaturate( color:vec3<f32> ) -> vec3<f32> {\n *\t\tlet lum = vec3<f32>( 0.299, 0.587, 0.114 );\n *\t\treturn vec3<f32>( dot( lum, color ) );\n *\t}`\n *);\n * const someWGSLFn = wgslFn( `\n *\tfn someFn( color:vec3<f32> ) -> vec3<f32> {\n * \t\treturn desaturate( color );\n * \t}\n * `, [ desaturateWGSLFn ] );\n * material.colorNode = someWGSLFn( { color: texture( map ) } );\n *```\n * @augments CodeNode\n */\nclass FunctionNode extends CodeNode {\n\n\tstatic get type() {\n\n\t\treturn 'FunctionNode';\n\n\t}\n\n\t/**\n\t * Constructs a new function node.\n\t *\n\t * @param {string} [code=''] - The native code.\n\t * @param {Array<Node>} [includes=[]] - An array of includes.\n\t * @param {('js'|'wgsl'|'glsl')} [language=''] - The used language.\n\t */\n\tconstructor( code = '', includes = [], language = '' ) {\n\n\t\tsuper( code, includes, language );\n\n\t}\n\n\t/**\n\t * Returns the type of this function node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.getNodeFunction( builder ).type;\n\n\t}\n\n\t/**\n\t * Returns the type of a member of this function node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @param {string} name - The name of the member.\n\t * @return {string} The type of the member.\n\t */\n\tgetMemberType( builder, name ) {\n\n\t\tconst type = this.getNodeType( builder );\n\n\t\tconst structType = builder.getStructTypeNode( type );\n\n\t\treturn structType.getMemberType( builder, name );\n\n\t}\n\n\t/**\n\t * Returns the inputs of this function node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {Array<NodeFunctionInput>} The inputs.\n\t */\n\tgetInputs( builder ) {\n\n\t\treturn this.getNodeFunction( builder ).inputs;\n\n\t}\n\n\t/**\n\t * Returns the node function for this function node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {NodeFunction} The node function.\n\t */\n\tgetNodeFunction( builder ) {\n\n\t\tconst nodeData = builder.getDataFromNode( this );\n\n\t\tlet nodeFunction = nodeData.nodeFunction;\n\n\t\tif ( nodeFunction === undefined ) {\n\n\t\t\tnodeFunction = builder.parser.parseFunction( this.code );\n\n\t\t\tnodeData.nodeFunction = nodeFunction;\n\n\t\t}\n\n\t\treturn nodeFunction;\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tsuper.generate( builder );\n\n\t\tconst nodeFunction = this.getNodeFunction( builder );\n\n\t\tconst name = nodeFunction.name;\n\t\tconst type = nodeFunction.type;\n\n\t\tconst nodeCode = builder.getCodeFromNode( this, type );\n\n\t\tif ( name !== '' ) {\n\n\t\t\t// use a custom property name\n\n\t\t\tnodeCode.name = name;\n\n\t\t}\n\n\t\tconst propertyName = builder.getPropertyName( nodeCode );\n\n\t\tconst code = this.getNodeFunction( builder ).getCode( propertyName );\n\n\t\tnodeCode.code = code + '\\n';\n\n\t\tif ( output === 'property' ) {\n\n\t\t\treturn propertyName;\n\n\t\t} else {\n\n\t\t\treturn builder.format( `${ propertyName }()`, type, output );\n\n\t\t}\n\n\t}\n\n}\n\nconst nativeFn = ( code, includes = [], language = '' ) => {\n\n\tfor ( let i = 0; i < includes.length; i ++ ) {\n\n\t\tconst include = includes[ i ];\n\n\t\t// TSL Function: glslFn, wgslFn\n\n\t\tif ( typeof include === 'function' ) {\n\n\t\t\tincludes[ i ] = include.functionNode;\n\n\t\t}\n\n\t}\n\n\tconst functionNode = new FunctionNode( code, includes, language );\n\n\tconst fn = ( ...params ) => functionNode.call( ...params );\n\tfn.functionNode = functionNode;\n\n\treturn fn;\n\n};\n\nconst glslFn = ( code, includes ) => nativeFn( code, includes, 'glsl' );\nconst wgslFn = ( code, includes ) => nativeFn( code, includes, 'wgsl' );\n\n/**\n * Returns a node that represents the `z` coordinate in view space\n * for the current fragment. It's a different representation of the\n * default depth value.\n *\n * This value can be part of a computation that defines how the fog\n * density increases when moving away from the camera.\n *\n * @param {NodeBuilder} builder - The current node builder.\n * @return {Node} The viewZ node.\n */\nfunction getViewZNode( builder ) {\n\n\tlet viewZ;\n\n\tconst getViewZ = builder.context.getViewZ;\n\n\tif ( getViewZ !== undefined ) {\n\n\t\tviewZ = getViewZ( this );\n\n\t}\n\n\treturn ( viewZ || positionView.z ).negate();\n\n}\n\n/**\n * Constructs a new range factor node.\n *\n * @tsl\n * @function\n * @param {Node} near - Defines the near value.\n * @param {Node} far - Defines the far value.\n */\nconst rangeFogFactor = Fn( ( [ near, far ], builder ) => {\n\n\tconst viewZ = getViewZNode( builder );\n\n\treturn smoothstep( near, far, viewZ );\n\n} );\n\n/**\n * Represents an exponential squared fog. This type of fog gives\n * a clear view near the camera and a faster than exponentially\n * densening fog farther from the camera.\n *\n * @tsl\n * @function\n * @param {Node} density - Defines the fog density.\n */\nconst densityFogFactor = Fn( ( [ density ], builder ) => {\n\n\tconst viewZ = getViewZNode( builder );\n\n\treturn density.mul( density, viewZ, viewZ ).negate().exp().oneMinus();\n\n} );\n\n/**\n * Constructs a new height fog factor node. This fog factor requires a Y-up coordinate system.\n *\n * @tsl\n * @function\n * @param {Node} density - Defines the fog density.\n * @param {Node} height - The height threshold in world space. Everything below this y-coordinate is affected by fog.\n */\nconst exponentialHeightFogFactor = Fn( ( [ density, height ], builder ) => {\n\n\tconst viewZ = getViewZNode( builder );\n\n\tconst distance = height.sub( positionWorld.y ).max( 0 ).toConst();\n\tconst m = distance.mul( viewZ ).toConst();\n\n\treturn density.mul( density, m, m ).negate().exp().oneMinus();\n\n} );\n\n/**\n * This class can be used to configure a fog for the scene.\n * Nodes of this type are assigned to `Scene.fogNode`.\n *\n * @tsl\n * @function\n * @param {Node} color - Defines the color of the fog.\n * @param {Node} factor - Defines how the fog is factored in the scene.\n */\nconst fog = Fn( ( [ color, factor ] ) => {\n\n\treturn vec4( factor.toFloat().mix( output.rgb, color.toVec3() ), output.a );\n\n} );\n\nlet min = null;\nlet max = null;\n\n/**\n * `RangeNode` generates random instanced attribute data in a defined range.\n * An exemplary use case for this utility node is to generate random per-instance\n * colors:\n * ```js\n * const material = new MeshBasicNodeMaterial();\n * material.colorNode = range( new Color( 0x000000 ), new Color( 0xFFFFFF ) );\n * const mesh = new InstancedMesh( geometry, material, count );\n * ```\n * @augments Node\n */\nclass RangeNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'RangeNode';\n\n\t}\n\n\t/**\n\t * Constructs a new range node.\n\t *\n\t * @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.\n\t * @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.\n\t */\n\tconstructor( minNode = float(), maxNode = float() ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t *  A node defining the lower bound of the range.\n\t\t *\n\t\t * @type {Node<any>}\n\t\t * @default float()\n\t\t */\n\t\tthis.minNode = minNode;\n\n\t\t/**\n\t\t *  A node defining the upper bound of the range.\n\t\t *\n\t\t * @type {Node<any>}\n\t\t * @default float()\n\t\t */\n\t\tthis.maxNode = maxNode;\n\n\t}\n\n\t/**\n\t * Returns the vector length which is computed based on the range definition.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {number} The vector length.\n\t */\n\tgetVectorLength( builder ) {\n\n\t\tconst minNode = this.getConstNode( this.minNode );\n\t\tconst maxNode = this.getConstNode( this.maxNode );\n\n\t\tconst minLength = builder.getTypeLength( getValueType( minNode.value ) );\n\t\tconst maxLength = builder.getTypeLength( getValueType( maxNode.value ) );\n\n\t\treturn minLength > maxLength ? minLength : maxLength;\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is inferred from range definition.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';\n\n\t}\n\n\t/**\n\t * Returns a constant node from the given node by traversing it.\n\t *\n\t * @param {Node} node - The node to traverse.\n\t * @returns {Node} The constant node, if found.\n\t */\n\tgetConstNode( node ) {\n\n\t\tlet output = null;\n\n\t\tnode.traverse( n => {\n\n\t\t\tif ( n.isConstNode === true ) {\n\n\t\t\t\toutput = n;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( output === null ) {\n\n\t\t\tthrow new NodeError( 'THREE.TSL: No \"ConstNode\" found in node graph.', this.stackTrace );\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst object = builder.object;\n\n\t\tlet output = null;\n\n\t\tif ( object.count > 1 ) {\n\n\t\t\tconst minNode = this.getConstNode( this.minNode );\n\t\t\tconst maxNode = this.getConstNode( this.maxNode );\n\n\t\t\tconst minValue = minNode.value;\n\t\t\tconst maxValue = maxNode.value;\n\n\t\t\tconst minLength = builder.getTypeLength( getValueType( minValue ) );\n\t\t\tconst maxLength = builder.getTypeLength( getValueType( maxValue ) );\n\n\t\t\tmin = min || new Vector4();\n\t\t\tmax = max || new Vector4();\n\n\t\t\tmin.setScalar( 0 );\n\t\t\tmax.setScalar( 0 );\n\n\t\t\tif ( minLength === 1 ) min.setScalar( minValue );\n\t\t\telse if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b, 1 );\n\t\t\telse min.set( minValue.x, minValue.y, minValue.z || 0, minValue.w || 0 );\n\n\t\t\tif ( maxLength === 1 ) max.setScalar( maxValue );\n\t\t\telse if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b, 1 );\n\t\t\telse max.set( maxValue.x, maxValue.y, maxValue.z || 0, maxValue.w || 0 );\n\n\t\t\tconst stride = 4;\n\n\t\t\tconst length = stride * object.count;\n\t\t\tconst array = new Float32Array( length );\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tconst index = i % stride;\n\n\t\t\t\tconst minElementValue = min.getComponent( index );\n\t\t\t\tconst maxElementValue = max.getComponent( index );\n\n\t\t\t\tarray[ i ] = MathUtils.lerp( minElementValue, maxElementValue, Math.random() );\n\n\t\t\t}\n\n\t\t\tconst nodeType = this.getNodeType( builder );\n\t\t\tconst uniformBufferSize = object.count * 4 * 4; // count * 4 components * 4 bytes (float)\n\n\t\t\tif ( uniformBufferSize <= builder.getUniformBufferLimit() ) {\n\n\t\t\t\toutput = buffer( array, 'vec4', object.count ).element( instanceIndex ).convert( nodeType );\n\n\t\t\t} else {\n\n\t\t\t\t// TODO: Improve anonymous buffer attribute creation removing this part\n\t\t\t\tconst bufferAttribute = new InstancedBufferAttribute( array, 4 );\n\t\t\t\tbuilder.geometry.setAttribute( '__range' + this.id, bufferAttribute );\n\n\t\t\t\toutput = instancedBufferAttribute( bufferAttribute ).convert( nodeType );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\toutput = float( 0 );\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a range node.\n *\n * @tsl\n * @function\n * @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.\n * @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.\n * @returns {RangeNode}\n */\nconst range = /*@__PURE__*/ nodeProxy( RangeNode ).setParameterLength( 2 );\n\n/**\n * `ComputeBuiltinNode` represents a compute-scope builtin value that expose information\n * about the currently running dispatch and/or the device it is running on.\n *\n * This node can only be used with a WebGPU backend.\n *\n * @augments Node\n */\nclass ComputeBuiltinNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ComputeBuiltinNode';\n\n\t}\n\n\t/**\n\t * Constructs a new compute builtin node.\n\t *\n\t * @param {string} builtinName - The built-in name.\n\t * @param {string} nodeType - The node type.\n\t */\n\tconstructor( builtinName, nodeType ) {\n\n\t\tsuper( nodeType );\n\n\t\t/**\n\t\t * The built-in name.\n\t\t *\n\t\t * @private\n\t\t * @type {string}\n\t\t */\n\t\tthis._builtinName = builtinName;\n\n\t}\n\n\t/**\n\t * This method is overwritten since hash is derived from the built-in name.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The hash.\n\t */\n\tgetHash( builder ) {\n\n\t\treturn this.getBuiltinName( builder );\n\n\t}\n\n\t/**\n\t * This method is overwritten since the node type is simply derived from `nodeType`..\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( /*builder*/ ) {\n\n\t\treturn this.nodeType;\n\n\t}\n\n\t/**\n\t * Sets the builtin name.\n\t *\n\t * @param {string} builtinName - The built-in name.\n\t * @return {ComputeBuiltinNode} A reference to this node.\n\t */\n\tsetBuiltinName( builtinName ) {\n\n\t\tthis._builtinName = builtinName;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the builtin name.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The builtin name.\n\t */\n\tgetBuiltinName( /*builder*/ ) {\n\n\t\treturn this._builtinName;\n\n\t}\n\n\t/**\n\t * Whether the current node builder has the builtin or not.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {boolean} Whether the builder has the builtin or not.\n\t */\n\thasBuiltin( builder ) {\n\n\t\treturn builder.hasBuiltin( this._builtinName );\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst builtinName = this.getBuiltinName( builder );\n\t\tconst nodeType = this.getNodeType( builder );\n\n\t\tif ( builder.shaderStage === 'compute' ) {\n\n\t\t\treturn builder.format( builtinName, nodeType, output );\n\n\t\t} else {\n\n\t\t\twarn( `ComputeBuiltinNode: Compute built-in value ${builtinName} can not be accessed in the ${builder.shaderStage} stage` );\n\t\t\treturn builder.generateConst( nodeType );\n\n\t\t}\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.global = this.global;\n\t\tdata._builtinName = this._builtinName;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.global = data.global;\n\t\tthis._builtinName = data._builtinName;\n\n\t}\n\n}\n\n/**\n * TSL function for creating a compute builtin node.\n *\n * @tsl\n * @function\n * @param {string} name - The built-in name.\n * @param {string} nodeType - The node type.\n * @returns {ComputeBuiltinNode}\n */\nconst computeBuiltin = ( name, nodeType ) => new ComputeBuiltinNode( name, nodeType );\n\n/**\n * Represents the number of workgroups dispatched by the compute shader.\n * ```js\n * // Run 512 invocations/threads with a workgroup size of 128.\n * const computeFn = Fn(() => {\n *\n *     // numWorkgroups.x = 4\n *     storageBuffer.element(0).assign(numWorkgroups.x)\n *\n * })().compute(512, [128]);\n *\n * // Run 512 invocations/threads with the default workgroup size of 64.\n * const computeFn = Fn(() => {\n *\n *     // numWorkgroups.x = 8\n *     storageBuffer.element(0).assign(numWorkgroups.x)\n *\n * })().compute(512);\n * ```\n *\n * @tsl\n * @type {ComputeBuiltinNode<uvec3>}\n */\nconst numWorkgroups = /*@__PURE__*/ computeBuiltin( 'numWorkgroups', 'uvec3' );\n\n/**\n * Represents the 3-dimensional index of the workgroup the current compute invocation belongs to.\n * ```js\n * // Execute 12 compute threads with a workgroup size of 3.\n * const computeFn = Fn( () => {\n *\n * \tIf( workgroupId.x.mod( 2 ).equal( 0 ), () => {\n *\n * \t\tstorageBuffer.element( instanceIndex ).assign( instanceIndex );\n *\n * \t} ).Else( () => {\n *\n * \t\tstorageBuffer.element( instanceIndex ).assign( 0 );\n *\n * \t} );\n *\n * } )().compute( 12, [ 3 ] );\n *\n * // workgroupId.x =  [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3];\n * // Buffer Output =  [0, 1, 2, 0, 0, 0, 6, 7, 8, 0, 0, 0];\n * ```\n *\n * @tsl\n * @type {ComputeBuiltinNode<uvec3>}\n */\nconst workgroupId = /*@__PURE__*/ computeBuiltin( 'workgroupId', 'uvec3' );\n\n/**\n * A non-linearized 3-dimensional representation of the current invocation's position within a 3D global grid.\n *\n * @tsl\n * @type {ComputeBuiltinNode<uvec3>}\n */\nconst globalId = /*@__PURE__*/ computeBuiltin( 'globalId', 'uvec3' );\n/**\n * A non-linearized 3-dimensional representation of the current invocation's position within a 3D workgroup grid.\n *\n * @tsl\n * @type {ComputeBuiltinNode<uvec3>}\n */\nconst localId = /*@__PURE__*/ computeBuiltin( 'localId', 'uvec3' );\n\n/**\n * A device dependent variable that exposes the size of the current invocation's subgroup.\n *\n * @tsl\n * @type {ComputeBuiltinNode<uint>}\n */\nconst subgroupSize = /*@__PURE__*/ computeBuiltin( 'subgroupSize', 'uint' );\n\n/**\n * Represents a GPU control barrier that synchronizes compute operations within a given scope.\n *\n * This node can only be used with a WebGPU backend.\n *\n * @augments Node\n */\nclass BarrierNode extends Node {\n\n\t/**\n\t * Constructs a new barrier node.\n\t *\n\t * @param {string} scope - The scope defines the behavior of the node.\n\t */\n\tconstructor( scope ) {\n\n\t\tsuper();\n\n\t\tthis.scope = scope;\n\n\t\tthis.isBarrierNode = true;\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tbuilder.allowEarlyReturns = false;\n\t\tbuilder.allowGlobalVariables = false;\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst { scope } = this;\n\t\tconst { renderer } = builder;\n\n\t\tif ( renderer.backend.isWebGLBackend === true ) {\n\n\t\t\tbuilder.addFlowCode( `\\t// ${scope}Barrier \\n` );\n\n\t\t} else {\n\n\t\t\tbuilder.addLineFlowCode( `${scope}Barrier()`, this );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * TSL function for creating a barrier node.\n *\n * @tsl\n * @function\n * @param {string} scope - The scope defines the behavior of the node..\n * @returns {BarrierNode}\n */\nconst barrier = nodeProxy( BarrierNode );\n\n/**\n * TSL function for creating a workgroup barrier. All compute shader\n * invocations must wait for each invocation within a workgroup to\n * complete before the barrier can be surpassed.\n *\n * @tsl\n * @function\n * @returns {BarrierNode}\n */\nconst workgroupBarrier = () => barrier( 'workgroup' ).toStack();\n\n/**\n * TSL function for creating a storage barrier. All invocations must\n * wait for each access to variables within the 'storage' address space\n * to complete before the barrier can be passed.\n *\n * @tsl\n * @function\n * @returns {BarrierNode}\n */\nconst storageBarrier = () => barrier( 'storage' ).toStack();\n\n/**\n * TSL function for creating a texture barrier. All invocations must\n * wait for each access to variables within the 'texture' address space\n * to complete before the barrier can be passed.\n *\n * @tsl\n * @function\n * @returns {BarrierNode}\n */\nconst textureBarrier = () => barrier( 'texture' ).toStack();\n\n/**\n * Represents an element of a 'workgroup' scoped buffer.\n *\n * @augments ArrayElementNode\n */\nclass WorkgroupInfoElementNode extends ArrayElementNode {\n\n\t/**\n\t * Constructs a new workgroup info element node.\n\t *\n\t * @param {Node} workgroupInfoNode - The workgroup info node.\n\t * @param {Node} indexNode - The index node that defines the element access.\n\t */\n\tconstructor( workgroupInfoNode, indexNode ) {\n\n\t\tsuper( workgroupInfoNode, indexNode );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWorkgroupInfoElementNode = true;\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tlet snippet;\n\n\t\tconst isAssignContext = builder.context.assign;\n\t\tsnippet = super.generate( builder );\n\n\t\tif ( isAssignContext !== true ) {\n\n\t\t\tconst type = this.getNodeType( builder );\n\n\t\t\tsnippet = builder.format( snippet, type, output );\n\n\t\t}\n\n\t\t// TODO: Possibly activate clip distance index on index access rather than from clipping context\n\n\t\treturn snippet;\n\n\t}\n\n}\n\n/**\n * A node allowing the user to create a 'workgroup' scoped buffer within the\n * context of a compute shader. Typically, workgroup scoped buffers are\n * created to hold data that is transferred from a global storage scope into\n * a local workgroup scope. For invocations within a workgroup, data\n * access speeds on 'workgroup' scoped buffers can be significantly faster\n * than similar access operations on globally accessible storage buffers.\n *\n * This node can only be used with a WebGPU backend.\n *\n * @augments Node\n */\nclass WorkgroupInfoNode extends Node {\n\n\t/**\n\t * Constructs a new buffer scoped to type scope.\n\t *\n\t * @param {string} scope - TODO.\n\t * @param {string} bufferType - The data type of a 'workgroup' scoped buffer element.\n\t * @param {number} [bufferCount=0] - The number of elements in the buffer.\n\t */\n\tconstructor( scope, bufferType, bufferCount = 0 ) {\n\n\t\tsuper( bufferType );\n\n\t\t/**\n\t\t * The buffer type.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.bufferType = bufferType;\n\n\t\t/**\n\t\t * The buffer count.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.bufferCount = bufferCount;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWorkgroupInfoNode = true;\n\n\t\t/**\n\t\t * The data type of the array buffer.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.elementType = bufferType;\n\n\t\t/**\n\t\t * TODO.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.scope = scope;\n\n\t\t/**\n\t\t * The name of the workgroup scoped buffer.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.name = '';\n\n\t}\n\n\t/**\n\t * Sets the name of this node.\n\t *\n\t * @param {string} name - The name to set.\n\t * @return {WorkgroupInfoNode} A reference to this node.\n\t */\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the name/label of this node.\n\t *\n\t * @deprecated\n\t * @param {string} name - The name to set.\n\t * @return {WorkgroupInfoNode} A reference to this node.\n\t */\n\tlabel( name ) {\n\n\t\twarn( 'TSL: \"label()\" has been deprecated. Use \"setName()\" instead.', new StackTrace() ); // @deprecated r179\n\n\t\treturn this.setName( name );\n\n\t}\n\n\t/**\n\t * Sets the scope of this node.\n\t *\n\t * @param {string} scope - The scope to set.\n\t * @return {WorkgroupInfoNode} A reference to this node.\n\t */\n\tsetScope( scope ) {\n\n\t\tthis.scope = scope;\n\n\t\treturn this;\n\n\t}\n\n\n\t/**\n\t * The data type of the array buffer.\n\t *\n\t * @return {string} The element type.\n\t */\n\tgetElementType() {\n\n\t\treturn this.elementType;\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation since the input type\n\t * is inferred from the scope.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( /*builder*/ ) {\n\n\t\treturn `${this.scope}Array`;\n\n\t}\n\n\t/**\n\t * This method can be used to access elements via an index node.\n\t *\n\t * @param {IndexNode} indexNode - indexNode.\n\t * @return {WorkgroupInfoElementNode} A reference to an element.\n\t */\n\telement( indexNode ) {\n\n\t\treturn new WorkgroupInfoElementNode( this, indexNode );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst name = ( this.name !== '' ) ? this.name : `${this.scope}Array_${this.id}`;\n\n\t\treturn builder.getScopedArray( name, this.scope.toLowerCase(), this.bufferType, this.bufferCount );\n\n\t}\n\n}\n\n/**\n * TSL function for creating a workgroup info node.\n * Creates a new 'workgroup' scoped array buffer.\n *\n * @tsl\n * @function\n * @param {string} type - The data type of a 'workgroup' scoped buffer element.\n * @param {number} [count=0] - The number of elements in the buffer.\n * @returns {WorkgroupInfoNode}\n */\nconst workgroupArray = ( type, count ) => new WorkgroupInfoNode( 'Workgroup', type, count );\n\n/**\n * `AtomicFunctionNode` represents any function that can operate on atomic variable types\n * within a shader. In an atomic function, any modification to an atomic variable will\n * occur as an indivisible step with a defined order relative to other modifications.\n * Accordingly, even if multiple atomic functions are modifying an atomic variable at once\n * atomic operations will not interfere with each other.\n *\n * This node can only be used with a WebGPU backend.\n *\n * @augments Node\n */\nclass AtomicFunctionNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'AtomicFunctionNode';\n\n\t}\n\n\t/**\n\t * Constructs a new atomic function node.\n\t *\n\t * @param {string} method - The signature of the atomic function to construct.\n\t * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n\t * @param {Node} valueNode - The value that mutates the atomic variable.\n\t */\n\tconstructor( method, pointerNode, valueNode ) {\n\n\t\tsuper( 'uint' );\n\n\t\t/**\n\t\t * The signature of the atomic function to construct.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.method = method;\n\n\t\t/**\n\t\t * An atomic variable or element of an atomic buffer.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.pointerNode = pointerNode;\n\n\t\t/**\n\t\t * A value that modifies the atomic variable.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.valueNode = valueNode;\n\n\t\t/**\n\t\t * Creates a list of the parents for this node for detecting if the node needs to return a value.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.parents = true;\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to return the type of\n\t * the pointer node.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The input type.\n\t */\n\tgetInputType( builder ) {\n\n\t\treturn this.pointerNode.getNodeType( builder );\n\n\t}\n\n\t/**\n\t * Overwritten since the node type is inferred from the input type.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {string} The node type.\n\t */\n\tgenerateNodeType( builder ) {\n\n\t\treturn this.getInputType( builder );\n\n\t}\n\n\tgenerate( builder ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tconst parents = properties.parents;\n\n\t\tconst method = this.method;\n\n\t\tconst type = this.getNodeType( builder );\n\t\tconst inputType = this.getInputType( builder );\n\n\t\tconst a = this.pointerNode;\n\t\tconst b = this.valueNode;\n\n\t\tconst params = [];\n\n\t\tparams.push( `&${ a.build( builder, inputType ) }` );\n\n\t\tif ( b !== null ) {\n\n\t\t\tparams.push( b.build( builder, inputType ) );\n\n\n\t\t}\n\n\t\tconst methodSnippet = `${ builder.getMethod( method, type ) }( ${ params.join( ', ' ) } )`;\n\t\tconst isVoid = parents ? ( parents.length === 1 && parents[ 0 ].isStackNode === true ) : false;\n\n\t\tif ( isVoid ) {\n\n\t\t\tbuilder.addLineFlowCode( methodSnippet, this );\n\n\t\t} else {\n\n\t\t\tif ( properties.constNode === undefined ) {\n\n\t\t\t\tproperties.constNode = expression( methodSnippet, type ).toConst();\n\n\t\t\t}\n\n\t\t\treturn properties.constNode.build( builder );\n\n\t\t}\n\n\t}\n\n}\n\nAtomicFunctionNode.ATOMIC_LOAD = 'atomicLoad';\nAtomicFunctionNode.ATOMIC_STORE = 'atomicStore';\nAtomicFunctionNode.ATOMIC_ADD = 'atomicAdd';\nAtomicFunctionNode.ATOMIC_SUB = 'atomicSub';\nAtomicFunctionNode.ATOMIC_MAX = 'atomicMax';\nAtomicFunctionNode.ATOMIC_MIN = 'atomicMin';\nAtomicFunctionNode.ATOMIC_AND = 'atomicAnd';\nAtomicFunctionNode.ATOMIC_OR = 'atomicOr';\nAtomicFunctionNode.ATOMIC_XOR = 'atomicXor';\n\n/**\n * TSL function for creating an atomic function node.\n *\n * @tsl\n * @function\n * @param {string} method - The signature of the atomic function to construct.\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicNode = nodeProxy( AtomicFunctionNode );\n\n/**\n * TSL function for appending an atomic function call into the programmatic flow of a compute shader.\n *\n * @tsl\n * @function\n * @param {string} method - The signature of the atomic function to construct.\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicFunc = ( method, pointerNode, valueNode ) => {\n\n\treturn atomicNode( method, pointerNode, valueNode ).toStack();\n\n};\n\n/**\n * Loads the value stored in the atomic variable.\n *\n * @tsl\n * @function\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @returns {AtomicFunctionNode}\n */\nconst atomicLoad = ( pointerNode ) => atomicFunc( AtomicFunctionNode.ATOMIC_LOAD, pointerNode, null );\n\n/**\n * Stores a value in the atomic variable.\n *\n * @tsl\n * @function\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicStore = ( pointerNode, valueNode ) => atomicFunc( AtomicFunctionNode.ATOMIC_STORE, pointerNode, valueNode );\n\n/**\n * Increments the value stored in the atomic variable.\n *\n * @tsl\n * @function\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicAdd = ( pointerNode, valueNode ) => atomicFunc( AtomicFunctionNode.ATOMIC_ADD, pointerNode, valueNode );\n\n/**\n * Decrements the value stored in the atomic variable.\n *\n * @tsl\n * @function\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicSub = ( pointerNode, valueNode ) => atomicFunc( AtomicFunctionNode.ATOMIC_SUB, pointerNode, valueNode );\n\n/**\n * Stores in an atomic variable the maximum between its current value and a parameter.\n *\n * @tsl\n * @function\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicMax = ( pointerNode, valueNode ) => atomicFunc( AtomicFunctionNode.ATOMIC_MAX, pointerNode, valueNode );\n\n/**\n * Stores in an atomic variable the minimum between its current value and a parameter.\n *\n * @tsl\n * @function\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicMin = ( pointerNode, valueNode ) => atomicFunc( AtomicFunctionNode.ATOMIC_MIN, pointerNode, valueNode );\n\n/**\n * Stores in an atomic variable the bitwise AND of its value with a parameter.\n *\n * @tsl\n * @function\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicAnd = ( pointerNode, valueNode ) => atomicFunc( AtomicFunctionNode.ATOMIC_AND, pointerNode, valueNode );\n\n/**\n * Stores in an atomic variable the bitwise OR of its value with a parameter.\n *\n * @tsl\n * @function\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicOr = ( pointerNode, valueNode ) => atomicFunc( AtomicFunctionNode.ATOMIC_OR, pointerNode, valueNode );\n\n/**\n * Stores in an atomic variable the bitwise XOR of its value with a parameter.\n *\n * @tsl\n * @function\n * @param {Node} pointerNode - An atomic variable or element of an atomic buffer.\n * @param {Node} valueNode - The value that mutates the atomic variable.\n * @returns {AtomicFunctionNode}\n */\nconst atomicXor = ( pointerNode, valueNode ) => atomicFunc( AtomicFunctionNode.ATOMIC_XOR, pointerNode, valueNode );\n\n/**\n * This class represents a set of built in WGSL shader functions that sync\n * synchronously execute an operation across a subgroup, or 'warp', of compute\n * or fragment shader invocations within a workgroup. Typically, these functions\n * will synchronously execute an operation using data from all active invocations\n * within the subgroup, then broadcast that result to all active invocations. In\n * other graphics APIs, subgroup functions are also referred to as wave intrinsics\n * (DirectX/HLSL) or warp intrinsics (CUDA).\n *\n * @augments TempNode\n */\nclass SubgroupFunctionNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'SubgroupFunctionNode';\n\n\t}\n\n\t/**\n\t * Constructs a new function node.\n\t *\n\t * @param {string} method - The subgroup/wave intrinsic method to construct.\n\t * @param {Node} [aNode=null] - The method's first argument.\n\t * @param {Node} [bNode=null] - The method's second argument.\n\t */\n\tconstructor( method, aNode = null, bNode = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The subgroup/wave intrinsic method to construct.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.method = method;\n\n\t\t/**\n\t\t * The method's first argument.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.aNode = aNode;\n\n\t\t/**\n\t\t * The method's second argument.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.bNode = bNode;\n\n\t}\n\n\tgetInputType( builder ) {\n\n\t\tconst aType = this.aNode ? this.aNode.getNodeType( builder ) : null;\n\t\tconst bType = this.bNode ? this.bNode.getNodeType( builder ) : null;\n\n\t\tconst aLen = builder.isMatrix( aType ) ? 0 : builder.getTypeLength( aType );\n\t\tconst bLen = builder.isMatrix( bType ) ? 0 : builder.getTypeLength( bType );\n\n\t\tif ( aLen > bLen ) {\n\n\t\t\treturn aType;\n\n\t\t} else {\n\n\t\t\treturn bType;\n\n\t\t}\n\n\t}\n\n\tgenerateNodeType( builder ) {\n\n\t\tconst method = this.method;\n\n\t\tif ( method === SubgroupFunctionNode.SUBGROUP_ELECT ) {\n\n\t\t\treturn 'bool';\n\n\t\t} else if ( method === SubgroupFunctionNode.SUBGROUP_BALLOT ) {\n\n\t\t\treturn 'uvec4';\n\n\t\t} else {\n\n\t\t\treturn this.getInputType( builder );\n\n\t\t}\n\n\t}\n\n\tgenerate( builder, output ) {\n\n\t\tconst method = this.method;\n\n\t\tconst type = this.getNodeType( builder );\n\t\tconst inputType = this.getInputType( builder );\n\n\t\tconst a = this.aNode;\n\t\tconst b = this.bNode;\n\n\t\tconst params = [];\n\n\t\tif (\n\t\t\tmethod === SubgroupFunctionNode.SUBGROUP_BROADCAST ||\n\t\t\tmethod === SubgroupFunctionNode.SUBGROUP_SHUFFLE ||\n\t\t\tmethod === SubgroupFunctionNode.QUAD_BROADCAST\n\t\t) {\n\n\t\t\tconst bType = b.getNodeType( builder );\n\n\t\t\tparams.push(\n\t\t\t\ta.build( builder, type ),\n\t\t\t\tb.build( builder, bType === 'float' ? 'int' : type )\n\t\t\t);\n\n\t\t} else if (\n\t\t\tmethod === SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ||\n\t\t\tmethod === SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ||\n\t\t\tmethod === SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP\n\t\t) {\n\n\t\t\tparams.push(\n\t\t\t\ta.build( builder, type ),\n\t\t\t\tb.build( builder, 'uint' )\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tif ( a !== null ) params.push( a.build( builder, inputType ) );\n\t\t\tif ( b !== null ) params.push( b.build( builder, inputType ) );\n\n\t\t}\n\n\t\tconst paramsString = params.length === 0 ? '()' : `( ${params.join( ', ' )} )`;\n\n\t\treturn builder.format( `${ builder.getMethod( method, type ) }${paramsString}`, type, output );\n\n\n\n\t}\n\n\tserialize( data ) {\n\n\t\tsuper.serialize( data );\n\n\t\tdata.method = this.method;\n\n\t}\n\n\tdeserialize( data ) {\n\n\t\tsuper.deserialize( data );\n\n\t\tthis.method = data.method;\n\n\t}\n\n}\n\n// 0 inputs\nSubgroupFunctionNode.SUBGROUP_ELECT = 'subgroupElect';\n\n// 1 input\nSubgroupFunctionNode.SUBGROUP_BALLOT = 'subgroupBallot';\nSubgroupFunctionNode.SUBGROUP_ADD = 'subgroupAdd';\nSubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD = 'subgroupInclusiveAdd';\nSubgroupFunctionNode.SUBGROUP_EXCLUSIVE_AND = 'subgroupExclusiveAdd';\nSubgroupFunctionNode.SUBGROUP_MUL = 'subgroupMul';\nSubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL = 'subgroupInclusiveMul';\nSubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL = 'subgroupExclusiveMul';\nSubgroupFunctionNode.SUBGROUP_AND = 'subgroupAnd';\nSubgroupFunctionNode.SUBGROUP_OR = 'subgroupOr';\nSubgroupFunctionNode.SUBGROUP_XOR = 'subgroupXor';\nSubgroupFunctionNode.SUBGROUP_MIN = 'subgroupMin';\nSubgroupFunctionNode.SUBGROUP_MAX = 'subgroupMax';\nSubgroupFunctionNode.SUBGROUP_ALL = 'subgroupAll';\nSubgroupFunctionNode.SUBGROUP_ANY = 'subgroupAny';\nSubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST = 'subgroupBroadcastFirst';\nSubgroupFunctionNode.QUAD_SWAP_X = 'quadSwapX';\nSubgroupFunctionNode.QUAD_SWAP_Y = 'quadSwapY';\nSubgroupFunctionNode.QUAD_SWAP_DIAGONAL = 'quadSwapDiagonal';\n\n// 2 inputs\nSubgroupFunctionNode.SUBGROUP_BROADCAST = 'subgroupBroadcast';\nSubgroupFunctionNode.SUBGROUP_SHUFFLE = 'subgroupShuffle';\nSubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR = 'subgroupShuffleXor';\nSubgroupFunctionNode.SUBGROUP_SHUFFLE_UP = 'subgroupShuffleUp';\nSubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN = 'subgroupShuffleDown';\nSubgroupFunctionNode.QUAD_BROADCAST = 'quadBroadcast';\n\n\n\n/**\n * Returns true if this invocation has the lowest subgroup_invocation_id\n * among active invocations in the subgroup.\n *\n * @tsl\n * @method\n * @return {bool} The result of the computation.\n */\nconst subgroupElect = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ELECT ).setParameterLength( 0 );\n\n/**\n * Returns a set of bitfields where the bit corresponding to subgroup_invocation_id\n * is 1 if pred is true for that active invocation and 0 otherwise.\n *\n * @tsl\n * @method\n * @param {bool} pred - A boolean that sets the bit corresponding to the invocations subgroup invocation id.\n * @return {vec4<u32>}- A bitfield corresponding to the pred value of each subgroup invocation.\n */\nconst subgroupBallot = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BALLOT ).setParameterLength( 1 );\n\n/**\n * A reduction that adds e among all active invocations and returns that result.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the reduction by the current invocation.\n * @return {number} The accumulated result of the reduction operation.\n */\nconst subgroupAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ADD ).setParameterLength( 1 );\n\n/**\n * An inclusive scan returning the sum of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the inclusive scan by the current invocation.\n * @return {number} The accumulated result of the inclusive scan operation.\n */\nconst subgroupInclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_ADD ).setParameterLength( 1 );\n\n/**\n * An exclusive scan that returns the sum of e for all active invocations with subgroup_invocation_id less than this invocation.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the exclusive scan by the current invocation.\n * @return {number} The accumulated result of the exclusive scan operation.\n */\nconst subgroupExclusiveAdd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_AND ).setParameterLength( 1 );\n\n/**\n * A reduction that multiplies e among all active invocations and returns that result.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the reduction by the current invocation.\n * @return {number} The accumulated result of the reduction operation.\n */\nconst subgroupMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MUL ).setParameterLength( 1 );\n\n/**\n * An inclusive scan returning the product of e for all active invocations with subgroup_invocation_id less than or equal to this invocation.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the inclusive scan by the current invocation.\n * @return {number} The accumulated result of the inclusive scan operation.\n */\nconst subgroupInclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_INCLUSIVE_MUL ).setParameterLength( 1 );\n\n/**\n * An exclusive scan that returns the product of e for all active invocations with subgroup_invocation_id less than this invocation.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the exclusive scan by the current invocation.\n * @return {number} The accumulated result of the exclusive scan operation.\n */\nconst subgroupExclusiveMul = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_EXCLUSIVE_MUL ).setParameterLength( 1 );\n\n/**\n * A reduction that performs a bitwise and of e among all active invocations and returns that result.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the reduction by the current invocation.\n * @return {number} The result of the reduction operation.\n */\nconst subgroupAnd = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_AND ).setParameterLength( 1 );\n\n/**\n * A reduction that performs a bitwise or of e among all active invocations and returns that result.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the reduction by the current invocation.\n * @return {number} The result of the reduction operation.\n */\nconst subgroupOr = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_OR ).setParameterLength( 1 );\n\n/**\n * A reduction that performs a bitwise xor of e among all active invocations and returns that result.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the reduction by the current invocation.\n * @return {number} The result of the reduction operation.\n */\nconst subgroupXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_XOR ).setParameterLength( 1 );\n\n/**\n * A reduction that performs a min of e among all active invocations and returns that result.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the reduction by the current invocation.\n * @return {number} The result of the reduction operation.\n */\nconst subgroupMin = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MIN ).setParameterLength( 1 );\n\n/**\n * A reduction that performs a max of e among all active invocations and returns that result.\n *\n * @tsl\n * @method\n * @param {number} e - The value provided to the reduction by the current invocation.\n * @return {number} The result of the reduction operation.\n */\nconst subgroupMax = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_MAX ).setParameterLength( 1 );\n\n/**\n * Returns true if e is true for all active invocations in the subgroup.\n *\n * @tsl\n * @method\n * @return {bool} The result of the computation.\n */\nconst subgroupAll = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ALL ).setParameterLength( 0 );\n\n/**\n * Returns true if e is true for any active invocation in the subgroup\n *\n * @tsl\n * @method\n * @return {bool} The result of the computation.\n */\nconst subgroupAny = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_ANY ).setParameterLength( 0 );\n\n/**\n * Broadcasts e from the active invocation with the lowest subgroup_invocation_id in the subgroup to all other active invocations.\n *\n * @tsl\n * @method\n * @param {number} e - The value to broadcast from the lowest subgroup invocation.\n * @param {number} id - The subgroup invocation to broadcast from.\n * @return {number} The broadcast value.\n */\nconst subgroupBroadcastFirst = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST_FIRST ).setParameterLength( 2 );\n\n/**\n * Swaps e between invocations in the quad in the X direction.\n *\n * @tsl\n * @method\n * @param {number} e - The value to swap from the current invocation.\n * @return {number} The value received from the swap operation.\n */\nconst quadSwapX = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_X ).setParameterLength( 1 );\n\n/**\n * Swaps e between invocations in the quad in the Y direction.\n *\n * @tsl\n * @method\n * @param {number} e - The value to swap from the current invocation.\n * @return {number} The value received from the swap operation.\n */\nconst quadSwapY = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_Y ).setParameterLength( 1 );\n\n/**\n * Swaps e between invocations in the quad diagonally.\n *\n * @tsl\n * @method\n * @param {number} e - The value to swap from the current invocation.\n * @return {number} The value received from the swap operation.\n */\nconst quadSwapDiagonal = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_SWAP_DIAGONAL ).setParameterLength( 1 );\n\n/**\n * Broadcasts e from the invocation whose subgroup_invocation_id matches id, to all active invocations.\n *\n * @tsl\n * @method\n * @param {number} e - The value to broadcast from subgroup invocation 'id'.\n * @param {number} id - The subgroup invocation to broadcast from.\n * @return {number} The broadcast value.\n */\nconst subgroupBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_BROADCAST ).setParameterLength( 2 );\n\n/**\n * Returns v from the active invocation whose subgroup_invocation_id matches id\n *\n * @tsl\n * @method\n * @param {number} v - The value to return from subgroup invocation id^mask.\n * @param {number} id - The subgroup invocation which returns the value v.\n * @return {number} The broadcast value.\n */\nconst subgroupShuffle = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE ).setParameterLength( 2 );\n\n/**\n * Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id ^ mask.\n *\n * @tsl\n * @method\n * @param {number} v - The value to return from subgroup invocation id^mask.\n * @param {number} mask - A bitmask that determines the target invocation via a XOR operation.\n * @return {number} The broadcast value.\n */\nconst subgroupShuffleXor = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_XOR ).setParameterLength( 2 );\n\n/**\n * Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id - delta\n *\n * @tsl\n * @method\n * @param {number} v - The value to return from subgroup invocation id^mask.\n * @param {number} delta - A value that offsets the current in.\n * @return {number} The broadcast value.\n */\nconst subgroupShuffleUp = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_UP ).setParameterLength( 2 );\n\n/**\n * Returns v from the active invocation whose subgroup_invocation_id matches subgroup_invocation_id + delta\n *\n * @tsl\n * @method\n * @param {number} v - The value to return from subgroup invocation id^mask.\n * @param {number} delta - A value that offsets the current subgroup invocation.\n * @return {number} The broadcast value.\n */\nconst subgroupShuffleDown = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.SUBGROUP_SHUFFLE_DOWN ).setParameterLength( 2 );\n\n/**\n * Broadcasts e from the quad invocation with id equal to id.\n *\n * @tsl\n * @method\n * @param {number} e - The value to broadcast.\n * @return {number} The broadcast value.\n */\nconst quadBroadcast = /*@__PURE__*/ nodeProxyIntent( SubgroupFunctionNode, SubgroupFunctionNode.QUAD_BROADCAST ).setParameterLength( 1 );\n\nlet uniformsLib;\n\nfunction getLightData( light ) {\n\n\tuniformsLib = uniformsLib || new WeakMap();\n\n\tlet uniforms = uniformsLib.get( light );\n\n\tif ( uniforms === undefined ) uniformsLib.set( light, uniforms = {} );\n\n\treturn uniforms;\n\n}\n\n/**\n * TSL function for getting a shadow matrix uniform node for the given light.\n *\n * @tsl\n * @function\n * @param {Light} light -The light source.\n * @returns {UniformNode<mat4>} The shadow matrix uniform node.\n */\nfunction lightShadowMatrix( light ) {\n\n\tconst data = getLightData( light );\n\n\treturn data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => {\n\n\t\t// normally, shadow matrices are updated in ShadowNode. However, if the shadow matrix is used outside\n\t\t// of shadow rendering (like in ProjectorLightNode), the shadow matrix still requires an update\n\n\t\tif ( light.castShadow !== true || frame.renderer.shadowMap.enabled === false ) {\n\n\t\t\tif ( light.shadow.camera.coordinateSystem !== frame.camera.coordinateSystem ) {\n\n\t\t\t\tlight.shadow.camera.coordinateSystem = frame.camera.coordinateSystem;\n\t\t\t\tlight.shadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tlight.shadow.updateMatrices( light );\n\n\t\t}\n\n\t\treturn light.shadow.matrix;\n\n\t} ) );\n\n}\n\n/**\n * TSL function for getting projected uv coordinates for the given light.\n * Relevant when using maps with spot lights.\n *\n * @tsl\n * @function\n * @param {Light} light -The light source.\n * @param {Node<vec3>} [position=positionWorld] -The position to project.\n * @returns {Node<vec3>} The projected uvs.\n */\nfunction lightProjectionUV( light, position = positionWorld ) {\n\n\tconst spotLightCoord = lightShadowMatrix( light ).mul( position );\n\tconst projectionUV = spotLightCoord.xyz.div( spotLightCoord.w );\n\n\treturn projectionUV;\n\n}\n\n/**\n * TSL function for getting the position in world space for the given light.\n *\n * @tsl\n * @function\n * @param {Light} light -The light source.\n * @returns {UniformNode<vec3>} The light's position in world space.\n */\nfunction lightPosition( light ) {\n\n\tconst data = getLightData( light );\n\n\treturn data.position || ( data.position = uniform( new Vector3() ).setGroup( renderGroup ).onRenderUpdate( ( _, self ) => self.value.setFromMatrixPosition( light.matrixWorld ) ) );\n\n}\n\n/**\n * TSL function for getting the light target position in world space for the given light.\n *\n * @tsl\n * @function\n * @param {Light} light -The light source.\n * @returns {UniformNode<vec3>} The light target position in world space.\n */\nfunction lightTargetPosition( light ) {\n\n\tconst data = getLightData( light );\n\n\treturn data.targetPosition || ( data.targetPosition = uniform( new Vector3() ).setGroup( renderGroup ).onRenderUpdate( ( _, self ) => self.value.setFromMatrixPosition( light.target.matrixWorld ) ) );\n\n}\n\n/**\n * TSL function for getting the position in view space for the given light.\n *\n * @tsl\n * @function\n * @param {Light} light - The light source.\n * @returns {UniformNode<vec3>} The light's position in view space.\n */\nfunction lightViewPosition( light ) {\n\n\tconst data = getLightData( light );\n\n\treturn data.viewPosition || ( data.viewPosition = uniform( new Vector3() ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => {\n\n\t\tself.value = self.value || new Vector3();\n\t\tself.value.setFromMatrixPosition( light.matrixWorld );\n\n\t\tself.value.applyMatrix4( camera.matrixWorldInverse );\n\n\t} ) );\n\n}\n\n/**\n * TSL function for getting the light target direction for the given light.\n *\n * @tsl\n * @function\n * @param {Light} light -The light source.\n * @returns {Node<vec3>} The light's target direction.\n */\nconst lightTargetDirection = ( light ) => cameraViewMatrix.transformDirection( lightPosition( light ).sub( lightTargetPosition( light ) ) );\n\nconst sortLights = ( lights ) => {\n\n\treturn lights.sort( ( a, b ) => a.id - b.id );\n\n};\n\nconst getLightNodeById = ( id, lightNodes ) => {\n\n\tfor ( const lightNode of lightNodes ) {\n\n\t\tif ( lightNode.isAnalyticLightNode && lightNode.light.id === id ) {\n\n\t\t\treturn lightNode;\n\n\t\t}\n\n\t}\n\n\treturn null;\n\n};\n\nconst _lightsNodeRef = /*@__PURE__*/ new WeakMap();\nconst _hashData = [];\n\n/**\n * This node represents the scene's lighting and manages the lighting model's life cycle\n * for the current build 3D object. It is responsible for computing the total outgoing\n * light in a given lighting context.\n *\n * @augments Node\n */\nclass LightsNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'LightsNode';\n\n\t}\n\n\t/**\n\t * Constructs a new lights node.\n\t */\n\tconstructor() {\n\n\t\tsuper( 'vec3' );\n\n\t\t/**\n\t\t * A node representing the total diffuse light.\n\t\t *\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis.totalDiffuseNode = property( 'vec3', 'totalDiffuse' );\n\n\t\t/**\n\t\t * A node representing the total specular light.\n\t\t *\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis.totalSpecularNode = property( 'vec3', 'totalSpecular' );\n\n\t\t/**\n\t\t * A node representing the outgoing light.\n\t\t *\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis.outgoingLightNode = property( 'vec3', 'outgoingLight' );\n\n\t\t/**\n\t\t * An array representing the lights in the scene.\n\t\t *\n\t\t * @private\n\t\t * @type {Array<Light>}\n\t\t */\n\t\tthis._lights = [];\n\n\t\t/**\n\t\t * For each light in the scene, this node will create a\n\t\t * corresponding light node.\n\t\t *\n\t\t * @private\n\t\t * @type {?Array<LightingNode>}\n\t\t * @default null\n\t\t */\n\t\tthis._lightNodes = null;\n\n\t\t/**\n\t\t * A hash for identifying the current light nodes setup.\n\t\t *\n\t\t * @private\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis._lightNodesHash = null;\n\n\t\t/**\n\t\t * `LightsNode` sets this property to `true` by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.global = true;\n\n\t}\n\n\t/**\n\t * Overwrites the default {@link Node#customCacheKey} implementation by including\n\t * light data into the cache key.\n\t *\n\t * @return {number} The custom cache key.\n\t */\n\tcustomCacheKey() {\n\n\t\tconst lights = this._lights;\n\n\t\tfor ( let i = 0; i < lights.length; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\t_hashData.push( light.id );\n\t\t\t_hashData.push( light.castShadow ? 1 : 0 );\n\n\t\t\tif ( light.isSpotLight === true ) {\n\n\t\t\t\tconst hashMap = ( light.map !== null ) ? light.map.id : -1;\n\t\t\t\tconst hashColorNode = ( light.colorNode ) ? light.colorNode.getCacheKey() : -1;\n\n\t\t\t\t_hashData.push( hashMap, hashColorNode );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst cacheKey = hashArray( _hashData );\n\n\t\t_hashData.length = 0;\n\n\t\treturn cacheKey;\n\n\t}\n\n\t/**\n\t * Computes a hash value for identifying the current light nodes setup.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @return {string} The computed hash.\n\t */\n\tgetHash( builder ) {\n\n\t\tif ( this._lightNodesHash === null ) {\n\n\t\t\tif ( this._lightNodes === null ) this.setupLightsNode( builder );\n\n\t\t\tconst hash = [];\n\n\t\t\tfor ( const lightNode of this._lightNodes ) {\n\n\t\t\t\thash.push( lightNode.getHash() );\n\n\t\t\t}\n\n\t\t\tthis._lightNodesHash = 'lights-' + hash.join( ',' );\n\n\t\t}\n\n\t\treturn this._lightNodesHash;\n\n\t}\n\n\tanalyze( builder ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\n\t\tfor ( const node of properties.nodes ) {\n\n\t\t\tnode.build( builder );\n\n\t\t}\n\n\t\tproperties.outputNode.build( builder );\n\n\t}\n\n\t/**\n\t * Creates lighting nodes for each scene light. This makes it possible to further\n\t * process lights in the node system.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t */\n\tsetupLightsNode( builder ) {\n\n\t\tconst lightNodes = [];\n\n\t\tconst previousLightNodes = this._lightNodes;\n\n\t\tconst lights = sortLights( this._lights );\n\t\tconst nodeLibrary = builder.renderer.library;\n\n\t\tfor ( const light of lights ) {\n\n\t\t\tif ( light.isNode ) {\n\n\t\t\t\tlightNodes.push( nodeObject( light ) );\n\n\t\t\t} else {\n\n\t\t\t\tlet lightNode = null;\n\n\t\t\t\tif ( previousLightNodes !== null ) {\n\n\t\t\t\t\tlightNode = getLightNodeById( light.id, previousLightNodes );\n\n\t\t\t\t}\n\n\t\t\t\tif ( lightNode === null ) {\n\n\t\t\t\t\tconst lightNodeClass = nodeLibrary.getLightNodeClass( light.constructor );\n\n\t\t\t\t\tif ( lightNodeClass === null ) {\n\n\t\t\t\t\t\twarn( `LightsNode.setupNodeLights: Light node not found for ${ light.constructor.name }` );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( _lightsNodeRef.has( light ) === false ) {\n\n\t\t\t\t\t\t_lightsNodeRef.set( light, new lightNodeClass( light ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlightNode = _lightsNodeRef.get( light );\n\n\t\t\t\t}\n\n\t\t\t\tlightNodes.push( lightNode );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._lightNodes = lightNodes;\n\n\t}\n\n\t/**\n\t * Sets up a direct light in the lighting model.\n\t *\n\t * @param {Object} builder - The builder object containing the context and stack.\n\t * @param {Object} lightNode - The light node.\n\t * @param {Object} lightData - The light object containing color and direction properties.\n\t */\n\tsetupDirectLight( builder, lightNode, lightData ) {\n\n\t\tconst { lightingModel, reflectedLight } = builder.context;\n\n\t\tlightingModel.direct( {\n\t\t\t...lightData,\n\t\t\tlightNode,\n\t\t\treflectedLight\n\t\t}, builder );\n\n\t}\n\n\tsetupDirectRectAreaLight( builder, lightNode, lightData ) {\n\n\t\tconst { lightingModel, reflectedLight } = builder.context;\n\n\t\tlightingModel.directRectArea( {\n\t\t\t...lightData,\n\t\t\tlightNode,\n\t\t\treflectedLight\n\t\t}, builder );\n\n\t}\n\n\t/**\n\t * Setups the internal lights by building all respective\n\t * light nodes.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @param {Array<LightingNode>} lightNodes - An array of lighting nodes.\n\t */\n\tsetupLights( builder, lightNodes ) {\n\n\t\tfor ( const lightNode of lightNodes ) {\n\n\t\t\tlightNode.build( builder );\n\n\t\t}\n\n\t}\n\n\tgetLightNodes( builder ) {\n\n\t\tif ( this._lightNodes === null ) this.setupLightsNode( builder );\n\n\t\treturn this._lightNodes;\n\n\t}\n\n\t/**\n\t * The implementation makes sure that for each light in the scene\n\t * there is a corresponding light node. By building the light nodes\n\t * and evaluating the lighting model the outgoing light is computed.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @return {Node<vec3>} A node representing the outgoing light.\n\t */\n\tsetup( builder ) {\n\n\t\tconst currentLightsNode = builder.lightsNode;\n\n\t\tbuilder.lightsNode = this;\n\n\t\tlet outgoingLightNode = this.outgoingLightNode;\n\n\t\tconst context = builder.context;\n\t\tconst lightingModel = context.lightingModel;\n\n\t\tconst properties = builder.getNodeProperties( this );\n\n\t\tif ( lightingModel ) {\n\n\t\t\tconst { totalDiffuseNode, totalSpecularNode } = this;\n\n\t\t\tcontext.outgoingLight = outgoingLightNode;\n\n\t\t\tconst stack = builder.addStack();\n\n\t\t\tproperties.nodes = stack.nodes;\n\n\t\t\tlightingModel.start( builder );\n\n\t\t\tconst { backdrop, backdropAlpha } = context;\n\t\t\tconst { directDiffuse, directSpecular, indirectDiffuse, indirectSpecular } = context.reflectedLight;\n\n\t\t\tlet totalDiffuse = directDiffuse.add( indirectDiffuse );\n\n\t\t\tif ( backdrop !== null ) {\n\n\t\t\t\tif ( backdropAlpha !== null ) {\n\n\t\t\t\t\ttotalDiffuse = vec3( backdropAlpha.mix( totalDiffuse, backdrop ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttotalDiffuse = vec3( backdrop );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttotalDiffuseNode.assign( totalDiffuse );\n\t\t\ttotalSpecularNode.assign( directSpecular.add( indirectSpecular ) );\n\n\t\t\toutgoingLightNode.assign( totalDiffuseNode.add( totalSpecularNode ) );\n\n\t\t\tlightingModel.finish( builder );\n\n\t\t\toutgoingLightNode = outgoingLightNode.bypass( builder.removeStack() );\n\n\t\t} else {\n\n\t\t\tproperties.nodes = [];\n\n\t\t}\n\n\t\tbuilder.lightsNode = currentLightsNode;\n\n\t\treturn outgoingLightNode;\n\n\t}\n\n\t/**\n\t * Configures this node with an array of lights.\n\t *\n\t * @param {Array<Light>} lights - An array of lights.\n\t * @return {LightsNode} A reference to this node.\n\t */\n\tsetLights( lights ) {\n\n\t\tthis._lights = lights;\n\n\t\tthis._lightNodes = null;\n\t\tthis._lightNodesHash = null;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns an array of the scene's lights.\n\t *\n\t * @return {Array<Light>} The scene's lights.\n\t */\n\tgetLights() {\n\n\t\treturn this._lights;\n\n\t}\n\n\t/**\n\t * Whether the scene has lights or not.\n\t *\n\t * @type {boolean}\n\t */\n\tget hasLights() {\n\n\t\treturn this._lights.length > 0;\n\n\t}\n\n}\n\n/**\n * TSL function for creating an instance of `LightsNode` and configuring\n * it with the given array of lights.\n *\n * @tsl\n * @function\n * @param {Array<Light>} lights - An array of lights.\n * @return {LightsNode} The created lights node.\n */\nconst lights = ( lights = [] ) => new LightsNode().setLights( lights );\n\n/**\n * Base class for all shadow nodes.\n *\n * Shadow nodes encapsulate shadow related logic and are always coupled to lighting nodes.\n * Lighting nodes might share the same shadow node type or use specific ones depending on\n * their requirements.\n *\n * @augments Node\n */\nclass ShadowBaseNode extends Node {\n\n\tstatic get type() {\n\n\t\treturn 'ShadowBaseNode';\n\n\t}\n\n\t/**\n\t * Constructs a new shadow base node.\n\t *\n\t * @param {Light} light - The shadow casting light.\n\t */\n\tconstructor( light ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The shadow casting light.\n\t\t *\n\t\t * @type {Light}\n\t\t */\n\t\tthis.light = light;\n\n\t\t/**\n\t\t * Overwritten since shadows are updated by default per render.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'render'\n\t\t */\n\t\tthis.updateBeforeType = NodeUpdateType.RENDER;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isShadowBaseNode = true;\n\n\t}\n\n\t/**\n\t * Setups the shadow position node which is by default the predefined TSL node object `shadowPositionWorld`.\n\t *\n\t * @param {NodeBuilder} object - A configuration object that must at least hold a material reference.\n\t */\n\tsetupShadowPosition( { context, material } ) {\n\n\t\t// Use assign inside an Fn()\n\n\t\tshadowPositionWorld.assign( material.receivedShadowPositionNode || context.shadowPositionWorld || positionWorld );\n\n\t}\n\n}\n\n/**\n * TSL object that represents the vertex position in world space during the shadow pass.\n *\n * @tsl\n * @type {Node<vec3>}\n */\nconst shadowPositionWorld = /*@__PURE__*/ property( 'vec3', 'shadowPositionWorld' );\n\n/**\n * Saves the state of the given renderer and stores it into the given state object.\n *\n * If not state object is provided, the function creates one.\n *\n * @private\n * @function\n * @param {Renderer} renderer - The renderer.\n * @param {Object} [state={}] - The state.\n * @return {Object} The state.\n */\nfunction saveRendererState( renderer, state = {} ) {\n\n\tstate.toneMapping = renderer.toneMapping;\n\tstate.toneMappingExposure = renderer.toneMappingExposure;\n\tstate.outputColorSpace = renderer.outputColorSpace;\n\tstate.renderTarget = renderer.getRenderTarget();\n\tstate.activeCubeFace = renderer.getActiveCubeFace();\n\tstate.activeMipmapLevel = renderer.getActiveMipmapLevel();\n\tstate.renderObjectFunction = renderer.getRenderObjectFunction();\n\tstate.pixelRatio = renderer.getPixelRatio();\n\tstate.mrt = renderer.getMRT();\n\tstate.clearColor = renderer.getClearColor( state.clearColor || new Color() );\n\tstate.clearAlpha = renderer.getClearAlpha();\n\tstate.autoClear = renderer.autoClear;\n\tstate.scissorTest = renderer.getScissorTest();\n\n\treturn state;\n\n}\n\n/**\n * Saves the state of the given renderer and stores it into the given state object.\n * Besides, the function also resets the state of the renderer to its default values.\n *\n * If not state object is provided, the function creates one.\n *\n * @private\n * @function\n * @param {Renderer} renderer - The renderer.\n * @param {Object} [state={}] - The state.\n * @return {Object} The state.\n */\nfunction resetRendererState( renderer, state ) {\n\n\tstate = saveRendererState( renderer, state );\n\n\trenderer.setMRT( null );\n\trenderer.setRenderObjectFunction( null );\n\trenderer.setClearColor( 0x000000, 1 );\n\trenderer.autoClear = true;\n\n\treturn state;\n\n}\n\n/**\n * Restores the state of the given renderer from the given state object.\n *\n * @private\n * @function\n * @param {Renderer} renderer - The renderer.\n * @param {Object} state - The state to restore.\n */\nfunction restoreRendererState( renderer, state ) {\n\n\trenderer.toneMapping = state.toneMapping;\n\trenderer.toneMappingExposure = state.toneMappingExposure;\n\trenderer.outputColorSpace = state.outputColorSpace;\n\trenderer.setRenderTarget( state.renderTarget, state.activeCubeFace, state.activeMipmapLevel );\n\trenderer.setRenderObjectFunction( state.renderObjectFunction );\n\trenderer.setPixelRatio( state.pixelRatio );\n\trenderer.setMRT( state.mrt );\n\trenderer.setClearColor( state.clearColor, state.clearAlpha );\n\trenderer.autoClear = state.autoClear;\n\trenderer.setScissorTest( state.scissorTest );\n\n}\n\n/**\n * Saves the state of the given scene and stores it into the given state object.\n *\n * If not state object is provided, the function creates one.\n *\n * @private\n * @function\n * @param {Scene} scene - The scene.\n * @param {Object} [state={}] - The state.\n * @return {Object} The state.\n */\nfunction saveSceneState( scene, state = {} ) {\n\n\tstate.background = scene.background;\n\tstate.backgroundNode = scene.backgroundNode;\n\tstate.overrideMaterial = scene.overrideMaterial;\n\n\treturn state;\n\n}\n\n/**\n * Saves the state of the given scene and stores it into the given state object.\n * Besides, the function also resets the state of the scene to its default values.\n *\n * If not state object is provided, the function creates one.\n *\n * @private\n * @function\n * @param {Scene} scene - The scene.\n * @param {Object} [state={}] - The state.\n * @return {Object} The state.\n */\nfunction resetSceneState( scene, state ) {\n\n\tstate = saveSceneState( scene, state );\n\n\tscene.background = null;\n\tscene.backgroundNode = null;\n\tscene.overrideMaterial = null;\n\n\treturn state;\n\n}\n\n/**\n * Restores the state of the given scene from the given state object.\n *\n * @private\n * @function\n * @param {Scene} scene - The scene.\n * @param {Object} state - The state to restore.\n */\nfunction restoreSceneState( scene, state ) {\n\n\tscene.background = state.background;\n\tscene.backgroundNode = state.backgroundNode;\n\tscene.overrideMaterial = state.overrideMaterial;\n\n}\n\n/**\n * Saves the state of the given renderer and scene and stores it into the given state object.\n *\n * If not state object is provided, the function creates one.\n *\n * @private\n * @function\n * @param {Renderer} renderer - The renderer.\n * @param {Scene} scene - The scene.\n * @param {Object} [state={}] - The state.\n * @return {Object} The state.\n */\nfunction saveRendererAndSceneState( renderer, scene, state = {} ) {\n\n\tstate = saveRendererState( renderer, state );\n\tstate = saveSceneState( scene, state );\n\n\treturn state;\n\n}\n\n/**\n * Saves the state of the given renderer and scene and stores it into the given state object.\n * Besides, the function also resets the state of the renderer and scene to its default values.\n *\n * If not state object is provided, the function creates one.\n *\n * @private\n * @function\n * @param {Renderer} renderer - The renderer.\n * @param {Scene} scene - The scene.\n * @param {Object} [state={}] - The state.\n * @return {Object} The state.\n */\nfunction resetRendererAndSceneState( renderer, scene, state ) {\n\n\tstate = resetRendererState( renderer, state );\n\tstate = resetSceneState( scene, state );\n\n\treturn state;\n\n}\n\n/**\n * Restores the state of the given renderer and scene from the given state object.\n *\n * @private\n * @function\n * @param {Renderer} renderer - The renderer.\n * @param {Scene} scene - The scene.\n * @param {Object} state - The state to restore.\n */\nfunction restoreRendererAndSceneState( renderer, scene, state ) {\n\n\trestoreRendererState( renderer, state );\n\trestoreSceneState( scene, state );\n\n}\n\nvar RendererUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tresetRendererAndSceneState: resetRendererAndSceneState,\n\tresetRendererState: resetRendererState,\n\tresetSceneState: resetSceneState,\n\trestoreRendererAndSceneState: restoreRendererAndSceneState,\n\trestoreRendererState: restoreRendererState,\n\trestoreSceneState: restoreSceneState,\n\tsaveRendererAndSceneState: saveRendererAndSceneState,\n\tsaveRendererState: saveRendererState,\n\tsaveSceneState: saveSceneState\n});\n\nconst shadowMaterialLib = /*@__PURE__*/ new WeakMap();\n\n/**\n * A shadow filtering function performing basic filtering. This is in fact an unfiltered version of the shadow map\n * with a binary `[0,1]` result.\n *\n * @method\n * @param {Object} inputs - The input parameter object.\n * @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's texture data.\n * @param {Node<vec3>} inputs.shadowCoord - The shadow coordinates.\n * @return {Node<float>} The filtering result.\n */\nconst BasicShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, depthLayer } ) => {\n\n\tlet basic = texture( depthTexture, shadowCoord.xy ).setName( 't_basic' );\n\n\tif ( depthTexture.isArrayTexture ) {\n\n\t\tbasic = basic.depth( depthLayer );\n\n\t}\n\n\treturn basic.compare( shadowCoord.z );\n\n} );\n\n/**\n * A shadow filtering function performing PCF filtering with Vogel disk sampling and IGN.\n *\n * Uses 5 samples distributed via Vogel disk pattern, rotated per-pixel using Interleaved\n * Gradient Noise (IGN) to break up banding artifacts. Combined with hardware PCF (4-tap\n * filtering per sample), this effectively provides 20 filtered taps with better distribution.\n *\n * @method\n * @param {Object} inputs - The input parameter object.\n * @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's texture data.\n * @param {Node<vec3>} inputs.shadowCoord - The shadow coordinates.\n * @param {LightShadow} inputs.shadow - The light shadow.\n * @return {Node<float>} The filtering result.\n */\nconst PCFShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow, depthLayer } ) => {\n\n\tconst depthCompare = ( uv, compare ) => {\n\n\t\tlet depth = texture( depthTexture, uv );\n\n\t\tif ( depthTexture.isArrayTexture ) {\n\n\t\t\tdepth = depth.depth( depthLayer );\n\n\t\t}\n\n\t\treturn depth.compare( compare );\n\n\t};\n\n\tconst mapSize = reference( 'mapSize', 'vec2', shadow ).setGroup( renderGroup );\n\tconst radius = reference( 'radius', 'float', shadow ).setGroup( renderGroup );\n\n\tconst texelSize = vec2( 1 ).div( mapSize );\n\tconst radiusScaled = radius.mul( texelSize.x );\n\n\t// Use IGN to rotate sampling pattern per pixel (phi = IGN * 2π)\n\tconst phi = interleavedGradientNoise( screenCoordinate.xy ).mul( 6.28318530718 );\n\n\t// 5 samples using Vogel disk distribution\n\treturn add(\n\t\tdepthCompare( shadowCoord.xy.add( vogelDiskSample( 0, 5, phi ).mul( radiusScaled ) ), shadowCoord.z ),\n\t\tdepthCompare( shadowCoord.xy.add( vogelDiskSample( 1, 5, phi ).mul( radiusScaled ) ), shadowCoord.z ),\n\t\tdepthCompare( shadowCoord.xy.add( vogelDiskSample( 2, 5, phi ).mul( radiusScaled ) ), shadowCoord.z ),\n\t\tdepthCompare( shadowCoord.xy.add( vogelDiskSample( 3, 5, phi ).mul( radiusScaled ) ), shadowCoord.z ),\n\t\tdepthCompare( shadowCoord.xy.add( vogelDiskSample( 4, 5, phi ).mul( radiusScaled ) ), shadowCoord.z )\n\t).mul( 1 / 5 );\n\n} );\n\n/**\n * A shadow filtering function performing PCF soft filtering.\n *\n * @method\n * @param {Object} inputs - The input parameter object.\n * @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's texture data.\n * @param {Node<vec3>} inputs.shadowCoord - The shadow coordinates.\n * @param {LightShadow} inputs.shadow - The light shadow.\n * @return {Node<float>} The filtering result.\n */\nconst PCFSoftShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow, depthLayer } ) => {\n\n\tconst depthCompare = ( uv, compare ) => {\n\n\t\tlet depth = texture( depthTexture, uv );\n\n\t\tif ( depthTexture.isArrayTexture ) {\n\n\t\t\tdepth = depth.depth( depthLayer );\n\n\t\t}\n\n\t\treturn depth.compare( compare );\n\n\t};\n\n\n\tconst mapSize = reference( 'mapSize', 'vec2', shadow ).setGroup( renderGroup );\n\n\tconst texelSize = vec2( 1 ).div( mapSize );\n\tconst dx = texelSize.x;\n\tconst dy = texelSize.y;\n\n\tconst uv = shadowCoord.xy;\n\tconst f = fract( uv.mul( mapSize ).add( 0.5 ) );\n\tuv.subAssign( f.mul( texelSize ) );\n\n\treturn add(\n\t\tdepthCompare( uv, shadowCoord.z ),\n\t\tdepthCompare( uv.add( vec2( dx, 0 ) ), shadowCoord.z ),\n\t\tdepthCompare( uv.add( vec2( 0, dy ) ), shadowCoord.z ),\n\t\tdepthCompare( uv.add( texelSize ), shadowCoord.z ),\n\t\tmix(\n\t\t\tdepthCompare( uv.add( vec2( dx.negate(), 0 ) ), shadowCoord.z ),\n\t\t\tdepthCompare( uv.add( vec2( dx.mul( 2 ), 0 ) ), shadowCoord.z ),\n\t\t\tf.x\n\t\t),\n\t\tmix(\n\t\t\tdepthCompare( uv.add( vec2( dx.negate(), dy ) ), shadowCoord.z ),\n\t\t\tdepthCompare( uv.add( vec2( dx.mul( 2 ), dy ) ), shadowCoord.z ),\n\t\t\tf.x\n\t\t),\n\t\tmix(\n\t\t\tdepthCompare( uv.add( vec2( 0, dy.negate() ) ), shadowCoord.z ),\n\t\t\tdepthCompare( uv.add( vec2( 0, dy.mul( 2 ) ) ), shadowCoord.z ),\n\t\t\tf.y\n\t\t),\n\t\tmix(\n\t\t\tdepthCompare( uv.add( vec2( dx, dy.negate() ) ), shadowCoord.z ),\n\t\t\tdepthCompare( uv.add( vec2( dx, dy.mul( 2 ) ) ), shadowCoord.z ),\n\t\t\tf.y\n\t\t),\n\t\tmix(\n\t\t\tmix(\n\t\t\t\tdepthCompare( uv.add( vec2( dx.negate(), dy.negate() ) ), shadowCoord.z ),\n\t\t\t\tdepthCompare( uv.add( vec2( dx.mul( 2 ), dy.negate() ) ), shadowCoord.z ),\n\t\t\t\tf.x\n\t\t\t),\n\t\t\tmix(\n\t\t\t\tdepthCompare( uv.add( vec2( dx.negate(), dy.mul( 2 ) ) ), shadowCoord.z ),\n\t\t\t\tdepthCompare( uv.add( vec2( dx.mul( 2 ), dy.mul( 2 ) ) ), shadowCoord.z ),\n\t\t\t\tf.x\n\t\t\t),\n\t\t\tf.y\n\t\t)\n\t).mul( 1 / 9 );\n\n} );\n\n/**\n * A shadow filtering function performing VSM filtering.\n *\n * @method\n * @param {Object} inputs - The input parameter object.\n * @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's texture data.\n * @param {Node<vec3>} inputs.shadowCoord - The shadow coordinates.\n * @return {Node<float>} The filtering result.\n */\nconst VSMShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, depthLayer }, builder ) => {\n\n\tlet distribution = texture( depthTexture ).sample( shadowCoord.xy );\n\n\tif ( depthTexture.isArrayTexture ) {\n\n\t\tdistribution = distribution.depth( depthLayer );\n\n\t}\n\n\tdistribution = distribution.rg;\n\n\tconst mean = distribution.x;\n\tconst variance = max$1( 0.0000001, distribution.y.mul( distribution.y ) );\n\n\tconst hardShadow = ( builder.renderer.reversedDepthBuffer ) ? step( mean, shadowCoord.z ) : step( shadowCoord.z, mean );\n\n\tconst output = float( 1 ).toVar(); // default, fully lit\n\n\tIf( hardShadow.notEqual( 1.0 ), () => {\n\n\t\t// Distance from mean\n\t\tconst d = shadowCoord.z.sub( mean );\n\n\t\t// Chebyshev's inequality for upper bound on probability\n\t\tlet p_max = variance.div( variance.add( d.mul( d ) ) );\n\n\t\t// Reduce light bleeding by remapping [amount, 1] to [0, 1]\n\t\tp_max = clamp( sub( p_max, 0.3 ).div( 0.65 ) );\n\n\t\toutput.assign( max$1( hardShadow, p_max ) );\n\n\t} );\n\treturn output;\n\n} );\n\n/**\n * Retrieves or creates a shadow material for the given light source.\n *\n * This function checks if a shadow material already exists for the provided light.\n * If not, it creates a new `NodeMaterial` configured for shadow rendering and stores it\n * in the `shadowMaterialLib` for future use.\n *\n * @tsl\n * @function\n * @param {Light} light - The light source for which the shadow material is needed.\n *                         If the light is a point light, a depth node is calculated\n *                         using the linear shadow distance.\n * @returns {NodeMaterial} The shadow material associated with the given light.\n */\nconst getShadowMaterial = ( light ) => {\n\n\tlet material = shadowMaterialLib.get( light );\n\n\tif ( material === undefined ) {\n\n\t\tmaterial = new NodeMaterial();\n\t\tmaterial.colorNode = vec4( 0, 0, 0, 1 );\n\t\tmaterial.isShadowPassMaterial = true; // Use to avoid other overrideMaterial override material.colorNode unintentionally when using material.shadowNode\n\t\tmaterial.name = 'ShadowMaterial';\n\t\tmaterial.blending = NoBlending;\n\t\tmaterial.fog = false;\n\n\t\tshadowMaterialLib.set( light, material );\n\n\t}\n\n\treturn material;\n\n};\n\n/**\n * Disposes the shadow material for the given light source.\n *\n * @param {Light} light - The light source.\n */\nconst disposeShadowMaterial = ( light ) => {\n\n\tconst material = shadowMaterialLib.get( light );\n\n\tif ( material !== undefined ) {\n\n\t\tmaterial.dispose();\n\t\tshadowMaterialLib.delete( light );\n\n\t}\n\n};\n\n//\n\nconst _shadowRenderObjectLibrary = /*@__PURE__*/ new ChainMap();\nconst _shadowRenderObjectKeys = [];\n\n/**\n * Creates a function to render shadow objects in a scene.\n *\n * @tsl\n * @function\n * @param {Renderer} renderer - The renderer.\n * @param {LightShadow} shadow - The light shadow object containing shadow properties.\n * @param {number} shadowType - The type of shadow map (e.g., BasicShadowMap).\n * @param {boolean} useVelocity - Whether to use velocity data for rendering.\n * @return {shadowRenderObjectFunction} A function that renders shadow objects.\n */\nconst getShadowRenderObjectFunction = ( renderer, shadow, shadowType, useVelocity ) => {\n\n\t_shadowRenderObjectKeys[ 0 ] = renderer;\n\t_shadowRenderObjectKeys[ 1 ] = shadow;\n\n\tlet renderObjectFunction = _shadowRenderObjectLibrary.get( _shadowRenderObjectKeys );\n\n\tif ( renderObjectFunction === undefined || ( renderObjectFunction.shadowType !== shadowType || renderObjectFunction.useVelocity !== useVelocity ) ) {\n\n\t\trenderObjectFunction = ( object, scene, _camera, geometry, material, group, ...params ) => {\n\n\t\t\tif ( object.castShadow === true || ( object.receiveShadow && shadowType === VSMShadowMap ) ) {\n\n\t\t\t\tif ( useVelocity ) {\n\n\t\t\t\t\tgetDataFromObject( object ).useVelocity = true;\n\n\t\t\t\t}\n\n\t\t\t\tobject.onBeforeShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );\n\n\t\t\t\trenderer.renderObject( object, scene, _camera, geometry, material, group, ...params );\n\n\t\t\t\tobject.onAfterShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );\n\n\t\t\t}\n\n\t\t};\n\n\t\trenderObjectFunction.shadowType = shadowType;\n\t\trenderObjectFunction.useVelocity = useVelocity;\n\n\t\t_shadowRenderObjectLibrary.set( _shadowRenderObjectKeys, renderObjectFunction );\n\n\t}\n\n\t_shadowRenderObjectKeys[ 0 ] = null;\n\t_shadowRenderObjectKeys[ 1 ] = null;\n\n\treturn renderObjectFunction;\n\n};\n\n/**\n * Represents the shader code for the first VSM render pass.\n *\n * @private\n * @method\n * @param {Object} inputs - The input parameter object.\n * @param {Node<float>} inputs.samples - The number of samples\n * @param {Node<float>} inputs.radius - The radius.\n * @param {Node<float>} inputs.size - The size.\n * @param {TextureNode} inputs.shadowPass - A reference to the render target's depth data.\n * @return {Node<vec2>} The VSM output.\n */\nconst VSMPassVertical = /*@__PURE__*/ Fn( ( { samples, radius, size, shadowPass, depthLayer } ) => {\n\n\tconst mean = float( 0 ).toVar( 'meanVertical' );\n\tconst squaredMean = float( 0 ).toVar( 'squareMeanVertical' );\n\n\tconst uvStride = samples.lessThanEqual( float( 1 ) ).select( float( 0 ), float( 2 ).div( samples.sub( 1 ) ) );\n\tconst uvStart = samples.lessThanEqual( float( 1 ) ).select( float( 0 ), float( -1 ) );\n\n\tLoop( { start: int( 0 ), end: int( samples ), type: 'int', condition: '<' }, ( { i } ) => {\n\n\t\tconst uvOffset = uvStart.add( float( i ).mul( uvStride ) );\n\n\t\tlet depth = shadowPass.sample( add( screenCoordinate.xy, vec2( 0, uvOffset ).mul( radius ) ).div( size ) );\n\n\t\tif ( shadowPass.value.isArrayTexture ) {\n\n\t\t\tdepth = depth.depth( depthLayer );\n\n\t\t}\n\n\t\tdepth = depth.x;\n\n\t\tmean.addAssign( depth );\n\t\tsquaredMean.addAssign( depth.mul( depth ) );\n\n\t} );\n\n\tmean.divAssign( samples );\n\tsquaredMean.divAssign( samples );\n\n\tconst std_dev = sqrt( squaredMean.sub( mean.mul( mean ) ).max( 0 ) );\n\treturn vec2( mean, std_dev );\n\n} );\n\n/**\n * Represents the shader code for the second VSM render pass.\n *\n * @private\n * @method\n * @param {Object} inputs - The input parameter object.\n * @param {Node<float>} inputs.samples - The number of samples\n * @param {Node<float>} inputs.radius - The radius.\n * @param {Node<float>} inputs.size - The size.\n * @param {TextureNode} inputs.shadowPass - The result of the first VSM render pass.\n * @return {Node<vec2>} The VSM output.\n */\nconst VSMPassHorizontal = /*@__PURE__*/ Fn( ( { samples, radius, size, shadowPass, depthLayer } ) => {\n\n\tconst mean = float( 0 ).toVar( 'meanHorizontal' );\n\tconst squaredMean = float( 0 ).toVar( 'squareMeanHorizontal' );\n\n\tconst uvStride = samples.lessThanEqual( float( 1 ) ).select( float( 0 ), float( 2 ).div( samples.sub( 1 ) ) );\n\tconst uvStart = samples.lessThanEqual( float( 1 ) ).select( float( 0 ), float( -1 ) );\n\n\tLoop( { start: int( 0 ), end: int( samples ), type: 'int', condition: '<' }, ( { i } ) => {\n\n\t\tconst uvOffset = uvStart.add( float( i ).mul( uvStride ) );\n\n\t\tlet distribution = shadowPass.sample( add( screenCoordinate.xy, vec2( uvOffset, 0 ).mul( radius ) ).div( size ) );\n\n\t\tif ( shadowPass.value.isArrayTexture ) {\n\n\t\t\tdistribution = distribution.depth( depthLayer );\n\n\t\t}\n\n\t\tmean.addAssign( distribution.x );\n\t\tsquaredMean.addAssign( add( distribution.y.mul( distribution.y ), distribution.x.mul( distribution.x ) ) );\n\n\t} );\n\n\tmean.divAssign( samples );\n\tsquaredMean.divAssign( samples );\n\n\tconst std_dev = sqrt( squaredMean.sub( mean.mul( mean ) ).max( 0 ) );\n\treturn vec2( mean, std_dev );\n\n} );\n\nconst _shadowFilterLib = [ BasicShadowFilter, PCFShadowFilter, PCFSoftShadowFilter, VSMShadowFilter ];\n\n//\n\nlet _rendererState;\nconst _quadMesh = /*@__PURE__*/ new QuadMesh();\n\n/**\n * Represents the default shadow implementation for lighting nodes.\n *\n * @augments ShadowBaseNode\n */\nclass ShadowNode extends ShadowBaseNode {\n\n\tstatic get type() {\n\n\t\treturn 'ShadowNode';\n\n\t}\n\n\t/**\n\t * Constructs a new shadow node.\n\t *\n\t * @param {Light} light - The shadow casting light.\n\t * @param {?LightShadow} [shadow=null] - An optional light shadow.\n\t */\n\tconstructor( light, shadow = null ) {\n\n\t\tsuper( light );\n\n\t\t/**\n\t\t * The light shadow which defines the properties light's\n\t\t * shadow.\n\t\t *\n\t\t * @type {?LightShadow}\n\t\t * @default null\n\t\t */\n\t\tthis.shadow = shadow || light.shadow;\n\n\t\t/**\n\t\t * A reference to the shadow map which is a render target.\n\t\t *\n\t\t * @type {?RenderTarget}\n\t\t * @default null\n\t\t */\n\t\tthis.shadowMap = null;\n\n\t\t/**\n\t\t * Only relevant for VSM shadows. Render target for the\n\t\t * first VSM render pass.\n\t\t *\n\t\t * @type {?RenderTarget}\n\t\t * @default null\n\t\t */\n\t\tthis.vsmShadowMapVertical = null;\n\n\t\t/**\n\t\t * Only relevant for VSM shadows. Render target for the\n\t\t * second VSM render pass.\n\t\t *\n\t\t * @type {?RenderTarget}\n\t\t * @default null\n\t\t */\n\t\tthis.vsmShadowMapHorizontal = null;\n\n\t\t/**\n\t\t * Only relevant for VSM shadows. Node material which\n\t\t * is used to render the first VSM pass.\n\t\t *\n\t\t * @type {?NodeMaterial}\n\t\t * @default null\n\t\t */\n\t\tthis.vsmMaterialVertical = null;\n\n\t\t/**\n\t\t * Only relevant for VSM shadows. Node material which\n\t\t * is used to render the second VSM pass.\n\t\t *\n\t\t * @type {?NodeMaterial}\n\t\t * @default null\n\t\t */\n\t\tthis.vsmMaterialHorizontal = null;\n\n\t\t/**\n\t\t * A reference to the output node which defines the\n\t\t * final result of this shadow node.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @private\n\t\t * @default null\n\t\t */\n\t\tthis._node = null;\n\n\t\t/**\n\t\t * The current shadow map type of this shadow node.\n\t\t *\n\t\t * @type {?number}\n\t\t * @private\n\t\t * @default null\n\t\t */\n\t\tthis._currentShadowType = null;\n\n\t\t/**\n\t\t * A Weak Map holding the current frame ID per camera. Used\n\t\t * to control the update of shadow maps.\n\t\t *\n\t\t * @type {WeakMap<Camera,number>}\n\t\t * @private\n\t\t */\n\t\tthis._cameraFrameId = new WeakMap();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isShadowNode = true;\n\n\t\t/**\n\t\t * This index can be used when overriding setupRenderTarget with a RenderTarget Array to specify the depth layer.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.depthLayer = 0;\n\n\t}\n\n\t/**\n\t * Setups the shadow filtering.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @param {Object} inputs - A configuration object that defines the shadow filtering.\n\t * @param {Function} inputs.filterFn - This function defines the filtering type of the shadow map e.g. PCF.\n\t * @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's texture data.\n\t * @param {Node<vec3>} inputs.shadowCoord - Shadow coordinates which are used to sample from the shadow map.\n\t * @param {LightShadow} inputs.shadow - The light shadow.\n\t * @return {Node<float>} The result node of the shadow filtering.\n\t */\n\tsetupShadowFilter( builder, { filterFn, depthTexture, shadowCoord, shadow, depthLayer } ) {\n\n\t\tconst frustumTest = shadowCoord.x.greaterThanEqual( 0 )\n\t\t\t.and( shadowCoord.x.lessThanEqual( 1 ) )\n\t\t\t.and( shadowCoord.y.greaterThanEqual( 0 ) )\n\t\t\t.and( shadowCoord.y.lessThanEqual( 1 ) )\n\t\t\t.and( shadowCoord.z.lessThanEqual( 1 ) );\n\n\t\tconst shadowNode = filterFn( { depthTexture, shadowCoord, shadow, depthLayer } );\n\n\t\treturn frustumTest.select( shadowNode, float( 1 ) );\n\n\t}\n\n\t/**\n\t * Setups the shadow coordinates.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @param {Node<vec3>} shadowPosition - A node representing the shadow position.\n\t * @return {Node<vec3>} The shadow coordinates.\n\t */\n\tsetupShadowCoord( builder, shadowPosition ) {\n\n\t\tconst { shadow } = this;\n\t\tconst { renderer } = builder;\n\n\t\tconst bias = shadow.biasNode || reference( 'bias', 'float', shadow ).setGroup( renderGroup );\n\n\t\tlet shadowCoord = shadowPosition;\n\t\tlet coordZ;\n\n\t\tif ( shadow.camera.isOrthographicCamera || renderer.logarithmicDepthBuffer !== true ) {\n\n\t\t\tshadowCoord = shadowCoord.xyz.div( shadowCoord.w );\n\n\t\t\tcoordZ = shadowCoord.z;\n\n\t\t} else {\n\n\t\t\tconst w = shadowCoord.w;\n\t\t\tshadowCoord = shadowCoord.xy.div( w ); // <-- Only divide X/Y coords since we don't need Z\n\n\t\t\t// The normally available \"cameraNear\" and \"cameraFar\" nodes cannot be used here because they do not get\n\t\t\t// updated to use the shadow camera. So, we have to declare our own \"local\" ones here.\n\t\t\t// TODO: How do we get the cameraNear/cameraFar nodes to use the shadow camera so we don't have to declare local ones here?\n\t\t\tconst cameraNearLocal = reference( 'near', 'float', shadow.camera ).setGroup( renderGroup );\n\t\t\tconst cameraFarLocal = reference( 'far', 'float', shadow.camera ).setGroup( renderGroup );\n\n\t\t\tcoordZ = viewZToLogarithmicDepth( w.negate(), cameraNearLocal, cameraFarLocal );\n\n\t\t}\n\n\t\tshadowCoord = vec3(\n\t\t\tshadowCoord.x,\n\t\t\tshadowCoord.y.oneMinus(), // follow webgpu standards\n\t\t\trenderer.reversedDepthBuffer ? coordZ.sub( bias ) : coordZ.add( bias )\n\t\t);\n\n\t\treturn shadowCoord;\n\n\t}\n\n\t/**\n\t * Returns the shadow filtering function for the given shadow type.\n\t *\n\t * @param {number} type - The shadow type.\n\t * @return {Function} The filtering function.\n\t */\n\tgetShadowFilterFn( type ) {\n\n\t\treturn _shadowFilterLib[ type ];\n\n\t}\n\n\n\tsetupRenderTarget( shadow, builder ) {\n\n\t\tconst depthTexture = new DepthTexture( shadow.mapSize.width, shadow.mapSize.height );\n\t\tdepthTexture.name = 'ShadowDepthTexture';\n\t\tdepthTexture.compareFunction = builder.renderer.reversedDepthBuffer ? GreaterEqualCompare : LessEqualCompare;\n\n\t\tconst shadowMap = builder.createRenderTarget( shadow.mapSize.width, shadow.mapSize.height );\n\t\tshadowMap.texture.name = 'ShadowMap';\n\t\tshadowMap.texture.type = shadow.mapType;\n\t\tshadowMap.depthTexture = depthTexture;\n\n\t\treturn { shadowMap, depthTexture };\n\n\t}\n\n\t/**\n\t * Setups the shadow output node.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @return {Node<vec3>} The shadow output node.\n\t */\n\tsetupShadow( builder ) {\n\n\t\tconst { renderer, camera } = builder;\n\n\t\tconst { light, shadow } = this;\n\n\t\tconst { depthTexture, shadowMap } = this.setupRenderTarget( shadow, builder );\n\n\t\tconst shadowMapType = renderer.shadowMap.type;\n\t\tconst hasTextureCompare = renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE );\n\n\t\tif ( ( shadowMapType === PCFShadowMap || shadowMapType === PCFSoftShadowMap ) && hasTextureCompare ) {\n\n\t\t\tdepthTexture.minFilter = LinearFilter;\n\t\t\tdepthTexture.magFilter = LinearFilter;\n\n\t\t} else {\n\n\t\t\tdepthTexture.minFilter = NearestFilter;\n\t\t\tdepthTexture.magFilter = NearestFilter;\n\n\t\t}\n\n\t\tshadow.camera.coordinateSystem = camera.coordinateSystem;\n\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t// VSM\n\n\t\tif ( shadowMapType === VSMShadowMap && shadow.isPointLightShadow !== true ) {\n\n\t\t\tdepthTexture.compareFunction = null; // VSM does not use textureSampleCompare()/texture2DCompare()\n\n\t\t\tif ( shadowMap.depth > 1 ) {\n\n\t\t\t\tif ( ! shadowMap._vsmShadowMapVertical ) {\n\n\t\t\t\t\tshadowMap._vsmShadowMapVertical = builder.createRenderTarget( shadow.mapSize.width, shadow.mapSize.height, { format: RGFormat, type: HalfFloatType, depth: shadowMap.depth, depthBuffer: false } );\n\t\t\t\t\tshadowMap._vsmShadowMapVertical.texture.name = 'VSMVertical';\n\n\t\t\t\t}\n\n\t\t\t\tthis.vsmShadowMapVertical = shadowMap._vsmShadowMapVertical;\n\n\t\t\t\tif ( ! shadowMap._vsmShadowMapHorizontal ) {\n\n\t\t\t\t\tshadowMap._vsmShadowMapHorizontal = builder.createRenderTarget( shadow.mapSize.width, shadow.mapSize.height, { format: RGFormat, type: HalfFloatType, depth: shadowMap.depth, depthBuffer: false } );\n\t\t\t\t\tshadowMap._vsmShadowMapHorizontal.texture.name = 'VSMHorizontal';\n\n\t\t\t\t}\n\n\t\t\t\tthis.vsmShadowMapHorizontal = shadowMap._vsmShadowMapHorizontal;\n\n\t\t\t} else {\n\n\t\t\t\tthis.vsmShadowMapVertical = builder.createRenderTarget( shadow.mapSize.width, shadow.mapSize.height, { format: RGFormat, type: HalfFloatType, depthBuffer: false } );\n\t\t\t\tthis.vsmShadowMapHorizontal = builder.createRenderTarget( shadow.mapSize.width, shadow.mapSize.height, { format: RGFormat, type: HalfFloatType, depthBuffer: false } );\n\n\t\t\t}\n\n\n\t\t\tlet shadowPassVertical = texture( depthTexture );\n\n\t\t\tif ( depthTexture.isArrayTexture ) {\n\n\t\t\t\tshadowPassVertical = shadowPassVertical.depth( this.depthLayer );\n\n\t\t\t}\n\n\t\t\tlet shadowPassHorizontal = texture( this.vsmShadowMapVertical.texture );\n\n\t\t\tif ( depthTexture.isArrayTexture ) {\n\n\t\t\t\tshadowPassHorizontal = shadowPassHorizontal.depth( this.depthLayer );\n\n\t\t\t}\n\n\t\t\tconst samples = reference( 'blurSamples', 'float', shadow ).setGroup( renderGroup );\n\t\t\tconst radius = reference( 'radius', 'float', shadow ).setGroup( renderGroup );\n\t\t\tconst size = reference( 'mapSize', 'vec2', shadow ).setGroup( renderGroup );\n\n\t\t\tlet material = this.vsmMaterialVertical || ( this.vsmMaterialVertical = new NodeMaterial() );\n\t\t\tmaterial.fragmentNode = VSMPassVertical( { samples, radius, size, shadowPass: shadowPassVertical, depthLayer: this.depthLayer } ).context( builder.getSharedContext() );\n\t\t\tmaterial.name = 'VSMVertical';\n\n\t\t\tmaterial = this.vsmMaterialHorizontal || ( this.vsmMaterialHorizontal = new NodeMaterial() );\n\t\t\tmaterial.fragmentNode = VSMPassHorizontal( { samples, radius, size, shadowPass: shadowPassHorizontal, depthLayer: this.depthLayer } ).context( builder.getSharedContext() );\n\t\t\tmaterial.name = 'VSMHorizontal';\n\n\t\t}\n\n\t\t//\n\n\t\tconst shadowIntensity = reference( 'intensity', 'float', shadow ).setGroup( renderGroup );\n\t\tconst normalBias = reference( 'normalBias', 'float', shadow ).setGroup( renderGroup );\n\n\t\tconst shadowMatrix = lightShadowMatrix( light );\n\t\tconst shadowNormalBias = normalWorld.mul( normalBias );\n\n\t\tlet shadowPosition;\n\n\t\tif ( ! renderer.highPrecision || builder.material.receivedShadowPositionNode || builder.context.shadowPositionWorld ) {\n\n\t\t\tshadowPosition = shadowMatrix.mul( shadowPositionWorld.add( shadowNormalBias ) );\n\n\t\t} else {\n\n\t\t\tconst highpShadowModelMatrix = uniform( 'mat4' ).onObjectUpdate( ( { object }, self ) => {\n\n\t\t\t\treturn self.value.multiplyMatrices( shadowMatrix.value, object.matrixWorld );\n\n\t\t\t} );\n\n\t\t\tshadowPosition = highpShadowModelMatrix.mul( positionLocal ).add( shadowMatrix.mul( vec4( shadowNormalBias, 0 ) ) );\n\n\t\t}\n\n\t\tconst shadowCoord = this.setupShadowCoord( builder, shadowPosition );\n\n\t\t//\n\n\t\tconst filterFn = shadow.filterNode || this.getShadowFilterFn( renderer.shadowMap.type ) || null;\n\n\t\tif ( filterFn === null ) {\n\n\t\t\tthrow new Error( 'THREE.WebGPURenderer: Shadow map type not supported yet.' );\n\n\t\t}\n\n\t\tconst shadowDepthTexture = ( shadowMapType === VSMShadowMap && shadow.isPointLightShadow !== true ) ? this.vsmShadowMapHorizontal.texture : depthTexture;\n\n\t\tconst shadowNode = this.setupShadowFilter( builder, { filterFn, shadowTexture: shadowMap.texture, depthTexture: shadowDepthTexture, shadowCoord, shadow, depthLayer: this.depthLayer } );\n\n\t\tlet shadowColor;\n\n\t\tif ( renderer.shadowMap.transmitted === true ) {\n\n\t\t\tif ( shadowMap.texture.isCubeTexture ) {\n\n\t\t\t\t// For cube shadow maps (point lights), use cubeTexture with vec3 coordinates\n\t\t\t\tshadowColor = cubeTexture( shadowMap.texture, shadowCoord.xyz );\n\n\t\t\t} else {\n\n\t\t\t\tshadowColor = texture( shadowMap.texture, shadowCoord );\n\n\t\t\t\tif ( depthTexture.isArrayTexture ) {\n\n\t\t\t\t\tshadowColor = shadowColor.depth( this.depthLayer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet shadowOutput;\n\n\t\tif ( shadowColor ) {\n\n\t\t\tshadowOutput = mix( 1, shadowNode.rgb.mix( shadowColor, 1 ), shadowIntensity.mul( shadowColor.a ) ).toVar();\n\n\t\t} else {\n\n\t\t\tshadowOutput = mix( 1, shadowNode, shadowIntensity ).toVar();\n\n\t\t}\n\n\t\tthis.shadowMap = shadowMap;\n\t\tthis.shadow.map = shadowMap;\n\n\t\t// Shadow Output + Inspector\n\n\t\tconst inspectName = `${ this.light.type } Shadow [ ${ this.light.name || 'ID: ' + this.light.id } ]`;\n\n\t\tif ( shadowColor ) {\n\n\t\t\tshadowOutput.toInspector( `${ inspectName } / Color`, () => {\n\n\t\t\t\tif ( this.shadowMap.texture.isCubeTexture ) {\n\n\t\t\t\t\treturn cubeTexture( this.shadowMap.texture );\n\n\t\t\t\t}\n\n\t\t\t\treturn texture( this.shadowMap.texture );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn shadowOutput.toInspector( `${ inspectName } / Depth`, () => {\n\n\t\t\t// TODO: Use linear depth\n\n\t\t\tif ( this.shadowMap.texture.isCubeTexture ) {\n\n\t\t\t\treturn cubeTexture( this.shadowMap.texture ).r.oneMinus();\n\n\t\t\t}\n\n\t\t\treturn textureLoad( this.shadowMap.depthTexture, uv$1().mul( textureSize( texture( this.shadowMap.depthTexture ) ) ) ).r.oneMinus();\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * The implementation performs the setup of the output node. An output is only\n\t * produces if shadow mapping is globally enabled in the renderer.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @return {ShaderCallNodeInternal} The output node.\n\t */\n\tsetup( builder ) {\n\n\t\tif ( builder.renderer.shadowMap.enabled === false ) return;\n\n\t\treturn Fn( () => {\n\n\t\t\tconst currentShadowType = builder.renderer.shadowMap.type;\n\n\t\t\tif ( this._currentShadowType !== currentShadowType ) {\n\n\t\t\t\tthis._reset();\n\t\t\t\tthis._node = null;\n\n\t\t\t}\n\n\t\t\tlet node = this._node;\n\n\t\t\tthis.setupShadowPosition( builder );\n\n\t\t\tif ( node === null ) {\n\n\t\t\t\tthis._node = node = this.setupShadow( builder );\n\t\t\t\tthis._currentShadowType = currentShadowType;\n\n\t\t\t}\n\n\t\t\tif ( builder.material.receivedShadowNode ) {\n\n\t\t\t\tnode = builder.material.receivedShadowNode( node );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} )();\n\n\t}\n\n\t/**\n\t * Renders the shadow. The logic of this function could be included\n\t * into {@link ShadowNode#updateShadow} however more specialized shadow\n\t * nodes might require a custom shadow map rendering. By having a\n\t * dedicated method, it's easier to overwrite the default behavior.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\trenderShadow( frame ) {\n\n\t\tconst { shadow, shadowMap, light } = this;\n\t\tconst { renderer, scene } = frame;\n\n\t\tshadow.updateMatrices( light );\n\n\t\tshadowMap.setSize( shadow.mapSize.width, shadow.mapSize.height, shadowMap.depth );\n\n\t\tconst currentSceneName = scene.name;\n\n\t\tscene.name = `Shadow Map [ ${ light.name || 'ID: ' + light.id } ]`;\n\n\t\trenderer.render( scene, shadow.camera );\n\n\t\tscene.name = currentSceneName;\n\n\t}\n\n\t/**\n\t * Updates the shadow.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdateShadow( frame ) {\n\n\t\tconst { shadowMap, light, shadow } = this;\n\t\tconst { renderer, scene, camera } = frame;\n\n\t\tconst shadowType = renderer.shadowMap.type;\n\n\t\tconst depthVersion = shadowMap.depthTexture.version;\n\t\tthis._depthVersionCached = depthVersion;\n\n\t\tconst _shadowCameraLayer = shadow.camera.layers.mask;\n\n\t\tif ( ( shadow.camera.layers.mask & 0xFFFFFFFE ) === 0 ) {\n\n\t\t\tshadow.camera.layers.mask = camera.layers.mask;\n\n\t\t}\n\n\t\tconst currentRenderObjectFunction = renderer.getRenderObjectFunction();\n\n\t\tconst currentMRT = renderer.getMRT();\n\t\tconst useVelocity = currentMRT ? currentMRT.has( 'velocity' ) : false;\n\n\t\t_rendererState = resetRendererAndSceneState( renderer, scene, _rendererState );\n\n\t\tscene.overrideMaterial = getShadowMaterial( light );\n\n\t\trenderer.setRenderObjectFunction( getShadowRenderObjectFunction( renderer, shadow, shadowType, useVelocity ) );\n\n\t\trenderer.setClearColor( 0x000000, 0 );\n\n\t\trenderer.setRenderTarget( shadowMap );\n\n\t\tthis.renderShadow( frame );\n\n\t\trenderer.setRenderObjectFunction( currentRenderObjectFunction );\n\n\t\t// vsm blur pass\n\n\t\tif ( shadowType === VSMShadowMap && shadow.isPointLightShadow !== true ) {\n\n\t\t\tthis.vsmPass( renderer );\n\n\t\t}\n\n\t\tshadow.camera.layers.mask = _shadowCameraLayer;\n\n\t\trestoreRendererAndSceneState( renderer, scene, _rendererState );\n\n\t}\n\n\t/**\n\t * For VSM additional render passes are required.\n\t *\n\t * @param {Renderer} renderer - A reference to the current renderer.\n\t */\n\tvsmPass( renderer ) {\n\n\t\tconst { shadow } = this;\n\n\t\tconst depth = this.shadowMap.depth;\n\t\tthis.vsmShadowMapVertical.setSize( shadow.mapSize.width, shadow.mapSize.height, depth );\n\t\tthis.vsmShadowMapHorizontal.setSize( shadow.mapSize.width, shadow.mapSize.height, depth );\n\n\t\trenderer.setRenderTarget( this.vsmShadowMapVertical );\n\t\t_quadMesh.material = this.vsmMaterialVertical;\n\t\t_quadMesh.render( renderer );\n\n\t\trenderer.setRenderTarget( this.vsmShadowMapHorizontal );\n\t\t_quadMesh.material = this.vsmMaterialHorizontal;\n\t\t_quadMesh.render( renderer );\n\n\t}\n\n\t/**\n\t * Frees the internal resources of this shadow node.\n\t */\n\tdispose() {\n\n\t\tthis._reset();\n\n\t\tsuper.dispose();\n\n\t}\n\n\t/**\n\t * Resets the resouce state of this shadow node.\n\t *\n\t * @private\n\t */\n\t_reset() {\n\n\t\tthis._currentShadowType = null;\n\n\t\tdisposeShadowMaterial( this.light );\n\n\t\tif ( this.shadowMap ) {\n\n\t\t\tthis.shadowMap.dispose();\n\t\t\tthis.shadowMap = null;\n\n\t\t}\n\n\t\tif ( this.vsmShadowMapVertical !== null ) {\n\n\t\t\tthis.vsmShadowMapVertical.dispose();\n\t\t\tthis.vsmShadowMapVertical = null;\n\n\t\t\tthis.vsmMaterialVertical.dispose();\n\t\t\tthis.vsmMaterialVertical = null;\n\n\t\t}\n\n\t\tif ( this.vsmShadowMapHorizontal !== null ) {\n\n\t\t\tthis.vsmShadowMapHorizontal.dispose();\n\t\t\tthis.vsmShadowMapHorizontal = null;\n\n\t\t\tthis.vsmMaterialHorizontal.dispose();\n\t\t\tthis.vsmMaterialHorizontal = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The implementation performs the update of the shadow map if necessary.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdateBefore( frame ) {\n\n\t\tconst { shadow } = this;\n\n\t\tlet needsUpdate = shadow.needsUpdate || shadow.autoUpdate;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tif ( this._cameraFrameId[ frame.camera ] === frame.frameId ) {\n\n\t\t\t\tneedsUpdate = false;\n\n\t\t\t}\n\n\t\t\tthis._cameraFrameId[ frame.camera ] = frame.frameId;\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tthis.updateShadow( frame );\n\n\t\t\tif ( this.shadowMap.depthTexture.version === this._depthVersionCached ) {\n\n\t\t\t\tshadow.needsUpdate = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Shadow Render Object Function.\n *\n * @function shadowRenderObjectFunction\n * @param {Object3D} object - The 3D object to render.\n * @param {Scene} scene - The scene containing the object.\n * @param {Camera} _camera - The camera used for rendering.\n * @param {BufferGeometry} geometry - The geometry of the object.\n * @param {Material} material - The material of the object.\n * @param {Group} group - The group the object belongs to.\n * @param {...any} params - Additional parameters for rendering.\n */\n\n/**\n * TSL function for creating an instance of `ShadowNode`.\n *\n * @tsl\n * @function\n * @param {Light} light - The shadow casting light.\n * @param {?LightShadow} [shadow] - The light shadow.\n * @return {ShadowNode} The created shadow node.\n */\nconst shadow = ( light, shadow ) => new ShadowNode( light, shadow );\n\nconst _clearColor$1 = /*@__PURE__*/ new Color();\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\n// Cube map face directions and up vectors for point light shadows\n// Face order: +X, -X, +Y, -Y, +Z, -Z\n// WebGPU coordinate system - Y faces swapped to match texture sampling convention\nconst _cubeDirectionsWebGPU = [\n\t/*@__PURE__*/ new Vector3( 1, 0, 0 ), /*@__PURE__*/ new Vector3( -1, 0, 0 ), /*@__PURE__*/ new Vector3( 0, -1, 0 ),\n\t/*@__PURE__*/ new Vector3( 0, 1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, 1 ), /*@__PURE__*/ new Vector3( 0, 0, -1 )\n];\n\nconst _cubeUpsWebGPU = [\n\t/*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, -1 ),\n\t/*@__PURE__*/ new Vector3( 0, 0, 1 ), /*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, -1, 0 )\n];\n\n// WebGL coordinate system - standard OpenGL convention\nconst _cubeDirectionsWebGL = [\n\t/*@__PURE__*/ new Vector3( 1, 0, 0 ), /*@__PURE__*/ new Vector3( -1, 0, 0 ), /*@__PURE__*/ new Vector3( 0, 1, 0 ),\n\t/*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, 1 ), /*@__PURE__*/ new Vector3( 0, 0, -1 )\n];\n\nconst _cubeUpsWebGL = [\n\t/*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, 1 ),\n\t/*@__PURE__*/ new Vector3( 0, 0, -1 ), /*@__PURE__*/ new Vector3( 0, -1, 0 ), /*@__PURE__*/ new Vector3( 0, -1, 0 )\n];\n\nconst BasicPointShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, bd3D, dp } ) => {\n\n\treturn cubeTexture( depthTexture, bd3D ).compare( dp );\n\n} );\n\n/**\n * A shadow filtering function for point lights using Vogel disk sampling and IGN.\n *\n * Uses 5 samples distributed via Vogel disk pattern in tangent space around the\n * sample direction, rotated per-pixel using Interleaved Gradient Noise (IGN).\n *\n * @method\n * @param {Object} inputs - The input parameter object.\n * @param {CubeDepthTexture} inputs.depthTexture - A reference to the shadow cube map.\n * @param {Node<vec3>} inputs.bd3D - The normalized direction from light to fragment.\n * @param {Node<float>} inputs.dp - The depth value to compare against.\n * @param {LightShadow} inputs.shadow - The light shadow.\n * @return {Node<float>} The filtering result.\n */\nconst PointShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, bd3D, dp, shadow } ) => {\n\n\tconst radius = reference( 'radius', 'float', shadow ).setGroup( renderGroup );\n\tconst mapSize = reference( 'mapSize', 'vec2', shadow ).setGroup( renderGroup );\n\n\tconst texelSize = radius.div( mapSize.x );\n\n\t// Build a tangent-space coordinate system for applying offsets\n\tconst absDir = abs( bd3D );\n\tconst tangent = normalize( cross( bd3D, absDir.x.greaterThan( absDir.z ).select( vec3( 0, 1, 0 ), vec3( 1, 0, 0 ) ) ) );\n\tconst bitangent = cross( bd3D, tangent );\n\n\t// Use IGN to rotate sampling pattern per pixel (phi = IGN * 2π)\n\tconst phi = interleavedGradientNoise( screenCoordinate.xy ).mul( 6.28318530718 );\n\n\t// 5 samples using Vogel disk distribution in tangent space\n\tconst sample0 = vogelDiskSample( 0, 5, phi );\n\tconst sample1 = vogelDiskSample( 1, 5, phi );\n\tconst sample2 = vogelDiskSample( 2, 5, phi );\n\tconst sample3 = vogelDiskSample( 3, 5, phi );\n\tconst sample4 = vogelDiskSample( 4, 5, phi );\n\n\treturn cubeTexture( depthTexture, bd3D.add( tangent.mul( sample0.x ).add( bitangent.mul( sample0.y ) ).mul( texelSize ) ) ).compare( dp )\n\t\t.add( cubeTexture( depthTexture, bd3D.add( tangent.mul( sample1.x ).add( bitangent.mul( sample1.y ) ).mul( texelSize ) ) ).compare( dp ) )\n\t\t.add( cubeTexture( depthTexture, bd3D.add( tangent.mul( sample2.x ).add( bitangent.mul( sample2.y ) ).mul( texelSize ) ) ).compare( dp ) )\n\t\t.add( cubeTexture( depthTexture, bd3D.add( tangent.mul( sample3.x ).add( bitangent.mul( sample3.y ) ).mul( texelSize ) ) ).compare( dp ) )\n\t\t.add( cubeTexture( depthTexture, bd3D.add( tangent.mul( sample4.x ).add( bitangent.mul( sample4.y ) ).mul( texelSize ) ) ).compare( dp ) )\n\t\t.mul( 1.0 / 5.0 );\n\n} );\n\nconst pointShadowFilter = /*@__PURE__*/ Fn( ( { filterFn, depthTexture, shadowCoord, shadow }, builder ) => {\n\n\t// for point lights, the uniform @vShadowCoord is re-purposed to hold\n\t// the vector from the light to the world-space position of the fragment.\n\tconst shadowPosition = shadowCoord.xyz.toConst();\n\tconst shadowPositionAbs = shadowPosition.abs().toConst();\n\tconst viewZ = shadowPositionAbs.x.max( shadowPositionAbs.y ).max( shadowPositionAbs.z );\n\n\tconst shadowCameraNear = uniform( 'float' ).setGroup( renderGroup ).onRenderUpdate( () => shadow.camera.near );\n\tconst shadowCameraFar = uniform( 'float' ).setGroup( renderGroup ).onRenderUpdate( () => shadow.camera.far );\n\tconst bias = reference( 'bias', 'float', shadow ).setGroup( renderGroup );\n\n\tconst result = float( 1.0 ).toVar();\n\n\tIf( viewZ.sub( shadowCameraFar ).lessThanEqual( 0.0 ).and( viewZ.sub( shadowCameraNear ).greaterThanEqual( 0.0 ) ), () => {\n\n\t\tlet dp;\n\n\t\tif ( builder.renderer.reversedDepthBuffer ) {\n\n\t\t\tdp = viewZToReversedPerspectiveDepth( viewZ.negate(), shadowCameraNear, shadowCameraFar );\n\t\t\tdp.subAssign( bias );\n\n\t\t} else {\n\n\t\t\tdp = viewZToPerspectiveDepth( viewZ.negate(), shadowCameraNear, shadowCameraFar );\n\t\t\tdp.addAssign( bias );\n\n\t\t}\n\n\t\t// bd3D = base direction 3D (direction from light to fragment)\n\t\tconst bd3D = shadowPosition.normalize();\n\n\t\t// percentage-closer filtering using cube texture sampling\n\t\tresult.assign( filterFn( { depthTexture, bd3D, dp, shadow } ) );\n\n\t} );\n\n\treturn result;\n\n} );\n\n\n/**\n * Represents the shadow implementation for point light nodes.\n *\n * @augments ShadowNode\n */\nclass PointShadowNode extends ShadowNode {\n\n\tstatic get type() {\n\n\t\treturn 'PointShadowNode';\n\n\t}\n\n\t/**\n\t * Constructs a new point shadow node.\n\t *\n\t * @param {PointLight} light - The shadow casting point light.\n\t * @param {?PointLightShadow} [shadow=null] - An optional point light shadow.\n\t */\n\tconstructor( light, shadow = null ) {\n\n\t\tsuper( light, shadow );\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to return point light shadow specific\n\t * filtering functions.\n\t *\n\t * @param {number} type - The shadow type.\n\t * @return {Function} The filtering function.\n\t */\n\tgetShadowFilterFn( type ) {\n\n\t\treturn type === BasicShadowMap ? BasicPointShadowFilter : PointShadowFilter;\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation so the unaltered shadow position is used.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @param {Node<vec3>} shadowPosition - A node representing the shadow position.\n\t * @return {Node<vec3>} The shadow coordinates.\n\t */\n\tsetupShadowCoord( builder, shadowPosition ) {\n\n\t\treturn shadowPosition;\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to only use point light specific\n\t * shadow filter functions.\n\t *\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @param {Object} inputs - A configuration object that defines the shadow filtering.\n\t * @param {Function} inputs.filterFn - This function defines the filtering type of the shadow map e.g. PCF.\n\t * @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's depth texture.\n\t * @param {Node<vec3>} inputs.shadowCoord - Shadow coordinates which are used to sample from the shadow map.\n\t * @param {LightShadow} inputs.shadow - The light shadow.\n\t * @return {Node<float>} The result node of the shadow filtering.\n\t */\n\tsetupShadowFilter( builder, { filterFn, depthTexture, shadowCoord, shadow } ) {\n\n\t\treturn pointShadowFilter( { filterFn, depthTexture, shadowCoord, shadow } );\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to create a CubeRenderTarget with CubeDepthTexture.\n\t *\n\t * @param {LightShadow} shadow - The light shadow object.\n\t * @param {NodeBuilder} builder - A reference to the current node builder.\n\t * @return {Object} An object containing the shadow map and depth texture.\n\t */\n\tsetupRenderTarget( shadow, builder ) {\n\n\t\tconst depthTexture = new CubeDepthTexture( shadow.mapSize.width );\n\t\tdepthTexture.name = 'PointShadowDepthTexture';\n\t\tdepthTexture.compareFunction = builder.renderer.reversedDepthBuffer ? GreaterEqualCompare : LessEqualCompare;\n\n\t\tconst shadowMap = builder.createCubeRenderTarget( shadow.mapSize.width );\n\t\tshadowMap.texture.name = 'PointShadowMap';\n\t\tshadowMap.depthTexture = depthTexture;\n\n\t\treturn { shadowMap, depthTexture };\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation with point light specific\n\t * rendering code.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\trenderShadow( frame ) {\n\n\t\tconst { shadow, shadowMap, light } = this;\n\t\tconst { renderer, scene } = frame;\n\n\t\tconst camera = shadow.camera;\n\t\tconst shadowMatrix = shadow.matrix;\n\n\t\t// Select cube directions/ups based on coordinate system\n\t\tconst isWebGPU = renderer.coordinateSystem === WebGPUCoordinateSystem;\n\t\tconst cubeDirections = isWebGPU ? _cubeDirectionsWebGPU : _cubeDirectionsWebGL;\n\t\tconst cubeUps = isWebGPU ? _cubeUpsWebGPU : _cubeUpsWebGL;\n\n\t\tshadowMap.setSize( shadow.mapSize.width, shadow.mapSize.width );\n\n\t\t//\n\n\t\tconst previousAutoClear = renderer.autoClear;\n\n\t\tconst previousClearColor = renderer.getClearColor( _clearColor$1 );\n\t\tconst previousClearAlpha = renderer.getClearAlpha();\n\n\t\trenderer.autoClear = false;\n\t\trenderer.setClearColor( shadow.clearColor, shadow.clearAlpha );\n\n\t\t// Render each cube face\n\t\tfor ( let face = 0; face < 6; face ++ ) {\n\n\t\t\t// Set render target to the specific cube face\n\t\t\trenderer.setRenderTarget( shadowMap, face );\n\t\t\trenderer.clear();\n\n\t\t\t// Update shadow camera matrices for this face\n\n\t\t\tconst far = light.distance || camera.far;\n\n\t\t\tif ( far !== camera.far ) {\n\n\t\t\t\tcamera.far = far;\n\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t\t_lookTarget.copy( camera.position );\n\t\t\t_lookTarget.add( cubeDirections[ face ] );\n\t\t\tcamera.up.copy( cubeUps[ face ] );\n\t\t\tcamera.lookAt( _lookTarget );\n\t\t\tcamera.updateMatrixWorld();\n\n\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t_projScreenMatrix$1.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\tshadow._frustum.setFromProjectionMatrix( _projScreenMatrix$1, camera.coordinateSystem, camera.reversedDepth );\n\n\t\t\t//\n\n\t\t\tconst currentSceneName = scene.name;\n\n\t\t\tscene.name = `Point Light Shadow [ ${ light.name || 'ID: ' + light.id } ] - Face ${ face + 1 }`;\n\n\t\t\trenderer.render( scene, camera );\n\n\t\t\tscene.name = currentSceneName;\n\n\t\t}\n\n\t\t//\n\n\t\trenderer.autoClear = previousAutoClear;\n\t\trenderer.setClearColor( previousClearColor, previousClearAlpha );\n\n\t}\n\n}\n\n/**\n * TSL function for creating an instance of `PointShadowNode`.\n *\n * @tsl\n * @function\n * @param {PointLight} light - The shadow casting point light.\n * @param {?PointLightShadow} [shadow=null] - An optional point light shadow.\n * @return {PointShadowNode} The created point shadow node.\n */\nconst pointShadow = ( light, shadow ) => new PointShadowNode( light, shadow );\n\n/**\n * Base class for analytic light nodes.\n *\n * @augments LightingNode\n */\nclass AnalyticLightNode extends LightingNode {\n\n\tstatic get type() {\n\n\t\treturn 'AnalyticLightNode';\n\n\t}\n\n\t/**\n\t * Constructs a new analytic light node.\n\t *\n\t * @param {?Light} [light=null] - The light source.\n\t */\n\tconstructor( light = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The light source.\n\t\t *\n\t\t * @type {?Light}\n\t\t * @default null\n\t\t */\n\t\tthis.light = light;\n\n\t\t/**\n\t\t * The light's color value.\n\t\t *\n\t\t * @type {Color}\n\t\t */\n\t\tthis.color = new Color();\n\n\t\t/**\n\t\t * The light's color node. Points to `colorNode` of the light source, if set. Otherwise\n\t\t * it creates a uniform node based on {@link AnalyticLightNode#color}.\n\t\t *\n\t\t * @type {Node}\n\t\t */\n\t\tthis.colorNode = ( light && light.colorNode ) || uniform( this.color ).setGroup( renderGroup );\n\n\t\t/**\n\t\t * This property is used to retain a reference to the original value of {@link AnalyticLightNode#colorNode}.\n\t\t * The final color node is represented by a different node when using shadows.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.baseColorNode = null;\n\n\t\t/**\n\t\t * Represents the light's shadow.\n\t\t *\n\t\t * @type {?ShadowNode}\n   \t\t * @default null\n\t\t */\n\t\tthis.shadowNode = null;\n\n\t\t/**\n\t\t * Represents the light's shadow color.\n\t\t *\n\t\t * @type {?Node}\n   \t\t * @default null\n\t\t */\n\t\tthis.shadowColorNode = null;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isAnalyticLightNode = true;\n\n\t\t/**\n\t\t * Overwritten since analytic light nodes are updated\n\t\t * once per frame.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'frame'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.FRAME;\n\n\t\tif ( light && light.shadow ) {\n\n\t\t\tthis._shadowDisposeListener = () => {\n\n\t\t\t\tthis.disposeShadow();\n\n\t\t\t};\n\n\t\t\tlight.addEventListener( 'dispose', this._shadowDisposeListener );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this._shadowDisposeListener ) {\n\n\t\t\tthis.light.removeEventListener( 'dispose', this._shadowDisposeListener );\n\n\t\t}\n\n\t\tsuper.dispose();\n\n\t}\n\n\t/**\n\t * Frees internal resources related to shadows.\n\t */\n\tdisposeShadow() {\n\n\t\tif ( this.shadowNode !== null ) {\n\n\t\t\tthis.shadowNode.dispose();\n\t\t\tthis.shadowNode = null;\n\n\t\t}\n\n\t\tthis.shadowColorNode = null;\n\n\t\tif ( this.baseColorNode !== null ) {\n\n\t\t\tthis.colorNode = this.baseColorNode;\n\t\t\tthis.baseColorNode = null;\n\n\t\t}\n\n\t}\n\n\tgetHash() {\n\n\t\treturn this.light.uuid;\n\n\t}\n\n\t/**\n\t * Returns a node representing a direction vector which points from the current\n\t * position in view space to the light's position in view space.\n\t *\n\t * @param {NodeBuilder} builder - The builder object used for setting up the light.\n\t * @return {Node<vec3>} The light vector node.\n\t */\n\tgetLightVector( builder ) {\n\n\t\treturn lightViewPosition( this.light ).sub( builder.context.positionView || positionView );\n\n\t}\n\n\t/**\n\t * Sets up the direct lighting for the analytic light node.\n\t *\n\t * @abstract\n\t * @param {NodeBuilder} builder - The builder object used for setting up the light.\n\t * @return {Object|undefined} The direct light data (color and direction).\n\t */\n\tsetupDirect( /*builder*/ ) { }\n\n\t/**\n\t * Sets up the direct rect area lighting for the analytic light node.\n\t *\n\t * @abstract\n\t * @param {NodeBuilder} builder - The builder object used for setting up the light.\n\t * @return {Object|undefined} The direct rect area light data.\n\t */\n\tsetupDirectRectArea( /*builder*/ ) { }\n\n\t/**\n\t * Setups the shadow node for this light. The method exists so concrete light classes\n\t * can setup different types of shadow nodes.\n\t *\n\t * @return {ShadowNode} The created shadow node.\n\t */\n\tsetupShadowNode() {\n\n\t\treturn shadow( this.light );\n\n\t}\n\n\t/**\n\t * Setups the shadow for this light. This method is only executed if the light\n\t * cast shadows and the current build object receives shadows. It incorporates\n\t * shadows into the lighting computation.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetupShadow( builder ) {\n\n\t\tconst { renderer } = builder;\n\n\t\tif ( renderer.shadowMap.enabled === false ) return;\n\n\t\tlet shadowColorNode = this.shadowColorNode;\n\n\t\tif ( shadowColorNode === null ) {\n\n\t\t\tconst customShadowNode = this.light.shadow.shadowNode;\n\n\t\t\tlet shadowNode;\n\n\t\t\tif ( customShadowNode !== undefined ) {\n\n\t\t\t\tshadowNode = nodeObject( customShadowNode );\n\n\t\t\t} else {\n\n\t\t\t\tshadowNode = this.setupShadowNode();\n\n\t\t\t}\n\n\t\t\tthis.shadowNode = shadowNode;\n\n\t\t\tthis.shadowColorNode = shadowColorNode = this.colorNode.mul( shadowNode );\n\n\t\t\tthis.baseColorNode = this.colorNode;\n\n\t\t}\n\n\t\t//\n\n\t\tif ( builder.context.getShadow ) {\n\n\t\t\tshadowColorNode = builder.context.getShadow( this, builder );\n\n\t\t}\n\n\t\tthis.colorNode = shadowColorNode;\n\n\t}\n\n\t/**\n\t * Unlike most other nodes, lighting nodes do not return a output node in {@link Node#setup}.\n\t * The main purpose of lighting nodes is to configure the current {@link LightingModel} and/or\n\t * invocate the respective interface methods.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t */\n\tsetup( builder ) {\n\n\t\tthis.colorNode = this.baseColorNode || this.colorNode;\n\n\t\tif ( this.light.castShadow ) {\n\n\t\t\tif ( builder.object.receiveShadow ) {\n\n\t\t\t\tthis.setupShadow( builder );\n\n\t\t\t}\n\n\t\t} else if ( this.shadowNode !== null ) {\n\n\t\t\tthis.shadowNode.dispose();\n\t\t\tthis.shadowNode = null;\n\t\t\tthis.shadowColorNode = null;\n\n\t\t}\n\n\t\tconst directLightData = this.setupDirect( builder );\n\t\tconst directRectAreaLightData = this.setupDirectRectArea( builder );\n\n\t\tif ( directLightData ) {\n\n\t\t\tbuilder.lightsNode.setupDirectLight( builder, this, directLightData );\n\n\t\t}\n\n\t\tif ( directRectAreaLightData ) {\n\n\t\t\tbuilder.lightsNode.setupDirectRectAreaLight( builder, this, directRectAreaLightData );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The update method is used to update light uniforms per frame.\n\t * Potentially overwritten in concrete light nodes to update light\n\t * specific uniforms.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( /*frame*/ ) {\n\n\t\tconst { light } = this;\n\n\t\tthis.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t}\n\n}\n\n/**\n * Represents a `discard` shader operation in TSL.\n *\n * @method\n * @param {Object} inputs - The input parameter object.\n * @param {Node<float>} inputs.lightDistance - The distance of the light's position to the current fragment position.\n * @param {Node<float>} inputs.cutoffDistance - The light's cutoff distance.\n * @param {Node<float>} inputs.decayExponent - The light's decay exponent.\n * @return {Node<float>} The distance falloff.\n */\nconst getDistanceAttenuation = /*@__PURE__*/ Fn( ( { lightDistance, cutoffDistance, decayExponent } ) => {\n\n\t// based upon Frostbite 3 Moving to Physically-based Rendering\n\t// page 32, equation 26: E[window1]\n\t// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\tconst distanceFalloff = lightDistance.pow( decayExponent ).max( 0.01 ).reciprocal();\n\n\treturn cutoffDistance.greaterThan( 0 ).select(\n\t\tdistanceFalloff.mul( lightDistance.div( cutoffDistance ).pow4().oneMinus().clamp().pow2() ),\n\t\tdistanceFalloff\n\t);\n\n} ); // validated\n\nconst directPointLight = ( { color, lightVector, cutoffDistance, decayExponent } ) => {\n\n\tconst lightDirection = lightVector.normalize();\n\tconst lightDistance = lightVector.length();\n\n\tconst attenuation = getDistanceAttenuation( {\n\t\tlightDistance,\n\t\tcutoffDistance,\n\t\tdecayExponent\n\t} );\n\n\tconst lightColor = color.mul( attenuation );\n\n\treturn { lightDirection, lightColor };\n\n};\n\n/**\n * Module for representing point lights as nodes.\n *\n * @augments AnalyticLightNode\n */\nclass PointLightNode extends AnalyticLightNode {\n\n\tstatic get type() {\n\n\t\treturn 'PointLightNode';\n\n\t}\n\n\t/**\n\t * Constructs a new point light node.\n\t *\n\t * @param {?PointLight} [light=null] - The point light source.\n\t */\n\tconstructor( light = null ) {\n\n\t\tsuper( light );\n\n\t\t/**\n\t\t * Uniform node representing the cutoff distance.\n\t\t *\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis.cutoffDistanceNode = uniform( 0 ).setGroup( renderGroup );\n\n\t\t/**\n\t\t * Uniform node representing the decay exponent.\n\t\t *\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis.decayExponentNode = uniform( 2 ).setGroup( renderGroup );\n\n\t}\n\n\t/**\n\t * Overwritten to updated point light specific uniforms.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tconst { light } = this;\n\n\t\tsuper.update( frame );\n\n\t\tthis.cutoffDistanceNode.value = light.distance;\n\t\tthis.decayExponentNode.value = light.decay;\n\n\t}\n\n\t/**\n\t * Overwritten to setup point light specific shadow.\n\t *\n\t * @return {PointShadowNode}\n\t */\n\tsetupShadowNode() {\n\n\t\treturn pointShadow( this.light );\n\n\t}\n\n\tsetupDirect( builder ) {\n\n\t\treturn directPointLight( {\n\t\t\tcolor: this.colorNode,\n\t\t\tlightVector: this.getLightVector( builder ),\n\t\t\tcutoffDistance: this.cutoffDistanceNode,\n\t\t\tdecayExponent: this.decayExponentNode\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Creates a 2x2 checkerboard pattern that can be used as procedural texture data.\n *\n * @tsl\n * @function\n * @param {Node<vec2>} coord - The uv coordinates.\n * @return {Node<float>} The result data.\n */\nconst checker = /*@__PURE__*/ Fn( ( [ coord = uv$1() ] ) => {\n\n\tconst uv = coord.mul( 2.0 );\n\n\tconst cx = uv.x.floor();\n\tconst cy = uv.y.floor();\n\tconst result = cx.add( cy ).mod( 2.0 );\n\n\treturn result.sign();\n\n} );\n\n/**\n * Generates a circle based on the uv coordinates.\n *\n * @tsl\n * @function\n * @param {Node<vec2>} coord - The uv to generate the circle.\n * @return {Node<float>} The circle shape.\n */\nconst shapeCircle = Fn( ( [ coord = uv$1() ], { renderer, material } ) => {\n\n\tconst len2 = lengthSq( coord.mul( 2 ).sub( 1 ) );\n\n\tlet alpha;\n\n\tif ( material.alphaToCoverage && renderer.currentSamples > 0 ) {\n\n\t\tconst dlen = float( len2.fwidth() ).toVar();\n\n\t\talpha = smoothstep( dlen.oneMinus(), dlen.add( 1 ), len2 ).oneMinus();\n\n\t} else {\n\n\t\talpha = select( len2.greaterThan( 1.0 ), 0, 1 );\n\n\t}\n\n\treturn alpha;\n\n} );\n\n// Three.js Transpiler\n// https://raw.githubusercontent.com/AcademySoftwareFoundation/MaterialX/main/libraries/stdlib/genglsl/lib/mx_noise.glsl\n\n\n\nconst mx_select = /*@__PURE__*/ Fn( ( [ b_immutable, t_immutable, f_immutable ] ) => {\n\n\tconst f = float( f_immutable ).toVar();\n\tconst t = float( t_immutable ).toVar();\n\tconst b = bool( b_immutable ).toVar();\n\n\treturn select( b, t, f );\n\n} ).setLayout( {\n\tname: 'mx_select',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'b', type: 'bool' },\n\t\t{ name: 't', type: 'float' },\n\t\t{ name: 'f', type: 'float' }\n\t]\n} );\n\nconst mx_negate_if = /*@__PURE__*/ Fn( ( [ val_immutable, b_immutable ] ) => {\n\n\tconst b = bool( b_immutable ).toVar();\n\tconst val = float( val_immutable ).toVar();\n\n\treturn select( b, val.negate(), val );\n\n} ).setLayout( {\n\tname: 'mx_negate_if',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'val', type: 'float' },\n\t\t{ name: 'b', type: 'bool' }\n\t]\n} );\n\nconst mx_floor = /*@__PURE__*/ Fn( ( [ x_immutable ] ) => {\n\n\tconst x = float( x_immutable ).toVar();\n\n\treturn int( floor( x ) );\n\n} ).setLayout( {\n\tname: 'mx_floor',\n\ttype: 'int',\n\tinputs: [\n\t\t{ name: 'x', type: 'float' }\n\t]\n} );\n\nconst mx_floorfrac = /*@__PURE__*/ Fn( ( [ x_immutable, i ] ) => {\n\n\tconst x = float( x_immutable ).toVar();\n\ti.assign( mx_floor( x ) );\n\n\treturn x.sub( float( i ) );\n\n} );\n\nconst mx_bilerp_0 = /*@__PURE__*/ Fn( ( [ v0_immutable, v1_immutable, v2_immutable, v3_immutable, s_immutable, t_immutable ] ) => {\n\n\tconst t = float( t_immutable ).toVar();\n\tconst s = float( s_immutable ).toVar();\n\tconst v3 = float( v3_immutable ).toVar();\n\tconst v2 = float( v2_immutable ).toVar();\n\tconst v1 = float( v1_immutable ).toVar();\n\tconst v0 = float( v0_immutable ).toVar();\n\tconst s1 = float( sub( 1.0, s ) ).toVar();\n\n\treturn sub( 1.0, t ).mul( v0.mul( s1 ).add( v1.mul( s ) ) ).add( t.mul( v2.mul( s1 ).add( v3.mul( s ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_bilerp_0',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'v0', type: 'float' },\n\t\t{ name: 'v1', type: 'float' },\n\t\t{ name: 'v2', type: 'float' },\n\t\t{ name: 'v3', type: 'float' },\n\t\t{ name: 's', type: 'float' },\n\t\t{ name: 't', type: 'float' }\n\t]\n} );\n\nconst mx_bilerp_1 = /*@__PURE__*/ Fn( ( [ v0_immutable, v1_immutable, v2_immutable, v3_immutable, s_immutable, t_immutable ] ) => {\n\n\tconst t = float( t_immutable ).toVar();\n\tconst s = float( s_immutable ).toVar();\n\tconst v3 = vec3( v3_immutable ).toVar();\n\tconst v2 = vec3( v2_immutable ).toVar();\n\tconst v1 = vec3( v1_immutable ).toVar();\n\tconst v0 = vec3( v0_immutable ).toVar();\n\tconst s1 = float( sub( 1.0, s ) ).toVar();\n\n\treturn sub( 1.0, t ).mul( v0.mul( s1 ).add( v1.mul( s ) ) ).add( t.mul( v2.mul( s1 ).add( v3.mul( s ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_bilerp_1',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'v0', type: 'vec3' },\n\t\t{ name: 'v1', type: 'vec3' },\n\t\t{ name: 'v2', type: 'vec3' },\n\t\t{ name: 'v3', type: 'vec3' },\n\t\t{ name: 's', type: 'float' },\n\t\t{ name: 't', type: 'float' }\n\t]\n} );\n\nconst mx_bilerp = /*@__PURE__*/ overloadingFn( [ mx_bilerp_0, mx_bilerp_1 ] );\n\nconst mx_trilerp_0 = /*@__PURE__*/ Fn( ( [ v0_immutable, v1_immutable, v2_immutable, v3_immutable, v4_immutable, v5_immutable, v6_immutable, v7_immutable, s_immutable, t_immutable, r_immutable ] ) => {\n\n\tconst r = float( r_immutable ).toVar();\n\tconst t = float( t_immutable ).toVar();\n\tconst s = float( s_immutable ).toVar();\n\tconst v7 = float( v7_immutable ).toVar();\n\tconst v6 = float( v6_immutable ).toVar();\n\tconst v5 = float( v5_immutable ).toVar();\n\tconst v4 = float( v4_immutable ).toVar();\n\tconst v3 = float( v3_immutable ).toVar();\n\tconst v2 = float( v2_immutable ).toVar();\n\tconst v1 = float( v1_immutable ).toVar();\n\tconst v0 = float( v0_immutable ).toVar();\n\tconst s1 = float( sub( 1.0, s ) ).toVar();\n\tconst t1 = float( sub( 1.0, t ) ).toVar();\n\tconst r1 = float( sub( 1.0, r ) ).toVar();\n\n\treturn r1.mul( t1.mul( v0.mul( s1 ).add( v1.mul( s ) ) ).add( t.mul( v2.mul( s1 ).add( v3.mul( s ) ) ) ) ).add( r.mul( t1.mul( v4.mul( s1 ).add( v5.mul( s ) ) ).add( t.mul( v6.mul( s1 ).add( v7.mul( s ) ) ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_trilerp_0',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'v0', type: 'float' },\n\t\t{ name: 'v1', type: 'float' },\n\t\t{ name: 'v2', type: 'float' },\n\t\t{ name: 'v3', type: 'float' },\n\t\t{ name: 'v4', type: 'float' },\n\t\t{ name: 'v5', type: 'float' },\n\t\t{ name: 'v6', type: 'float' },\n\t\t{ name: 'v7', type: 'float' },\n\t\t{ name: 's', type: 'float' },\n\t\t{ name: 't', type: 'float' },\n\t\t{ name: 'r', type: 'float' }\n\t]\n} );\n\nconst mx_trilerp_1 = /*@__PURE__*/ Fn( ( [ v0_immutable, v1_immutable, v2_immutable, v3_immutable, v4_immutable, v5_immutable, v6_immutable, v7_immutable, s_immutable, t_immutable, r_immutable ] ) => {\n\n\tconst r = float( r_immutable ).toVar();\n\tconst t = float( t_immutable ).toVar();\n\tconst s = float( s_immutable ).toVar();\n\tconst v7 = vec3( v7_immutable ).toVar();\n\tconst v6 = vec3( v6_immutable ).toVar();\n\tconst v5 = vec3( v5_immutable ).toVar();\n\tconst v4 = vec3( v4_immutable ).toVar();\n\tconst v3 = vec3( v3_immutable ).toVar();\n\tconst v2 = vec3( v2_immutable ).toVar();\n\tconst v1 = vec3( v1_immutable ).toVar();\n\tconst v0 = vec3( v0_immutable ).toVar();\n\tconst s1 = float( sub( 1.0, s ) ).toVar();\n\tconst t1 = float( sub( 1.0, t ) ).toVar();\n\tconst r1 = float( sub( 1.0, r ) ).toVar();\n\n\treturn r1.mul( t1.mul( v0.mul( s1 ).add( v1.mul( s ) ) ).add( t.mul( v2.mul( s1 ).add( v3.mul( s ) ) ) ) ).add( r.mul( t1.mul( v4.mul( s1 ).add( v5.mul( s ) ) ).add( t.mul( v6.mul( s1 ).add( v7.mul( s ) ) ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_trilerp_1',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'v0', type: 'vec3' },\n\t\t{ name: 'v1', type: 'vec3' },\n\t\t{ name: 'v2', type: 'vec3' },\n\t\t{ name: 'v3', type: 'vec3' },\n\t\t{ name: 'v4', type: 'vec3' },\n\t\t{ name: 'v5', type: 'vec3' },\n\t\t{ name: 'v6', type: 'vec3' },\n\t\t{ name: 'v7', type: 'vec3' },\n\t\t{ name: 's', type: 'float' },\n\t\t{ name: 't', type: 'float' },\n\t\t{ name: 'r', type: 'float' }\n\t]\n} );\n\nconst mx_trilerp = /*@__PURE__*/ overloadingFn( [ mx_trilerp_0, mx_trilerp_1 ] );\n\nconst mx_gradient_float_0 = /*@__PURE__*/ Fn( ( [ hash_immutable, x_immutable, y_immutable ] ) => {\n\n\tconst y = float( y_immutable ).toVar();\n\tconst x = float( x_immutable ).toVar();\n\tconst hash = uint( hash_immutable ).toVar();\n\tconst h = uint( hash.bitAnd( uint( 7 ) ) ).toVar();\n\tconst u = float( mx_select( h.lessThan( uint( 4 ) ), x, y ) ).toVar();\n\tconst v = float( mul( 2.0, mx_select( h.lessThan( uint( 4 ) ), y, x ) ) ).toVar();\n\n\treturn mx_negate_if( u, bool( h.bitAnd( uint( 1 ) ) ) ).add( mx_negate_if( v, bool( h.bitAnd( uint( 2 ) ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_gradient_float_0',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'hash', type: 'uint' },\n\t\t{ name: 'x', type: 'float' },\n\t\t{ name: 'y', type: 'float' }\n\t]\n} );\n\nconst mx_gradient_float_1 = /*@__PURE__*/ Fn( ( [ hash_immutable, x_immutable, y_immutable, z_immutable ] ) => {\n\n\tconst z = float( z_immutable ).toVar();\n\tconst y = float( y_immutable ).toVar();\n\tconst x = float( x_immutable ).toVar();\n\tconst hash = uint( hash_immutable ).toVar();\n\tconst h = uint( hash.bitAnd( uint( 15 ) ) ).toVar();\n\tconst u = float( mx_select( h.lessThan( uint( 8 ) ), x, y ) ).toVar();\n\tconst v = float( mx_select( h.lessThan( uint( 4 ) ), y, mx_select( h.equal( uint( 12 ) ).or( h.equal( uint( 14 ) ) ), x, z ) ) ).toVar();\n\n\treturn mx_negate_if( u, bool( h.bitAnd( uint( 1 ) ) ) ).add( mx_negate_if( v, bool( h.bitAnd( uint( 2 ) ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_gradient_float_1',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'hash', type: 'uint' },\n\t\t{ name: 'x', type: 'float' },\n\t\t{ name: 'y', type: 'float' },\n\t\t{ name: 'z', type: 'float' }\n\t]\n} );\n\nconst mx_gradient_float = /*@__PURE__*/ overloadingFn( [ mx_gradient_float_0, mx_gradient_float_1 ] );\n\nconst mx_gradient_vec3_0 = /*@__PURE__*/ Fn( ( [ hash_immutable, x_immutable, y_immutable ] ) => {\n\n\tconst y = float( y_immutable ).toVar();\n\tconst x = float( x_immutable ).toVar();\n\tconst hash = uvec3( hash_immutable ).toVar();\n\n\treturn vec3( mx_gradient_float( hash.x, x, y ), mx_gradient_float( hash.y, x, y ), mx_gradient_float( hash.z, x, y ) );\n\n} ).setLayout( {\n\tname: 'mx_gradient_vec3_0',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'hash', type: 'uvec3' },\n\t\t{ name: 'x', type: 'float' },\n\t\t{ name: 'y', type: 'float' }\n\t]\n} );\n\nconst mx_gradient_vec3_1 = /*@__PURE__*/ Fn( ( [ hash_immutable, x_immutable, y_immutable, z_immutable ] ) => {\n\n\tconst z = float( z_immutable ).toVar();\n\tconst y = float( y_immutable ).toVar();\n\tconst x = float( x_immutable ).toVar();\n\tconst hash = uvec3( hash_immutable ).toVar();\n\n\treturn vec3( mx_gradient_float( hash.x, x, y, z ), mx_gradient_float( hash.y, x, y, z ), mx_gradient_float( hash.z, x, y, z ) );\n\n} ).setLayout( {\n\tname: 'mx_gradient_vec3_1',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'hash', type: 'uvec3' },\n\t\t{ name: 'x', type: 'float' },\n\t\t{ name: 'y', type: 'float' },\n\t\t{ name: 'z', type: 'float' }\n\t]\n} );\n\nconst mx_gradient_vec3 = /*@__PURE__*/ overloadingFn( [ mx_gradient_vec3_0, mx_gradient_vec3_1 ] );\n\nconst mx_gradient_scale2d_0 = /*@__PURE__*/ Fn( ( [ v_immutable ] ) => {\n\n\tconst v = float( v_immutable ).toVar();\n\n\treturn mul( 0.6616, v );\n\n} ).setLayout( {\n\tname: 'mx_gradient_scale2d_0',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'v', type: 'float' }\n\t]\n} );\n\nconst mx_gradient_scale3d_0 = /*@__PURE__*/ Fn( ( [ v_immutable ] ) => {\n\n\tconst v = float( v_immutable ).toVar();\n\n\treturn mul( 0.9820, v );\n\n} ).setLayout( {\n\tname: 'mx_gradient_scale3d_0',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'v', type: 'float' }\n\t]\n} );\n\nconst mx_gradient_scale2d_1 = /*@__PURE__*/ Fn( ( [ v_immutable ] ) => {\n\n\tconst v = vec3( v_immutable ).toVar();\n\n\treturn mul( 0.6616, v );\n\n} ).setLayout( {\n\tname: 'mx_gradient_scale2d_1',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'v', type: 'vec3' }\n\t]\n} );\n\nconst mx_gradient_scale2d = /*@__PURE__*/ overloadingFn( [ mx_gradient_scale2d_0, mx_gradient_scale2d_1 ] );\n\nconst mx_gradient_scale3d_1 = /*@__PURE__*/ Fn( ( [ v_immutable ] ) => {\n\n\tconst v = vec3( v_immutable ).toVar();\n\n\treturn mul( 0.9820, v );\n\n} ).setLayout( {\n\tname: 'mx_gradient_scale3d_1',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'v', type: 'vec3' }\n\t]\n} );\n\nconst mx_gradient_scale3d = /*@__PURE__*/ overloadingFn( [ mx_gradient_scale3d_0, mx_gradient_scale3d_1 ] );\n\nconst mx_rotl32 = /*@__PURE__*/ Fn( ( [ x_immutable, k_immutable ] ) => {\n\n\tconst k = int( k_immutable ).toVar();\n\tconst x = uint( x_immutable ).toVar();\n\n\treturn x.shiftLeft( k ).bitOr( x.shiftRight( int( 32 ).sub( k ) ) );\n\n} ).setLayout( {\n\tname: 'mx_rotl32',\n\ttype: 'uint',\n\tinputs: [\n\t\t{ name: 'x', type: 'uint' },\n\t\t{ name: 'k', type: 'int' }\n\t]\n} );\n\nconst mx_bjmix = /*@__PURE__*/ Fn( ( [ a, b, c ] ) => {\n\n\ta.subAssign( c );\n\ta.bitXorAssign( mx_rotl32( c, int( 4 ) ) );\n\tc.addAssign( b );\n\tb.subAssign( a );\n\tb.bitXorAssign( mx_rotl32( a, int( 6 ) ) );\n\ta.addAssign( c );\n\tc.subAssign( b );\n\tc.bitXorAssign( mx_rotl32( b, int( 8 ) ) );\n\tb.addAssign( a );\n\ta.subAssign( c );\n\ta.bitXorAssign( mx_rotl32( c, int( 16 ) ) );\n\tc.addAssign( b );\n\tb.subAssign( a );\n\tb.bitXorAssign( mx_rotl32( a, int( 19 ) ) );\n\ta.addAssign( c );\n\tc.subAssign( b );\n\tc.bitXorAssign( mx_rotl32( b, int( 4 ) ) );\n\tb.addAssign( a );\n\n} );\n\nconst mx_bjfinal = /*@__PURE__*/ Fn( ( [ a_immutable, b_immutable, c_immutable ] ) => {\n\n\tconst c = uint( c_immutable ).toVar();\n\tconst b = uint( b_immutable ).toVar();\n\tconst a = uint( a_immutable ).toVar();\n\tc.bitXorAssign( b );\n\tc.subAssign( mx_rotl32( b, int( 14 ) ) );\n\ta.bitXorAssign( c );\n\ta.subAssign( mx_rotl32( c, int( 11 ) ) );\n\tb.bitXorAssign( a );\n\tb.subAssign( mx_rotl32( a, int( 25 ) ) );\n\tc.bitXorAssign( b );\n\tc.subAssign( mx_rotl32( b, int( 16 ) ) );\n\ta.bitXorAssign( c );\n\ta.subAssign( mx_rotl32( c, int( 4 ) ) );\n\tb.bitXorAssign( a );\n\tb.subAssign( mx_rotl32( a, int( 14 ) ) );\n\tc.bitXorAssign( b );\n\tc.subAssign( mx_rotl32( b, int( 24 ) ) );\n\n\treturn c;\n\n} ).setLayout( {\n\tname: 'mx_bjfinal',\n\ttype: 'uint',\n\tinputs: [\n\t\t{ name: 'a', type: 'uint' },\n\t\t{ name: 'b', type: 'uint' },\n\t\t{ name: 'c', type: 'uint' }\n\t]\n} );\n\nconst mx_bits_to_01 = /*@__PURE__*/ Fn( ( [ bits_immutable ] ) => {\n\n\tconst bits = uint( bits_immutable ).toVar();\n\n\treturn float( bits ).div( float( uint( int( 0xffffffff ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_bits_to_01',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'bits', type: 'uint' }\n\t]\n} );\n\nconst mx_fade = /*@__PURE__*/ Fn( ( [ t_immutable ] ) => {\n\n\tconst t = float( t_immutable ).toVar();\n\n\treturn t.mul( t ).mul( t ).mul( t.mul( t.mul( 6.0 ).sub( 15.0 ) ).add( 10.0 ) );\n\n} ).setLayout( {\n\tname: 'mx_fade',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 't', type: 'float' }\n\t]\n} );\n\nconst mx_hash_int_0 = /*@__PURE__*/ Fn( ( [ x_immutable ] ) => {\n\n\tconst x = int( x_immutable ).toVar();\n\tconst len = uint( uint( 1 ) ).toVar();\n\tconst seed = uint( uint( int( 0xdeadbeef ) ).add( len.shiftLeft( uint( 2 ) ) ).add( uint( 13 ) ) ).toVar();\n\n\treturn mx_bjfinal( seed.add( uint( x ) ), seed, seed );\n\n} ).setLayout( {\n\tname: 'mx_hash_int_0',\n\ttype: 'uint',\n\tinputs: [\n\t\t{ name: 'x', type: 'int' }\n\t]\n} );\n\nconst mx_hash_int_1 = /*@__PURE__*/ Fn( ( [ x_immutable, y_immutable ] ) => {\n\n\tconst y = int( y_immutable ).toVar();\n\tconst x = int( x_immutable ).toVar();\n\tconst len = uint( uint( 2 ) ).toVar();\n\tconst a = uint().toVar(), b = uint().toVar(), c = uint().toVar();\n\ta.assign( b.assign( c.assign( uint( int( 0xdeadbeef ) ).add( len.shiftLeft( uint( 2 ) ) ).add( uint( 13 ) ) ) ) );\n\ta.addAssign( uint( x ) );\n\tb.addAssign( uint( y ) );\n\n\treturn mx_bjfinal( a, b, c );\n\n} ).setLayout( {\n\tname: 'mx_hash_int_1',\n\ttype: 'uint',\n\tinputs: [\n\t\t{ name: 'x', type: 'int' },\n\t\t{ name: 'y', type: 'int' }\n\t]\n} );\n\nconst mx_hash_int_2 = /*@__PURE__*/ Fn( ( [ x_immutable, y_immutable, z_immutable ] ) => {\n\n\tconst z = int( z_immutable ).toVar();\n\tconst y = int( y_immutable ).toVar();\n\tconst x = int( x_immutable ).toVar();\n\tconst len = uint( uint( 3 ) ).toVar();\n\tconst a = uint().toVar(), b = uint().toVar(), c = uint().toVar();\n\ta.assign( b.assign( c.assign( uint( int( 0xdeadbeef ) ).add( len.shiftLeft( uint( 2 ) ) ).add( uint( 13 ) ) ) ) );\n\ta.addAssign( uint( x ) );\n\tb.addAssign( uint( y ) );\n\tc.addAssign( uint( z ) );\n\n\treturn mx_bjfinal( a, b, c );\n\n} ).setLayout( {\n\tname: 'mx_hash_int_2',\n\ttype: 'uint',\n\tinputs: [\n\t\t{ name: 'x', type: 'int' },\n\t\t{ name: 'y', type: 'int' },\n\t\t{ name: 'z', type: 'int' }\n\t]\n} );\n\nconst mx_hash_int_3 = /*@__PURE__*/ Fn( ( [ x_immutable, y_immutable, z_immutable, xx_immutable ] ) => {\n\n\tconst xx = int( xx_immutable ).toVar();\n\tconst z = int( z_immutable ).toVar();\n\tconst y = int( y_immutable ).toVar();\n\tconst x = int( x_immutable ).toVar();\n\tconst len = uint( uint( 4 ) ).toVar();\n\tconst a = uint().toVar(), b = uint().toVar(), c = uint().toVar();\n\ta.assign( b.assign( c.assign( uint( int( 0xdeadbeef ) ).add( len.shiftLeft( uint( 2 ) ) ).add( uint( 13 ) ) ) ) );\n\ta.addAssign( uint( x ) );\n\tb.addAssign( uint( y ) );\n\tc.addAssign( uint( z ) );\n\tmx_bjmix( a, b, c );\n\ta.addAssign( uint( xx ) );\n\n\treturn mx_bjfinal( a, b, c );\n\n} ).setLayout( {\n\tname: 'mx_hash_int_3',\n\ttype: 'uint',\n\tinputs: [\n\t\t{ name: 'x', type: 'int' },\n\t\t{ name: 'y', type: 'int' },\n\t\t{ name: 'z', type: 'int' },\n\t\t{ name: 'xx', type: 'int' }\n\t]\n} );\n\nconst mx_hash_int_4 = /*@__PURE__*/ Fn( ( [ x_immutable, y_immutable, z_immutable, xx_immutable, yy_immutable ] ) => {\n\n\tconst yy = int( yy_immutable ).toVar();\n\tconst xx = int( xx_immutable ).toVar();\n\tconst z = int( z_immutable ).toVar();\n\tconst y = int( y_immutable ).toVar();\n\tconst x = int( x_immutable ).toVar();\n\tconst len = uint( uint( 5 ) ).toVar();\n\tconst a = uint().toVar(), b = uint().toVar(), c = uint().toVar();\n\ta.assign( b.assign( c.assign( uint( int( 0xdeadbeef ) ).add( len.shiftLeft( uint( 2 ) ) ).add( uint( 13 ) ) ) ) );\n\ta.addAssign( uint( x ) );\n\tb.addAssign( uint( y ) );\n\tc.addAssign( uint( z ) );\n\tmx_bjmix( a, b, c );\n\ta.addAssign( uint( xx ) );\n\tb.addAssign( uint( yy ) );\n\n\treturn mx_bjfinal( a, b, c );\n\n} ).setLayout( {\n\tname: 'mx_hash_int_4',\n\ttype: 'uint',\n\tinputs: [\n\t\t{ name: 'x', type: 'int' },\n\t\t{ name: 'y', type: 'int' },\n\t\t{ name: 'z', type: 'int' },\n\t\t{ name: 'xx', type: 'int' },\n\t\t{ name: 'yy', type: 'int' }\n\t]\n} );\n\nconst mx_hash_int = /*@__PURE__*/ overloadingFn( [ mx_hash_int_0, mx_hash_int_1, mx_hash_int_2, mx_hash_int_3, mx_hash_int_4 ] );\n\nconst mx_hash_vec3_0 = /*@__PURE__*/ Fn( ( [ x_immutable, y_immutable ] ) => {\n\n\tconst y = int( y_immutable ).toVar();\n\tconst x = int( x_immutable ).toVar();\n\tconst h = uint( mx_hash_int( x, y ) ).toVar();\n\tconst result = uvec3().toVar();\n\tresult.x.assign( h.bitAnd( int( 0xFF ) ) );\n\tresult.y.assign( h.shiftRight( int( 8 ) ).bitAnd( int( 0xFF ) ) );\n\tresult.z.assign( h.shiftRight( int( 16 ) ).bitAnd( int( 0xFF ) ) );\n\n\treturn result;\n\n} ).setLayout( {\n\tname: 'mx_hash_vec3_0',\n\ttype: 'uvec3',\n\tinputs: [\n\t\t{ name: 'x', type: 'int' },\n\t\t{ name: 'y', type: 'int' }\n\t]\n} );\n\nconst mx_hash_vec3_1 = /*@__PURE__*/ Fn( ( [ x_immutable, y_immutable, z_immutable ] ) => {\n\n\tconst z = int( z_immutable ).toVar();\n\tconst y = int( y_immutable ).toVar();\n\tconst x = int( x_immutable ).toVar();\n\tconst h = uint( mx_hash_int( x, y, z ) ).toVar();\n\tconst result = uvec3().toVar();\n\tresult.x.assign( h.bitAnd( int( 0xFF ) ) );\n\tresult.y.assign( h.shiftRight( int( 8 ) ).bitAnd( int( 0xFF ) ) );\n\tresult.z.assign( h.shiftRight( int( 16 ) ).bitAnd( int( 0xFF ) ) );\n\n\treturn result;\n\n} ).setLayout( {\n\tname: 'mx_hash_vec3_1',\n\ttype: 'uvec3',\n\tinputs: [\n\t\t{ name: 'x', type: 'int' },\n\t\t{ name: 'y', type: 'int' },\n\t\t{ name: 'z', type: 'int' }\n\t]\n} );\n\nconst mx_hash_vec3 = /*@__PURE__*/ overloadingFn( [ mx_hash_vec3_0, mx_hash_vec3_1 ] );\n\nconst mx_perlin_noise_float_0 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec2( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar();\n\tconst fx = float( mx_floorfrac( p.x, X ) ).toVar();\n\tconst fy = float( mx_floorfrac( p.y, Y ) ).toVar();\n\tconst u = float( mx_fade( fx ) ).toVar();\n\tconst v = float( mx_fade( fy ) ).toVar();\n\tconst result = float( mx_bilerp( mx_gradient_float( mx_hash_int( X, Y ), fx, fy ), mx_gradient_float( mx_hash_int( X.add( int( 1 ) ), Y ), fx.sub( 1.0 ), fy ), mx_gradient_float( mx_hash_int( X, Y.add( int( 1 ) ) ), fx, fy.sub( 1.0 ) ), mx_gradient_float( mx_hash_int( X.add( int( 1 ) ), Y.add( int( 1 ) ) ), fx.sub( 1.0 ), fy.sub( 1.0 ) ), u, v ) ).toVar();\n\n\treturn mx_gradient_scale2d( result );\n\n} ).setLayout( {\n\tname: 'mx_perlin_noise_float_0',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec2' }\n\t]\n} );\n\nconst mx_perlin_noise_float_1 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec3( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar(), Z = int().toVar();\n\tconst fx = float( mx_floorfrac( p.x, X ) ).toVar();\n\tconst fy = float( mx_floorfrac( p.y, Y ) ).toVar();\n\tconst fz = float( mx_floorfrac( p.z, Z ) ).toVar();\n\tconst u = float( mx_fade( fx ) ).toVar();\n\tconst v = float( mx_fade( fy ) ).toVar();\n\tconst w = float( mx_fade( fz ) ).toVar();\n\tconst result = float( mx_trilerp( mx_gradient_float( mx_hash_int( X, Y, Z ), fx, fy, fz ), mx_gradient_float( mx_hash_int( X.add( int( 1 ) ), Y, Z ), fx.sub( 1.0 ), fy, fz ), mx_gradient_float( mx_hash_int( X, Y.add( int( 1 ) ), Z ), fx, fy.sub( 1.0 ), fz ), mx_gradient_float( mx_hash_int( X.add( int( 1 ) ), Y.add( int( 1 ) ), Z ), fx.sub( 1.0 ), fy.sub( 1.0 ), fz ), mx_gradient_float( mx_hash_int( X, Y, Z.add( int( 1 ) ) ), fx, fy, fz.sub( 1.0 ) ), mx_gradient_float( mx_hash_int( X.add( int( 1 ) ), Y, Z.add( int( 1 ) ) ), fx.sub( 1.0 ), fy, fz.sub( 1.0 ) ), mx_gradient_float( mx_hash_int( X, Y.add( int( 1 ) ), Z.add( int( 1 ) ) ), fx, fy.sub( 1.0 ), fz.sub( 1.0 ) ), mx_gradient_float( mx_hash_int( X.add( int( 1 ) ), Y.add( int( 1 ) ), Z.add( int( 1 ) ) ), fx.sub( 1.0 ), fy.sub( 1.0 ), fz.sub( 1.0 ) ), u, v, w ) ).toVar();\n\n\treturn mx_gradient_scale3d( result );\n\n} ).setLayout( {\n\tname: 'mx_perlin_noise_float_1',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' }\n\t]\n} );\n\nconst mx_perlin_noise_float = /*@__PURE__*/ overloadingFn( [ mx_perlin_noise_float_0, mx_perlin_noise_float_1 ] );\n\nconst mx_perlin_noise_vec3_0 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec2( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar();\n\tconst fx = float( mx_floorfrac( p.x, X ) ).toVar();\n\tconst fy = float( mx_floorfrac( p.y, Y ) ).toVar();\n\tconst u = float( mx_fade( fx ) ).toVar();\n\tconst v = float( mx_fade( fy ) ).toVar();\n\tconst result = vec3( mx_bilerp( mx_gradient_vec3( mx_hash_vec3( X, Y ), fx, fy ), mx_gradient_vec3( mx_hash_vec3( X.add( int( 1 ) ), Y ), fx.sub( 1.0 ), fy ), mx_gradient_vec3( mx_hash_vec3( X, Y.add( int( 1 ) ) ), fx, fy.sub( 1.0 ) ), mx_gradient_vec3( mx_hash_vec3( X.add( int( 1 ) ), Y.add( int( 1 ) ) ), fx.sub( 1.0 ), fy.sub( 1.0 ) ), u, v ) ).toVar();\n\n\treturn mx_gradient_scale2d( result );\n\n} ).setLayout( {\n\tname: 'mx_perlin_noise_vec3_0',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec2' }\n\t]\n} );\n\nconst mx_perlin_noise_vec3_1 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec3( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar(), Z = int().toVar();\n\tconst fx = float( mx_floorfrac( p.x, X ) ).toVar();\n\tconst fy = float( mx_floorfrac( p.y, Y ) ).toVar();\n\tconst fz = float( mx_floorfrac( p.z, Z ) ).toVar();\n\tconst u = float( mx_fade( fx ) ).toVar();\n\tconst v = float( mx_fade( fy ) ).toVar();\n\tconst w = float( mx_fade( fz ) ).toVar();\n\tconst result = vec3( mx_trilerp( mx_gradient_vec3( mx_hash_vec3( X, Y, Z ), fx, fy, fz ), mx_gradient_vec3( mx_hash_vec3( X.add( int( 1 ) ), Y, Z ), fx.sub( 1.0 ), fy, fz ), mx_gradient_vec3( mx_hash_vec3( X, Y.add( int( 1 ) ), Z ), fx, fy.sub( 1.0 ), fz ), mx_gradient_vec3( mx_hash_vec3( X.add( int( 1 ) ), Y.add( int( 1 ) ), Z ), fx.sub( 1.0 ), fy.sub( 1.0 ), fz ), mx_gradient_vec3( mx_hash_vec3( X, Y, Z.add( int( 1 ) ) ), fx, fy, fz.sub( 1.0 ) ), mx_gradient_vec3( mx_hash_vec3( X.add( int( 1 ) ), Y, Z.add( int( 1 ) ) ), fx.sub( 1.0 ), fy, fz.sub( 1.0 ) ), mx_gradient_vec3( mx_hash_vec3( X, Y.add( int( 1 ) ), Z.add( int( 1 ) ) ), fx, fy.sub( 1.0 ), fz.sub( 1.0 ) ), mx_gradient_vec3( mx_hash_vec3( X.add( int( 1 ) ), Y.add( int( 1 ) ), Z.add( int( 1 ) ) ), fx.sub( 1.0 ), fy.sub( 1.0 ), fz.sub( 1.0 ) ), u, v, w ) ).toVar();\n\n\treturn mx_gradient_scale3d( result );\n\n} ).setLayout( {\n\tname: 'mx_perlin_noise_vec3_1',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' }\n\t]\n} );\n\nconst mx_perlin_noise_vec3 = /*@__PURE__*/ overloadingFn( [ mx_perlin_noise_vec3_0, mx_perlin_noise_vec3_1 ] );\n\nconst mx_cell_noise_float_0 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = float( p_immutable ).toVar();\n\tconst ix = int( mx_floor( p ) ).toVar();\n\n\treturn mx_bits_to_01( mx_hash_int( ix ) );\n\n} ).setLayout( {\n\tname: 'mx_cell_noise_float_0',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'float' }\n\t]\n} );\n\nconst mx_cell_noise_float_1 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec2( p_immutable ).toVar();\n\tconst ix = int( mx_floor( p.x ) ).toVar();\n\tconst iy = int( mx_floor( p.y ) ).toVar();\n\n\treturn mx_bits_to_01( mx_hash_int( ix, iy ) );\n\n} ).setLayout( {\n\tname: 'mx_cell_noise_float_1',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec2' }\n\t]\n} );\n\nconst mx_cell_noise_float_2 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec3( p_immutable ).toVar();\n\tconst ix = int( mx_floor( p.x ) ).toVar();\n\tconst iy = int( mx_floor( p.y ) ).toVar();\n\tconst iz = int( mx_floor( p.z ) ).toVar();\n\n\treturn mx_bits_to_01( mx_hash_int( ix, iy, iz ) );\n\n} ).setLayout( {\n\tname: 'mx_cell_noise_float_2',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' }\n\t]\n} );\n\nconst mx_cell_noise_float_3 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec4( p_immutable ).toVar();\n\tconst ix = int( mx_floor( p.x ) ).toVar();\n\tconst iy = int( mx_floor( p.y ) ).toVar();\n\tconst iz = int( mx_floor( p.z ) ).toVar();\n\tconst iw = int( mx_floor( p.w ) ).toVar();\n\n\treturn mx_bits_to_01( mx_hash_int( ix, iy, iz, iw ) );\n\n} ).setLayout( {\n\tname: 'mx_cell_noise_float_3',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec4' }\n\t]\n} );\n\nconst mx_cell_noise_float$1 = /*@__PURE__*/ overloadingFn( [ mx_cell_noise_float_0, mx_cell_noise_float_1, mx_cell_noise_float_2, mx_cell_noise_float_3 ] );\n\nconst mx_cell_noise_vec3_0 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = float( p_immutable ).toVar();\n\tconst ix = int( mx_floor( p ) ).toVar();\n\n\treturn vec3( mx_bits_to_01( mx_hash_int( ix, int( 0 ) ) ), mx_bits_to_01( mx_hash_int( ix, int( 1 ) ) ), mx_bits_to_01( mx_hash_int( ix, int( 2 ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_cell_noise_vec3_0',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'float' }\n\t]\n} );\n\nconst mx_cell_noise_vec3_1 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec2( p_immutable ).toVar();\n\tconst ix = int( mx_floor( p.x ) ).toVar();\n\tconst iy = int( mx_floor( p.y ) ).toVar();\n\n\treturn vec3( mx_bits_to_01( mx_hash_int( ix, iy, int( 0 ) ) ), mx_bits_to_01( mx_hash_int( ix, iy, int( 1 ) ) ), mx_bits_to_01( mx_hash_int( ix, iy, int( 2 ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_cell_noise_vec3_1',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec2' }\n\t]\n} );\n\nconst mx_cell_noise_vec3_2 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec3( p_immutable ).toVar();\n\tconst ix = int( mx_floor( p.x ) ).toVar();\n\tconst iy = int( mx_floor( p.y ) ).toVar();\n\tconst iz = int( mx_floor( p.z ) ).toVar();\n\n\treturn vec3( mx_bits_to_01( mx_hash_int( ix, iy, iz, int( 0 ) ) ), mx_bits_to_01( mx_hash_int( ix, iy, iz, int( 1 ) ) ), mx_bits_to_01( mx_hash_int( ix, iy, iz, int( 2 ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_cell_noise_vec3_2',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' }\n\t]\n} );\n\nconst mx_cell_noise_vec3_3 = /*@__PURE__*/ Fn( ( [ p_immutable ] ) => {\n\n\tconst p = vec4( p_immutable ).toVar();\n\tconst ix = int( mx_floor( p.x ) ).toVar();\n\tconst iy = int( mx_floor( p.y ) ).toVar();\n\tconst iz = int( mx_floor( p.z ) ).toVar();\n\tconst iw = int( mx_floor( p.w ) ).toVar();\n\n\treturn vec3( mx_bits_to_01( mx_hash_int( ix, iy, iz, iw, int( 0 ) ) ), mx_bits_to_01( mx_hash_int( ix, iy, iz, iw, int( 1 ) ) ), mx_bits_to_01( mx_hash_int( ix, iy, iz, iw, int( 2 ) ) ) );\n\n} ).setLayout( {\n\tname: 'mx_cell_noise_vec3_3',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec4' }\n\t]\n} );\n\nconst mx_cell_noise_vec3 = /*@__PURE__*/ overloadingFn( [ mx_cell_noise_vec3_0, mx_cell_noise_vec3_1, mx_cell_noise_vec3_2, mx_cell_noise_vec3_3 ] );\n\nconst mx_fractal_noise_float$1 = /*@__PURE__*/ Fn( ( [ p_immutable, octaves_immutable, lacunarity_immutable, diminish_immutable ] ) => {\n\n\tconst diminish = float( diminish_immutable ).toVar();\n\tconst lacunarity = float( lacunarity_immutable ).toVar();\n\tconst octaves = int( octaves_immutable ).toVar();\n\tconst p = vec3( p_immutable ).toVar();\n\tconst result = float( 0.0 ).toVar();\n\tconst amplitude = float( 1.0 ).toVar();\n\n\tLoop( octaves, () => {\n\n\t\tresult.addAssign( amplitude.mul( mx_perlin_noise_float( p ) ) );\n\t\tamplitude.mulAssign( diminish );\n\t\tp.mulAssign( lacunarity );\n\n\t} );\n\n\treturn result;\n\n} ).setLayout( {\n\tname: 'mx_fractal_noise_float',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' },\n\t\t{ name: 'octaves', type: 'int' },\n\t\t{ name: 'lacunarity', type: 'float' },\n\t\t{ name: 'diminish', type: 'float' }\n\t]\n} );\n\nconst mx_fractal_noise_vec3$1 = /*@__PURE__*/ Fn( ( [ p_immutable, octaves_immutable, lacunarity_immutable, diminish_immutable ] ) => {\n\n\tconst diminish = float( diminish_immutable ).toVar();\n\tconst lacunarity = float( lacunarity_immutable ).toVar();\n\tconst octaves = int( octaves_immutable ).toVar();\n\tconst p = vec3( p_immutable ).toVar();\n\tconst result = vec3( 0.0 ).toVar();\n\tconst amplitude = float( 1.0 ).toVar();\n\n\tLoop( octaves, () => {\n\n\t\tresult.addAssign( amplitude.mul( mx_perlin_noise_vec3( p ) ) );\n\t\tamplitude.mulAssign( diminish );\n\t\tp.mulAssign( lacunarity );\n\n\t} );\n\n\treturn result;\n\n} ).setLayout( {\n\tname: 'mx_fractal_noise_vec3',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' },\n\t\t{ name: 'octaves', type: 'int' },\n\t\t{ name: 'lacunarity', type: 'float' },\n\t\t{ name: 'diminish', type: 'float' }\n\t]\n} );\n\nconst mx_fractal_noise_vec2$1 = /*@__PURE__*/ Fn( ( [ p_immutable, octaves_immutable, lacunarity_immutable, diminish_immutable ] ) => {\n\n\tconst diminish = float( diminish_immutable ).toVar();\n\tconst lacunarity = float( lacunarity_immutable ).toVar();\n\tconst octaves = int( octaves_immutable ).toVar();\n\tconst p = vec3( p_immutable ).toVar();\n\n\treturn vec2( mx_fractal_noise_float$1( p, octaves, lacunarity, diminish ), mx_fractal_noise_float$1( p.add( vec3( int( 19 ), int( 193 ), int( 17 ) ) ), octaves, lacunarity, diminish ) );\n\n} ).setLayout( {\n\tname: 'mx_fractal_noise_vec2',\n\ttype: 'vec2',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' },\n\t\t{ name: 'octaves', type: 'int' },\n\t\t{ name: 'lacunarity', type: 'float' },\n\t\t{ name: 'diminish', type: 'float' }\n\t]\n} );\n\nconst mx_fractal_noise_vec4$1 = /*@__PURE__*/ Fn( ( [ p_immutable, octaves_immutable, lacunarity_immutable, diminish_immutable ] ) => {\n\n\tconst diminish = float( diminish_immutable ).toVar();\n\tconst lacunarity = float( lacunarity_immutable ).toVar();\n\tconst octaves = int( octaves_immutable ).toVar();\n\tconst p = vec3( p_immutable ).toVar();\n\tconst c = vec3( mx_fractal_noise_vec3$1( p, octaves, lacunarity, diminish ) ).toVar();\n\tconst f = float( mx_fractal_noise_float$1( p.add( vec3( int( 19 ), int( 193 ), int( 17 ) ) ), octaves, lacunarity, diminish ) ).toVar();\n\n\treturn vec4( c, f );\n\n} ).setLayout( {\n\tname: 'mx_fractal_noise_vec4',\n\ttype: 'vec4',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' },\n\t\t{ name: 'octaves', type: 'int' },\n\t\t{ name: 'lacunarity', type: 'float' },\n\t\t{ name: 'diminish', type: 'float' }\n\t]\n} );\n\nconst mx_worley_distance_0 = /*@__PURE__*/ Fn( ( [ p_immutable, x_immutable, y_immutable, xoff_immutable, yoff_immutable, jitter_immutable, metric_immutable ] ) => {\n\n\tconst metric = int( metric_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst yoff = int( yoff_immutable ).toVar();\n\tconst xoff = int( xoff_immutable ).toVar();\n\tconst y = int( y_immutable ).toVar();\n\tconst x = int( x_immutable ).toVar();\n\tconst p = vec2( p_immutable ).toVar();\n\tconst tmp = vec3( mx_cell_noise_vec3( vec2( x.add( xoff ), y.add( yoff ) ) ) ).toVar();\n\tconst off = vec2( tmp.x, tmp.y ).toVar();\n\toff.subAssign( 0.5 );\n\toff.mulAssign( jitter );\n\toff.addAssign( 0.5 );\n\tconst cellpos = vec2( vec2( float( x ), float( y ) ).add( off ) ).toVar();\n\tconst diff = vec2( cellpos.sub( p ) ).toVar();\n\n\tIf( metric.equal( int( 2 ) ), () => {\n\n\t\treturn abs( diff.x ).add( abs( diff.y ) );\n\n\t} );\n\n\tIf( metric.equal( int( 3 ) ), () => {\n\n\t\treturn max$1( abs( diff.x ), abs( diff.y ) );\n\n\t} );\n\n\treturn dot( diff, diff );\n\n} ).setLayout( {\n\tname: 'mx_worley_distance_0',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec2' },\n\t\t{ name: 'x', type: 'int' },\n\t\t{ name: 'y', type: 'int' },\n\t\t{ name: 'xoff', type: 'int' },\n\t\t{ name: 'yoff', type: 'int' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'metric', type: 'int' }\n\t]\n} );\n\nconst mx_worley_distance_1 = /*@__PURE__*/ Fn( ( [ p_immutable, x_immutable, y_immutable, z_immutable, xoff_immutable, yoff_immutable, zoff_immutable, jitter_immutable, metric_immutable ] ) => {\n\n\tconst metric = int( metric_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst zoff = int( zoff_immutable ).toVar();\n\tconst yoff = int( yoff_immutable ).toVar();\n\tconst xoff = int( xoff_immutable ).toVar();\n\tconst z = int( z_immutable ).toVar();\n\tconst y = int( y_immutable ).toVar();\n\tconst x = int( x_immutable ).toVar();\n\tconst p = vec3( p_immutable ).toVar();\n\tconst off = vec3( mx_cell_noise_vec3( vec3( x.add( xoff ), y.add( yoff ), z.add( zoff ) ) ) ).toVar();\n\toff.subAssign( 0.5 );\n\toff.mulAssign( jitter );\n\toff.addAssign( 0.5 );\n\tconst cellpos = vec3( vec3( float( x ), float( y ), float( z ) ).add( off ) ).toVar();\n\tconst diff = vec3( cellpos.sub( p ) ).toVar();\n\n\tIf( metric.equal( int( 2 ) ), () => {\n\n\t\treturn abs( diff.x ).add( abs( diff.y ) ).add( abs( diff.z ) );\n\n\t} );\n\n\tIf( metric.equal( int( 3 ) ), () => {\n\n\t\treturn max$1( abs( diff.x ), abs( diff.y ), abs( diff.z ) );\n\n\t} );\n\n\treturn dot( diff, diff );\n\n} ).setLayout( {\n\tname: 'mx_worley_distance_1',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' },\n\t\t{ name: 'x', type: 'int' },\n\t\t{ name: 'y', type: 'int' },\n\t\t{ name: 'z', type: 'int' },\n\t\t{ name: 'xoff', type: 'int' },\n\t\t{ name: 'yoff', type: 'int' },\n\t\t{ name: 'zoff', type: 'int' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'metric', type: 'int' }\n\t]\n} );\n\nconst mx_worley_distance = /*@__PURE__*/ overloadingFn( [ mx_worley_distance_0, mx_worley_distance_1 ] );\n\nconst mx_worley_noise_float_0 = /*@__PURE__*/ Fn( ( [ p_immutable, jitter_immutable, metric_immutable ] ) => {\n\n\tconst metric = int( metric_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst p = vec2( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar();\n\tconst localpos = vec2( mx_floorfrac( p.x, X ), mx_floorfrac( p.y, Y ) ).toVar();\n\tconst sqdist = float( 1e6 ).toVar();\n\n\tLoop( { start: -1, end: int( 1 ), name: 'x', condition: '<=' }, ( { x } ) => {\n\n\t\tLoop( { start: -1, end: int( 1 ), name: 'y', condition: '<=' }, ( { y } ) => {\n\n\t\t\tconst dist = float( mx_worley_distance( localpos, x, y, X, Y, jitter, metric ) ).toVar();\n\t\t\tsqdist.assign( min$1( sqdist, dist ) );\n\n\t\t} );\n\n\t} );\n\n\tIf( metric.equal( int( 0 ) ), () => {\n\n\t\tsqdist.assign( sqrt( sqdist ) );\n\n\t} );\n\n\treturn sqdist;\n\n} ).setLayout( {\n\tname: 'mx_worley_noise_float_0',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec2' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'metric', type: 'int' }\n\t]\n} );\n\nconst mx_worley_noise_vec2_0 = /*@__PURE__*/ Fn( ( [ p_immutable, jitter_immutable, metric_immutable ] ) => {\n\n\tconst metric = int( metric_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst p = vec2( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar();\n\tconst localpos = vec2( mx_floorfrac( p.x, X ), mx_floorfrac( p.y, Y ) ).toVar();\n\tconst sqdist = vec2( 1e6, 1e6 ).toVar();\n\n\tLoop( { start: -1, end: int( 1 ), name: 'x', condition: '<=' }, ( { x } ) => {\n\n\t\tLoop( { start: -1, end: int( 1 ), name: 'y', condition: '<=' }, ( { y } ) => {\n\n\t\t\tconst dist = float( mx_worley_distance( localpos, x, y, X, Y, jitter, metric ) ).toVar();\n\n\t\t\tIf( dist.lessThan( sqdist.x ), () => {\n\n\t\t\t\tsqdist.y.assign( sqdist.x );\n\t\t\t\tsqdist.x.assign( dist );\n\n\t\t\t} ).ElseIf( dist.lessThan( sqdist.y ), () => {\n\n\t\t\t\tsqdist.y.assign( dist );\n\n\t\t\t} );\n\n\t\t} );\n\n\t} );\n\n\tIf( metric.equal( int( 0 ) ), () => {\n\n\t\tsqdist.assign( sqrt( sqdist ) );\n\n\t} );\n\n\treturn sqdist;\n\n} ).setLayout( {\n\tname: 'mx_worley_noise_vec2_0',\n\ttype: 'vec2',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec2' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'metric', type: 'int' }\n\t]\n} );\n\nconst mx_worley_noise_vec3_0 = /*@__PURE__*/ Fn( ( [ p_immutable, jitter_immutable, metric_immutable ] ) => {\n\n\tconst metric = int( metric_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst p = vec2( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar();\n\tconst localpos = vec2( mx_floorfrac( p.x, X ), mx_floorfrac( p.y, Y ) ).toVar();\n\tconst sqdist = vec3( 1e6, 1e6, 1e6 ).toVar();\n\n\tLoop( { start: -1, end: int( 1 ), name: 'x', condition: '<=' }, ( { x } ) => {\n\n\t\tLoop( { start: -1, end: int( 1 ), name: 'y', condition: '<=' }, ( { y } ) => {\n\n\t\t\tconst dist = float( mx_worley_distance( localpos, x, y, X, Y, jitter, metric ) ).toVar();\n\n\t\t\tIf( dist.lessThan( sqdist.x ), () => {\n\n\t\t\t\tsqdist.z.assign( sqdist.y );\n\t\t\t\tsqdist.y.assign( sqdist.x );\n\t\t\t\tsqdist.x.assign( dist );\n\n\t\t\t} ).ElseIf( dist.lessThan( sqdist.y ), () => {\n\n\t\t\t\tsqdist.z.assign( sqdist.y );\n\t\t\t\tsqdist.y.assign( dist );\n\n\t\t\t} ).ElseIf( dist.lessThan( sqdist.z ), () => {\n\n\t\t\t\tsqdist.z.assign( dist );\n\n\t\t\t} );\n\n\t\t} );\n\n\t} );\n\n\tIf( metric.equal( int( 0 ) ), () => {\n\n\t\tsqdist.assign( sqrt( sqdist ) );\n\n\t} );\n\n\treturn sqdist;\n\n} ).setLayout( {\n\tname: 'mx_worley_noise_vec3_0',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec2' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'metric', type: 'int' }\n\t]\n} );\n\nconst mx_worley_noise_float_1 = /*@__PURE__*/ Fn( ( [ p_immutable, jitter_immutable, metric_immutable ] ) => {\n\n\tconst metric = int( metric_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst p = vec3( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar(), Z = int().toVar();\n\tconst localpos = vec3( mx_floorfrac( p.x, X ), mx_floorfrac( p.y, Y ), mx_floorfrac( p.z, Z ) ).toVar();\n\tconst sqdist = float( 1e6 ).toVar();\n\n\tLoop( { start: -1, end: int( 1 ), name: 'x', condition: '<=' }, ( { x } ) => {\n\n\t\tLoop( { start: -1, end: int( 1 ), name: 'y', condition: '<=' }, ( { y } ) => {\n\n\t\t\tLoop( { start: -1, end: int( 1 ), name: 'z', condition: '<=' }, ( { z } ) => {\n\n\t\t\t\tconst dist = float( mx_worley_distance( localpos, x, y, z, X, Y, Z, jitter, metric ) ).toVar();\n\t\t\t\tsqdist.assign( min$1( sqdist, dist ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t} );\n\n\tIf( metric.equal( int( 0 ) ), () => {\n\n\t\tsqdist.assign( sqrt( sqdist ) );\n\n\t} );\n\n\treturn sqdist;\n\n} ).setLayout( {\n\tname: 'mx_worley_noise_float_1',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'metric', type: 'int' }\n\t]\n} );\n\nconst mx_worley_noise_float$1 = /*@__PURE__*/ overloadingFn( [ mx_worley_noise_float_0, mx_worley_noise_float_1 ] );\n\nconst mx_worley_noise_vec2_1 = /*@__PURE__*/ Fn( ( [ p_immutable, jitter_immutable, metric_immutable ] ) => {\n\n\tconst metric = int( metric_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst p = vec3( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar(), Z = int().toVar();\n\tconst localpos = vec3( mx_floorfrac( p.x, X ), mx_floorfrac( p.y, Y ), mx_floorfrac( p.z, Z ) ).toVar();\n\tconst sqdist = vec2( 1e6, 1e6 ).toVar();\n\n\tLoop( { start: -1, end: int( 1 ), name: 'x', condition: '<=' }, ( { x } ) => {\n\n\t\tLoop( { start: -1, end: int( 1 ), name: 'y', condition: '<=' }, ( { y } ) => {\n\n\t\t\tLoop( { start: -1, end: int( 1 ), name: 'z', condition: '<=' }, ( { z } ) => {\n\n\t\t\t\tconst dist = float( mx_worley_distance( localpos, x, y, z, X, Y, Z, jitter, metric ) ).toVar();\n\n\t\t\t\tIf( dist.lessThan( sqdist.x ), () => {\n\n\t\t\t\t\tsqdist.y.assign( sqdist.x );\n\t\t\t\t\tsqdist.x.assign( dist );\n\n\t\t\t\t} ).ElseIf( dist.lessThan( sqdist.y ), () => {\n\n\t\t\t\t\tsqdist.y.assign( dist );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t} );\n\n\t} );\n\n\tIf( metric.equal( int( 0 ) ), () => {\n\n\t\tsqdist.assign( sqrt( sqdist ) );\n\n\t} );\n\n\treturn sqdist;\n\n} ).setLayout( {\n\tname: 'mx_worley_noise_vec2_1',\n\ttype: 'vec2',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'metric', type: 'int' }\n\t]\n} );\n\nconst mx_worley_noise_vec2$1 = /*@__PURE__*/ overloadingFn( [ mx_worley_noise_vec2_0, mx_worley_noise_vec2_1 ] );\n\nconst mx_worley_noise_vec3_1 = /*@__PURE__*/ Fn( ( [ p_immutable, jitter_immutable, metric_immutable ] ) => {\n\n\tconst metric = int( metric_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst p = vec3( p_immutable ).toVar();\n\tconst X = int().toVar(), Y = int().toVar(), Z = int().toVar();\n\tconst localpos = vec3( mx_floorfrac( p.x, X ), mx_floorfrac( p.y, Y ), mx_floorfrac( p.z, Z ) ).toVar();\n\tconst sqdist = vec3( 1e6, 1e6, 1e6 ).toVar();\n\n\tLoop( { start: -1, end: int( 1 ), name: 'x', condition: '<=' }, ( { x } ) => {\n\n\t\tLoop( { start: -1, end: int( 1 ), name: 'y', condition: '<=' }, ( { y } ) => {\n\n\t\t\tLoop( { start: -1, end: int( 1 ), name: 'z', condition: '<=' }, ( { z } ) => {\n\n\t\t\t\tconst dist = float( mx_worley_distance( localpos, x, y, z, X, Y, Z, jitter, metric ) ).toVar();\n\n\t\t\t\tIf( dist.lessThan( sqdist.x ), () => {\n\n\t\t\t\t\tsqdist.z.assign( sqdist.y );\n\t\t\t\t\tsqdist.y.assign( sqdist.x );\n\t\t\t\t\tsqdist.x.assign( dist );\n\n\t\t\t\t} ).ElseIf( dist.lessThan( sqdist.y ), () => {\n\n\t\t\t\t\tsqdist.z.assign( sqdist.y );\n\t\t\t\t\tsqdist.y.assign( dist );\n\n\t\t\t\t} ).ElseIf( dist.lessThan( sqdist.z ), () => {\n\n\t\t\t\t\tsqdist.z.assign( dist );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t} );\n\n\t} );\n\n\tIf( metric.equal( int( 0 ) ), () => {\n\n\t\tsqdist.assign( sqrt( sqdist ) );\n\n\t} );\n\n\treturn sqdist;\n\n} ).setLayout( {\n\tname: 'mx_worley_noise_vec3_1',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'p', type: 'vec3' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'metric', type: 'int' }\n\t]\n} );\n\nconst mx_worley_noise_vec3$1 = /*@__PURE__*/ overloadingFn( [ mx_worley_noise_vec3_0, mx_worley_noise_vec3_1 ] );\n\n// Unified Noise 2D\nconst mx_unifiednoise2d$1 = /*@__PURE__*/ Fn( ( [\n\tnoiseType_immutable, texcoord_immutable, freq_immutable, offset_immutable,\n\tjitter_immutable, outmin_immutable, outmax_immutable, clampoutput_immutable,\n\toctaves_immutable, lacunarity_immutable, diminish_immutable\n] ) => {\n\n\tconst noiseType = int( noiseType_immutable ).toVar();\n\tconst texcoord = vec2( texcoord_immutable ).toVar();\n\tconst freq = vec2( freq_immutable ).toVar();\n\tconst offset = vec2( offset_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst outmin = float( outmin_immutable ).toVar();\n\tconst outmax = float( outmax_immutable ).toVar();\n\tconst clampoutput = bool( clampoutput_immutable ).toVar();\n\tconst octaves = int( octaves_immutable ).toVar();\n\tconst lacunarity = float( lacunarity_immutable ).toVar();\n\tconst diminish = float( diminish_immutable ).toVar();\n\n\t// Compute input position\n\tconst p = texcoord.mul( freq ).add( offset );\n\n\tconst result = float( 0.0 ).toVar();\n\n\t// Perlin\n\tIf( noiseType.equal( int( 0 ) ), () => {\n\n\t\tresult.assign( mx_perlin_noise_vec3( p ) );\n\n\t} );\n\n\t// Cell\n\tIf( noiseType.equal( int( 1 ) ), () => {\n\n\t\tresult.assign( mx_cell_noise_vec3( p ) );\n\n\t} );\n\n\t// Worley (metric=0 = euclidean)\n\tIf( noiseType.equal( int( 2 ) ), () => {\n\n\t\tresult.assign( mx_worley_noise_vec3$1( p, jitter, int( 0 ) ) );\n\n\t} );\n\n\t// Fractal (use vec3(p, 0.0) for 2D input)\n\tIf( noiseType.equal( int( 3 ) ), () => {\n\n\t\tresult.assign( mx_fractal_noise_vec3$1( vec3( p, 0.0 ), octaves, lacunarity, diminish ) );\n\n\t} );\n\n\t// Remap output to [outmin, outmax]\n\tresult.assign( result.mul( outmax.sub( outmin ) ).add( outmin ) );\n\n\t// Clamp if requested\n\tIf( clampoutput, () => {\n\n\t\tresult.assign( clamp( result, outmin, outmax ) );\n\n\t} );\n\n\treturn result;\n\n} ).setLayout( {\n\tname: 'mx_unifiednoise2d',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'noiseType', type: 'int' },\n\t\t{ name: 'texcoord', type: 'vec2' },\n\t\t{ name: 'freq', type: 'vec2' },\n\t\t{ name: 'offset', type: 'vec2' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'outmin', type: 'float' },\n\t\t{ name: 'outmax', type: 'float' },\n\t\t{ name: 'clampoutput', type: 'bool' },\n\t\t{ name: 'octaves', type: 'int' },\n\t\t{ name: 'lacunarity', type: 'float' },\n\t\t{ name: 'diminish', type: 'float' }\n\t]\n} );\n\n// Unified Noise 3D\nconst mx_unifiednoise3d$1 = /*@__PURE__*/ Fn( ( [\n\tnoiseType_immutable, position_immutable, freq_immutable, offset_immutable,\n\tjitter_immutable, outmin_immutable, outmax_immutable, clampoutput_immutable,\n\toctaves_immutable, lacunarity_immutable, diminish_immutable\n] ) => {\n\n\tconst noiseType = int( noiseType_immutable ).toVar();\n\tconst position = vec3( position_immutable ).toVar();\n\tconst freq = vec3( freq_immutable ).toVar();\n\tconst offset = vec3( offset_immutable ).toVar();\n\tconst jitter = float( jitter_immutable ).toVar();\n\tconst outmin = float( outmin_immutable ).toVar();\n\tconst outmax = float( outmax_immutable ).toVar();\n\tconst clampoutput = bool( clampoutput_immutable ).toVar();\n\tconst octaves = int( octaves_immutable ).toVar();\n\tconst lacunarity = float( lacunarity_immutable ).toVar();\n\tconst diminish = float( diminish_immutable ).toVar();\n\n\t// Compute input position\n\tconst p = position.mul( freq ).add( offset );\n\n\tconst result = float( 0.0 ).toVar();\n\n\t// Perlin\n\tIf( noiseType.equal( int( 0 ) ), () => {\n\n\t\tresult.assign( mx_perlin_noise_vec3( p ) );\n\n\t} );\n\n\t// Cell\n\tIf( noiseType.equal( int( 1 ) ), () => {\n\n\t\tresult.assign( mx_cell_noise_vec3( p ) );\n\n\t} );\n\n\t// Worley (metric=0 = euclidean)\n\tIf( noiseType.equal( int( 2 ) ), () => {\n\n\t\tresult.assign( mx_worley_noise_vec3$1( p, jitter, int( 0 ) ) );\n\n\t} );\n\n\t// Fractal\n\tIf( noiseType.equal( int( 3 ) ), () => {\n\n\t\tresult.assign( mx_fractal_noise_vec3$1( p, octaves, lacunarity, diminish ) );\n\n\t} );\n\n\t// Remap output to [outmin, outmax]\n\tresult.assign( result.mul( outmax.sub( outmin ) ).add( outmin ) );\n\n\t// Clamp if requested\n\tIf( clampoutput, () => {\n\n\t\tresult.assign( clamp( result, outmin, outmax ) );\n\n\t} );\n\n\treturn result;\n\n} ).setLayout( {\n\tname: 'mx_unifiednoise3d',\n\ttype: 'float',\n\tinputs: [\n\t\t{ name: 'noiseType', type: 'int' },\n\t\t{ name: 'position', type: 'vec3' },\n\t\t{ name: 'freq', type: 'vec3' },\n\t\t{ name: 'offset', type: 'vec3' },\n\t\t{ name: 'jitter', type: 'float' },\n\t\t{ name: 'outmin', type: 'float' },\n\t\t{ name: 'outmax', type: 'float' },\n\t\t{ name: 'clampoutput', type: 'bool' },\n\t\t{ name: 'octaves', type: 'int' },\n\t\t{ name: 'lacunarity', type: 'float' },\n\t\t{ name: 'diminish', type: 'float' }\n\t]\n} );\n\n// Three.js Transpiler\n// https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_hsv.glsl\n\n\nconst mx_hsvtorgb = /*@__PURE__*/ Fn( ( [ hsv ] ) => {\n\n\tconst s = hsv.y;\n\tconst v = hsv.z;\n\n\tconst result = vec3().toVar();\n\n\tIf( s.lessThan( 0.0001 ), () => {\n\n\t\tresult.assign( vec3( v, v, v ) );\n\n\t} ).Else( () => {\n\n\t\tlet h = hsv.x;\n\t\th = h.sub( floor( h ) ).mul( 6.0 ).toVar(); // TODO: check what .toVar() is needed in node system cache\n\t\tconst hi = int( trunc( h ) );\n\t\tconst f = h.sub( float( hi ) );\n\t\tconst p = v.mul( s.oneMinus() );\n\t\tconst q = v.mul( s.mul( f ).oneMinus() );\n\t\tconst t = v.mul( s.mul( f.oneMinus() ).oneMinus() );\n\n\t\tIf( hi.equal( int( 0 ) ), () => {\n\n\t\t\tresult.assign( vec3( v, t, p ) );\n\n\t\t} ).ElseIf( hi.equal( int( 1 ) ), () => {\n\n\t\t\tresult.assign( vec3( q, v, p ) );\n\n\t\t} ).ElseIf( hi.equal( int( 2 ) ), () => {\n\n\t\t\tresult.assign( vec3( p, v, t ) );\n\n\t\t} ).ElseIf( hi.equal( int( 3 ) ), () => {\n\n\t\t\tresult.assign( vec3( p, q, v ) );\n\n\t\t} ).ElseIf( hi.equal( int( 4 ) ), () => {\n\n\t\t\tresult.assign( vec3( t, p, v ) );\n\n\t\t} ).Else( () => {\n\n\t\t\tresult.assign( vec3( v, p, q ) );\n\n\t\t} );\n\n\t} );\n\n\treturn result;\n\n} ).setLayout( {\n\tname: 'mx_hsvtorgb',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'hsv', type: 'vec3' }\n\t]\n} );\n\nconst mx_rgbtohsv = /*@__PURE__*/ Fn( ( [ c_immutable ] ) => {\n\n\tconst c = vec3( c_immutable ).toVar();\n\tconst r = float( c.x ).toVar();\n\tconst g = float( c.y ).toVar();\n\tconst b = float( c.z ).toVar();\n\tconst mincomp = float( min$1( r, min$1( g, b ) ) ).toVar();\n\tconst maxcomp = float( max$1( r, max$1( g, b ) ) ).toVar();\n\tconst delta = float( maxcomp.sub( mincomp ) ).toVar();\n\tconst h = float().toVar(), s = float().toVar(), v = float().toVar();\n\tv.assign( maxcomp );\n\n\tIf( maxcomp.greaterThan( 0.0 ), () => {\n\n\t\ts.assign( delta.div( maxcomp ) );\n\n\t} ).Else( () => {\n\n\t\ts.assign( 0.0 );\n\n\t} );\n\n\tIf( s.lessThanEqual( 0.0 ), () => {\n\n\t\th.assign( 0.0 );\n\n\t} ).Else( () => {\n\n\t\tIf( r.greaterThanEqual( maxcomp ), () => {\n\n\t\t\th.assign( g.sub( b ).div( delta ) );\n\n\t\t} ).ElseIf( g.greaterThanEqual( maxcomp ), () => {\n\n\t\t\th.assign( add( 2.0, b.sub( r ).div( delta ) ) );\n\n\t\t} ).Else( () => {\n\n\t\t\th.assign( add( 4.0, r.sub( g ).div( delta ) ) );\n\n\t\t} );\n\n\t\th.mulAssign( 1.0 / 6.0 );\n\n\t\tIf( h.lessThan( 0.0 ), () => {\n\n\t\t\th.addAssign( 1.0 );\n\n\t\t} );\n\n\t} );\n\n\treturn vec3( h, s, v );\n\n} ).setLayout( {\n\tname: 'mx_rgbtohsv',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'c', type: 'vec3' }\n\t]\n} );\n\n// Three.js Transpiler\n// https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_transform_color.glsl\n\n\nconst mx_srgb_texture_to_lin_rec709 = /*@__PURE__*/ Fn( ( [ color_immutable ] ) => {\n\n\tconst color = vec3( color_immutable ).toVar();\n\tconst isAbove = bvec3( greaterThan( color, vec3( 0.04045 ) ) ).toVar();\n\tconst linSeg = vec3( color.div( 12.92 ) ).toVar();\n\tconst powSeg = vec3( pow( max$1( color.add( vec3( 0.055 ) ), vec3( 0.0 ) ).div( 1.055 ), vec3( 2.4 ) ) ).toVar();\n\n\treturn mix( linSeg, powSeg, isAbove );\n\n} ).setLayout( {\n\tname: 'mx_srgb_texture_to_lin_rec709',\n\ttype: 'vec3',\n\tinputs: [\n\t\t{ name: 'color', type: 'vec3' }\n\t]\n} );\n\nconst mx_aastep = ( threshold, value ) => {\n\n\tthreshold = float( threshold );\n\tvalue = float( value );\n\n\tconst afwidth = vec2( value.dFdx(), value.dFdy() ).length().mul( 0.70710678118654757 );\n\n\treturn smoothstep( threshold.sub( afwidth ), threshold.add( afwidth ), value );\n\n};\n\nconst _ramp = ( a, b, uv, p ) => mix( a, b, uv[ p ].clamp() );\nconst mx_ramplr = ( valuel, valuer, texcoord = uv$1() ) => _ramp( valuel, valuer, texcoord, 'x' );\nconst mx_ramptb = ( valuet, valueb, texcoord = uv$1() ) => _ramp( valuet, valueb, texcoord, 'y' );\n\n// Bilinear ramp: interpolate between four corners (tl, tr, bl, br) using texcoord.x and texcoord.y\nconst mx_ramp4 = (\n\tvaluetl, valuetr, valuebl, valuebr, texcoord = uv$1()\n) => {\n\n\tconst u = texcoord.x.clamp();\n\tconst v = texcoord.y.clamp();\n\tconst top = mix( valuetl, valuetr, u );\n\tconst bottom = mix( valuebl, valuebr, u );\n\treturn mix( top, bottom, v );\n\n};\n\nconst _split = ( a, b, center, uv, p ) => mix( a, b, mx_aastep( center, uv[ p ] ) );\nconst mx_splitlr = ( valuel, valuer, center, texcoord = uv$1() ) => _split( valuel, valuer, center, texcoord, 'x' );\nconst mx_splittb = ( valuet, valueb, center, texcoord = uv$1() ) => _split( valuet, valueb, center, texcoord, 'y' );\n\nconst mx_transform_uv = ( uv_scale = 1, uv_offset = 0, uv_geo = uv$1() ) => uv_geo.mul( uv_scale ).add( uv_offset );\n\nconst mx_safepower = ( in1, in2 = 1 ) => {\n\n\tin1 = float( in1 );\n\n\treturn in1.abs().pow( in2 ).mul( in1.sign() );\n\n};\n\nconst mx_contrast = ( input, amount = 1, pivot = .5 ) => float( input ).sub( pivot ).mul( amount ).add( pivot );\n\nconst mx_noise_float = ( texcoord = uv$1(), amplitude = 1, pivot = 0 ) => mx_perlin_noise_float( texcoord.convert( 'vec2|vec3' ) ).mul( amplitude ).add( pivot );\n//export const mx_noise_vec2 = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => mx_perlin_noise_vec3( texcoord.convert( 'vec2|vec3' ) ).mul( amplitude ).add( pivot );\nconst mx_noise_vec3 = ( texcoord = uv$1(), amplitude = 1, pivot = 0 ) => mx_perlin_noise_vec3( texcoord.convert( 'vec2|vec3' ) ).mul( amplitude ).add( pivot );\nconst mx_noise_vec4 = ( texcoord = uv$1(), amplitude = 1, pivot = 0 ) => {\n\n\ttexcoord = texcoord.convert( 'vec2|vec3' ); // overloading type\n\n\tconst noise_vec4 = vec4( mx_perlin_noise_vec3( texcoord ), mx_perlin_noise_float( texcoord.add( vec2( 19, 73 ) ) ) );\n\n\treturn noise_vec4.mul( amplitude ).add( pivot );\n\n};\n\nconst mx_unifiednoise2d = ( noiseType, texcoord = uv$1(), freq = vec2( 1, 1 ), offset = vec2( 0, 0 ), jitter = 1, outmin = 0, outmax = 1, clampoutput = false, octaves = 1, lacunarity = 2, diminish = .5 ) => mx_unifiednoise2d$1( noiseType, texcoord.convert( 'vec2|vec3' ), freq, offset, jitter, outmin, outmax, clampoutput, octaves, lacunarity, diminish );\nconst mx_unifiednoise3d = ( noiseType, texcoord = uv$1(), freq = vec2( 1, 1 ), offset = vec2( 0, 0 ), jitter = 1, outmin = 0, outmax = 1, clampoutput = false, octaves = 1, lacunarity = 2, diminish = .5 ) => mx_unifiednoise3d$1( noiseType, texcoord.convert( 'vec2|vec3' ), freq, offset, jitter, outmin, outmax, clampoutput, octaves, lacunarity, diminish );\n\nconst mx_worley_noise_float = ( texcoord = uv$1(), jitter = 1 ) => mx_worley_noise_float$1( texcoord.convert( 'vec2|vec3' ), jitter, int( 1 ) );\nconst mx_worley_noise_vec2 = ( texcoord = uv$1(), jitter = 1 ) => mx_worley_noise_vec2$1( texcoord.convert( 'vec2|vec3' ), jitter, int( 1 ) );\nconst mx_worley_noise_vec3 = ( texcoord = uv$1(), jitter = 1 ) => mx_worley_noise_vec3$1( texcoord.convert( 'vec2|vec3' ), jitter, int( 1 ) );\n\nconst mx_cell_noise_float = ( texcoord = uv$1() ) => mx_cell_noise_float$1( texcoord.convert( 'vec2|vec3' ) );\n\nconst mx_fractal_noise_float = ( position = uv$1(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mx_fractal_noise_float$1( position, int( octaves ), lacunarity, diminish ).mul( amplitude );\nconst mx_fractal_noise_vec2 = ( position = uv$1(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mx_fractal_noise_vec2$1( position, int( octaves ), lacunarity, diminish ).mul( amplitude );\nconst mx_fractal_noise_vec3 = ( position = uv$1(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mx_fractal_noise_vec3$1( position, int( octaves ), lacunarity, diminish ).mul( amplitude );\nconst mx_fractal_noise_vec4 = ( position = uv$1(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mx_fractal_noise_vec4$1( position, int( octaves ), lacunarity, diminish ).mul( amplitude );\n\n// === Moved from MaterialXLoader.js ===\n\n// Math ops\nconst mx_add = ( in1, in2 = float( 0 ) ) => add( in1, in2 );\nconst mx_subtract = ( in1, in2 = float( 0 ) ) => sub( in1, in2 );\nconst mx_multiply = ( in1, in2 = float( 1 ) ) => mul( in1, in2 );\nconst mx_divide = ( in1, in2 = float( 1 ) ) => div( in1, in2 );\nconst mx_modulo = ( in1, in2 = float( 1 ) ) => mod( in1, in2 );\nconst mx_power = ( in1, in2 = float( 1 ) ) => pow( in1, in2 );\nconst mx_atan2 = ( in1 = float( 0 ), in2 = float( 1 ) ) => atan( in1, in2 );\nconst mx_timer = () => time;\nconst mx_frame = () => frameId;\nconst mx_invert = ( in1, amount = float( 1 ) ) => sub( amount, in1 );\nconst mx_ifgreater = ( value1, value2, in1, in2 ) => value1.greaterThan( value2 ).mix( in1, in2 );\nconst mx_ifgreatereq = ( value1, value2, in1, in2 ) => value1.greaterThanEqual( value2 ).mix( in1, in2 );\nconst mx_ifequal = ( value1, value2, in1, in2 ) => value1.equal( value2 ).mix( in1, in2 );\n\n// Enhanced separate node to support multi-output referencing (outx, outy, outz, outw)\nconst mx_separate = ( in1, channelOrOut = null ) => {\n\n\tif ( typeof channelOrOut === 'string' ) {\n\n\t\tconst map = { x: 0, r: 0, y: 1, g: 1, z: 2, b: 2, w: 3, a: 3 };\n\t\tconst c = channelOrOut.replace( /^out/, '' ).toLowerCase();\n\t\tif ( map[ c ] !== undefined ) return in1.element( map[ c ] );\n\n\t}\n\n\tif ( typeof channelOrOut === 'number' ) {\n\n\t\treturn in1.element( channelOrOut );\n\n\t}\n\n\tif ( typeof channelOrOut === 'string' && channelOrOut.length === 1 ) {\n\n\t\tconst map = { x: 0, r: 0, y: 1, g: 1, z: 2, b: 2, w: 3, a: 3 };\n\t\tif ( map[ channelOrOut ] !== undefined ) return in1.element( map[ channelOrOut ] );\n\n\t}\n\n\treturn in1;\n\n};\n\nconst mx_place2d = (\n\ttexcoord, pivot = vec2( 0.5, 0.5 ), scale = vec2( 1, 1 ), rotate = float( 0 ), offset = vec2( 0, 0 )/*, operationorder = int( 0 )*/\n) => {\n\n\tlet uv = texcoord;\n\tif ( pivot ) uv = uv.sub( pivot );\n\tif ( scale ) uv = uv.mul( scale );\n\tif ( rotate ) {\n\n\t\tconst rad = rotate.mul( Math.PI / 180.0 );\n\t\tconst cosR = rad.cos();\n\t\tconst sinR = rad.sin();\n\t\tuv = vec2(\n\t\t\tuv.x.mul( cosR ).sub( uv.y.mul( sinR ) ),\n\t\t\tuv.x.mul( sinR ).add( uv.y.mul( cosR ) )\n\t\t);\n\n\t}\n\n\tif ( pivot ) uv = uv.add( pivot );\n\tif ( offset ) uv = uv.add( offset );\n\treturn uv;\n\n};\n\nconst mx_rotate2d = ( input, amount ) => {\n\n\tinput = vec2( input );\n\tamount = float( amount );\n\n\tconst radians = amount.mul( Math.PI / 180.0 );\n\treturn rotate( input, radians );\n\n};\n\nconst mx_rotate3d = ( input, amount, axis ) => {\n\n\tinput = vec3( input );\n\tamount = float( amount );\n\taxis = vec3( axis );\n\n\n\tconst radians = amount.mul( Math.PI / 180.0 );\n\tconst nAxis = axis.normalize();\n\tconst cosA = radians.cos();\n\tconst sinA = radians.sin();\n\tconst oneMinusCosA = float( 1 ).sub( cosA );\n\tconst rot =\n\t\tinput.mul( cosA )\n\t\t\t.add( nAxis.cross( input ).mul( sinA ) )\n\t\t\t.add( nAxis.mul( nAxis.dot( input ) ).mul( oneMinusCosA ) );\n\treturn rot;\n\n};\n\nconst mx_heighttonormal = ( input, scale/*, texcoord*/ ) => {\n\n\tinput = vec3( input );\n\tscale = float( scale );\n\n\treturn bumpMap( input, scale );\n\n};\n\n/**\n * This computes a parallax corrected normal which is used for box-projected cube mapping (BPCEM).\n *\n * Reference: {@link https://devlog-martinsh.blogspot.com/2011/09/box-projected-cube-environment-mapping.html}\n *\n * ```js\n * const uvNode = getParallaxCorrectNormal( reflectVector, vec3( 200, 100, 100 ), vec3( 0, - 50, 0 ) );\n * material.envNode = pmremTexture( renderTarget.texture, uvNode );\n * ```\n *\n * @tsl\n * @function\n * @param {Node<vec3>} normal - The normal to correct.\n * @param {Node<vec3>} cubeSize - The cube size should reflect the size of the environment (BPCEM is usually applied in closed environments like rooms).\n * @param {Node<vec3>} cubePos - The cube position.\n * @return {Node<vec3>} The parallax corrected normal.\n */\nconst getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos ] ) => {\n\n\tconst nDir = normalize( normal ).toVar();\n\tconst rbmax = sub( float( 0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar();\n\tconst rbmin = sub( float( -0.5 ).mul( cubeSize.sub( cubePos ) ), positionWorld ).div( nDir ).toVar();\n\tconst rbminmax = vec3().toVar();\n\trbminmax.x = nDir.x.greaterThan( float( 0 ) ).select( rbmax.x, rbmin.x );\n\trbminmax.y = nDir.y.greaterThan( float( 0 ) ).select( rbmax.y, rbmin.y );\n\trbminmax.z = nDir.z.greaterThan( float( 0 ) ).select( rbmax.z, rbmin.z );\n\n\tconst correction = min$1( rbminmax.x, rbminmax.y, rbminmax.z ).toVar();\n\tconst boxIntersection = positionWorld.add( nDir.mul( correction ) ).toVar();\n\treturn boxIntersection.sub( cubePos );\n\n} );\n\nconst getShIrradianceAt = /*@__PURE__*/ Fn( ( [ normal, shCoefficients ] ) => {\n\n\t// normal is assumed to have unit length\n\n\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t// band 0\n\tlet result = shCoefficients.element( 0 ).mul( 0.886227 );\n\n\t// band 1\n\tresult = result.add( shCoefficients.element( 1 ).mul( 2.0 * 0.511664 ).mul( y ) );\n\tresult = result.add( shCoefficients.element( 2 ).mul( 2.0 * 0.511664 ).mul( z ) );\n\tresult = result.add( shCoefficients.element( 3 ).mul( 2.0 * 0.511664 ).mul( x ) );\n\n\t// band 2\n\tresult = result.add( shCoefficients.element( 4 ).mul( 2.0 * 0.429043 ).mul( x ).mul( y ) );\n\tresult = result.add( shCoefficients.element( 5 ).mul( 2.0 * 0.429043 ).mul( y ).mul( z ) );\n\tresult = result.add( shCoefficients.element( 6 ).mul( z.mul( z ).mul( 0.743125 ).sub( 0.247708 ) ) );\n\tresult = result.add( shCoefficients.element( 7 ).mul( 2.0 * 0.429043 ).mul( x ).mul( z ) );\n\tresult = result.add( shCoefficients.element( 8 ).mul( 0.429043 ).mul( mul( x, x ).sub( mul( y, y ) ) ) );\n\n\treturn result;\n\n} );\n\n// constants\n\nvar TSL = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBRDF_GGX: BRDF_GGX,\n\tBRDF_Lambert: BRDF_Lambert,\n\tBasicPointShadowFilter: BasicPointShadowFilter,\n\tBasicShadowFilter: BasicShadowFilter,\n\tBreak: Break,\n\tConst: Const,\n\tContinue: Continue,\n\tDFGLUT: DFGLUT,\n\tD_GGX: D_GGX,\n\tDiscard: Discard,\n\tEPSILON: EPSILON,\n\tF_Schlick: F_Schlick,\n\tFn: Fn,\n\tHALF_PI: HALF_PI,\n\tINFINITY: INFINITY,\n\tIf: If,\n\tLoop: Loop,\n\tNodeAccess: NodeAccess,\n\tNodeShaderStage: NodeShaderStage,\n\tNodeType: NodeType,\n\tNodeUpdateType: NodeUpdateType,\n\tOnBeforeFrameUpdate: OnBeforeFrameUpdate,\n\tOnBeforeMaterialUpdate: OnBeforeMaterialUpdate,\n\tOnBeforeObjectUpdate: OnBeforeObjectUpdate,\n\tOnFrameUpdate: OnFrameUpdate,\n\tOnMaterialUpdate: OnMaterialUpdate,\n\tOnObjectUpdate: OnObjectUpdate,\n\tPCFShadowFilter: PCFShadowFilter,\n\tPCFSoftShadowFilter: PCFSoftShadowFilter,\n\tPI: PI,\n\tPI2: PI2,\n\tPointShadowFilter: PointShadowFilter,\n\tReturn: Return,\n\tSchlick_to_F0: Schlick_to_F0,\n\tShaderNode: ShaderNode,\n\tStack: Stack,\n\tSwitch: Switch,\n\tTBNViewMatrix: TBNViewMatrix,\n\tTWO_PI: TWO_PI,\n\tVSMShadowFilter: VSMShadowFilter,\n\tV_GGX_SmithCorrelated: V_GGX_SmithCorrelated,\n\tVar: Var,\n\tVarIntent: VarIntent,\n\tabs: abs,\n\tacesFilmicToneMapping: acesFilmicToneMapping,\n\tacos: acos,\n\tacosh: acosh,\n\tadd: add,\n\taddMethodChaining: addMethodChaining,\n\taddNodeElement: addNodeElement,\n\tagxToneMapping: agxToneMapping,\n\tall: all,\n\talphaT: alphaT,\n\tand: and,\n\tanisotropy: anisotropy,\n\tanisotropyB: anisotropyB,\n\tanisotropyT: anisotropyT,\n\tany: any,\n\tappend: append,\n\tarray: array,\n\tarrayBuffer: arrayBuffer,\n\tasin: asin,\n\tasinh: asinh,\n\tassign: assign,\n\tatan: atan,\n\tatanh: atanh,\n\tatomicAdd: atomicAdd,\n\tatomicAnd: atomicAnd,\n\tatomicFunc: atomicFunc,\n\tatomicLoad: atomicLoad,\n\tatomicMax: atomicMax,\n\tatomicMin: atomicMin,\n\tatomicOr: atomicOr,\n\tatomicStore: atomicStore,\n\tatomicSub: atomicSub,\n\tatomicXor: atomicXor,\n\tattenuationColor: attenuationColor,\n\tattenuationDistance: attenuationDistance,\n\tattribute: attribute,\n\tattributeArray: attributeArray,\n\tbackgroundBlurriness: backgroundBlurriness,\n\tbackgroundIntensity: backgroundIntensity,\n\tbackgroundRotation: backgroundRotation,\n\tbatch: batch,\n\tbentNormalView: bentNormalView,\n\tbillboarding: billboarding,\n\tbitAnd: bitAnd,\n\tbitNot: bitNot,\n\tbitOr: bitOr,\n\tbitXor: bitXor,\n\tbitangentGeometry: bitangentGeometry,\n\tbitangentLocal: bitangentLocal,\n\tbitangentView: bitangentView,\n\tbitangentWorld: bitangentWorld,\n\tbitcast: bitcast,\n\tblendBurn: blendBurn,\n\tblendColor: blendColor,\n\tblendDodge: blendDodge,\n\tblendOverlay: blendOverlay,\n\tblendScreen: blendScreen,\n\tblur: blur,\n\tbool: bool,\n\tbuffer: buffer,\n\tbufferAttribute: bufferAttribute,\n\tbuiltin: builtin,\n\tbuiltinAOContext: builtinAOContext,\n\tbuiltinShadowContext: builtinShadowContext,\n\tbumpMap: bumpMap,\n\tbvec2: bvec2,\n\tbvec3: bvec3,\n\tbvec4: bvec4,\n\tbypass: bypass,\n\tcache: cache,\n\tcall: call,\n\tcameraFar: cameraFar,\n\tcameraIndex: cameraIndex,\n\tcameraNear: cameraNear,\n\tcameraNormalMatrix: cameraNormalMatrix,\n\tcameraPosition: cameraPosition,\n\tcameraProjectionMatrix: cameraProjectionMatrix,\n\tcameraProjectionMatrixInverse: cameraProjectionMatrixInverse,\n\tcameraViewMatrix: cameraViewMatrix,\n\tcameraViewport: cameraViewport,\n\tcameraWorldMatrix: cameraWorldMatrix,\n\tcbrt: cbrt,\n\tcdl: cdl,\n\tceil: ceil,\n\tchecker: checker,\n\tcineonToneMapping: cineonToneMapping,\n\tclamp: clamp,\n\tclearcoat: clearcoat,\n\tclearcoatNormalView: clearcoatNormalView,\n\tclearcoatRoughness: clearcoatRoughness,\n\tclipSpace: clipSpace,\n\tcode: code,\n\tcolor: color,\n\tcolorSpaceToWorking: colorSpaceToWorking,\n\tcolorToDirection: colorToDirection,\n\tcompute: compute,\n\tcomputeKernel: computeKernel,\n\tcomputeSkinning: computeSkinning,\n\tcontext: context,\n\tconvert: convert,\n\tconvertColorSpace: convertColorSpace,\n\tconvertToTexture: convertToTexture,\n\tcos: cos,\n\tcosh: cosh,\n\tcountLeadingZeros: countLeadingZeros,\n\tcountOneBits: countOneBits,\n\tcountTrailingZeros: countTrailingZeros,\n\tcross: cross,\n\tcubeTexture: cubeTexture,\n\tcubeTextureBase: cubeTextureBase,\n\tdFdx: dFdx,\n\tdFdy: dFdy,\n\tdashSize: dashSize,\n\tdebug: debug,\n\tdecrement: decrement,\n\tdecrementBefore: decrementBefore,\n\tdefaultBuildStages: defaultBuildStages,\n\tdefaultShaderStages: defaultShaderStages,\n\tdefined: defined,\n\tdegrees: degrees,\n\tdeltaTime: deltaTime,\n\tdensityFogFactor: densityFogFactor,\n\tdepth: depth,\n\tdepthPass: depthPass,\n\tdeterminant: determinant,\n\tdifference: difference,\n\tdiffuseColor: diffuseColor,\n\tdiffuseContribution: diffuseContribution,\n\tdirectPointLight: directPointLight,\n\tdirectionToColor: directionToColor,\n\tdirectionToFaceDirection: directionToFaceDirection,\n\tdispersion: dispersion,\n\tdisposeShadowMaterial: disposeShadowMaterial,\n\tdistance: distance,\n\tdiv: div,\n\tdot: dot,\n\tdrawIndex: drawIndex,\n\tdynamicBufferAttribute: dynamicBufferAttribute,\n\telement: element,\n\temissive: emissive,\n\tequal: equal,\n\tequirectUV: equirectUV,\n\texp: exp,\n\texp2: exp2,\n\texponentialHeightFogFactor: exponentialHeightFogFactor,\n\texpression: expression,\n\tfaceDirection: faceDirection,\n\tfaceForward: faceForward,\n\tfaceforward: faceforward,\n\tfloat: float,\n\tfloatBitsToInt: floatBitsToInt,\n\tfloatBitsToUint: floatBitsToUint,\n\tfloor: floor,\n\tfog: fog,\n\tfract: fract,\n\tframeGroup: frameGroup,\n\tframeId: frameId,\n\tfrontFacing: frontFacing,\n\tfwidth: fwidth,\n\tgain: gain,\n\tgapSize: gapSize,\n\tgetConstNodeType: getConstNodeType,\n\tgetCurrentStack: getCurrentStack,\n\tgetDirection: getDirection,\n\tgetDistanceAttenuation: getDistanceAttenuation,\n\tgetGeometryRoughness: getGeometryRoughness,\n\tgetNormalFromDepth: getNormalFromDepth,\n\tgetParallaxCorrectNormal: getParallaxCorrectNormal,\n\tgetRoughness: getRoughness,\n\tgetScreenPosition: getScreenPosition,\n\tgetShIrradianceAt: getShIrradianceAt,\n\tgetShadowMaterial: getShadowMaterial,\n\tgetShadowRenderObjectFunction: getShadowRenderObjectFunction,\n\tgetTextureIndex: getTextureIndex,\n\tgetViewPosition: getViewPosition,\n\tggxConvolution: ggxConvolution,\n\tglobalId: globalId,\n\tglsl: glsl,\n\tglslFn: glslFn,\n\tgrayscale: grayscale,\n\tgreaterThan: greaterThan,\n\tgreaterThanEqual: greaterThanEqual,\n\thash: hash,\n\thighpModelNormalViewMatrix: highpModelNormalViewMatrix,\n\thighpModelViewMatrix: highpModelViewMatrix,\n\thue: hue,\n\tincrement: increment,\n\tincrementBefore: incrementBefore,\n\tinspector: inspector,\n\tinstance: instance,\n\tinstanceIndex: instanceIndex,\n\tinstancedArray: instancedArray,\n\tinstancedBufferAttribute: instancedBufferAttribute,\n\tinstancedDynamicBufferAttribute: instancedDynamicBufferAttribute,\n\tinstancedMesh: instancedMesh,\n\tint: int,\n\tintBitsToFloat: intBitsToFloat,\n\tinterleavedGradientNoise: interleavedGradientNoise,\n\tinverse: inverse,\n\tinverseSqrt: inverseSqrt,\n\tinversesqrt: inversesqrt,\n\tinvocationLocalIndex: invocationLocalIndex,\n\tinvocationSubgroupIndex: invocationSubgroupIndex,\n\tior: ior,\n\tiridescence: iridescence,\n\tiridescenceIOR: iridescenceIOR,\n\tiridescenceThickness: iridescenceThickness,\n\tisolate: isolate,\n\tivec2: ivec2,\n\tivec3: ivec3,\n\tivec4: ivec4,\n\tjs: js,\n\tlabel: label,\n\tlength: length,\n\tlengthSq: lengthSq,\n\tlessThan: lessThan,\n\tlessThanEqual: lessThanEqual,\n\tlightPosition: lightPosition,\n\tlightProjectionUV: lightProjectionUV,\n\tlightShadowMatrix: lightShadowMatrix,\n\tlightTargetDirection: lightTargetDirection,\n\tlightTargetPosition: lightTargetPosition,\n\tlightViewPosition: lightViewPosition,\n\tlightingContext: lightingContext,\n\tlights: lights,\n\tlinearDepth: linearDepth,\n\tlinearToneMapping: linearToneMapping,\n\tlocalId: localId,\n\tlog: log,\n\tlog2: log2,\n\tlogarithmicDepthToViewZ: logarithmicDepthToViewZ,\n\tluminance: luminance,\n\tmat2: mat2,\n\tmat3: mat3,\n\tmat4: mat4,\n\tmatcapUV: matcapUV,\n\tmaterialAO: materialAO,\n\tmaterialAlphaTest: materialAlphaTest,\n\tmaterialAnisotropy: materialAnisotropy,\n\tmaterialAnisotropyVector: materialAnisotropyVector,\n\tmaterialAttenuationColor: materialAttenuationColor,\n\tmaterialAttenuationDistance: materialAttenuationDistance,\n\tmaterialClearcoat: materialClearcoat,\n\tmaterialClearcoatNormal: materialClearcoatNormal,\n\tmaterialClearcoatRoughness: materialClearcoatRoughness,\n\tmaterialColor: materialColor,\n\tmaterialDispersion: materialDispersion,\n\tmaterialEmissive: materialEmissive,\n\tmaterialEnvIntensity: materialEnvIntensity,\n\tmaterialEnvRotation: materialEnvRotation,\n\tmaterialIOR: materialIOR,\n\tmaterialIridescence: materialIridescence,\n\tmaterialIridescenceIOR: materialIridescenceIOR,\n\tmaterialIridescenceThickness: materialIridescenceThickness,\n\tmaterialLightMap: materialLightMap,\n\tmaterialLineDashOffset: materialLineDashOffset,\n\tmaterialLineDashSize: materialLineDashSize,\n\tmaterialLineGapSize: materialLineGapSize,\n\tmaterialLineScale: materialLineScale,\n\tmaterialLineWidth: materialLineWidth,\n\tmaterialMetalness: materialMetalness,\n\tmaterialNormal: materialNormal,\n\tmaterialOpacity: materialOpacity,\n\tmaterialPointSize: materialPointSize,\n\tmaterialReference: materialReference,\n\tmaterialReflectivity: materialReflectivity,\n\tmaterialRefractionRatio: materialRefractionRatio,\n\tmaterialRotation: materialRotation,\n\tmaterialRoughness: materialRoughness,\n\tmaterialSheen: materialSheen,\n\tmaterialSheenRoughness: materialSheenRoughness,\n\tmaterialShininess: materialShininess,\n\tmaterialSpecular: materialSpecular,\n\tmaterialSpecularColor: materialSpecularColor,\n\tmaterialSpecularIntensity: materialSpecularIntensity,\n\tmaterialSpecularStrength: materialSpecularStrength,\n\tmaterialThickness: materialThickness,\n\tmaterialTransmission: materialTransmission,\n\tmax: max$1,\n\tmaxMipLevel: maxMipLevel,\n\tmediumpModelViewMatrix: mediumpModelViewMatrix,\n\tmetalness: metalness,\n\tmin: min$1,\n\tmix: mix,\n\tmixElement: mixElement,\n\tmod: mod,\n\tmodInt: modInt,\n\tmodelDirection: modelDirection,\n\tmodelNormalMatrix: modelNormalMatrix,\n\tmodelPosition: modelPosition,\n\tmodelRadius: modelRadius,\n\tmodelScale: modelScale,\n\tmodelViewMatrix: modelViewMatrix,\n\tmodelViewPosition: modelViewPosition,\n\tmodelViewProjection: modelViewProjection,\n\tmodelWorldMatrix: modelWorldMatrix,\n\tmodelWorldMatrixInverse: modelWorldMatrixInverse,\n\tmorphReference: morphReference,\n\tmrt: mrt,\n\tmul: mul,\n\tmx_aastep: mx_aastep,\n\tmx_add: mx_add,\n\tmx_atan2: mx_atan2,\n\tmx_cell_noise_float: mx_cell_noise_float,\n\tmx_contrast: mx_contrast,\n\tmx_divide: mx_divide,\n\tmx_fractal_noise_float: mx_fractal_noise_float,\n\tmx_fractal_noise_vec2: mx_fractal_noise_vec2,\n\tmx_fractal_noise_vec3: mx_fractal_noise_vec3,\n\tmx_fractal_noise_vec4: mx_fractal_noise_vec4,\n\tmx_frame: mx_frame,\n\tmx_heighttonormal: mx_heighttonormal,\n\tmx_hsvtorgb: mx_hsvtorgb,\n\tmx_ifequal: mx_ifequal,\n\tmx_ifgreater: mx_ifgreater,\n\tmx_ifgreatereq: mx_ifgreatereq,\n\tmx_invert: mx_invert,\n\tmx_modulo: mx_modulo,\n\tmx_multiply: mx_multiply,\n\tmx_noise_float: mx_noise_float,\n\tmx_noise_vec3: mx_noise_vec3,\n\tmx_noise_vec4: mx_noise_vec4,\n\tmx_place2d: mx_place2d,\n\tmx_power: mx_power,\n\tmx_ramp4: mx_ramp4,\n\tmx_ramplr: mx_ramplr,\n\tmx_ramptb: mx_ramptb,\n\tmx_rgbtohsv: mx_rgbtohsv,\n\tmx_rotate2d: mx_rotate2d,\n\tmx_rotate3d: mx_rotate3d,\n\tmx_safepower: mx_safepower,\n\tmx_separate: mx_separate,\n\tmx_splitlr: mx_splitlr,\n\tmx_splittb: mx_splittb,\n\tmx_srgb_texture_to_lin_rec709: mx_srgb_texture_to_lin_rec709,\n\tmx_subtract: mx_subtract,\n\tmx_timer: mx_timer,\n\tmx_transform_uv: mx_transform_uv,\n\tmx_unifiednoise2d: mx_unifiednoise2d,\n\tmx_unifiednoise3d: mx_unifiednoise3d,\n\tmx_worley_noise_float: mx_worley_noise_float,\n\tmx_worley_noise_vec2: mx_worley_noise_vec2,\n\tmx_worley_noise_vec3: mx_worley_noise_vec3,\n\tnegate: negate,\n\tneutralToneMapping: neutralToneMapping,\n\tnodeArray: nodeArray,\n\tnodeImmutable: nodeImmutable,\n\tnodeObject: nodeObject,\n\tnodeObjectIntent: nodeObjectIntent,\n\tnodeObjects: nodeObjects,\n\tnodeProxy: nodeProxy,\n\tnodeProxyIntent: nodeProxyIntent,\n\tnormalFlat: normalFlat,\n\tnormalGeometry: normalGeometry,\n\tnormalLocal: normalLocal,\n\tnormalMap: normalMap,\n\tnormalView: normalView,\n\tnormalViewGeometry: normalViewGeometry,\n\tnormalWorld: normalWorld,\n\tnormalWorldGeometry: normalWorldGeometry,\n\tnormalize: normalize,\n\tnot: not,\n\tnotEqual: notEqual,\n\tnumWorkgroups: numWorkgroups,\n\tobjectDirection: objectDirection,\n\tobjectGroup: objectGroup,\n\tobjectPosition: objectPosition,\n\tobjectRadius: objectRadius,\n\tobjectScale: objectScale,\n\tobjectViewPosition: objectViewPosition,\n\tobjectWorldMatrix: objectWorldMatrix,\n\toneMinus: oneMinus,\n\tor: or,\n\torthographicDepthToViewZ: orthographicDepthToViewZ,\n\toscSawtooth: oscSawtooth,\n\toscSine: oscSine,\n\toscSquare: oscSquare,\n\toscTriangle: oscTriangle,\n\toutput: output,\n\toutputStruct: outputStruct,\n\toverloadingFn: overloadingFn,\n\tpackHalf2x16: packHalf2x16,\n\tpackSnorm2x16: packSnorm2x16,\n\tpackUnorm2x16: packUnorm2x16,\n\tparabola: parabola,\n\tparallaxDirection: parallaxDirection,\n\tparallaxUV: parallaxUV,\n\tparameter: parameter,\n\tpass: pass,\n\tpassTexture: passTexture,\n\tpcurve: pcurve,\n\tperspectiveDepthToViewZ: perspectiveDepthToViewZ,\n\tpmremTexture: pmremTexture,\n\tpointShadow: pointShadow,\n\tpointUV: pointUV,\n\tpointWidth: pointWidth,\n\tpositionGeometry: positionGeometry,\n\tpositionLocal: positionLocal,\n\tpositionPrevious: positionPrevious,\n\tpositionView: positionView,\n\tpositionViewDirection: positionViewDirection,\n\tpositionWorld: positionWorld,\n\tpositionWorldDirection: positionWorldDirection,\n\tposterize: posterize,\n\tpow: pow,\n\tpow2: pow2,\n\tpow3: pow3,\n\tpow4: pow4,\n\tpremultiplyAlpha: premultiplyAlpha,\n\tproperty: property,\n\tquadBroadcast: quadBroadcast,\n\tquadSwapDiagonal: quadSwapDiagonal,\n\tquadSwapX: quadSwapX,\n\tquadSwapY: quadSwapY,\n\tradians: radians,\n\trand: rand,\n\trange: range,\n\trangeFogFactor: rangeFogFactor,\n\treciprocal: reciprocal,\n\treference: reference,\n\treferenceBuffer: referenceBuffer,\n\treflect: reflect,\n\treflectVector: reflectVector,\n\treflectView: reflectView,\n\treflector: reflector,\n\trefract: refract,\n\trefractVector: refractVector,\n\trefractView: refractView,\n\treinhardToneMapping: reinhardToneMapping,\n\tremap: remap,\n\tremapClamp: remapClamp,\n\trenderGroup: renderGroup,\n\trenderOutput: renderOutput,\n\trendererReference: rendererReference,\n\treplaceDefaultUV: replaceDefaultUV,\n\trotate: rotate,\n\trotateUV: rotateUV,\n\troughness: roughness,\n\tround: round,\n\trtt: rtt,\n\tsRGBTransferEOTF: sRGBTransferEOTF,\n\tsRGBTransferOETF: sRGBTransferOETF,\n\tsample: sample,\n\tsampler: sampler,\n\tsamplerComparison: samplerComparison,\n\tsaturate: saturate,\n\tsaturation: saturation,\n\tscreenCoordinate: screenCoordinate,\n\tscreenDPR: screenDPR,\n\tscreenSize: screenSize,\n\tscreenUV: screenUV,\n\tselect: select,\n\tsetCurrentStack: setCurrentStack,\n\tsetName: setName,\n\tshaderStages: shaderStages,\n\tshadow: shadow,\n\tshadowPositionWorld: shadowPositionWorld,\n\tshapeCircle: shapeCircle,\n\tsharedUniformGroup: sharedUniformGroup,\n\tsheen: sheen,\n\tsheenRoughness: sheenRoughness,\n\tshiftLeft: shiftLeft,\n\tshiftRight: shiftRight,\n\tshininess: shininess,\n\tsign: sign,\n\tsin: sin,\n\tsinc: sinc,\n\tsinh: sinh,\n\tskinning: skinning,\n\tsmoothstep: smoothstep,\n\tsmoothstepElement: smoothstepElement,\n\tspecularColor: specularColor,\n\tspecularColorBlended: specularColorBlended,\n\tspecularF90: specularF90,\n\tspherizeUV: spherizeUV,\n\tsplit: split,\n\tspritesheetUV: spritesheetUV,\n\tsqrt: sqrt,\n\tstack: stack,\n\tstep: step,\n\tstepElement: stepElement,\n\tstorage: storage,\n\tstorageBarrier: storageBarrier,\n\tstorageTexture: storageTexture,\n\tstring: string,\n\tstruct: struct,\n\tsub: sub,\n\tsubBuild: subBuild,\n\tsubgroupAdd: subgroupAdd,\n\tsubgroupAll: subgroupAll,\n\tsubgroupAnd: subgroupAnd,\n\tsubgroupAny: subgroupAny,\n\tsubgroupBallot: subgroupBallot,\n\tsubgroupBroadcast: subgroupBroadcast,\n\tsubgroupBroadcastFirst: subgroupBroadcastFirst,\n\tsubgroupElect: subgroupElect,\n\tsubgroupExclusiveAdd: subgroupExclusiveAdd,\n\tsubgroupExclusiveMul: subgroupExclusiveMul,\n\tsubgroupInclusiveAdd: subgroupInclusiveAdd,\n\tsubgroupInclusiveMul: subgroupInclusiveMul,\n\tsubgroupIndex: subgroupIndex,\n\tsubgroupMax: subgroupMax,\n\tsubgroupMin: subgroupMin,\n\tsubgroupMul: subgroupMul,\n\tsubgroupOr: subgroupOr,\n\tsubgroupShuffle: subgroupShuffle,\n\tsubgroupShuffleDown: subgroupShuffleDown,\n\tsubgroupShuffleUp: subgroupShuffleUp,\n\tsubgroupShuffleXor: subgroupShuffleXor,\n\tsubgroupSize: subgroupSize,\n\tsubgroupXor: subgroupXor,\n\ttan: tan,\n\ttangentGeometry: tangentGeometry,\n\ttangentLocal: tangentLocal,\n\ttangentView: tangentView,\n\ttangentWorld: tangentWorld,\n\ttanh: tanh,\n\ttexture: texture,\n\ttexture3D: texture3D,\n\ttexture3DLevel: texture3DLevel,\n\ttexture3DLoad: texture3DLoad,\n\ttextureBarrier: textureBarrier,\n\ttextureBicubic: textureBicubic,\n\ttextureBicubicLevel: textureBicubicLevel,\n\ttextureCubeUV: textureCubeUV,\n\ttextureLevel: textureLevel,\n\ttextureLoad: textureLoad,\n\ttextureSize: textureSize,\n\ttextureStore: textureStore,\n\tthickness: thickness,\n\ttime: time,\n\ttoneMapping: toneMapping,\n\ttoneMappingExposure: toneMappingExposure,\n\ttoonOutlinePass: toonOutlinePass,\n\ttransformDirection: transformDirection,\n\ttransformNormal: transformNormal,\n\ttransformNormalToView: transformNormalToView,\n\ttransformedClearcoatNormalView: transformedClearcoatNormalView,\n\ttransformedNormalView: transformedNormalView,\n\ttransformedNormalWorld: transformedNormalWorld,\n\ttransmission: transmission,\n\ttranspose: transpose,\n\ttriNoise3D: triNoise3D,\n\ttriplanarTexture: triplanarTexture,\n\ttriplanarTextures: triplanarTextures,\n\ttrunc: trunc,\n\tuint: uint,\n\tuintBitsToFloat: uintBitsToFloat,\n\tuniform: uniform,\n\tuniformArray: uniformArray,\n\tuniformCubeTexture: uniformCubeTexture,\n\tuniformFlow: uniformFlow,\n\tuniformGroup: uniformGroup,\n\tuniformTexture: uniformTexture,\n\tunpackHalf2x16: unpackHalf2x16,\n\tunpackNormal: unpackNormal,\n\tunpackSnorm2x16: unpackSnorm2x16,\n\tunpackUnorm2x16: unpackUnorm2x16,\n\tunpremultiplyAlpha: unpremultiplyAlpha,\n\tuserData: userData,\n\tuv: uv$1,\n\tuvec2: uvec2,\n\tuvec3: uvec3,\n\tuvec4: uvec4,\n\tvarying: varying,\n\tvaryingProperty: varyingProperty,\n\tvec2: vec2,\n\tvec3: vec3,\n\tvec4: vec4,\n\tvectorComponents: vectorComponents,\n\tvelocity: velocity,\n\tvertexColor: vertexColor,\n\tvertexIndex: vertexIndex,\n\tvertexStage: vertexStage,\n\tvibrance: vibrance,\n\tviewZToLogarithmicDepth: viewZToLogarithmicDepth,\n\tviewZToOrthographicDepth: viewZToOrthographicDepth,\n\tviewZToPerspectiveDepth: viewZToPerspectiveDepth,\n\tviewZToReversedOrthographicDepth: viewZToReversedOrthographicDepth,\n\tviewZToReversedPerspectiveDepth: viewZToReversedPerspectiveDepth,\n\tviewport: viewport,\n\tviewportCoordinate: viewportCoordinate,\n\tviewportDepthTexture: viewportDepthTexture,\n\tviewportLinearDepth: viewportLinearDepth,\n\tviewportMipTexture: viewportMipTexture,\n\tviewportOpaqueMipTexture: viewportOpaqueMipTexture,\n\tviewportResolution: viewportResolution,\n\tviewportSafeUV: viewportSafeUV,\n\tviewportSharedTexture: viewportSharedTexture,\n\tviewportSize: viewportSize,\n\tviewportTexture: viewportTexture,\n\tviewportUV: viewportUV,\n\tvogelDiskSample: vogelDiskSample,\n\twgsl: wgsl,\n\twgslFn: wgslFn,\n\tworkgroupArray: workgroupArray,\n\tworkgroupBarrier: workgroupBarrier,\n\tworkgroupId: workgroupId,\n\tworkingToColorSpace: workingToColorSpace,\n\txor: xor\n});\n\nconst _clearColor = /*@__PURE__*/ new Color4();\n\n/**\n * This renderer module manages the background.\n *\n * @private\n * @augments DataMap\n */\nclass Background extends DataMap {\n\n\t/**\n\t * Constructs a new background management component.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t * @param {NodeManager} nodes - Renderer component for managing nodes related logic.\n\t */\n\tconstructor( renderer, nodes ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The renderer.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\t/**\n\t\t * Renderer component for managing nodes related logic.\n\t\t *\n\t\t * @type {NodeManager}\n\t\t */\n\t\tthis.nodes = nodes;\n\n\t}\n\n\t/**\n\t * Updates the background for the given scene. Depending on how `Scene.background`\n\t * or `Scene.backgroundNode` are configured, this method might configure a simple clear\n\t * or add a mesh to the render list for rendering the background as a textured plane\n\t * or skybox.\n\t *\n\t * @param {Scene} scene - The scene.\n\t * @param {RenderList} renderList - The current render list.\n\t * @param {RenderContext} renderContext - The current render context.\n\t */\n\tupdate( scene, renderList, renderContext ) {\n\n\t\tconst renderer = this.renderer;\n\t\tconst background = this.nodes.getBackgroundNode( scene ) || scene.background;\n\n\t\tlet forceClear = false;\n\n\t\tif ( background === null ) {\n\n\t\t\t// no background settings, use clear color configuration from the renderer\n\n\t\t\trenderer._clearColor.getRGB( _clearColor );\n\t\t\t_clearColor.a = renderer._clearColor.a;\n\n\t\t} else if ( background.isColor === true ) {\n\n\t\t\t// background is an opaque color\n\n\t\t\tbackground.getRGB( _clearColor );\n\t\t\t_clearColor.a = 1;\n\n\t\t\tforceClear = true;\n\n\t\t} else if ( background.isNode === true ) {\n\n\t\t\tconst sceneData = this.get( scene );\n\t\t\tconst backgroundNode = background;\n\n\t\t\t_clearColor.copy( renderer._clearColor );\n\n\t\t\tlet backgroundMesh = sceneData.backgroundMesh;\n\n\t\t\tif ( backgroundMesh === undefined ) {\n\n\t\t\t\tconst backgroundMeshNode = vec4( backgroundNode ).mul( backgroundIntensity ).context( {\n\t\t\t\t\t// @TODO: Add Texture2D support using node context\n\t\t\t\t\tgetUV: () => backgroundRotation.mul( normalWorldGeometry ),\n\t\t\t\t\tgetTextureLevel: () => backgroundBlurriness\n\t\t\t\t} );\n\n\t\t\t\t// when using orthographic cameras, we must scale the skybox sphere\n\t\t\t\t// up to exceed the dimensions of the camera's viewing box.\n\t\t\t\tconst isOrtho = cameraProjectionMatrix.element( 3 ).element( 3 ).equal( 1.0 );\n\n\t\t\t\t// calculate the orthographic scale\n\t\t\t\t// projectionMatrix[1][1] is (1 / top). Invert it to get the height and multiply by 3.0\n\t\t\t\t// (an arbitrary safety factor) to ensure the skybox is large enough to cover the corners\n\t\t\t\t// of the rectangular screen\n\t\t\t\tconst orthoScale = div( 1.0, cameraProjectionMatrix.element( 1 ).element( 1 ) ).mul( 3.0 );\n\n\t\t\t\t// compute vertex position\n\t\t\t\tconst modifiedPosition = isOrtho.select( positionLocal.mul( orthoScale ), positionLocal );\n\n\t\t\t\t// by using a w component of 0, the skybox will not translate when the camera moves through the scene\n\t\t\t\tconst viewPosition = modelViewMatrix.mul( vec4( modifiedPosition, 0.0 ) );\n\n\t\t\t\t// we force w=1.0 here to prevent the w_clip=0 divide-by-zero error for ortho cameras.\n\t\t\t\tlet viewProj = cameraProjectionMatrix.mul( vec4( viewPosition.xyz, 1.0 ) );\n\n\t\t\t\t// force background to far plane so it does not occlude objects\n\t\t\t\tviewProj = viewProj.setZ( viewProj.w );\n\n\t\t\t\tconst nodeMaterial = new NodeMaterial();\n\t\t\t\tnodeMaterial.name = 'Background.material';\n\t\t\t\tnodeMaterial.side = BackSide;\n\t\t\t\tnodeMaterial.depthTest = false;\n\t\t\t\tnodeMaterial.depthWrite = false;\n\t\t\t\tnodeMaterial.allowOverride = false;\n\t\t\t\tnodeMaterial.fog = false;\n\t\t\t\tnodeMaterial.lights = false;\n\t\t\t\tnodeMaterial.vertexNode = viewProj;\n\t\t\t\tnodeMaterial.colorNode = backgroundMeshNode;\n\n\t\t\t\tsceneData.backgroundMeshNode = backgroundMeshNode;\n\t\t\t\tsceneData.backgroundMesh = backgroundMesh = new Mesh( new SphereGeometry( 1, 32, 32 ), nodeMaterial );\n\t\t\t\tbackgroundMesh.frustumCulled = false;\n\t\t\t\tbackgroundMesh.name = 'Background.mesh';\n\n\t\t\t\tfunction onBackgroundDispose() {\n\n\t\t\t\t\tbackground.removeEventListener( 'dispose', onBackgroundDispose );\n\n\t\t\t\t\tbackgroundMesh.material.dispose();\n\t\t\t\t\tbackgroundMesh.geometry.dispose();\n\n\t\t\t\t}\n\n\t\t\t\tbackground.addEventListener( 'dispose', onBackgroundDispose );\n\n\t\t\t}\n\n\t\t\tconst backgroundCacheKey = backgroundNode.getCacheKey();\n\n\t\t\tif ( sceneData.backgroundCacheKey !== backgroundCacheKey ) {\n\n\t\t\t\tsceneData.backgroundMeshNode.node = vec4( backgroundNode ).mul( backgroundIntensity );\n\t\t\t\tsceneData.backgroundMeshNode.needsUpdate = true;\n\n\t\t\t\tbackgroundMesh.material.needsUpdate = true;\n\n\t\t\t\tsceneData.backgroundCacheKey = backgroundCacheKey;\n\n\t\t\t}\n\n\t\t\trenderList.unshift( backgroundMesh, backgroundMesh.geometry, backgroundMesh.material, 0, 0, null, null );\n\n\t\t} else {\n\n\t\t\terror( 'Renderer: Unsupported background configuration.', background );\n\n\t\t}\n\n\t\t//\n\n\t\tconst environmentBlendMode = renderer.xr.getEnvironmentBlendMode();\n\n\t\tif ( environmentBlendMode === 'additive' ) {\n\n\t\t\t_clearColor.set( 0, 0, 0, 1 );\n\n\t\t} else if ( environmentBlendMode === 'alpha-blend' ) {\n\n\t\t\t_clearColor.set( 0, 0, 0, 0 );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( renderer.autoClear === true || forceClear === true ) {\n\n\t\t\tconst clearColorValue = renderContext.clearColorValue;\n\n\t\t\tclearColorValue.r = _clearColor.r;\n\t\t\tclearColorValue.g = _clearColor.g;\n\t\t\tclearColorValue.b = _clearColor.b;\n\t\t\tclearColorValue.a = _clearColor.a;\n\n\t\t\t// premultiply alpha\n\n\t\t\tif ( renderer.backend.isWebGLBackend === true || renderer.alpha === true ) {\n\n\t\t\t\tclearColorValue.r *= clearColorValue.a;\n\t\t\t\tclearColorValue.g *= clearColorValue.a;\n\t\t\t\tclearColorValue.b *= clearColorValue.a;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\trenderContext.depthClearValue = renderer.getClearDepth();\n\t\t\trenderContext.stencilClearValue = renderer.getClearStencil();\n\n\t\t\trenderContext.clearColor = renderer.autoClearColor === true;\n\t\t\trenderContext.clearDepth = renderer.autoClearDepth === true;\n\t\t\trenderContext.clearStencil = renderer.autoClearStencil === true;\n\n\t\t} else {\n\n\t\t\trenderContext.clearColor = false;\n\t\t\trenderContext.clearDepth = false;\n\t\t\trenderContext.clearStencil = false;\n\n\t\t}\n\n\t}\n\n}\n\nlet _id$7 = 0;\n\n/**\n * A bind group represents a collection of bindings and thus a collection\n * or resources. Bind groups are assigned to pipelines to provide them\n * with the required resources (like uniform buffers or textures).\n *\n * @private\n */\nclass BindGroup {\n\n\t/**\n\t * Constructs a new bind group.\n\t *\n\t * @param {string} name - The bind group's name.\n\t * @param {Array<Binding>} bindings - An array of bindings.\n\t * @param {number} index - The group index.\n\t */\n\tconstructor( name = '', bindings = [] ) {\n\n\t\t/**\n\t\t * The bind group's name.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * An array of bindings.\n\t\t *\n\t\t * @type {Array<Binding>}\n\t\t */\n\t\tthis.bindings = bindings;\n\n\t\t/**\n\t\t * The group's ID.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.id = _id$7 ++;\n\n\t}\n\n}\n\n/**\n * This module represents the state of a node builder after it was\n * used to build the nodes for a render object. The state holds the\n * results of the build for further processing in the renderer.\n *\n * Render objects with identical cache keys share the same node builder state.\n *\n * @private\n */\nclass NodeBuilderState {\n\n\t/**\n\t * Constructs a new node builder state.\n\t *\n\t * @param {string} vertexShader - The native vertex shader code.\n\t * @param {string} fragmentShader - The native fragment shader code.\n\t * @param {string} computeShader - The native compute shader code.\n\t * @param {Array<NodeAttribute>} nodeAttributes - An array of node attributes.\n\t * @param {Array<BindGroup>} bindings - An array of bind groups.\n\t * @param {Array<Node>} updateNodes - An array of nodes that implement their `update()` method.\n\t * @param {Array<Node>} updateBeforeNodes - An array of nodes that implement their `updateBefore()` method.\n\t * @param {Array<Node>} updateAfterNodes - An array of nodes that implement their `updateAfter()` method.\n\t * @param {NodeMaterialObserver} observer - A node material observer.\n\t * @param {Array<Object>} transforms - An array with transform attribute objects. Only relevant when using compute shaders with WebGL 2.\n\t */\n\tconstructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, observer, transforms = [] ) {\n\n\t\t/**\n\t\t * The native vertex shader code.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.vertexShader = vertexShader;\n\n\t\t/**\n\t\t * The native fragment shader code.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.fragmentShader = fragmentShader;\n\n\t\t/**\n\t\t * The native compute shader code.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.computeShader = computeShader;\n\n\t\t/**\n\t\t * An array with transform attribute objects.\n\t\t * Only relevant when using compute shaders with WebGL 2.\n\t\t *\n\t\t * @type {Array<Object>}\n\t\t */\n\t\tthis.transforms = transforms;\n\n\t\t/**\n\t\t * An array of node attributes representing\n\t\t * the attributes of the shaders.\n\t\t *\n\t\t * @type {Array<NodeAttribute>}\n\t\t */\n\t\tthis.nodeAttributes = nodeAttributes;\n\n\t\t/**\n\t\t * An array of bind groups representing the uniform or storage\n\t\t * buffers, texture or samplers of the shader.\n\t\t *\n\t\t * @type {Array<BindGroup>}\n\t\t */\n\t\tthis.bindings = bindings;\n\n\t\t/**\n\t\t * An array of nodes that implement their `update()` method.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.updateNodes = updateNodes;\n\n\t\t/**\n\t\t * An array of nodes that implement their `updateBefore()` method.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.updateBeforeNodes = updateBeforeNodes;\n\n\t\t/**\n\t\t * An array of nodes that implement their `updateAfter()` method.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.updateAfterNodes = updateAfterNodes;\n\n\t\t/**\n\t\t * A node material observer.\n\t\t *\n\t\t * @type {NodeMaterialObserver}\n\t\t */\n\t\tthis.observer = observer;\n\n\t\t/**\n\t\t * How often this state is used by render objects.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.usedTimes = 0;\n\n\t}\n\n\t/**\n\t * This method is used to create a array of bind groups based\n\t * on the existing bind groups of this state. Shared groups are\n\t * not cloned.\n\t *\n\t * @return {Array<BindGroup>} A array of bind groups.\n\t */\n\tcreateBindings() {\n\n\t\tconst bindings = [];\n\n\t\tfor ( const instanceGroup of this.bindings ) {\n\n\t\t\tconst shared = instanceGroup.bindings[ 0 ].groupNode.shared; // All bindings in the group must have the same groupNode.\n\n\t\t\tif ( shared !== true ) {\n\n\t\t\t\tconst bindingsGroup = new BindGroup( instanceGroup.name, [] );\n\t\t\t\tbindings.push( bindingsGroup );\n\n\t\t\t\tfor ( const instanceBinding of instanceGroup.bindings ) {\n\n\t\t\t\t\tbindingsGroup.bindings.push( instanceBinding.clone() );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tbindings.push( instanceGroup );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bindings;\n\n\t}\n\n}\n\n/**\n * {@link NodeBuilder} is going to create instances of this class during the build process\n * of nodes. They represent the final shader attributes that are going to be generated\n * by the builder. Arrays of node attributes is maintained in {@link NodeBuilder#attributes}\n * and {@link NodeBuilder#bufferAttributes} for this purpose.\n */\nclass NodeAttribute {\n\n\t/**\n\t * Constructs a new node attribute.\n\t *\n\t * @param {string} name - The name of the attribute.\n\t * @param {string} type - The type of the attribute.\n\t * @param {?Node} node - An optional reference to the node.\n\t */\n\tconstructor( name, type, node = null ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isNodeAttribute = true;\n\n\t\t/**\n\t\t * The name of the attribute.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * The type of the attribute.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.type = type;\n\n\t\t/**\n\t\t * An optional reference to the node.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.node = node;\n\n\t}\n\n}\n\n/**\n * {@link NodeBuilder} is going to create instances of this class during the build process\n * of nodes. They represent the final shader uniforms that are going to be generated\n * by the builder. A dictionary of node uniforms is maintained in {@link NodeBuilder#uniforms}\n * for this purpose.\n */\nclass NodeUniform {\n\n\t/**\n\t * Constructs a new node uniform.\n\t *\n\t * @param {string} name - The name of the uniform.\n\t * @param {string} type - The type of the uniform.\n\t * @param {UniformNode} node - An reference to the node.\n\t */\n\tconstructor( name, type, node ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isNodeUniform = true;\n\n\t\t/**\n\t\t * The name of the uniform.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * The type of the uniform.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.type = type;\n\n\t\t/**\n\t\t * An reference to the node.\n\t\t *\n\t\t * @type {UniformNode}\n\t\t */\n\t\tthis.node = node;\n\n\t}\n\n\t/**\n\t * The value of the uniform node.\n\t *\n\t * @type {any}\n\t */\n\tget value() {\n\n\t\treturn this.node.value;\n\n\t}\n\n\tset value( val ) {\n\n\t\tthis.node.value = val;\n\n\t}\n\n\t/**\n\t * The id of the uniform node.\n\t *\n\t * @type {number}\n\t */\n\tget id() {\n\n\t\treturn this.node.id;\n\n\t}\n\n\t/**\n\t * The uniform node's group.\n\t *\n\t * @type {UniformGroupNode}\n\t */\n\tget groupNode() {\n\n\t\treturn this.node.groupNode;\n\n\t}\n\n}\n\n/**\n * {@link NodeBuilder} is going to create instances of this class during the build process\n * of nodes. They represent the final shader variables that are going to be generated\n * by the builder. A dictionary of node variables is maintained in {@link NodeBuilder#vars} for\n * this purpose.\n */\nclass NodeVar {\n\n\t/**\n\t * Constructs a new node variable.\n\t *\n\t * @param {string} name - The name of the variable.\n\t * @param {string} type - The type of the variable.\n\t * @param {boolean} [readOnly=false] - The read-only flag.\n\t * @param {?number} [count=null] - The size.\n\t */\n\tconstructor( name, type, readOnly = false, count = null ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isNodeVar = true;\n\n\t\t/**\n\t\t * The name of the variable.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * The type of the variable.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.type = type;\n\n\t\t/**\n\t\t *  The read-only flag.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.readOnly = readOnly;\n\n\t\t/**\n\t\t * The size.\n\t\t *\n\t\t * @type {?number}\n\t\t */\n\t\tthis.count = count;\n\n\t}\n\n}\n\n/**\n * {@link NodeBuilder} is going to create instances of this class during the build process\n * of nodes. They represent the final shader varyings that are going to be generated\n * by the builder. An array of node varyings is maintained in {@link NodeBuilder#varyings} for\n * this purpose.\n *\n * @augments NodeVar\n */\nclass NodeVarying extends NodeVar {\n\n\t/**\n\t * Constructs a new node varying.\n\t *\n\t * @param {string} name - The name of the varying.\n\t * @param {string} type - The type of the varying.\n\t * @param {?string} interpolationType - The interpolation type of the varying.\n\t * @param {?string} interpolationSampling - The interpolation sampling type of the varying.\n\t */\n\tconstructor( name, type, interpolationType = null, interpolationSampling = null ) {\n\n\t\tsuper( name, type );\n\n\t\t/**\n\t\t * Whether this varying requires interpolation or not. This property can be used\n\t\t * to check if the varying can be optimized for a variable.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsInterpolation = false;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isNodeVarying = true;\n\n\t\t/**\n\t\t * The interpolation type of the varying data.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.interpolationType = interpolationType;\n\n\t\t/**\n\t\t * The interpolation sampling type of varying data.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.interpolationSampling = interpolationSampling;\n\n\t}\n\n}\n\n/**\n * {@link NodeBuilder} is going to create instances of this class during the build process\n * of nodes. They represent user-defined, native shader code portions that are going to be\n * injected by the builder. A dictionary of node codes is maintained in {@link NodeBuilder#codes}\n * for this purpose.\n */\nclass NodeCode {\n\n\t/**\n\t * Constructs a new code node.\n\t *\n\t * @param {string} name - The name of the code.\n\t * @param {string} type - The node type.\n\t * @param {string} [code=''] - The native shader code.\n\t */\n\tconstructor( name, type, code = '' ) {\n\n\t\t/**\n\t\t * The name of the code.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * The node type.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.type = type;\n\n\t\t/**\n\t\t * The native shader code.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.code = code;\n\n\t\tObject.defineProperty( this, 'isNodeCode', { value: true } );\n\n\t}\n\n}\n\nlet _id$6 = 0;\n\n/**\n * This utility class is used in {@link NodeBuilder} as an internal\n * cache data structure for node data.\n */\nclass NodeCache {\n\n\t/**\n\t * Constructs a new node cache.\n\t *\n\t * @param {?NodeCache} parent - A reference to a parent cache.\n\t */\n\tconstructor( parent = null ) {\n\n\t\t/**\n\t\t * The id of the cache.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tthis.id = _id$6 ++;\n\n\t\t/**\n\t\t * A weak map for managing node data.\n\t\t *\n\t\t * @type {WeakMap<Node, Object>}\n\t\t */\n\t\tthis.nodesData = new WeakMap();\n\n\t\t/**\n\t\t * Reference to a parent node cache.\n\t\t *\n\t\t * @type {?NodeCache}\n\t\t * @default null\n\t\t */\n\t\tthis.parent = parent;\n\n\t}\n\n\t/**\n\t * Returns the data for the given node.\n\t *\n\t * @param {Node} node - The node.\n\t * @return {?Object} The data for the node.\n\t */\n\tgetData( node ) {\n\n\t\tlet data = this.nodesData.get( node );\n\n\t\tif ( data === undefined && this.parent !== null ) {\n\n\t\t\tdata = this.parent.getData( node );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Sets the data for a given node.\n\t *\n\t * @param {Node} node - The node.\n\t * @param {Object} data - The data that should be cached.\n\t */\n\tsetData( node, data ) {\n\n\t\tthis.nodesData.set( node, data );\n\n\t}\n\n}\n\nclass StructType {\n\n\tconstructor( name, members ) {\n\n\t\tthis.name = name;\n\t\tthis.members = members;\n\t\tthis.output = false;\n\n\t}\n\n}\n\n/**\n * Abstract base class for uniforms.\n *\n * @abstract\n * @private\n */\nclass Uniform {\n\n\t/**\n\t * Constructs a new uniform.\n\t *\n\t * @param {string} name - The uniform's name.\n\t * @param {any} value - The uniform's value.\n\t */\n\tconstructor( name, value ) {\n\n\t\t/**\n\t\t * The uniform's name.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * The uniform's value.\n\t\t *\n\t\t * @type {any}\n\t\t */\n\t\tthis.value = value;\n\n\t\t/**\n\t\t * Used to build the uniform buffer according to the STD140 layout.\n\t\t * Derived uniforms will set this property to a data type specific\n\t\t * value.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.boundary = 0;\n\n\t\t/**\n\t\t * The item size. Derived uniforms will set this property to a data\n\t\t * type specific value.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.itemSize = 0;\n\n\t\t/**\n\t\t * This property is set by {@link UniformsGroup} and marks\n\t\t * the start position in the uniform buffer.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.offset = 0;\n\n\t\t/**\n\t\t * This property is set by {@link UniformsGroup} and marks\n\t\t * the index position in the uniform array.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.index = -1;\n\n\t}\n\n\t/**\n\t * Sets the uniform's value.\n\t *\n\t * @param {any} value - The value to set.\n\t */\n\tsetValue( value ) {\n\n\t\tthis.value = value;\n\n\t}\n\n\t/**\n\t * Returns the uniform's value.\n\t *\n\t * @return {any} The value.\n\t */\n\tgetValue() {\n\n\t\treturn this.value;\n\n\t}\n\n}\n\n/**\n * Represents a Number uniform.\n *\n * @private\n * @augments Uniform\n */\nclass NumberUniform extends Uniform {\n\n\t/**\n\t * Constructs a new Number uniform.\n\t *\n\t * @param {string} name - The uniform's name.\n\t * @param {number} value - The uniform's value.\n\t */\n\tconstructor( name, value = 0 ) {\n\n\t\tsuper( name, value );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isNumberUniform = true;\n\n\t\tthis.boundary = 4;\n\t\tthis.itemSize = 1;\n\n\t}\n\n}\n\n/**\n * Represents a Vector2 uniform.\n *\n * @private\n * @augments Uniform\n */\nclass Vector2Uniform extends Uniform {\n\n\t/**\n\t * Constructs a new Number uniform.\n\t *\n\t * @param {string} name - The uniform's name.\n\t * @param {Vector2} value - The uniform's value.\n\t */\n\tconstructor( name, value = new Vector2() ) {\n\n\t\tsuper( name, value );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isVector2Uniform = true;\n\n\t\tthis.boundary = 8;\n\t\tthis.itemSize = 2;\n\n\t}\n\n}\n\n/**\n * Represents a Vector3 uniform.\n *\n * @private\n * @augments Uniform\n */\nclass Vector3Uniform extends Uniform {\n\n\t/**\n\t * Constructs a new Number uniform.\n\t *\n\t * @param {string} name - The uniform's name.\n\t * @param {Vector3} value - The uniform's value.\n\t */\n\tconstructor( name, value = new Vector3() ) {\n\n\t\tsuper( name, value );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isVector3Uniform = true;\n\n\t\tthis.boundary = 16;\n\t\tthis.itemSize = 3;\n\n\t}\n\n}\n\n/**\n * Represents a Vector4 uniform.\n *\n * @private\n * @augments Uniform\n */\nclass Vector4Uniform extends Uniform {\n\n\t/**\n\t * Constructs a new Number uniform.\n\t *\n\t * @param {string} name - The uniform's name.\n\t * @param {Vector4} value - The uniform's value.\n\t */\n\tconstructor( name, value = new Vector4() ) {\n\n\t\tsuper( name, value );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isVector4Uniform = true;\n\n\t\tthis.boundary = 16;\n\t\tthis.itemSize = 4;\n\n\t}\n\n}\n\n/**\n * Represents a Color uniform.\n *\n * @private\n * @augments Uniform\n */\nclass ColorUniform extends Uniform {\n\n\t/**\n\t * Constructs a new Number uniform.\n\t *\n\t * @param {string} name - The uniform's name.\n\t * @param {Color} value - The uniform's value.\n\t */\n\tconstructor( name, value = new Color() ) {\n\n\t\tsuper( name, value );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isColorUniform = true;\n\n\t\tthis.boundary = 16;\n\t\tthis.itemSize = 3;\n\n\t}\n\n}\n\n/**\n * Represents a Matrix2 uniform.\n *\n * @private\n * @augments Uniform\n */\nclass Matrix2Uniform extends Uniform {\n\n\t/**\n\t * Constructs a new Number uniform.\n\t *\n\t * @param {string} name - The uniform's name.\n\t * @param {Matrix2} value - The uniform's value.\n\t */\n\tconstructor( name, value = new Matrix2() ) {\n\n\t\tsuper( name, value );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMatrix2Uniform = true;\n\n\t\tthis.boundary = 8;\n\t\tthis.itemSize = 4;\n\n\t}\n\n}\n\n\n/**\n * Represents a Matrix3 uniform.\n *\n * @private\n * @augments Uniform\n */\nclass Matrix3Uniform extends Uniform {\n\n\t/**\n\t * Constructs a new Number uniform.\n\t *\n\t * @param {string} name - The uniform's name.\n\t * @param {Matrix3} value - The uniform's value.\n\t */\n\tconstructor( name, value = new Matrix3() ) {\n\n\t\tsuper( name, value );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMatrix3Uniform = true;\n\n\t\tthis.boundary = 48;\n\t\tthis.itemSize = 12;\n\n\t}\n\n}\n\n/**\n * Represents a Matrix4 uniform.\n *\n * @private\n * @augments Uniform\n */\nclass Matrix4Uniform extends Uniform {\n\n\t/**\n\t * Constructs a new Number uniform.\n\t *\n\t * @param {string} name - The uniform's name.\n\t * @param {Matrix4} value - The uniform's value.\n\t */\n\tconstructor( name, value = new Matrix4() ) {\n\n\t\tsuper( name, value );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isMatrix4Uniform = true;\n\n\t\tthis.boundary = 64;\n\t\tthis.itemSize = 16;\n\n\t}\n\n}\n\n/**\n * A special form of Number uniform binding type.\n * It's value is managed by a node object.\n *\n * @private\n * @augments NumberUniform\n */\nclass NumberNodeUniform extends NumberUniform {\n\n\t/**\n\t * Constructs a new node-based Number uniform.\n\t *\n\t * @param {NodeUniform} nodeUniform - The node uniform.\n\t */\n\tconstructor( nodeUniform ) {\n\n\t\tsuper( nodeUniform.name, nodeUniform.value );\n\n\t\t/**\n\t\t * The node uniform.\n\t\t *\n\t\t * @type {NodeUniform}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t}\n\n\t/**\n\t * Overwritten to return the value of the node uniform.\n\t *\n\t * @return {number} The value.\n\t */\n\tgetValue() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n\t/**\n\t * Returns the node uniform data type.\n\t *\n\t * @return {string} The data type.\n\t */\n\tgetType() {\n\n\t\treturn this.nodeUniform.type;\n\n\t}\n\n}\n\n/**\n * A special form of Vector2 uniform binding type.\n * It's value is managed by a node object.\n *\n * @private\n * @augments Vector2Uniform\n */\nclass Vector2NodeUniform extends Vector2Uniform {\n\n\t/**\n\t * Constructs a new node-based Vector2 uniform.\n\t *\n\t * @param {NodeUniform} nodeUniform - The node uniform.\n\t */\n\tconstructor( nodeUniform ) {\n\n\t\tsuper( nodeUniform.name, nodeUniform.value );\n\n\t\t/**\n\t\t * The node uniform.\n\t\t *\n\t\t * @type {NodeUniform}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t}\n\n\t/**\n\t * Overwritten to return the value of the node uniform.\n\t *\n\t * @return {Vector2} The value.\n\t */\n\tgetValue() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n\t/**\n\t * Returns the node uniform data type.\n\t *\n\t * @return {string} The data type.\n\t */\n\tgetType() {\n\n\t\treturn this.nodeUniform.type;\n\n\t}\n\n}\n\n/**\n * A special form of Vector3 uniform binding type.\n * It's value is managed by a node object.\n *\n * @private\n * @augments Vector3Uniform\n */\nclass Vector3NodeUniform extends Vector3Uniform {\n\n\t/**\n\t * Constructs a new node-based Vector3 uniform.\n\t *\n\t * @param {NodeUniform} nodeUniform - The node uniform.\n\t */\n\tconstructor( nodeUniform ) {\n\n\t\tsuper( nodeUniform.name, nodeUniform.value );\n\n\t\t/**\n\t\t * The node uniform.\n\t\t *\n\t\t * @type {NodeUniform}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t}\n\n\t/**\n\t * Overwritten to return the value of the node uniform.\n\t *\n\t * @return {Vector3} The value.\n\t */\n\tgetValue() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n\t/**\n\t * Returns the node uniform data type.\n\t *\n\t * @return {string} The data type.\n\t */\n\tgetType() {\n\n\t\treturn this.nodeUniform.type;\n\n\t}\n\n}\n\n/**\n * A special form of Vector4 uniform binding type.\n * It's value is managed by a node object.\n *\n * @private\n * @augments Vector4Uniform\n */\nclass Vector4NodeUniform extends Vector4Uniform {\n\n\t/**\n\t * Constructs a new node-based Vector4 uniform.\n\t *\n\t * @param {NodeUniform} nodeUniform - The node uniform.\n\t */\n\tconstructor( nodeUniform ) {\n\n\t\tsuper( nodeUniform.name, nodeUniform.value );\n\n\t\t/**\n\t\t * The node uniform.\n\t\t *\n\t\t * @type {NodeUniform}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t}\n\n\t/**\n\t * Overwritten to return the value of the node uniform.\n\t *\n\t * @return {Vector4} The value.\n\t */\n\tgetValue() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n\t/**\n\t * Returns the node uniform data type.\n\t *\n\t * @return {string} The data type.\n\t */\n\tgetType() {\n\n\t\treturn this.nodeUniform.type;\n\n\t}\n\n}\n\n/**\n * A special form of Color uniform binding type.\n * It's value is managed by a node object.\n *\n * @private\n * @augments ColorUniform\n */\nclass ColorNodeUniform extends ColorUniform {\n\n\t/**\n\t * Constructs a new node-based Color uniform.\n\t *\n\t * @param {NodeUniform} nodeUniform - The node uniform.\n\t */\n\tconstructor( nodeUniform ) {\n\n\t\tsuper( nodeUniform.name, nodeUniform.value );\n\n\t\t/**\n\t\t * The node uniform.\n\t\t *\n\t\t * @type {NodeUniform}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t}\n\n\t/**\n\t * Overwritten to return the value of the node uniform.\n\t *\n\t * @return {Color} The value.\n\t */\n\tgetValue() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n\t/**\n\t * Returns the node uniform data type.\n\t *\n\t * @return {string} The data type.\n\t */\n\tgetType() {\n\n\t\treturn this.nodeUniform.type;\n\n\t}\n\n}\n\n\n/**\n * A special form of Matrix2 uniform binding type.\n * It's value is managed by a node object.\n *\n * @private\n * @augments Matrix2Uniform\n */\nclass Matrix2NodeUniform extends Matrix2Uniform {\n\n\t/**\n\t * Constructs a new node-based Matrix2 uniform.\n\t *\n\t * @param {NodeUniform} nodeUniform - The node uniform.\n\t */\n\tconstructor( nodeUniform ) {\n\n\t\tsuper( nodeUniform.name, nodeUniform.value );\n\n\t\t/**\n\t\t * The node uniform.\n\t\t *\n\t\t * @type {NodeUniform}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t}\n\n\t/**\n\t * Overwritten to return the value of the node uniform.\n\t *\n\t * @return {Matrix2} The value.\n\t */\n\tgetValue() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n\t/**\n\t * Returns the node uniform data type.\n\t *\n\t * @return {string} The data type.\n\t */\n\tgetType() {\n\n\t\treturn this.nodeUniform.type;\n\n\t}\n\n}\n\n/**\n * A special form of Matrix3 uniform binding type.\n * It's value is managed by a node object.\n *\n * @private\n * @augments Matrix3Uniform\n */\nclass Matrix3NodeUniform extends Matrix3Uniform {\n\n\t/**\n\t * Constructs a new node-based Matrix3 uniform.\n\t *\n\t * @param {NodeUniform} nodeUniform - The node uniform.\n\t */\n\tconstructor( nodeUniform ) {\n\n\t\tsuper( nodeUniform.name, nodeUniform.value );\n\n\t\t/**\n\t\t * The node uniform.\n\t\t *\n\t\t * @type {NodeUniform}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t}\n\n\t/**\n\t * Overwritten to return the value of the node uniform.\n\t *\n\t * @return {Matrix3} The value.\n\t */\n\tgetValue() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n\t/**\n\t * Returns the node uniform data type.\n\t *\n\t * @return {string} The data type.\n\t */\n\tgetType() {\n\n\t\treturn this.nodeUniform.type;\n\n\t}\n\n}\n\n/**\n * A special form of Matrix4 uniform binding type.\n * It's value is managed by a node object.\n *\n * @private\n * @augments Matrix4Uniform\n */\nclass Matrix4NodeUniform extends Matrix4Uniform {\n\n\t/**\n\t * Constructs a new node-based Matrix4 uniform.\n\t *\n\t * @param {NodeUniform} nodeUniform - The node uniform.\n\t */\n\tconstructor( nodeUniform ) {\n\n\t\tsuper( nodeUniform.name, nodeUniform.value );\n\n\t\t/**\n\t\t * The node uniform.\n\t\t *\n\t\t * @type {NodeUniform}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t}\n\n\t/**\n\t * Overwritten to return the value of the node uniform.\n\t *\n\t * @return {Matrix4} The value.\n\t */\n\tgetValue() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n\t/**\n\t * Returns the node uniform data type.\n\t *\n\t * @return {string} The data type.\n\t */\n\tgetType() {\n\n\t\treturn this.nodeUniform.type;\n\n\t}\n\n}\n\nlet _id$5 = 0;\n\nconst _bindingGroupsCache = new WeakMap();\n\nconst sharedNodeData = new WeakMap();\n\nconst typeFromArray = new Map( [\n\t[ Int8Array, 'int' ],\n\t[ Int16Array, 'int' ],\n\t[ Int32Array, 'int' ],\n\t[ Uint8Array, 'uint' ],\n\t[ Uint16Array, 'uint' ],\n\t[ Uint32Array, 'uint' ],\n\t[ Float32Array, 'float' ]\n] );\n\nconst toFloat = ( value ) => {\n\n\tif ( /e/g.test( value ) ) {\n\n\t\treturn String( value ).replace( /\\+/g, '' );\n\n\t} else {\n\n\t\tvalue = Number( value );\n\n\t\treturn value + ( value % 1 ? '' : '.0' );\n\n\t}\n\n};\n\n/**\n * Base class for builders which generate a shader program based\n * on a 3D object and its node material definition.\n */\nclass NodeBuilder {\n\n\t/**\n\t * Constructs a new node builder.\n\t *\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Renderer} renderer - The current renderer.\n\t * @param {NodeParser} parser - A reference to a node parser.\n\t */\n\tconstructor( object, renderer, parser ) {\n\n\t\t/**\n\t\t * The 3D object.\n\t\t *\n\t\t * @type {Object3D}\n\t\t */\n\t\tthis.object = object;\n\n\t\t/**\n\t\t * The material of the 3D object.\n\t\t *\n\t\t * @type {?Material}\n\t\t */\n\t\tthis.material = ( object && object.material ) || null;\n\n\t\t/**\n\t\t * The geometry of the 3D object.\n\t\t *\n\t\t * @type {?BufferGeometry}\n\t\t */\n\t\tthis.geometry = ( object && object.geometry ) || null;\n\n\t\t/**\n\t\t * The current renderer.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\t/**\n\t\t * A reference to a node parser.\n\t\t *\n\t\t * @type {NodeParser}\n\t\t */\n\t\tthis.parser = parser;\n\n\t\t/**\n\t\t * The scene the 3D object belongs to.\n\t\t *\n\t\t * @type {?Scene}\n\t\t * @default null\n\t\t */\n\t\tthis.scene = null;\n\n\t\t/**\n\t\t * The camera the 3D object is rendered with.\n\t\t *\n\t\t * @type {?Camera}\n\t\t * @default null\n\t\t */\n\t\tthis.camera = null;\n\n\t\t/**\n\t\t * A list of all nodes the builder is processing\n\t\t * for this 3D object.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.nodes = [];\n\n\t\t/**\n\t\t * A list of all nodes the builder is processing in sequential order.\n\t\t *\n\t\t * This is used to determine the update order of nodes, which is important for\n\t\t * {@link NodeUpdateType#UPDATE_BEFORE} and {@link NodeUpdateType#UPDATE_AFTER}.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.sequentialNodes = [];\n\n\t\t/**\n\t\t * A list of all nodes which {@link Node#update} method should be executed.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.updateNodes = [];\n\n\t\t/**\n\t\t * A list of all nodes which {@link Node#updateBefore} method should be executed.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.updateBeforeNodes = [];\n\n\t\t/**\n\t\t * A list of all nodes which {@link Node#updateAfter} method should be executed.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.updateAfterNodes = [];\n\n\t\t/**\n\t\t * A dictionary that assigns each node to a unique hash.\n\t\t *\n\t\t * @type {Object<number,Node>}\n\t\t */\n\t\tthis.hashNodes = {};\n\n\t\t/**\n\t\t * A reference to a node material observer.\n\t\t *\n\t\t * @type {?NodeMaterialObserver}\n\t\t * @default null\n\t\t */\n\t\tthis.observer = null;\n\n\t\t/**\n\t\t * A reference to the current lights node.\n\t\t *\n\t\t * @type {?LightsNode}\n\t\t * @default null\n\t\t */\n\t\tthis.lightsNode = null;\n\n\t\t/**\n\t\t * A reference to the current environment node.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.environmentNode = null;\n\n\t\t/**\n\t\t * A reference to the current fog node.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.fogNode = null;\n\n\t\t/**\n\t\t * The current clipping context.\n\t\t *\n\t\t * @type {?ClippingContext}\n\t\t */\n\t\tthis.clippingContext = null;\n\n\t\t/**\n\t\t * The generated vertex shader.\n\t\t *\n\t\t * @type {?string}\n\t\t */\n\t\tthis.vertexShader = null;\n\n\t\t/**\n\t\t * The generated fragment shader.\n\t\t *\n\t\t * @type {?string}\n\t\t */\n\t\tthis.fragmentShader = null;\n\n\t\t/**\n\t\t * The generated compute shader.\n\t\t *\n\t\t * @type {?string}\n\t\t */\n\t\tthis.computeShader = null;\n\n\t\t/**\n\t\t * Nodes used in the primary flow of code generation.\n\t\t *\n\t\t * @type {Object<string,Array<Node>>}\n\t\t */\n\t\tthis.flowNodes = { vertex: [], fragment: [], compute: [] };\n\n\t\t/**\n\t\t * Nodes code from `.flowNodes`.\n\t\t *\n\t\t * @type {Object<string,string>}\n\t\t */\n\t\tthis.flowCode = { vertex: '', fragment: '', compute: '' };\n\n\t\t/**\n\t\t * This dictionary holds the node uniforms of the builder.\n\t\t * The uniforms are maintained in an array for each shader stage.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.uniforms = { vertex: [], fragment: [], compute: [], index: 0 };\n\n\t\t/**\n\t\t * This dictionary holds the output structs of the builder.\n\t\t * The structs are maintained in an array for each shader stage.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.structs = { vertex: [], fragment: [], compute: [], index: 0 };\n\n\t\t/**\n\t\t * This dictionary holds the types of the builder.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.types = { vertex: [], fragment: [], compute: [], index: 0 };\n\n\t\t/**\n\t\t * This dictionary holds the bindings for each shader stage.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.bindings = { vertex: {}, fragment: {}, compute: {} };\n\n\t\t/**\n\t\t * This dictionary maintains the binding indices per bind group.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.bindingsIndexes = {};\n\n\t\t/**\n\t\t * Reference to the array of bind groups.\n\t\t *\n\t\t * @type {?Array<BindGroup>}\n\t\t */\n\t\tthis.bindGroups = null;\n\n\t\t/**\n\t\t * This array holds the node attributes of this builder\n\t\t * created via {@link AttributeNode}.\n\t\t *\n\t\t * @type {Array<NodeAttribute>}\n\t\t */\n\t\tthis.attributes = [];\n\n\t\t/**\n\t\t * This array holds the node attributes of this builder\n\t\t * created via {@link BufferAttributeNode}.\n\t\t *\n\t\t * @type {Array<NodeAttribute>}\n\t\t */\n\t\tthis.bufferAttributes = [];\n\n\t\t/**\n\t\t * This array holds the node varyings of this builder.\n\t\t *\n\t\t * @type {Array<NodeVarying>}\n\t\t */\n\t\tthis.varyings = [];\n\n\t\t/**\n\t\t * This dictionary holds the (native) node codes of this builder.\n\t\t * The codes are maintained in an array for each shader stage.\n\t\t *\n\t\t * @type {Object<string,Array<NodeCode>>}\n\t\t */\n\t\tthis.codes = {};\n\n\t\t/**\n\t\t * This dictionary holds the node variables of this builder.\n\t\t * The variables are maintained in an array for each shader stage.\n\t\t * This dictionary is also used to count the number of variables\n\t\t * according to their type (const, vars).\n\t\t *\n\t\t * @type {Object<string,Array<NodeVar>|number>}\n\t\t */\n\t\tthis.vars = {};\n\n\t\t/**\n\t\t * This dictionary holds the declarations for each shader stage.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.declarations = {};\n\n\t\t/**\n\t\t * Current code flow.\n\t\t * All code generated in this stack will be stored in `.flow`.\n\t\t *\n\t\t * @type {{code: string}}\n\t\t */\n\t\tthis.flow = { code: '' };\n\n\t\t/**\n\t\t * A chain of nodes.\n\t\t * Used to check recursive calls in node-graph.\n\t\t *\n\t\t * @type {Array<Node>}\n\t\t */\n\t\tthis.chaining = [];\n\n\t\t/**\n\t\t * The current stack.\n\t\t * This reflects the current process in the code block hierarchy,\n\t\t * it is useful to know if the current process is inside a conditional for example.\n\t\t *\n\t\t * @type {StackNode}\n\t\t */\n\t\tthis.stack = stack();\n\n\t\t/**\n\t\t * List of stack nodes.\n\t\t * The current stack hierarchy is stored in an array.\n\t\t *\n\t\t * @type {Array<StackNode>}\n\t\t */\n\t\tthis.stacks = [];\n\n\t\t/**\n\t\t * A tab value. Used for shader string generation.\n\t\t *\n\t\t * @type {string}\n\t\t * @default '\\t'\n\t\t */\n\t\tthis.tab = '\\t';\n\n\t\t/**\n\t\t * Reference to the current function node.\n\t\t *\n\t\t * @type {?FunctionNode}\n\t\t * @default null\n\t\t */\n\t\tthis.currentFunctionNode = null;\n\n\t\t/**\n\t\t * The builder's context.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.context = {\n\t\t\tmaterial: this.material\n\t\t};\n\n\t\t/**\n\t\t * The builder's cache.\n\t\t *\n\t\t * @type {NodeCache}\n\t\t */\n\t\tthis.cache = new NodeCache();\n\n\t\t/**\n\t\t * Since the {@link NodeBuilder#cache} might be temporarily\n\t\t * overwritten by other caches, this member retains the reference\n\t\t * to the builder's own cache.\n\t\t *\n\t\t * @type {NodeCache}\n\t\t * @default this.cache\n\t\t */\n\t\tthis.globalCache = this.cache;\n\n\t\tthis.flowsData = new WeakMap();\n\n\t\t/**\n\t\t * The current shader stage.\n\t\t *\n\t\t * @type {?('vertex'|'fragment'|'compute'|'any')}\n\t\t */\n\t\tthis.shaderStage = null;\n\n\t\t/**\n\t\t * The current build stage.\n\t\t *\n\t\t * @type {?('setup'|'analyze'|'generate')}\n\t\t */\n\t\tthis.buildStage = null;\n\n\t\t/**\n\t\t * The sub-build layers.\n\t\t *\n\t\t * @type {Array<SubBuildNode>}\n\t\t * @default []\n\t\t */\n\t\tthis.subBuildLayers = [];\n\n\n\t\t/**\n\t\t * The active stack nodes.\n\t\t *\n\t\t * @type {Array<StackNode>}\n\t\t */\n\t\tthis.activeStacks = [];\n\n\t\t/**\n\t\t * The current sub-build TSL function(Fn).\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.subBuildFn = null;\n\n\t\t/**\n\t\t * The current TSL function(Fn) call node.\n\t\t *\n\t\t * @type {?Node}\n\t\t * @default null\n\t\t */\n\t\tthis.fnCall = null;\n\n\t\tObject.defineProperty( this, 'id', { value: _id$5 ++ } );\n\n\t}\n\n\t/**\n\t * Whether the material is using flat shading or not.\n\t *\n\t * @returns {boolean} Whether the material is using flat shading or not.\n\t */\n\tisFlatShading() {\n\n\t\treturn this.material.flatShading === true || this.geometry.hasAttribute( 'normal' ) === false;\n\n\t}\n\n\t/**\n\t * Whether the material is opaque or not.\n\t *\n\t * @return {boolean} Whether the material is opaque or not.\n\t */\n\tisOpaque() {\n\n\t\tconst material = this.material;\n\n\t\treturn material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false;\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of {@link RenderTarget} with the given\n\t * dimensions and options.\n\t *\n\t * @param {number} width - The width of the render target.\n\t * @param {number} height - The height of the render target.\n\t * @param {Object} options - The options of the render target.\n\t * @return {RenderTarget} The render target.\n\t */\n\tcreateRenderTarget( width, height, options ) {\n\n\t\treturn new RenderTarget( width, height, options );\n\n\t}\n\n\t/**\n\t * Factory method for creating an instance of {@link CubeRenderTarget} with the given\n\t * dimensions and options.\n\t *\n\t * @param {number} size - The size of the cube render target.\n\t * @param {Object} options - The options of the cube render target.\n\t * @return {CubeRenderTarget} The cube render target.\n\t */\n\tcreateCubeRenderTarget( size, options ) {\n\n\t\treturn new CubeRenderTarget( size, options );\n\n\t}\n\n\t/**\n\t * Whether the given node is included in the internal array of nodes or not.\n\t *\n\t * @param {Node} node - The node to test.\n\t * @return {boolean} Whether the given node is included in the internal array of nodes or not.\n\t */\n\tincludes( node ) {\n\n\t\treturn this.nodes.includes( node );\n\n\t}\n\n\t/**\n\t * Returns the output struct name which is required by\n\t * {@link OutputStructNode}.\n\t *\n\t * @abstract\n\t * @return {string} The name of the output struct.\n\t */\n\tgetOutputStructName() {}\n\n\t/**\n\t * Returns a bind group for the given group name and binding.\n\t *\n\t * @private\n\t * @param {string} groupName - The group name.\n\t * @param {Array<NodeUniformsGroup>} bindings - List of bindings.\n\t * @return {BindGroup} The bind group\n\t */\n\t_getBindGroup( groupName, bindings ) {\n\n\t\tconst groupNode = bindings[ 0 ].groupNode;\n\n\t\tlet sharedGroup = groupNode.shared;\n\n\t\tif ( sharedGroup ) {\n\n\t\t\tfor ( let i = 1; i < bindings.length; i ++ ) {\n\n\t\t\t\tif ( groupNode !== bindings[ i ].groupNode ) {\n\n\t\t\t\t\tsharedGroup = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet bindGroup;\n\n\t\tif ( sharedGroup ) {\n\n\t\t\tlet cacheKeyString = '';\n\n\t\t\tfor ( const binding of bindings ) {\n\n\t\t\t\tif ( binding.isNodeUniformsGroup ) {\n\n\t\t\t\t\tbinding.uniforms.sort( ( a, b ) => a.nodeUniform.node.id - b.nodeUniform.node.id );\n\n\t\t\t\t\tfor ( const uniform of binding.uniforms ) {\n\n\t\t\t\t\t\tcacheKeyString += uniform.nodeUniform.node.id;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcacheKeyString += binding.nodeUniform.id;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// TODO: Remove this hack ._currentRenderContext\n\n\t\t\tconst currentContext = this.renderer._currentRenderContext || this.renderer; // use renderer as fallback until we have a compute context\n\n\t\t\tlet bindingGroupsCache = _bindingGroupsCache.get( currentContext );\n\n\t\t\tif ( bindingGroupsCache === undefined ) {\n\n\t\t\t\tbindingGroupsCache = new Map();\n\n\t\t\t\t_bindingGroupsCache.set( currentContext, bindingGroupsCache );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst cacheKey = hashString( cacheKeyString );\n\n\t\t\tbindGroup = bindingGroupsCache.get( cacheKey );\n\n\t\t\tif ( bindGroup === undefined ) {\n\n\t\t\t\tbindGroup = new BindGroup( groupName, bindings );\n\n\t\t\t\tbindingGroupsCache.set( cacheKey, bindGroup );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbindGroup = new BindGroup( groupName, bindings );\n\n\t\t}\n\n\t\treturn bindGroup;\n\n\t}\n\n\t/**\n\t * Returns an array of node uniform groups for the given group name and shader stage.\n\t *\n\t * @param {string} groupName - The group name.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.\n\t * @return {Array<NodeUniformsGroup>} The array of node uniform groups.\n\t */\n\tgetBindGroupArray( groupName, shaderStage ) {\n\n\t\tconst bindings = this.bindings[ shaderStage ];\n\n\t\tlet bindGroup = bindings[ groupName ];\n\n\t\tif ( bindGroup === undefined ) {\n\n\t\t\tif ( this.bindingsIndexes[ groupName ] === undefined ) {\n\n\t\t\t\tthis.bindingsIndexes[ groupName ] = { binding: 0, group: Object.keys( this.bindingsIndexes ).length };\n\n\t\t\t}\n\n\t\t\tbindings[ groupName ] = bindGroup = [];\n\n\t\t}\n\n\t\treturn bindGroup;\n\n\t}\n\n\t/**\n\t * Returns a list bindings of all shader stages separated by groups.\n\t *\n\t * @return {Array<BindGroup>} The list of bindings.\n\t */\n\tgetBindings() {\n\n\t\tlet bindingsGroups = this.bindGroups;\n\n\t\tif ( bindingsGroups === null ) {\n\n\t\t\tconst groups = {};\n\t\t\tconst bindings = this.bindings;\n\n\t\t\tfor ( const shaderStage of shaderStages ) {\n\n\t\t\t\tfor ( const groupName in bindings[ shaderStage ] ) {\n\n\t\t\t\t\tconst uniforms = bindings[ shaderStage ][ groupName ];\n\n\t\t\t\t\tconst groupUniforms = groups[ groupName ] || ( groups[ groupName ] = [] );\n\n\t\t\t\t\tfor ( const uniform of uniforms ) {\n\n\t\t\t\t\t\tif ( groupUniforms.includes( uniform ) === false ) {\n\n\t\t\t\t\t\t\tgroupUniforms.push( uniform );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingsGroups = [];\n\n\t\t\tfor ( const groupName in groups ) {\n\n\t\t\t\tconst group = groups[ groupName ];\n\n\t\t\t\tconst bindingsGroup = this._getBindGroup( groupName, group );\n\n\t\t\t\tbindingsGroups.push( bindingsGroup );\n\n\t\t\t}\n\n\t\t\tthis.bindGroups = bindingsGroups;\n\n\t\t}\n\n\t\treturn bindingsGroups;\n\n\t}\n\n\t/**\n\t * Sorts the bind groups and updates {@link NodeBuilder#bindingsIndexes}.\n\t */\n\tsortBindingGroups() {\n\n\t\tconst bindingsGroups = this.getBindings();\n\n\t\tbindingsGroups.sort( ( a, b ) => ( a.bindings[ 0 ].groupNode.order - b.bindings[ 0 ].groupNode.order ) );\n\n\t\tfor ( let i = 0; i < bindingsGroups.length; i ++ ) {\n\n\t\t\tconst bindingGroup = bindingsGroups[ i ];\n\t\t\tthis.bindingsIndexes[ bindingGroup.name ].group = i;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The builder maintains each node in a hash-based dictionary.\n\t * This method sets the given node (value) with the given hash (key) into this dictionary.\n\t *\n\t * @param {Node} node - The node to add.\n\t * @param {number} hash - The hash of the node.\n\t */\n\tsetHashNode( node, hash ) {\n\n\t\tthis.hashNodes[ hash ] = node;\n\n\t}\n\n\t/**\n\t * Adds a node to this builder.\n\t *\n\t * @param {Node} node - The node to add.\n\t */\n\taddNode( node ) {\n\n\t\tif ( this.nodes.includes( node ) === false ) {\n\n\t\t\tthis.nodes.push( node );\n\n\t\t\tthis.setHashNode( node, node.getHash( this ) );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * It is used to add Nodes that will be used as FRAME and RENDER events,\n\t * and need to follow a certain sequence in the calls to work correctly.\n\t * This function should be called after 'setup()' in the 'build()' process to ensure that the child nodes are processed first.\n\t *\n\t * @param {Node} node - The node to add.\n\t */\n\taddSequentialNode( node ) {\n\n\t\tconst updateBeforeType = node.getUpdateBeforeType();\n\t\tconst updateAfterType = node.getUpdateAfterType();\n\n\t\tif ( updateBeforeType !== NodeUpdateType.NONE || updateAfterType !== NodeUpdateType.NONE ) {\n\n\t\t\tif ( this.sequentialNodes.includes( node ) === false ) {\n\n\t\t\t\tthis.sequentialNodes.push( node );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks the update types of nodes\n\t */\n\tbuildUpdateNodes() {\n\n\t\tfor ( const node of this.nodes ) {\n\n\t\t\tconst updateType = node.getUpdateType();\n\n\t\t\tif ( updateType !== NodeUpdateType.NONE ) {\n\n\t\t\t\tthis.updateNodes.push( node );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const node of this.sequentialNodes ) {\n\n\t\t\tconst updateBeforeType = node.getUpdateBeforeType();\n\t\t\tconst updateAfterType = node.getUpdateAfterType();\n\n\t\t\tif ( updateBeforeType !== NodeUpdateType.NONE ) {\n\n\t\t\t\tthis.updateBeforeNodes.push( node );\n\n\t\t\t}\n\n\t\t\tif ( updateAfterType !== NodeUpdateType.NONE ) {\n\n\t\t\t\tthis.updateAfterNodes.push( node );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * A reference the current node which is the\n\t * last node in the chain of nodes.\n\t *\n\t * @type {Node}\n\t */\n\tget currentNode() {\n\n\t\treturn this.chaining[ this.chaining.length - 1 ];\n\n\t}\n\n\t/**\n\t * Whether the given texture is filtered or not.\n\t *\n\t * @param {Texture} texture - The texture to check.\n\t * @return {boolean} Whether the given texture is filtered or not.\n\t */\n\tisFilteredTexture( texture ) {\n\n\t\treturn ( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||\n\t\t\ttexture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter );\n\n\t}\n\n\t/**\n\t * Returns the maximum number of bytes available for uniform buffers.\n\t *\n\t * @return {number} The maximum number of bytes available for uniform buffers.\n\t */\n\tgetUniformBufferLimit() {\n\n\t\treturn this.renderer.backend.capabilities.getUniformBufferLimit();\n\n\t}\n\n\t/**\n\t * Adds the given node to the internal node chain.\n\t * This is used to check recursive calls in node-graph.\n\t *\n\t * @param {Node} node - The node to add.\n\t */\n\taddChain( node ) {\n\n\t\t/*\n\t\tif ( this.chaining.indexOf( node ) !== - 1 ) {\n\n\t\t\twarn( 'Recursive node: ', node );\n\n\t\t}\n\t\t*/\n\n\t\tthis.chaining.push( node );\n\n\t}\n\n\t/**\n\t * Removes the given node from the internal node chain.\n\t *\n\t * @param {Node} node - The node to remove.\n\t */\n\tremoveChain( node ) {\n\n\t\tconst lastChain = this.chaining.pop();\n\n\t\tif ( lastChain !== node ) {\n\n\t\t\tthrow new Error( 'NodeBuilder: Invalid node chaining!' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the native shader method name for a given generic name. E.g.\n\t * the method name `textureDimensions` matches the WGSL name but must be\n\t * resolved to `textureSize` in GLSL.\n\t *\n\t * @abstract\n\t * @param {string} method - The method name to resolve.\n\t * @return {string} The resolved method name.\n\t */\n\tgetMethod( method ) {\n\n\t\treturn method;\n\n\t}\n\n\t/**\n\t * Returns the native snippet for a ternary operation. E.g. GLSL would output\n\t * a ternary op as `cond ? x : y` whereas WGSL would output it as `select(y, x, cond)`\n\t *\n\t * @abstract\n\t * @param {string} condSnippet - The condition determining which expression gets resolved.\n\t * @param {string} ifSnippet - The expression to resolve to if the condition is true.\n\t * @param {string} elseSnippet - The expression to resolve to if the condition is false.\n\t * @return {string} The resolved method name.\n\t */\n\tgetTernary( /* condSnippet, ifSnippet, elseSnippet*/ ) {\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Returns a node for the given hash, see {@link NodeBuilder#setHashNode}.\n\t *\n\t * @param {number} hash - The hash of the node.\n\t * @return {Node} The found node.\n\t */\n\tgetNodeFromHash( hash ) {\n\n\t\treturn this.hashNodes[ hash ];\n\n\t}\n\n\t/**\n\t * Adds the Node to a target flow so that it can generate code in the 'generate' process.\n\t *\n\t * @param {('vertex'|'fragment'|'compute')} shaderStage - The shader stage.\n\t * @param {Node} node - The node to add.\n\t * @return {Node} The node.\n\t */\n\taddFlow( shaderStage, node ) {\n\n\t\tthis.flowNodes[ shaderStage ].push( node );\n\n\t\treturn node;\n\n\t}\n\n\t/**\n\t * Sets builder's context.\n\t *\n\t * @param {Object} context - The context to set.\n\t */\n\tsetContext( context ) {\n\n\t\tthis.context = context;\n\n\t}\n\n\t/**\n\t * Returns the builder's current context.\n\t *\n\t * @return {Object} The builder's current context.\n\t */\n\tgetContext() {\n\n\t\treturn this.context;\n\n\t}\n\n\t/**\n\t * Adds context data to the builder's current context.\n\t *\n\t * @param {Object} context - The context to add.\n\t * @return {Object} The previous context.\n\t */\n\taddContext( context ) {\n\n\t\tconst previousContext = this.getContext();\n\n\t\tthis.setContext( { ...this.context, ...context } );\n\n\t\treturn previousContext;\n\n\t}\n\n\t/**\n\t * Gets a context used in shader construction that can be shared across different materials.\n\t * This is necessary since the renderer cache can reuse shaders generated in one material and use them in another.\n\t *\n\t * @return {Object} The builder's current context without material.\n\t */\n\tgetSharedContext() {\n\n\t\tconst context = { ...this.context };\n\n\t\tdelete context.material;\n\t\tdelete context.getUV;\n\t\tdelete context.getOutput;\n\t\tdelete context.getTextureLevel;\n\t\tdelete context.getAO;\n\t\tdelete context.getShadow;\n\n\t\treturn context;\n\n\t}\n\n\t/**\n\t * Sets builder's cache.\n\t *\n\t * @param {NodeCache} cache - The cache to set.\n\t */\n\tsetCache( cache ) {\n\n\t\tthis.cache = cache;\n\n\t}\n\n\t/**\n\t * Returns the builder's current cache.\n\t *\n\t * @return {NodeCache} The builder's current cache.\n\t */\n\tgetCache() {\n\n\t\treturn this.cache;\n\n\t}\n\n\t/**\n\t * Returns a cache for the given node.\n\t *\n\t * @param {Node} node - The node.\n\t * @param {boolean} [parent=true] - Whether this node refers to a shared parent cache or not.\n\t * @return {NodeCache} The cache.\n\t */\n\tgetCacheFromNode( node, parent = true ) {\n\n\t\tconst data = this.getDataFromNode( node );\n\t\tif ( data.cache === undefined ) data.cache = new NodeCache( parent ? this.getCache() : null );\n\n\t\treturn data.cache;\n\n\t}\n\n\t/**\n\t * Whether the requested feature is available or not.\n\t *\n\t * @abstract\n\t * @param {string} name - The requested feature.\n\t * @return {boolean} Whether the requested feature is supported or not.\n\t */\n\tisAvailable( /*name*/ ) {\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns the vertexIndex input variable as a native shader string.\n\t *\n\t * @abstract\n\t * @return {string} The instanceIndex shader string.\n\t */\n\tgetVertexIndex() {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Contextually returns either the vertex stage instance index builtin\n\t * or the linearized index of an compute invocation within a grid of workgroups.\n\t *\n\t * @abstract\n\t * @return {string} The instanceIndex shader string.\n\t */\n\tgetInstanceIndex() {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Returns the drawIndex input variable as a native shader string.\n\t * Only relevant for WebGL and its `WEBGL_multi_draw` extension.\n\t *\n\t * @abstract\n\t * @return {?string} The drawIndex shader string.\n\t */\n\tgetDrawIndex() {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Returns the frontFacing input variable as a native shader string.\n\t *\n\t * @abstract\n\t * @return {string} The frontFacing shader string.\n\t */\n\tgetFrontFacing() {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Returns the fragCoord input variable as a native shader string.\n\t *\n\t * @abstract\n\t * @return {string} The fragCoord shader string.\n\t */\n\tgetFragCoord() {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Whether to flip texture data along its vertical axis or not. WebGL needs\n\t * this method evaluate to `true`, WebGPU to `false`.\n\t *\n\t * @abstract\n\t * @return {boolean} Whether to flip texture data along its vertical axis or not.\n\t */\n\tisFlipY() {\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Calling this method increases the usage count for the given node by one.\n\t *\n\t * @param {Node} node - The node to increase the usage count for.\n\t * @return {number} The updated usage count.\n\t */\n\tincreaseUsage( node ) {\n\n\t\tconst nodeData = this.getDataFromNode( node );\n\t\tnodeData.usageCount = nodeData.usageCount === undefined ? 1 : nodeData.usageCount + 1;\n\n\t\treturn nodeData.usageCount;\n\n\t}\n\n\t/**\n\t * Generates a texture sample shader string for the given texture data.\n\t *\n\t * @abstract\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The texture property name.\n\t * @param {string} uvSnippet - Snippet defining the texture coordinates.\n\t * @return {string} The generated shader string.\n\t */\n\tgenerateTexture( /* texture, textureProperty, uvSnippet */ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Generates a texture LOD shader string for the given texture data.\n\t *\n\t * @abstract\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The texture property name.\n\t * @param {string} uvSnippet - Snippet defining the texture coordinates.\n\t * @param {?string} depthSnippet - Snippet defining the 0-based texture array index to sample.\n\t * @param {string} levelSnippet - Snippet defining the mip level.\n\t * @return {string} The generated shader string.\n\t */\n\tgenerateTextureLod( /* texture, textureProperty, uvSnippet, depthSnippet, levelSnippet */ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Generates the array declaration string.\n\t *\n\t * @param {string} type - The type.\n\t * @param {?number} [count] - The count.\n\t * @return {string} The generated value as a shader string.\n\t */\n\tgenerateArrayDeclaration( type, count ) {\n\n\t\treturn this.getType( type ) + '[ ' + count + ' ]';\n\n\t}\n\n\t/**\n\t * Generates the array shader string for the given type and value.\n\t *\n\t * @param {string} type - The type.\n\t * @param {?number} [count] - The count.\n\t * @param {?Array<Node>} [values=null] - The default values.\n\t * @return {string} The generated value as a shader string.\n\t */\n\tgenerateArray( type, count, values = null ) {\n\n\t\tlet snippet = this.generateArrayDeclaration( type, count ) + '( ';\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tconst value = values ? values[ i ] : null;\n\n\t\t\tif ( value !== null ) {\n\n\t\t\t\tsnippet += value.build( this, type );\n\n\t\t\t} else {\n\n\t\t\t\tsnippet += this.generateConst( type );\n\n\t\t\t}\n\n\t\t\tif ( i < count - 1 ) snippet += ', ';\n\n\t\t}\n\n\t\tsnippet += ' )';\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Generates the struct shader string.\n\t *\n\t * @param {string} type - The type.\n\t * @param {Array<Object>} [membersLayout] - The count.\n\t * @param {?Array<Node>} [values=null] - The default values.\n\t * @return {string} The generated value as a shader string.\n\t */\n\tgenerateStruct( type, membersLayout, values = null ) {\n\n\t\tconst snippets = [];\n\n\t\tfor ( const member of membersLayout ) {\n\n\t\t\tconst { name, type } = member;\n\n\t\t\tif ( values && values[ name ] && values[ name ].isNode ) {\n\n\t\t\t\tsnippets.push( values[ name ].build( this, type ) );\n\n\t\t\t} else {\n\n\t\t\t\tsnippets.push( this.generateConst( type ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn type + '( ' + snippets.join( ', ' ) + ' )';\n\n\t}\n\n\t/**\n\t * Generates the shader string for the given type and value.\n\t *\n\t * @param {string} type - The type.\n\t * @param {?any} [value=null] - The value.\n\t * @return {string} The generated value as a shader string.\n\t */\n\tgenerateConst( type, value = null ) {\n\n\t\tif ( value === null ) {\n\n\t\t\tif ( type === 'float' || type === 'int' || type === 'uint' ) value = 0;\n\t\t\telse if ( type === 'bool' ) value = false;\n\t\t\telse if ( type === 'color' ) value = new Color();\n\t\t\telse if ( type === 'vec2' || type === 'uvec2' || type === 'ivec2' ) value = new Vector2();\n\t\t\telse if ( type === 'vec3' || type === 'uvec3' || type === 'ivec3' ) value = new Vector3();\n\t\t\telse if ( type === 'vec4' || type === 'uvec4' || type === 'ivec4' ) value = new Vector4();\n\n\t\t}\n\n\t\tif ( type === 'float' ) return toFloat( value );\n\t\tif ( type === 'int' ) return `${ Math.round( value ) }`;\n\t\tif ( type === 'uint' ) return value >= 0 ? `${ Math.round( value ) }u` : '0u';\n\t\tif ( type === 'bool' ) return value ? 'true' : 'false';\n\t\tif ( type === 'color' ) return `${ this.getType( 'vec3' ) }( ${ toFloat( value.r ) }, ${ toFloat( value.g ) }, ${ toFloat( value.b ) } )`;\n\n\t\tconst typeLength = this.getTypeLength( type );\n\n\t\tconst componentType = this.getComponentType( type );\n\n\t\tconst generateConst = value => this.generateConst( componentType, value );\n\n\t\tif ( typeLength === 2 ) {\n\n\t\t\treturn `${ this.getType( type ) }( ${ generateConst( value.x ) }, ${ generateConst( value.y ) } )`;\n\n\t\t} else if ( typeLength === 3 ) {\n\n\t\t\treturn `${ this.getType( type ) }( ${ generateConst( value.x ) }, ${ generateConst( value.y ) }, ${ generateConst( value.z ) } )`;\n\n\t\t} else if ( typeLength === 4 && type !== 'mat2' ) {\n\n\t\t\treturn `${ this.getType( type ) }( ${ generateConst( value.x ) }, ${ generateConst( value.y ) }, ${ generateConst( value.z ) }, ${ generateConst( value.w ) } )`;\n\n\t\t} else if ( typeLength >= 4 && value && ( value.isMatrix2 || value.isMatrix3 || value.isMatrix4 ) ) {\n\n\t\t\treturn `${ this.getType( type ) }( ${ value.elements.map( generateConst ).join( ', ' ) } )`;\n\n\t\t} else if ( typeLength > 4 ) {\n\n\t\t\treturn `${ this.getType( type ) }()`;\n\n\t\t}\n\n\t\tthrow new Error( `NodeBuilder: Type '${type}' not found in generate constant attempt.` );\n\n\t}\n\n\t/**\n\t * It might be necessary to convert certain data types to different ones\n\t * so this method can be used to hide the conversion.\n\t *\n\t * @param {string} type - The type.\n\t * @return {string} The updated type.\n\t */\n\tgetType( type ) {\n\n\t\tif ( type === 'color' ) return 'vec3';\n\n\t\treturn type;\n\n\t}\n\n\t/**\n\t * Whether the given attribute name is defined in the geometry or not.\n\t *\n\t * @param {string} name - The attribute name.\n\t * @return {boolean} Whether the given attribute name is defined in the geometry.\n\t */\n\thasGeometryAttribute( name ) {\n\n\t\treturn this.geometry && this.geometry.getAttribute( name ) !== undefined;\n\n\t}\n\n\t/**\n\t * Returns a node attribute for the given name and type.\n\t *\n\t * @param {string} name - The attribute's name.\n\t * @param {string} type - The attribute's type.\n\t * @return {NodeAttribute} The node attribute.\n\t */\n\tgetAttribute( name, type ) {\n\n\t\tconst attributes = this.attributes;\n\n\t\t// find attribute\n\n\t\tfor ( const attribute of attributes ) {\n\n\t\t\tif ( attribute.name === name ) {\n\n\t\t\t\treturn attribute;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// create a new if no exist\n\n\t\tconst attribute = new NodeAttribute( name, type );\n\n\t\tthis.registerDeclaration( attribute );\n\n\t\tattributes.push( attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Returns for the given node and shader stage the property name for the shader.\n\t *\n\t * @param {Node} node - The node.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.\n\t * @return {string} The property name.\n\t */\n\tgetPropertyName( node/*, shaderStage*/ ) {\n\n\t\treturn node.name;\n\n\t}\n\n\t/**\n\t * Whether the given type is a vector type or not.\n\t *\n\t * @param {string} type - The type to check.\n\t * @return {boolean} Whether the given type is a vector type or not.\n\t */\n\tisVector( type ) {\n\n\t\treturn /vec\\d/.test( type );\n\n\t}\n\n\t/**\n\t * Whether the given type is a matrix type or not.\n\t *\n\t * @param {string} type - The type to check.\n\t * @return {boolean} Whether the given type is a matrix type or not.\n\t */\n\tisMatrix( type ) {\n\n\t\treturn /mat\\d/.test( type );\n\n\t}\n\n\t/**\n\t * Whether the given type is a reference type or not.\n\t *\n\t * @param {string} type - The type to check.\n\t * @return {boolean} Whether the given type is a reference type or not.\n\t */\n\tisReference( type ) {\n\n\t\treturn type === 'void' || type === 'property' || type === 'sampler' || type === 'samplerComparison' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D';\n\n\t}\n\n\t/**\n\t * Checks if the given texture requires a manual conversion to the working color space.\n\t *\n\t * @abstract\n\t * @param {Texture} texture - The texture to check.\n\t * @return {boolean} Whether the given texture requires a conversion to working color space or not.\n\t */\n\tneedsToWorkingColorSpace( /*texture*/ ) {\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns the component type of a given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @return {string} The component type.\n\t */\n\tgetComponentTypeFromTexture( texture ) {\n\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isDataTexture ) {\n\n\t\t\tif ( type === IntType ) return 'int';\n\t\t\tif ( type === UnsignedIntType ) return 'uint';\n\n\t\t}\n\n\t\treturn 'float';\n\n\t}\n\n\t/**\n\t * Returns the element type for a given type.\n\t *\n\t * @param {string} type - The type.\n\t * @return {string} The element type.\n\t */\n\tgetElementType( type ) {\n\n\t\tif ( type === 'mat2' ) return 'vec2';\n\t\tif ( type === 'mat3' ) return 'vec3';\n\t\tif ( type === 'mat4' ) return 'vec4';\n\n\t\treturn this.getComponentType( type );\n\n\t}\n\n\t/**\n\t * Returns the component type for a given type.\n\t *\n\t * @param {string} type - The type.\n\t * @return {string} The component type.\n\t */\n\tgetComponentType( type ) {\n\n\t\ttype = this.getVectorType( type );\n\n\t\tif ( type === 'float' || type === 'bool' || type === 'int' || type === 'uint' ) return type;\n\n\t\tconst componentType = /(b|i|u|)(vec|mat)([2-4])/.exec( type );\n\n\t\tif ( componentType === null ) return null;\n\n\t\tif ( componentType[ 1 ] === 'b' ) return 'bool';\n\t\tif ( componentType[ 1 ] === 'i' ) return 'int';\n\t\tif ( componentType[ 1 ] === 'u' ) return 'uint';\n\n\t\treturn 'float';\n\n\t}\n\n\t/**\n\t * Returns the vector type for a given type.\n\t *\n\t * @param {string} type - The type.\n\t * @return {string} The vector type.\n\t */\n\tgetVectorType( type ) {\n\n\t\tif ( type === 'color' ) return 'vec3';\n\t\tif ( type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D' ) return 'vec4';\n\n\t\treturn type;\n\n\t}\n\n\t/**\n\t * Returns the data type for the given the length and component type.\n\t *\n\t * @param {number} length - The length.\n\t * @param {string} [componentType='float'] - The component type.\n\t * @return {string} The type.\n\t */\n\tgetTypeFromLength( length, componentType = 'float' ) {\n\n\t\tif ( length === 1 ) return componentType;\n\n\t\tlet baseType = getTypeFromLength( length );\n\t\tconst prefix = componentType === 'float' ? '' : componentType[ 0 ];\n\n\t\t// fix edge case for mat2x2 being same size as vec4\n\t\tif ( /mat2/.test( componentType ) === true ) {\n\n\t\t\tbaseType = baseType.replace( 'vec', 'mat' );\n\n\t\t}\n\n\t\treturn prefix + baseType;\n\n\t}\n\n\t/**\n\t * Returns the type for a given typed array.\n\t *\n\t * @param {TypedArray} array - The typed array.\n\t * @return {string} The type.\n\t */\n\tgetTypeFromArray( array ) {\n\n\t\treturn typeFromArray.get( array.constructor );\n\n\t}\n\n\t/**\n\t * Returns the type is an integer type.\n\t *\n\t * @param {string} type - The type.\n\t * @return {boolean} Whether the type is an integer type or not.\n\t */\n\tisInteger( type ) {\n\n\t\treturn /int|uint|(i|u)vec/.test( type );\n\n\t}\n\n\t/**\n\t * Returns the type for a given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t * @return {string} The type.\n\t */\n\tgetTypeFromAttribute( attribute ) {\n\n\t\tlet dataAttribute = attribute;\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) dataAttribute = attribute.data;\n\n\t\tconst array = dataAttribute.array;\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst normalized = attribute.normalized;\n\n\t\tlet arrayType;\n\n\t\tif ( ! ( attribute instanceof Float16BufferAttribute ) && normalized !== true ) {\n\n\t\t\tarrayType = this.getTypeFromArray( array );\n\n\t\t}\n\n\t\treturn this.getTypeFromLength( itemSize, arrayType );\n\n\t}\n\n\t/**\n\t * Returns the length for the given data type.\n\t *\n\t * @param {string} type - The data type.\n\t * @return {number} The length.\n\t */\n\tgetTypeLength( type ) {\n\n\t\tconst vecType = this.getVectorType( type );\n\t\tconst vecNum = /vec([2-4])/.exec( vecType );\n\n\t\tif ( vecNum !== null ) return Number( vecNum[ 1 ] );\n\t\tif ( vecType === 'float' || vecType === 'bool' || vecType === 'int' || vecType === 'uint' ) return 1;\n\t\tif ( /mat2/.test( type ) === true ) return 4;\n\t\tif ( /mat3/.test( type ) === true ) return 9;\n\t\tif ( /mat4/.test( type ) === true ) return 16;\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Returns the vector type for a given matrix type.\n\t *\n\t * @param {string} type - The matrix type.\n\t * @return {string} The vector type.\n\t */\n\tgetVectorFromMatrix( type ) {\n\n\t\treturn type.replace( 'mat', 'vec' );\n\n\t}\n\n\t/**\n\t * For a given type this method changes the component type to the\n\t * given value. E.g. `vec4` should be changed to the new component type\n\t * `uint` which results in `uvec4`.\n\t *\n\t * @param {string} type - The type.\n\t * @param {string} newComponentType - The new component type.\n\t * @return {string} The new type.\n\t */\n\tchangeComponentType( type, newComponentType ) {\n\n\t\treturn this.getTypeFromLength( this.getTypeLength( type ), newComponentType );\n\n\t}\n\n\t/**\n\t * Returns the integer type pendant for the given type.\n\t *\n\t * @param {string} type - The type.\n\t * @return {string} The integer type.\n\t */\n\tgetIntegerType( type ) {\n\n\t\tconst componentType = this.getComponentType( type );\n\n\t\tif ( componentType === 'int' || componentType === 'uint' ) return type;\n\n\t\treturn this.changeComponentType( type, 'int' );\n\n\t}\n\n\t/**\n\t * Adds an active stack to the internal stack.\n\t *\n\t * @param {StackNode} stack - The stack node to add.\n\t */\n\tsetActiveStack( stack ) {\n\n\t\tthis.activeStacks.push( stack );\n\n\t}\n\n\t/**\n\t * Removes the active stack from the internal stack.\n\t *\n\t * @param {StackNode} stack - The stack node to remove.\n\t */\n\tremoveActiveStack( stack ) {\n\n\t\tif ( this.activeStacks[ this.activeStacks.length - 1 ] === stack ) {\n\n\t\t\tthis.activeStacks.pop();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'NodeBuilder: Invalid active stack removal.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the active stack.\n\t *\n\t * @return {StackNode} The active stack.\n\t */\n\tgetActiveStack() {\n\n\t\treturn this.activeStacks[ this.activeStacks.length - 1 ];\n\n\t}\n\n\t/**\n\t * Returns the base stack.\n\t *\n\t * @return {StackNode} The base stack.\n\t */\n\tgetBaseStack() {\n\n\t\treturn this.activeStacks[ 0 ];\n\n\t}\n\n\t/**\n\t * Adds a stack node to the internal stack.\n\t *\n\t * @return {StackNode} The added stack node.\n\t */\n\taddStack() {\n\n\t\tthis.stack = stack( this.stack );\n\n\t\tconst previousStack = getCurrentStack();\n\n\t\tthis.stacks.push( previousStack );\n\t\tsetCurrentStack( this.stack );\n\n\t\treturn this.stack;\n\n\t}\n\n\t/**\n\t * Removes the last stack node from the internal stack.\n\t *\n\t * @return {StackNode} The removed stack node.\n\t */\n\tremoveStack() {\n\n\t\tconst lastStack = this.stack;\n\n\t\tfor ( const node of lastStack.nodes ) {\n\n\t\t\tconst nodeData = this.getDataFromNode( node );\n\t\t\tnodeData.stack = lastStack;\n\n\t\t}\n\n\t\tthis.stack = lastStack.parent;\n\n\t\tsetCurrentStack( this.stacks.pop() );\n\n\t\treturn lastStack;\n\n\t}\n\n\t/**\n\t * The builder maintains (cached) data for each node during the building process. This method\n\t * can be used to get these data for a specific shader stage and cache.\n\t *\n\t * @param {Node} node - The node to get the data for.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.\n\t * @param {?NodeCache} cache - An optional cache.\n\t * @return {Object} The node data.\n\t */\n\tgetDataFromNode( node, shaderStage = this.shaderStage, cache = null ) {\n\n\t\tcache = cache === null ? ( node.isGlobal( this ) ? this.globalCache : this.cache ) : cache;\n\n\t\tlet nodeData = cache.getData( node );\n\n\t\tif ( nodeData === undefined ) {\n\n\t\t\tnodeData = {};\n\n\t\t\tcache.setData( node, nodeData );\n\n\t\t}\n\n\t\tif ( nodeData[ shaderStage ] === undefined ) nodeData[ shaderStage ] = {};\n\n\t\t//\n\n\t\tlet data = nodeData[ shaderStage ];\n\n\t\tconst subBuilds = nodeData.any ? nodeData.any.subBuilds : null;\n\t\tconst subBuild = this.getClosestSubBuild( subBuilds );\n\n\t\tif ( subBuild ) {\n\n\t\t\tif ( data.subBuildsCache === undefined ) data.subBuildsCache = {};\n\n\t\t\tdata = data.subBuildsCache[ subBuild ] || ( data.subBuildsCache[ subBuild ] = {} );\n\t\t\tdata.subBuilds = subBuilds;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Returns the properties for the given node and shader stage.\n\t *\n\t * Properties are typically used within a build stage to reference a node's\n\t * child node or nodes manually assigned to the properties in a separate build stage.\n\t * A typical usage pattern for defining nodes manually would be assigning dependency nodes\n\t * to the current node's properties in the setup stage and building those properties in the generate stage.\n\t *\n\t * @param {Node} node - The node to get the properties for.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage='any'] - The shader stage.\n\t * @return {Object} The node properties.\n\t */\n\tgetNodeProperties( node, shaderStage = 'any' ) {\n\n\t\tconst nodeData = this.getDataFromNode( node, shaderStage );\n\n\t\treturn nodeData.properties || ( nodeData.properties = { outputNode: null } );\n\n\t}\n\n\t/**\n\t * Returns an instance of {@link NodeAttribute} for the given buffer attribute node.\n\t *\n\t * @param {BufferAttributeNode} node - The buffer attribute node.\n\t * @param {string} type - The node type.\n\t * @return {NodeAttribute} The node attribute.\n\t */\n\tgetBufferAttributeFromNode( node, type ) {\n\n\t\tconst nodeData = this.getDataFromNode( node, 'vertex' );\n\n\t\tlet bufferAttribute = nodeData.bufferAttribute;\n\n\t\tif ( bufferAttribute === undefined ) {\n\n\t\t\tconst index = this.uniforms.index ++;\n\n\t\t\tbufferAttribute = new NodeAttribute( 'nodeAttribute' + index, type, node );\n\n\t\t\tthis.bufferAttributes.push( bufferAttribute );\n\n\t\t\tnodeData.bufferAttribute = bufferAttribute;\n\n\t\t}\n\n\t\treturn bufferAttribute;\n\n\t}\n\n\t/**\n\t * Returns an instance of {@link StructType} for the given struct name and shader stage\n\t * or null if not found.\n\t *\n\t * @param {string} name - The name of the struct.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.\n\t * @return {?StructType} The struct type or null if not found.\n\t */\n\tgetStructTypeNode( name, shaderStage = this.shaderStage ) {\n\n\t\treturn this.types[ shaderStage ][ name ] || null;\n\n\t}\n\n\t/**\n\t * Returns an instance of {@link StructType} for the given output struct node.\n\t *\n\t * @param {OutputStructNode} node - The output struct node.\n\t * @param {Array<Object>} membersLayout - The output struct types.\n\t * @param {?string} [name=null] - The name of the struct.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.\n\t * @return {StructType} The struct type attribute.\n\t */\n\tgetStructTypeFromNode( node, membersLayout, name = null, shaderStage = this.shaderStage ) {\n\n\t\tconst nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );\n\n\t\tlet structType = nodeData.structType;\n\n\t\tif ( structType === undefined ) {\n\n\t\t\tconst index = this.structs.index ++;\n\n\t\t\tif ( name === null ) name = 'StructType' + index;\n\n\t\t\tstructType = new StructType( name, membersLayout );\n\n\t\t\tthis.structs[ shaderStage ].push( structType );\n\t\t\tthis.types[ shaderStage ][ name ] = node;\n\n\t\t\tnodeData.structType = structType;\n\n\t\t}\n\n\t\treturn structType;\n\n\t}\n\n\t/**\n\t * Returns an instance of {@link StructType} for the given output struct node.\n\t *\n\t * @param {OutputStructNode} node - The output struct node.\n\t * @param {Array<Object>} membersLayout - The output struct types.\n\t * @return {StructType} The struct type attribute.\n\t */\n\tgetOutputStructTypeFromNode( node, membersLayout ) {\n\n\t\tconst structType = this.getStructTypeFromNode( node, membersLayout, 'OutputType', 'fragment' );\n\t\tstructType.output = true;\n\n\t\treturn structType;\n\n\t}\n\n\t/**\n\t * Returns an instance of {@link NodeUniform} for the given uniform node.\n\t *\n\t * @param {UniformNode} node - The uniform node.\n\t * @param {string} type - The uniform type.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.\n\t * @param {?string} name - The name of the uniform.\n\t * @return {NodeUniform} The node uniform.\n\t */\n\tgetUniformFromNode( node, type, shaderStage = this.shaderStage, name = null ) {\n\n\t\tconst nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );\n\n\t\tlet nodeUniform = nodeData.uniform;\n\n\t\tif ( nodeUniform === undefined ) {\n\n\t\t\tconst index = this.uniforms.index ++;\n\n\t\t\tnodeUniform = new NodeUniform( name || ( 'nodeUniform' + index ), type, node );\n\n\t\t\tthis.uniforms[ shaderStage ].push( nodeUniform );\n\n\t\t\tthis.registerDeclaration( nodeUniform );\n\n\t\t\tnodeData.uniform = nodeUniform;\n\n\t\t}\n\n\t\treturn nodeUniform;\n\n\t}\n\n\t/**\n\t * Returns an instance of {@link NodeVar} for the given variable node.\n\t *\n\t * @param {VarNode} node - The variable node.\n\t * @param {?string} name - The variable's name.\n\t * @param {string} [type=node.getNodeType( this )] - The variable's type.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.\n\t * @param {boolean} [readOnly=false] - Whether the variable is read-only or not.\n\t *\n\t * @return {NodeVar} The node variable.\n\t */\n\tgetVarFromNode( node, name = null, type = node.getNodeType( this ), shaderStage = this.shaderStage, readOnly = false ) {\n\n\t\tconst nodeData = this.getDataFromNode( node, shaderStage );\n\t\tconst subBuildVariable = this.getSubBuildProperty( 'variable', nodeData.subBuilds );\n\n\t\tlet nodeVar = nodeData[ subBuildVariable ];\n\n\t\tif ( nodeVar === undefined ) {\n\n\t\t\tconst idNS = readOnly ? '_const' : '_var';\n\n\t\t\tconst vars = this.vars[ shaderStage ] || ( this.vars[ shaderStage ] = [] );\n\t\t\tconst id = this.vars[ idNS ] || ( this.vars[ idNS ] = 0 );\n\n\t\t\tif ( name === null ) {\n\n\t\t\t\tname = ( readOnly ? 'nodeConst' : 'nodeVar' ) + id;\n\n\t\t\t\tthis.vars[ idNS ] ++;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( subBuildVariable !== 'variable' ) {\n\n\t\t\t\tname = this.getSubBuildProperty( name, nodeData.subBuilds );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst count = node.getArrayCount( this );\n\n\t\t\tnodeVar = new NodeVar( name, type, readOnly, count );\n\n\t\t\tif ( ! readOnly ) {\n\n\t\t\t\tvars.push( nodeVar );\n\n\t\t\t}\n\n\t\t\tthis.registerDeclaration( nodeVar );\n\n\t\t\tnodeData[ subBuildVariable ] = nodeVar;\n\n\t\t}\n\n\t\treturn nodeVar;\n\n\t}\n\n\t/**\n\t * Returns whether a Node or its flow is deterministic, useful for use in `const`.\n\t *\n\t * @param {Node} node - The varying node.\n\t * @return {boolean} Returns true if deterministic.\n\t */\n\tisDeterministic( node ) {\n\n\t\tif ( node.isMathNode ) {\n\n\t\t\treturn this.isDeterministic( node.aNode ) &&\n\t\t\t\t( node.bNode ? this.isDeterministic( node.bNode ) : true ) &&\n\t\t\t\t( node.cNode ? this.isDeterministic( node.cNode ) : true );\n\n\t\t} else if ( node.isOperatorNode ) {\n\n\t\t\treturn this.isDeterministic( node.aNode ) &&\n\t\t\t\t( node.bNode ? this.isDeterministic( node.bNode ) : true );\n\n\t\t} else if ( node.isArrayNode ) {\n\n\t\t\tif ( node.values !== null ) {\n\n\t\t\t\tfor ( const n of node.values ) {\n\n\t\t\t\t\tif ( ! this.isDeterministic( n ) ) {\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else if ( node.isConstNode ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns an instance of {@link NodeVarying} for the given varying node.\n\t *\n\t * @param {(VaryingNode|PropertyNode)} node - The varying node.\n\t * @param {?string} name - The varying's name.\n\t * @param {string} [type=node.getNodeType( this )] - The varying's type.\n\t * @param {?string} interpolationType - The interpolation type of the varying.\n\t * @param {?string} interpolationSampling - The interpolation sampling type of the varying.\n\t * @return {NodeVar} The node varying.\n\t */\n\tgetVaryingFromNode( node, name = null, type = node.getNodeType( this ), interpolationType = null, interpolationSampling = null ) {\n\n\t\tconst nodeData = this.getDataFromNode( node, 'any' );\n\t\tconst subBuildVarying = this.getSubBuildProperty( 'varying', nodeData.subBuilds );\n\n\t\tlet nodeVarying = nodeData[ subBuildVarying ];\n\n\t\tif ( nodeVarying === undefined ) {\n\n\t\t\tconst varyings = this.varyings;\n\t\t\tconst index = varyings.length;\n\n\t\t\tif ( name === null ) name = 'nodeVarying' + index;\n\n\t\t\t//\n\n\t\t\tif ( subBuildVarying !== 'varying' ) {\n\n\t\t\t\tname = this.getSubBuildProperty( name, nodeData.subBuilds );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tnodeVarying = new NodeVarying( name, type, interpolationType, interpolationSampling );\n\n\t\t\tvaryings.push( nodeVarying );\n\n\t\t\tthis.registerDeclaration( nodeVarying );\n\n\t\t\tnodeData[ subBuildVarying ] = nodeVarying;\n\n\t\t}\n\n\t\treturn nodeVarying;\n\n\t}\n\n\t/**\n\t * Registers a node declaration in the current shader stage.\n\t *\n\t * @param {Object} node - The node to be registered.\n\t */\n\tregisterDeclaration( node ) {\n\n\t\tconst shaderStage = this.shaderStage;\n\t\tconst declarations = this.declarations[ shaderStage ] || ( this.declarations[ shaderStage ] = {} );\n\n\t\tconst property = this.getPropertyName( node );\n\n\t\tlet index = 1;\n\t\tlet name = property;\n\n\t\t// Automatically renames the property if the name is already in use.\n\n\t\twhile ( declarations[ name ] !== undefined ) {\n\n\t\t\tname = property + '_' + index ++;\n\n\t\t}\n\n\t\tif ( index > 1 ) {\n\n\t\t\tnode.name = name;\n\n\t\t\twarn( `TSL: Declaration name '${ property }' of '${ node.type }' already in use. Renamed to '${ name }'.` );\n\n\t\t}\n\n\t\tdeclarations[ name ] = node;\n\n\t}\n\n\t/**\n\t * Returns an instance of {@link NodeCode} for the given code node.\n\t *\n\t * @param {CodeNode} node - The code node.\n\t * @param {string} type - The node type.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.\n\t * @return {NodeCode} The node code.\n\t */\n\tgetCodeFromNode( node, type, shaderStage = this.shaderStage ) {\n\n\t\tconst nodeData = this.getDataFromNode( node );\n\n\t\tlet nodeCode = nodeData.code;\n\n\t\tif ( nodeCode === undefined ) {\n\n\t\t\tconst codes = this.codes[ shaderStage ] || ( this.codes[ shaderStage ] = [] );\n\t\t\tconst index = codes.length;\n\n\t\t\tnodeCode = new NodeCode( 'nodeCode' + index, type );\n\n\t\t\tcodes.push( nodeCode );\n\n\t\t\tnodeData.code = nodeCode;\n\n\t\t}\n\n\t\treturn nodeCode;\n\n\t}\n\n\t/**\n\t * Adds a code flow based on the code-block hierarchy.\n\n\t * This is used so that code-blocks like If,Else create their variables locally if the Node\n\t * is only used inside one of these conditionals in the current shader stage.\n\t *\n\t * @param {Node} node - The node to add.\n\t * @param {Node} nodeBlock - Node-based code-block. Usually 'ConditionalNode'.\n\t */\n\taddFlowCodeHierarchy( node, nodeBlock ) {\n\n\t\tconst { flowCodes, flowCodeBlock } = this.getDataFromNode( node );\n\n\t\tlet needsFlowCode = true;\n\t\tlet nodeBlockHierarchy = nodeBlock;\n\n\t\twhile ( nodeBlockHierarchy ) {\n\n\t\t\tif ( flowCodeBlock.get( nodeBlockHierarchy ) === true ) {\n\n\t\t\t\tneedsFlowCode = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tnodeBlockHierarchy = this.getDataFromNode( nodeBlockHierarchy ).parentNodeBlock;\n\n\t\t}\n\n\t\tif ( needsFlowCode ) {\n\n\t\t\tfor ( const flowCode of flowCodes ) {\n\n\t\t\t\tthis.addLineFlowCode( flowCode );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Add a inline-code to the current flow code-block.\n\t *\n\t * @param {Node} node - The node to add.\n\t * @param {string} code - The code to add.\n\t * @param {Node} nodeBlock - Current ConditionalNode\n\t */\n\taddLineFlowCodeBlock( node, code, nodeBlock ) {\n\n\t\tconst nodeData = this.getDataFromNode( node );\n\t\tconst flowCodes = nodeData.flowCodes || ( nodeData.flowCodes = [] );\n\t\tconst codeBlock = nodeData.flowCodeBlock || ( nodeData.flowCodeBlock = new WeakMap() );\n\n\t\tflowCodes.push( code );\n\t\tcodeBlock.set( nodeBlock, true );\n\n\t}\n\n\t/**\n\t * Add a inline-code to the current flow.\n\t *\n\t * @param {string} code - The code to add.\n\t * @param {?Node} [node= null] - Optional Node, can help the system understand if the Node is part of a code-block.\n\t * @return {NodeBuilder} A reference to this node builder.\n\t */\n\taddLineFlowCode( code, node = null ) {\n\n\t\tif ( code === '' ) return this;\n\n\t\tif ( node !== null && this.context.nodeBlock ) {\n\n\t\t\tthis.addLineFlowCodeBlock( node, code, this.context.nodeBlock );\n\n\t\t}\n\n\t\tcode = this.tab + code;\n\n\t\tif ( ! /;\\s*$/.test( code ) ) {\n\n\t\t\tcode = code + ';\\n';\n\n\t\t}\n\n\t\tthis.flow.code += code;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds a code to the current code flow.\n\t *\n\t * @param {string} code - Shader code.\n\t * @return {NodeBuilder} A reference to this node builder.\n\t */\n\taddFlowCode( code ) {\n\n\t\tthis.flow.code += code;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Add tab in the code that will be generated so that other snippets respect the current tabulation.\n\t * Typically used in codes with If,Else.\n\t *\n\t * @return {NodeBuilder} A reference to this node builder.\n\t */\n\taddFlowTab() {\n\n\t\tthis.tab += '\\t';\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes a tab.\n\t *\n\t * @return {NodeBuilder} A reference to this node builder.\n\t */\n\tremoveFlowTab() {\n\n\t\tthis.tab = this.tab.slice( 0, -1 );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Gets the current flow data based on a Node.\n\t *\n\t * @param {Node} node - Node that the flow was started.\n\t * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.\n\t * @return {Object} The flow data.\n\t */\n\tgetFlowData( node/*, shaderStage*/ ) {\n\n\t\treturn this.flowsData.get( node );\n\n\t}\n\n\t/**\n\t * Executes the node flow based on a root node to generate the final shader code.\n\t *\n\t * @param {Node} node - The node to execute.\n\t * @return {Object} The code flow.\n\t */\n\tflowNode( node ) {\n\n\t\tconst output = node.getNodeType( this );\n\n\t\tconst flowData = this.flowChildNode( node, output );\n\n\t\tthis.flowsData.set( node, flowData );\n\n\t\treturn flowData;\n\n\t}\n\n\t/**\n\t * Includes a node in the current function node.\n\t *\n\t * @param {Node} node - The node to include.\n\t * @returns {void}\n\t */\n\taddInclude( node ) {\n\n\t\tif ( this.currentFunctionNode !== null ) {\n\n\t\t\tthis.currentFunctionNode.includes.push( node );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the native shader operator name for a given generic name.\n\t * It is a similar type of method like {@link NodeBuilder#getMethod}.\n\t *\n\t * @param {ShaderNodeInternal} shaderNode - The shader node to build the function node with.\n\t * @return {FunctionNode} The build function node.\n\t */\n\tbuildFunctionNode( shaderNode ) {\n\n\t\tconst fn = new FunctionNode();\n\n\t\tconst previous = this.currentFunctionNode;\n\n\t\tthis.currentFunctionNode = fn;\n\n\t\tfn.code = this.buildFunctionCode( shaderNode );\n\n\t\tthis.currentFunctionNode = previous;\n\n\t\treturn fn;\n\n\t}\n\n\t/**\n\t * Generates a code flow based on a TSL function: Fn().\n\t *\n\t * @param {ShaderNodeInternal} shaderNode - A function code will be generated based on the input.\n\t * @return {Object}\n\t */\n\tflowShaderNode( shaderNode ) {\n\n\t\tconst layout = shaderNode.layout;\n\n\t\tconst inputs = {\n\t\t\t[ Symbol.iterator ]() {\n\n\t\t\t\tlet index = 0;\n\t\t\t\tconst values = Object.values( this );\n\t\t\t\treturn {\n\t\t\t\t\tnext: () => ( {\n\t\t\t\t\t\tvalue: values[ index ],\n\t\t\t\t\t\tdone: index ++ >= values.length\n\t\t\t\t\t} )\n\t\t\t\t};\n\n\t\t\t}\n\t\t};\n\n\t\tfor ( const input of layout.inputs ) {\n\n\t\t\tinputs[ input.name ] = new ParameterNode( input.type, input.name );\n\n\t\t}\n\n\t\t//\n\n\t\tshaderNode.layout = null;\n\n\t\tconst callNode = shaderNode.call( inputs );\n\t\tconst flowData = this.flowStagesNode( callNode, layout.type );\n\n\t\tshaderNode.layout = layout;\n\n\t\treturn flowData;\n\n\t}\n\n\t/**\n\t * Executes the node in a specific build stage.\n\t *\n\t * This function can be used to arbitrarily execute the specified build stage\n\t * outside of the standard build process. For instance, if a node's type depends\n\t * on properties created by the 'setup' stage, then flowBuildStage(node, 'setup')\n\t * can be used to execute the setup build stage and access its generated nodes\n\t * before the standard build process begins.\n\t *\n\t * @param {Node} node - The node to execute.\n\t * @param {string} buildStage - The build stage to execute the node in.\n\t * @param {?(Node|string)} [output=null] - Expected output type. For example 'vec3'.\n\t * @return {?(Node|string)} The result of the node build.\n\t */\n\tflowBuildStage( node, buildStage, output = null ) {\n\n\t\tconst previousBuildStage = this.getBuildStage();\n\n\t\tthis.setBuildStage( buildStage );\n\n\t\tconst result = node.build( this, output );\n\n\t\tthis.setBuildStage( previousBuildStage );\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Runs the node flow through all the steps of creation, 'setup', 'analyze', 'generate'.\n\t *\n\t * @param {Node} node - The node to execute.\n\t * @param {?string} output - Expected output type. For example 'vec3'.\n\t * @return {Object}\n\t */\n\tflowStagesNode( node, output = null ) {\n\n\t\tconst previousFlow = this.flow;\n\t\tconst previousVars = this.vars;\n\t\tconst previousDeclarations = this.declarations;\n\t\tconst previousCache = this.cache;\n\t\tconst previousBuildStage = this.buildStage;\n\t\tconst previousStack = this.stack;\n\n\t\tconst flow = {\n\t\t\tcode: ''\n\t\t};\n\n\t\tthis.flow = flow;\n\t\tthis.vars = {};\n\t\tthis.declarations = {};\n\t\tthis.cache = new NodeCache();\n\t\tthis.stack = stack();\n\n\t\tfor ( const buildStage of defaultBuildStages ) {\n\n\t\t\tthis.setBuildStage( buildStage );\n\n\t\t\tflow.result = node.build( this, output );\n\n\t\t}\n\n\t\tflow.vars = this.getVars( this.shaderStage );\n\n\t\tthis.flow = previousFlow;\n\t\tthis.vars = previousVars;\n\t\tthis.declarations = previousDeclarations;\n\t\tthis.cache = previousCache;\n\t\tthis.stack = previousStack;\n\n\t\tthis.setBuildStage( previousBuildStage );\n\n\t\treturn flow;\n\n\t}\n\n\t/**\n\t * Returns the native shader operator name for a given generic name.\n\t * It is a similar type of method like {@link NodeBuilder#getMethod}.\n\t *\n\t * @abstract\n\t * @param {string} op - The operator name to resolve.\n\t * @return {?string} The resolved operator name.\n\t */\n\tgetFunctionOperator( /* op */ ) {\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Builds the given shader node.\n\t *\n\t * @abstract\n\t * @param {ShaderNodeInternal} shaderNode - The shader node.\n\t * @return {string} The function code.\n\t */\n\tbuildFunctionCode( /* shaderNode */ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Generates a code flow based on a child Node.\n\t *\n\t * @param {Node} node - The node to execute.\n\t * @param {?string} output - Expected output type. For example 'vec3'.\n\t * @return {Object} The code flow.\n\t */\n\tflowChildNode( node, output = null ) {\n\n\t\tconst previousFlow = this.flow;\n\n\t\tconst flow = {\n\t\t\tcode: ''\n\t\t};\n\n\t\tthis.flow = flow;\n\n\t\tflow.result = node.build( this, output );\n\n\t\tthis.flow = previousFlow;\n\n\t\treturn flow;\n\n\t}\n\n\t/**\n\t * Executes a flow of code in a different stage.\n\t *\n\t * Some nodes like `varying()` have the ability to compute code in vertex-stage and\n\t * return the value in fragment-stage even if it is being executed in an input fragment.\n\t *\n\t * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.\n\t * @param {Node} node - The node to execute.\n\t * @param {?string} output - Expected output type. For example 'vec3'.\n\t * @param {?string} propertyName - The property name to assign the result.\n\t * @return {?(Object|Node)} The code flow or node.build() result.\n\t */\n\tflowNodeFromShaderStage( shaderStage, node, output = null, propertyName = null ) {\n\n\t\tconst previousTab = this.tab;\n\t\tconst previousCache = this.cache;\n\t\tconst previousShaderStage = this.shaderStage;\n\t\tconst previousContext = this.context;\n\n\t\tthis.setShaderStage( shaderStage );\n\n\t\tconst context = { ...this.context };\n\t\tdelete context.nodeBlock;\n\n\t\tthis.cache = this.globalCache;\n\t\tthis.tab = '\\t';\n\t\tthis.context = context;\n\n\t\tlet result = null;\n\n\t\tif ( this.buildStage === 'generate' ) {\n\n\t\t\tconst flowData = this.flowChildNode( node, output );\n\n\t\t\tif ( propertyName !== null ) {\n\n\t\t\t\tflowData.code += `${ this.tab + propertyName } = ${ flowData.result };\\n`;\n\n\t\t\t}\n\n\t\t\tthis.flowCode[ shaderStage ] = this.flowCode[ shaderStage ] + flowData.code;\n\n\t\t\tresult = flowData;\n\n\t\t} else {\n\n\t\t\tresult = node.build( this );\n\n\t\t}\n\n\t\tthis.setShaderStage( previousShaderStage );\n\n\t\tthis.cache = previousCache;\n\t\tthis.tab = previousTab;\n\t\tthis.context = previousContext;\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Returns an array holding all node attributes of this node builder.\n\t *\n\t * @return {Array<NodeAttribute>} The node attributes of this builder.\n\t */\n\tgetAttributesArray() {\n\n\t\treturn this.attributes.concat( this.bufferAttributes );\n\n\t}\n\n\t/**\n\t * Returns the attribute definitions as a shader string for the given shader stage.\n\t *\n\t * @abstract\n\t * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.\n\t * @return {string} The attribute code section.\n\t */\n\tgetAttributes( /*shaderStage*/ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Returns the varying definitions as a shader string for the given shader stage.\n\t *\n\t * @abstract\n\t * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.\n\t * @return {string} The varying code section.\n\t */\n\tgetVaryings( /*shaderStage*/ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Returns a single variable definition as a shader string for the given variable type and name.\n\t *\n\t * @param {string} type - The variable's type.\n\t * @param {string} name - The variable's name.\n\t * @param {?number} [count=null] - The array length.\n\t * @return {string} The shader string.\n\t */\n\tgetVar( type, name, count = null ) {\n\n\t\treturn `${ count !== null ? this.generateArrayDeclaration( type, count ) : this.getType( type ) } ${ name }`;\n\n\t}\n\n\t/**\n\t * Returns the variable definitions as a shader string for the given shader stage.\n\t *\n\t * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.\n\t * @param {boolean} [global=false] - Whether the variables are global.\n\t * @return {string} The variable code section.\n\t */\n\tgetVars( shaderStage, global = false ) {\n\n\t\tconst snippets = [];\n\n\t\tconst vars = this.vars[ shaderStage ];\n\n\t\tif ( vars !== undefined ) {\n\n\t\t\tfor ( const variable of vars ) {\n\n\t\t\t\tsnippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn snippets.join( global ? '\\n' : '\\n\\t' );\n\n\t}\n\n\t/**\n\t * Returns the uniform definitions as a shader string for the given shader stage.\n\t *\n\t * @abstract\n\t * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.\n\t * @return {string} The uniform code section.\n\t */\n\tgetUniforms( /*shaderStage*/ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Returns the native code definitions as a shader string for the given shader stage.\n\t *\n\t * @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.\n\t * @return {string} The native code section.\n\t */\n\tgetCodes( shaderStage ) {\n\n\t\tconst codes = this.codes[ shaderStage ];\n\n\t\tlet code = '';\n\n\t\tif ( codes !== undefined ) {\n\n\t\t\tfor ( const nodeCode of codes ) {\n\n\t\t\t\tcode += nodeCode.code + '\\n';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn code;\n\n\t}\n\n\t/**\n\t * Returns the hash of this node builder.\n\t *\n\t * @return {string} The hash.\n\t */\n\tgetHash() {\n\n\t\treturn this.vertexShader + this.fragmentShader + this.computeShader;\n\n\t}\n\n\t/**\n\t * Sets the current shader stage.\n\t *\n\t * @param {?('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage to set.\n\t */\n\tsetShaderStage( shaderStage ) {\n\n\t\tthis.shaderStage = shaderStage;\n\n\t}\n\n\t/**\n\t * Returns the current shader stage.\n\t *\n\t * @return {?('vertex'|'fragment'|'compute'|'any')} The current shader stage.\n\t */\n\tgetShaderStage() {\n\n\t\treturn this.shaderStage;\n\n\t}\n\n\t/**\n\t * Sets the current build stage.\n\t *\n\t * @param {?('setup'|'analyze'|'generate')} buildStage - The build stage to set.\n\t */\n\tsetBuildStage( buildStage ) {\n\n\t\tthis.buildStage = buildStage;\n\n\t}\n\n\t/**\n\t * Returns the current build stage.\n\t *\n\t * @return {?('setup'|'analyze'|'generate')} The current build stage.\n\t */\n\tgetBuildStage() {\n\n\t\treturn this.buildStage;\n\n\t}\n\n\t/**\n\t * Controls the code build of the shader stages.\n\t *\n\t * @abstract\n\t */\n\tbuildCode() {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n\t/**\n\t * Returns the current sub-build layer.\n\t *\n\t * @return {SubBuildNode} The current sub-build layers.\n\t */\n\tget subBuild() {\n\n\t\treturn this.subBuildLayers[ this.subBuildLayers.length - 1 ] || null;\n\n\t}\n\n\t/**\n\t * Adds a sub-build layer to the node builder.\n\t *\n\t * @param {SubBuildNode} subBuild - The sub-build layer to add.\n\t */\n\taddSubBuild( subBuild ) {\n\n\t\tthis.subBuildLayers.push( subBuild );\n\n\t}\n\n\t/**\n\t * Removes the last sub-build layer from the node builder.\n\t *\n\t * @return {SubBuildNode} The removed sub-build layer.\n\t */\n\tremoveSubBuild() {\n\n\t\treturn this.subBuildLayers.pop();\n\n\t}\n\n\t/**\n\t * Returns the closest sub-build layer for the given data.\n\t *\n\t * @param {Node|Set<string>|Array<string>} data - The data to get the closest sub-build layer from.\n\t * @return {?string} The closest sub-build name or null if none found.\n\t */\n\tgetClosestSubBuild( data ) {\n\n\t\tlet subBuilds;\n\n\t\tif ( data && data.isNode ) {\n\n\t\t\tif ( data.isShaderCallNodeInternal ) {\n\n\t\t\t\tsubBuilds = data.shaderNode.subBuilds;\n\n\t\t\t} else if ( data.isStackNode ) {\n\n\t\t\t\tsubBuilds = [ data.subBuild ];\n\n\t\t\t} else {\n\n\t\t\t\tsubBuilds = this.getDataFromNode( data, 'any' ).subBuilds;\n\n\t\t\t}\n\n\t\t} else if ( data instanceof Set ) {\n\n\t\t\tsubBuilds = [ ...data ];\n\n\t\t} else {\n\n\t\t\tsubBuilds = data;\n\n\t\t}\n\n\t\tif ( ! subBuilds ) return null;\n\n\t\tconst subBuildLayers = this.subBuildLayers;\n\n\t\tfor ( let i = subBuilds.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst subBuild = subBuilds[ i ];\n\n\t\t\tif ( subBuildLayers.includes( subBuild ) ) {\n\n\t\t\t\treturn subBuild;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\n\t/**\n\t * Returns the output node of a sub-build layer.\n\t *\n\t * @param {Node} node - The node to get the output from.\n\t * @return {string} The output node name.\n\t */\n\tgetSubBuildOutput( node ) {\n\n\t\treturn this.getSubBuildProperty( 'outputNode', node );\n\n\t}\n\n\t/**\n\t * Returns the sub-build property name for the given property and node.\n\t *\n\t * @param {string} [property=''] - The property name.\n\t * @param {?Node} [node=null] - The node to get the sub-build from.\n\t * @return {string} The sub-build property name.\n\t */\n\tgetSubBuildProperty( property = '', node = null ) {\n\n\t\tlet subBuild;\n\n\t\tif ( node !== null ) {\n\n\t\t\tsubBuild = this.getClosestSubBuild( node );\n\n\t\t} else {\n\n\t\t\tsubBuild = this.subBuildFn;\n\n\t\t}\n\n\t\tlet result;\n\n\t\tif ( subBuild ) {\n\n\t\t\tresult = property ? ( subBuild + '_' + property ) : subBuild;\n\n\t\t} else {\n\n\t\t\tresult = property;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Prebuild the node builder.\n\t */\n\tprebuild() {\n\n\t\tconst { object, renderer, material } = this;\n\n\t\t// < renderer.contextNode >\n\n\t\tif ( renderer.contextNode.isContextNode === true ) {\n\n\t\t\tthis.context = { ...this.context, ...renderer.contextNode.getFlowContextData() };\n\n\t\t} else {\n\n\t\t\terror( 'NodeBuilder: \"renderer.contextNode\" must be an instance of `context()`.' );\n\n\t\t}\n\n\t\t// < material.contextNode >\n\n\t\tif ( material && material.contextNode ) {\n\n\t\t\tif ( material.contextNode.isContextNode === true ) {\n\n\t\t\t\tthis.context = { ...this.context, ...material.contextNode.getFlowContextData() };\n\n\t\t\t} else {\n\n\t\t\t\terror( 'NodeBuilder: \"material.contextNode\" must be an instance of `context()`.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// < nodeMaterial >\n\n\t\tif ( material !== null ) {\n\n\t\t\tlet nodeMaterial = renderer.library.fromMaterial( material );\n\n\t\t\tif ( nodeMaterial === null ) {\n\n\t\t\t\terror( `NodeBuilder: Material \"${ material.type }\" is not compatible.` );\n\n\t\t\t\tnodeMaterial = new NodeMaterial();\n\n\t\t\t}\n\n\t\t\tnodeMaterial.build( this );\n\n\t\t} else {\n\n\t\t\tthis.addFlow( 'compute', object );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Central build method which controls the build for the given object.\n\t *\n\t * @return {NodeBuilder} A reference to this node builder.\n\t */\n\tbuild() {\n\n\t\tthis.prebuild();\n\n\t\t// setup() -> stage 1: create possible new nodes and/or return an output reference node\n\t\t// analyze()   -> stage 2: analyze nodes to possible optimization and validation\n\t\t// generate()  -> stage 3: generate shader\n\n\t\tfor ( const buildStage of defaultBuildStages ) {\n\n\t\t\tthis.setBuildStage( buildStage );\n\n\t\t\tif ( this.context.position && this.context.position.isNode ) {\n\n\t\t\t\tthis.flowNodeFromShaderStage( 'vertex', this.context.position );\n\n\t\t\t}\n\n\t\t\tfor ( const shaderStage of shaderStages ) {\n\n\t\t\t\tthis.setShaderStage( shaderStage );\n\n\t\t\t\tconst flowNodes = this.flowNodes[ shaderStage ];\n\n\t\t\t\tfor ( const node of flowNodes ) {\n\n\t\t\t\t\tif ( buildStage === 'generate' ) {\n\n\t\t\t\t\t\tthis.flowNode( node );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnode.build( this );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setBuildStage( null );\n\t\tthis.setShaderStage( null );\n\n\t\t// stage 4: build code for a specific output\n\n\t\tthis.buildCode();\n\t\tthis.buildUpdateNodes();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Async version of build() that yields to main thread between shader stages.\n\t * Use this in compileAsync() to prevent blocking the main thread.\n\t *\n\t * @return {Promise<NodeBuilder>} A promise that resolves to this node builder.\n\t */\n\tasync buildAsync() {\n\n\t\tthis.prebuild();\n\n\t\t// setup() -> stage 1: create possible new nodes and/or return an output reference node\n\t\t// analyze()   -> stage 2: analyze nodes to possible optimization and validation\n\t\t// generate()  -> stage 3: generate shader\n\n\t\tfor ( const buildStage of defaultBuildStages ) {\n\n\t\t\tthis.setBuildStage( buildStage );\n\n\t\t\tif ( this.context.position && this.context.position.isNode ) {\n\n\t\t\t\tthis.flowNodeFromShaderStage( 'vertex', this.context.position );\n\n\t\t\t}\n\n\t\t\tfor ( const shaderStage of shaderStages ) {\n\n\t\t\t\tthis.setShaderStage( shaderStage );\n\n\t\t\t\tconst flowNodes = this.flowNodes[ shaderStage ];\n\n\t\t\t\tfor ( const node of flowNodes ) {\n\n\t\t\t\t\tif ( buildStage === 'generate' ) {\n\n\t\t\t\t\t\tthis.flowNode( node );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnode.build( this );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Yield to main thread after each shader stage to prevent blocking\n\t\t\t\tawait yieldToMain();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setBuildStage( null );\n\t\tthis.setShaderStage( null );\n\n\t\t// stage 4: build code for a specific output\n\n\t\tthis.buildCode();\n\t\tthis.buildUpdateNodes();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns shared data object for the given node.\n\t *\n\t * @param {Node} node - The node to get shared data from.\n\t * @return {Object} The shared data.\n\t */\n\tgetSharedDataFromNode( node ) {\n\n\t\tlet data = sharedNodeData.get( node );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tdata = {};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Returns a uniform representation which is later used for UBO generation and rendering.\n\t *\n\t * @param {NodeUniform} uniformNode - The uniform node.\n\t * @param {string} type - The requested type.\n\t * @return {Uniform} The uniform.\n\t */\n\tgetNodeUniform( uniformNode, type ) {\n\n\t\tconst nodeData = this.getSharedDataFromNode( uniformNode );\n\n\t\tlet node = nodeData.cache;\n\n\t\tif ( node === undefined ) {\n\n\t\t\tif ( type === 'float' || type === 'int' || type === 'uint' ) node = new NumberNodeUniform( uniformNode );\n\t\t\telse if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) node = new Vector2NodeUniform( uniformNode );\n\t\t\telse if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) node = new Vector3NodeUniform( uniformNode );\n\t\t\telse if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) node = new Vector4NodeUniform( uniformNode );\n\t\t\telse if ( type === 'color' ) node = new ColorNodeUniform( uniformNode );\n\t\t\telse if ( type === 'mat2' ) node = new Matrix2NodeUniform( uniformNode );\n\t\t\telse if ( type === 'mat3' ) node = new Matrix3NodeUniform( uniformNode );\n\t\t\telse if ( type === 'mat4' ) node = new Matrix4NodeUniform( uniformNode );\n\t\t\telse {\n\n\t\t\t\tthrow new Error( `Uniform \"${ type }\" not implemented.` );\n\n\t\t\t}\n\n\t\t\tnodeData.cache = node;\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n\t/**\n\t * Formats the given shader snippet from a given type into another one. E.g.\n\t * this method might be used to convert a simple float string `\"1.0\"` into a\n\t * `vec3` representation: `\"vec3<f32>( 1.0 )\"`.\n\t *\n\t * @param {string} snippet - The shader snippet.\n\t * @param {string} fromType - The source type.\n\t * @param {string} toType - The target type.\n\t * @return {string} The updated shader string.\n\t */\n\tformat( snippet, fromType, toType ) {\n\n\t\tfromType = this.getVectorType( fromType );\n\t\ttoType = this.getVectorType( toType );\n\n\t\tif ( fromType === toType || toType === null || this.isReference( toType ) ) {\n\n\t\t\treturn snippet;\n\n\t\t}\n\n\t\tconst fromTypeLength = this.getTypeLength( fromType );\n\t\tconst toTypeLength = this.getTypeLength( toType );\n\n\t\tif ( fromTypeLength === 16 && toTypeLength === 9 ) {\n\n\t\t\treturn `${ this.getType( toType ) }( ${ snippet }[ 0 ].xyz, ${ snippet }[ 1 ].xyz, ${ snippet }[ 2 ].xyz )`;\n\n\t\t}\n\n\t\tif ( fromTypeLength === 9 && toTypeLength === 4 ) {\n\n\t\t\treturn `${ this.getType( toType ) }( ${ snippet }[ 0 ].xy, ${ snippet }[ 1 ].xy )`;\n\n\t\t}\n\n\n\t\tif ( fromTypeLength > 4 ) { // fromType is matrix-like\n\n\t\t\t// @TODO: ignore for now\n\n\t\t\treturn snippet;\n\n\t\t}\n\n\t\tif ( toTypeLength > 4 || toTypeLength === 0 ) { // toType is matrix-like or unknown\n\n\t\t\t// @TODO: ignore for now\n\n\t\t\treturn snippet;\n\n\t\t}\n\n\t\tif ( fromTypeLength === toTypeLength ) {\n\n\t\t\treturn `${ this.getType( toType ) }( ${ snippet } )`;\n\n\t\t}\n\n\t\tif ( fromTypeLength > toTypeLength ) {\n\n\t\t\tsnippet = toType === 'bool' ? `all( ${ snippet } )` : `${ snippet }.${ 'xyz'.slice( 0, toTypeLength ) }`;\n\n\t\t\treturn this.format( snippet, this.getTypeFromLength( toTypeLength, this.getComponentType( fromType ) ), toType );\n\n\t\t}\n\n\t\tif ( toTypeLength === 4 && fromTypeLength > 1 ) { // toType is vec4-like\n\n\t\t\treturn `${ this.getType( toType ) }( ${ this.format( snippet, fromType, 'vec3' ) }, 1.0 )`;\n\n\t\t}\n\n\t\tif ( fromTypeLength === 2 ) { // fromType is vec2-like and toType is vec3-like\n\n\t\t\treturn `${ this.getType( toType ) }( ${ this.format( snippet, fromType, 'vec2' ) }, 0.0 )`;\n\n\t\t}\n\n\t\tif ( fromTypeLength === 1 && toTypeLength > 1 && fromType !== this.getComponentType( toType ) ) { // fromType is float-like\n\n\t\t\t// convert a number value to vector type, e.g:\n\t\t\t// vec3( 1u ) -> vec3( float( 1u ) )\n\n\t\t\tsnippet = `${ this.getType( this.getComponentType( toType ) ) }( ${ snippet } )`;\n\n\t\t}\n\n\t\treturn `${ this.getType( toType ) }( ${ snippet } )`; // fromType is float-like\n\n\t}\n\n\t/**\n\t * Returns a signature with the engine's current revision.\n\t *\n\t * @return {string} The signature.\n\t */\n\tgetSignature() {\n\n\t\treturn `// Three.js r${ REVISION } - Node System\\n`;\n\n\t}\n\n\t/**\n\t * Returns `true` if data from the previous frame are required. Relevant\n\t * when computing motion vectors with {@link VelocityNode}.\n\t *\n\t * @return {boolean} Whether data from the previous frame are required or not.\n\t */\n\tneedsPreviousData() {\n\n\t\tconst mrt = this.renderer.getMRT();\n\n\t\treturn ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( this.object ).useVelocity === true;\n\n\t}\n\n}\n\n/**\n * Management class for updating nodes. The module tracks metrics like\n * the elapsed time, delta time, the render and frame ID to correctly\n * call the node update methods {@link Node#updateBefore}, {@link Node#update}\n * and {@link Node#updateAfter} depending on the node's configuration.\n */\nclass NodeFrame {\n\n\t/**\n\t * Constructs a new node fame.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * The elapsed time in seconds.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.time = 0;\n\n\t\t/**\n\t\t * The delta time in seconds.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.deltaTime = 0;\n\n\t\t/**\n\t\t * The frame ID.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.frameId = 0;\n\n\t\t/**\n\t\t * The render ID.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.renderId = 0;\n\n\t\t/**\n\t\t * Used to control the {@link Node#update} call.\n\t\t *\n\t\t * @type {WeakMap<Node, Object>}\n\t\t */\n\t\tthis.updateMap = new WeakMap();\n\n\t\t/**\n\t\t * Used to control the {@link Node#updateBefore} call.\n\t\t *\n\t\t * @type {WeakMap<Node, Object>}\n\t\t */\n\t\tthis.updateBeforeMap = new WeakMap();\n\n\t\t/**\n\t\t * Used to control the {@link Node#updateAfter} call.\n\t\t *\n\t\t * @type {WeakMap<Node, Object>}\n\t\t */\n\t\tthis.updateAfterMap = new WeakMap();\n\n\t\t/**\n\t\t * A reference to the current renderer.\n\t\t *\n\t\t * @type {?Renderer}\n\t\t * @default null\n\t\t */\n\t\tthis.renderer = null;\n\n\t\t/**\n\t\t * A reference to the current material.\n\t\t *\n\t\t * @type {?Material}\n\t\t * @default null\n\t\t */\n\t\tthis.material = null;\n\n\t\t/**\n\t\t * A reference to the current camera.\n\t\t *\n\t\t * @type {?Camera}\n\t\t * @default null\n\t\t */\n\t\tthis.camera = null;\n\n\t\t/**\n\t\t * A reference to the current 3D object.\n\t\t *\n\t\t * @type {?Object3D}\n\t\t * @default null\n\t\t */\n\t\tthis.object = null;\n\n\t\t/**\n\t\t * A reference to the current scene.\n\t\t *\n\t\t * @type {?Scene}\n\t\t * @default null\n\t\t */\n\t\tthis.scene = null;\n\n\t}\n\n\t/**\n\t * Returns a dictionary for a given node and update map which\n\t * is used to correctly call node update methods per frame or render.\n\t *\n\t * @private\n\t * @param {WeakMap<Node, Object>} referenceMap - The reference weak map.\n\t * @param {Node} nodeRef - The reference to the current node.\n\t * @return {Object<string,WeakMap<Object, number>>} The dictionary.\n\t */\n\t_getMaps( referenceMap, nodeRef ) {\n\n\t\tlet maps = referenceMap.get( nodeRef );\n\n\t\tif ( maps === undefined ) {\n\n\t\t\tmaps = {\n\t\t\t\trenderId: 0,\n\t\t\t\tframeId: 0,\n\t\t\t};\n\n\t\t\treferenceMap.set( nodeRef, maps );\n\n\t\t}\n\n\t\treturn maps;\n\n\t}\n\n\t/**\n\t * This method executes the {@link Node#updateBefore} for the given node.\n\t * It makes sure {@link Node#updateBeforeType} is honored meaning the update\n\t * is only executed once per frame, render or object depending on the update\n\t * type.\n\t *\n\t * @param {Node} node - The node that should be updated.\n\t */\n\tupdateBeforeNode( node ) {\n\n\t\tconst updateType = node.getUpdateBeforeType();\n\t\tconst reference = node.updateReference( this );\n\n\t\tif ( updateType === NodeUpdateType.FRAME ) {\n\n\t\t\tconst nodeUpdateBeforeMap = this._getMaps( this.updateBeforeMap, reference );\n\n\t\t\tif ( nodeUpdateBeforeMap.frameId !== this.frameId ) {\n\n\t\t\t\tconst previousFrameId = nodeUpdateBeforeMap.frameId;\n\n\t\t\t\tnodeUpdateBeforeMap.frameId = this.frameId;\n\n\t\t\t\tif ( node.updateBefore( this ) === false ) {\n\n\t\t\t\t\tnodeUpdateBeforeMap.frameId = previousFrameId;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( updateType === NodeUpdateType.RENDER ) {\n\n\t\t\tconst nodeUpdateBeforeMap = this._getMaps( this.updateBeforeMap, reference );\n\n\t\t\tif ( nodeUpdateBeforeMap.renderId !== this.renderId ) {\n\n\t\t\t\tconst previousRenderId = nodeUpdateBeforeMap.renderId;\n\n\t\t\t\tnodeUpdateBeforeMap.renderId = this.renderId;\n\n\t\t\t\tif ( node.updateBefore( this ) === false ) {\n\n\t\t\t\t\tnodeUpdateBeforeMap.renderId = previousRenderId;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( updateType === NodeUpdateType.OBJECT ) {\n\n\t\t\tnode.updateBefore( this );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method executes the {@link Node#updateAfter} for the given node.\n\t * It makes sure {@link Node#updateAfterType} is honored meaning the update\n\t * is only executed once per frame, render or object depending on the update\n\t * type.\n\t *\n\t * @param {Node} node - The node that should be updated.\n\t */\n\tupdateAfterNode( node ) {\n\n\t\tconst updateType = node.getUpdateAfterType();\n\t\tconst reference = node.updateReference( this );\n\n\t\tif ( updateType === NodeUpdateType.FRAME ) {\n\n\t\t\tconst nodeUpdateAfterMap = this._getMaps( this.updateAfterMap, reference );\n\n\t\t\tif ( nodeUpdateAfterMap.frameId !== this.frameId ) {\n\n\t\t\t\tif ( node.updateAfter( this ) !== false ) {\n\n\t\t\t\t\tnodeUpdateAfterMap.frameId = this.frameId;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( updateType === NodeUpdateType.RENDER ) {\n\n\t\t\tconst nodeUpdateAfterMap = this._getMaps( this.updateAfterMap, reference );\n\n\t\t\tif ( nodeUpdateAfterMap.renderId !== this.renderId ) {\n\n\t\t\t\tif ( node.updateAfter( this ) !== false ) {\n\n\t\t\t\t\tnodeUpdateAfterMap.renderId = this.renderId;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( updateType === NodeUpdateType.OBJECT ) {\n\n\t\t\tnode.updateAfter( this );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method executes the {@link Node#update} for the given node.\n\t * It makes sure {@link Node#updateType} is honored meaning the update\n\t * is only executed once per frame, render or object depending on the update\n\t * type.\n\t *\n\t * @param {Node} node - The node that should be updated.\n\t */\n\tupdateNode( node ) {\n\n\t\tconst updateType = node.getUpdateType();\n\t\tconst reference = node.updateReference( this );\n\n\t\tif ( updateType === NodeUpdateType.FRAME ) {\n\n\t\t\tconst nodeUpdateMap = this._getMaps( this.updateMap, reference );\n\n\t\t\tif ( nodeUpdateMap.frameId !== this.frameId ) {\n\n\t\t\t\tif ( node.update( this ) !== false ) {\n\n\t\t\t\t\tnodeUpdateMap.frameId = this.frameId;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( updateType === NodeUpdateType.RENDER ) {\n\n\t\t\tconst nodeUpdateMap = this._getMaps( this.updateMap, reference );\n\n\t\t\tif ( nodeUpdateMap.renderId !== this.renderId ) {\n\n\t\t\t\tif ( node.update( this ) !== false ) {\n\n\t\t\t\t\tnodeUpdateMap.renderId = this.renderId;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( updateType === NodeUpdateType.OBJECT ) {\n\n\t\t\tnode.update( this );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the internal state of the node frame. This method is\n\t * called by the renderer in its internal animation loop.\n\t */\n\tupdate() {\n\n\t\tthis.frameId ++;\n\n\t\tif ( this.lastTime === undefined ) this.lastTime = performance.now();\n\n\t\tthis.deltaTime = ( performance.now() - this.lastTime ) / 1000;\n\n\t\tthis.lastTime = performance.now();\n\n\t\tthis.time += this.deltaTime;\n\n\t}\n\n}\n\n/**\n * Describes the input of a {@link NodeFunction}.\n */\nclass NodeFunctionInput {\n\n\t/**\n\t * Constructs a new node function input.\n\t *\n\t * @param {string} type - The input type.\n\t * @param {string} name - The input name.\n\t * @param {?number} [count=null] - If the input is an Array, count will be the length.\n\t * @param {('in'|'out'|'inout')} [qualifier=''] - The parameter qualifier (only relevant for GLSL).\n\t * @param {boolean} [isConst=false] - Whether the input uses a const qualifier or not (only relevant for GLSL).\n\t */\n\tconstructor( type, name, count = null, qualifier = '', isConst = false ) {\n\n\t\t/**\n\t\t *  The input type.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.type = type;\n\n\t\t/**\n\t\t * The input name.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * If the input is an Array, count will be the length.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.count = count;\n\n\t\t/**\n\t\t *The parameter qualifier (only relevant for GLSL).\n\t\t *\n\t\t * @type {('in'|'out'|'inout')}\n\t\t * @default ''\n\t\t */\n\t\tthis.qualifier = qualifier;\n\n\t\t/**\n\t\t * Whether the input uses a const qualifier or not (only relevant for GLSL).\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.isConst = isConst;\n\n\t}\n\n}\n\nNodeFunctionInput.isNodeFunctionInput = true;\n\n/**\n * Module for representing ambient lights as nodes.\n *\n * @augments AnalyticLightNode\n */\nclass AmbientLightNode extends AnalyticLightNode {\n\n\tstatic get type() {\n\n\t\treturn 'AmbientLightNode';\n\n\t}\n\n\t/**\n\t * Constructs a new ambient light node.\n\t *\n\t * @param {?AmbientLight} [light=null] - The ambient light source.\n\t */\n\tconstructor( light = null ) {\n\n\t\tsuper( light );\n\n\t}\n\n\tsetup( { context } ) {\n\n\t\tcontext.irradiance.addAssign( this.colorNode );\n\n\t}\n\n}\n\n/**\n * Module for representing directional lights as nodes.\n *\n * @augments AnalyticLightNode\n */\nclass DirectionalLightNode extends AnalyticLightNode {\n\n\tstatic get type() {\n\n\t\treturn 'DirectionalLightNode';\n\n\t}\n\n\t/**\n\t * Constructs a new directional light node.\n\t *\n\t * @param {?DirectionalLight} [light=null] - The directional light source.\n\t */\n\tconstructor( light = null ) {\n\n\t\tsuper( light );\n\n\t}\n\n\tsetupDirect() {\n\n\t\tconst lightColor = this.colorNode;\n\t\tconst lightDirection = lightTargetDirection( this.light );\n\n\t\treturn { lightDirection, lightColor };\n\n\t}\n\n}\n\n/**\n * Module for representing hemisphere lights as nodes.\n *\n * @augments AnalyticLightNode\n */\nclass HemisphereLightNode extends AnalyticLightNode {\n\n\tstatic get type() {\n\n\t\treturn 'HemisphereLightNode';\n\n\t}\n\n\t/**\n\t * Constructs a new hemisphere light node.\n\t *\n\t * @param {?HemisphereLight} [light=null] - The hemisphere light source.\n\t */\n\tconstructor( light = null ) {\n\n\t\tsuper( light );\n\n\t\t/**\n\t\t * Uniform node representing the light's position.\n\t\t *\n\t\t * @type {UniformNode<vec3>}\n\t\t */\n\t\tthis.lightPositionNode = lightPosition( light );\n\n\t\t/**\n\t\t * A node representing the light's direction.\n\t\t *\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis.lightDirectionNode = this.lightPositionNode.normalize();\n\n\t\t/**\n\t\t * Uniform node representing the light's ground color.\n\t\t *\n\t\t * @type {UniformNode<vec3>}\n\t\t */\n\t\tthis.groundColorNode = uniform( new Color() ).setGroup( renderGroup );\n\n\t}\n\n\t/**\n\t * Overwritten to updated hemisphere light specific uniforms.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tconst { light } = this;\n\n\t\tsuper.update( frame );\n\n\t\tthis.lightPositionNode.object3d = light;\n\n\t\tthis.groundColorNode.value.copy( light.groundColor ).multiplyScalar( light.intensity );\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst { colorNode, groundColorNode, lightDirectionNode } = this;\n\n\t\tconst dotNL = normalWorld.dot( lightDirectionNode );\n\t\tconst hemiDiffuseWeight = dotNL.mul( 0.5 ).add( 0.5 );\n\n\t\tconst irradiance = mix( groundColorNode, colorNode, hemiDiffuseWeight );\n\n\t\tbuilder.context.irradiance.addAssign( irradiance );\n\n\t}\n\n}\n\n/**\n * Module for representing spot lights as nodes.\n *\n * @augments AnalyticLightNode\n */\nclass SpotLightNode extends AnalyticLightNode {\n\n\tstatic get type() {\n\n\t\treturn 'SpotLightNode';\n\n\t}\n\n\t/**\n\t * Constructs a new spot light node.\n\t *\n\t * @param {?SpotLight} [light=null] - The spot light source.\n\t */\n\tconstructor( light = null ) {\n\n\t\tsuper( light );\n\n\t\t/**\n\t\t * Uniform node representing the cone cosine.\n\t\t *\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis.coneCosNode = uniform( 0 ).setGroup( renderGroup );\n\n\t\t/**\n\t\t * Uniform node representing the penumbra cosine.\n\t\t *\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis.penumbraCosNode = uniform( 0 ).setGroup( renderGroup );\n\n\t\t/**\n\t\t * Uniform node representing the cutoff distance.\n\t\t *\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis.cutoffDistanceNode = uniform( 0 ).setGroup( renderGroup );\n\n\t\t/**\n\t\t * Uniform node representing the decay exponent.\n\t\t *\n\t\t * @type {UniformNode<float>}\n\t\t */\n\t\tthis.decayExponentNode = uniform( 0 ).setGroup( renderGroup );\n\n\t\t/**\n\t\t * Uniform node representing the light color.\n\t\t *\n\t\t * @type {UniformNode<Color>}\n\t\t */\n\t\tthis.colorNode = uniform( this.color ).setGroup( renderGroup );\n\n\t}\n\n\t/**\n\t * Overwritten to updated spot light specific uniforms.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tsuper.update( frame );\n\n\t\tconst { light } = this;\n\n\t\tthis.coneCosNode.value = Math.cos( light.angle );\n\t\tthis.penumbraCosNode.value = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\n\t\tthis.cutoffDistanceNode.value = light.distance;\n\t\tthis.decayExponentNode.value = light.decay;\n\n\t}\n\n\t/**\n\t * Computes the spot attenuation for the given angle.\n\t *\n\t * @param {NodeBuilder} builder - The node builder.\n\t * @param {Node<float>} angleCosine - The angle to compute the spot attenuation for.\n\t * @return {Node<float>} The spot attenuation.\n\t */\n\tgetSpotAttenuation( builder, angleCosine ) {\n\n\t\tconst { coneCosNode, penumbraCosNode } = this;\n\n\t\treturn smoothstep( coneCosNode, penumbraCosNode, angleCosine );\n\n\t}\n\n\tgetLightCoord( builder ) {\n\n\t\tconst properties = builder.getNodeProperties( this );\n\t\tlet projectionUV = properties.projectionUV;\n\n\t\tif ( projectionUV === undefined ) {\n\n\t\t\tprojectionUV = lightProjectionUV( this.light, builder.context.positionWorld );\n\n\t\t\tproperties.projectionUV = projectionUV;\n\n\t\t}\n\n\t\treturn projectionUV;\n\n\t}\n\n\tsetupDirect( builder ) {\n\n\t\tconst { colorNode, cutoffDistanceNode, decayExponentNode, light } = this;\n\n\t\tconst lightVector = this.getLightVector( builder );\n\n\t\tconst lightDirection = lightVector.normalize();\n\t\tconst angleCos = lightDirection.dot( lightTargetDirection( light ) );\n\n\t\tconst spotAttenuation = this.getSpotAttenuation( builder, angleCos );\n\n\t\tconst lightDistance = lightVector.length();\n\n\t\tconst lightAttenuation = getDistanceAttenuation( {\n\t\t\tlightDistance,\n\t\t\tcutoffDistance: cutoffDistanceNode,\n\t\t\tdecayExponent: decayExponentNode\n\t\t} );\n\n\t\tlet lightColor = colorNode.mul( spotAttenuation ).mul( lightAttenuation );\n\n\t\tlet projected, lightCoord;\n\n\t\tif ( light.colorNode ) {\n\n\t\t\tlightCoord = this.getLightCoord( builder );\n\t\t\tprojected = light.colorNode( lightCoord );\n\n\t\t} else if ( light.map ) {\n\n\t\t\tlightCoord = this.getLightCoord( builder );\n\t\t\tprojected = texture( light.map, lightCoord.xy ).onRenderUpdate( () => light.map );\n\n\t\t}\n\n\t\tif ( projected ) {\n\n\t\t\tconst inSpotLightMap = lightCoord.mul( 2. ).sub( 1. ).abs().lessThan( 1. ).all();\n\n\t\t\tlightColor = inSpotLightMap.select( lightColor.mul( projected ), lightColor );\n\n\t\t}\n\n\t\treturn { lightColor, lightDirection };\n\n\t}\n\n}\n\n/**\n * An IES version of the default spot light node.\n *\n * @augments SpotLightNode\n */\nclass IESSpotLightNode extends SpotLightNode {\n\n\tstatic get type() {\n\n\t\treturn 'IESSpotLightNode';\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to compute an IES conform spot attenuation.\n\t *\n\t * @param {NodeBuilder} builder - The node builder.\n\t * @param {Node<float>} angleCosine - The angle to compute the spot attenuation for.\n\t * @return {Node<float>} The spot attenuation.\n\t */\n\tgetSpotAttenuation( builder, angleCosine ) {\n\n\t\tconst iesMap = this.light.iesMap;\n\n\t\tlet spotAttenuation = null;\n\n\t\tif ( iesMap && iesMap.isTexture === true ) {\n\n\t\t\tconst angle = angleCosine.acos().mul( 1.0 / Math.PI );\n\n\t\t\tspotAttenuation = texture( iesMap, vec2( angle, 0 ), 0 ).r;\n\n\t\t} else {\n\n\t\t\tspotAttenuation = super.getSpotAttenuation( angleCosine );\n\n\t\t}\n\n\t\treturn spotAttenuation;\n\n\t}\n\n}\n\n/**\n * Module for representing light probes as nodes.\n *\n * @augments AnalyticLightNode\n */\nclass LightProbeNode extends AnalyticLightNode {\n\n\tstatic get type() {\n\n\t\treturn 'LightProbeNode';\n\n\t}\n\n\t/**\n\t * Constructs a new light probe node.\n\t *\n\t * @param {?LightProbe} [light=null] - The light probe.\n\t */\n\tconstructor( light = null ) {\n\n\t\tsuper( light );\n\n\t\tconst array = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) array.push( new Vector3() );\n\n\t\t/**\n\t\t * Light probe represented as a uniform of spherical harmonics.\n\t\t *\n\t\t * @type {UniformArrayNode}\n\t\t */\n\t\tthis.lightProbe = uniformArray( array );\n\n\t}\n\n\t/**\n\t * Overwritten to updated light probe specific uniforms.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tconst { light } = this;\n\n\t\tsuper.update( frame );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.lightProbe.array[ i ].copy( light.sh.coefficients[ i ] ).multiplyScalar( light.intensity );\n\n\t\t}\n\n\t}\n\n\tsetup( builder ) {\n\n\t\tconst irradiance = getShIrradianceAt( normalWorld, this.lightProbe );\n\n\t\tbuilder.context.irradiance.addAssign( irradiance );\n\n\t}\n\n}\n\nconst sdBox = /*@__PURE__*/ Fn( ( [ p, b ] ) => {\n\n\tconst d = p.abs().sub( b );\n\n\treturn length( max$1( d, 0.0 ) ).add( min$1( max$1( d.x, d.y ), 0.0 ) );\n\n} );\n\n/**\n * An implementation of a projector light node.\n *\n * @augments SpotLightNode\n */\nclass ProjectorLightNode extends SpotLightNode {\n\n\tstatic get type() {\n\n\t\treturn 'ProjectorLightNode';\n\n\t}\n\n\tupdate( frame ) {\n\n\t\tsuper.update( frame );\n\n\t\tconst light = this.light;\n\n\t\tthis.penumbraCosNode.value = Math.min( Math.cos( light.angle * ( 1 - light.penumbra ) ), .99999 );\n\n\t\tif ( light.aspect === null ) {\n\n\t\t\tlet aspect = 1;\n\n\t\t\tif ( light.map !== null ) {\n\n\t\t\t\taspect = light.map.width / light.map.height;\n\n\t\t\t}\n\n\t\t\tlight.shadow.aspect = aspect;\n\n\t\t} else {\n\n\t\t\tlight.shadow.aspect = light.aspect;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Overwrites the default implementation to compute projection attenuation.\n\t *\n\t * @param {NodeBuilder} builder - The node builder.\n\t * @return {Node<float>} The spot attenuation.\n\t */\n\tgetSpotAttenuation( builder ) {\n\n\t\tconst attenuation = float( 0 );\n\t\tconst penumbraCos = this.penumbraCosNode;\n\n\t\t// compute the fragment's position in the light's clip space\n\n\t\tconst spotLightCoord = lightShadowMatrix( this.light ).mul( builder.context.positionWorld || positionWorld );\n\n\t\t// the sign of w determines whether the current fragment is in front or behind the light.\n\t\t// to avoid a back-projection, it's important to only compute an attenuation if w is positive\n\n\t\tIf( spotLightCoord.w.greaterThan( 0 ), () => {\n\n\t\t\tconst projectionUV = spotLightCoord.xyz.div( spotLightCoord.w );\n\t\t\tconst boxDist = sdBox( projectionUV.xy.sub( vec2( 0.5 ) ), vec2( 0.5 ) );\n\t\t\tconst angleFactor = div( -1, sub( 1.0, acos( penumbraCos ) ).sub( 1.0 ) );\n\t\t\tattenuation.assign( saturate( boxDist.mul( -2 ).mul( angleFactor ) ) );\n\n\t\t} );\n\n\t\treturn attenuation;\n\n\t}\n\n}\n\nconst _matrix41 = /*@__PURE__*/ new Matrix4();\nconst _matrix42 = /*@__PURE__*/ new Matrix4();\n\nlet _ltcLib = null;\n\n/**\n * Module for representing rect area lights as nodes.\n *\n * @augments AnalyticLightNode\n */\nclass RectAreaLightNode extends AnalyticLightNode {\n\n\tstatic get type() {\n\n\t\treturn 'RectAreaLightNode';\n\n\t}\n\n\t/**\n\t * Constructs a new rect area light node.\n\t *\n\t * @param {?RectAreaLight} [light=null] - The rect area light source.\n\t */\n\tconstructor( light = null ) {\n\n\t\tsuper( light );\n\n\t\t/**\n\t\t * Uniform node representing the half height of the are light.\n\t\t *\n\t\t * @type {UniformNode<vec3>}\n\t\t */\n\t\tthis.halfHeight = uniform( new Vector3() ).setGroup( renderGroup );\n\n\t\t/**\n\t\t * Uniform node representing the half width of the are light.\n\t\t *\n\t\t * @type {UniformNode<vec3>}\n\t\t */\n\t\tthis.halfWidth = uniform( new Vector3() ).setGroup( renderGroup );\n\n\t\t/**\n\t\t * The `updateType` is set to `NodeUpdateType.RENDER` since the light\n\t\t * relies on `viewMatrix` which might vary per render call.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'render'\n\t\t */\n\t\tthis.updateType = NodeUpdateType.RENDER;\n\n\t}\n\n\t/**\n\t * Overwritten to updated rect area light specific uniforms.\n\t *\n\t * @param {NodeFrame} frame - A reference to the current node frame.\n\t */\n\tupdate( frame ) {\n\n\t\tsuper.update( frame );\n\n\t\tconst { light } = this;\n\n\t\tconst viewMatrix = frame.camera.matrixWorldInverse;\n\n\t\t_matrix42.identity();\n\t\t_matrix41.copy( light.matrixWorld );\n\t\t_matrix41.premultiply( viewMatrix );\n\t\t_matrix42.extractRotation( _matrix41 );\n\n\t\tthis.halfWidth.value.set( light.width * 0.5, 0.0, 0.0 );\n\t\tthis.halfHeight.value.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\tthis.halfWidth.value.applyMatrix4( _matrix42 );\n\t\tthis.halfHeight.value.applyMatrix4( _matrix42 );\n\n\t}\n\n\tsetupDirectRectArea( builder ) {\n\n\t\tlet ltc_1, ltc_2;\n\n\t\tif ( builder.isAvailable( 'float32Filterable' ) ) {\n\n\t\t\tltc_1 = texture( _ltcLib.LTC_FLOAT_1 );\n\t\t\tltc_2 = texture( _ltcLib.LTC_FLOAT_2 );\n\n\t\t} else {\n\n\t\t\tltc_1 = texture( _ltcLib.LTC_HALF_1 );\n\t\t\tltc_2 = texture( _ltcLib.LTC_HALF_2 );\n\n\t\t}\n\n\t\tconst { colorNode, light } = this;\n\n\t\tconst lightPosition = lightViewPosition( light );\n\n\t\treturn {\n\t\t\tlightColor: colorNode,\n\t\t\tlightPosition,\n\t\t\thalfWidth: this.halfWidth,\n\t\t\thalfHeight: this.halfHeight,\n\t\t\tltc_1,\n\t\t\tltc_2\n\t\t};\n\n\t}\n\n\t/**\n\t * Used to configure the internal BRDF approximation texture data.\n\t *\n\t * @param {RectAreaLightTexturesLib} ltc - The BRDF approximation texture data.\n\t */\n\tstatic setLTC( ltc ) {\n\n\t\t_ltcLib = ltc;\n\n\t}\n\n}\n\n/**\n * Base class for node parsers. A derived parser must be implemented\n * for each supported native shader language.\n */\nclass NodeParser {\n\n\t/**\n\t * The method parses the given native code an returns a node function.\n\t *\n\t * @abstract\n\t * @param {string} source - The native shader code.\n\t * @return {NodeFunction} A node function.\n\t */\n\tparseFunction( /*source*/ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n}\n\n/**\n * Base class for node functions. A derived module must be implemented\n * for each supported native shader language. Similar to other `Node*` modules,\n * this class is only relevant during the building process and not used\n * in user-level code.\n */\nclass NodeFunction {\n\n\t/**\n\t * Constructs a new node function.\n\t *\n\t * @param {string} type - The node type. This type is the return type of the node function.\n\t * @param {Array<NodeFunctionInput>} inputs - The function's inputs.\n\t * @param {string} [name=''] - The function's name.\n\t * @param {string} [precision=''] - The precision qualifier.\n\t */\n\tconstructor( type, inputs, name = '', precision = '' ) {\n\n\t\t/**\n\t\t * The node type. This type is the return type of the node function.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.type = type;\n\n\t\t/**\n\t\t * The function's inputs.\n\t\t *\n\t\t * @type {Array<NodeFunctionInput>}\n\t\t */\n\t\tthis.inputs = inputs;\n\n\t\t/**\n\t\t * The name of the uniform.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * The precision qualifier.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.precision = precision;\n\n\t}\n\n\t/**\n\t * This method returns the native code of the node function.\n\t *\n\t * @abstract\n\t * @param {string} name - The function's name.\n\t * @return {string} A shader code.\n\t */\n\tgetCode( /*name = this.name*/ ) {\n\n\t\twarn( 'Abstract function.' );\n\n\t}\n\n}\n\nNodeFunction.isNodeFunction = true;\n\nconst declarationRegexp$1 = /^\\s*(highp|mediump|lowp)?\\s*([a-z_0-9]+)\\s*([a-z_0-9]+)?\\s*\\(([\\s\\S]*?)\\)/i;\nconst propertiesRegexp$1 = /[a-z_0-9]+/ig;\n\nconst pragmaMain = '#pragma main';\n\nconst parse$1 = ( source ) => {\n\n\tsource = source.trim();\n\n\tconst pragmaMainIndex = source.indexOf( pragmaMain );\n\n\tconst mainCode = pragmaMainIndex !== -1 ? source.slice( pragmaMainIndex + pragmaMain.length ) : source;\n\n\tconst declaration = mainCode.match( declarationRegexp$1 );\n\n\tif ( declaration !== null && declaration.length === 5 ) {\n\n\t\t// tokenizer\n\n\t\tconst inputsCode = declaration[ 4 ];\n\t\tconst propsMatches = [];\n\n\t\tlet nameMatch = null;\n\n\t\twhile ( ( nameMatch = propertiesRegexp$1.exec( inputsCode ) ) !== null ) {\n\n\t\t\tpropsMatches.push( nameMatch );\n\n\t\t}\n\n\t\t// parser\n\n\t\tconst inputs = [];\n\n\t\tlet i = 0;\n\n\t\twhile ( i < propsMatches.length ) {\n\n\t\t\tconst isConst = propsMatches[ i ][ 0 ] === 'const';\n\n\t\t\tif ( isConst === true ) {\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t\tlet qualifier = propsMatches[ i ][ 0 ];\n\n\t\t\tif ( qualifier === 'in' || qualifier === 'out' || qualifier === 'inout' ) {\n\n\t\t\t\ti ++;\n\n\t\t\t} else {\n\n\t\t\t\tqualifier = '';\n\n\t\t\t}\n\n\t\t\tconst type = propsMatches[ i ++ ][ 0 ];\n\n\t\t\tlet count = Number.parseInt( propsMatches[ i ][ 0 ] );\n\n\t\t\tif ( Number.isNaN( count ) === false ) i ++;\n\t\t\telse count = null;\n\n\t\t\tconst name = propsMatches[ i ++ ][ 0 ];\n\n\t\t\tinputs.push( new NodeFunctionInput( type, name, count, qualifier, isConst ) );\n\n\t\t}\n\n\t\t//\n\n\t\tconst blockCode = mainCode.substring( declaration[ 0 ].length );\n\n\t\tconst name = declaration[ 3 ] !== undefined ? declaration[ 3 ] : '';\n\t\tconst type = declaration[ 2 ];\n\n\t\tconst precision = declaration[ 1 ] !== undefined ? declaration[ 1 ] : '';\n\n\t\tconst headerCode = pragmaMainIndex !== -1 ? source.slice( 0, pragmaMainIndex ) : '';\n\n\t\treturn {\n\t\t\ttype,\n\t\t\tinputs,\n\t\t\tname,\n\t\t\tprecision,\n\t\t\tinputsCode,\n\t\t\tblockCode,\n\t\t\theaderCode\n\t\t};\n\n\t} else {\n\n\t\tthrow new Error( 'FunctionNode: Function is not a GLSL code.' );\n\n\t}\n\n};\n\n/**\n * This class represents a GLSL node function.\n *\n * @augments NodeFunction\n */\nclass GLSLNodeFunction extends NodeFunction {\n\n\t/**\n\t * Constructs a new GLSL node function.\n\t *\n\t * @param {string} source - The GLSL source.\n\t */\n\tconstructor( source ) {\n\n\t\tconst { type, inputs, name, precision, inputsCode, blockCode, headerCode } = parse$1( source );\n\n\t\tsuper( type, inputs, name, precision );\n\n\t\tthis.inputsCode = inputsCode;\n\t\tthis.blockCode = blockCode;\n\t\tthis.headerCode = headerCode;\n\n\t}\n\n\t/**\n\t * This method returns the GLSL code of the node function.\n\t *\n\t * @param {string} [name=this.name] - The function's name.\n\t * @return {string} The shader code.\n\t */\n\tgetCode( name = this.name ) {\n\n\t\tlet code;\n\n\t\tconst blockCode = this.blockCode;\n\n\t\tif ( blockCode !== '' ) {\n\n\t\t\tconst { type, inputsCode, headerCode, precision } = this;\n\n\t\t\tlet declarationCode = `${ type } ${ name } ( ${ inputsCode.trim() } )`;\n\n\t\t\tif ( precision !== '' ) {\n\n\t\t\t\tdeclarationCode = `${ precision } ${ declarationCode }`;\n\n\t\t\t}\n\n\t\t\tcode = headerCode + declarationCode + blockCode;\n\n\t\t} else {\n\n\t\t\t// interface function\n\n\t\t\tcode = '';\n\n\t\t}\n\n\t\treturn code;\n\n\t}\n\n}\n\n/**\n * A GLSL node parser.\n *\n * @augments NodeParser\n */\nclass GLSLNodeParser extends NodeParser {\n\n\t/**\n\t * The method parses the given GLSL code an returns a node function.\n\t *\n\t * @param {string} source - The GLSL code.\n\t * @return {GLSLNodeFunction} A node function.\n\t */\n\tparseFunction( source ) {\n\n\t\treturn new GLSLNodeFunction( source );\n\n\t}\n\n}\n\nconst _chainKeys$1 = [];\nconst _cacheKeyValues = [];\n\n/**\n * This renderer module manages node-related objects and is the\n * primary interface between the renderer and the node system.\n *\n * @private\n * @augments DataMap\n */\nclass NodeManager extends DataMap {\n\n\t/**\n\t * Constructs a new nodes management component.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t * @param {Backend} backend - The renderer's backend.\n\t */\n\tconstructor( renderer, backend ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The renderer.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\t/**\n\t\t * The renderer's backend.\n\t\t *\n\t\t * @type {Backend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * The node frame.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.nodeFrame = new NodeFrame();\n\n\t\t/**\n\t\t * A cache for managing node builder states.\n\t\t *\n\t\t * @type {Map<number,NodeBuilderState>}\n\t\t */\n\t\tthis.nodeBuilderCache = new Map();\n\n\t\t/**\n\t\t * A cache for managing data cache key data.\n\t\t *\n\t\t * @type {ChainMap}\n\t\t */\n\t\tthis.callHashCache = new ChainMap();\n\n\t\t/**\n\t\t * A cache for managing node uniforms group data.\n\t\t *\n\t\t * @type {ChainMap}\n\t\t */\n\t\tthis.groupsData = new ChainMap();\n\n\t\t/**\n\t\t * Queue for pending async builds to limit concurrent compilation.\n\t\t *\n\t\t * @private\n\t\t * @type {Array<Function>}\n\t\t */\n\t\tthis._buildQueue = [];\n\n\t\t/**\n\t\t * Whether an async build is currently in progress.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t */\n\t\tthis._buildInProgress = false;\n\n\t\t/**\n\t\t * A cache for managing node objects of\n\t\t * scene properties like fog or environments.\n\t\t *\n\t\t * @type {Object<string,WeakMap>}\n\t\t */\n\t\tthis.cacheLib = {};\n\n\t}\n\n\t/**\n\t * Returns `true` if the given node uniforms group must be updated or not.\n\t *\n\t * @param {NodeUniformsGroup} nodeUniformsGroup - The node uniforms group.\n\t * @return {boolean} Whether the node uniforms group requires an update or not.\n\t */\n\tupdateGroup( nodeUniformsGroup ) {\n\n\t\tconst groupNode = nodeUniformsGroup.groupNode;\n\n\t\t_chainKeys$1[ 0 ] = groupNode;\n\t\t_chainKeys$1[ 1 ] = nodeUniformsGroup;\n\n\t\tlet groupData = this.groupsData.get( _chainKeys$1 );\n\t\tif ( groupData === undefined ) this.groupsData.set( _chainKeys$1, groupData = {} );\n\n\t\t_chainKeys$1[ 0 ] = null;\n\t\t_chainKeys$1[ 1 ] = null;\n\n\t\tif ( groupData.version !== groupNode.version ) {\n\n\t\t\tgroupData.version = groupNode.version;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns the cache key for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {number} The cache key.\n\t */\n\tgetForRenderCacheKey( renderObject ) {\n\n\t\treturn renderObject.initialCacheKey;\n\n\t}\n\n\t/**\n\t * Creates a node builder configured for the given render object and material.\n\t *\n\t * @private\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {Material} material - The material to use.\n\t * @return {NodeBuilder} The configured node builder.\n\t */\n\t_createNodeBuilder( renderObject, material ) {\n\n\t\tconst nodeBuilder = this.backend.createNodeBuilder( renderObject.object, this.renderer );\n\t\tnodeBuilder.scene = renderObject.scene;\n\t\tnodeBuilder.material = material;\n\t\tnodeBuilder.camera = renderObject.camera;\n\t\tnodeBuilder.context.material = material;\n\t\tnodeBuilder.lightsNode = renderObject.lightsNode;\n\t\tnodeBuilder.environmentNode = this.getEnvironmentNode( renderObject.scene );\n\t\tnodeBuilder.fogNode = this.getFogNode( renderObject.scene );\n\t\tnodeBuilder.clippingContext = renderObject.clippingContext;\n\n\t\tif ( this.renderer.getOutputRenderTarget() ? this.renderer.getOutputRenderTarget().multiview : false ) {\n\n\t\t\tnodeBuilder.enableMultiview();\n\n\t\t}\n\n\t\treturn nodeBuilder;\n\n\t}\n\n\t/**\n\t * Returns a node builder state for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {boolean} [useAsync=false] - Whether to use async build with yielding.\n\t * @return {NodeBuilderState|Promise<NodeBuilderState>} The node builder state (or Promise if async).\n\t */\n\tgetForRender( renderObject, useAsync = false ) {\n\n\t\tconst renderObjectData = this.get( renderObject );\n\n\t\tlet nodeBuilderState = renderObjectData.nodeBuilderState;\n\n\t\tif ( nodeBuilderState === undefined ) {\n\n\t\t\tconst { nodeBuilderCache } = this;\n\n\t\t\tconst cacheKey = this.getForRenderCacheKey( renderObject );\n\n\t\t\tnodeBuilderState = nodeBuilderCache.get( cacheKey );\n\n\t\t\tif ( nodeBuilderState === undefined ) {\n\n\t\t\t\tconst buildNodeBuilder = async () => {\n\n\t\t\t\t\tlet nodeBuilder = this._createNodeBuilder( renderObject, renderObject.material );\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tif ( useAsync ) {\n\n\t\t\t\t\t\t\tawait nodeBuilder.buildAsync();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tnodeBuilder.build();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\tnodeBuilder = this._createNodeBuilder( renderObject, new NodeMaterial() );\n\n\t\t\t\t\t\tif ( useAsync ) {\n\n\t\t\t\t\t\t\tawait nodeBuilder.buildAsync();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tnodeBuilder.build();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\terror( 'TSL: ' + e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn nodeBuilder;\n\n\t\t\t\t};\n\n\t\t\t\tif ( useAsync ) {\n\n\t\t\t\t\treturn buildNodeBuilder().then( ( nodeBuilder ) => {\n\n\t\t\t\t\t\tnodeBuilderState = this._createNodeBuilderState( nodeBuilder );\n\t\t\t\t\t\tnodeBuilderCache.set( cacheKey, nodeBuilderState );\n\t\t\t\t\t\tnodeBuilderState.usedTimes ++;\n\t\t\t\t\t\trenderObjectData.nodeBuilderState = nodeBuilderState;\n\n\t\t\t\t\t\treturn nodeBuilderState;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Synchronous path - call buildNodeBuilder but don't await\n\t\t\t\t\tlet nodeBuilder = this._createNodeBuilder( renderObject, renderObject.material );\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tnodeBuilder.build();\n\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\tnodeBuilder = this._createNodeBuilder( renderObject, new NodeMaterial() );\n\t\t\t\t\t\tnodeBuilder.build();\n\n\t\t\t\t\t\tlet stackTrace = e.stackTrace;\n\n\t\t\t\t\t\tif ( ! stackTrace && e.stack ) {\n\n\t\t\t\t\t\t\t// Capture stack trace for JavaScript errors\n\n\t\t\t\t\t\t\tstackTrace = new StackTrace( e.stack );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\terror( 'TSL: ' + e, stackTrace );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnodeBuilderState = this._createNodeBuilderState( nodeBuilder );\n\n\t\t\t\t\tnodeBuilderCache.set( cacheKey, nodeBuilderState );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tnodeBuilderState.usedTimes ++;\n\n\t\t\trenderObjectData.nodeBuilderState = nodeBuilderState;\n\n\t\t}\n\n\t\treturn nodeBuilderState;\n\n\t}\n\n\t/**\n\t * Async version of getForRender() that yields to main thread during build.\n\t * Use this in compileAsync() to prevent blocking the main thread.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {Promise<NodeBuilderState>} A promise that resolves to the node builder state.\n\t */\n\tgetForRenderAsync( renderObject ) {\n\n\t\tconst result = this.getForRender( renderObject, true );\n\n\t\t// Ensure we always return a Promise (cache hit returns nodeBuilderState directly)\n\t\tif ( result.then ) {\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\treturn Promise.resolve( result );\n\n\t}\n\n\t/**\n\t * Returns nodeBuilderState if ready, null if pending async build.\n\t * Queues async build on first call for cache miss.\n\t * Use this in render() path to enable non-blocking compilation.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {?NodeBuilderState} The node builder state, or null if still building.\n\t */\n\tgetForRenderDeferred( renderObject ) {\n\n\t\tconst renderObjectData = this.get( renderObject );\n\n\t\t// Already built for this renderObject\n\t\tif ( renderObjectData.nodeBuilderState !== undefined ) {\n\n\t\t\treturn renderObjectData.nodeBuilderState;\n\n\t\t}\n\n\t\t// Check cache with stable key\n\t\tconst cacheKey = this.getForRenderCacheKey( renderObject );\n\t\tconst nodeBuilderState = this.nodeBuilderCache.get( cacheKey );\n\n\t\tif ( nodeBuilderState !== undefined ) {\n\n\t\t\t// Cache hit - use it\n\t\t\tnodeBuilderState.usedTimes ++;\n\t\t\trenderObjectData.nodeBuilderState = nodeBuilderState;\n\t\t\treturn nodeBuilderState;\n\n\t\t}\n\n\t\t// Cache miss - check if async build already queued\n\t\tif ( renderObjectData.pendingBuild !== true ) {\n\n\t\t\t// Mark as pending and add to build queue\n\t\t\trenderObjectData.pendingBuild = true;\n\n\t\t\tthis._buildQueue.push( () => {\n\n\t\t\t\treturn this.getForRenderAsync( renderObject ).then( () => {\n\n\t\t\t\t\trenderObjectData.pendingBuild = false;\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t\t// Start processing queue if not already running\n\t\t\tthis._processBuildQueue();\n\n\t\t}\n\n\t\treturn null; // Not ready\n\n\t}\n\n\t/**\n\t * Processes the build queue one item at a time.\n\t * This ensures builds don't all run simultaneously and freeze the main thread.\n\t *\n\t * @private\n\t */\n\t_processBuildQueue() {\n\n\t\tif ( this._buildInProgress || this._buildQueue.length === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._buildInProgress = true;\n\n\t\tconst buildFn = this._buildQueue.shift();\n\n\t\tbuildFn().then( () => {\n\n\t\t\tthis._buildInProgress = false;\n\n\t\t\t// Process next item in queue\n\t\t\tthis._processBuildQueue();\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Deletes the given object from the internal data map\n\t *\n\t * @param {any} object - The object to delete.\n\t * @return {?Object} The deleted dictionary.\n\t */\n\tdelete( object ) {\n\n\t\tif ( object.isRenderObject ) {\n\n\t\t\tconst nodeBuilderState = this.get( object ).nodeBuilderState;\n\n\t\t\tif ( nodeBuilderState !== undefined ) {\n\n\t\t\t\tnodeBuilderState.usedTimes --;\n\n\t\t\t\tif ( nodeBuilderState.usedTimes === 0 ) {\n\n\t\t\t\t\tthis.nodeBuilderCache.delete( this.getForRenderCacheKey( object ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn super.delete( object );\n\n\t}\n\n\t/**\n\t * Returns a node builder state for the given compute node.\n\t *\n\t * @param {Node} computeNode - The compute node.\n\t * @return {NodeBuilderState} The node builder state.\n\t */\n\tgetForCompute( computeNode ) {\n\n\t\tconst computeData = this.get( computeNode );\n\n\t\tlet nodeBuilderState = computeData.nodeBuilderState;\n\n\t\tif ( nodeBuilderState === undefined ) {\n\n\t\t\tconst nodeBuilder = this.backend.createNodeBuilder( computeNode, this.renderer );\n\t\t\tnodeBuilder.build();\n\n\t\t\tnodeBuilderState = this._createNodeBuilderState( nodeBuilder );\n\n\t\t\tcomputeData.nodeBuilderState = nodeBuilderState;\n\n\t\t}\n\n\t\treturn nodeBuilderState;\n\n\t}\n\n\t/**\n\t * Creates a node builder state for the given node builder.\n\t *\n\t * @private\n\t * @param {NodeBuilder} nodeBuilder - The node builder.\n\t * @return {NodeBuilderState} The node builder state.\n\t */\n\t_createNodeBuilderState( nodeBuilder ) {\n\n\t\treturn new NodeBuilderState(\n\t\t\tnodeBuilder.vertexShader,\n\t\t\tnodeBuilder.fragmentShader,\n\t\t\tnodeBuilder.computeShader,\n\t\t\tnodeBuilder.getAttributesArray(),\n\t\t\tnodeBuilder.getBindings(),\n\t\t\tnodeBuilder.updateNodes,\n\t\t\tnodeBuilder.updateBeforeNodes,\n\t\t\tnodeBuilder.updateAfterNodes,\n\t\t\tnodeBuilder.observer,\n\t\t\tnodeBuilder.transforms\n\t\t);\n\n\t}\n\n\t/**\n\t * Returns an environment node for the current configured\n\t * scene environment.\n\t *\n\t * @param {Scene} scene - The scene.\n\t * @return {Node} A node representing the current scene environment.\n\t */\n\tgetEnvironmentNode( scene ) {\n\n\t\tthis.updateEnvironment( scene );\n\n\t\tlet environmentNode = null;\n\n\t\tif ( scene.environmentNode && scene.environmentNode.isNode ) {\n\n\t\t\tenvironmentNode = scene.environmentNode;\n\n\t\t} else {\n\n\t\t\tconst sceneData = this.get( scene );\n\n\t\t\tif ( sceneData.environmentNode ) {\n\n\t\t\t\tenvironmentNode = sceneData.environmentNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn environmentNode;\n\n\t}\n\n\t/**\n\t * Returns a background node for the current configured\n\t * scene background.\n\t *\n\t * @param {Scene} scene - The scene.\n\t * @return {Node} A node representing the current scene background.\n\t */\n\tgetBackgroundNode( scene ) {\n\n\t\tthis.updateBackground( scene );\n\n\t\tlet backgroundNode = null;\n\n\t\tif ( scene.backgroundNode && scene.backgroundNode.isNode ) {\n\n\t\t\tbackgroundNode = scene.backgroundNode;\n\n\t\t} else {\n\n\t\t\tconst sceneData = this.get( scene );\n\n\t\t\tif ( sceneData.backgroundNode ) {\n\n\t\t\t\tbackgroundNode = sceneData.backgroundNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn backgroundNode;\n\n\t}\n\n\t/**\n\t * Returns a fog node for the current configured scene fog.\n\t *\n\t * @param {Scene} scene - The scene.\n\t * @return {Node} A node representing the current scene fog.\n\t */\n\tgetFogNode( scene ) {\n\n\t\tthis.updateFog( scene );\n\n\t\treturn scene.fogNode || this.get( scene ).fogNode || null;\n\n\t}\n\n\t/**\n\t * Returns a cache key for the given scene and lights node.\n\t * This key is used by `RenderObject` as a part of the dynamic\n\t * cache key (a key that must be checked every time the render\n\t * objects is drawn).\n\t *\n\t * @param {Scene} scene - The scene.\n\t * @param {LightsNode} lightsNode - The lights node.\n\t * @return {number} The cache key.\n\t */\n\tgetCacheKey( scene, lightsNode ) {\n\n\t\t_chainKeys$1[ 0 ] = scene;\n\t\t_chainKeys$1[ 1 ] = lightsNode;\n\n\t\tconst callId = this.renderer.info.calls;\n\n\t\tconst cacheKeyData = this.callHashCache.get( _chainKeys$1 ) || {};\n\n\t\tif ( cacheKeyData.callId !== callId ) {\n\n\t\t\tconst environmentNode = this.getEnvironmentNode( scene );\n\t\t\tconst fogNode = this.getFogNode( scene );\n\n\t\t\tif ( lightsNode ) _cacheKeyValues.push( lightsNode.getCacheKey( true ) );\n\t\t\tif ( environmentNode ) _cacheKeyValues.push( environmentNode.getCacheKey() );\n\t\t\tif ( fogNode ) _cacheKeyValues.push( fogNode.getCacheKey() );\n\n\t\t\t_cacheKeyValues.push( this.renderer.getOutputRenderTarget() && this.renderer.getOutputRenderTarget().multiview ? 1 : 0 );\n\t\t\t_cacheKeyValues.push( this.renderer.shadowMap.enabled ? 1 : 0 );\n\t\t\t_cacheKeyValues.push( this.renderer.shadowMap.type );\n\n\t\t\tcacheKeyData.callId = callId;\n\t\t\tcacheKeyData.cacheKey = hashArray( _cacheKeyValues );\n\n\t\t\tthis.callHashCache.set( _chainKeys$1, cacheKeyData );\n\n\t\t\t_cacheKeyValues.length = 0;\n\n\t\t}\n\n\t\t_chainKeys$1[ 0 ] = null;\n\t\t_chainKeys$1[ 1 ] = null;\n\n\t\treturn cacheKeyData.cacheKey;\n\n\t}\n\n\t/**\n\t * A boolean that indicates whether tone mapping should be enabled\n\t * or not.\n\t *\n\t * @type {boolean}\n\t */\n\tget isToneMappingState() {\n\n\t\treturn this.renderer.getRenderTarget() ? false : true;\n\n\t}\n\n\t/**\n\t * If a scene background is configured, this method makes sure to\n\t * represent the background with a corresponding node-based implementation.\n\t *\n\t * @param {Scene} scene - The scene.\n\t */\n\tupdateBackground( scene ) {\n\n\t\tconst sceneData = this.get( scene );\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tconst forceUpdate = ( scene.backgroundBlurriness === 0 && sceneData.backgroundBlurriness > 0 ) || ( scene.backgroundBlurriness > 0 && sceneData.backgroundBlurriness === 0 );\n\n\t\t\tif ( sceneData.background !== background || forceUpdate ) {\n\n\t\t\t\tconst backgroundNode = this.getCacheNode( 'background', background, () => {\n\n\t\t\t\t\tif ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\t\t\t\tif ( scene.backgroundBlurriness > 0 || background.mapping === CubeUVReflectionMapping ) {\n\n\t\t\t\t\t\t\treturn pmremTexture( background );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tlet envMap;\n\n\t\t\t\t\t\t\tif ( background.isCubeTexture === true ) {\n\n\t\t\t\t\t\t\t\tenvMap = cubeTexture( background );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tenvMap = texture( background );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn cubeMapNode( envMap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( background.isTexture === true ) {\n\n\t\t\t\t\t\treturn texture( background, screenUV.flipY() ).setUpdateMatrix( true );\n\n\t\t\t\t\t} else if ( background.isColor !== true ) {\n\n\t\t\t\t\t\terror( 'WebGPUNodes: Unsupported background configuration.', background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, forceUpdate );\n\n\t\t\t\tsceneData.backgroundNode = backgroundNode;\n\t\t\t\tsceneData.background = background;\n\t\t\t\tsceneData.backgroundBlurriness = scene.backgroundBlurriness;\n\n\t\t\t}\n\n\t\t} else if ( sceneData.backgroundNode ) {\n\n\t\t\tdelete sceneData.backgroundNode;\n\t\t\tdelete sceneData.background;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is part of the caching of nodes which are used to represents the\n\t * scene's background, fog or environment.\n\t *\n\t * @param {string} type - The type of object to cache.\n\t * @param {Object} object - The object.\n\t * @param {Function} callback - A callback that produces a node representation for the given object.\n\t * @param {boolean} [forceUpdate=false] - Whether an update should be enforced or not.\n\t * @return {Node} The node representation.\n\t */\n\tgetCacheNode( type, object, callback, forceUpdate = false ) {\n\n\t\tconst nodeCache = this.cacheLib[ type ] || ( this.cacheLib[ type ] = new WeakMap() );\n\n\t\tlet node = nodeCache.get( object );\n\n\t\tif ( node === undefined || forceUpdate ) {\n\n\t\t\tnode = callback();\n\t\t\tnodeCache.set( object, node );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n\t/**\n\t * If a scene fog is configured, this method makes sure to\n\t * represent the fog with a corresponding node-based implementation.\n\t *\n\t * @param {Scene} scene - The scene.\n\t */\n\tupdateFog( scene ) {\n\n\t\tconst sceneData = this.get( scene );\n\t\tconst sceneFog = scene.fog;\n\n\t\tif ( sceneFog ) {\n\n\t\t\tif ( sceneData.fog !== sceneFog ) {\n\n\t\t\t\tconst fogNode = this.getCacheNode( 'fog', sceneFog, () => {\n\n\t\t\t\t\tif ( sceneFog.isFogExp2 ) {\n\n\t\t\t\t\t\tconst color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );\n\t\t\t\t\t\tconst density = reference( 'density', 'float', sceneFog ).setGroup( renderGroup );\n\n\t\t\t\t\t\treturn fog( color, densityFogFactor( density ) );\n\n\t\t\t\t\t} else if ( sceneFog.isFog ) {\n\n\t\t\t\t\t\tconst color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );\n\t\t\t\t\t\tconst near = reference( 'near', 'float', sceneFog ).setGroup( renderGroup );\n\t\t\t\t\t\tconst far = reference( 'far', 'float', sceneFog ).setGroup( renderGroup );\n\n\t\t\t\t\t\treturn fog( color, rangeFogFactor( near, far ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\terror( 'Renderer: Unsupported fog configuration.', sceneFog );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tsceneData.fogNode = fogNode;\n\t\t\t\tsceneData.fog = sceneFog;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdelete sceneData.fogNode;\n\t\t\tdelete sceneData.fog;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * If a scene environment is configured, this method makes sure to\n\t * represent the environment with a corresponding node-based implementation.\n\t *\n\t * @param {Scene} scene - The scene.\n\t */\n\tupdateEnvironment( scene ) {\n\n\t\tconst sceneData = this.get( scene );\n\t\tconst environment = scene.environment;\n\n\t\tif ( environment ) {\n\n\t\t\tif ( sceneData.environment !== environment ) {\n\n\t\t\t\tconst environmentNode = this.getCacheNode( 'environment', environment, () => {\n\n\t\t\t\t\tif ( environment.isCubeTexture === true ) {\n\n\t\t\t\t\t\treturn cubeTexture( environment );\n\n\t\t\t\t\t} else if ( environment.isTexture === true ) {\n\n\t\t\t\t\t\treturn texture( environment );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\terror( 'Nodes: Unsupported environment configuration.', environment );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tsceneData.environmentNode = environmentNode;\n\t\t\t\tsceneData.environment = environment;\n\n\t\t\t}\n\n\t\t} else if ( sceneData.environmentNode ) {\n\n\t\t\tdelete sceneData.environmentNode;\n\t\t\tdelete sceneData.environment;\n\n\t\t}\n\n\t}\n\n\tgetNodeFrame( renderer = this.renderer, scene = null, object = null, camera = null, material = null ) {\n\n\t\tconst nodeFrame = this.nodeFrame;\n\t\tnodeFrame.renderer = renderer;\n\t\tnodeFrame.scene = scene;\n\t\tnodeFrame.object = object;\n\t\tnodeFrame.camera = camera;\n\t\tnodeFrame.material = material;\n\n\t\treturn nodeFrame;\n\n\t}\n\n\tgetNodeFrameForRender( renderObject ) {\n\n\t\treturn this.getNodeFrame( renderObject.renderer, renderObject.scene, renderObject.object, renderObject.camera, renderObject.material );\n\n\t}\n\n\t/**\n\t * Returns the current output cache key.\n\t *\n\t * @return {string} The output cache key.\n\t */\n\tgetOutputCacheKey() {\n\n\t\tconst renderer = this.renderer;\n\n\t\treturn renderer.toneMapping + ',' + renderer.currentColorSpace + ',' + renderer.xr.isPresenting;\n\n\t}\n\n\t/**\n\t * Returns a node that represents the output configuration (tone mapping and\n\t * color space) for the current target.\n\t *\n\t * @param {Texture} outputTarget - The output target.\n\t * @return {Node} The output node.\n\t */\n\tgetOutputNode( outputTarget ) {\n\n\t\tconst renderer = this.renderer;\n\n\t\tconst output = outputTarget.isArrayTexture ?\n\t\t\ttexture( outputTarget, screenUV ).depth( builtin( 'gl_ViewID_OVR' ) ).renderOutput( renderer.toneMapping, renderer.currentColorSpace ) :\n\t\t\ttexture( outputTarget, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Triggers the call of `updateBefore()` methods\n\t * for all nodes of the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t */\n\tupdateBefore( renderObject ) {\n\n\t\tconst nodeBuilder = renderObject.getNodeBuilderState();\n\n\t\tfor ( const node of nodeBuilder.updateBeforeNodes ) {\n\n\t\t\t// update frame state for each node\n\n\t\t\tthis.getNodeFrameForRender( renderObject ).updateBeforeNode( node );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Triggers the call of `updateAfter()` methods\n\t * for all nodes of the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t */\n\tupdateAfter( renderObject ) {\n\n\t\tconst nodeBuilder = renderObject.getNodeBuilderState();\n\n\t\tfor ( const node of nodeBuilder.updateAfterNodes ) {\n\n\t\t\t// update frame state for each node\n\n\t\t\tthis.getNodeFrameForRender( renderObject ).updateAfterNode( node );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Triggers the call of `update()` methods\n\t * for all nodes of the given compute node.\n\t *\n\t * @param {Node} computeNode - The compute node.\n\t */\n\tupdateForCompute( computeNode ) {\n\n\t\tconst nodeFrame = this.getNodeFrame();\n\t\tconst nodeBuilder = this.getForCompute( computeNode );\n\n\t\tfor ( const node of nodeBuilder.updateNodes ) {\n\n\t\t\tnodeFrame.updateNode( node );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Triggers the call of `update()` methods\n\t * for all nodes of the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t */\n\tupdateForRender( renderObject ) {\n\n\t\tconst nodeFrame = this.getNodeFrameForRender( renderObject );\n\t\tconst nodeBuilder = renderObject.getNodeBuilderState();\n\n\t\tfor ( const node of nodeBuilder.updateNodes ) {\n\n\t\t\tnodeFrame.updateNode( node );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns `true` if the given render object requires a refresh.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {boolean} Whether the given render object requires a refresh or not.\n\t */\n\tneedsRefresh( renderObject ) {\n\n\t\tconst nodeFrame = this.getNodeFrameForRender( renderObject );\n\t\tconst monitor = renderObject.getMonitor();\n\n\t\treturn monitor.needsRefresh( renderObject, nodeFrame );\n\n\t}\n\n\t/**\n\t * Frees the internal resources.\n\t */\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tthis.nodeFrame = new NodeFrame();\n\t\tthis.nodeBuilderCache = new Map();\n\t\tthis.cacheLib = {};\n\n\t}\n\n}\n\nconst _plane = /*@__PURE__*/ new Plane();\n\n/**\n * Represents the state that is used to perform clipping via clipping planes.\n * There is a default clipping context for each render context. When the\n * scene holds instances of `ClippingGroup`, there will be a context for each\n * group.\n *\n * @private\n */\nclass ClippingContext {\n\n\t/**\n\t * Constructs a new clipping context.\n\t *\n\t * @param {?ClippingContext} [parentContext=null] - A reference to the parent clipping context.\n\t */\n\tconstructor( parentContext = null ) {\n\n\t\t/**\n\t\t * The clipping context's version.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t */\n\t\tthis.version = 0;\n\n\t\t/**\n\t\t * Whether the intersection of the clipping planes is used to clip objects, rather than their union.\n\t\t *\n\t\t * @type {?boolean}\n\t\t * @default null\n\t\t */\n\t\tthis.clipIntersection = null;\n\n\t\t/**\n\t\t * The clipping context's cache key.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.cacheKey = '';\n\n\t\t/**\n\t\t * Whether the shadow pass is active or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.shadowPass = false;\n\n\t\t/**\n\t\t * The view normal matrix.\n\t\t *\n\t\t * @type {Matrix3}\n\t\t */\n\t\tthis.viewNormalMatrix = new Matrix3();\n\n\t\t/**\n\t\t * Internal cache for maintaining clipping contexts.\n\t\t *\n\t\t * @type {WeakMap<ClippingGroup,ClippingContext>}\n\t\t */\n\t\tthis.clippingGroupContexts = new WeakMap();\n\n\t\t/**\n\t\t * The intersection planes.\n\t\t *\n\t\t * @type {Array<Vector4>}\n\t\t */\n\t\tthis.intersectionPlanes = [];\n\n\t\t/**\n\t\t * The intersection planes.\n\t\t *\n\t\t * @type {Array<Vector4>}\n\t\t */\n\t\tthis.unionPlanes = [];\n\n\t\t/**\n\t\t * The version of the clipping context's parent context.\n\t\t *\n\t\t * @type {?number}\n\t\t * @readonly\n\t\t */\n\t\tthis.parentVersion = null;\n\n\t\tif ( parentContext !== null ) {\n\n\t\t\tthis.viewNormalMatrix = parentContext.viewNormalMatrix;\n\t\t\tthis.clippingGroupContexts = parentContext.clippingGroupContexts;\n\n\t\t\tthis.shadowPass = parentContext.shadowPass;\n\t\t\tthis.viewMatrix = parentContext.viewMatrix;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Projects the given source clipping planes and writes the result into the\n\t * destination array.\n\t *\n\t * @param {Array<Plane>} source - The source clipping planes.\n\t * @param {Array<Vector4>} destination - The destination.\n\t * @param {number} offset - The offset.\n\t */\n\tprojectPlanes( source, destination, offset ) {\n\n\t\tconst l = source.length;\n\n\t\tfor ( let i = 0; i < l; i ++ ) {\n\n\t\t\t_plane.copy( source[ i ] ).applyMatrix4( this.viewMatrix, this.viewNormalMatrix );\n\n\t\t\tconst v = destination[ offset + i ];\n\t\t\tconst normal = _plane.normal;\n\n\t\t\tv.x = - normal.x;\n\t\t\tv.y = - normal.y;\n\t\t\tv.z = - normal.z;\n\t\t\tv.w = _plane.constant;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the root clipping context of a scene.\n\t *\n\t * @param {Scene} scene - The scene.\n\t * @param {Camera} camera - The camera that is used to render the scene.\n\t */\n\tupdateGlobal( scene, camera ) {\n\n\t\tthis.shadowPass = ( scene.overrideMaterial !== null && scene.overrideMaterial.isShadowPassMaterial );\n\t\tthis.viewMatrix = camera.matrixWorldInverse;\n\n\t\tthis.viewNormalMatrix.getNormalMatrix( this.viewMatrix );\n\n\t}\n\n\t/**\n\t * Updates the clipping context.\n\t *\n\t * @param {ClippingContext} parentContext - The parent context.\n\t * @param {ClippingGroup} clippingGroup - The clipping group this context belongs to.\n\t */\n\tupdate( parentContext, clippingGroup ) {\n\n\t\tlet update = false;\n\n\t\tif ( parentContext.version !== this.parentVersion ) {\n\n\t\t\tthis.intersectionPlanes = Array.from( parentContext.intersectionPlanes );\n\t\t\tthis.unionPlanes = Array.from( parentContext.unionPlanes );\n\t\t\tthis.parentVersion = parentContext.version;\n\n\t\t}\n\n\t\tif ( this.clipIntersection !== clippingGroup.clipIntersection ) {\n\n\t\t\tthis.clipIntersection = clippingGroup.clipIntersection;\n\n\t\t\tif ( this.clipIntersection ) {\n\n\t\t\t\tthis.unionPlanes.length = parentContext.unionPlanes.length;\n\n\t\t\t} else {\n\n\t\t\t\tthis.intersectionPlanes.length = parentContext.intersectionPlanes.length;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst srcClippingPlanes = clippingGroup.clippingPlanes;\n\t\tconst l = srcClippingPlanes.length;\n\n\t\tlet dstClippingPlanes;\n\t\tlet offset;\n\n\t\tif ( this.clipIntersection ) {\n\n\t\t\tdstClippingPlanes = this.intersectionPlanes;\n\t\t\toffset = parentContext.intersectionPlanes.length;\n\n\t\t} else {\n\n\t\t\tdstClippingPlanes = this.unionPlanes;\n\t\t\toffset = parentContext.unionPlanes.length;\n\n\t\t}\n\n\t\tif ( dstClippingPlanes.length !== offset + l ) {\n\n\t\t\tdstClippingPlanes.length = offset + l;\n\n\t\t\tfor ( let i = 0; i < l; i ++ ) {\n\n\t\t\t\tdstClippingPlanes[ offset + i ] = new Vector4();\n\n\t\t\t}\n\n\t\t\tupdate = true;\n\n\t\t}\n\n\t\tthis.projectPlanes( srcClippingPlanes, dstClippingPlanes, offset );\n\n\t\tif ( update ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.cacheKey = `${ this.intersectionPlanes.length }:${ this.unionPlanes.length }`;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a clipping context for the given clipping group.\n\t *\n\t * @param {ClippingGroup} clippingGroup - The clipping group.\n\t * @return {ClippingContext} The clipping context.\n\t */\n\tgetGroupContext( clippingGroup ) {\n\n\t\tif ( this.shadowPass && ! clippingGroup.clipShadows ) return this;\n\n\t\tlet context = this.clippingGroupContexts.get( clippingGroup );\n\n\t\tif ( context === undefined ) {\n\n\t\t\tcontext = new ClippingContext( this );\n\t\t\tthis.clippingGroupContexts.set( clippingGroup, context );\n\n\t\t}\n\n\t\tcontext.update( this, clippingGroup );\n\n\t\treturn context;\n\n\t}\n\n\t/**\n\t * The count of union clipping planes.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget unionClippingCount() {\n\n\t\treturn this.unionPlanes.length;\n\n\t}\n\n}\n\n/**\n * This module is used to represent render bundles inside the renderer\n * for further processing.\n *\n * @private\n */\nclass RenderBundle {\n\n\t/**\n\t * Constructs a new bundle group.\n\t *\n\t * @param {BundleGroup} bundleGroup - The bundle group.\n\t * @param {Camera} camera - The camera the bundle group is rendered with.\n\t * @param {RenderContext} renderContext - The render context the bundle is rendered with.\n\t */\n\tconstructor( bundleGroup, camera, renderContext ) {\n\n\t\tthis.bundleGroup = bundleGroup;\n\t\tthis.camera = camera;\n\t\tthis.renderContext = renderContext;\n\n\t}\n\n}\n\nconst _chainKeys = [];\n\n/**\n * This renderer module manages render bundles.\n *\n * @private\n */\nclass RenderBundles {\n\n\t/**\n\t * Constructs a new render bundle management component.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * A chain map for maintaining the render bundles.\n\t\t *\n\t\t * @type {ChainMap}\n\t\t */\n\t\tthis.bundles = new ChainMap();\n\n\t}\n\n\t/**\n\t * Returns a render bundle for the given bundle group and camera.\n\t *\n\t * @param {BundleGroup} bundleGroup - The bundle group.\n\t * @param {Camera} camera - The camera the bundle group is rendered with.\n\t * @param {RenderContext} renderContext - The render context the bundle is rendered with.\n\t * @return {RenderBundle} The render bundle.\n\t */\n\tget( bundleGroup, camera, renderContext ) {\n\n\t\tconst bundles = this.bundles;\n\n\t\t_chainKeys[ 0 ] = bundleGroup;\n\t\t_chainKeys[ 1 ] = camera;\n\t\t_chainKeys[ 2 ] = renderContext;\n\n\t\tlet bundle = bundles.get( _chainKeys );\n\n\t\tif ( bundle === undefined ) {\n\n\t\t\tbundle = new RenderBundle( bundleGroup, camera, renderContext );\n\t\t\tbundles.set( _chainKeys, bundle );\n\n\t\t}\n\n\t\t_chainKeys[ 0 ] = null;\n\t\t_chainKeys[ 1 ] = null;\n\t\t_chainKeys[ 2 ] = null;\n\n\t\treturn bundle;\n\n\t}\n\n\t/**\n\t * Frees all internal resources.\n\t */\n\tdispose() {\n\n\t\tthis.bundles = new ChainMap();\n\n\t}\n\n}\n\n/**\n * The purpose of a node library is to assign node implementations\n * to existing library features. In `WebGPURenderer` lights, materials\n * which are not based on `NodeMaterial` as well as tone mapping techniques\n * are implemented with node-based modules.\n *\n * @private\n */\nclass NodeLibrary {\n\n\t/**\n\t * Constructs a new node library.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * A weak map that maps lights to light nodes.\n\t\t *\n\t\t * @type {WeakMap<Light.constructor,AnalyticLightNode.constructor>}\n\t\t */\n\t\tthis.lightNodes = new WeakMap();\n\n\t\t/**\n\t\t * A map that maps materials to node materials.\n\t\t *\n\t\t * @type {Map<string,NodeMaterial.constructor>}\n\t\t */\n\t\tthis.materialNodes = new Map();\n\n\t\t/**\n\t\t * A map that maps tone mapping techniques (constants)\n\t\t * to tone mapping node functions.\n\t\t *\n\t\t * @type {Map<number,Function>}\n\t\t */\n\t\tthis.toneMappingNodes = new Map();\n\n\t}\n\n\t/**\n\t * Returns a matching node material instance for the given material object.\n\t *\n\t * This method also assigns/copies the properties of the given material object\n\t * to the node material. This is done to make sure the current material\n\t * configuration carries over to the node version.\n\t *\n\t * @param {Material} material - A material.\n\t * @return {NodeMaterial} The corresponding node material.\n\t */\n\tfromMaterial( material ) {\n\n\t\tif ( material.isNodeMaterial ) return material;\n\n\t\tlet nodeMaterial = null;\n\n\t\tconst nodeMaterialClass = this.getMaterialNodeClass( material.type );\n\n\t\tif ( nodeMaterialClass !== null ) {\n\n\t\t\tnodeMaterial = new nodeMaterialClass();\n\n\t\t\tfor ( const key in material ) {\n\n\t\t\t\tnodeMaterial[ key ] = material[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn nodeMaterial;\n\n\t}\n\n\t/**\n\t * Adds a tone mapping node function for a tone mapping technique (constant).\n\t *\n\t * @param {Function} toneMappingNode - The tone mapping node function.\n\t * @param {number} toneMapping - The tone mapping.\n\t */\n\taddToneMapping( toneMappingNode, toneMapping ) {\n\n\t\tthis.addType( toneMappingNode, toneMapping, this.toneMappingNodes );\n\n\t}\n\n\t/**\n\t * Returns a tone mapping node function for a tone mapping technique (constant).\n\t *\n\t * @param {number} toneMapping - The tone mapping.\n\t * @return {?Function} The tone mapping node function. Returns `null` if no node function is found.\n\t */\n\tgetToneMappingFunction( toneMapping ) {\n\n\t\treturn this.toneMappingNodes.get( toneMapping ) || null;\n\n\t}\n\n\t/**\n\t * Returns a node material class definition for a material type.\n\t *\n\t * @param {string} materialType - The material type.\n\t * @return {?NodeMaterial.constructor} The node material class definition. Returns `null` if no node material is found.\n\t */\n\tgetMaterialNodeClass( materialType ) {\n\n\t\treturn this.materialNodes.get( materialType ) || null;\n\n\t}\n\n\t/**\n\t * Adds a node material class definition for a given material type.\n\t *\n\t * @param {NodeMaterial.constructor} materialNodeClass - The node material class definition.\n\t * @param {string} materialClassType - The material type.\n\t */\n\taddMaterial( materialNodeClass, materialClassType ) {\n\n\t\tthis.addType( materialNodeClass, materialClassType, this.materialNodes );\n\n\t}\n\n\t/**\n\t * Returns a light node class definition for a light class definition.\n\t *\n\t * @param {Light.constructor} light - The light class definition.\n\t * @return {?AnalyticLightNode.constructor} The light node class definition. Returns `null` if no light node is found.\n\t */\n\tgetLightNodeClass( light ) {\n\n\t\treturn this.lightNodes.get( light ) || null;\n\n\t}\n\n\t/**\n\t * Adds a light node class definition for a given light class definition.\n\t *\n\t * @param {AnalyticLightNode.constructor} lightNodeClass - The light node class definition.\n\t * @param {Light.constructor} lightClass - The light class definition.\n\t */\n\taddLight( lightNodeClass, lightClass ) {\n\n\t\tthis.addClass( lightNodeClass, lightClass, this.lightNodes );\n\n\t}\n\n\t/**\n\t * Adds a node class definition for the given type to the provided type library.\n\t *\n\t * @param {Node.constructor} nodeClass - The node class definition.\n\t * @param {number|string} type - The object type.\n\t * @param {Map<number|string,Node.constructor>} library - The type library.\n\t */\n\taddType( nodeClass, type, library ) {\n\n\t\tif ( library.has( type ) ) {\n\n\t\t\twarn( `Redefinition of node ${ type }` );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( typeof nodeClass !== 'function' ) throw new Error( `Node class ${ nodeClass.name } is not a class.` );\n\t\tif ( typeof type === 'function' || typeof type === 'object' ) throw new Error( `Base class ${ type } is not a class.` );\n\n\t\tlibrary.set( type, nodeClass );\n\n\t}\n\n\t/**\n\t * Adds a node class definition for the given class definition to the provided type library.\n\t *\n\t * @param {Node.constructor} nodeClass - The node class definition.\n\t * @param {Node.constructor} baseClass - The class definition.\n\t * @param {WeakMap<Node.constructor, Node.constructor>} library - The type library.\n\t */\n\taddClass( nodeClass, baseClass, library ) {\n\n\t\tif ( library.has( baseClass ) ) {\n\n\t\t\twarn( `Redefinition of node ${ baseClass.name }` );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( typeof nodeClass !== 'function' ) throw new Error( `Node class ${ nodeClass.name } is not a class.` );\n\t\tif ( typeof baseClass !== 'function' ) throw new Error( `Base class ${ baseClass.name } is not a class.` );\n\n\t\tlibrary.set( baseClass, nodeClass );\n\n\t}\n\n}\n\nconst _defaultLights = /*@__PURE__*/ new LightsNode();\nconst _weakMap = /*@__PURE__*/ new WeakMap();\n\n/**\n * This renderer module manages the lights nodes which are unique\n * per scene and camera combination.\n *\n * The lights node itself is later configured in the render list\n * with the actual lights from the scene.\n *\n * @private\n */\nclass Lighting {\n\n\t/**\n\t * Creates a new lights node for the given array of lights.\n\t *\n\t * @param {Array<Light>} lights - The render object.\n\t * @return {LightsNode} The lights node.\n\t */\n\tcreateNode( lights = [] ) {\n\n\t\treturn new LightsNode().setLights( lights );\n\n\t}\n\n\t/**\n\t * Returns a lights node for the given scene and camera.\n\t *\n\t * @param {Scene} scene - The scene.\n\t * @param {Camera} camera - The camera.\n\t * @return {LightsNode} The lights node.\n\t */\n\tgetNode( scene ) {\n\n\t\t// ignore post-processing\n\n\t\tif ( scene.isQuadMesh ) return _defaultLights;\n\n\t\tlet node = _weakMap.get( scene );\n\n\t\tif ( node === undefined ) {\n\n\t\t\tnode = this.createNode();\n\t\t\t_weakMap.set( scene, node );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n}\n\n/**\n * A special type of render target that is used when rendering\n * with the WebXR Device API.\n *\n * @private\n * @augments RenderTarget\n */\nclass XRRenderTarget extends RenderTarget {\n\n\t/**\n\t * Constructs a new XR render target.\n\t *\n\t * @param {number} [width=1] - The width of the render target.\n\t * @param {number} [height=1] - The height of the render target.\n\t * @param {Object} [options={}] - The configuration options.\n\t */\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isXRRenderTarget = true;\n\n\t\t/**\n\t\t * Whether the attachments of the render target\n\t\t * are defined by external textures. This flag is\n\t\t * set to `true` when using the WebXR Layers API.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis._hasExternalTextures = false;\n\n\t\t/**\n\t\t * Whether a depth buffer should automatically be allocated\n\t\t * for this XR render target or not.\n\t\t *\n\t\t * Allocating a depth buffer is the default behavior of XR render\n\t\t * targets. However, when using the WebXR Layers API, this flag\n\t\t * must be set to `false` when the `ignoreDepthValues` property of\n\t\t * the projection layers evaluates to `false`.\n\t\t *\n\t\t * Reference: {@link https://www.w3.org/TR/webxrlayers-1/#dom-xrprojectionlayer-ignoredepthvalues}.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis._autoAllocateDepthBuffer = true;\n\n\t\t/**\n\t\t * Whether this render target is associated with a XRWebGLLayer.\n\t\t *\n\t\t * A XRWebGLLayer points to an opaque framebuffer. Basically,\n\t\t * this means that you don't have access to its bound color,\n\t\t * stencil and depth buffers. We need to handle this framebuffer\n\t\t * differently since its textures are always bound.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t * */\n\t\tthis._isOpaqueFramebuffer = false;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis._hasExternalTextures = source._hasExternalTextures;\n\t\tthis._autoAllocateDepthBuffer = source._autoAllocateDepthBuffer;\n\t\tthis._isOpaqueFramebuffer = source._isOpaqueFramebuffer;\n\n\t\treturn this;\n\n\t}\n\n\n}\n\nconst _cameraLPos = /*@__PURE__*/ new Vector3();\nconst _cameraRPos = /*@__PURE__*/ new Vector3();\n\nconst _contextNodeLib = /*@__PURE__*/ new WeakMap();\n\n/**\n * The XR manager is built on top of the WebXR Device API to\n * manage XR sessions with `WebGPURenderer`.\n *\n * XR is currently only supported with a WebGL 2 backend.\n *\n * @augments EventDispatcher\n */\nclass XRManager extends EventDispatcher {\n\n\t/**\n\t * Constructs a new XR manager.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t * @param {boolean} [multiview=false] - Enables multiview if the device supports it.\n\t */\n\tconstructor( renderer, multiview = false ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag globally enables XR rendering.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.enabled = false;\n\n\t\t/**\n\t\t * Whether the XR device is currently presenting or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t * @readonly\n\t\t */\n\t\tthis.isPresenting = false;\n\n\t\t/**\n\t\t * Whether the XR camera should automatically be updated or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.cameraAutoUpdate = true;\n\n\t\t/**\n\t\t * The renderer.\n\t\t *\n\t\t * @private\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis._renderer = renderer;\n\n\t\t// camera\n\n\t\t/**\n\t\t * Represents the camera for the left eye.\n\t\t *\n\t\t * @private\n\t\t * @type {PerspectiveCamera}\n\t\t */\n\t\tthis._cameraL = new PerspectiveCamera();\n\t\tthis._cameraL.viewport = new Vector4();\n\n\t\t/**\n\t\t * Represents the camera for the right eye.\n\t\t *\n\t\t * @private\n\t\t * @type {PerspectiveCamera}\n\t\t */\n\t\tthis._cameraR = new PerspectiveCamera();\n\t\tthis._cameraR.viewport = new Vector4();\n\n\t\t/**\n\t\t * A list of cameras used for rendering the XR views.\n\t\t *\n\t\t * @private\n\t\t * @type {Array<Camera>}\n\t\t */\n\t\tthis._cameras = [ this._cameraL, this._cameraR ];\n\n\t\t/**\n\t\t * The main XR camera.\n\t\t *\n\t\t * @private\n\t\t * @type {ArrayCamera}\n\t\t */\n\t\tthis._cameraXR = new ArrayCamera();\n\n\t\t/**\n\t\t * The current near value of the XR camera.\n\t\t *\n\t\t * @private\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis._currentDepthNear = null;\n\n\t\t/**\n\t\t * The current far value of the XR camera.\n\t\t *\n\t\t * @private\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis._currentDepthFar = null;\n\n\t\t/**\n\t\t * A list of WebXR controllers requested by the application.\n\t\t *\n\t\t * @private\n\t\t * @type {Array<WebXRController>}\n\t\t */\n\t\tthis._controllers = [];\n\n\t\t/**\n\t\t * A list of XR input source. Each input source belongs to\n\t\t * an instance of WebXRController.\n\t\t *\n\t\t * @private\n\t\t * @type {Array<XRInputSource?>}\n\t\t */\n\t\tthis._controllerInputSources = [];\n\n\t\t/**\n\t\t * The XR render target that represents the rendering destination\n\t\t * during an active XR session.\n\t\t *\n\t\t * @private\n\t\t * @type {?RenderTarget}\n\t\t * @default null\n\t\t */\n\t\tthis._xrRenderTarget = null;\n\n\t\t/**\n\t\t * An array holding all the non-projection layers\n\t\t *\n\t\t * @private\n\t\t * @type {Array<Object>}\n\t\t * @default []\n\t\t */\n\t\tthis._layers = [];\n\n\t\t/**\n\t\t * Whether the XR session uses layers.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis._sessionUsesLayers = false;\n\n\t\t/**\n\t\t * Whether the device supports binding gl objects.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t */\n\t\tthis._supportsGlBinding = typeof XRWebGLBinding !== 'undefined';\n\n\t\t/**\n\t\t * Helper function to create native WebXR Layer.\n\t\t *\n\t\t * @private\n\t\t * @type {Function}\n\t\t */\n\t\tthis._createXRLayer = createXRLayer.bind( this );\n\n\t\t/**\n\t\t* The current WebGL context.\n\t\t*\n\t\t* @private\n\t\t* @type {?WebGL2RenderingContext}\n\t\t* @default null\n\t\t*/\n\t\tthis._gl = null;\n\n\t\t/**\n\t\t * The current animation context.\n\t\t *\n\t\t * @private\n\t\t * @type {?Window}\n\t\t * @default null\n\t\t */\n\t\tthis._currentAnimationContext = null;\n\n\t\t/**\n\t\t * The current animation loop.\n\t\t *\n\t\t * @private\n\t\t * @type {?Function}\n\t\t * @default null\n\t\t */\n\t\tthis._currentAnimationLoop = null;\n\n\t\t/**\n\t\t * The current pixel ratio.\n\t\t *\n\t\t * @private\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis._currentPixelRatio = null;\n\n\t\t/**\n\t\t * The current size of the renderer's canvas\n\t\t * in logical pixel unit.\n\t\t *\n\t\t * @private\n\t\t * @type {Vector2}\n\t\t */\n\t\tthis._currentSize = new Vector2();\n\n\t\t/**\n\t\t * The default event listener for handling events inside a XR session.\n\t\t *\n\t\t * @private\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onSessionEvent = onSessionEvent.bind( this );\n\n\t\t/**\n\t\t * The event listener for handling the end of a XR session.\n\t\t *\n\t\t * @private\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onSessionEnd = onSessionEnd.bind( this );\n\n\t\t/**\n\t\t * The event listener for handling the `inputsourceschange` event.\n\t\t *\n\t\t * @private\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onInputSourcesChange = onInputSourcesChange.bind( this );\n\n\t\t/**\n\t\t * The animation loop which is used as a replacement for the default\n\t\t * animation loop of the application. It is only used when a XR session\n\t\t * is active.\n\t\t *\n\t\t * @private\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onAnimationFrame = onAnimationFrame.bind( this );\n\n\t\t/**\n\t\t * The current XR reference space.\n\t\t *\n\t\t * @private\n\t\t * @type {?XRReferenceSpace}\n\t\t * @default null\n\t\t */\n\t\tthis._referenceSpace = null;\n\n\t\t/**\n\t\t * The current XR reference space type.\n\t\t *\n\t\t * @private\n\t\t * @type {XRReferenceSpaceType}\n\t\t * @default 'local-floor'\n\t\t */\n\t\tthis._referenceSpaceType = 'local-floor';\n\n\t\t/**\n\t\t * A custom reference space defined by the application.\n\t\t *\n\t\t * @private\n\t\t * @type {?XRReferenceSpace}\n\t\t * @default null\n\t\t */\n\t\tthis._customReferenceSpace = null;\n\n\t\t/**\n\t\t * The framebuffer scale factor.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis._framebufferScaleFactor = 1;\n\n\t\t/**\n\t\t * The foveation factor.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis._foveation = 1.0;\n\n\t\t/**\n\t\t * A reference to the current XR session.\n\t\t *\n\t\t * @private\n\t\t * @type {?XRSession}\n\t\t * @default null\n\t\t */\n\t\tthis._session = null;\n\n\t\t/**\n\t\t * A reference to the current XR base layer.\n\t\t *\n\t\t * @private\n\t\t * @type {?XRWebGLLayer}\n\t\t * @default null\n\t\t */\n\t\tthis._glBaseLayer = null;\n\n\t\t/**\n\t\t * A reference to the current XR binding.\n\t\t *\n\t\t * @private\n\t\t * @type {?XRWebGLBinding}\n\t\t * @default null\n\t\t */\n\t\tthis._glBinding = null;\n\n\t\t/**\n\t\t * A reference to the current XR projection layer.\n\t\t *\n\t\t * @private\n\t\t * @type {?XRProjectionLayer}\n\t\t * @default null\n\t\t */\n\t\tthis._glProjLayer = null;\n\n\t\t/**\n\t\t * A reference to the current XR frame.\n\t\t *\n\t\t * @private\n\t\t * @type {?XRFrame}\n\t\t * @default null\n\t\t */\n\t\tthis._xrFrame = null;\n\n\t\t/**\n\t\t * Whether the browser supports the APIs necessary to use XRProjectionLayers.\n\t\t *\n\t\t * Note: this does not represent XRSession explicitly requesting\n\t\t * `'layers'` as a feature - see `_sessionUsesLayers` and #30112\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t */\n\t\tthis._supportsLayers = ( this._supportsGlBinding && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat\n\n\t\t/**\n\t\t * Whether the usage of multiview has been requested by the application or not.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t * @readonly\n\t\t */\n\t\tthis._useMultiviewIfPossible = multiview;\n\n\t\t/**\n\t\t * Whether the usage of multiview is actually enabled. This flag only evaluates to `true`\n\t\t * if multiview has been requested by the application and the `OVR_multiview2` is available.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t */\n\t\tthis._useMultiview = false;\n\n\t}\n\n\t/**\n\t * Returns an instance of `THREE.Group` that represents the transformation\n\t * of a XR controller in target ray space. The requested controller is defined\n\t * by the given index.\n\t *\n\t * @param {number} index - The index of the XR controller.\n\t * @return {Group} A group that represents the controller's transformation.\n\t */\n\tgetController( index ) {\n\n\t\tconst controller = this._getController( index );\n\n\t\treturn controller.getTargetRaySpace();\n\n\t}\n\n\t/**\n\t * Returns an instance of `THREE.Group` that represents the transformation\n\t * of a XR controller in grip space. The requested controller is defined\n\t * by the given index.\n\t *\n\t * @param {number} index - The index of the XR controller.\n\t * @return {Group} A group that represents the controller's transformation.\n\t */\n\tgetControllerGrip( index ) {\n\n\t\tconst controller = this._getController( index );\n\n\t\treturn controller.getGripSpace();\n\n\t}\n\n\t/**\n\t * Returns an instance of `THREE.Group` that represents the transformation\n\t * of a XR controller in hand space. The requested controller is defined\n\t * by the given index.\n\t *\n\t * @param {number} index - The index of the XR controller.\n\t * @return {Group} A group that represents the controller's transformation.\n\t */\n\tgetHand( index ) {\n\n\t\tconst controller = this._getController( index );\n\n\t\treturn controller.getHandSpace();\n\n\t}\n\n\t/**\n\t * Returns the foveation value.\n\t *\n\t * @return {number|undefined} The foveation value. Returns `undefined` if no base or projection layer is defined.\n\t */\n\tgetFoveation() {\n\n\t\tif ( this._glProjLayer === null && this._glBaseLayer === null ) {\n\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\treturn this._foveation;\n\n\t}\n\n\t/**\n\t * Sets the foveation value.\n\t *\n\t * @param {number} foveation - A number in the range `[0,1]` where `0` means no foveation (full resolution)\n\t * and `1` means maximum foveation (the edges render at lower resolution).\n\t */\n\tsetFoveation( foveation ) {\n\n\t\tthis._foveation = foveation;\n\n\t\tif ( this._glProjLayer !== null ) {\n\n\t\t\tthis._glProjLayer.fixedFoveation = foveation;\n\n\t\t}\n\n\t\tif ( this._glBaseLayer !== null && this._glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\tthis._glBaseLayer.fixedFoveation = foveation;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the framebuffer scale factor.\n\t *\n\t * @return {number} The framebuffer scale factor.\n\t */\n\tgetFramebufferScaleFactor() {\n\n\t\treturn this._framebufferScaleFactor;\n\n\t}\n\n\t/**\n\t * Sets the framebuffer scale factor.\n\t *\n\t * This method can not be used during a XR session.\n\t *\n\t * @param {number} factor - The framebuffer scale factor.\n\t */\n\tsetFramebufferScaleFactor( factor ) {\n\n\t\tthis._framebufferScaleFactor = factor;\n\n\t\tif ( this.isPresenting === true ) {\n\n\t\t\twarn( 'XRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the reference space type.\n\t *\n\t * @return {XRReferenceSpaceType} The reference space type.\n\t */\n\tgetReferenceSpaceType() {\n\n\t\treturn this._referenceSpaceType;\n\n\t}\n\n\t/**\n\t * Sets the reference space type.\n\t *\n\t * This method can not be used during a XR session.\n\t *\n\t * @param {XRReferenceSpaceType} type - The reference space type.\n\t */\n\tsetReferenceSpaceType( type ) {\n\n\t\tthis._referenceSpaceType = type;\n\n\t\tif ( this.isPresenting === true ) {\n\n\t\t\twarn( 'XRManager: Cannot change reference space type while presenting.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the XR reference space.\n\t *\n\t * @return {XRReferenceSpace} The XR reference space.\n\t */\n\tgetReferenceSpace() {\n\n\t\treturn this._customReferenceSpace || this._referenceSpace;\n\n\t}\n\n\t/**\n\t * Sets a custom XR reference space.\n\t *\n\t * @param {XRReferenceSpace} space - The XR reference space.\n\t */\n\tsetReferenceSpace( space ) {\n\n\t\tthis._customReferenceSpace = space;\n\n\t}\n\n\t/**\n\t * Returns the XR camera.\n\t *\n\t * @return {ArrayCamera} The XR camera.\n\t */\n\tgetCamera() {\n\n\t\treturn this._cameraXR;\n\n\t}\n\n\t/**\n\t * Returns the environment blend mode from the current XR session.\n\t *\n\t * @return {'opaque'|'additive'|'alpha-blend'|undefined} The environment blend mode. Returns `undefined` when used outside of a XR session.\n\t */\n\tgetEnvironmentBlendMode() {\n\n\t\tif ( this._session !== null ) {\n\n\t\t\treturn this._session.environmentBlendMode;\n\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Returns the current XR binding.\n\t *\n\t * Creates a new binding if needed and the browser is\n\t * capable of doing so.\n\t *\n\t * @return {?XRWebGLBinding} The XR binding. Returns `null` if one cannot be created.\n\t */\n\tgetBinding() {\n\n\t\tif ( this._glBinding === null && this._supportsGlBinding ) {\n\n\t\t\tthis._glBinding = new XRWebGLBinding( this._session, this._gl );\n\n\t\t}\n\n\t\treturn this._glBinding;\n\n\t}\n\n\t/**\n\t * Returns the current XR frame.\n\t *\n\t * @return {?XRFrame} The XR frame. Returns `null` when used outside a XR session.\n\t */\n\tgetFrame() {\n\n\t\treturn this._xrFrame;\n\n\t}\n\n\t/**\n\t * Returns `true` if the engine renders to a multiview target.\n\t *\n\t * @return {boolean} Whether the engine renders to a multiview render target or not.\n\t */\n\tuseMultiview() {\n\n\t\treturn this._useMultiview;\n\n\t}\n\n\t/**\n\t * This method can be used in XR applications to create a quadratic layer that presents a separate\n\t * rendered scene.\n\t *\n\t * @param {number} width - The width of the layer plane in world units.\n\t * @param {number} height - The height of the layer plane in world units.\n\t * @param {Vector3} translation - The position/translation of the layer plane in world units.\n\t * @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.\n\t * @param {number} pixelwidth - The width of the layer's render target in pixels.\n\t * @param {number} pixelheight - The height of the layer's render target in pixels.\n\t * @param {Function} rendercall - A callback function that renders the layer. Similar to code in\n\t * the default animation loop, this method can be used to update/transform 3D object in the layer's scene.\n\t * @param {Object} [attributes={}] - Allows to configure the layer's render target.\n\t * @return {Mesh} A mesh representing the quadratic XR layer. This mesh should be added to the XR scene.\n\t */\n\tcreateQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {\n\n\t\tconst geometry = new PlaneGeometry( width, height );\n\t\tconst renderTarget = new XRRenderTarget(\n\t\t\tpixelwidth,\n\t\t\tpixelheight,\n\t\t\t{\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\ttype: UnsignedByteType,\n\t\t\t\tdepthTexture: new DepthTexture(\n\t\t\t\t\tpixelwidth,\n\t\t\t\t\tpixelheight,\n\t\t\t\t\tattributes.stencil ? UnsignedInt248Type : UnsignedIntType,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tattributes.stencil ? DepthStencilFormat : DepthFormat\n\t\t\t\t),\n\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\tresolveDepthBuffer: false,\n\t\t\t\tresolveStencilBuffer: false\n\t\t\t} );\n\n\t\trenderTarget._autoAllocateDepthBuffer = true;\n\n\t\tconst material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );\n\t\tmaterial.map = renderTarget.texture;\n\t\tmaterial.map.offset.y = 1;\n\t\tmaterial.map.repeat.y = -1;\n\t\tconst plane = new Mesh( geometry, material );\n\t\tplane.position.copy( translation );\n\t\tplane.quaternion.copy( quaternion );\n\n\t\tconst layer = {\n\t\t\ttype: 'quad',\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\ttranslation: translation,\n\t\t\tquaternion: quaternion,\n\t\t\tpixelwidth: pixelwidth,\n\t\t\tpixelheight: pixelheight,\n\t\t\tplane: plane,\n\t\t\tmaterial: material,\n\t\t\trendercall: rendercall,\n\t\t\trenderTarget: renderTarget };\n\n\t\tthis._layers.push( layer );\n\n\t\tif ( this._session !== null ) {\n\n\t\t\tlayer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );\n\t\t\tlayer.plane.material.blending = CustomBlending;\n\t\t\tlayer.plane.material.blendEquation = AddEquation;\n\t\t\tlayer.plane.material.blendSrc = ZeroFactor;\n\t\t\tlayer.plane.material.blendDst = ZeroFactor;\n\n\t\t\tlayer.xrlayer = this._createXRLayer( layer );\n\n\t\t\tconst xrlayers = this._session.renderState.layers;\n\t\t\txrlayers.unshift( layer.xrlayer );\n\t\t\tthis._session.updateRenderState( { layers: xrlayers } );\n\n\t\t} else {\n\n\t\t\trenderTarget.isXRRenderTarget = false;\n\n\t\t}\n\n\t\treturn plane;\n\n\t}\n\n\t/**\n\t * This method can be used in XR applications to create a cylindrical layer that presents a separate\n\t * rendered scene.\n\t *\n\t * @param {number} radius - The radius of the cylinder in world units.\n\t * @param {number} centralAngle - The central angle of the cylinder in radians.\n\t * @param {number} aspectratio - The aspect ratio.\n\t * @param {Vector3} translation - The position/translation of the layer plane in world units.\n\t * @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.\n\t * @param {number} pixelwidth - The width of the layer's render target in pixels.\n\t * @param {number} pixelheight - The height of the layer's render target in pixels.\n\t * @param {Function} rendercall - A callback function that renders the layer. Similar to code in\n\t * the default animation loop, this method can be used to update/transform 3D object in the layer's scene.\n\t * @param {Object} [attributes={}] - Allows to configure the layer's render target.\n\t * @return {Mesh} A mesh representing the cylindrical XR layer. This mesh should be added to the XR scene.\n\t */\n\tcreateCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {\n\n\t\tconst geometry = new CylinderGeometry( radius, radius, radius * centralAngle / aspectratio, 64, 64, true, Math.PI - centralAngle / 2, centralAngle );\n\t\tconst renderTarget = new XRRenderTarget(\n\t\t\tpixelwidth,\n\t\t\tpixelheight,\n\t\t\t{\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\ttype: UnsignedByteType,\n\t\t\t\tdepthTexture: new DepthTexture(\n\t\t\t\t\tpixelwidth,\n\t\t\t\t\tpixelheight,\n\t\t\t\t\tattributes.stencil ? UnsignedInt248Type : UnsignedIntType,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tattributes.stencil ? DepthStencilFormat : DepthFormat\n\t\t\t\t),\n\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\tresolveDepthBuffer: false,\n\t\t\t\tresolveStencilBuffer: false\n\t\t\t} );\n\n\t\trenderTarget._autoAllocateDepthBuffer = true;\n\n\t\tconst material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );\n\t\tmaterial.map = renderTarget.texture;\n\t\tmaterial.map.offset.y = 1;\n\t\tmaterial.map.repeat.y = -1;\n\t\tconst plane = new Mesh( geometry, material );\n\t\tplane.position.copy( translation );\n\t\tplane.quaternion.copy( quaternion );\n\n\t\tconst layer = {\n\t\t\ttype: 'cylinder',\n\t\t\tradius: radius,\n\t\t\tcentralAngle: centralAngle,\n\t\t\taspectratio: aspectratio,\n\t\t\ttranslation: translation,\n\t\t\tquaternion: quaternion,\n\t\t\tpixelwidth: pixelwidth,\n\t\t\tpixelheight: pixelheight,\n\t\t\tplane: plane,\n\t\t\tmaterial: material,\n\t\t\trendercall: rendercall,\n\t\t\trenderTarget: renderTarget };\n\n\t\tthis._layers.push( layer );\n\n\t\tif ( this._session !== null ) {\n\n\t\t\tlayer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );\n\t\t\tlayer.plane.material.blending = CustomBlending;\n\t\t\tlayer.plane.material.blendEquation = AddEquation;\n\t\t\tlayer.plane.material.blendSrc = ZeroFactor;\n\t\t\tlayer.plane.material.blendDst = ZeroFactor;\n\n\t\t\tlayer.xrlayer = this._createXRLayer( layer );\n\n\t\t\tconst xrlayers = this._session.renderState.layers;\n\t\t\txrlayers.unshift( layer.xrlayer );\n\t\t\tthis._session.updateRenderState( { layers: xrlayers } );\n\n\t\t} else {\n\n\t\t\trenderTarget.isXRRenderTarget = false;\n\n\t\t}\n\n\t\treturn plane;\n\n\t}\n\n\t/**\n\t * Renders the XR layers that have been previously added to the scene.\n\t *\n\t * This method is usually called in your animation loop before rendering\n\t * the actual scene via `renderer.render( scene, camera );`.\n\t */\n\trenderLayers( ) {\n\n\t\tconst translationObject = new Vector3();\n\t\tconst quaternionObject = new Quaternion();\n\t\tconst renderer = this._renderer;\n\n\t\tconst wasPresenting = this.isPresenting;\n\n\t\tthis.isPresenting = false;\n\n\t\tconst rendererSize = new Vector2();\n\t\trenderer.getSize( rendererSize );\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( const layer of this._layers ) {\n\n\t\t\tlayer.renderTarget.isXRRenderTarget = this._session !== null;\n\t\t\tlayer.renderTarget._hasExternalTextures = layer.renderTarget.isXRRenderTarget;\n\n\t\t\tconst currentContextNode = renderer.contextNode;\n\n\t\t\tlet contextNode;\n\n\t\t\tif ( layer.renderTarget.isXRRenderTarget && this._sessionUsesLayers ) {\n\n\t\t\t\tlayer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );\n\n\t\t\t\tconst glSubImage = this._glBinding.getSubImage( layer.xrlayer, this._xrFrame );\n\t\t\t\trenderer.backend.setXRRenderTargetTextures(\n\t\t\t\t\tlayer.renderTarget,\n\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\tundefined );\n\n\t\t\t\trenderer._setXRLayerSize( layer.renderTarget.width, layer.renderTarget.height );\n\n\t\t\t\tcontextNode = _contextNodeLib.get( currentContextNode );\n\n\t\t\t\tif ( contextNode === undefined ) {\n\n\t\t\t\t\t// Apply ToneMapping and OutputColorSpace directly in the material shader\n\n\t\t\t\t\tcontextNode = currentContextNode.context( {\n\n\t\t\t\t\t\tgetOutput: ( outputNode ) => {\n\n\t\t\t\t\t\t\treturn renderOutput( outputNode, renderer.toneMapping, renderer.outputColorSpace );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\t_contextNodeLib.set( currentContextNode, contextNode );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tcontextNode = currentContextNode;\n\n\t\t\t}\n\n\t\t\trenderer.contextNode = contextNode;\n\n\t\t\trenderer.setRenderTarget( layer.renderTarget );\n\n\t\t\tlayer.rendercall();\n\n\t\t\trenderer.contextNode = currentContextNode;\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\t\trenderer._setXRLayerSize( rendererSize.x, rendererSize.y );\n\n\t\tthis.isPresenting = wasPresenting;\n\n\t}\n\n\n\t/**\n\t * Returns the current XR session.\n\t *\n\t * @return {?XRSession} The XR session. Returns `null` when used outside a XR session.\n\t */\n\tgetSession() {\n\n\t\treturn this._session;\n\n\t}\n\n\t/**\n\t * After a XR session has been requested usually with one of the `*Button` modules, it\n\t * is injected into the renderer with this method. This method triggers the start of\n\t * the actual XR rendering.\n\t *\n\t * @async\n\t * @param {XRSession} session - The XR session to set.\n\t * @return {Promise} A Promise that resolves when the session has been set.\n\t */\n\tasync setSession( session ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst backend = renderer.backend;\n\n\t\tthis._gl = renderer.getContext();\n\t\tconst gl = this._gl;\n\t\tconst attributes = gl.getContextAttributes();\n\n\t\tthis._session = session;\n\n\t\tif ( session !== null ) {\n\n\t\t\tif ( backend.isWebGPUBackend === true ) throw new Error( 'THREE.XRManager: XR is currently not supported with a WebGPU backend. Use WebGL by passing \"{ forceWebGL: true }\" to the constructor of the renderer.' );\n\n\t\t\tsession.addEventListener( 'select', this._onSessionEvent );\n\t\t\tsession.addEventListener( 'selectstart', this._onSessionEvent );\n\t\t\tsession.addEventListener( 'selectend', this._onSessionEvent );\n\t\t\tsession.addEventListener( 'squeeze', this._onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezestart', this._onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezeend', this._onSessionEvent );\n\t\t\tsession.addEventListener( 'end', this._onSessionEnd );\n\t\t\tsession.addEventListener( 'inputsourceschange', this._onInputSourcesChange );\n\n\t\t\tawait backend.makeXRCompatible();\n\n\t\t\tthis._currentPixelRatio = renderer.getPixelRatio();\n\t\t\trenderer.getSize( this._currentSize );\n\n\t\t\tthis._currentAnimationContext = renderer._animation.getContext();\n\t\t\tthis._currentAnimationLoop = renderer._animation.getAnimationLoop();\n\t\t\trenderer._animation.stop();\n\n\t\t\t//\n\n\t\t\tif ( this._supportsLayers === true ) {\n\n\t\t\t\t// default path using XRProjectionLayer\n\n\t\t\t\tlet depthFormat = null;\n\t\t\t\tlet depthType = null;\n\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\tif ( renderer.depth ) {\n\n\t\t\t\t\tglDepthFormat = renderer.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\n\t\t\t\t\tdepthFormat = renderer.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\tdepthType = renderer.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t}\n\n\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\tcolorFormat: gl.RGBA8,\n\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\tscaleFactor: this._framebufferScaleFactor,\n\t\t\t\t\tclearOnAccess: false\n\t\t\t\t};\n\n\t\t\t\tif ( this._useMultiviewIfPossible && renderer.hasFeature( 'OVR_multiview2' ) ) {\n\n\t\t\t\t\tprojectionlayerInit.textureType = 'texture-array';\n\t\t\t\t\tthis._useMultiview = true;\n\n\t\t\t\t}\n\n\t\t\t\tthis._glBinding = this.getBinding();\n\t\t\t\tconst glProjLayer = this._glBinding.createProjectionLayer( projectionlayerInit );\n\t\t\t\tconst layersArray = [ glProjLayer ];\n\n\t\t\t\tthis._glProjLayer = glProjLayer;\n\n\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\trenderer._setXRLayerSize( glProjLayer.textureWidth, glProjLayer.textureHeight );\n\n\t\t\t\tconst depth = this._useMultiview ? 2 : 1;\n\t\t\t\tconst depthTexture = new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat, depth );\n\n\t\t\t\tthis._xrRenderTarget = new XRRenderTarget(\n\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t{\n\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\tdepthTexture: depthTexture,\n\t\t\t\t\t\tstencilBuffer: renderer.stencil,\n\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0,\n\t\t\t\t\t\tresolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),\n\t\t\t\t\t\tresolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),\n\t\t\t\t\t\tdepth: this._useMultiview ? 2 : 1,\n\t\t\t\t\t\tmultiview: this._useMultiview\n\t\t\t\t\t} );\n\n\t\t\t\tthis._xrRenderTarget._hasExternalTextures = true;\n\t\t\t\tthis._xrRenderTarget.depth = this._useMultiview ? 2 : 1;\n\n\t\t\t\tthis._sessionUsesLayers = session.enabledFeatures.includes( 'layers' );\n\n\t\t\t\tthis._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );\n\n\t\t\t\tif ( this._sessionUsesLayers ) {\n\n\t\t\t\t\t// switch layers to native\n\t\t\t\t\tfor ( const layer of this._layers ) {\n\n\t\t\t\t\t\t// change material so it \"punches\" out a hole to show the XR Layer.\n\t\t\t\t\t\tlayer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: layer.type === 'cylinder' ? BackSide : FrontSide } );\n\t\t\t\t\t\tlayer.plane.material.blending = CustomBlending;\n\t\t\t\t\t\tlayer.plane.material.blendEquation = AddEquation;\n\t\t\t\t\t\tlayer.plane.material.blendSrc = ZeroFactor;\n\t\t\t\t\t\tlayer.plane.material.blendDst = ZeroFactor;\n\n\t\t\t\t\t\tlayer.xrlayer = this._createXRLayer( layer );\n\n\t\t\t\t\t\tlayersArray.unshift( layer.xrlayer );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tsession.updateRenderState( { layers: layersArray } );\n\n\t\t\t} else {\n\n\t\t\t\t// fallback to XRWebGLLayer\n\n\t\t\t\tconst layerInit = {\n\t\t\t\t\tantialias: renderer.currentSamples > 0,\n\t\t\t\t\talpha: true,\n\t\t\t\t\tdepth: renderer.depth,\n\t\t\t\t\tstencil: renderer.stencil,\n\t\t\t\t\tframebufferScaleFactor: this.getFramebufferScaleFactor()\n\t\t\t\t};\n\n\t\t\t\tconst glBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\t\t\t\tthis._glBaseLayer = glBaseLayer;\n\n\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\trenderer._setXRLayerSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight );\n\n\t\t\t\tthis._xrRenderTarget = new XRRenderTarget(\n\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t{\n\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\tstencilBuffer: renderer.stencil,\n\t\t\t\t\t\tresolveDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),\n\t\t\t\t\t\tresolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false ),\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tthis._xrRenderTarget._isOpaqueFramebuffer = true;\n\t\t\t\tthis._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tthis.setFoveation( this.getFoveation() );\n\n\t\t\trenderer._animation.setAnimationLoop( this._onAnimationFrame );\n\t\t\trenderer._animation.setContext( session );\n\t\t\trenderer._animation.start();\n\n\t\t\tthis.isPresenting = true;\n\n\t\t\tthis.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is called by the renderer per frame and updates the XR camera\n\t * and it sub cameras based on the given camera. The given camera is the \"user\"\n\t * camera created on application level and used for non-XR rendering.\n\t *\n\t * @param {PerspectiveCamera} camera - The camera.\n\t */\n\tupdateCamera( camera ) {\n\n\t\tconst session = this._session;\n\n\t\tif ( session === null ) return;\n\n\t\tconst depthNear = camera.near;\n\t\tconst depthFar = camera.far;\n\n\t\tconst cameraXR = this._cameraXR;\n\t\tconst cameraL = this._cameraL;\n\t\tconst cameraR = this._cameraR;\n\n\t\tcameraXR.near = cameraR.near = cameraL.near = depthNear;\n\t\tcameraXR.far = cameraR.far = cameraL.far = depthFar;\n\t\tcameraXR.isMultiViewCamera = this._useMultiview;\n\n\t\tif ( this._currentDepthNear !== cameraXR.near || this._currentDepthFar !== cameraXR.far ) {\n\n\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\tsession.updateRenderState( {\n\t\t\t\tdepthNear: cameraXR.near,\n\t\t\t\tdepthFar: cameraXR.far\n\t\t\t} );\n\n\t\t\tthis._currentDepthNear = cameraXR.near;\n\t\t\tthis._currentDepthFar = cameraXR.far;\n\n\t\t}\n\n\t\t// inherit camera layers and enable eye layers (1 = left, 2 = right)\n\t\tcameraXR.layers.mask = camera.layers.mask | 0b110;\n\t\tcameraL.layers.mask = cameraXR.layers.mask & -5;\n\t\tcameraR.layers.mask = cameraXR.layers.mask & -3;\n\n\n\t\tconst parent = camera.parent;\n\t\tconst cameras = cameraXR.cameras;\n\n\t\tupdateCamera( cameraXR, parent );\n\n\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t}\n\n\t\t// update projection matrix for proper view frustum culling\n\n\t\tif ( cameras.length === 2 ) {\n\n\t\t\tsetProjectionFromUnion( cameraXR, cameraL, cameraR );\n\n\t\t} else {\n\n\t\t\t// assume single camera setup (AR)\n\n\t\t\tcameraXR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t}\n\n\t\t// update user camera and its children\n\n\t\tupdateUserCamera( camera, cameraXR, parent );\n\n\n\t}\n\n\t/**\n\t * Returns a WebXR controller for the given controller index.\n\t *\n\t * @private\n\t * @param {number} index - The controller index.\n\t * @return {WebXRController} The XR controller.\n\t */\n\t_getController( index ) {\n\n\t\tlet controller = this._controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tthis._controllers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller;\n\n\t}\n\n}\n\n/**\n * Assumes 2 cameras that are parallel and share an X-axis, and that\n * the cameras' projection and world matrices have already been set.\n * And that near and far planes are identical for both cameras.\n * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n *\n * @param {ArrayCamera} camera - The camera to update.\n * @param {PerspectiveCamera} cameraL - The left camera.\n * @param {PerspectiveCamera} cameraR - The right camera.\n */\nfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t_cameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t_cameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\tconst ipd = _cameraLPos.distanceTo( _cameraRPos );\n\n\tconst projL = cameraL.projectionMatrix.elements;\n\tconst projR = cameraR.projectionMatrix.elements;\n\n\t// VR systems will have identical far and near planes, and\n\t// most likely identical top and bottom frustum extents.\n\t// Use the left camera for these values.\n\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\tconst left = near * leftFov;\n\tconst right = near * rightFov;\n\n\t// Calculate the new camera's position offset from the\n\t// left camera. xOffset should be roughly half `ipd`.\n\tconst zOffset = ipd / ( - leftFov + rightFov );\n\tconst xOffset = zOffset * - leftFov;\n\n\t// TODO: Better way to apply this offset?\n\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\tcamera.translateX( xOffset );\n\tcamera.translateZ( zOffset );\n\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t// Check if the projection uses an infinite far plane.\n\tif ( projL[ 10 ] === -1 ) {\n\n\t\t// Use the projection matrix from the left eye.\n\t\t// The camera offset is sufficient to include the view volumes\n\t\t// of both eyes (assuming symmetric projections).\n\t\tcamera.projectionMatrix.copy( cameraL.projectionMatrix );\n\t\tcamera.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );\n\n\t} else {\n\n\t\t// Find the union of the frustum values of the cameras and scale\n\t\t// the values so that the near plane's position does not change in world space,\n\t\t// although must now be relative to the new union camera.\n\t\tconst near2 = near + zOffset;\n\t\tconst far2 = far + zOffset;\n\t\tconst left2 = left - xOffset;\n\t\tconst right2 = right + ( ipd - xOffset );\n\t\tconst top2 = topFov * far / far2 * near2;\n\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t}\n\n}\n\n/**\n * Updates the world matrices for the given camera based on the parent 3D object.\n *\n * @inner\n * @param {Camera} camera - The camera to update.\n * @param {Object3D} parent - The parent 3D object.\n */\nfunction updateCamera( camera, parent ) {\n\n\tif ( parent === null ) {\n\n\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t} else {\n\n\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t}\n\n\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n}\n\n/**\n * Updates the given camera with the transformation of the XR camera and parent object.\n *\n * @inner\n * @param {Camera} camera - The camera to update.\n * @param {ArrayCamera} cameraXR - The XR camera.\n * @param {Object3D} parent - The parent 3D object.\n */\nfunction updateUserCamera( camera, cameraXR, parent ) {\n\n\tif ( parent === null ) {\n\n\t\tcamera.matrix.copy( cameraXR.matrixWorld );\n\n\t} else {\n\n\t\tcamera.matrix.copy( parent.matrixWorld );\n\t\tcamera.matrix.invert();\n\t\tcamera.matrix.multiply( cameraXR.matrixWorld );\n\n\t}\n\n\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\tcamera.updateMatrixWorld( true );\n\n\tcamera.projectionMatrix.copy( cameraXR.projectionMatrix );\n\tcamera.projectionMatrixInverse.copy( cameraXR.projectionMatrixInverse );\n\n\tif ( camera.isPerspectiveCamera ) {\n\n\t\tcamera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] );\n\t\tcamera.zoom = 1;\n\n\t}\n\n}\n\nfunction onSessionEvent( event ) {\n\n\tconst controllerIndex = this._controllerInputSources.indexOf( event.inputSource );\n\n\tif ( controllerIndex === -1 ) {\n\n\t\treturn;\n\n\t}\n\n\tconst controller = this._controllers[ controllerIndex ];\n\n\tif ( controller !== undefined ) {\n\n\t\tconst referenceSpace = this.getReferenceSpace();\n\n\t\tcontroller.update( event.inputSource, event.frame, referenceSpace );\n\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t}\n\n}\n\nfunction onSessionEnd() {\n\n\tconst session = this._session;\n\tconst renderer = this._renderer;\n\n\tsession.removeEventListener( 'select', this._onSessionEvent );\n\tsession.removeEventListener( 'selectstart', this._onSessionEvent );\n\tsession.removeEventListener( 'selectend', this._onSessionEvent );\n\tsession.removeEventListener( 'squeeze', this._onSessionEvent );\n\tsession.removeEventListener( 'squeezestart', this._onSessionEvent );\n\tsession.removeEventListener( 'squeezeend', this._onSessionEvent );\n\tsession.removeEventListener( 'end', this._onSessionEnd );\n\tsession.removeEventListener( 'inputsourceschange', this._onInputSourcesChange );\n\n\tfor ( let i = 0; i < this._controllers.length; i ++ ) {\n\n\t\tconst inputSource = this._controllerInputSources[ i ];\n\n\t\tif ( inputSource === null ) continue;\n\n\t\tthis._controllerInputSources[ i ] = null;\n\n\t\tthis._controllers[ i ].disconnect( inputSource );\n\n\t}\n\n\tthis._currentDepthNear = null;\n\tthis._currentDepthFar = null;\n\n\t// restore framebuffer/rendering state\n\n\trenderer._resetXRState();\n\n\tthis._session = null;\n\tthis._xrRenderTarget = null;\n\tthis._glBinding = null;\n\tthis._glBaseLayer = null;\n\tthis._glProjLayer = null;\n\n\t// switch layers back to emulated\n\tif ( this._sessionUsesLayers === true ) {\n\n\t\tfor ( const layer of this._layers ) {\n\n\t\t\t// Recreate layer render target to reset state\n\t\t\tlayer.renderTarget = new XRRenderTarget(\n\t\t\t\tlayer.pixelwidth,\n\t\t\t\tlayer.pixelheight,\n\t\t\t\t{\n\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\tdepthTexture: new DepthTexture(\n\t\t\t\t\t\tlayer.pixelwidth,\n\t\t\t\t\t\tlayer.pixelheight,\n\t\t\t\t\t\tlayer.stencilBuffer ? UnsignedInt248Type : UnsignedIntType,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tlayer.stencilBuffer ? DepthStencilFormat : DepthFormat\n\t\t\t\t\t),\n\t\t\t\t\tstencilBuffer: layer.stencilBuffer,\n\t\t\t\t\tresolveDepthBuffer: false,\n\t\t\t\t\tresolveStencilBuffer: false\n\t\t\t\t} );\n\n\t\t\tlayer.renderTarget.isXRRenderTarget = false;\n\n\t\t\tlayer.plane.material = layer.material;\n\t\t\tlayer.material.map = layer.renderTarget.texture;\n\t\t\tlayer.material.map.offset.y = 1;\n\t\t\tlayer.material.map.repeat.y = -1;\n\t\t\tdelete layer.xrlayer;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.isPresenting = false;\n\tthis._useMultiview = false;\n\n\trenderer._animation.stop();\n\trenderer._animation.setAnimationLoop( this._currentAnimationLoop );\n\trenderer._animation.setContext( this._currentAnimationContext );\n\trenderer._animation.start();\n\n\trenderer.setPixelRatio( this._currentPixelRatio );\n\trenderer.setSize( this._currentSize.width, this._currentSize.height, false );\n\n\tthis.dispatchEvent( { type: 'sessionend' } );\n\n}\n\nfunction onInputSourcesChange( event ) {\n\n\tconst controllers = this._controllers;\n\tconst controllerInputSources = this._controllerInputSources;\n\n\t// Notify disconnected\n\n\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\tconst inputSource = event.removed[ i ];\n\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\tif ( index >= 0 ) {\n\n\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\tcontrollers[ index ].disconnect( inputSource );\n\n\t\t}\n\n\t}\n\n\t// Notify connected\n\n\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\tconst inputSource = event.added[ i ];\n\n\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\tif ( controllerIndex === -1 ) {\n\n\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\tbreak;\n\n\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\tif ( controllerIndex === -1 ) break;\n\n\t\t}\n\n\t\tconst controller = controllers[ controllerIndex ];\n\n\t\tif ( controller ) {\n\n\t\t\tcontroller.connect( inputSource );\n\n\t\t}\n\n\t}\n\n}\n\n// Creation method for native WebXR layers\nfunction createXRLayer( layer ) {\n\n\tif ( layer.type === 'quad' ) {\n\n\t\treturn this._glBinding.createQuadLayer( {\n\t\t\ttransform: new XRRigidTransform( layer.translation, layer.quaternion ),\n\t\t\twidth: layer.width / 2,\n\t\t\theight: layer.height / 2,\n\t\t\tspace: this._referenceSpace,\n\t\t\tviewPixelWidth: layer.pixelwidth,\n\t\t\tviewPixelHeight: layer.pixelheight,\n\t\t\tclearOnAccess: false\n\t\t} );\n\n\t} else {\n\n\t\treturn this._glBinding.createCylinderLayer( {\n\t\t\ttransform: new XRRigidTransform( layer.translation, layer.quaternion ),\n\t\t\tradius: layer.radius,\n\t\t\tcentralAngle: layer.centralAngle,\n\t\t\taspectRatio: layer.aspectRatio,\n\t\t\tspace: this._referenceSpace,\n\t\t\tviewPixelWidth: layer.pixelwidth,\n\t\t\tviewPixelHeight: layer.pixelheight,\n\t\t\tclearOnAccess: false\n\t\t} );\n\n\t}\n\n}\n\n// Animation Loop\n\nfunction onAnimationFrame( time, frame ) {\n\n\tif ( frame === undefined ) return;\n\n\tconst cameraXR = this._cameraXR;\n\tconst renderer = this._renderer;\n\tconst backend = renderer.backend;\n\n\tconst glBaseLayer = this._glBaseLayer;\n\n\tconst referenceSpace = this.getReferenceSpace();\n\tconst pose = frame.getViewerPose( referenceSpace );\n\n\tthis._xrFrame = frame;\n\n\tif ( pose !== null ) {\n\n\t\tconst views = pose.views;\n\n\t\tif ( this._glBaseLayer !== null ) {\n\n\t\t\tbackend.setXRTarget( glBaseLayer.framebuffer );\n\n\t\t}\n\n\t\tlet cameraXRNeedsUpdate = false;\n\n\t\t// check if it's necessary to rebuild cameraXR's camera list\n\n\t\tif ( views.length !== cameraXR.cameras.length ) {\n\n\t\t\tcameraXR.cameras.length = 0;\n\t\t\tcameraXRNeedsUpdate = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\tconst view = views[ i ];\n\n\t\t\tlet viewport;\n\n\t\t\tif ( this._supportsLayers === true ) {\n\n\t\t\t\tconst glSubImage = this._glBinding.getViewSubImage( this._glProjLayer, view );\n\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tbackend.setXRRenderTargetTextures(\n\t\t\t\t\t\tthis._xrRenderTarget,\n\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t( this._glProjLayer.ignoreDepthValues && ! this._useMultiview ) ? undefined : glSubImage.depthStencilTexture\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t}\n\n\t\t\tlet camera = this._cameras[ i ];\n\n\t\t\tif ( camera === undefined ) {\n\n\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\tcamera.layers.enable( i );\n\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\tthis._cameras[ i ] = camera;\n\n\t\t\t}\n\n\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tcameraXR.matrix.copy( camera.matrix );\n\t\t\t\tcameraXR.matrix.decompose( cameraXR.position, cameraXR.quaternion, cameraXR.scale );\n\n\t\t\t}\n\n\t\t\tif ( cameraXRNeedsUpdate === true ) {\n\n\t\t\t\tcameraXR.cameras.push( camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\trenderer.setOutputRenderTarget( this._xrRenderTarget );\n\n\t}\n\n\t//\n\n\tfor ( let i = 0; i < this._controllers.length; i ++ ) {\n\n\t\tconst inputSource = this._controllerInputSources[ i ];\n\t\tconst controller = this._controllers[ i ];\n\n\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t}\n\n\t}\n\n\tif ( this._currentAnimationLoop ) this._currentAnimationLoop( time, frame );\n\n\tif ( frame.detectedPlanes ) {\n\n\t\tthis.dispatchEvent( { type: 'planesdetected', data: frame } );\n\n\t}\n\n\tthis._xrFrame = null;\n\n}\n\n/**\n * CanvasTarget is a class that represents the final output destination of the renderer.\n *\n * @augments EventDispatcher\n */\nclass CanvasTarget extends EventDispatcher {\n\n\t/**\n\t * Constructs a new CanvasTarget.\n\t *\n\t * @param {HTMLCanvasElement|OffscreenCanvas} domElement - The canvas element to render to.\n\t */\n\tconstructor( domElement ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * A reference to the canvas element the renderer is drawing to.\n\t\t * This value of this property will automatically be created by\n\t\t * the renderer.\n\t\t *\n\t\t * @type {HTMLCanvasElement|OffscreenCanvas}\n\t\t */\n\t\tthis.domElement = domElement;\n\n\t\t/**\n\t\t * The renderer's pixel ratio.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis._pixelRatio = 1;\n\n\t\t/**\n\t\t * The width of the renderer's default framebuffer in logical pixel unit.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t */\n\t\tthis._width = this.domElement.width;\n\n\t\t/**\n\t\t * The height of the renderer's default framebuffer in logical pixel unit.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t */\n\t\tthis._height = this.domElement.height;\n\n\t\t/**\n\t\t * The viewport of the renderer in logical pixel unit.\n\t\t *\n\t\t * @private\n\t\t * @type {Vector4}\n\t\t */\n\t\tthis._viewport = new Vector4( 0, 0, this._width, this._height );\n\n\t\t/**\n\t\t * The scissor rectangle of the renderer in logical pixel unit.\n\t\t *\n\t\t * @private\n\t\t * @type {Vector4}\n\t\t */\n\t\tthis._scissor = new Vector4( 0, 0, this._width, this._height );\n\n\t\t/**\n\t\t * Whether the scissor test should be enabled or not.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t */\n\t\tthis._scissorTest = false;\n\n\t\t/**\n\t\t * The color texture of the default framebuffer.\n\t\t *\n\t\t * @type {FramebufferTexture}\n\t\t */\n\t\tthis.colorTexture = new FramebufferTexture();\n\n\t\t/**\n\t\t * The depth texture of the default framebuffer.\n\t\t *\n\t\t * @type {DepthTexture}\n\t\t */\n\t\tthis.depthTexture = new DepthTexture();\n\n\t}\n\n\t/**\n\t * Returns the pixel ratio.\n\t *\n\t * @return {number} The pixel ratio.\n\t */\n\tgetPixelRatio() {\n\n\t\treturn this._pixelRatio;\n\n\t}\n\n\t/**\n\t * Returns the drawing buffer size in physical pixels. This method honors the pixel ratio.\n\t *\n\t * @param {Vector2} target - The method writes the result in this target object.\n\t * @return {Vector2} The drawing buffer size.\n\t */\n\tgetDrawingBufferSize( target ) {\n\n\t\treturn target.set( this._width * this._pixelRatio, this._height * this._pixelRatio ).floor();\n\n\t}\n\n\t/**\n\t * Returns the renderer's size in logical pixels. This method does not honor the pixel ratio.\n\t *\n\t * @param {Vector2} target - The method writes the result in this target object.\n\t * @return {Vector2} The renderer's size in logical pixels.\n\t */\n\tgetSize( target ) {\n\n\t\treturn target.set( this._width, this._height );\n\n\t}\n\n\t/**\n\t * Sets the given pixel ratio and resizes the canvas if necessary.\n\t *\n\t * @param {number} [value=1] - The pixel ratio.\n\t */\n\tsetPixelRatio( value = 1 ) {\n\n\t\tif ( this._pixelRatio === value ) return;\n\n\t\tthis._pixelRatio = value;\n\n\t\tthis.setSize( this._width, this._height, false );\n\n\t}\n\n\t/**\n\t * This method allows to define the drawing buffer size by specifying\n\t * width, height and pixel ratio all at once. The size of the drawing\n\t * buffer is computed with this formula:\n\t * ```js\n\t * size.x = width * pixelRatio;\n\t * size.y = height * pixelRatio;\n\t * ```\n\t *\n\t * @param {number} width - The width in logical pixels.\n\t * @param {number} height - The height in logical pixels.\n\t * @param {number} pixelRatio - The pixel ratio.\n\t */\n\tsetDrawingBufferSize( width, height, pixelRatio ) {\n\n\t\t// Renderer can't be resized while presenting in XR.\n\t\tif ( this.xr && this.xr.isPresenting ) return;\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.domElement.width = Math.floor( width * pixelRatio );\n\t\tthis.domElement.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t\tthis._dispatchResize();\n\n\t}\n\n\t/**\n\t * Sets the size of the renderer.\n\t *\n\t * @param {number} width - The width in logical pixels.\n\t * @param {number} height - The height in logical pixels.\n\t * @param {boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.\n\t */\n\tsetSize( width, height, updateStyle = true ) {\n\n\t\t// Renderer can't be resized while presenting in XR.\n\t\tif ( this.xr && this.xr.isPresenting ) return;\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tthis.domElement.width = Math.floor( width * this._pixelRatio );\n\t\tthis.domElement.height = Math.floor( height * this._pixelRatio );\n\n\t\tif ( updateStyle === true ) {\n\n\t\t\tthis.domElement.style.width = width + 'px';\n\t\t\tthis.domElement.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t\tthis._dispatchResize();\n\n\t}\n\n\t/**\n\t * Returns the scissor rectangle.\n\t *\n\t * @param {Vector4} target - The method writes the result in this target object.\n\t * @return {Vector4} The scissor rectangle.\n\t */\n\tgetScissor( target ) {\n\n\t\tconst scissor = this._scissor;\n\n\t\ttarget.x = scissor.x;\n\t\ttarget.y = scissor.y;\n\t\ttarget.width = scissor.width;\n\t\ttarget.height = scissor.height;\n\n\t\treturn target;\n\n\t}\n\n\t/**\n\t * Defines the scissor rectangle.\n\t *\n\t * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.\n\t * Instead of passing four arguments, the method also works with a single four-dimensional vector.\n\t * @param {number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.\n\t * @param {number} width - The width of the scissor box in logical pixel unit.\n\t * @param {number} height - The height of the scissor box in logical pixel unit.\n\t */\n\tsetScissor( x, y, width, height ) {\n\n\t\tconst scissor = this._scissor;\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\tscissor.copy( x );\n\n\t\t} else {\n\n\t\t\tscissor.set( x, y, width, height );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the scissor test value.\n\t *\n\t * @return {boolean} Whether the scissor test should be enabled or not.\n\t */\n\tgetScissorTest() {\n\n\t\treturn this._scissorTest;\n\n\t}\n\n\t/**\n\t * Defines the scissor test.\n\t *\n\t * @param {boolean} boolean - Whether the scissor test should be enabled or not.\n\t */\n\tsetScissorTest( boolean ) {\n\n\t\tthis._scissorTest = boolean;\n\n\t}\n\n\t/**\n\t * Returns the viewport definition.\n\t *\n\t * @param {Vector4} target - The method writes the result in this target object.\n\t * @return {Vector4} The viewport definition.\n\t */\n\tgetViewport( target ) {\n\n\t\treturn target.copy( this._viewport );\n\n\t}\n\n\t/**\n\t * Defines the viewport.\n\t *\n\t * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.\n\t * @param {number} y - The vertical coordinate for the lower left corner of the viewport origin  in logical pixel unit.\n\t * @param {number} width - The width of the viewport in logical pixel unit.\n\t * @param {number} height - The height of the viewport in logical pixel unit.\n\t * @param {number} minDepth - The minimum depth value of the viewport. WebGPU only.\n\t * @param {number} maxDepth - The maximum depth value of the viewport. WebGPU only.\n\t */\n\tsetViewport( x, y, width, height, minDepth = 0, maxDepth = 1 ) {\n\n\t\tconst viewport = this._viewport;\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\tviewport.copy( x );\n\n\t\t} else {\n\n\t\t\tviewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tviewport.minDepth = minDepth;\n\t\tviewport.maxDepth = maxDepth;\n\n\t}\n\n\t/**\n\t * Dispatches the resize event.\n\t *\n\t * @private\n\t */\n\t_dispatchResize() {\n\n\t\tthis.dispatchEvent( { type: 'resize' } );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever this instance is no longer used in your app.\n\t *\n\t * @fires RenderTarget#dispose\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nconst _scene = /*@__PURE__*/ new Scene();\nconst _drawingBufferSize = /*@__PURE__*/ new Vector2();\nconst _screen = /*@__PURE__*/ new Vector4();\nconst _frustum = /*@__PURE__*/ new Frustum();\nconst _frustumArray = /*@__PURE__*/ new FrustumArray();\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _vector4 = /*@__PURE__*/ new Vector4();\n\nconst _shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };\n\n/**\n * Base class for renderers.\n */\nclass Renderer {\n\n\t/**\n\t * Renderer options.\n\t *\n\t * @typedef {Object} Renderer~Options\n\t * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.\n\t * @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.\n\t * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.\n\t * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.\n\t * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.\n\t * @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.\n\t * @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. This parameter can set to any other integer value than 0\n\t * to overwrite the default.\n\t * @property {?Function} [getFallback=null] - This callback function can be used to provide a fallback backend, if the primary backend can't be targeted.\n\t * @property {number} [outputBufferType=HalfFloatType] - Defines the type of output buffers. The default `HalfFloatType` is recommend for best\n\t * quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.\n\t * @property {boolean} [multiview=false] - If set to `true`, the renderer will use multiview during WebXR rendering if supported.\n\t */\n\n\t/**\n\t * Constructs a new renderer.\n\t *\n\t * @param {Backend} backend - The backend the renderer is targeting (e.g. WebGPU or WebGL 2).\n\t * @param {Renderer~Options} [parameters] - The configuration parameter.\n\n\t */\n\tconstructor( backend, parameters = {} ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRenderer = true;\n\n\t\t//\n\n\t\tconst {\n\t\t\tlogarithmicDepthBuffer = false,\n\t\t\treversedDepthBuffer = false,\n\t\t\talpha = true,\n\t\t\tdepth = true,\n\t\t\tstencil = false,\n\t\t\tantialias = false,\n\t\t\tsamples = 0,\n\t\t\tgetFallback = null,\n\t\t\toutputBufferType = HalfFloatType,\n\t\t\tmultiview = false\n\t\t} = parameters;\n\n\t\t/**\n\t\t * A reference to the current backend.\n\t\t *\n\t\t * @type {Backend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * Whether the renderer should automatically clear the current rendering target\n\t\t * before execute a `render()` call. The target can be the canvas (default framebuffer)\n\t\t * or the current bound render target (custom framebuffer).\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoClear = true;\n\n\t\t/**\n\t\t * When `autoClear` is set to `true`, this property defines whether the renderer\n\t\t * should clear the color buffer.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoClearColor = true;\n\n\t\t/**\n\t\t * When `autoClear` is set to `true`, this property defines whether the renderer\n\t\t * should clear the depth buffer.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoClearDepth = true;\n\n\t\t/**\n\t\t * When `autoClear` is set to `true`, this property defines whether the renderer\n\t\t * should clear the stencil buffer.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.autoClearStencil = true;\n\n\t\t/**\n\t\t * Whether the default framebuffer should be transparent or opaque.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.alpha = alpha;\n\n\t\t/**\n\t\t * Whether logarithmic depth buffer is enabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t * @readonly\n\t\t */\n\t\tthis.logarithmicDepthBuffer = logarithmicDepthBuffer;\n\n\t\t/**\n\t\t * Whether reversed depth buffer is enabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t * @readonly\n\t\t */\n\t\tthis.reversedDepthBuffer = reversedDepthBuffer;\n\n\t\t/**\n\t\t * Defines the output color space of the renderer.\n\t\t *\n\t\t * @type {string}\n\t\t * @default SRGBColorSpace\n\t\t */\n\t\tthis.outputColorSpace = SRGBColorSpace;\n\n\t\t/**\n\t\t * Defines the tone mapping of the renderer.\n\t\t *\n\t\t * @type {number}\n\t\t * @default NoToneMapping\n\t\t */\n\t\tthis.toneMapping = NoToneMapping;\n\n\t\t/**\n\t\t * Defines the tone mapping exposure.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.toneMappingExposure = 1.0;\n\n\t\t/**\n\t\t * Whether the renderer should sort its render lists or not.\n\t\t *\n\t\t * Note: Sorting is used to attempt to properly render objects that have some degree of transparency.\n\t\t * By definition, sorting objects may not work in all cases. Depending on the needs of application,\n\t\t * it may be necessary to turn off sorting and use other methods to deal with transparency rendering\n\t\t * e.g. manually determining each object's rendering order.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.sortObjects = true;\n\n\t\t/**\n\t\t * Whether the default framebuffer should have a depth buffer or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.depth = depth;\n\n\t\t/**\n\t\t * Whether the default framebuffer should have a stencil buffer or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.stencil = stencil;\n\n\t\t/**\n\t\t * Holds a series of statistical information about the GPU memory\n\t\t * and the rendering process. Useful for debugging and monitoring.\n\t\t *\n\t\t * @type {Info}\n\t\t */\n\t\tthis.info = new Info();\n\n\t\t/**\n\t\t * A global context node that stores override nodes for specific transformations or calculations.\n\t\t * These nodes can be used to replace default behavior in the rendering pipeline.\n\t\t *\n\t\t * @type {ContextNode}\n\t\t * @property {Object} value - The context value object.\n\t\t */\n\t\tthis.contextNode = context();\n\n\t\t/**\n\t\t * The node library defines how certain library objects like materials, lights\n\t\t * or tone mapping functions are mapped to node types. This is required since\n\t\t * although instances of classes like `MeshBasicMaterial` or `PointLight` can\n\t\t * be part of the scene graph, they are internally represented as nodes for\n\t\t * further processing.\n\t\t *\n\t\t * @type {NodeLibrary}\n\t\t */\n\t\tthis.library = new NodeLibrary();\n\n\t\t/**\n\t\t * A map-like data structure for managing lights.\n\t\t *\n\t\t * @type {Lighting}\n\t\t */\n\t\tthis.lighting = new Lighting();\n\n\t\t// internals\n\n\t\t/**\n\t\t * The number of MSAA samples.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis._samples = samples || ( antialias === true ) ? 4 : 0;\n\n\t\t/**\n\t\t * OnCanvasTargetResize callback function.\n\t\t *\n\t\t * @private\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onCanvasTargetResize = this._onCanvasTargetResize.bind( this );\n\n\t\t/**\n\t\t * The canvas target for rendering.\n\t\t *\n\t\t * @private\n\t\t * @type {CanvasTarget}\n\t\t */\n\t\tthis._canvasTarget = new CanvasTarget( backend.getDomElement() );\n\t\tthis._canvasTarget.addEventListener( 'resize', this._onCanvasTargetResize );\n\t\tthis._canvasTarget.isDefaultCanvasTarget = true;\n\n\t\t/**\n\t\t * The inspector provides information about the internal renderer state.\n\t\t *\n\t\t * @private\n\t\t * @type {InspectorBase}\n\t\t */\n\t\tthis._inspector = new InspectorBase();\n\t\tthis._inspector.setRenderer( this );\n\n\t\t/**\n\t\t * This callback function can be used to provide a fallback backend, if the primary backend can't be targeted.\n\t\t *\n\t\t * @private\n\t\t * @type {?Function}\n\t\t */\n\t\tthis._getFallback = getFallback;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing shader attributes.\n\t\t *\n\t\t * @private\n\t\t * @type {?Attributes}\n\t\t * @default null\n\t\t */\n\t\tthis._attributes = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing geometries.\n\t\t *\n\t\t * @private\n\t\t * @type {?Geometries}\n\t\t * @default null\n\t\t */\n\t\tthis._geometries = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing node related logic.\n\t\t *\n\t\t * @private\n\t\t * @type {?NodeManager}\n\t\t * @default null\n\t\t */\n\t\tthis._nodes = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing the internal animation loop.\n\t\t *\n\t\t * @private\n\t\t * @type {?Animation}\n\t\t * @default null\n\t\t */\n\t\tthis._animation = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing shader program bindings.\n\t\t *\n\t\t * @private\n\t\t * @type {?Bindings}\n\t\t * @default null\n\t\t */\n\t\tthis._bindings = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing render objects.\n\t\t *\n\t\t * @private\n\t\t * @type {?RenderObjects}\n\t\t * @default null\n\t\t */\n\t\tthis._objects = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing render and compute pipelines.\n\t\t *\n\t\t * @private\n\t\t * @type {?Pipelines}\n\t\t * @default null\n\t\t */\n\t\tthis._pipelines = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing render bundles.\n\t\t *\n\t\t * @private\n\t\t * @type {?RenderBundles}\n\t\t * @default null\n\t\t */\n\t\tthis._bundles = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing render lists.\n\t\t *\n\t\t * @private\n\t\t * @type {?RenderLists}\n\t\t * @default null\n\t\t */\n\t\tthis._renderLists = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing render contexts.\n\t\t *\n\t\t * @private\n\t\t * @type {?RenderContexts}\n\t\t * @default null\n\t\t */\n\t\tthis._renderContexts = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for managing textures.\n\t\t *\n\t\t * @private\n\t\t * @type {?Textures}\n\t\t * @default null\n\t\t */\n\t\tthis._textures = null;\n\n\t\t/**\n\t\t * A reference to a renderer module for backgrounds.\n\t\t *\n\t\t * @private\n\t\t * @type {?Background}\n\t\t * @default null\n\t\t */\n\t\tthis._background = null;\n\n\t\t/**\n\t\t * Cache for the fullscreen quad.\n\t\t * This fullscreen quad is used for internal render passes\n\t\t * like the tone mapping and color space output pass.\n\t\t *\n\t\t * @private\n\t\t * @type {Map<Texture,QuadMesh>}\n\t\t */\n\t\tthis._quadCache = new Map();\n\n\t\t/**\n\t\t * A reference to the current render context.\n\t\t *\n\t\t * @private\n\t\t * @type {?RenderContext}\n\t\t * @default null\n\t\t */\n\t\tthis._currentRenderContext = null;\n\n\t\t/**\n\t\t * A custom sort function for the opaque render list.\n\t\t *\n\t\t * @private\n\t\t * @type {?Function}\n\t\t * @default null\n\t\t */\n\t\tthis._opaqueSort = null;\n\n\t\t/**\n\t\t * A custom sort function for the transparent render list.\n\t\t *\n\t\t * @private\n\t\t * @type {?Function}\n\t\t * @default null\n\t\t */\n\t\tthis._transparentSort = null;\n\n\t\t/**\n\t\t * Cache of framebuffer targets per canvas target.\n\t\t *\n\t\t * @private\n\t\t * @type {Map<CanvasTarget, RenderTarget>}\n\t\t */\n\t\tthis._frameBufferTargets = new Map();\n\n\t\tconst alphaClear = this.alpha === true ? 0 : 1;\n\n\t\t/**\n\t\t * The clear color value.\n\t\t *\n\t\t * @private\n\t\t * @type {Color4}\n\t\t */\n\t\tthis._clearColor = new Color4( 0, 0, 0, alphaClear );\n\n\t\t/**\n\t\t * The clear depth value.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis._clearDepth = 1;\n\n\t\t/**\n\t\t * The clear stencil value.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis._clearStencil = 0;\n\n\t\t/**\n\t\t * The current render target.\n\t\t *\n\t\t * @private\n\t\t * @type {?RenderTarget}\n\t\t * @default null\n\t\t */\n\t\tthis._renderTarget = null;\n\n\t\t/**\n\t\t * The active cube face.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis._activeCubeFace = 0;\n\n\t\t/**\n\t\t * The active mipmap level.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis._activeMipmapLevel = 0;\n\n\t\t/**\n\t\t * The current output render target.\n\t\t *\n\t\t * @private\n\t\t * @type {?RenderTarget}\n\t\t * @default null\n\t\t */\n\t\tthis._outputRenderTarget = null;\n\n\t\t/**\n\t\t * The MRT setting.\n\t\t *\n\t\t * @private\n\t\t * @type {?MRTNode}\n\t\t * @default null\n\t\t */\n\t\tthis._mrt = null;\n\n\t\t/**\n\t\t * This function defines how a render object is going\n\t\t * to be rendered.\n\t\t *\n\t\t * @private\n\t\t * @type {?Function}\n\t\t * @default null\n\t\t */\n\t\tthis._renderObjectFunction = null;\n\n\t\t/**\n\t\t * Used to keep track of the current render object function.\n\t\t *\n\t\t * @private\n\t\t * @type {?Function}\n\t\t * @default null\n\t\t */\n\t\tthis._currentRenderObjectFunction = null;\n\n\t\t/**\n\t\t * Used to keep track of the current render bundle.\n\t\t *\n\t\t * @private\n\t\t * @type {?RenderBundle}\n\t\t * @default null\n\t\t */\n\t\tthis._currentRenderBundle = null;\n\n\t\t/**\n\t\t * Next to `_renderObjectFunction()`, this function provides another hook\n\t\t * for influencing the render process of a render object. It is meant for internal\n\t\t * use and only relevant for `compileAsync()` right now. Instead of using\n\t\t * the default logic of `_renderObjectDirect()` which actually draws the render object,\n\t\t * a different function might be used which performs no draw but just the node\n\t\t * and pipeline updates.\n\t\t *\n\t\t * @private\n\t\t * @type {Function}\n\t\t */\n\t\tthis._handleObjectFunction = this._renderObjectDirect;\n\n\t\t/**\n\t\t * Indicates whether the device has been lost or not. In WebGL terms, the device\n\t\t * lost is considered as a context lost. When this is set to `true`, rendering\n\t\t * isn't possible anymore.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis._isDeviceLost = false;\n\n\t\t/**\n\t\t * A callback function that defines what should happen when a device/context lost occurs.\n\t\t *\n\t\t * @type {Function}\n\t\t */\n\t\tthis.onDeviceLost = this._onDeviceLost;\n\n\t\t/**\n\t\t * Defines the type of output buffers. The default `HalfFloatType` is recommend for\n\t\t * best quality. To save memory and bandwidth, `UnsignedByteType` might be used.\n\t\t * This will reduce rendering quality though.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default HalfFloatType\n\t\t */\n\t\tthis._outputBufferType = outputBufferType;\n\n\t\t/**\n\t\t * A cache for shadow nodes per material\n\t\t *\n\t\t * @private\n\t\t * @type {WeakMap<Material, Object>}\n\t\t */\n\t\tthis._cacheShadowNodes = new WeakMap();\n\n\t\t/**\n\t\t * Whether the renderer has been initialized or not.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis._initialized = false;\n\n\t\t/**\n\t\t * The call depth of the renderer. Counts the number of\n\t\t * nested render calls.\n\t\t *\n\t\t * @private\n\t\t * @type {number}\n\t\t * @default - 1\n\t\t */\n\t\tthis._callDepth = -1;\n\n\t\t/**\n\t\t * A reference to the promise which initializes the renderer.\n\t\t *\n\t\t * @private\n\t\t * @type {?Promise<this>}\n\t\t * @default null\n\t\t */\n\t\tthis._initPromise = null;\n\n\t\t/**\n\t\t * An array of compilation promises which are used in `compileAsync()`.\n\t\t *\n\t\t * @private\n\t\t * @type {?Array<Promise>}\n\t\t * @default null\n\t\t */\n\t\tthis._compilationPromises = null;\n\n\t\t/**\n\t\t * Whether the renderer should render transparent render objects or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.transparent = true;\n\n\t\t/**\n\t\t * Whether the renderer should render opaque render objects or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.opaque = true;\n\n\t\t/**\n\t\t * Shadow map configuration\n\t\t * @typedef {Object} ShadowMapConfig\n\t\t * @property {boolean} enabled - Whether to globally enable shadows or not.\n\t\t * @property {boolean} transmitted - Whether to enable light transmission through non-opaque materials.\n\t\t * @property {number} type - The shadow map type.\n\t\t */\n\n\t\t/**\n\t\t * The renderer's shadow configuration.\n\t\t *\n\t\t * @type {ShadowMapConfig}\n\t\t */\n\t\tthis.shadowMap = {\n\t\t\tenabled: false,\n\t\t\ttransmitted: false,\n\t\t\ttype: PCFShadowMap\n\t\t};\n\n\t\t/**\n\t\t * XR configuration.\n\t\t * @typedef {Object} XRConfig\n\t\t * @property {boolean} enabled - Whether to globally enable XR or not.\n\t\t */\n\n\t\t/**\n\t\t * The renderer's XR manager.\n\t\t *\n\t\t * @type {XRManager}\n\t\t */\n\t\tthis.xr = new XRManager( this, multiview );\n\n\t\t/**\n\t\t * Debug configuration.\n\t\t * @typedef {Object} DebugConfig\n\t\t * @property {boolean} checkShaderErrors - Whether shader errors should be checked or not.\n\t\t * @property {?Function} onShaderError - A callback function that is executed when a shader error happens. Only supported with WebGL 2 right now.\n\t\t * @property {Function} getShaderAsync - Allows the get the raw shader code for the given scene, camera and 3D object.\n\t\t */\n\n\t\t/**\n\t\t * The renderer's debug configuration.\n\t\t *\n\t\t * @type {DebugConfig}\n\t\t */\n\t\tthis.debug = {\n\t\t\tcheckShaderErrors: true,\n\t\t\tonShaderError: null,\n\t\t\tgetShaderAsync: async ( scene, camera, object ) => {\n\n\t\t\t\tawait this.compileAsync( scene, camera );\n\n\t\t\t\tconst renderList = this._renderLists.get( scene, camera );\n\t\t\t\tconst renderContext = this._renderContexts.get( this._renderTarget, this._mrt );\n\n\t\t\t\tconst material = scene.overrideMaterial || object.material;\n\n\t\t\t\tconst renderObject = this._objects.get( object, material, scene, camera, renderList.lightsNode, renderContext, renderContext.clippingContext );\n\n\t\t\t\tconst { fragmentShader, vertexShader } = renderObject.getNodeBuilderState();\n\n\t\t\t\treturn { fragmentShader, vertexShader };\n\n\t\t\t}\n\t\t};\n\n\t}\n\n\t/**\n\t * Initializes the renderer so it is ready for usage.\n\t *\n\t * @async\n\t * @return {Promise<this>} A Promise that resolves when the renderer has been initialized.\n\t */\n\tasync init() {\n\n\t\tif ( this._initPromise !== null ) {\n\n\t\t\treturn this._initPromise;\n\n\t\t}\n\n\t\tthis._initPromise = new Promise( async ( resolve, reject ) => {\n\n\t\t\tlet backend = this.backend;\n\n\t\t\ttry {\n\n\t\t\t\tawait backend.init( this );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( this._getFallback !== null ) {\n\n\t\t\t\t\t// try the fallback\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tthis.backend = backend = this._getFallback( error );\n\t\t\t\t\t\tawait backend.init( this );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\treject( error );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\treject( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._nodes = new NodeManager( this, backend );\n\t\t\tthis._animation = new Animation( this, this._nodes, this.info );\n\t\t\tthis._attributes = new Attributes( backend, this.info );\n\t\t\tthis._background = new Background( this, this._nodes );\n\t\t\tthis._geometries = new Geometries( this._attributes, this.info );\n\t\t\tthis._textures = new Textures( this, backend, this.info );\n\t\t\tthis._pipelines = new Pipelines( backend, this._nodes, this.info );\n\t\t\tthis._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this.info );\n\t\t\tthis._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this.info );\n\t\t\tthis._renderLists = new RenderLists( this.lighting );\n\t\t\tthis._bundles = new RenderBundles();\n\t\t\tthis._renderContexts = new RenderContexts( this );\n\n\t\t\t//\n\n\t\t\tthis._animation.start();\n\t\t\tthis._initialized = true;\n\n\t\t\t//\n\n\t\t\tthis._inspector.init();\n\n\t\t\t//\n\n\t\t\tresolve( this );\n\n\t\t} );\n\n\t\treturn this._initPromise;\n\n\t}\n\n\t/**\n\t * A reference to the canvas element the renderer is drawing to.\n\t * This value of this property will automatically be created by\n\t * the renderer.\n\t *\n\t * @type {HTMLCanvasElement|OffscreenCanvas}\n\t */\n\tget domElement() {\n\n\t\treturn this._canvasTarget.domElement;\n\n\t}\n\n\t/**\n\t * The coordinate system of the renderer. The value of this property\n\t * depends on the selected backend. Either `THREE.WebGLCoordinateSystem` or\n\t * `THREE.WebGPUCoordinateSystem`.\n\t *\n\t * @readonly\n\t * @type {number}\n\t */\n\tget coordinateSystem() {\n\n\t\treturn this.backend.coordinateSystem;\n\n\t}\n\n\t/**\n\t * Compiles all materials in the given scene. This can be useful to avoid a\n\t * phenomenon which is called \"shader compilation stutter\", which occurs when\n\t * rendering an object with a new shader for the first time.\n\t *\n\t * If you want to add a 3D object to an existing scene, use the third optional\n\t * parameter for applying the target scene. Note that the (target) scene's lighting\n\t * and environment must be configured before calling this method.\n\t *\n\t * @async\n\t * @param {Object3D} scene - The scene or 3D object to precompile.\n\t * @param {Camera} camera - The camera that is used to render the scene.\n\t * @param {?Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.\n\t * @return {Promise} A Promise that resolves when the compile has been finished.\n\t */\n\tasync compileAsync( scene, camera, targetScene = null ) {\n\n\t\tif ( this._isDeviceLost === true ) return;\n\n\t\tif ( this._initialized === false ) await this.init();\n\n\t\t// preserve render tree\n\n\t\tconst nodeFrame = this._nodes.nodeFrame;\n\n\t\tconst previousRenderId = nodeFrame.renderId;\n\t\tconst previousRenderContext = this._currentRenderContext;\n\t\tconst previousRenderObjectFunction = this._currentRenderObjectFunction;\n\t\tconst previousHandleObjectFunction = this._handleObjectFunction;\n\t\tconst previousCompilationPromises = this._compilationPromises;\n\n\t\t//\n\n\t\tif ( targetScene === null ) targetScene = scene;\n\n\t\t// Use the actual scene for caching when compiling individual objects\n\t\t// This ensures cache keys match between compileAsync and render\n\t\tconst sceneRef = ( scene.isScene === true ) ? scene : ( targetScene.isScene === true ) ? targetScene : _scene;\n\n\t\t// Match render()'s logic: use frameBufferTarget when needsFrameBufferTarget is true\n\t\tconst useFrameBufferTarget = this.needsFrameBufferTarget && this._renderTarget === null;\n\t\tconst renderTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : ( this._renderTarget || this._outputRenderTarget );\n\t\tconst renderContext = this._renderContexts.get( renderTarget, this._mrt );\n\t\tconst activeMipmapLevel = this._activeMipmapLevel;\n\n\t\tconst compilationPromises = [];\n\n\t\tthis._currentRenderContext = renderContext;\n\t\tthis._currentRenderObjectFunction = this.renderObject;\n\n\t\tthis._handleObjectFunction = this._createObjectPipeline;\n\n\t\tthis._compilationPromises = compilationPromises;\n\n\t\tnodeFrame.renderId ++;\n\n\t\t//\n\n\t\tnodeFrame.update();\n\n\t\t//\n\n\t\trenderContext.depth = this.depth;\n\t\trenderContext.stencil = this.stencil;\n\n\t\tif ( ! renderContext.clippingContext ) renderContext.clippingContext = new ClippingContext();\n\t\trenderContext.clippingContext.updateGlobal( sceneRef, camera );\n\n\t\t//\n\n\t\tsceneRef.onBeforeRender( this, scene, camera, renderTarget );\n\n\t\t//\n\n\t\t// Use sceneRef for render list to ensure lightsNode matches between compileAsync and render\n\t\tconst renderList = this._renderLists.get( sceneRef, camera );\n\t\trenderList.begin();\n\n\t\tthis._projectObject( scene, camera, 0, renderList, renderContext.clippingContext );\n\n\t\t// include lights from target scene\n\t\tif ( targetScene !== scene ) {\n\n\t\t\ttargetScene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\trenderList.pushLight( object );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\trenderList.finish();\n\n\t\t//\n\n\t\tif ( renderTarget !== null ) {\n\n\t\t\tthis._textures.updateRenderTarget( renderTarget, activeMipmapLevel );\n\n\t\t\tconst renderTargetData = this._textures.get( renderTarget );\n\n\t\t\trenderContext.textures = renderTargetData.textures;\n\t\t\trenderContext.depthTexture = renderTargetData.depthTexture;\n\n\t\t} else {\n\n\t\t\trenderContext.textures = null;\n\t\t\trenderContext.depthTexture = null;\n\n\t\t}\n\n\t\t//\n\n\t\tif ( targetScene !== scene ) {\n\n\t\t\tthis._background.update( targetScene, renderList, renderContext );\n\n\t\t} else {\n\n\t\t\tthis._background.update( sceneRef, renderList, renderContext );\n\n\t\t}\n\n\t\t// process render lists - _createObjectPipeline will push async promises to _compilationPromises\n\n\t\tconst opaqueObjects = renderList.opaque;\n\t\tconst transparentObjects = renderList.transparent;\n\t\tconst transparentDoublePassObjects = renderList.transparentDoublePass;\n\t\tconst lightsNode = renderList.lightsNode;\n\n\t\tif ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );\n\t\tif ( this.transparent === true && transparentObjects.length > 0 ) this._renderTransparents( transparentObjects, transparentDoublePassObjects, camera, sceneRef, lightsNode );\n\n\t\t// restore render tree\n\n\t\tnodeFrame.renderId = previousRenderId;\n\n\t\tthis._currentRenderContext = previousRenderContext;\n\t\tthis._currentRenderObjectFunction = previousRenderObjectFunction;\n\t\tthis._handleObjectFunction = previousHandleObjectFunction;\n\t\tthis._compilationPromises = previousCompilationPromises;\n\n\t\t// Process compilation work items sequentially to avoid freezing\n\t\t// Yields between objects to keep animation smooth\n\n\t\tfor ( const item of compilationPromises ) {\n\n\t\t\tconst renderObject = this._objects.get( item.object, item.material, item.scene, item.camera, item.lightsNode, item.renderContext, item.clippingContext, item.passId );\n\t\t\trenderObject.drawRange = item.object.geometry.drawRange;\n\t\t\trenderObject.group = item.group;\n\n\t\t\tthis._geometries.updateForRender( renderObject );\n\n\t\t\t// Use async node building to yield to main thread\n\t\t\tawait this._nodes.getForRenderAsync( renderObject );\n\n\t\t\tthis._nodes.updateBefore( renderObject );\n\t\t\tthis._nodes.updateForRender( renderObject );\n\t\t\tthis._bindings.updateForRender( renderObject );\n\n\t\t\t// Wait for pipeline creation\n\t\t\tconst pipelinePromises = [];\n\t\t\tthis._pipelines.getForRender( renderObject, pipelinePromises );\n\t\t\tif ( pipelinePromises.length > 0 ) {\n\n\t\t\t\tawait Promise.all( pipelinePromises );\n\n\t\t\t}\n\n\t\t\tthis._nodes.updateAfter( renderObject );\n\n\t\t\t// Yield between objects to allow animation frames\n\t\t\tawait yieldToMain();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Renders the scene in an async fashion.\n\t *\n\t * @async\n\t * @deprecated\n\t * @param {Object3D} scene - The scene or 3D object to render.\n\t * @param {Camera} camera - The camera.\n\t * @return {Promise} A Promise that resolves when the render has been finished.\n\t */\n\tasync renderAsync( scene, camera ) {\n\n\t\twarnOnce( 'Renderer: \"renderAsync()\" has been deprecated. Use \"render()\" and \"await renderer.init();\" when creating the renderer.' ); // @deprecated r181\n\n\t\tawait this.init();\n\n\t\tthis.render( scene, camera );\n\n\t}\n\n\t/**\n\t * Can be used to synchronize CPU operations with GPU tasks. So when this method is called,\n\t * the CPU waits for the GPU to complete its operation (e.g. a compute task).\n\t *\n\t * @async\n\t * @deprecated\n\t * @return {Promise} A Promise that resolves when synchronization has been finished.\n\t */\n\tasync waitForGPU() {\n\n\t\terror( 'Renderer: waitForGPU() has been removed. Read https://github.com/mrdoob/three.js/issues/32012 for more information.' );\n\n\t}\n\n\t//\n\n\tset inspector( value ) {\n\n\t\tif ( this._inspector !== null ) {\n\n\t\t\tthis._inspector.setRenderer( null );\n\n\t\t}\n\n\t\tthis._inspector = value;\n\t\tthis._inspector.setRenderer( this );\n\n\t}\n\n\t/**\n\t * The inspector instance. The inspector can be any class that extends from `InspectorBase`.\n\t *\n\t * @type {InspectorBase}\n\t */\n\tget inspector() {\n\n\t\treturn this._inspector;\n\n\t}\n\n\t/**\n\t * Enables or disables high precision for model-view and normal-view matrices.\n\t * When enabled, will use CPU 64-bit precision for higher precision instead of GPU 32-bit for higher performance.\n\t *\n\t * NOTE: 64-bit precision is not compatible with `InstancedMesh` and `SkinnedMesh`.\n\t *\n\t * @param {boolean} value - Whether to enable or disable high precision.\n\t * @type {boolean}\n\t */\n\tset highPrecision( value ) {\n\n\t\tconst contextNodeData = this.contextNode.value;\n\n\t\tif ( value === true ) {\n\n\t\t\tcontextNodeData.modelViewMatrix = highpModelViewMatrix;\n\t\t\tcontextNodeData.modelNormalViewMatrix = highpModelNormalViewMatrix;\n\n\t\t} else if ( this.highPrecision ) {\n\n\t\t\tdelete contextNodeData.modelViewMatrix;\n\t\t\tdelete contextNodeData.modelNormalViewMatrix;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns whether high precision is enabled or not.\n\t *\n\t * @return {boolean} Whether high precision is enabled or not.\n\t * @type {boolean}\n\t */\n\tget highPrecision() {\n\n\t\tconst contextNodeData = this.contextNode.value;\n\n\t\treturn contextNodeData.modelViewMatrix === highpModelViewMatrix && contextNodeData.modelNormalViewMatrix === highpModelNormalViewMatrix;\n\n\t}\n\n\t/**\n\t * Sets the given MRT configuration.\n\t *\n\t * @param {MRTNode} mrt - The MRT node to set.\n\t * @return {Renderer} A reference to this renderer.\n\t */\n\tsetMRT( mrt ) {\n\n\t\tthis._mrt = mrt;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the MRT configuration.\n\t *\n\t * @return {MRTNode} The MRT configuration.\n\t */\n\tgetMRT() {\n\n\t\treturn this._mrt;\n\n\t}\n\n\t/**\n\t * Returns the output buffer type.\n\t *\n\t * @return {number} The output buffer type.\n\t */\n\tgetOutputBufferType() {\n\n\t\treturn this._outputBufferType;\n\n\t}\n\n\t/**\n\t * Returns the output buffer type.\n\t *\n\t * @deprecated since r182. Use `.getOutputBufferType()` instead.\n\t * @return {number} The output buffer type.\n\t */\n\tgetColorBufferType() { // @deprecated, r182\n\n\t\twarnOnce( 'Renderer: \".getColorBufferType()\" has been renamed to \".getOutputBufferType()\".' );\n\n\t\treturn this.getOutputBufferType();\n\n\t}\n\n\t/**\n\t * Default implementation of the device lost callback.\n\t *\n\t * @private\n\t * @param {Object} info - Information about the context lost.\n\t */\n\t_onDeviceLost( info ) {\n\n\t\tlet errorMessage = `THREE.WebGPURenderer: ${info.api} Device Lost:\\n\\nMessage: ${info.message}`;\n\n\t\tif ( info.reason ) {\n\n\t\t\terrorMessage += `\\nReason: ${info.reason}`;\n\n\t\t}\n\n\t\terror( errorMessage );\n\n\t\tthis._isDeviceLost = true;\n\n\t}\n\n\t/**\n\t * Renders the given render bundle.\n\t *\n\t * @private\n\t * @param {Object} bundle - Render bundle data.\n\t * @param {Scene} sceneRef - The scene the render bundle belongs to.\n\t * @param {LightsNode} lightsNode - The lights node.\n\t */\n\t_renderBundle( bundle, sceneRef, lightsNode ) {\n\n\t\tconst { bundleGroup, camera, renderList } = bundle;\n\n\t\tconst renderContext = this._currentRenderContext;\n\n\t\t//\n\n\t\tconst renderBundle = this._bundles.get( bundleGroup, camera, renderContext );\n\t\tconst renderBundleData = this.backend.get( renderBundle );\n\n\t\tconst needsUpdate = bundleGroup.version !== renderBundleData.version;\n\t\tconst renderBundleNeedsUpdate = needsUpdate || renderBundleData.bundleGPU === undefined;\n\n\t\tif ( renderBundleNeedsUpdate ) {\n\n\t\t\tthis.backend.beginBundle( renderContext );\n\n\t\t\tif ( renderBundleData.renderObjects === undefined || needsUpdate ) {\n\n\t\t\t\trenderBundleData.renderObjects = [];\n\n\t\t\t}\n\n\t\t\tthis._currentRenderBundle = renderBundle;\n\n\t\t\tconst {\n\t\t\t\ttransparentDoublePass: transparentDoublePassObjects,\n\t\t\t\ttransparent: transparentObjects,\n\t\t\t\topaque: opaqueObjects\n\t\t\t} = renderList;\n\n\t\t\tif ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );\n\t\t\tif ( this.transparent === true && transparentObjects.length > 0 ) this._renderTransparents( transparentObjects, transparentDoublePassObjects, camera, sceneRef, lightsNode );\n\n\t\t\tthis._currentRenderBundle = null;\n\n\t\t\t//\n\n\t\t\tthis.backend.finishBundle( renderContext, renderBundle );\n\n\t\t\trenderBundleData.version = bundleGroup.version;\n\n\t\t} else {\n\n\t\t\tconst { renderObjects } = renderBundleData;\n\n\t\t\tfor ( let i = 0, l = renderObjects.length; i < l; i ++ ) {\n\n\t\t\t\tconst renderObject = renderObjects[ i ];\n\n\t\t\t\tif ( this._nodes.needsRefresh( renderObject ) ) {\n\n\t\t\t\t\tthis._nodes.updateBefore( renderObject );\n\n\t\t\t\t\tthis._nodes.updateForRender( renderObject );\n\t\t\t\t\tthis._bindings.updateForRender( renderObject );\n\n\t\t\t\t\tthis._nodes.updateAfter( renderObject );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.backend.addBundle( renderContext, renderBundle );\n\n\t}\n\n\t/**\n\t * Renders the scene or 3D object with the given camera. This method can only be called\n\t * if the renderer has been initialized. When using `render()` inside an animation loop,\n\t * it's guaranteed the renderer will be initialized. The animation loop must be defined\n\t * with {@link Renderer#setAnimationLoop} though.\n\t *\n\t * For all other use cases (like when using on-demand rendering), you must call\n\t * {@link Renderer#init} before rendering.\n\t *\n\t * The target of the method is the default framebuffer (meaning the canvas)\n\t * or alternatively a render target when specified via `setRenderTarget()`.\n\t *\n\t * @param {Object3D} scene - The scene or 3D object to render.\n\t * @param {Camera} camera - The camera to render the scene with.\n\t */\n\trender( scene, camera ) {\n\n\t\tif ( this._initialized === false ) {\n\n\t\t\tthrow new Error( 'Renderer: .render() called before the backend is initialized. Use \"await renderer.init();\" before rendering.' );\n\n\t\t}\n\n\t\tthis._renderScene( scene, camera );\n\n\t}\n\n\t/**\n\t * Returns whether the renderer has been initialized or not.\n\t *\n\t * @readonly\n\t * @return {boolean} Whether the renderer has been initialized or not.\n\t */\n\tget initialized() {\n\n\t\treturn this._initialized;\n\n\t}\n\n\t/**\n\t * Returns an internal render target which is used when computing the output tone mapping\n\t * and color space conversion. Unlike in `WebGLRenderer`, this is done in a separate render\n\t * pass and not inline to achieve more correct results.\n\t *\n\t * @private\n\t * @return {?RenderTarget} The render target. The method returns `null` if no output conversion should be applied.\n\t */\n\t_getFrameBufferTarget() {\n\n\t\tconst { currentToneMapping, currentColorSpace } = this;\n\n\t\tconst useToneMapping = currentToneMapping !== NoToneMapping;\n\t\tconst useColorSpace = currentColorSpace !== ColorManagement.workingColorSpace;\n\n\t\tif ( useToneMapping === false && useColorSpace === false ) return null;\n\n\t\tconst { width, height } = this.getDrawingBufferSize( _drawingBufferSize );\n\t\tconst { depth, stencil } = this;\n\n\t\t// TODO: Unify CanvasTarget and OutputRenderTarget\n\t\tconst target = this._outputRenderTarget || this._canvasTarget;\n\n\t\tlet frameBufferTarget = this._frameBufferTargets.get( target );\n\n\t\tif ( frameBufferTarget === undefined ) {\n\n\t\t\tframeBufferTarget = new RenderTarget( width, height, {\n\t\t\t\tdepthBuffer: depth,\n\t\t\t\tstencilBuffer: stencil,\n\t\t\t\ttype: this._outputBufferType,\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\tcolorSpace: ColorManagement.workingColorSpace,\n\t\t\t\tgenerateMipmaps: false,\n\t\t\t\tminFilter: LinearFilter,\n\t\t\t\tmagFilter: LinearFilter,\n\t\t\t\tsamples: this.samples\n\t\t\t} );\n\n\t\t\tframeBufferTarget.isPostProcessingRenderTarget = true;\n\n\t\t\tconst dispose = () => {\n\n\t\t\t\ttarget.removeEventListener( 'dispose', dispose );\n\n\t\t\t\tframeBufferTarget.dispose();\n\n\t\t\t\tthis._frameBufferTargets.delete( target );\n\n\t\t\t};\n\n\t\t\ttarget.addEventListener( 'dispose', dispose );\n\n\t\t\tthis._frameBufferTargets.set( target, frameBufferTarget );\n\n\t\t}\n\n\t\tconst outputRenderTarget = this.getOutputRenderTarget();\n\n\t\tframeBufferTarget.depthBuffer = depth;\n\t\tframeBufferTarget.stencilBuffer = stencil;\n\n\t\tif ( outputRenderTarget !== null ) {\n\n\t\t\tframeBufferTarget.setSize( outputRenderTarget.width, outputRenderTarget.height, outputRenderTarget.depth );\n\n\t\t} else {\n\n\t\t\tframeBufferTarget.setSize( width, height, 1 );\n\n\t\t}\n\n\t\t// RenderTarget || CanvasTarget\n\n\t\tconst viewport = this._outputRenderTarget ? this._outputRenderTarget.viewport : target._viewport;\n\t\tconst scissor = this._outputRenderTarget ? this._outputRenderTarget.scissor : target._scissor;\n\t\tconst pixelRatio = this._outputRenderTarget ? 1 : target._pixelRatio;\n\t\tconst scissorTest = this._outputRenderTarget ? this._outputRenderTarget.scissorTest : target._scissorTest;\n\n\t\tframeBufferTarget.viewport.copy( viewport );\n\t\tframeBufferTarget.scissor.copy( scissor );\n\t\tframeBufferTarget.viewport.multiplyScalar( pixelRatio );\n\t\tframeBufferTarget.scissor.multiplyScalar( pixelRatio );\n\t\tframeBufferTarget.scissorTest = scissorTest;\n\t\tframeBufferTarget.multiview = outputRenderTarget !== null ? outputRenderTarget.multiview : false;\n\t\tframeBufferTarget.resolveDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveDepthBuffer : true;\n\t\tframeBufferTarget._autoAllocateDepthBuffer = outputRenderTarget !== null ? outputRenderTarget._autoAllocateDepthBuffer : false;\n\n\t\treturn frameBufferTarget;\n\n\t}\n\n\t/**\n\t * Renders the scene or 3D object with the given camera.\n\t *\n\t * @private\n\t * @param {Object3D} scene - The scene or 3D object to render.\n\t * @param {Camera} camera - The camera to render the scene with.\n\t * @param {boolean} [useFrameBufferTarget=true] - Whether to use a framebuffer target or not.\n\t * @return {RenderContext} The current render context.\n\t */\n\t_renderScene( scene, camera, useFrameBufferTarget = true ) {\n\n\t\tif ( this._isDeviceLost === true ) return;\n\n\t\t//\n\n\t\tconst frameBufferTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : null;\n\n\t\t// preserve render tree\n\n\t\tconst nodeFrame = this._nodes.nodeFrame;\n\n\t\tconst previousRenderId = nodeFrame.renderId;\n\t\tconst previousRenderContext = this._currentRenderContext;\n\t\tconst previousRenderObjectFunction = this._currentRenderObjectFunction;\n\t\tconst previousHandleObjectFunction = this._handleObjectFunction;\n\n\t\t//\n\n\t\tthis._callDepth ++;\n\n\t\tconst sceneRef = ( scene.isScene === true ) ? scene : _scene;\n\n\t\tconst outputRenderTarget = this._renderTarget || this._outputRenderTarget;\n\n\t\tconst activeCubeFace = this._activeCubeFace;\n\t\tconst activeMipmapLevel = this._activeMipmapLevel;\n\n\t\t//\n\n\t\tlet renderTarget;\n\n\t\tif ( frameBufferTarget !== null ) {\n\n\t\t\trenderTarget = frameBufferTarget;\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\n\t\t} else {\n\n\t\t\trenderTarget = outputRenderTarget;\n\n\t\t}\n\n\t\t// make sure a new render target has correct default depth values\n\n\t\tif ( renderTarget !== null && renderTarget.depthBuffer === true ) {\n\n\t\t\tconst renderTargetData = this._textures.get( renderTarget );\n\n\t\t\tif ( renderTargetData.depthInitialized !== true ) {\n\n\t\t\t\t// we need a single manual clear if auto clear depth is disabled\n\n\t\t\t\tif ( this.autoClear === false || ( this.autoClear === true && this.autoClearDepth === false ) ) {\n\n\t\t\t\t\tthis.clearDepth();\n\n\t\t\t\t}\n\n\t\t\t\trenderTargetData.depthInitialized = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst renderContext = this._renderContexts.get( renderTarget, this._mrt, this._callDepth );\n\n\t\tthis._currentRenderContext = renderContext;\n\t\tthis._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject;\n\t\tthis._handleObjectFunction = this._renderObjectDirect;\n\n\t\t//\n\n\t\tthis.info.calls ++;\n\t\tthis.info.render.calls ++;\n\t\tthis.info.render.frameCalls ++;\n\n\t\tnodeFrame.renderId = this.info.calls;\n\n\t\t//\n\n\t\tthis.backend.updateTimeStampUID( renderContext );\n\n\t\tthis.inspector.beginRender( this.backend.getTimestampUID( renderContext ), scene, camera, renderTarget );\n\n\t\t//\n\n\n\t\tconst xr = this.xr;\n\n\t\tif ( xr.isPresenting === false ) {\n\n\t\t\tlet projectionMatrixNeedsUpdate = false;\n\n\t\t\t// reversed depth\n\n\t\t\tif ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {\n\n\t\t\t\tcamera._reversedDepth = true;\n\n\t\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t\tfor ( const subCamera of camera.cameras ) {\n\n\t\t\t\t\t\tsubCamera._reversedDepth = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tprojectionMatrixNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t\t// WebGPU/WebGL coordinate system\n\n\t\t\tconst coordinateSystem = this.coordinateSystem;\n\n\t\t\tif ( camera.coordinateSystem !== coordinateSystem ) {\n\n\t\t\t\tcamera.coordinateSystem = coordinateSystem;\n\n\t\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t\tfor ( const subCamera of camera.cameras ) {\n\n\t\t\t\t\t\tsubCamera.coordinateSystem = coordinateSystem;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tprojectionMatrixNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t\t// camera update\n\n\t\t\tif ( projectionMatrixNeedsUpdate === true ) {\n\n\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t\tfor ( const subCamera of camera.cameras ) {\n\n\t\t\t\t\t\tsubCamera.updateProjectionMatrix();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t}\n\n\t\t//\n\n\t\tconst canvasTarget = this._canvasTarget;\n\n\t\tlet viewport = canvasTarget._viewport;\n\t\tlet scissor = canvasTarget._scissor;\n\t\tlet pixelRatio = canvasTarget._pixelRatio;\n\n\t\tif ( renderTarget !== null ) {\n\n\t\t\tviewport = renderTarget.viewport;\n\t\t\tscissor = renderTarget.scissor;\n\t\t\tpixelRatio = 1;\n\n\t\t}\n\n\t\tthis.getDrawingBufferSize( _drawingBufferSize );\n\n\t\t_screen.set( 0, 0, _drawingBufferSize.width, _drawingBufferSize.height );\n\n\t\tconst minDepth = ( viewport.minDepth === undefined ) ? 0 : viewport.minDepth;\n\t\tconst maxDepth = ( viewport.maxDepth === undefined ) ? 1 : viewport.maxDepth;\n\n\t\trenderContext.viewportValue.copy( viewport ).multiplyScalar( pixelRatio ).floor();\n\t\trenderContext.viewportValue.width >>= activeMipmapLevel;\n\t\trenderContext.viewportValue.height >>= activeMipmapLevel;\n\t\trenderContext.viewportValue.minDepth = minDepth;\n\t\trenderContext.viewportValue.maxDepth = maxDepth;\n\t\trenderContext.viewport = renderContext.viewportValue.equals( _screen ) === false;\n\n\t\trenderContext.scissorValue.copy( scissor ).multiplyScalar( pixelRatio ).floor();\n\t\trenderContext.scissor = canvasTarget._scissorTest && renderContext.scissorValue.equals( _screen ) === false;\n\t\trenderContext.scissorValue.width >>= activeMipmapLevel;\n\t\trenderContext.scissorValue.height >>= activeMipmapLevel;\n\n\t\tif ( ! renderContext.clippingContext ) renderContext.clippingContext = new ClippingContext();\n\t\trenderContext.clippingContext.updateGlobal( sceneRef, camera );\n\n\t\t//\n\n\t\tsceneRef.onBeforeRender( this, scene, camera, renderTarget );\n\n\t\t//\n\n\t\tconst frustum = camera.isArrayCamera ? _frustumArray : _frustum;\n\n\t\tif ( ! camera.isArrayCamera ) {\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\tfrustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );\n\n\t\t}\n\n\t\tconst renderList = this._renderLists.get( scene, camera );\n\t\trenderList.begin();\n\n\t\tthis._projectObject( scene, camera, 0, renderList, renderContext.clippingContext );\n\n\t\trenderList.finish();\n\n\t\tif ( this.sortObjects === true ) {\n\n\t\t\trenderList.sort( this._opaqueSort, this._transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( renderTarget !== null ) {\n\n\t\t\tthis._textures.updateRenderTarget( renderTarget, activeMipmapLevel );\n\n\t\t\tconst renderTargetData = this._textures.get( renderTarget );\n\n\t\t\trenderContext.textures = renderTargetData.textures;\n\t\t\trenderContext.depthTexture = renderTargetData.depthTexture;\n\t\t\trenderContext.width = renderTargetData.width;\n\t\t\trenderContext.height = renderTargetData.height;\n\t\t\trenderContext.renderTarget = renderTarget;\n\t\t\trenderContext.depth = renderTarget.depthBuffer;\n\t\t\trenderContext.stencil = renderTarget.stencilBuffer;\n\n\t\t} else {\n\n\t\t\trenderContext.textures = null;\n\t\t\trenderContext.depthTexture = null;\n\t\t\trenderContext.width = _drawingBufferSize.width;\n\t\t\trenderContext.height = _drawingBufferSize.height;\n\t\t\trenderContext.depth = this.depth;\n\t\t\trenderContext.stencil = this.stencil;\n\n\t\t}\n\n\t\trenderContext.width >>= activeMipmapLevel;\n\t\trenderContext.height >>= activeMipmapLevel;\n\t\trenderContext.activeCubeFace = activeCubeFace;\n\t\trenderContext.activeMipmapLevel = activeMipmapLevel;\n\t\trenderContext.occlusionQueryCount = renderList.occlusionQueryCount;\n\n\t\t//\n\n\t\trenderContext.scissorValue.max( _vector4.set( 0, 0, 0, 0 ) );\n\n\t\tif ( renderContext.scissorValue.x + renderContext.scissorValue.width > renderContext.width ) {\n\n\t\t\trenderContext.scissorValue.width = Math.max( renderContext.width - renderContext.scissorValue.x, 0 );\n\n\t\t}\n\n\t\tif ( renderContext.scissorValue.y + renderContext.scissorValue.height > renderContext.height ) {\n\n\t\t\trenderContext.scissorValue.height = Math.max( renderContext.height - renderContext.scissorValue.y, 0 );\n\n\t\t}\n\n\t\t//\n\n\t\tthis._background.update( sceneRef, renderList, renderContext );\n\n\t\t//\n\n\t\trenderContext.camera = camera;\n\t\tthis.backend.beginRender( renderContext );\n\n\t\t// process render lists\n\n\t\tconst {\n\t\t\tbundles,\n\t\t\tlightsNode,\n\t\t\ttransparentDoublePass: transparentDoublePassObjects,\n\t\t\ttransparent: transparentObjects,\n\t\t\topaque: opaqueObjects\n\t\t} = renderList;\n\n\t\tif ( bundles.length > 0 ) this._renderBundles( bundles, sceneRef, lightsNode );\n\t\tif ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );\n\t\tif ( this.transparent === true && transparentObjects.length > 0 ) this._renderTransparents( transparentObjects, transparentDoublePassObjects, camera, sceneRef, lightsNode );\n\n\t\t// finish render pass\n\n\t\tthis.backend.finishRender( renderContext );\n\n\t\t// restore render tree\n\n\t\tnodeFrame.renderId = previousRenderId;\n\n\t\tthis._currentRenderContext = previousRenderContext;\n\t\tthis._currentRenderObjectFunction = previousRenderObjectFunction;\n\t\tthis._handleObjectFunction = previousHandleObjectFunction;\n\n\t\t//\n\n\t\tthis._callDepth --;\n\n\t\tif ( frameBufferTarget !== null ) {\n\n\t\t\tthis.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t\t\tthis._renderOutput( renderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tsceneRef.onAfterRender( this, scene, camera, renderTarget );\n\n\t\t//\n\n\t\tthis.inspector.finishRender( this.backend.getTimestampUID( renderContext ) );\n\n\t\t//\n\n\t\treturn renderContext;\n\n\t}\n\n\t_setXRLayerSize( width, height ) {\n\n\t\t// TODO: Find a better solution to resize the canvas when in XR.\n\n\t\tthis._canvasTarget._width = width;\n\t\tthis._canvasTarget._height = height;\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t}\n\n\t/**\n\t * The output pass performs tone mapping and color space conversion.\n\t *\n\t * @private\n\t * @param {RenderTarget} renderTarget - The current render target.\n\t */\n\t_renderOutput( renderTarget ) {\n\n\t\tconst cacheKey = this._nodes.getOutputCacheKey();\n\n\t\tlet quadData = this._quadCache.get( renderTarget.texture );\n\t\tlet quad;\n\n\t\tif ( quadData === undefined ) {\n\n\t\t\tquad = new QuadMesh( new NodeMaterial() );\n\t\t\tquad.name = 'Output Color Transform';\n\t\t\tquad.material.name = 'outputColorTransform';\n\n\t\t\tquad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );\n\n\t\t\tquadData = {\n\t\t\t\tquad,\n\t\t\t\tcacheKey\n\t\t\t};\n\n\t\t\tthis._quadCache.set( renderTarget.texture, quadData );\n\n\t\t\t// dispose logic\n\n\t\t\tconst dispose = () => {\n\n\t\t\t\tquad.material.dispose();\n\n\t\t\t\tthis._quadCache.delete( renderTarget.texture );\n\n\t\t\t\trenderTarget.texture.removeEventListener( 'dispose', dispose );\n\n\t\t\t};\n\n\t\t\trenderTarget.texture.addEventListener( 'dispose', dispose );\n\n\t\t} else {\n\n\t\t\tquad = quadData.quad;\n\n\t\t\tif ( quadData.cacheKey !== cacheKey ) {\n\n\t\t\t\tquad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );\n\t\t\t\tquad.material.needsUpdate = true;\n\n\t\t\t\tquadData.cacheKey = cacheKey;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// a clear operation clears the intermediate renderTarget texture, but should not update the screen canvas.\n\n\t\tconst currentAutoClear = this.autoClear;\n\t\tconst currentXR = this.xr.enabled;\n\n\t\tthis.autoClear = false;\n\t\tthis.xr.enabled = false;\n\n\t\tthis._renderScene( quad, quad.camera, false );\n\n\t\tthis.autoClear = currentAutoClear;\n\t\tthis.xr.enabled = currentXR;\n\n\n\t}\n\n\t/**\n\t * Returns the maximum available anisotropy for texture filtering.\n\t *\n\t * @return {number} The maximum available anisotropy.\n\t */\n\tgetMaxAnisotropy() {\n\n\t\treturn this.backend.capabilities.getMaxAnisotropy();\n\n\t}\n\n\t/**\n\t * Returns the active cube face.\n\t *\n\t * @return {number} The active cube face.\n\t */\n\tgetActiveCubeFace() {\n\n\t\treturn this._activeCubeFace;\n\n\t}\n\n\t/**\n\t * Returns the active mipmap level.\n\t *\n\t * @return {number} The active mipmap level.\n\t */\n\tgetActiveMipmapLevel() {\n\n\t\treturn this._activeMipmapLevel;\n\n\t}\n\n\t/**\n\t * Applications are advised to always define the animation loop\n\t * with this method and not manually with `requestAnimationFrame()`\n\t * for best compatibility.\n\t *\n\t * @async\n\t * @param {?onAnimationCallback} callback - The application's animation loop.\n\t * @return {Promise} A Promise that resolves when the set has been executed.\n\t */\n\tasync setAnimationLoop( callback ) {\n\n\t\tif ( this._initialized === false ) await this.init();\n\n\t\tthis._animation.setAnimationLoop( callback );\n\n\t}\n\n\t/**\n\t * Returns the current animation loop callback.\n\t *\n\t * @return {?Function} The current animation loop callback.\n\t */\n\tgetAnimationLoop() {\n\n\t\treturn this._animation.getAnimationLoop();\n\n\t}\n\n\t/**\n\t * Can be used to transfer buffer data from a storage buffer attribute\n\t * from the GPU to the CPU in context of compute shaders.\n\t *\n\t * @async\n\t * @param {BufferAttribute} attribute - The storage buffer attribute to read frm.\n\t * @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.\n\t * @param {number} offset - The storage buffer attribute.\n\t * @param {number} count - The offset from which to start reading the\n\t * @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.\n\t */\n\tasync getArrayBufferAsync( attribute, target = null, offset = 0, count = -1 ) {\n\n\t\t// tally the memory for this readback buffer\n\t\tif ( target !== null && target.isReadbackBuffer ) {\n\n\t\t\tif ( this.info.memoryMap.has( target ) === false ) {\n\n\t\t\t\tthis.info.createReadbackBuffer( target );\n\n\t\t\t\tconst disposeInfo = () => {\n\n\t\t\t\t\ttarget.removeEventListener( 'dispose', disposeInfo );\n\n\t\t\t\t\tthis.info.destroyReadbackBuffer( target );\n\n\t\t\t\t};\n\n\t\t\t\ttarget.addEventListener( 'dispose', disposeInfo );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( offset % 4 !== 0 || ( count > 0 && count % 4 !== 0 ) ) {\n\n\t\t\tthrow new Error( 'THREE.Renderer: \"getArrayBufferAsync()\" offset and count must be a multiple of 4.' );\n\n\t\t}\n\n\t\treturn await this.backend.getArrayBufferAsync( attribute, target, offset, count );\n\n\t}\n\n\t/**\n\t * Returns the rendering context.\n\t *\n\t * @return {GPUCanvasContext|WebGL2RenderingContext} The rendering context.\n\t */\n\tgetContext() {\n\n\t\treturn this.backend.getContext();\n\n\t}\n\n\t/**\n\t * Returns the pixel ratio.\n\t *\n\t * @return {number} The pixel ratio.\n\t */\n\tgetPixelRatio() {\n\n\t\treturn this._canvasTarget.getPixelRatio();\n\n\t}\n\n\t/**\n\t * Returns the drawing buffer size in physical pixels. This method honors the pixel ratio.\n\t *\n\t * @param {Vector2} target - The method writes the result in this target object.\n\t * @return {Vector2} The drawing buffer size.\n\t */\n\tgetDrawingBufferSize( target ) {\n\n\t\treturn this._canvasTarget.getDrawingBufferSize( target );\n\n\t}\n\n\t/**\n\t * Returns the renderer's size in logical pixels. This method does not honor the pixel ratio.\n\t *\n\t * @param {Vector2} target - The method writes the result in this target object.\n\t * @return {Vector2} The renderer's size in logical pixels.\n\t */\n\tgetSize( target ) {\n\n\t\treturn this._canvasTarget.getSize( target );\n\n\t}\n\n\t/**\n\t * Sets the given pixel ratio and resizes the canvas if necessary.\n\t *\n\t * @param {number} [value=1] - The pixel ratio.\n\t */\n\tsetPixelRatio( value = 1 ) {\n\n\t\tthis._canvasTarget.setPixelRatio( value );\n\n\t}\n\n\t/**\n\t * This method allows to define the drawing buffer size by specifying\n\t * width, height and pixel ratio all at once. The size of the drawing\n\t * buffer is computed with this formula:\n\t * ```js\n\t * size.x = width * pixelRatio;\n\t * size.y = height * pixelRatio;\n\t * ```\n\t *\n\t * @param {number} width - The width in logical pixels.\n\t * @param {number} height - The height in logical pixels.\n\t * @param {number} pixelRatio - The pixel ratio.\n\t */\n\tsetDrawingBufferSize( width, height, pixelRatio ) {\n\n\t\t// Renderer can't be resized while presenting in XR.\n\t\tif ( this.xr && this.xr.isPresenting ) return;\n\n\t\tthis._canvasTarget.setDrawingBufferSize( width, height, pixelRatio );\n\n\t}\n\n\t/**\n\t * Sets the size of the renderer.\n\t *\n\t * @param {number} width - The width in logical pixels.\n\t * @param {number} height - The height in logical pixels.\n\t * @param {boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.\n\t */\n\tsetSize( width, height, updateStyle = true ) {\n\n\t\t// Renderer can't be resized while presenting in XR.\n\t\tif ( this.xr && this.xr.isPresenting ) return;\n\n\t\tthis._canvasTarget.setSize( width, height, updateStyle );\n\n\t}\n\n\t/**\n\t * Defines a manual sort function for the opaque render list.\n\t * Pass `null` to use the default sort.\n\t *\n\t * @param {Function} method - The sort function.\n\t */\n\tsetOpaqueSort( method ) {\n\n\t\tthis._opaqueSort = method;\n\n\t}\n\n\t/**\n\t * Defines a manual sort function for the transparent render list.\n\t * Pass `null` to use the default sort.\n\t *\n\t * @param {Function} method - The sort function.\n\t */\n\tsetTransparentSort( method ) {\n\n\t\tthis._transparentSort = method;\n\n\t}\n\n\t/**\n\t * Returns the scissor rectangle.\n\t *\n\t * @param {Vector4} target - The method writes the result in this target object.\n\t * @return {Vector4} The scissor rectangle.\n\t */\n\tgetScissor( target ) {\n\n\t\treturn this._canvasTarget.getScissor( target );\n\n\t}\n\n\t/**\n\t * Defines the scissor rectangle.\n\t *\n\t * @param {number | Vector4} x - The horizontal coordinate for the upper left corner of the box in logical pixel unit.\n\t * Instead of passing four arguments, the method also works with a single four-dimensional vector.\n\t * @param {number} y - The vertical coordinate for the upper left corner of the box in logical pixel unit.\n\t * @param {number} width - The width of the scissor box in logical pixel unit.\n\t * @param {number} height - The height of the scissor box in logical pixel unit.\n\t */\n\tsetScissor( x, y, width, height ) {\n\n\t\tthis._canvasTarget.setScissor( x, y, width, height );\n\n\t}\n\n\t/**\n\t * Returns the scissor test value.\n\t *\n\t * @return {boolean} Whether the scissor test should be enabled or not.\n\t */\n\tgetScissorTest() {\n\n\t\treturn this._canvasTarget.getScissorTest();\n\n\t}\n\n\t/**\n\t * Defines the scissor test.\n\t *\n\t * @param {boolean} boolean - Whether the scissor test should be enabled or not.\n\t */\n\tsetScissorTest( boolean ) {\n\n\t\tthis._canvasTarget.setScissorTest( boolean );\n\n\t\t// TODO: Move it to CanvasTarget event listener.\n\n\t\tthis.backend.setScissorTest( boolean );\n\n\t}\n\n\t/**\n\t * Returns the viewport definition.\n\t *\n\t * @param {Vector4} target - The method writes the result in this target object.\n\t * @return {Vector4} The viewport definition.\n\t */\n\tgetViewport( target ) {\n\n\t\treturn this._canvasTarget.getViewport( target );\n\n\t}\n\n\t/**\n\t * Defines the viewport.\n\t *\n\t * @param {number | Vector4} x - The horizontal coordinate for the upper left corner of the viewport origin in logical pixel unit.\n\t * @param {number} y - The vertical coordinate for the upper left corner of the viewport origin in logical pixel unit.\n\t * @param {number} width - The width of the viewport in logical pixel unit.\n\t * @param {number} height - The height of the viewport in logical pixel unit.\n\t * @param {number} minDepth - The minimum depth value of the viewport. WebGPU only.\n\t * @param {number} maxDepth - The maximum depth value of the viewport. WebGPU only.\n\t */\n\tsetViewport( x, y, width, height, minDepth = 0, maxDepth = 1 ) {\n\n\t\tthis._canvasTarget.setViewport( x, y, width, height, minDepth, maxDepth );\n\n\t}\n\n\t/**\n\t * Returns the clear color.\n\t *\n\t * @param {Color} target - The method writes the result in this target object.\n\t * @return {Color} The clear color.\n\t */\n\tgetClearColor( target ) {\n\n\t\treturn target.copy( this._clearColor );\n\n\t}\n\n\t/**\n\t * Defines the clear color and optionally the clear alpha.\n\t *\n\t * @param {Color} color - The clear color.\n\t * @param {number} [alpha=1] - The clear alpha.\n\t */\n\tsetClearColor( color, alpha = 1 ) {\n\n\t\tthis._clearColor.set( color );\n\t\tthis._clearColor.a = alpha;\n\n\t}\n\n\t/**\n\t * Returns the clear alpha.\n\t *\n\t * @return {number} The clear alpha.\n\t */\n\tgetClearAlpha() {\n\n\t\treturn this._clearColor.a;\n\n\t}\n\n\t/**\n\t * Defines the clear alpha.\n\t *\n\t * @param {number} alpha - The clear alpha.\n\t */\n\tsetClearAlpha( alpha ) {\n\n\t\tthis._clearColor.a = alpha;\n\n\t}\n\n\t/**\n\t * Returns the clear depth.\n\t *\n\t * @return {number} The clear depth.\n\t */\n\tgetClearDepth() {\n\n\t\treturn ( this.reversedDepthBuffer === true ) ? 1 - this._clearDepth : this._clearDepth;\n\n\t}\n\n\t/**\n\t * Defines the clear depth.\n\t *\n\t * @param {number} depth - The clear depth.\n\t */\n\tsetClearDepth( depth ) {\n\n\t\tthis._clearDepth = depth;\n\n\t}\n\n\t/**\n\t * Returns the clear stencil.\n\t *\n\t * @return {number} The clear stencil.\n\t */\n\tgetClearStencil() {\n\n\t\treturn this._clearStencil;\n\n\t}\n\n\t/**\n\t * Defines the clear stencil.\n\t *\n\t * @param {number} stencil - The clear stencil.\n\t */\n\tsetClearStencil( stencil ) {\n\n\t\tthis._clearStencil = stencil;\n\n\t}\n\n\t/**\n\t * This method performs an occlusion query for the given 3D object.\n\t * It returns `true` if the given 3D object is fully occluded by other\n\t * 3D objects in the scene.\n\t *\n\t * @param {Object3D} object - The 3D object to test.\n\t * @return {boolean} Whether the 3D object is fully occluded or not.\n\t */\n\tisOccluded( object ) {\n\n\t\tconst renderContext = this._currentRenderContext;\n\n\t\treturn renderContext && this.backend.isOccluded( renderContext, object );\n\n\t}\n\n\t/**\n\t * Performs a manual clear operation. This method ignores `autoClear` properties.\n\t *\n\t * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.\n\t * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.\n\t * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.\n\t */\n\tclear( color = true, depth = true, stencil = true ) {\n\n\t\tif ( this._initialized === false ) {\n\n\t\t\tthrow new Error( 'Renderer: .clear() called before the backend is initialized. Use \"await renderer.init();\" before before using this method.' );\n\n\t\t}\n\n\t\tconst renderTarget = this._renderTarget || this._getFrameBufferTarget();\n\n\t\tlet renderContext = null;\n\n\t\tif ( renderTarget !== null ) {\n\n\t\t\tthis._textures.updateRenderTarget( renderTarget );\n\n\t\t\tconst renderTargetData = this._textures.get( renderTarget );\n\n\t\t\trenderContext = this._renderContexts.get( renderTarget, null, -1 ); // using - 1 for the call depth to get a render context for the clear operation\n\t\t\trenderContext.textures = renderTargetData.textures;\n\t\t\trenderContext.depthTexture = renderTargetData.depthTexture;\n\t\t\trenderContext.width = renderTargetData.width;\n\t\t\trenderContext.height = renderTargetData.height;\n\t\t\trenderContext.renderTarget = renderTarget;\n\t\t\trenderContext.depth = renderTarget.depthBuffer;\n\t\t\trenderContext.stencil = renderTarget.stencilBuffer;\n\t\t\t// #30329\n\t\t\tconst color = this.backend.getClearColor();\n\t\t\trenderContext.clearColorValue.r = color.r;\n\t\t\trenderContext.clearColorValue.g = color.g;\n\t\t\trenderContext.clearColorValue.b = color.b;\n\t\t\trenderContext.clearColorValue.a = color.a;\n\t\t\trenderContext.clearDepthValue = this.getClearDepth();\n\t\t\trenderContext.clearStencilValue = this.getClearStencil();\n\t\t\trenderContext.activeCubeFace = this.getActiveCubeFace();\n\t\t\trenderContext.activeMipmapLevel = this.getActiveMipmapLevel();\n\n\t\t\tif ( renderTarget.depthBuffer === true ) renderTargetData.depthInitialized = true;\n\n\t\t}\n\n\t\tthis.backend.clear( color, depth, stencil, renderContext );\n\n\t\tif ( renderTarget !== null && this._renderTarget === null ) {\n\n\t\t\tthis._renderOutput( renderTarget );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Performs a manual clear operation of the color buffer. This method ignores `autoClear` properties.\n\t */\n\tclearColor() {\n\n\t\tthis.clear( true, false, false );\n\n\t}\n\n\t/**\n\t * Performs a manual clear operation of the depth buffer. This method ignores `autoClear` properties.\n\t */\n\tclearDepth() {\n\n\t\tthis.clear( false, true, false );\n\n\t}\n\n\t/**\n\t * Performs a manual clear operation of the stencil buffer. This method ignores `autoClear` properties.\n\t */\n\tclearStencil() {\n\n\t\tthis.clear( false, false, true );\n\n\t}\n\n\t/**\n\t * Async version of {@link Renderer#clear}.\n\t *\n\t * @async\n\t * @deprecated\n\t * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.\n\t * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.\n\t * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.\n\t * @return {Promise} A Promise that resolves when the clear operation has been executed.\n\t */\n\tasync clearAsync( color = true, depth = true, stencil = true ) {\n\n\t\twarnOnce( 'Renderer: \"clearAsync()\" has been deprecated. Use \"clear()\" and \"await renderer.init();\" when creating the renderer.' ); // @deprecated r181\n\n\t\tawait this.init();\n\n\t\tthis.clear( color, depth, stencil );\n\n\t}\n\n\t/**\n\t * Async version of {@link Renderer#clearColor}.\n\t *\n\t * @async\n\t * @deprecated\n\t * @return {Promise} A Promise that resolves when the clear operation has been executed.\n\t */\n\tasync clearColorAsync() {\n\n\t\twarnOnce( 'Renderer: \"clearColorAsync()\" has been deprecated. Use \"clearColor()\" and \"await renderer.init();\" when creating the renderer.' ); // @deprecated r181\n\n\t\tthis.clear( true, false, false );\n\n\t}\n\n\t/**\n\t * Async version of {@link Renderer#clearDepth}.\n\t *\n\t * @async\n\t * @deprecated\n\t * @return {Promise} A Promise that resolves when the clear operation has been executed.\n\t */\n\tasync clearDepthAsync() {\n\n\t\twarnOnce( 'Renderer: \"clearDepthAsync()\" has been deprecated. Use \"clearDepth()\" and \"await renderer.init();\" when creating the renderer.' ); // @deprecated r181\n\n\t\tthis.clear( false, true, false );\n\n\t}\n\n\t/**\n\t * Async version of {@link Renderer#clearStencil}.\n\t *\n\t * @async\n\t * @deprecated\n\t * @return {Promise} A Promise that resolves when the clear operation has been executed.\n\t */\n\tasync clearStencilAsync() {\n\n\t\twarnOnce( 'Renderer: \"clearStencilAsync()\" has been deprecated. Use \"clearStencil()\" and \"await renderer.init();\" when creating the renderer.' ); // @deprecated r181\n\n\t\tthis.clear( false, false, true );\n\n\t}\n\n\t/**\n\t * Returns `true` if a framebuffer target is needed to perform tone mapping or color space conversion.\n\t * If this is the case, the renderer allocates an internal render target for that purpose.\n\t *\n\t */\n\tget needsFrameBufferTarget() {\n\n\t\tconst useToneMapping = this.currentToneMapping !== NoToneMapping;\n\t\tconst useColorSpace = this.currentColorSpace !== ColorManagement.workingColorSpace;\n\n\t\treturn useToneMapping || useColorSpace;\n\n\t}\n\n\t/**\n\t * The number of samples used for multi-sample anti-aliasing (MSAA).\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget samples() {\n\n\t\treturn this._samples;\n\n\t}\n\n\t/**\n\t * The current number of samples used for multi-sample anti-aliasing (MSAA).\n\t *\n\t * When rendering to a custom render target, the number of samples of that render target is used.\n\t * If the renderer needs an internal framebuffer target for tone mapping or color space conversion,\n\t * the number of samples is set to 0.\n\t *\n\t * @type {number}\n\t */\n\tget currentSamples() {\n\n\t\tlet samples = this._samples;\n\n\t\tif ( this._renderTarget !== null ) {\n\n\t\t\tsamples = this._renderTarget.samples;\n\n\t\t} else if ( this.needsFrameBufferTarget ) {\n\n\t\t\tsamples = 0;\n\n\t\t}\n\n\t\treturn samples;\n\n\t}\n\n\t/**\n\t * The current tone mapping of the renderer. When not producing screen output,\n\t * the tone mapping is always `NoToneMapping`.\n\t *\n\t * @type {number}\n\t */\n\tget currentToneMapping() {\n\n\t\treturn this.isOutputTarget ? this.toneMapping : NoToneMapping;\n\n\t}\n\n\t/**\n\t * The current color space of the renderer. When not producing screen output,\n\t * the color space is always the working color space.\n\t *\n\t * @type {string}\n\t */\n\tget currentColorSpace() {\n\n\t\treturn this.isOutputTarget ? this.outputColorSpace : ColorManagement.workingColorSpace;\n\n\t}\n\n\t/**\n\t * Returns `true` if the rendering settings are set to screen output.\n\t *\n\t * @returns {boolean} True if the current render target is the same of output render target or `null`, otherwise false.\n\t */\n\tget isOutputTarget() {\n\n\t\treturn this._renderTarget === this._outputRenderTarget || this._renderTarget === null;\n\n\t}\n\n\t/**\n\t * Frees all internal resources of the renderer. Call this method if the renderer\n\t * is no longer in use by your app.\n\t */\n\tdispose() {\n\n\t\tif ( this._initialized === true ) {\n\n\t\t\tthis.info.dispose();\n\t\t\tthis.backend.dispose();\n\n\t\t\tthis._animation.dispose();\n\t\t\tthis._objects.dispose();\n\t\t\tthis._geometries.dispose();\n\t\t\tthis._pipelines.dispose();\n\t\t\tthis._nodes.dispose();\n\t\t\tthis._bindings.dispose();\n\t\t\tthis._renderLists.dispose();\n\t\t\tthis._renderContexts.dispose();\n\t\t\tthis._textures.dispose();\n\n\t\t\tfor ( const canvasTarget of this._frameBufferTargets.keys() ) {\n\n\t\t\t\tcanvasTarget.dispose();\n\n\t\t\t}\n\n\t\t\tObject.values( this.backend.timestampQueryPool ).forEach( queryPool => {\n\n\t\t\t\tif ( queryPool !== null ) queryPool.dispose();\n\n\t\t\t} );\n\n\t\t}\n\n\t\tthis.setRenderTarget( null );\n\t\tthis.setAnimationLoop( null );\n\n\t}\n\n\t/**\n\t * Sets the given render target. Calling this method means the renderer does not\n\t * target the default framebuffer (meaning the canvas) anymore but a custom framebuffer.\n\t * Use `null` as the first argument to reset the state.\n\t *\n\t * @param {?RenderTarget} renderTarget - The render target to set.\n\t * @param {number} [activeCubeFace=0] - The active cube face.\n\t * @param {number} [activeMipmapLevel=0] - The active mipmap level.\n\t */\n\tsetRenderTarget( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\tthis._renderTarget = renderTarget;\n\t\tthis._activeCubeFace = activeCubeFace;\n\t\tthis._activeMipmapLevel = activeMipmapLevel;\n\n\t}\n\n\t/**\n\t * Returns the current render target.\n\t *\n\t * @return {?RenderTarget} The render target. Returns `null` if no render target is set.\n\t */\n\tgetRenderTarget() {\n\n\t\treturn this._renderTarget;\n\n\t}\n\n\t/**\n\t * Sets the output render target for the renderer.\n\t *\n\t * @param {?RenderTarget} renderTarget - The render target to set as the output target.\n\t */\n\tsetOutputRenderTarget( renderTarget ) {\n\n\t\tthis._outputRenderTarget = renderTarget;\n\n\t}\n\n\t/**\n\t * Returns the current output target.\n\t *\n\t * @return {?RenderTarget} The current output render target. Returns `null` if no output target is set.\n\t */\n\tgetOutputRenderTarget() {\n\n\t\treturn this._outputRenderTarget;\n\n\t}\n\n\t/**\n\t * Sets the canvas target. The canvas target manages the HTML canvas\n\t * or the offscreen canvas the renderer draws into.\n\t *\n\t * @param {CanvasTarget} canvasTarget - The canvas target.\n\t */\n\tsetCanvasTarget( canvasTarget ) {\n\n\t\tthis._canvasTarget.removeEventListener( 'resize', this._onCanvasTargetResize );\n\n\t\tthis._canvasTarget = canvasTarget;\n\t\tthis._canvasTarget.addEventListener( 'resize', this._onCanvasTargetResize );\n\n\t}\n\n\t/**\n\t * Returns the current canvas target.\n\t *\n\t * @return {CanvasTarget} The current canvas target.\n\t */\n\tgetCanvasTarget() {\n\n\t\treturn this._canvasTarget;\n\n\t}\n\n\t/**\n\t * Resets the renderer to the initial state before WebXR started.\n\t *\n\t * @private\n\t */\n\t_resetXRState() {\n\n\t\tthis.backend.setXRTarget( null );\n\t\tthis.setOutputRenderTarget( null );\n\t\tthis.setRenderTarget( null );\n\n\t\tfor ( const canvasTarget of this._frameBufferTargets.keys() ) {\n\n\t\t\tcanvasTarget.dispose();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Callback for {@link Renderer#setRenderObjectFunction}.\n\t *\n\t * @callback renderObjectFunction\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Scene} scene - The scene the 3D object belongs to.\n\t * @param {Camera} camera - The camera the object should be rendered with.\n\t * @param {BufferGeometry} geometry - The object's geometry.\n\t * @param {Material} material - The object's material.\n\t * @param {?Object} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.\n\t * @param {LightsNode} lightsNode - The current lights node.\n\t * @param {ClippingContext} clippingContext - The clipping context.\n\t * @param {?string} [passId=null] - An optional ID for identifying the pass.\n\t */\n\n\t/**\n\t * Sets the given render object function. Calling this method overwrites the default implementation\n\t * which is {@link Renderer#renderObject}. Defining a custom function can be useful\n\t * if you want to modify the way objects are rendered. For example you can define things like \"every\n\t * object that has material of a certain type should perform a pre-pass with a special overwrite material\".\n\t * The custom function must always call `renderObject()` in its implementation.\n\t *\n\t * Use `null` as the first argument to reset the state.\n\t *\n\t * @param {?renderObjectFunction} renderObjectFunction - The render object function.\n\t */\n\tsetRenderObjectFunction( renderObjectFunction ) {\n\n\t\tthis._renderObjectFunction = renderObjectFunction;\n\n\t}\n\n\t/**\n\t * Returns the current render object function.\n\t *\n\t * @return {?Function} The current render object function. Returns `null` if no function is set.\n\t */\n\tgetRenderObjectFunction() {\n\n\t\treturn this._renderObjectFunction;\n\n\t}\n\n\t/**\n\t * Execute a single or an array of compute nodes. This method can only be called\n\t * if the renderer has been initialized.\n\t *\n\t * @param {Node|Array<Node>} computeNodes - The compute node(s).\n\t * @param {number|Array<number>|IndirectStorageBufferAttribute} [dispatchSize=null]\n\t * - A single number representing count, or\n\t * - An array [x, y, z] representing dispatch size, or\n\t * - A IndirectStorageBufferAttribute for indirect dispatch size.\n\t * @return {Promise|undefined} A Promise that resolve when the compute has finished. Only returned when the renderer has not been initialized.\n\t */\n\tcompute( computeNodes, dispatchSize = null ) {\n\n\t\tif ( this._isDeviceLost === true ) return;\n\n\t\tif ( this._initialized === false ) {\n\n\t\t\twarn( 'Renderer: .compute() called before the backend is initialized. Try using .computeAsync() instead.' );\n\n\t\t\treturn this.computeAsync( computeNodes, dispatchSize );\n\n\t\t}\n\n\t\t//\n\n\t\tconst nodeFrame = this._nodes.nodeFrame;\n\n\t\tconst previousRenderId = nodeFrame.renderId;\n\n\t\t//\n\n\t\tthis.info.calls ++;\n\t\tthis.info.compute.calls ++;\n\t\tthis.info.compute.frameCalls ++;\n\n\t\tnodeFrame.renderId = this.info.calls;\n\n\t\t//\n\n\t\tthis.backend.updateTimeStampUID( computeNodes );\n\n\t\tthis.inspector.beginCompute( this.backend.getTimestampUID( computeNodes ), computeNodes );\n\n\t\t//\n\n\t\tconst backend = this.backend;\n\t\tconst pipelines = this._pipelines;\n\t\tconst bindings = this._bindings;\n\t\tconst nodes = this._nodes;\n\n\t\tconst computeList = Array.isArray( computeNodes ) ? computeNodes : [ computeNodes ];\n\n\t\tif ( computeList[ 0 ] === undefined || computeList[ 0 ].isComputeNode !== true ) {\n\n\t\t\tthrow new Error( 'THREE.Renderer: .compute() expects a ComputeNode.' );\n\n\t\t}\n\n\t\tbackend.beginCompute( computeNodes );\n\n\t\tfor ( const computeNode of computeList ) {\n\n\t\t\t// onInit\n\n\t\t\tif ( pipelines.has( computeNode ) === false ) {\n\n\t\t\t\tconst dispose = () => {\n\n\t\t\t\t\tcomputeNode.removeEventListener( 'dispose', dispose );\n\n\t\t\t\t\tpipelines.delete( computeNode );\n\t\t\t\t\tbindings.deleteForCompute( computeNode );\n\t\t\t\t\tnodes.delete( computeNode );\n\n\t\t\t\t};\n\n\t\t\t\tcomputeNode.addEventListener( 'dispose', dispose );\n\n\t\t\t\t//\n\n\t\t\t\tconst onInitFn = computeNode.onInitFunction;\n\n\t\t\t\tif ( onInitFn !== null ) {\n\n\t\t\t\t\tonInitFn.call( computeNode, { renderer: this } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tnodes.updateForCompute( computeNode );\n\t\t\tbindings.updateForCompute( computeNode );\n\n\t\t\tconst computeBindings = bindings.getForCompute( computeNode );\n\t\t\tconst computePipeline = pipelines.getForCompute( computeNode, computeBindings );\n\n\t\t\tbackend.compute( computeNodes, computeNode, computeBindings, computePipeline, dispatchSize );\n\n\t\t}\n\n\t\tbackend.finishCompute( computeNodes );\n\n\t\t//\n\n\t\tnodeFrame.renderId = previousRenderId;\n\n\t\t//\n\n\t\tthis.inspector.finishCompute( this.backend.getTimestampUID( computeNodes ) );\n\n\t}\n\n\t/**\n\t * Execute a single or an array of compute nodes.\n\t *\n\t * @async\n\t * @param {Node|Array<Node>} computeNodes - The compute node(s).\n\t * @param {number|Array<number>|IndirectStorageBufferAttribute} [dispatchSize=null]\n\t * - A single number representing count, or\n\t * - An array [x, y, z] representing dispatch size, or\n\t * - A IndirectStorageBufferAttribute for indirect dispatch size.\n\t * @return {Promise} A Promise that resolve when the compute has finished.\n\t */\n\tasync computeAsync( computeNodes, dispatchSize = null ) {\n\n\t\tif ( this._initialized === false ) await this.init();\n\n\t\tthis.compute( computeNodes, dispatchSize );\n\n\t}\n\n\t/**\n\t * Checks if the given feature is supported by the selected backend.\n\t *\n\t * @async\n\t * @deprecated\n\t * @param {string} name - The feature's name.\n\t * @return {Promise<boolean>} A Promise that resolves with a bool that indicates whether the feature is supported or not.\n\t */\n\tasync hasFeatureAsync( name ) {\n\n\t\twarnOnce( 'Renderer: \"hasFeatureAsync()\" has been deprecated. Use \"hasFeature()\" and \"await renderer.init();\" when creating the renderer.' ); // @deprecated r181\n\n\t\tawait this.init();\n\n\t\treturn this.hasFeature( name );\n\n\t}\n\n\tasync resolveTimestampsAsync( type = 'render' ) {\n\n\t\tif ( this._initialized === false ) await this.init();\n\n\t\treturn this.backend.resolveTimestampsAsync( type );\n\n\t}\n\n\t/**\n\t * Checks if the given feature is supported by the selected backend. If the\n\t * renderer has not been initialized, this method always returns `false`.\n\t *\n\t * @param {string} name - The feature's name.\n\t * @return {boolean} Whether the feature is supported or not.\n\t */\n\thasFeature( name ) {\n\n\t\tif ( this._initialized === false ) {\n\n\t\t\tthrow new Error( 'Renderer: .hasFeature() called before the backend is initialized. Use \"await renderer.init();\" before before using this method.' );\n\n\t\t}\n\n\t\treturn this.backend.hasFeature( name );\n\n\t}\n\n\t/**\n\t * Returns `true` when the renderer has been initialized.\n\t *\n\t * @return {boolean} Whether the renderer has been initialized or not.\n\t */\n\thasInitialized() {\n\n\t\treturn this._initialized;\n\n\t}\n\n\t/**\n\t * Initializes the given textures. Useful for preloading a texture rather than waiting until first render\n\t * (which can cause noticeable lags due to decode and GPU upload overhead).\n\t *\n\t * @async\n\t * @deprecated\n\t * @param {Texture} texture - The texture.\n\t * @return {Promise} A Promise that resolves when the texture has been initialized.\n\t */\n\tasync initTextureAsync( texture ) {\n\n\t\twarnOnce( 'Renderer: \"initTextureAsync()\" has been deprecated. Use \"initTexture()\" and \"await renderer.init();\" when creating the renderer.' ); // @deprecated r181\n\n\t\tawait this.init();\n\n\t\tthis.initTexture( texture );\n\n\t}\n\n\t/**\n\t * Initializes the given texture. Useful for preloading a texture rather than waiting until first render\n\t * (which can cause noticeable lags due to decode and GPU upload overhead).\n\t *\n\t * This method can only be used if the renderer has been initialized.\n\t *\n\t * @param {Texture} texture - The texture.\n\t */\n\tinitTexture( texture ) {\n\n\t\tif ( this._initialized === false ) {\n\n\t\t\tthrow new Error( 'Renderer: .initTexture() called before the backend is initialized. Use \"await renderer.init();\" before before using this method.' );\n\n\t\t}\n\n\t\tthis._textures.updateTexture( texture );\n\n\t}\n\n\t/**\n\t * Initializes the given render target.\n\t *\n\t * @param {RenderTarget} renderTarget - The render target to intialize.\n\t */\n\tinitRenderTarget( renderTarget ) {\n\n\t\tif ( this._initialized === false ) {\n\n\t\t\tthrow new Error( 'Renderer: .initRenderTarget() called before the backend is initialized. Use \"await renderer.init();\" before before using this method.' );\n\n\t\t}\n\n\t\tthis._textures.updateRenderTarget( renderTarget );\n\n\t\tconst renderTargetData = this._textures.get( renderTarget );\n\n\t\tconst renderContext = this._renderContexts.get( renderTarget );\n\n\t\trenderContext.textures = renderTargetData.textures;\n\t\trenderContext.depthTexture = renderTargetData.depthTexture;\n\t\trenderContext.width = renderTargetData.width;\n\t\trenderContext.height = renderTargetData.height;\n\t\trenderContext.renderTarget = renderTarget;\n\t\trenderContext.depth = renderTarget.depthBuffer;\n\t\trenderContext.stencil = renderTarget.stencilBuffer;\n\n\t\tthis.backend.initRenderTarget( renderContext );\n\n\t}\n\n\t/**\n\t * Copies the current bound framebuffer into the given texture.\n\t *\n\t * @param {FramebufferTexture} framebufferTexture - The texture.\n\t * @param {?(Vector2|Vector4)} [rectangle=null] - A two or four dimensional vector that defines the rectangular portion of the framebuffer that should be copied.\n\t */\n\tcopyFramebufferToTexture( framebufferTexture, rectangle = null ) {\n\n\t\tif ( rectangle !== null ) {\n\n\t\t\tif ( rectangle.isVector2 ) {\n\n\t\t\t\trectangle = _vector4.set( rectangle.x, rectangle.y, framebufferTexture.image.width, framebufferTexture.image.height ).floor();\n\n\t\t\t} else if ( rectangle.isVector4 ) {\n\n\t\t\t\trectangle = _vector4.copy( rectangle ).floor();\n\n\t\t\t} else {\n\n\t\t\t\terror( 'Renderer.copyFramebufferToTexture: Invalid rectangle.' );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trectangle = _vector4.set( 0, 0, framebufferTexture.image.width, framebufferTexture.image.height );\n\n\t\t}\n\n\t\t//\n\n\t\tlet renderContext = this._currentRenderContext;\n\t\tlet renderTarget;\n\n\t\tif ( renderContext !== null ) {\n\n\t\t\trenderTarget = renderContext.renderTarget;\n\n\t\t} else {\n\n\t\t\trenderTarget = this._renderTarget || this._getFrameBufferTarget();\n\n\t\t\tif ( renderTarget !== null ) {\n\n\t\t\t\tthis._textures.updateRenderTarget( renderTarget );\n\n\t\t\t\trenderContext = this._textures.get( renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tthis._textures.updateTexture( framebufferTexture, { renderTarget } );\n\n\t\tthis.backend.copyFramebufferToTexture( framebufferTexture, renderContext, rectangle );\n\n\t\tthis._inspector.copyFramebufferToTexture( framebufferTexture );\n\n\t}\n\n\t/**\n\t * Copies data of the given source texture into a destination texture.\n\t *\n\t * @param {Texture} srcTexture - The source texture.\n\t * @param {Texture} dstTexture - The destination texture.\n\t * @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.\n\t * @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.\n\t * @param {number} [srcLevel=0] - The source mip level to copy from.\n\t * @param {number} [dstLevel=0] - The destination mip level to copy to.\n\t */\n\tcopyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {\n\n\t\tthis._textures.updateTexture( srcTexture );\n\t\tthis._textures.updateTexture( dstTexture );\n\n\t\tthis.backend.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );\n\n\t\tthis._inspector.copyTextureToTexture( srcTexture, dstTexture );\n\n\t}\n\n\t/**\n\t * Reads pixel data from the given render target.\n\t *\n\t * @async\n\t * @param {RenderTarget} renderTarget - The render target to read from.\n\t * @param {number} x - The `x` coordinate of the copy region's origin.\n\t * @param {number} y - The `y` coordinate of the copy region's origin.\n\t * @param {number} width - The width of the copy region.\n\t * @param {number} height - The height of the copy region.\n\t * @param {number} [textureIndex=0] - The texture index of a MRT render target.\n\t * @param {number} [faceIndex=0] - The active cube face index.\n\t * @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.\n\t */\n\tasync readRenderTargetPixelsAsync( renderTarget, x, y, width, height, textureIndex = 0, faceIndex = 0 ) {\n\n\t\treturn this.backend.copyTextureToBuffer( renderTarget.textures[ textureIndex ], x, y, width, height, faceIndex );\n\n\t}\n\n\t/**\n\t * Analyzes the given 3D object's hierarchy and builds render lists from the\n\t * processed hierarchy.\n\t *\n\t * @private\n\t * @param {Object3D} object - The 3D object to process (usually a scene).\n\t * @param {Camera} camera - The camera the object is rendered with.\n\t * @param {number} groupOrder - The group order is derived from the `renderOrder` of groups and is used to group 3D objects within groups.\n\t * @param {RenderList} renderList - The current render list.\n\t * @param {ClippingContext} clippingContext - The current clipping context.\n\t */\n\t_projectObject( object, camera, groupOrder, renderList, clippingContext ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t\tif ( object.isClippingGroup && object.enabled ) clippingContext = clippingContext.getGroupContext( object );\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\trenderList.pushLight( object );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tconst frustum = camera.isArrayCamera ? _frustumArray : _frustum;\n\n\t\t\t\tif ( ! object.frustumCulled || frustum.intersectsSprite( object, camera ) ) {\n\n\t\t\t\t\tif ( this.sortObjects === true ) {\n\n\t\t\t\t\t\t_vector4.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { geometry, material } = object;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\trenderList.push( object, geometry, material, groupOrder, _vector4.z, null, clippingContext );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\terror( 'Renderer: Objects of type THREE.LineLoop are not supported. Please use THREE.Line or THREE.LineSegments.' );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tconst frustum = camera.isArrayCamera ? _frustumArray : _frustum;\n\n\t\t\t\tif ( ! object.frustumCulled || frustum.intersectsObject( object, camera ) ) {\n\n\t\t\t\t\tconst { geometry, material } = object;\n\n\t\t\t\t\tif ( this.sortObjects === true ) {\n\n\t\t\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t\t\t\t_vector4\n\t\t\t\t\t\t\t.copy( geometry.boundingSphere.center )\n\t\t\t\t\t\t\t.applyMatrix4( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\trenderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group, clippingContext );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\trenderList.push( object, geometry, material, groupOrder, _vector4.z, null, clippingContext );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isBundleGroup === true && this.backend.beginBundle !== undefined ) {\n\n\t\t\tconst baseRenderList = renderList;\n\n\t\t\t// replace render list\n\t\t\trenderList = this._renderLists.get( object, camera );\n\n\t\t\trenderList.begin();\n\n\t\t\tbaseRenderList.pushBundle( {\n\t\t\t\tbundleGroup: object,\n\t\t\t\tcamera,\n\t\t\t\trenderList,\n\t\t\t} );\n\n\t\t\trenderList.finish();\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis._projectObject( children[ i ], camera, groupOrder, renderList, clippingContext );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Renders the given render bundles.\n\t *\n\t * @private\n\t * @param {Array<Object>} bundles - Array with render bundle data.\n\t * @param {Scene} sceneRef - The scene the render bundles belong to.\n\t * @param {LightsNode} lightsNode - The current lights node.\n\t */\n\t_renderBundles( bundles, sceneRef, lightsNode ) {\n\n\t\tfor ( const bundle of bundles ) {\n\n\t\t\tthis._renderBundle( bundle, sceneRef, lightsNode );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Renders the transparent objects from the given render lists.\n\t *\n\t * @private\n\t * @param {Array<Object>} renderList - The transparent render list.\n\t * @param {Array<Object>} doublePassList - The list of transparent objects which require a double pass (e.g. because of transmission).\n\t * @param {Camera} camera - The camera the render list should be rendered with.\n\t * @param {Scene} scene - The scene the render list belongs to.\n\t * @param {LightsNode} lightsNode - The current lights node.\n\t */\n\t_renderTransparents( renderList, doublePassList, camera, scene, lightsNode ) {\n\n\t\tif ( doublePassList.length > 0 ) {\n\n\t\t\t// render back side\n\n\t\t\tfor ( const { material } of doublePassList ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\n\t\t\t}\n\n\t\t\tthis._renderObjects( doublePassList, camera, scene, lightsNode, 'backSide' );\n\n\t\t\t// render front side\n\n\t\t\tfor ( const { material } of doublePassList ) {\n\n\t\t\t\tmaterial.side = FrontSide;\n\n\t\t\t}\n\n\t\t\tthis._renderObjects( renderList, camera, scene, lightsNode );\n\n\t\t\t// restore\n\n\t\t\tfor ( const { material } of doublePassList ) {\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis._renderObjects( renderList, camera, scene, lightsNode );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Renders the objects from the given render list.\n\t *\n\t * @private\n\t * @param {Array<Object>} renderList - The render list.\n\t * @param {Camera} camera - The camera the render list should be rendered with.\n\t * @param {Scene} scene - The scene the render list belongs to.\n\t * @param {LightsNode} lightsNode - The current lights node.\n\t * @param {?string} [passId=null] - An optional ID for identifying the pass.\n\t */\n\t_renderObjects( renderList, camera, scene, lightsNode, passId = null ) {\n\n\t\tfor ( let i = 0, il = renderList.length; i < il; i ++ ) {\n\n\t\t\tconst { object, geometry, material, group, clippingContext } = renderList[ i ];\n\n\t\t\tthis._currentRenderObjectFunction( object, scene, camera, geometry, material, group, lightsNode, clippingContext, passId );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Retrieves shadow nodes for the given material. This is used to setup shadow passes.\n\t * The result is cached per material and updated when the material's version changes.\n\t *\n\t * @private\n\t * @param {Material} material\n\t * @returns {Object} - The shadow nodes for the material.\n\t */\n\t_getShadowNodes( material ) {\n\n\t\tconst version = material.version;\n\n\t\tlet cache = this._cacheShadowNodes.get( material );\n\n\t\tif ( cache === undefined || cache.version !== version ) {\n\n\t\t\tconst hasMap = material.map !== null;\n\t\t\tconst hasColorNode = material.colorNode && material.colorNode.isNode;\n\t\t\tconst hasCastShadowNode = material.castShadowNode && material.castShadowNode.isNode;\n\t\t\tconst hasMaskNode = ( material.maskShadowNode && material.maskShadowNode.isNode ) || ( material.maskNode && material.maskNode.isNode );\n\n\t\t\tlet positionNode = null;\n\t\t\tlet colorNode = null;\n\t\t\tlet depthNode = null;\n\n\t\t\tif ( hasMap || hasColorNode || hasCastShadowNode || hasMaskNode ) {\n\n\t\t\t\tlet shadowRGB;\n\t\t\t\tlet shadowAlpha;\n\n\t\t\t\tif ( hasCastShadowNode ) {\n\n\t\t\t\t\tshadowRGB = material.castShadowNode.rgb;\n\t\t\t\t\tshadowAlpha = material.castShadowNode.a;\n\n\t\t\t\t\tif ( this.shadowMap.transmitted !== true ) {\n\n\t\t\t\t\t\twarnOnce( 'Renderer: `shadowMap.transmitted` needs to be set to `true` when using `material.castShadowNode`.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tshadowRGB = vec3( 0 );\n\t\t\t\t\tshadowAlpha = float( 1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasMap ) {\n\n\t\t\t\t\tshadowAlpha = shadowAlpha.mul( reference( 'map', 'texture', material ).a );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasColorNode ) {\n\n\t\t\t\t\tshadowAlpha = shadowAlpha.mul( material.colorNode.a );\n\n\t\t\t\t}\n\n\t\t\t\tcolorNode = vec4( shadowRGB, shadowAlpha );\n\n\t\t\t\tif ( hasMaskNode ) {\n\n\t\t\t\t\tconst maskNode = material.maskShadowNode || material.maskNode;\n\n\t\t\t\t\tcolorNode = Fn( ( [ color ] ) => {\n\n\t\t\t\t\t\tmaskNode.not().discard();\n\n\t\t\t\t\t\treturn color;\n\n\t\t\t\t\t} )( colorNode );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.depthNode && material.depthNode.isNode ) {\n\n\t\t\t\tdepthNode = material.depthNode;\n\n\t\t\t}\n\n\t\t\tif ( material.castShadowPositionNode && material.castShadowPositionNode.isNode ) {\n\n\t\t\t\tpositionNode = material.castShadowPositionNode;\n\n\t\t\t} else if ( material.positionNode && material.positionNode.isNode ) {\n\n\t\t\t\tpositionNode = material.positionNode;\n\n\t\t\t}\n\n\t\t\tcache = {\n\t\t\t\tversion,\n\t\t\t\tcolorNode,\n\t\t\t\tdepthNode,\n\t\t\t\tpositionNode\n\t\t\t};\n\n\t\t\tthis._cacheShadowNodes.set( material, cache );\n\n\t\t}\n\n\t\treturn cache;\n\n\t}\n\n\t/**\n\t * This method represents the default render object function that manages the render lifecycle\n\t * of the object.\n\t *\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Scene} scene - The scene the 3D object belongs to.\n\t * @param {Camera} camera - The camera the object should be rendered with.\n\t * @param {BufferGeometry} geometry - The object's geometry.\n\t * @param {Material} material - The object's material.\n\t * @param {?Object} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.\n\t * @param {LightsNode} lightsNode - The current lights node.\n\t * @param {?ClippingContext} clippingContext - The clipping context.\n\t * @param {?string} [passId=null] - An optional ID for identifying the pass.\n\t */\n\trenderObject( object, scene, camera, geometry, material, group, lightsNode, clippingContext = null, passId = null ) {\n\n\t\tlet materialOverride = false;\n\t\tlet materialColorNode;\n\t\tlet materialDepthNode;\n\t\tlet materialPositionNode;\n\t\tlet materialSide;\n\n\t\t//\n\n\t\tobject.onBeforeRender( this, scene, camera, geometry, material, group );\n\n\t\t//\n\n\t\tif ( material.allowOverride === true && scene.overrideMaterial !== null ) {\n\n\t\t\tconst overrideMaterial = scene.overrideMaterial;\n\n\t\t\tmaterialOverride = true;\n\n\t\t\t// store original nodes\n\t\t\tmaterialColorNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.colorNode : null;\n\t\t\tmaterialDepthNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.depthNode : null;\n\t\t\tmaterialPositionNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.positionNode : null;\n\t\t\tmaterialSide = scene.overrideMaterial.side;\n\n\t\t\tif ( material.positionNode && material.positionNode.isNode ) {\n\n\t\t\t\toverrideMaterial.positionNode = material.positionNode;\n\n\t\t\t}\n\n\t\t\toverrideMaterial.alphaTest = material.alphaTest;\n\t\t\toverrideMaterial.alphaMap = material.alphaMap;\n\t\t\toverrideMaterial.transparent = material.transparent || material.transmission > 0 ||\n\t\t\t\t( material.transmissionNode && material.transmissionNode.isNode ) ||\n\t\t\t\t( material.backdropNode && material.backdropNode.isNode );\n\n\t\t\tif ( overrideMaterial.isShadowPassMaterial ) {\n\n\t\t\t\tconst { colorNode, depthNode, positionNode } = this._getShadowNodes( material );\n\n\t\t\t\tif ( this.shadowMap.type === VSMShadowMap ) {\n\n\t\t\t\t\toverrideMaterial.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t\t\t} else {\n\n\t\t\t\t\toverrideMaterial.side = ( material.shadowSide !== null ) ? material.shadowSide : _shadowSide[ material.side ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( colorNode !== null ) overrideMaterial.colorNode = colorNode;\n\t\t\t\tif ( depthNode !== null ) overrideMaterial.depthNode = depthNode;\n\t\t\t\tif ( positionNode !== null ) overrideMaterial.positionNode = positionNode;\n\n\t\t\t}\n\n\t\t\tmaterial = overrideMaterial;\n\n\t\t}\n\n\t\t//\n\n\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\tmaterial.side = BackSide;\n\t\t\tthis._handleObjectFunction( object, material, scene, camera, lightsNode, group, clippingContext, 'backSide' ); // create backSide pass id\n\n\t\t\tmaterial.side = FrontSide;\n\t\t\tthis._handleObjectFunction( object, material, scene, camera, lightsNode, group, clippingContext, passId ); // use default pass id\n\n\t\t\tmaterial.side = DoubleSide;\n\n\t\t} else {\n\n\t\t\tthis._handleObjectFunction( object, material, scene, camera, lightsNode, group, clippingContext, passId );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( materialOverride ) {\n\n\t\t\tscene.overrideMaterial.colorNode = materialColorNode;\n\t\t\tscene.overrideMaterial.depthNode = materialDepthNode;\n\t\t\tscene.overrideMaterial.positionNode = materialPositionNode;\n\t\t\tscene.overrideMaterial.side = materialSide;\n\n\t\t}\n\n\t\t//\n\n\t\tobject.onAfterRender( this, scene, camera, geometry, material, group );\n\n\t}\n\n\t/**\n\t * Checks if the given compatibility is supported by the selected backend.\n\t *\n\t * @param {string} name - The compatibility's name.\n\t * @return {boolean} Whether the compatibility is supported or not.\n\t */\n\thasCompatibility( name ) {\n\n\t\tif ( this._initialized === false ) {\n\n\t\t\tthrow new Error( 'Renderer: .hasCompatibility() called before the backend is initialized. Use \"await renderer.init();\" before using this method.' );\n\n\t\t}\n\n\t\treturn this.backend.hasCompatibility( name );\n\n\t}\n\n\t/**\n\t * This method represents the default `_handleObjectFunction` implementation which creates\n\t * a render object from the given data and performs the draw command with the selected backend.\n\t *\n\t * @private\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Material} material - The object's material.\n\t * @param {Scene} scene - The scene the 3D object belongs to.\n\t * @param {Camera} camera - The camera the object should be rendered with.\n\t * @param {LightsNode} lightsNode - The current lights node.\n\t * @param {?{start: number, count: number}} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.\n\t * @param {ClippingContext} clippingContext - The clipping context.\n\t * @param {string} [passId] - An optional ID for identifying the pass.\n\t */\n\t_renderObjectDirect( object, material, scene, camera, lightsNode, group, clippingContext, passId ) {\n\n\t\tconst renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, clippingContext, passId );\n\t\trenderObject.drawRange = object.geometry.drawRange;\n\t\trenderObject.group = group;\n\n\t\tif ( this._currentRenderBundle !== null ) {\n\n\t\t\tconst renderBundleData = this.backend.get( this._currentRenderBundle );\n\n\t\t\trenderBundleData.renderObjects.push( renderObject );\n\n\t\t\trenderObject.bundle = this._currentRenderBundle.bundleGroup;\n\n\t\t}\n\n\t\t//\n\n\t\tconst needsRefresh = this._nodes.needsRefresh( renderObject );\n\n\t\tif ( needsRefresh ) {\n\n\t\t\tthis._nodes.updateBefore( renderObject );\n\n\t\t\tthis._geometries.updateForRender( renderObject );\n\n\t\t\tthis._nodes.updateForRender( renderObject );\n\t\t\tthis._bindings.updateForRender( renderObject );\n\n\t\t}\n\n\t\tthis._pipelines.updateForRender( renderObject );\n\n\t\t//\n\n\t\tif ( this._pipelines.isReady( renderObject ) ) {\n\n\t\t\tthis.backend.draw( renderObject, this.info );\n\n\t\t\tif ( needsRefresh ) this._nodes.updateAfter( renderObject );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * A different implementation for `_handleObjectFunction` which only makes sure the object is ready for rendering.\n\t * Used in `compileAsync()`.\n\t *\n\t * @private\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Material} material - The object's material.\n\t * @param {Scene} scene - The scene the 3D object belongs to.\n\t * @param {Camera} camera - The camera the object should be rendered with.\n\t * @param {LightsNode} lightsNode - The current lights node.\n\t * @param {?{start: number, count: number}} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.\n\t * @param {ClippingContext} clippingContext - The clipping context.\n\t * @param {string} [passId] - An optional ID for identifying the pass.\n\t */\n\t_createObjectPipeline( object, material, scene, camera, lightsNode, group, clippingContext, passId ) {\n\n\t\t// If in async compilation mode, queue the work for sequential execution\n\t\tif ( this._compilationPromises !== null ) {\n\n\t\t\t// Store work items instead of promises - will be processed sequentially\n\t\t\tthis._compilationPromises.push( {\n\t\t\t\tobject,\n\t\t\t\tmaterial,\n\t\t\t\tscene,\n\t\t\t\tcamera,\n\t\t\t\tlightsNode,\n\t\t\t\tgroup,\n\t\t\t\tclippingContext,\n\t\t\t\tpassId,\n\t\t\t\trenderContext: this._currentRenderContext\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Sync path\n\t\tconst renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, clippingContext, passId );\n\t\trenderObject.drawRange = object.geometry.drawRange;\n\t\trenderObject.group = group;\n\n\t\t//\n\n\t\tthis._nodes.updateBefore( renderObject );\n\n\t\tthis._geometries.updateForRender( renderObject );\n\n\t\tthis._nodes.updateForRender( renderObject );\n\t\tthis._bindings.updateForRender( renderObject );\n\n\t\tthis._pipelines.getForRender( renderObject, this._compilationPromises );\n\n\t\tthis._nodes.updateAfter( renderObject );\n\n\t}\n\n\t/**\n\t * Callback when the canvas has been resized.\n\t *\n\t * @private\n\t */\n\t_onCanvasTargetResize() {\n\n\t\tif ( this._initialized ) this.backend.updateSize();\n\n\t}\n\n\t/**\n\t * Alias for `compileAsync()`.\n\t *\n\t * @method\n\t * @param {Object3D} scene - The scene or 3D object to precompile.\n\t * @param {Camera} camera - The camera that is used to render the scene.\n\t * @param {Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.\n\t * @return {function(Object3D, Camera, ?Scene): Promise|undefined} A Promise that resolves when the compile has been finished.\n\t */\n\tget compile() {\n\n\t\treturn this.compileAsync;\n\n\t}\n\n}\n\n/**\n * A binding represents the connection between a resource (like a texture, sampler\n * or uniform buffer) and the resource definition in a shader stage.\n *\n * This module is an abstract base class for all concrete bindings types.\n *\n * @abstract\n * @private\n */\nclass Binding {\n\n\t/**\n\t * Constructs a new binding.\n\t *\n\t * @param {string} [name=''] - The binding's name.\n\t */\n\tconstructor( name = '' ) {\n\n\t\t/**\n\t\t * The binding's name.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = name;\n\n\t\t/**\n\t\t * A bitmask that defines in what shader stages the\n\t\t * binding's resource is accessible.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.visibility = 0;\n\n\t}\n\n\t/**\n\t * Makes sure binding's resource is visible for the given shader stage.\n\t *\n\t * @param {number} visibility - The shader stage.\n\t */\n\tsetVisibility( visibility ) {\n\n\t\tthis.visibility |= visibility;\n\n\t}\n\n\t/**\n\t * The shader stages in which the binding's resource is visible.\n\t *\n\t * @return {number} The visibility bitmask.\n\t */\n\tgetVisibility() {\n\n\t\treturn this.visibility;\n\n\t}\n\n\t/**\n\t * Clones the binding.\n\t *\n\t * @return {Binding} The cloned binding.\n\t */\n\tclone() {\n\n\t\treturn Object.assign( new this.constructor(), this );\n\n\t}\n\n}\n\n/**\n * This function is usually called with the length in bytes of an array buffer.\n * It returns an padded value which ensure chunk size alignment according to STD140 layout.\n *\n * @function\n * @param {number} floatLength - The buffer length.\n * @return {number} The padded length.\n */\nfunction getFloatLength( floatLength ) {\n\n\t// ensure chunk size alignment (STD140 layout)\n\n\treturn floatLength + ( ( GPU_CHUNK_BYTES - ( floatLength % GPU_CHUNK_BYTES ) ) % GPU_CHUNK_BYTES );\n\n}\n\n/**\n * Represents a buffer binding type.\n *\n * @private\n * @abstract\n * @augments Binding\n */\nclass Buffer extends Binding {\n\n\t/**\n\t * Constructs a new buffer.\n\t *\n\t * @param {string} name - The buffer's name.\n\t * @param {TypedArray} [buffer=null] - The buffer.\n\t */\n\tconstructor( name, buffer = null ) {\n\n\t\tsuper( name );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBuffer = true;\n\n\t\t/**\n\t\t * The bytes per element.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.bytesPerElement = Float32Array.BYTES_PER_ELEMENT;\n\n\t\t/**\n\t\t * A reference to the internal buffer.\n\t\t *\n\t\t * @private\n\t\t * @type {TypedArray}\n\t\t */\n\t\tthis._buffer = buffer;\n\n\t\t/**\n\t\t * An array of update ranges.\n\t\t *\n\t\t * @private\n\t\t * @type {Array<{start: number, count: number}>}\n\t\t */\n\t\tthis._updateRanges = [];\n\n\t}\n\n\t/**\n\t * The array of update ranges.\n\t *\n\t * @type {Array<{start: number, count: number}>}\n\t */\n\tget updateRanges() {\n\n\t\treturn this._updateRanges;\n\n\t}\n\n\t/**\n\t * Adds an update range.\n\t *\n\t * @param {number} start - The start index.\n\t * @param {number} count - The number of elements.\n\t */\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\t/**\n\t * Clears all update ranges.\n\t */\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\t/**\n\t * The buffer's byte length.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget byteLength() {\n\n\t\treturn getFloatLength( this._buffer.byteLength );\n\n\t}\n\n\t/**\n\t * A reference to the internal buffer.\n\t *\n\t * @type {Float32Array}\n\t * @readonly\n\t */\n\tget buffer() {\n\n\t\treturn this._buffer;\n\n\t}\n\n\t/**\n\t * Updates the binding.\n\t *\n\t * @return {boolean} Whether the buffer has been updated and must be\n\t * uploaded to the GPU.\n\t */\n\tupdate() {\n\n\t\treturn true;\n\n\t}\n\n}\n\n/**\n * Represents a uniform buffer binding type.\n *\n * @private\n * @augments Buffer\n */\nclass UniformBuffer extends Buffer {\n\n\t/**\n\t * Constructs a new uniform buffer.\n\t *\n\t * @param {string} name - The buffer's name.\n\t * @param {TypedArray} [buffer=null] - The buffer.\n\t */\n\tconstructor( name, buffer = null ) {\n\n\t\tsuper( name, buffer );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isUniformBuffer = true;\n\n\t}\n\n}\n\nlet _id$4 = 0;\n\n/**\n * A special form of uniform buffer binding type.\n * It's buffer value is managed by a node object.\n *\n * @private\n * @augments UniformBuffer\n */\nclass NodeUniformBuffer extends UniformBuffer {\n\n\t/**\n\t * Constructs a new node-based uniform buffer.\n\t *\n\t * @param {BufferNode} nodeUniform - The uniform buffer node.\n\t * @param {UniformGroupNode} groupNode - The uniform group node.\n\t */\n\tconstructor( nodeUniform, groupNode ) {\n\n\t\tsuper( 'UniformBuffer_' + _id$4 ++, nodeUniform ? nodeUniform.value : null );\n\n\t\t/**\n\t\t * The uniform buffer node.\n\t\t *\n\t\t * @type {BufferNode}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t\t/**\n\t\t * The uniform group node.\n\t\t *\n\t\t * @type {UniformGroupNode}\n\t\t */\n\t\tthis.groupNode = groupNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isNodeUniformBuffer = true;\n\n\t}\n\n\t/**\n\t * The array of update ranges.\n\t *\n\t * @param {Array<{start: number, count: number}>} value - The update ranges.\n\t */\n\tset updateRanges( value ) {\n\n\t\tthis.nodeUniform.updateRanges = value;\n\n\t}\n\n\t/**\n\t * The array of update ranges.\n\t *\n\t * @type {Array<{start: number, count: number}>}\n\t */\n\tget updateRanges() {\n\n\t\treturn this.nodeUniform.updateRanges;\n\n\t}\n\n\t/**\n\t * Adds a range of data in the data array to be updated on the GPU.\n\t *\n\t * @param {number} start - Position at which to start update.\n\t * @param {number} count - The number of components to update.\n\t */\n\taddUpdateRange( start, count ) {\n\n\t\tthis.nodeUniform.addUpdateRange( start, count );\n\n\t}\n\n\t/**\n\t * Clears all update ranges.\n\t */\n\tclearUpdateRanges() {\n\n\t\tthis.nodeUniform.clearUpdateRanges();\n\n\t}\n\n\t/**\n\t * The uniform buffer.\n\t *\n\t * @type {Float32Array}\n\t */\n\tget buffer() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n}\n\n/**\n * This class represents a uniform buffer binding but with\n * an API that allows to maintain individual uniform objects.\n *\n * @private\n * @augments UniformBuffer\n */\nclass UniformsGroup extends UniformBuffer {\n\n\t/**\n\t * Constructs a new uniforms group.\n\t *\n\t * @param {string} name - The group's name.\n\t */\n\tconstructor( name ) {\n\n\t\tsuper( name );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isUniformsGroup = true;\n\n\t\t/**\n\t\t * An array with the raw uniform values.\n\t\t *\n\t\t * @private\n\t\t * @type {?Array<number>}\n\t\t * @default null\n\t\t */\n\t\tthis._values = null;\n\n\t\t/**\n\t\t * An array of uniform objects.\n\t\t *\n\t\t * The order of uniforms in this array must match the order of uniforms in the shader.\n\t\t *\n\t\t * @type {Array<Uniform>}\n\t\t */\n\t\tthis.uniforms = [];\n\n\t\t/**\n\t\t * A cache for the uniform update ranges.\n\t\t *\n\t\t * @private\n\t\t * @type {Map<number, {start: number, count: number}>}\n\t\t */\n\t\tthis._updateRangeCache = new Map();\n\n\t}\n\n\t/**\n\t * Adds a uniform's update range to this buffer.\n\t *\n\t * @param {Uniform} uniform - The uniform.\n\t */\n\taddUniformUpdateRange( uniform ) {\n\n\t\tconst index = uniform.index;\n\n\t\tif ( this._updateRangeCache.has( index ) !== true ) {\n\n\t\t\tconst updateRanges = this.updateRanges;\n\n\t\t\tconst start = uniform.offset;\n\t\t\tconst count = uniform.itemSize;\n\n\t\t\tconst range = { start, count };\n\n\t\t\tupdateRanges.push( range );\n\n\t\t\tthis._updateRangeCache.set( index, range );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Clears all update ranges of this buffer.\n\t */\n\tclearUpdateRanges() {\n\n\t\tthis._updateRangeCache.clear();\n\n\t\tsuper.clearUpdateRanges();\n\n\t}\n\n\t/**\n\t * Adds a uniform to this group.\n\t *\n\t * @param {Uniform} uniform - The uniform to add.\n\t * @return {UniformsGroup} A reference to this group.\n\t */\n\taddUniform( uniform ) {\n\n\t\tthis.uniforms.push( uniform );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Removes a uniform from this group.\n\t *\n\t * @param {Uniform} uniform - The uniform to remove.\n\t * @return {UniformsGroup} A reference to this group.\n\t */\n\tremoveUniform( uniform ) {\n\n\t\tconst index = this.uniforms.indexOf( uniform );\n\n\t\tif ( index !== -1 ) {\n\n\t\t\tthis.uniforms.splice( index, 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * An array with the raw uniform values.\n\t *\n\t * @type {Array<number>}\n\t */\n\tget values() {\n\n\t\tif ( this._values === null ) {\n\n\t\t\tthis._values = Array.from( this.buffer );\n\n\t\t}\n\n\t\treturn this._values;\n\n\t}\n\n\t/**\n\t * A Float32 array buffer with the uniform values.\n\t *\n\t * @type {Float32Array}\n\t */\n\tget buffer() {\n\n\t\tlet buffer = this._buffer;\n\n\t\tif ( buffer === null ) {\n\n\t\t\tconst byteLength = this.byteLength;\n\n\t\t\tbuffer = new Float32Array( new ArrayBuffer( byteLength ) );\n\n\t\t\tthis._buffer = buffer;\n\n\t\t}\n\n\t\treturn buffer;\n\n\t}\n\n\t/**\n\t * The byte length of the buffer with correct buffer alignment.\n\t *\n\t * @type {number}\n\t */\n\tget byteLength() {\n\n\t\tconst bytesPerElement = this.bytesPerElement;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\n\t\tfor ( let i = 0, l = this.uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniform = this.uniforms[ i ];\n\n\t\t\tconst boundary = uniform.boundary;\n\t\t\tconst itemSize = uniform.itemSize * bytesPerElement; // size of the uniform in bytes\n\n\t\t\tconst chunkOffset = offset % GPU_CHUNK_BYTES; // offset in the current chunk\n\t\t\tconst chunkPadding = chunkOffset % boundary; // required padding to match boundary\n\t\t\tconst chunkStart = chunkOffset + chunkPadding; // start position in the current chunk for the data\n\n\t\t\toffset += chunkPadding;\n\n\t\t\t// Check for chunk overflow\n\t\t\tif ( chunkStart !== 0 && ( GPU_CHUNK_BYTES - chunkStart ) < itemSize ) {\n\n\t\t\t\t// Add padding to the end of the chunk\n\t\t\t\toffset += ( GPU_CHUNK_BYTES - chunkStart );\n\n\t\t\t}\n\n\t\t\tuniform.offset = offset / bytesPerElement;\n\t\t\tuniform.index = i;\n\n\t\t\toffset += itemSize;\n\n\t\t}\n\n\t\treturn Math.ceil( offset / GPU_CHUNK_BYTES ) * GPU_CHUNK_BYTES;\n\n\t}\n\n\t/**\n\t * Updates this group by updating each uniform object of\n\t * the internal uniform list. The uniform objects check if their\n\t * values has actually changed so this method only returns\n\t * `true` if there is a real value change.\n\t *\n\t * @return {boolean} Whether the uniforms have been updated and\n\t * must be uploaded to the GPU.\n\t */\n\tupdate() {\n\n\t\tlet updated = false;\n\n\t\tfor ( const uniform of this.uniforms ) {\n\n\t\t\tif ( this.updateByType( uniform ) === true ) {\n\n\t\t\t\tupdated = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn updated;\n\n\t}\n\n\t/**\n\t * Updates a given uniform by calling an update method matching\n\t * the uniforms type.\n\t *\n\t * @param {Uniform} uniform - The uniform to update.\n\t * @return {boolean} Whether the uniform has been updated or not.\n\t */\n\tupdateByType( uniform ) {\n\n\t\tif ( uniform.isNumberUniform ) return this.updateNumber( uniform );\n\t\tif ( uniform.isVector2Uniform ) return this.updateVector2( uniform );\n\t\tif ( uniform.isVector3Uniform ) return this.updateVector3( uniform );\n\t\tif ( uniform.isVector4Uniform ) return this.updateVector4( uniform );\n\t\tif ( uniform.isColorUniform ) return this.updateColor( uniform );\n\t\tif ( uniform.isMatrix3Uniform ) return this.updateMatrix3( uniform );\n\t\tif ( uniform.isMatrix4Uniform ) return this.updateMatrix4( uniform );\n\n\t\terror( 'WebGPUUniformsGroup: Unsupported uniform type.', uniform );\n\n\t}\n\n\t/**\n\t * Updates a given Number uniform.\n\t *\n\t * @param {NumberUniform} uniform - The Number uniform.\n\t * @return {boolean} Whether the uniform has been updated or not.\n\t */\n\tupdateNumber( uniform ) {\n\n\t\tlet updated = false;\n\n\t\tconst a = this.values;\n\t\tconst v = uniform.getValue();\n\t\tconst offset = uniform.offset;\n\t\tconst type = uniform.getType();\n\n\t\tif ( a[ offset ] !== v ) {\n\n\t\t\tconst b = this._getBufferForType( type );\n\n\t\t\tb[ offset ] = a[ offset ] = v;\n\t\t\tupdated = true;\n\n\t\t\tthis.addUniformUpdateRange( uniform );\n\n\t\t}\n\n\t\treturn updated;\n\n\t}\n\n\t/**\n\t * Updates a given Vector2 uniform.\n\t *\n\t * @param {Vector2Uniform} uniform - The Vector2 uniform.\n\t * @return {boolean} Whether the uniform has been updated or not.\n\t */\n\tupdateVector2( uniform ) {\n\n\t\tlet updated = false;\n\n\t\tconst a = this.values;\n\t\tconst v = uniform.getValue();\n\t\tconst offset = uniform.offset;\n\t\tconst type = uniform.getType();\n\n\t\tif ( a[ offset + 0 ] !== v.x || a[ offset + 1 ] !== v.y ) {\n\n\t\t\tconst b = this._getBufferForType( type );\n\n\t\t\tb[ offset + 0 ] = a[ offset + 0 ] = v.x;\n\t\t\tb[ offset + 1 ] = a[ offset + 1 ] = v.y;\n\n\t\t\tupdated = true;\n\n\t\t\tthis.addUniformUpdateRange( uniform );\n\n\t\t}\n\n\t\treturn updated;\n\n\t}\n\n\t/**\n\t * Updates a given Vector3 uniform.\n\t *\n\t * @param {Vector3Uniform} uniform - The Vector3 uniform.\n\t * @return {boolean} Whether the uniform has been updated or not.\n\t */\n\tupdateVector3( uniform ) {\n\n\t\tlet updated = false;\n\n\t\tconst a = this.values;\n\t\tconst v = uniform.getValue();\n\t\tconst offset = uniform.offset;\n\t\tconst type = uniform.getType();\n\n\t\tif ( a[ offset + 0 ] !== v.x || a[ offset + 1 ] !== v.y || a[ offset + 2 ] !== v.z ) {\n\n\t\t\tconst b = this._getBufferForType( type );\n\n\t\t\tb[ offset + 0 ] = a[ offset + 0 ] = v.x;\n\t\t\tb[ offset + 1 ] = a[ offset + 1 ] = v.y;\n\t\t\tb[ offset + 2 ] = a[ offset + 2 ] = v.z;\n\n\t\t\tupdated = true;\n\n\t\t\tthis.addUniformUpdateRange( uniform );\n\n\t\t}\n\n\t\treturn updated;\n\n\t}\n\n\t/**\n\t * Updates a given Vector4 uniform.\n\t *\n\t * @param {Vector4Uniform} uniform - The Vector4 uniform.\n\t * @return {boolean} Whether the uniform has been updated or not.\n\t */\n\tupdateVector4( uniform ) {\n\n\t\tlet updated = false;\n\n\t\tconst a = this.values;\n\t\tconst v = uniform.getValue();\n\t\tconst offset = uniform.offset;\n\t\tconst type = uniform.getType();\n\n\t\tif ( a[ offset + 0 ] !== v.x || a[ offset + 1 ] !== v.y || a[ offset + 2 ] !== v.z || a[ offset + 3 ] !== v.w ) {\n\n\t\t\tconst b = this._getBufferForType( type );\n\n\t\t\tb[ offset + 0 ] = a[ offset + 0 ] = v.x;\n\t\t\tb[ offset + 1 ] = a[ offset + 1 ] = v.y;\n\t\t\tb[ offset + 2 ] = a[ offset + 2 ] = v.z;\n\t\t\tb[ offset + 3 ] = a[ offset + 3 ] = v.w;\n\n\t\t\tupdated = true;\n\n\t\t\tthis.addUniformUpdateRange( uniform );\n\n\t\t}\n\n\t\treturn updated;\n\n\t}\n\n\t/**\n\t * Updates a given Color uniform.\n\t *\n\t * @param {ColorUniform} uniform - The Color uniform.\n\t * @return {boolean} Whether the uniform has been updated or not.\n\t */\n\tupdateColor( uniform ) {\n\n\t\tlet updated = false;\n\n\t\tconst a = this.values;\n\t\tconst c = uniform.getValue();\n\t\tconst offset = uniform.offset;\n\n\t\tif ( a[ offset + 0 ] !== c.r || a[ offset + 1 ] !== c.g || a[ offset + 2 ] !== c.b ) {\n\n\t\t\tconst b = this.buffer;\n\n\t\t\tb[ offset + 0 ] = a[ offset + 0 ] = c.r;\n\t\t\tb[ offset + 1 ] = a[ offset + 1 ] = c.g;\n\t\t\tb[ offset + 2 ] = a[ offset + 2 ] = c.b;\n\n\t\t\tupdated = true;\n\n\t\t\tthis.addUniformUpdateRange( uniform );\n\n\t\t}\n\n\t\treturn updated;\n\n\t}\n\n\t/**\n\t * Updates a given Matrix3 uniform.\n\t *\n\t * @param {Matrix3Uniform} uniform - The Matrix3 uniform.\n\t * @return {boolean} Whether the uniform has been updated or not.\n\t */\n\tupdateMatrix3( uniform ) {\n\n\t\tlet updated = false;\n\n\t\tconst a = this.values;\n\t\tconst e = uniform.getValue().elements;\n\t\tconst offset = uniform.offset;\n\n\t\tif ( a[ offset + 0 ] !== e[ 0 ] || a[ offset + 1 ] !== e[ 1 ] || a[ offset + 2 ] !== e[ 2 ] ||\n\t\t\ta[ offset + 4 ] !== e[ 3 ] || a[ offset + 5 ] !== e[ 4 ] || a[ offset + 6 ] !== e[ 5 ] ||\n\t\t\ta[ offset + 8 ] !== e[ 6 ] || a[ offset + 9 ] !== e[ 7 ] || a[ offset + 10 ] !== e[ 8 ] ) {\n\n\t\t\tconst b = this.buffer;\n\n\t\t\tb[ offset + 0 ] = a[ offset + 0 ] = e[ 0 ];\n\t\t\tb[ offset + 1 ] = a[ offset + 1 ] = e[ 1 ];\n\t\t\tb[ offset + 2 ] = a[ offset + 2 ] = e[ 2 ];\n\t\t\tb[ offset + 4 ] = a[ offset + 4 ] = e[ 3 ];\n\t\t\tb[ offset + 5 ] = a[ offset + 5 ] = e[ 4 ];\n\t\t\tb[ offset + 6 ] = a[ offset + 6 ] = e[ 5 ];\n\t\t\tb[ offset + 8 ] = a[ offset + 8 ] = e[ 6 ];\n\t\t\tb[ offset + 9 ] = a[ offset + 9 ] = e[ 7 ];\n\t\t\tb[ offset + 10 ] = a[ offset + 10 ] = e[ 8 ];\n\n\t\t\tupdated = true;\n\n\t\t\tthis.addUniformUpdateRange( uniform );\n\n\t\t}\n\n\t\treturn updated;\n\n\t}\n\n\t/**\n\t * Updates a given Matrix4 uniform.\n\t *\n\t * @param {Matrix4Uniform} uniform - The Matrix4 uniform.\n\t * @return {boolean} Whether the uniform has been updated or not.\n\t */\n\tupdateMatrix4( uniform ) {\n\n\t\tlet updated = false;\n\n\t\tconst a = this.values;\n\t\tconst e = uniform.getValue().elements;\n\t\tconst offset = uniform.offset;\n\n\t\tif ( arraysEqual( a, e, offset ) === false ) {\n\n\t\t\tconst b = this.buffer;\n\t\t\tb.set( e, offset );\n\t\t\tsetArray( a, e, offset );\n\t\t\tupdated = true;\n\n\t\t\tthis.addUniformUpdateRange( uniform );\n\n\t\t}\n\n\t\treturn updated;\n\n\t}\n\n\t/**\n\t * Returns a typed array that matches the given data type.\n\t *\n\t * @private\n\t * @param {string} type - The data type.\n\t * @return {TypedArray} The typed array.\n\t */\n\t_getBufferForType( type ) {\n\n\t\tif ( type === 'int' || type === 'ivec2' || type === 'ivec3' || type === 'ivec4' ) return new Int32Array( this.buffer.buffer );\n\t\tif ( type === 'uint' || type === 'uvec2' || type === 'uvec3' || type === 'uvec4' ) return new Uint32Array( this.buffer.buffer );\n\t\treturn this.buffer;\n\n\t}\n\n}\n\n/**\n * Sets the values of the second array to the first array.\n *\n * @private\n * @param {TypedArray} a - The first array.\n * @param {TypedArray} b - The second array.\n * @param {number} offset - An index offset for the first array.\n */\nfunction setArray( a, b, offset ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ offset + i ] = b[ i ];\n\n\t}\n\n}\n\n/**\n * Returns `true` if the given arrays are equal.\n *\n * @private\n * @param {TypedArray} a - The first array.\n * @param {TypedArray} b - The second array.\n * @param {number} offset - An index offset for the first array.\n * @return {boolean} Whether the given arrays are equal or not.\n */\nfunction arraysEqual( a, b, offset ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\tif ( a[ offset + i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nlet _id$3 = 0;\n\n/**\n * A special form of uniforms group that represents\n * the individual uniforms as node-based uniforms.\n *\n * @private\n * @augments UniformsGroup\n */\nclass NodeUniformsGroup extends UniformsGroup {\n\n\t/**\n\t * Constructs a new node-based uniforms group.\n\t *\n\t * @param {string} name - The group's name.\n\t * @param {UniformGroupNode} groupNode - The uniform group node.\n\t */\n\tconstructor( name, groupNode ) {\n\n\t\tsuper( name );\n\n\t\t/**\n\t\t * The group's ID.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.id = _id$3 ++;\n\n\t\t/**\n\t\t * The uniform group node.\n\t\t *\n\t\t * @type {UniformGroupNode}\n\t\t */\n\t\tthis.groupNode = groupNode;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isNodeUniformsGroup = true;\n\n\t}\n\n}\n\n/**\n * Represents a sampler binding type.\n *\n * @private\n * @augments Binding\n */\nclass Sampler extends Binding {\n\n\t/**\n\t * Constructs a new sampler.\n\t *\n\t * @param {string} name - The samplers's name.\n\t * @param {?Texture} texture - The texture this binding is referring to.\n\t */\n\tconstructor( name, texture ) {\n\n\t\tsuper( name );\n\n\t\t/**\n\t\t * The texture the sampler is referring to.\n\t\t *\n\t\t * @private\n\t\t * @type {?Texture}\n\t\t */\n\t\tthis._texture = null;\n\n\t\t/**\n\t\t * An event listener which is added to {@link texture}'s dispose event.\n\t\t *\n\t\t * @private\n\t\t * @type {Function}\n\t\t */\n\t\tthis._onTextureDispose = () => {\n\n\t\t\tthis.generation = null;\n\t\t\tthis.version = -1;\n\n\t\t};\n\n\t\t// Assignment to the texture via a setter must occur after \"_onTextureDispose\" is initialized.\n\t\tthis.texture = texture;\n\n\t\t/**\n\t\t * The binding's version.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.version = texture ? texture.version : -1;\n\n\t\t/**\n\t\t * The binding's generation which is an additional version\n\t\t * qualifier.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.generation = null;\n\n\t\t/**\n\t\t * The binding's sampler key.\n\t\t *\n\t\t * @type {string}\n\t\t * @default ''\n\t\t */\n\t\tthis.samplerKey = '';\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSampler = true;\n\n\t}\n\n\t/**\n\t * Sets the texture of this sampler.\n\t *\n\t * @param {Texture} value - The texture to set.\n\t */\n\tset texture( value ) {\n\n\t\tif ( this._texture === value ) return;\n\n\t\tif ( this._texture ) {\n\n\t\t\tthis._texture.removeEventListener( 'dispose', this._onTextureDispose );\n\n\t\t}\n\n\t\tthis._texture = value;\n\n\t\tthis.generation = null;\n\t\tthis.version = -1;\n\n\t\tif ( this._texture ) {\n\n\t\t\tthis._texture.addEventListener( 'dispose', this._onTextureDispose );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Gets the texture of this sampler.\n\t * @return {?Texture} The texture.\n\t */\n\tget texture() {\n\n\t\treturn this._texture;\n\n\t}\n\n\t/**\n\t * Updates the binding.\n\t *\n\t * @return {boolean} Whether the texture has been updated and must be\n\t * uploaded to the GPU.\n\t */\n\tupdate() {\n\n\t\tconst { texture, version } = this;\n\n\t\tif ( version !== texture.version ) {\n\n\t\t\tthis.version = texture.version;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\n\tclone() {\n\n\t\tconst clonedSampler = super.clone();\n\n\t\t// fix dispose handler for cloned instances\n\t\t// TODO: Find better solution, see #31747\n\n\t\tclonedSampler._texture = null;\n\n\t\tclonedSampler._onTextureDispose = () => {\n\n\t\t\tclonedSampler.generation = null;\n\t\t\tclonedSampler.version = -1;\n\n\t\t};\n\n\t\tclonedSampler.texture = this.texture;\n\n\t\treturn clonedSampler;\n\n\t}\n\n}\n\nlet _id$2 = 0;\n\n/**\n * Represents a sampled texture binding type.\n *\n * @private\n * @augments Sampler\n */\nclass SampledTexture extends Sampler {\n\n\t/**\n\t * Constructs a new sampled texture.\n\t *\n\t * @param {string} name - The sampled texture's name.\n\t * @param {?Texture} texture - The texture this binding is referring to.\n\t */\n\tconstructor( name, texture ) {\n\n\t\tsuper( name, texture );\n\n\t\t/**\n\t\t * This identifier.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.id = _id$2 ++;\n\n\t\t/**\n\t\t * Whether the texture is a storage texture or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.store = false;\n\n\t\t/**\n\t\t * The mip level to bind for storage textures.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.mipLevel = 0;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSampledTexture = true;\n\n\t}\n\n}\n\n/**\n * A special form of sampled texture binding type.\n * It's texture value is managed by a node object.\n *\n * @private\n * @augments SampledTexture\n */\nclass NodeSampledTexture extends SampledTexture {\n\n\t/**\n\t * Constructs a new node-based sampled texture.\n\t *\n\t * @param {string} name - The textures's name.\n\t * @param {TextureNode} textureNode - The texture node.\n\t * @param {UniformGroupNode} groupNode - The uniform group node.\n\t * @param {?string} [access=null] - The access type.\n\t */\n\tconstructor( name, textureNode, groupNode, access = null ) {\n\n\t\tsuper( name, textureNode ? textureNode.value : null );\n\n\t\t/**\n\t\t * The texture node.\n\t\t *\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis.textureNode = textureNode;\n\n\t\t/**\n\t\t * The uniform group node.\n\t\t *\n\t\t * @type {UniformGroupNode}\n\t\t */\n\t\tthis.groupNode = groupNode;\n\n\t\t/**\n\t\t * The access type.\n\t\t *\n\t\t * @type {?string}\n\t\t * @default null\n\t\t */\n\t\tthis.access = access;\n\n\t}\n\n\t/**\n\t * Updates the binding.\n\t *\n\t * @return {boolean} Whether the texture has been updated and must be\n\t * uploaded to the GPU.\n\t */\n\tupdate() {\n\n\t\tconst { textureNode } = this;\n\n\t\tif ( this.texture !== textureNode.value ) {\n\n\t\t\tthis.texture = textureNode.value;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn super.update();\n\n\t}\n\n}\n\n/**\n * A special form of sampled cube texture binding type.\n * It's texture value is managed by a node object.\n *\n * @private\n * @augments NodeSampledTexture\n */\nclass NodeSampledCubeTexture extends NodeSampledTexture {\n\n\t/**\n\t * Constructs a new node-based sampled cube texture.\n\t *\n\t * @param {string} name - The textures's name.\n\t * @param {TextureNode} textureNode - The texture node.\n\t * @param {UniformGroupNode} groupNode - The uniform group node.\n\t * @param {?string} [access=null] - The access type.\n\t */\n\tconstructor( name, textureNode, groupNode, access = null ) {\n\n\t\tsuper( name, textureNode, groupNode, access );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSampledCubeTexture = true;\n\n\t}\n\n}\n\n/**\n * A special form of sampled 3D texture binding type.\n * It's texture value is managed by a node object.\n *\n * @private\n * @augments NodeSampledTexture\n */\nclass NodeSampledTexture3D extends NodeSampledTexture {\n\n\t/**\n\t * Constructs a new node-based sampled 3D texture.\n\t *\n\t * @param {string} name - The textures's name.\n\t * @param {TextureNode} textureNode - The texture node.\n\t * @param {UniformGroupNode} groupNode - The uniform group node.\n\t * @param {?string} [access=null] - The access type.\n\t */\n\tconstructor( name, textureNode, groupNode, access = null ) {\n\n\t\tsuper( name, textureNode, groupNode, access );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isSampledTexture3D = true;\n\n\t}\n\n}\n\nconst glslPolyfills = {\n\tbitcast_int_uint: new CodeNode( /* glsl */'uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }' ),\n\tbitcast_uint_int: new CodeNode( /* glsl */'uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }' )\n};\n\nconst glslMethods = {\n\ttextureDimensions: 'textureSize',\n\tequals: 'equal',\n\tbitcast_float_int: 'floatBitsToInt',\n\tbitcast_int_float: 'intBitsToFloat',\n\tbitcast_uint_float: 'uintBitsToFloat',\n\tbitcast_float_uint: 'floatBitsToUint',\n\tbitcast_uint_int: 'tsl_bitcast_uint_to_int',\n\tbitcast_int_uint: 'tsl_bitcast_int_to_uint',\n\tfloatpack_snorm_2x16: 'packSnorm2x16',\n\tfloatpack_unorm_2x16: 'packUnorm2x16',\n\tfloatpack_float16_2x16: 'packHalf2x16',\n\tfloatunpack_snorm_2x16: 'unpackSnorm2x16',\n\tfloatunpack_unorm_2x16: 'unpackUnorm2x16',\n\tfloatunpack_float16_2x16: 'unpackHalf2x16'\n};\n\nconst precisionLib = {\n\tlow: 'lowp',\n\tmedium: 'mediump',\n\thigh: 'highp'\n};\n\nconst supports$1 = {\n\tswizzleAssign: true,\n\tstorageBuffer: false\n};\n\nconst interpolationTypeMap = {\n\tperspective: 'smooth',\n\tlinear: 'noperspective'\n};\n\nconst interpolationModeMap = {\n\t'centroid': 'centroid'\n};\n\nconst defaultPrecisions = `\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp sampler3D;\nprecision highp samplerCube;\nprecision highp sampler2DArray;\n\nprecision highp usampler2D;\nprecision highp usampler3D;\nprecision highp usamplerCube;\nprecision highp usampler2DArray;\n\nprecision highp isampler2D;\nprecision highp isampler3D;\nprecision highp isamplerCube;\nprecision highp isampler2DArray;\n\nprecision highp sampler2DShadow;\nprecision highp sampler2DArrayShadow;\nprecision highp samplerCubeShadow;\n`;\n\n/**\n * A node builder targeting GLSL.\n *\n * This module generates GLSL shader code from node materials and also\n * generates the respective bindings and vertex buffer definitions. These\n * data are later used by the renderer to create render and compute pipelines\n * for render objects.\n *\n * @augments NodeBuilder\n */\nclass GLSLNodeBuilder extends NodeBuilder {\n\n\t/**\n\t * Constructs a new GLSL node builder renderer.\n\t *\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Renderer} renderer - The renderer.\n\t */\n\tconstructor( object, renderer ) {\n\n\t\tsuper( object, renderer, new GLSLNodeParser() );\n\n\t\t/**\n\t\t * A dictionary holds for each shader stage ('vertex', 'fragment', 'compute')\n\t\t * another dictionary which manages UBOs per group ('render','frame','object').\n\t\t *\n\t\t * @type {Object<string,Object<string,NodeUniformsGroup>>}\n\t\t */\n\t\tthis.uniformGroups = {};\n\n\t\t/**\n\t\t * An array that holds objects defining the varying and attribute data in\n\t\t * context of Transform Feedback.\n\t\t *\n\t\t * @type {Array<Object<string,AttributeNode|string>>}\n\t\t */\n\t\tthis.transforms = [];\n\n\t\t/**\n\t\t * A dictionary that holds for each shader stage a Map of used extensions.\n\t\t *\n\t\t * @type {Object<string,Map<string,Object>>}\n\t\t */\n\t\tthis.extensions = {};\n\n\t\t/**\n\t\t * A dictionary that holds for each shader stage an Array of used builtins.\n\t\t *\n\t\t * @type {Object<string,Array<string>>}\n\t\t */\n\t\tthis.builtins = { vertex: [], fragment: [], compute: [] };\n\n\t}\n\n\t/**\n\t * Checks if the given texture requires a manual conversion to the working color space.\n\t *\n\t * @param {Texture} texture - The texture to check.\n\t * @return {boolean} Whether the given texture requires a conversion to working color space or not.\n\t */\n\tneedsToWorkingColorSpace( texture ) {\n\n\t\treturn texture.isVideoTexture === true && texture.colorSpace !== NoColorSpace;\n\n\t}\n\n\t/**\n\t * Includes the given method name into the current\n\t * function node.\n\t *\n\t * @private\n\t * @param {string} name - The method name to include.\n\t * @return {CodeNode} The respective code node.\n\t */\n\t_include( name ) {\n\n\t\tconst codeNode = glslPolyfills[ name ];\n\t\tcodeNode.build( this );\n\n\t\tthis.addInclude( codeNode );\n\n\t\treturn codeNode;\n\n\t}\n\n\t/**\n\t * Returns the native shader method name for a given generic name.\n\t *\n\t * @param {string} method - The method name to resolve.\n\t * @return {string} The resolved GLSL method name.\n\t */\n\tgetMethod( method ) {\n\n\t\tif ( glslPolyfills[ method ] !== undefined ) {\n\n\t\t\tthis._include( method );\n\n\t\t}\n\n\t\treturn glslMethods[ method ] || method;\n\n\t}\n\n\t/**\n\t * Returns the bitcast method name for a given input and outputType.\n\t *\n\t * @param {string} type - The output type to bitcast to.\n\t * @param {string} inputType - The input type of the.\n\t * @return {string} The resolved WGSL bitcast invocation.\n\t */\n\tgetBitcastMethod( type, inputType ) {\n\n\t\treturn this.getMethod( `bitcast_${ inputType }_${ type }` );\n\n\t}\n\n\t/**\n\t * Returns the float packing method name for a given numeric encoding.\n\t *\n\t * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range.\n\t * @returns {string} The resolved GLSL float packing method name.\n\t */\n\tgetFloatPackingMethod( encoding ) {\n\n\t\treturn this.getMethod( `floatpack_${ encoding }_2x16` );\n\n\t}\n\n\t/**\n\t * Returns the float unpacking method name for a given numeric encoding.\n\t *\n\t * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range.\n\t * @returns {string} The resolved GLSL float unpacking method name.\n\t */\n\tgetFloatUnpackingMethod( encoding ) {\n\n\t\treturn this.getMethod( `floatunpack_${ encoding }_2x16` );\n\n\t}\n\n\t/**\n\t * Returns the native snippet for a ternary operation.\n\t *\n\t * @param {string} condSnippet - The condition determining which expression gets resolved.\n\t * @param {string} ifSnippet - The expression to resolve to if the condition is true.\n\t * @param {string} elseSnippet - The expression to resolve to if the condition is false.\n\t * @return {string} The resolved method name.\n\t */\n\tgetTernary( condSnippet, ifSnippet, elseSnippet ) {\n\n\t\treturn `${condSnippet} ? ${ifSnippet} : ${elseSnippet}`;\n\n\t}\n\n\t/**\n\t * Returns the output struct name. Not relevant for GLSL.\n\t *\n\t * @return {string}\n\t */\n\tgetOutputStructName() {\n\n\t\treturn '';\n\n\t}\n\n\t/**\n\t * Builds the given shader node.\n\t *\n\t * @param {ShaderNodeInternal} shaderNode - The shader node.\n\t * @return {string} The GLSL function code.\n\t */\n\tbuildFunctionCode( shaderNode ) {\n\n\t\tconst layout = shaderNode.layout;\n\t\tconst flowData = this.flowShaderNode( shaderNode );\n\n\t\tconst parameters = [];\n\n\t\tfor ( const input of layout.inputs ) {\n\n\t\t\tparameters.push( this.getType( input.type ) + ' ' + input.name );\n\n\t\t}\n\n\t\t//\n\n\t\tconst code = `${ this.getType( layout.type ) } ${ layout.name }( ${ parameters.join( ', ' ) } ) {\n\n\t${ flowData.vars }\n\n${ flowData.code }\n\treturn ${ flowData.result };\n\n}`;\n\n\t\t//\n\n\t\treturn code;\n\n\t}\n\n\t/**\n\t * Setups the Pixel Buffer Object (PBO) for the given storage\n\t * buffer node.\n\t *\n\t * @param {StorageBufferNode} storageBufferNode - The storage buffer node.\n\t */\n\tsetupPBO( storageBufferNode ) {\n\n\t\tconst attribute = storageBufferNode.value;\n\n\t\tif ( attribute.pbo === undefined ) {\n\n\t\t\tconst originalArray = attribute.array;\n\t\t\tconst numElements = attribute.count * attribute.itemSize;\n\n\t\t\tconst { itemSize } = attribute;\n\n\t\t\tconst isInteger = attribute.array.constructor.name.toLowerCase().includes( 'int' );\n\n\t\t\tlet format = isInteger ? RedIntegerFormat : RedFormat;\n\n\t\t\tif ( itemSize === 2 ) {\n\n\t\t\t\tformat = isInteger ? RGIntegerFormat : RGFormat;\n\n\t\t\t} else if ( itemSize === 3 ) {\n\n\t\t\t\tformat = isInteger ? RGBIntegerFormat : RGBFormat;\n\n\t\t\t} else if ( itemSize === 4 ) {\n\n\t\t\t\tformat = isInteger ? RGBAIntegerFormat : RGBAFormat;\n\n\t\t\t}\n\n\t\t\tconst typeMap = {\n\t\t\t\tFloat32Array: FloatType,\n\t\t\t\tUint8Array: UnsignedByteType,\n\t\t\t\tUint16Array: UnsignedShortType,\n\t\t\t\tUint32Array: UnsignedIntType,\n\t\t\t\tInt8Array: ByteType,\n\t\t\t\tInt16Array: ShortType,\n\t\t\t\tInt32Array: IntType,\n\t\t\t\tUint8ClampedArray: UnsignedByteType,\n\t\t\t};\n\n\t\t\tconst width = Math.pow( 2, Math.ceil( Math.log2( Math.sqrt( numElements / itemSize ) ) ) );\n\t\t\tlet height = Math.ceil( ( numElements / itemSize ) / width );\n\t\t\tif ( width * height * itemSize < numElements ) height ++; // Ensure enough space\n\n\t\t\tconst newSize = width * height * itemSize;\n\n\t\t\tconst newArray = new originalArray.constructor( newSize );\n\n\t\t\tnewArray.set( originalArray, 0 );\n\n\t\t\tattribute.array = newArray;\n\n\t\t\tconst pboTexture = new DataTexture( attribute.array, width, height, format, typeMap[ attribute.array.constructor.name ] || FloatType );\n\t\t\tpboTexture.needsUpdate = true;\n\t\t\tpboTexture.isPBOTexture = true;\n\n\t\t\tconst pbo = new TextureNode( pboTexture, null, null );\n\t\t\tpbo.setPrecision( 'high' );\n\n\t\t\tattribute.pboNode = pbo;\n\t\t\tattribute.pbo = pbo.value;\n\n\t\t\tthis.getUniformFromNode( attribute.pboNode, 'texture', this.shaderStage, this.context.nodeName );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a GLSL snippet that represents the property name of the given node.\n\t *\n\t * @param {Node} node - The node.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The property name.\n\t */\n\tgetPropertyName( node, shaderStage = this.shaderStage ) {\n\n\t\tif ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {\n\n\t\t\treturn node.name;\n\n\t\t}\n\n\t\treturn super.getPropertyName( node, shaderStage );\n\n\t}\n\n\t/**\n\t * Setups the Pixel Buffer Object (PBO) for the given storage\n\t * buffer node.\n\t *\n\t * @param {StorageArrayElementNode} storageArrayElementNode - The storage array element node.\n\t * @return {string} The property name.\n\t */\n\tgeneratePBO( storageArrayElementNode ) {\n\n\t\tconst { node, indexNode } = storageArrayElementNode;\n\t\tconst attribute = node.value;\n\n\t\tif ( this.renderer.backend.has( attribute ) ) {\n\n\t\t\tconst attributeData = this.renderer.backend.get( attribute );\n\t\t\tattributeData.pbo = attribute.pbo;\n\n\t\t}\n\n\t\tconst nodeUniform = this.getUniformFromNode( attribute.pboNode, 'texture', this.shaderStage, this.context.nodeName );\n\t\tconst textureName = this.getPropertyName( nodeUniform );\n\n\t\tthis.increaseUsage( indexNode ); // force cache generate to be used as index in x,y\n\t\tconst indexSnippet = indexNode.build( this, 'uint' );\n\n\t\tconst elementNodeData = this.getDataFromNode( storageArrayElementNode );\n\n\t\tlet propertyName = elementNodeData.propertyName;\n\n\t\tif ( propertyName === undefined ) {\n\n\t\t\t// property element\n\n\t\t\tconst nodeVar = this.getVarFromNode( storageArrayElementNode );\n\n\t\t\tpropertyName = this.getPropertyName( nodeVar );\n\n\t\t\t// property size\n\n\t\t\tconst bufferNodeData = this.getDataFromNode( node );\n\n\t\t\tlet propertySizeName = bufferNodeData.propertySizeName;\n\n\t\t\tif ( propertySizeName === undefined ) {\n\n\t\t\t\tpropertySizeName = propertyName + 'Size';\n\n\t\t\t\tthis.getVarFromNode( node, propertySizeName, 'uint' );\n\n\t\t\t\tthis.addLineFlowCode( `${ propertySizeName } = uint( textureSize( ${ textureName }, 0 ).x )`, storageArrayElementNode );\n\n\t\t\t\tbufferNodeData.propertySizeName = propertySizeName;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst { itemSize } = attribute;\n\n\t\t\tconst channel = '.' + vectorComponents.join( '' ).slice( 0, itemSize );\n\t\t\tconst uvSnippet = `ivec2(${indexSnippet} % ${ propertySizeName }, ${indexSnippet} / ${ propertySizeName })`;\n\n\t\t\tconst snippet = this.generateTextureLoad( null, textureName, uvSnippet, '0', null, null );\n\n\t\t\t//\n\n\n\t\t\tlet prefix = 'vec4';\n\n\t\t\tif ( attribute.pbo.type === UnsignedIntType ) {\n\n\t\t\t\tprefix = 'uvec4';\n\n\t\t\t} else if ( attribute.pbo.type === IntType ) {\n\n\t\t\t\tprefix = 'ivec4';\n\n\t\t\t}\n\n\t\t\tthis.addLineFlowCode( `${ propertyName } = ${prefix}(${ snippet })${channel}`, storageArrayElementNode );\n\n\t\t\telementNodeData.propertyName = propertyName;\n\n\t\t}\n\n\t\treturn propertyName;\n\n\t}\n\n\t/**\n\t * Generates the GLSL snippet that reads a single texel from a texture without sampling or filtering.\n\t *\n\t * @param {?Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvIndexSnippet - A GLSL snippet that represents texture coordinates used for sampling.\n\t * @param {?string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.\n\t * @param {?string} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @return {string} The GLSL snippet.\n\t */\n\tgenerateTextureLoad( texture, textureProperty, uvIndexSnippet, levelSnippet, depthSnippet, offsetSnippet ) {\n\n\t\tif ( levelSnippet === null ) levelSnippet = '0';\n\n\t\tlet snippet;\n\n\t\tif ( depthSnippet ) {\n\n\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\tsnippet = `texelFetchOffset( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ), ${ offsetSnippet } )`;\n\n\t\t\t} else {\n\n\t\t\t\tsnippet = `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ) )`;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\tsnippet = `texelFetchOffset( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ), ${ offsetSnippet } )`;\n\n\t\t\t} else {\n\n\t\t\t\tsnippet = `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ) )`;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( texture !== null && texture.isDepthTexture ) {\n\n\t\t\tsnippet += '.x';\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Generates the GLSL snippet for sampling/loading the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.\n\t * @param {?string} depthSnippet -  A GLSL snippet that represents the 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @return {string} The GLSL snippet.\n\t */\n\tgenerateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet ) {\n\n\t\tif ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\tif ( offsetSnippet ) return `textureOffset( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet } ).x`;\n\n\t\t\treturn `texture( ${ textureProperty }, ${ uvSnippet } ).x`;\n\n\t\t}\n\n\t\tif ( offsetSnippet ) return `textureOffset( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet } )`;\n\n\t\treturn `texture( ${ textureProperty }, ${ uvSnippet } )`;\n\n\t}\n\n\t/**\n\t * Generates the GLSL snippet when sampling textures with explicit mip level.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.\n\t * @param {string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.\n\t * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @return {string} The GLSL snippet.\n\t */\n\tgenerateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {\n\n\t\tif ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;\n\n\t\tif ( offsetSnippet ) {\n\n\t\t\treturn `textureLodOffset( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;\n\n\t\t}\n\n\t\treturn `textureLod( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet } )`;\n\n\t}\n\n\t/**\n\t * Generates the GLSL snippet when sampling textures with a bias to the mip level.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.\n\t * @param {string} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.\n\t * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @return {string} The GLSL snippet.\n\t */\n\tgenerateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet ) {\n\n\t\tif ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;\n\n\t\tif ( offsetSnippet ) {\n\n\t\t\treturn `textureOffset( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet }, ${ biasSnippet } )`;\n\n\t\t}\n\n\t\treturn `texture( ${ textureProperty }, ${ uvSnippet }, ${ biasSnippet } )`;\n\n\t}\n\n\t/**\n\t * Generates the GLSL snippet for sampling/loading the given texture using explicit gradients.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.\n\t * @param {Array<string>} gradSnippet - An array holding both gradient GLSL snippets.\n\t * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @return {string} The GLSL snippet.\n\t */\n\tgenerateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet ) {\n\n\t\tif ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;\n\n\t\tif ( offsetSnippet ) {\n\n\t\t\treturn `textureGradOffset( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] }, ${ offsetSnippet } )`;\n\n\t\t}\n\n\t\treturn `textureGrad( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;\n\n\t}\n\n\t/**\n\t * Generates the GLSL snippet for sampling a depth texture and comparing the sampled depth values\n\t * against a reference value.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.\n\t * @param {string} compareSnippet -  A GLSL snippet that represents the reference value.\n\t * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The GLSL snippet.\n\t */\n\tgenerateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {\n\n\t\tif ( shaderStage === 'fragment' ) {\n\n\t\t\t// Cube shadow maps use vec4(direction, compareValue)\n\t\t\tif ( texture.isCubeTexture ) {\n\n\t\t\t\treturn `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ compareSnippet } ) )`;\n\n\t\t\t}\n\n\t\t\tif ( depthSnippet ) {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureOffset( ${ textureProperty }, vec4( ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } ), ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } ) )`;\n\n\t\t\t}\n\n\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\treturn `textureOffset( ${ textureProperty }, vec3( ${ uvSnippet }, ${ compareSnippet } ), ${ offsetSnippet } )`;\n\n\t\t\t}\n\n\t\t\treturn `texture( ${ textureProperty }, vec3( ${ uvSnippet }, ${ compareSnippet } ) )`;\n\n\t\t} else {\n\n\t\t\terror( `WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${ shaderStage } shader.` );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the uniforms of the given shader stage as a GLSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The GLSL snippet that defines the uniforms.\n\t */\n\tgetUniforms( shaderStage ) {\n\n\t\tconst uniforms = this.uniforms[ shaderStage ];\n\n\t\tconst bindingSnippets = [];\n\t\tconst uniformGroups = {};\n\n\t\tfor ( const uniform of uniforms ) {\n\n\t\t\tlet snippet = null;\n\t\t\tlet group = false;\n\n\t\t\tif ( uniform.type === 'texture' || uniform.type === 'texture3D' ) {\n\n\t\t\t\tconst texture = uniform.node.value;\n\n\t\t\t\tlet typePrefix = '';\n\n\t\t\t\tif ( texture.isDataTexture === true || texture.isData3DTexture === true ) {\n\n\t\t\t\t\tif ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\ttypePrefix = 'u';\n\n\t\t\t\t\t} else if ( texture.type === IntType ) {\n\n\t\t\t\t\t\ttypePrefix = 'i';\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( uniform.type === 'texture3D' && texture.isArrayTexture === false ) {\n\n\t\t\t\t\tsnippet = `${typePrefix}sampler3D ${ uniform.name };`;\n\n\t\t\t\t} else if ( texture.compareFunction ) {\n\n\t\t\t\t\tif ( texture.isArrayTexture === true ) {\n\n\t\t\t\t\t\tsnippet = `sampler2DArrayShadow ${ uniform.name };`;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tsnippet = `sampler2DShadow ${ uniform.name };`;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( texture.isArrayTexture === true || texture.isDataArrayTexture === true || texture.isCompressedArrayTexture === true ) {\n\n\t\t\t\t\tsnippet = `${typePrefix}sampler2DArray ${ uniform.name };`;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsnippet = `${typePrefix}sampler2D ${ uniform.name };`;\n\n\t\t\t\t}\n\n\t\t\t} else if ( uniform.type === 'cubeTexture' ) {\n\n\t\t\t\tsnippet = `samplerCube ${ uniform.name };`;\n\n\t\t\t} else if ( uniform.type === 'cubeDepthTexture' ) {\n\n\t\t\t\tconst texture = uniform.node.value;\n\n\t\t\t\tif ( texture.compareFunction ) {\n\n\t\t\t\t\tsnippet = `samplerCubeShadow ${ uniform.name };`;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsnippet = `samplerCube ${ uniform.name };`;\n\n\t\t\t\t}\n\n\t\t\t} else if ( uniform.type === 'buffer' ) {\n\n\t\t\t\tconst bufferNode = uniform.node;\n\t\t\t\tconst bufferType = this.getType( bufferNode.bufferType );\n\t\t\t\tconst bufferCount = bufferNode.bufferCount;\n\n\t\t\t\tconst bufferCountSnippet = bufferCount > 0 ? bufferCount : '';\n\t\t\t\tsnippet = `${bufferNode.name} {\\n\\t${ bufferType } ${ uniform.name }[${ bufferCountSnippet }];\\n};\\n`;\n\n\t\t\t} else {\n\n\t\t\t\tconst groupName = uniform.groupNode.name;\n\n\t\t\t\t// Check if this group has already been processed\n\t\t\t\tif ( uniformGroups[ groupName ] === undefined ) {\n\n\t\t\t\t\t// Get the shared uniform group that contains uniforms from all stages\n\t\t\t\t\tconst sharedUniformGroup = this.uniformGroups[ groupName ];\n\n\t\t\t\t\tif ( sharedUniformGroup !== undefined ) {\n\n\t\t\t\t\t\t// Generate snippets for ALL uniforms in this shared group\n\t\t\t\t\t\tconst snippets = [];\n\n\t\t\t\t\t\tfor ( const sharedUniform of sharedUniformGroup.uniforms ) {\n\n\t\t\t\t\t\t\tconst type = sharedUniform.getType();\n\t\t\t\t\t\t\tconst vectorType = this.getVectorType( type );\n\t\t\t\t\t\t\tconst precision = sharedUniform.nodeUniform.node.precision;\n\n\t\t\t\t\t\t\tlet uniformSnippet = `${ vectorType } ${ sharedUniform.name };`;\n\n\t\t\t\t\t\t\tif ( precision !== null ) {\n\n\t\t\t\t\t\t\t\tuniformSnippet = precisionLib[ precision ] + ' ' + uniformSnippet;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsnippets.push( '\\t' + uniformSnippet );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuniformGroups[ groupName ] = snippets;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgroup = true;\n\n\t\t\t}\n\n\t\t\tif ( ! group ) {\n\n\t\t\t\tconst precision = uniform.node.precision;\n\n\t\t\t\tif ( precision !== null ) {\n\n\t\t\t\t\tsnippet = precisionLib[ precision ] + ' ' + snippet;\n\n\t\t\t\t}\n\n\t\t\t\tsnippet = 'uniform ' + snippet;\n\n\t\t\t\tbindingSnippets.push( snippet );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet output = '';\n\n\t\tfor ( const name in uniformGroups ) {\n\n\t\t\tconst groupSnippets = uniformGroups[ name ];\n\n\t\t\toutput += this._getGLSLUniformStruct( name, groupSnippets.join( '\\n' ) ) + '\\n';\n\n\t\t}\n\n\t\toutput += bindingSnippets.join( '\\n' );\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Returns the type for a given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t * @return {string} The type.\n\t */\n\tgetTypeFromAttribute( attribute ) {\n\n\t\tlet nodeType = super.getTypeFromAttribute( attribute );\n\n\t\tif ( /^[iu]/.test( nodeType ) && attribute.gpuType !== IntType ) {\n\n\t\t\tlet dataAttribute = attribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) dataAttribute = attribute.data;\n\n\t\t\tconst array = dataAttribute.array;\n\n\t\t\tif ( ( array instanceof Uint32Array || array instanceof Int32Array ) === false ) {\n\n\t\t\t\tnodeType = nodeType.slice( 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn nodeType;\n\n\t}\n\n\t/**\n\t * Returns the shader attributes of the given shader stage as a GLSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The GLSL snippet that defines the shader attributes.\n\t */\n\tgetAttributes( shaderStage ) {\n\n\t\tlet snippet = '';\n\n\t\tif ( shaderStage === 'vertex' || shaderStage === 'compute' ) {\n\n\t\t\tconst attributes = this.getAttributesArray();\n\n\t\t\tlet location = 0;\n\n\t\t\tfor ( const attribute of attributes ) {\n\n\t\t\t\tsnippet += `layout( location = ${ location ++ } ) in ${ attribute.type } ${ attribute.name };\\n`;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Returns the members of the given struct type node as a GLSL string.\n\t *\n\t * @param {StructTypeNode} struct - The struct type node.\n\t * @return {string} The GLSL snippet that defines the struct members.\n\t */\n\tgetStructMembers( struct ) {\n\n\t\tconst snippets = [];\n\n\t\tfor ( const member of struct.members ) {\n\n\t\t\tsnippets.push( `\\t${ member.type } ${ member.name };` );\n\n\t\t}\n\n\t\treturn snippets.join( '\\n' );\n\n\t}\n\n\t/**\n\t * Returns the structs of the given shader stage as a GLSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The GLSL snippet that defines the structs.\n\t */\n\tgetStructs( shaderStage ) {\n\n\t\tconst snippets = [];\n\t\tconst structs = this.structs[ shaderStage ];\n\n\t\tconst outputSnippet = [];\n\n\t\tfor ( const struct of structs ) {\n\n\t\t\tif ( struct.output ) {\n\n\t\t\t\tfor ( const member of struct.members ) {\n\n\t\t\t\t\toutputSnippet.push( `layout( location = ${ member.index } ) out ${ member.type } ${ member.name };` );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tlet snippet = 'struct ' + struct.name + ' {\\n';\n\t\t\t\tsnippet += this.getStructMembers( struct );\n\t\t\t\tsnippet += '\\n};\\n';\n\n\t\t\t\tsnippets.push( snippet );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( outputSnippet.length === 0 ) {\n\n\t\t\toutputSnippet.push( 'layout( location = 0 ) out vec4 fragColor;' );\n\n\t\t}\n\n\t\treturn '\\n' + outputSnippet.join( '\\n' ) + '\\n\\n' + snippets.join( '\\n' );\n\n\t}\n\n\t/**\n\t * Returns the varyings of the given shader stage as a GLSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The GLSL snippet that defines the varyings.\n\t */\n\tgetVaryings( shaderStage ) {\n\n\t\tlet snippet = '';\n\n\t\tconst varyings = this.varyings;\n\n\t\tif ( shaderStage === 'vertex' || shaderStage === 'compute' ) {\n\n\t\t\tfor ( const varying of varyings ) {\n\n\t\t\t\tif ( shaderStage === 'compute' ) varying.needsInterpolation = true;\n\n\t\t\t\tconst type = this.getType( varying.type );\n\n\t\t\t\tif ( varying.needsInterpolation ) {\n\n\t\t\t\t\tif ( varying.interpolationType ) {\n\n\t\t\t\t\t\tconst interpolationType = interpolationTypeMap[ varying.interpolationType ] || varying.interpolationType;\n\t\t\t\t\t\tconst sampling = interpolationModeMap[ varying.interpolationSampling ] || '';\n\n\t\t\t\t\t\tsnippet += `${ interpolationType } ${ sampling } out ${ type } ${ varying.name };\\n`;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';\n\n\t\t\t\t\t\tsnippet += `${ flat }out ${ type } ${ varying.name };\\n`;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsnippet += `${type} ${varying.name};\\n`; // generate variable (no varying required)\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( shaderStage === 'fragment' ) {\n\n\t\t\tfor ( const varying of varyings ) {\n\n\t\t\t\tif ( varying.needsInterpolation ) {\n\n\t\t\t\t\tconst type = this.getType( varying.type );\n\n\t\t\t\t\tif ( varying.interpolationType ) {\n\n\t\t\t\t\t\tconst interpolationType = interpolationTypeMap[ varying.interpolationType ] || varying.interpolationType;\n\t\t\t\t\t\tconst sampling = interpolationModeMap[ varying.interpolationSampling ] || '';\n\n\t\t\t\t\t\tsnippet += `${ interpolationType } ${ sampling } in ${ type } ${ varying.name };\\n`;\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';\n\n\t\t\t\t\t\tsnippet += `${ flat }in ${ type } ${ varying.name };\\n`;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const builtin of this.builtins[ shaderStage ] ) {\n\n\t\t\tsnippet += `${builtin};\\n`;\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Returns the vertex index builtin.\n\t *\n\t * @return {string} The vertex index.\n\t */\n\tgetVertexIndex() {\n\n\t\treturn 'uint( gl_VertexID )';\n\n\t}\n\n\t/**\n\t * Contextually returns either the vertex stage instance index builtin\n\t * or the linearized index of an compute invocation within a grid of workgroups.\n\t *\n\t * @return {string} The instance index.\n\t */\n\tgetInstanceIndex() {\n\n\t\treturn 'uint( gl_InstanceID )';\n\n\t}\n\n\t/**\n\t * Returns a builtin representing the index of an invocation within its workgroup.\n\t *\n\t * @return {string} The invocation local index.\n\t */\n\tgetInvocationLocalIndex() {\n\n\t\tconst workgroupSize = this.object.workgroupSize;\n\n\t\tconst size = workgroupSize.reduce( ( acc, curr ) => acc * curr, 1 );\n\n\t\treturn `uint( gl_InstanceID ) % ${size}u`;\n\n\t}\n\n\t/**\n\t * Returns a builtin representing the size of a subgroup within the current shader.\n\t */\n\tgetSubgroupSize() {\n\n\t\terror( 'GLSLNodeBuilder: WebGLBackend does not support the subgroupSize node' );\n\n\t}\n\n\t/**\n\t * Returns a builtin representing the index of an invocation within its subgroup.\n\t */\n\tgetInvocationSubgroupIndex() {\n\n\t\terror( 'GLSLNodeBuilder: WebGLBackend does not support the invocationSubgroupIndex node' );\n\n\t}\n\n\t/**\n\t * Returns a builtin representing the index of the current invocation's subgroup within its workgroup.\n\t */\n\tgetSubgroupIndex() {\n\n\t\terror( 'GLSLNodeBuilder: WebGLBackend does not support the subgroupIndex node' );\n\n\t}\n\n\t/**\n\t * Returns the draw index builtin.\n\t *\n\t * @return {?string} The drawIndex shader string. Returns `null` if `WEBGL_multi_draw` isn't supported by the device.\n\t */\n\tgetDrawIndex() {\n\n\t\tconst extensions = this.renderer.backend.extensions;\n\n\t\tif ( extensions.has( 'WEBGL_multi_draw' ) ) {\n\n\t\t\treturn 'uint( gl_DrawID )';\n\n\t\t} else {\n\n\t\t\treturn 'nodeUniformDrawId'; // fallback to uniform\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the front facing builtin.\n\t *\n\t * @return {string} The front facing builtin.\n\t */\n\tgetFrontFacing() {\n\n\t\treturn 'gl_FrontFacing';\n\n\t}\n\n\t/**\n\t * Returns the frag coord builtin.\n\t *\n\t * @return {string} The frag coord builtin.\n\t */\n\tgetFragCoord() {\n\n\t\treturn 'gl_FragCoord.xy';\n\n\t}\n\n\t/**\n\t * Returns the frag depth builtin.\n\t *\n\t * @return {string} The frag depth builtin.\n\t */\n\tgetFragDepth() {\n\n\t\treturn 'gl_FragDepth';\n\n\t}\n\n\t/**\n\t * Enables the given extension.\n\t *\n\t * @param {string} name - The extension name.\n\t * @param {string} behavior - The extension behavior.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage.\n\t */\n\tenableExtension( name, behavior, shaderStage = this.shaderStage ) {\n\n\t\tconst map = this.extensions[ shaderStage ] || ( this.extensions[ shaderStage ] = new Map() );\n\n\t\tif ( map.has( name ) === false ) {\n\n\t\t\tmap.set( name, {\n\t\t\t\tname,\n\t\t\t\tbehavior\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the enabled extensions of the given shader stage as a GLSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The GLSL snippet that defines the enabled extensions.\n\t */\n\tgetExtensions( shaderStage ) {\n\n\t\tconst snippets = [];\n\n\t\tif ( shaderStage === 'vertex' ) {\n\n\t\t\tconst ext = this.renderer.backend.extensions;\n\t\t\tconst isBatchedMesh = this.object.isBatchedMesh;\n\n\t\t\tif ( isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) ) {\n\n\t\t\t\tthis.enableExtension( 'GL_ANGLE_multi_draw', 'require', shaderStage );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensions = this.extensions[ shaderStage ];\n\n\t\tif ( extensions !== undefined ) {\n\n\t\t\tfor ( const { name, behavior } of extensions.values() ) {\n\n\t\t\t\tsnippets.push( `#extension ${name} : ${behavior}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn snippets.join( '\\n' );\n\n\t}\n\n\t/**\n\t * Returns the clip distances builtin.\n\t *\n\t * @return {string} The clip distances builtin.\n\t */\n\tgetClipDistance() {\n\n\t\treturn 'gl_ClipDistance';\n\n\t}\n\n\t/**\n\t * Whether the requested feature is available or not.\n\t *\n\t * @param {string} name - The requested feature.\n\t * @return {boolean} Whether the requested feature is supported or not.\n\t */\n\tisAvailable( name ) {\n\n\t\tlet result = supports$1[ name ];\n\n\t\tif ( result === undefined ) {\n\n\t\t\tlet extensionName;\n\n\t\t\tresult = false;\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'float32Filterable':\n\t\t\t\t\textensionName = 'OES_texture_float_linear';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'clipDistance':\n\t\t\t\t\textensionName = 'WEBGL_clip_cull_distance';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( extensionName !== undefined ) {\n\n\t\t\t\tconst extensions = this.renderer.backend.extensions;\n\n\t\t\t\tif ( extensions.has( extensionName ) ) {\n\n\t\t\t\t\textensions.get( extensionName );\n\t\t\t\t\tresult = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tsupports$1[ name ] = result;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Whether to flip texture data along its vertical axis or not.\n\t *\n\t * @return {boolean} Returns always `true` in context of GLSL.\n\t */\n\tisFlipY() {\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Enables hardware clipping.\n\t *\n\t * @param {string} planeCount - The clipping plane count.\n\t */\n\tenableHardwareClipping( planeCount ) {\n\n\t\tthis.enableExtension( 'GL_ANGLE_clip_cull_distance', 'require' );\n\n\t\tthis.builtins[ 'vertex' ].push( `out float gl_ClipDistance[ ${ planeCount } ]` );\n\n\t}\n\n\t/**\n\t * Enables multiview.\n\t */\n\tenableMultiview() {\n\n\t\tthis.enableExtension( 'GL_OVR_multiview2', 'require', 'fragment' );\n\t\tthis.enableExtension( 'GL_OVR_multiview2', 'require', 'vertex' );\n\n\t\tthis.builtins[ 'vertex' ].push( 'layout(num_views = 2) in' );\n\n\t}\n\n\t/**\n\t * Registers a transform in context of Transform Feedback.\n\t *\n\t * @param {string} varyingName - The varying name.\n\t * @param {AttributeNode} attributeNode - The attribute node.\n\t */\n\tregisterTransform( varyingName, attributeNode ) {\n\n\t\tthis.transforms.push( { varyingName, attributeNode } );\n\n\t}\n\n\t/**\n\t * Returns the transforms of the given shader stage as a GLSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The GLSL snippet that defines the transforms.\n\t */\n\tgetTransforms( /* shaderStage  */ ) {\n\n\t\tconst transforms = this.transforms;\n\n\t\tlet snippet = '';\n\n\t\tfor ( let i = 0; i < transforms.length; i ++ ) {\n\n\t\t\tconst transform = transforms[ i ];\n\t\t\tconst attributeName = this.getPropertyName( transform.attributeNode );\n\n\t\t\tif ( attributeName ) snippet += `${ transform.varyingName } = ${ attributeName };\\n\\t`;\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Returns a GLSL struct based on the given name and variables.\n\t *\n\t * @private\n\t * @param {string} name - The struct name.\n\t * @param {string} vars - The struct variables.\n\t * @return {string} The GLSL snippet representing a struct.\n\t */\n\t_getGLSLUniformStruct( name, vars ) {\n\n\t\treturn `\nlayout( std140 ) uniform ${name} {\n${vars}\n};`;\n\n\t}\n\n\t/**\n\t * Returns a GLSL vertex shader based on the given shader data.\n\t *\n\t * @private\n\t * @param {Object} shaderData - The shader data.\n\t * @return {string} The vertex shader.\n\t */\n\t_getGLSLVertexCode( shaderData ) {\n\n\t\treturn `#version 300 es\n\n${ this.getSignature() }\n\n// extensions\n${shaderData.extensions}\n\n// precision\n${ defaultPrecisions }\n\n// uniforms\n${shaderData.uniforms}\n\n// varyings\n${shaderData.varyings}\n\n// attributes\n${shaderData.attributes}\n\n// vars\n${shaderData.vars}\n\n// codes\n${shaderData.codes}\n\nvoid main() {\n\n\t// transforms\n\t${shaderData.transforms}\n\n\t// flow\n\t${shaderData.flow}\n\n\tgl_PointSize = 1.0;\n\n}\n`;\n\n\t}\n\n\t/**\n\t * Returns a GLSL fragment shader based on the given shader data.\n\t *\n\t * @private\n\t * @param {Object} shaderData - The shader data.\n\t * @return {string} The vertex shader.\n\t */\n\t_getGLSLFragmentCode( shaderData ) {\n\n\t\treturn `#version 300 es\n\n${ this.getSignature() }\n\n// extensions\n${shaderData.extensions}\n\n// precision\n${ defaultPrecisions }\n\n// structs\n${shaderData.structs}\n\n// uniforms\n${shaderData.uniforms}\n\n// varyings\n${shaderData.varyings}\n\n// vars\n${shaderData.vars}\n\n// codes\n${shaderData.codes}\n\nvoid main() {\n\n\t// flow\n\t${shaderData.flow}\n\n}\n`;\n\n\t}\n\n\t/**\n\t * Controls the code build of the shader stages.\n\t */\n\tbuildCode() {\n\n\t\tconst shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };\n\n\t\tthis.sortBindingGroups();\n\n\t\tfor ( const shaderStage in shadersData ) {\n\n\t\t\tlet flow = '// code\\n\\n';\n\t\t\tflow += this.flowCode[ shaderStage ];\n\n\t\t\tconst flowNodes = this.flowNodes[ shaderStage ];\n\t\t\tconst mainNode = flowNodes[ flowNodes.length - 1 ];\n\n\t\t\tfor ( const node of flowNodes ) {\n\n\t\t\t\tconst flowSlotData = this.getFlowData( node/*, shaderStage*/ );\n\t\t\t\tconst slotName = node.name;\n\n\t\t\t\tif ( slotName ) {\n\n\t\t\t\t\tif ( flow.length > 0 ) flow += '\\n';\n\n\t\t\t\t\tflow += `\\t// flow -> ${ slotName }\\n\\t`;\n\n\t\t\t\t}\n\n\t\t\t\tflow += `${ flowSlotData.code }\\n\\t`;\n\n\t\t\t\tif ( node === mainNode && shaderStage !== 'compute' ) {\n\n\t\t\t\t\tflow += '// result\\n\\t';\n\n\t\t\t\t\tif ( shaderStage === 'vertex' ) {\n\n\t\t\t\t\t\tflow += 'gl_Position = ';\n\t\t\t\t\t\tflow += `${ flowSlotData.result };`;\n\n\t\t\t\t\t} else if ( shaderStage === 'fragment' ) {\n\n\t\t\t\t\t\tif ( ! node.outputNode.isOutputStructNode ) {\n\n\t\t\t\t\t\t\tflow += 'fragColor = ';\n\t\t\t\t\t\t\tflow += `${ flowSlotData.result };`;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst stageData = shadersData[ shaderStage ];\n\n\t\t\tstageData.extensions = this.getExtensions( shaderStage );\n\t\t\tstageData.uniforms = this.getUniforms( shaderStage );\n\t\t\tstageData.attributes = this.getAttributes( shaderStage );\n\t\t\tstageData.varyings = this.getVaryings( shaderStage );\n\t\t\tstageData.vars = this.getVars( shaderStage, true );\n\t\t\tstageData.structs = this.getStructs( shaderStage );\n\t\t\tstageData.codes = this.getCodes( shaderStage );\n\t\t\tstageData.transforms = this.getTransforms( shaderStage );\n\t\t\tstageData.flow = flow;\n\n\t\t\t// fallbacks\n\n\t\t\tif ( shaderStage === 'vertex' ) {\n\n\t\t\t\tconst ext = this.renderer.backend.extensions;\n\n\t\t\t\tif ( this.object.isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) === false ) {\n\n\t\t\t\t\tstageData.uniforms += '\\nuniform uint nodeUniformDrawId;\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== null ) {\n\n\t\t\tthis.vertexShader = this._getGLSLVertexCode( shadersData.vertex );\n\t\t\tthis.fragmentShader = this._getGLSLFragmentCode( shadersData.fragment );\n\n\t\t} else {\n\n\t\t\tthis.computeShader = this._getGLSLVertexCode( shadersData.compute );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is one of the more important ones since it's responsible\n\t * for generating a matching binding instance for the given uniform node.\n\t *\n\t * These bindings are later used in the renderer to create bind groups\n\t * and layouts.\n\t *\n\t * @param {UniformNode} node - The uniform node.\n\t * @param {string} type - The node data type.\n\t * @param {string} shaderStage - The shader stage.\n\t * @param {?string} [name=null] - An optional uniform name.\n\t * @return {NodeUniform} The node uniform object.\n\t */\n\tgetUniformFromNode( node, type, shaderStage, name = null ) {\n\n\t\tconst uniformNode = super.getUniformFromNode( node, type, shaderStage, name );\n\t\tconst nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );\n\n\t\tlet uniformGPU = nodeData.uniformGPU;\n\n\t\tif ( uniformGPU === undefined ) {\n\n\t\t\tconst group = node.groupNode;\n\t\t\tconst groupName = group.name;\n\n\t\t\tconst bindings = this.getBindGroupArray( groupName, shaderStage );\n\n\t\t\tif ( type === 'texture' ) {\n\n\t\t\t\tuniformGPU = new NodeSampledTexture( uniformNode.name, uniformNode.node, group );\n\t\t\t\tbindings.push( uniformGPU );\n\n\t\t\t} else if ( type === 'cubeTexture' || type === 'cubeDepthTexture' ) {\n\n\t\t\t\tuniformGPU = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group );\n\t\t\t\tbindings.push( uniformGPU );\n\n\t\t\t} else if ( type === 'texture3D' ) {\n\n\t\t\t\tuniformGPU = new NodeSampledTexture3D( uniformNode.name, uniformNode.node, group );\n\t\t\t\tbindings.push( uniformGPU );\n\n\t\t\t} else if ( type === 'buffer' ) {\n\n\t\t\t\tuniformNode.name = `buffer${ node.id }`;\n\n\t\t\t\tconst sharedData = this.getSharedDataFromNode( node );\n\n\t\t\t\tlet buffer = sharedData.buffer;\n\n\t\t\t\tif ( buffer === undefined ) {\n\n\t\t\t\t\tnode.name = `NodeBuffer_${ node.id }`;\n\n\t\t\t\t\tbuffer = new NodeUniformBuffer( node, group );\n\t\t\t\t\tbuffer.name = node.name;\n\n\t\t\t\t\tsharedData.buffer = buffer;\n\n\t\t\t\t}\n\n\t\t\t\tbindings.push( buffer );\n\n\t\t\t\tuniformGPU = buffer;\n\n\t\t\t} else {\n\n\t\t\t\tlet uniformsGroup = this.uniformGroups[ groupName ];\n\n\t\t\t\tif ( uniformsGroup === undefined ) {\n\n\t\t\t\t\tuniformsGroup = new NodeUniformsGroup( groupName, group );\n\n\t\t\t\t\tthis.uniformGroups[ groupName ] = uniformsGroup;\n\n\t\t\t\t\tbindings.push( uniformsGroup );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Add to bindings for this stage if not already present\n\t\t\t\t\tif ( bindings.indexOf( uniformsGroup ) === -1 ) {\n\n\t\t\t\t\t\tbindings.push( uniformsGroup );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tuniformGPU = this.getNodeUniform( uniformNode, type );\n\n\t\t\t\t// Only add uniform if not already present in the group (check by name to avoid duplicates across stages)\n\t\t\t\tconst uniformName = uniformGPU.name;\n\t\t\t\tconst alreadyExists = uniformsGroup.uniforms.some( u => u.name === uniformName );\n\n\t\t\t\tif ( ! alreadyExists ) {\n\n\t\t\t\t\tuniformsGroup.addUniform( uniformGPU );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tnodeData.uniformGPU = uniformGPU;\n\n\t\t}\n\n\t\treturn uniformNode;\n\n\t}\n\n}\n\nlet _vector2 = null;\nlet _color4 = null;\n\n/**\n * Most of the rendering related logic is implemented in the\n * {@link Renderer} module and related management components.\n * Sometimes it is required though to execute commands which are\n * specific to the current 3D backend (which is WebGPU or WebGL 2).\n * This abstract base class defines an interface that encapsulates\n * all backend-related logic. Derived classes for each backend must\n * implement the interface.\n *\n * @abstract\n * @private\n */\nclass Backend {\n\n\t/**\n\t * Constructs a new backend.\n\t *\n\t * @param {Object} parameters - An object holding parameters for the backend.\n\t */\n\tconstructor( parameters = {} ) {\n\n\t\t/**\n\t\t * The parameters of the backend.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.parameters = Object.assign( {}, parameters );\n\n\t\t/**\n\t\t * This weak map holds backend-specific data of objects\n\t\t * like textures, attributes or render targets.\n\t\t *\n\t\t * @type {WeakMap<Object, Object>}\n\t\t */\n\t\tthis.data = new WeakMap();\n\n\t\t/**\n\t\t * A reference to the renderer.\n\t\t *\n\t\t * @type {?Renderer}\n\t\t * @default null\n\t\t */\n\t\tthis.renderer = null;\n\n\t\t/**\n\t\t * A reference to the canvas element the renderer is drawing to.\n\t\t *\n\t\t * @type {?(HTMLCanvasElement|OffscreenCanvas)}\n\t\t * @default null\n\t\t */\n\t\tthis.domElement = null;\n\n\t\t/**\n\t\t * A reference to the timestamp query pool.\n   \t\t *\n   \t\t * @type {{render: ?TimestampQueryPool, compute: ?TimestampQueryPool}}\n\t\t */\n\t\tthis.timestampQueryPool = {\n\t\t\t[ TimestampQuery.RENDER ]: null,\n\t\t\t[ TimestampQuery.COMPUTE ]: null\n\t\t};\n\n\t\t/**\n\t\t * Whether to track timestamps with a Timestamp Query API or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.trackTimestamp = ( parameters.trackTimestamp === true );\n\n\t}\n\n\t/**\n\t * Initializes the backend so it is ready for usage. Concrete backends\n\t * are supposed to implement their rendering context creation and related\n\t * operations in this method.\n\t *\n\t * @async\n\t * @param {Renderer} renderer - The renderer.\n\t * @return {Promise} A Promise that resolves when the backend has been initialized.\n\t */\n\tasync init( renderer ) {\n\n\t\tthis.renderer = renderer;\n\n\t}\n\n\t/**\n\t * The coordinate system of the backend.\n\t *\n\t * @abstract\n\t * @type {number}\n\t * @readonly\n\t */\n\tget coordinateSystem() {}\n\n\t// render context\n\n\t/**\n\t * This method is executed at the beginning of a render call and\n\t * can be used by the backend to prepare the state for upcoming\n\t * draw calls.\n\t *\n\t * @abstract\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tbeginRender( /*renderContext*/ ) {}\n\n\t/**\n\t * This method is executed at the end of a render call and\n\t * can be used by the backend to finalize work after draw\n\t * calls.\n\t *\n\t * @abstract\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tfinishRender( /*renderContext*/ ) {}\n\n\t/**\n\t * This method is executed at the beginning of a compute call and\n\t * can be used by the backend to prepare the state for upcoming\n\t * compute tasks.\n\t *\n\t * @abstract\n\t * @param {Node|Array<Node>} computeGroup - The compute node(s).\n\t */\n\tbeginCompute( /*computeGroup*/ ) {}\n\n\t/**\n\t * This method is executed at the end of a compute call and\n\t * can be used by the backend to finalize work after compute\n\t * tasks.\n\t *\n\t * @abstract\n\t * @param {Node|Array<Node>} computeGroup - The compute node(s).\n\t */\n\tfinishCompute( /*computeGroup*/ ) {}\n\n\t// render object\n\n\t/**\n\t * Executes a draw command for the given render object.\n\t *\n\t * @abstract\n\t * @param {RenderObject} renderObject - The render object to draw.\n\t * @param {Info} info - Holds a series of statistical information about the GPU memory and the rendering process.\n\t */\n\tdraw( /*renderObject, info*/ ) { }\n\n\t// compute node\n\n\t/**\n\t * Executes a compute command for the given compute node.\n\t *\n\t * @abstract\n\t * @param {Node|Array<Node>} computeGroup - The group of compute nodes of a compute call. Can be a single compute node.\n\t * @param {Node} computeNode - The compute node.\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t * @param {ComputePipeline} computePipeline - The compute pipeline.\n\t */\n\tcompute( /*computeGroup, computeNode, computeBindings, computePipeline*/ ) { }\n\n\t// program\n\n\t/**\n\t * Creates a shader program from the given programmable stage.\n\t *\n\t * @abstract\n\t * @param {ProgrammableStage} program - The programmable stage.\n\t */\n\tcreateProgram( /*program*/ ) { }\n\n\t/**\n\t * Destroys the shader program of the given programmable stage.\n\t *\n\t * @abstract\n\t * @param {ProgrammableStage} program - The programmable stage.\n\t */\n\tdestroyProgram( /*program*/ ) { }\n\n\t// bindings\n\n\t/**\n\t * Creates bindings from the given bind group definition.\n\t *\n\t * @abstract\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @param {Array<BindGroup>} bindings - Array of bind groups.\n\t * @param {number} cacheIndex - The cache index.\n\t * @param {number} version - The version.\n\t */\n\tcreateBindings( /*bindGroup, bindings, cacheIndex, version*/ ) { }\n\n\t/**\n\t * Updates the given bind group definition.\n\t *\n\t * @abstract\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @param {Array<BindGroup>} bindings - Array of bind groups.\n\t * @param {number} cacheIndex - The cache index.\n\t * @param {number} version - The version.\n\t */\n\tupdateBindings( /*bindGroup, bindings, cacheIndex, version*/ ) { }\n\n\t/**\n\t * Updates a buffer binding.\n\t *\n\t * @abstract\n\t * @param {Buffer} binding - The buffer binding to update.\n\t */\n\tupdateBinding( /*binding*/ ) { }\n\n\t// pipeline\n\n\t/**\n\t * Creates a render pipeline for the given render object.\n\t *\n\t * @abstract\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {Array<Promise>} promises - An array of compilation promises which are used in `compileAsync()`.\n\t */\n\tcreateRenderPipeline( /*renderObject, promises*/ ) { }\n\n\t/**\n\t * Creates a compute pipeline for the given compute node.\n\t *\n\t * @abstract\n\t * @param {ComputePipeline} computePipeline - The compute pipeline.\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t */\n\tcreateComputePipeline( /*computePipeline, bindings*/ ) { }\n\n\t// cache key\n\n\t/**\n\t * Returns `true` if the render pipeline requires an update.\n\t *\n\t * @abstract\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {boolean} Whether the render pipeline requires an update or not.\n\t */\n\tneedsRenderUpdate( /*renderObject*/ ) { }\n\n\t/**\n\t * Returns a cache key that is used to identify render pipelines.\n\t *\n\t * @abstract\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {string} The cache key.\n\t */\n\tgetRenderCacheKey( /*renderObject*/ ) { }\n\n\t// node builder\n\n\t/**\n\t * Returns a node builder for the given render object.\n\t *\n\t * @abstract\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {Renderer} renderer - The renderer.\n\t * @return {NodeBuilder} The node builder.\n\t */\n\tcreateNodeBuilder( /*renderObject, renderer*/ ) { }\n\n\t// textures\n\n\t/**\n\t * Updates a GPU sampler for the given texture.\n\t *\n\t * @abstract\n\t * @param {Texture} texture - The texture to update the sampler for.\n\t * @return {string} The current sampler key.\n\t */\n\tupdateSampler( /*texture*/ ) { }\n\n\t/**\n\t * Creates a default texture for the given texture that can be used\n\t * as a placeholder until the actual texture is ready for usage.\n\t *\n\t * @abstract\n\t * @param {Texture} texture - The texture to create a default texture for.\n\t */\n\tcreateDefaultTexture( /*texture*/ ) { }\n\n\t/**\n\t * Defines a texture on the GPU for the given texture object.\n\t *\n\t * @abstract\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t */\n\tcreateTexture( /*texture, options={}*/ ) { }\n\n\t/**\n\t * Uploads the updated texture data to the GPU.\n\t *\n\t * @abstract\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t */\n\tupdateTexture( /*texture, options = {}*/ ) { }\n\n\t/**\n\t * Generates mipmaps for the given texture.\n\t *\n\t * @abstract\n\t * @param {Texture} texture - The texture.\n\t */\n\tgenerateMipmaps( /*texture*/ ) { }\n\n\t/**\n\t * Destroys the GPU data for the given texture object.\n\t *\n\t * @abstract\n\t * @param {Texture} texture - The texture.\n\t * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.\n\t */\n\tdestroyTexture( /*texture, isDefaultTexture*/ ) { }\n\n\t/**\n\t * Returns texture data as a typed array.\n\t *\n\t * @abstract\n\t * @async\n\t * @param {Texture} texture - The texture to copy.\n\t * @param {number} x - The x coordinate of the copy origin.\n\t * @param {number} y - The y coordinate of the copy origin.\n\t * @param {number} width - The width of the copy.\n\t * @param {number} height - The height of the copy.\n\t * @param {number} faceIndex - The face index.\n\t * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.\n\t */\n\tasync copyTextureToBuffer( /*texture, x, y, width, height, faceIndex*/ ) {}\n\n\t/**\n\t * Copies data of the given source texture to the given destination texture.\n\t *\n\t * @abstract\n\t * @param {Texture} srcTexture - The source texture.\n\t * @param {Texture} dstTexture - The destination texture.\n\t * @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.\n\t * @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.\n\t * @param {number} [srcLevel=0] - The source mip level to copy from.\n\t * @param {number} [dstLevel=0] - The destination mip level to copy to.\n\t */\n\tcopyTextureToTexture( /*srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0*/ ) {}\n\n\t/**\n\t* Copies the current bound framebuffer to the given texture.\n\t*\n\t* @abstract\n\t* @param {Texture} texture - The destination texture.\n\t* @param {RenderContext} renderContext - The render context.\n\t* @param {Vector4} rectangle - A four dimensional vector defining the origin and dimension of the copy.\n\t*/\n\tcopyFramebufferToTexture( /*texture, renderContext, rectangle*/ ) {}\n\n\t// attributes\n\n\t/**\n\t * Creates the GPU buffer of a shader attribute.\n\t *\n\t * @abstract\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tcreateAttribute( /*attribute*/ ) { }\n\n\t/**\n\t * Creates the GPU buffer of an indexed shader attribute.\n\t *\n\t * @abstract\n\t * @param {BufferAttribute} attribute - The indexed buffer attribute.\n\t */\n\tcreateIndexAttribute( /*attribute*/ ) { }\n\n\t/**\n\t * Creates the GPU buffer of a storage attribute.\n\t *\n\t * @abstract\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tcreateStorageAttribute( /*attribute*/ ) { }\n\n\t/**\n\t * Updates the GPU buffer of a shader attribute.\n\t *\n\t * @abstract\n\t * @param {BufferAttribute} attribute - The buffer attribute to update.\n\t */\n\tupdateAttribute( /*attribute*/ ) { }\n\n\t/**\n\t * Destroys the GPU buffer of a shader attribute.\n\t *\n\t * @abstract\n\t * @param {BufferAttribute} attribute - The buffer attribute to destroy.\n\t */\n\tdestroyAttribute( /*attribute*/ ) { }\n\n\t// canvas\n\n\t/**\n\t * Returns the backend's rendering context.\n\t *\n\t * @abstract\n\t * @return {Object} The rendering context.\n\t */\n\tgetContext() { }\n\n\t/**\n\t * Backends can use this method if they have to run\n\t * logic when the renderer gets resized.\n\t *\n\t * @abstract\n\t */\n\tupdateSize() { }\n\n\t/**\n\t * Updates the viewport with the values from the given render context.\n\t *\n\t * @abstract\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tupdateViewport( /*renderContext*/ ) {}\n\n\t// utils\n\n\t/**\n\t * Updates a unique identifier for the given render context that can be used\n\t * to allocate resources like occlusion queries or timestamp queries.\n\t *\n\t * @param {RenderContext|ComputeNode} abstractRenderContext - The render context.\n\t */\n\tupdateTimeStampUID( abstractRenderContext ) {\n\n\t\tconst contextData = this.get( abstractRenderContext );\n\t\tconst frame = this.renderer.info.frame;\n\n\t\tlet prefix;\n\n\t\tif ( abstractRenderContext.isComputeNode === true ) {\n\n\t\t\tprefix = 'c:' + this.renderer.info.compute.frameCalls;\n\n\t\t} else {\n\n\t\t\tprefix = 'r:' + this.renderer.info.render.frameCalls;\n\n\t\t}\n\n\t\tcontextData.timestampUID = prefix + ':' + abstractRenderContext.id + ':f' + frame;\n\n\t}\n\n\t/**\n\t * Returns a unique identifier for the given render context that can be used\n\t * to allocate resources like occlusion queries or timestamp queries.\n\t *\n\t * @param {RenderContext|ComputeNode} abstractRenderContext - The render context.\n\t * @return {string} The unique identifier.\n\t */\n\tgetTimestampUID( abstractRenderContext ) {\n\n\t\treturn this.get( abstractRenderContext ).timestampUID;\n\n\t}\n\n\t/**\n\t * Returns all timestamp frames for the given type.\n\t *\n\t * @param {string} type - The type of the time stamp.\n\t * @return {Array<number>} The timestamp frames.\n\t */\n\tgetTimestampFrames( type ) {\n\n\t\tconst queryPool = this.timestampQueryPool[ type ];\n\n\t\treturn queryPool ? queryPool.getTimestampFrames() : [];\n\n\t}\n\n\t/**\n\t * Returns the query pool for the given uid.\n\t *\n\t * @param {string} uid - The unique identifier.\n\t * @return {TimestampQueryPool} The query pool.\n\t */\n\t_getQueryPool( uid ) {\n\n\t\tconst type = uid.startsWith( 'c:' ) ? TimestampQuery.COMPUTE : TimestampQuery.RENDER;\n\t\tconst queryPool = this.timestampQueryPool[ type ];\n\n\t\treturn queryPool;\n\n\t}\n\n\t/**\n\t * Returns the timestamp for the given uid.\n\t *\n\t * @param {string} uid - The unique identifier.\n\t * @return {number} The timestamp.\n\t */\n\tgetTimestamp( uid ) {\n\n\t\tconst queryPool = this._getQueryPool( uid );\n\n\t\treturn queryPool.getTimestamp( uid );\n\n\t}\n\n\t/**\n\t * Returns `true` if a timestamp for the given uid is available.\n\t *\n\t * @param {string} uid - The unique identifier.\n\t * @return {boolean} Whether the timestamp is available or not.\n\t */\n\thasTimestamp( uid ) {\n\n\t\tconst queryPool = this._getQueryPool( uid );\n\n\t\treturn queryPool.hasTimestamp( uid );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given 3D object is fully occluded by other\n\t * 3D objects in the scene. Backends must implement this method by using\n\t * a Occlusion Query API.\n\t *\n\t * @abstract\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {Object3D} object - The 3D object to test.\n\t * @return {boolean} Whether the 3D object is fully occluded or not.\n\t */\n\tisOccluded( /*renderContext, object*/ ) {}\n\n\t/**\n\t * Resolves the time stamp for the given render context and type.\n\t *\n\t * @async\n\t * @abstract\n\t * @param {string} [type='render'] - The type of the time stamp.\n\t * @return {Promise<number>} A Promise that resolves with the time stamp.\n\t */\n\tasync resolveTimestampsAsync( type = 'render' ) {\n\n\t\tif ( ! this.trackTimestamp ) {\n\n\t\t\twarnOnce( 'WebGPURenderer: Timestamp tracking is disabled.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst queryPool = this.timestampQueryPool[ type ];\n\n\t\tif ( ! queryPool ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst duration = await queryPool.resolveQueriesAsync();\n\n\t\tthis.renderer.info[ type ].timestamp = duration;\n\n\t\treturn duration;\n\n\t}\n\n\t/**\n\t * This method performs a readback operation by moving buffer data from\n\t * a storage buffer attribute from the GPU to the CPU.\n\t *\n\t * @async\n\t * @param {StorageBufferAttribute} attribute - The storage buffer attribute.\n\t * @return {Promise<ArrayBuffer>} A promise that resolves with the buffer data when the data are ready.\n\t */\n\tasync getArrayBufferAsync( /* attribute */ ) {}\n\n\t/**\n\t * Checks if the given feature is supported by the backend.\n\t *\n\t * @async\n\t * @abstract\n\t * @param {string} name - The feature's name.\n\t * @return {Promise<boolean>} A Promise that resolves with a bool that indicates whether the feature is supported or not.\n\t */\n\tasync hasFeatureAsync( /*name*/ ) { }\n\n\t/**\n\t * Checks if the given feature is supported  by the backend.\n\t *\n\t * @abstract\n\t * @param {string} name - The feature's name.\n\t * @return {boolean} Whether the feature is supported or not.\n\t */\n\thasFeature( /*name*/ ) {}\n\n\t/**\n\t * Returns the drawing buffer size.\n\t *\n\t * @return {Vector2} The drawing buffer size.\n\t */\n\tgetDrawingBufferSize() {\n\n\t\t_vector2 = _vector2 || new Vector2();\n\n\t\treturn this.renderer.getDrawingBufferSize( _vector2 );\n\n\t}\n\n\t/**\n\t * Defines the scissor test.\n\t *\n\t * @abstract\n\t * @param {boolean} boolean - Whether the scissor test should be enabled or not.\n\t */\n\tsetScissorTest( /*boolean*/ ) { }\n\n\t/**\n\t * Returns the clear color and alpha into a single\n\t * color object.\n\t *\n\t * @return {Color4} The clear color.\n\t */\n\tgetClearColor() {\n\n\t\tconst renderer = this.renderer;\n\n\t\t_color4 = _color4 || new Color4();\n\n\t\trenderer.getClearColor( _color4 );\n\n\t\t_color4.getRGB( _color4 );\n\n\t\treturn _color4;\n\n\t}\n\n\t/**\n\t * Returns the DOM element. If no DOM element exists, the backend\n\t * creates a new one.\n\t *\n\t * @return {HTMLCanvasElement} The DOM element.\n\t */\n\tgetDomElement() {\n\n\t\tlet domElement = this.domElement;\n\n\t\tif ( domElement === null ) {\n\n\t\t\tdomElement = ( this.parameters.canvas !== undefined ) ? this.parameters.canvas : createCanvasElement();\n\n\t\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\t\tif ( 'setAttribute' in domElement ) domElement.setAttribute( 'data-engine', `three.js r${REVISION} webgpu` );\n\n\t\t\tthis.domElement = domElement;\n\n\t\t}\n\n\t\treturn domElement;\n\n\t}\n\n\t/**\n\t * Checks if the backend has the given compatibility.\n\t *\n\t * @abstract\n\t * @param {string} name - The compatibility.\n\t * @return {boolean} Whether the backend has the given compatibility or not.\n\t */\n\thasCompatibility( /*name*/ ) {\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Initializes the render target defined in the given render context.\n\t *\n\t * @abstract\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tinitRenderTarget( /*renderContext*/ ) {}\n\n\t/**\n\t * Sets a dictionary for the given object into the\n\t * internal data structure.\n\t *\n\t * @param {Object} object - The object.\n\t * @param {Object} value - The dictionary to set.\n\t */\n\tset( object, value ) {\n\n\t\tthis.data.set( object, value );\n\n\t}\n\n\t/**\n\t * Returns the dictionary for the given object.\n\t *\n\t * @param {Object} object - The object.\n\t * @return {Object} The object's dictionary.\n\t */\n\tget( object ) {\n\n\t\tlet map = this.data.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tthis.data.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\t/**\n\t * Checks if the given object has a dictionary\n\t * with data defined.\n\t *\n\t * @param {Object} object - The object.\n\t * @return {boolean} Whether a dictionary for the given object as been defined or not.\n\t */\n\thas( object ) {\n\n\t\treturn this.data.has( object );\n\n\t}\n\n\t/**\n\t * Deletes an object from the internal data structure.\n\t *\n\t * @param {Object} object - The object to delete.\n\t */\n\tdelete( object ) {\n\n\t\tthis.data.delete( object );\n\n\t}\n\n\t/**\n\t * Delete GPU data associated with a bind group.\n\t *\n\t * @abstract\n\t * @param {BindGroup} bindGroup - The bind group.\n\t */\n\tdeleteBindGroupData( /*bindGroup*/ ) { }\n\n\t/**\n\t * Frees internal resources.\n\t *\n\t * @abstract\n\t */\n\tdispose() { }\n\n}\n\nlet _id$1 = 0;\n\n/**\n * This module is internally used in context of compute shaders.\n * This type of shader is not natively supported in WebGL 2 and\n * thus implemented via Transform Feedback. `DualAttributeData`\n * manages the related data.\n *\n * @private\n */\nclass DualAttributeData {\n\n\tconstructor( attributeData, dualBuffer ) {\n\n\t\tthis.buffers = [ attributeData.bufferGPU, dualBuffer ];\n\t\tthis.type = attributeData.type;\n\t\tthis.bufferType = attributeData.bufferType;\n\t\tthis.pbo = attributeData.pbo;\n\t\tthis.byteLength = attributeData.byteLength;\n\t\tthis.bytesPerElement = attributeData.BYTES_PER_ELEMENT;\n\t\tthis.version = attributeData.version;\n\t\tthis.isInteger = attributeData.isInteger;\n\t\tthis.activeBufferIndex = 0;\n\t\tthis.baseId = attributeData.id;\n\n\t}\n\n\n\tget id() {\n\n\t\treturn `${ this.baseId }|${ this.activeBufferIndex }`;\n\n\t}\n\n\tget bufferGPU() {\n\n\t\treturn this.buffers[ this.activeBufferIndex ];\n\n\t}\n\n\tget transformBuffer() {\n\n\t\treturn this.buffers[ this.activeBufferIndex ^ 1 ];\n\n\t}\n\n\tswitchBuffers() {\n\n\t\tthis.activeBufferIndex ^= 1;\n\n\t}\n\n}\n\n/**\n * A WebGL 2 backend utility module for managing shader attributes.\n *\n * @private\n */\nclass WebGLAttributeUtils {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGLBackend} backend - The WebGL 2 backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGL 2 backend.\n\t\t *\n\t\t * @type {WebGLBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t}\n\n\t/**\n\t * Creates the GPU buffer for the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t * @param {GLenum } bufferType - A flag that indicates the buffer type and thus binding point target.\n\t */\n\tcreateAttribute( attribute, bufferType ) {\n\n\t\tconst backend = this.backend;\n\t\tconst { gl } = backend;\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage || gl.STATIC_DRAW;\n\n\t\tconst bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;\n\t\tconst bufferData = backend.get( bufferAttribute );\n\n\t\tlet bufferGPU = bufferData.bufferGPU;\n\n\t\tif ( bufferGPU === undefined ) {\n\n\t\t\tbufferGPU = this._createBuffer( gl, bufferType, array, usage );\n\n\t\t\tbufferData.bufferGPU = bufferGPU;\n\t\t\tbufferData.bufferType = bufferType;\n\t\t\tbufferData.version = bufferAttribute.version;\n\n\t\t}\n\n\t\t//attribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( typeof Float16Array !== 'undefined' && array instanceof Float16Array ) {\n\n\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t\t} else {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLBackend: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\tlet attributeData = {\n\t\t\tbufferGPU,\n\t\t\tbufferType,\n\t\t\ttype,\n\t\t\tbyteLength: array.byteLength,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version,\n\t\t\tpbo: attribute.pbo,\n\t\t\tisInteger: type === gl.INT || type === gl.UNSIGNED_INT || attribute.gpuType === IntType,\n\t\t\tid: _id$1 ++\n\t\t};\n\n\t\tif ( attribute.isStorageBufferAttribute || attribute.isStorageInstancedBufferAttribute ) {\n\n\t\t\t// create buffer for transform feedback use\n\t\t\tconst bufferGPUDual = this._createBuffer( gl, bufferType, array, usage );\n\t\t\tattributeData = new DualAttributeData( attributeData, bufferGPUDual );\n\n\t\t}\n\n\t\tbackend.set( attribute, attributeData );\n\n\t}\n\n\t/**\n\t * Updates the GPU buffer of the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tupdateAttribute( attribute ) {\n\n\t\tconst backend = this.backend;\n\t\tconst { gl } = backend;\n\n\t\tconst array = attribute.array;\n\t\tconst bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;\n\t\tconst bufferData = backend.get( bufferAttribute );\n\t\tconst bufferType = bufferData.bufferType;\n\t\tconst updateRanges = attribute.isInterleavedBufferAttribute ? attribute.data.updateRanges : attribute.updateRanges;\n\n\t\tgl.bindBuffer( bufferType, bufferData.bufferGPU );\n\n\t\tif ( updateRanges.length === 0 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\t\t\t\tgl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, range.start, range.count );\n\n\t\t\t}\n\n\t\t\tbufferAttribute.clearUpdateRanges();\n\n\t\t}\n\n\t\tgl.bindBuffer( bufferType, null );\n\n\t\tbufferData.version = bufferAttribute.version;\n\n\t}\n\n\t/**\n\t * Destroys the GPU buffer of the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tdestroyAttribute( attribute ) {\n\n\t\tconst backend = this.backend;\n\t\tconst { gl } = backend;\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tbackend.delete( attribute.data );\n\n\t\t}\n\n\t\tconst attributeData = backend.get( attribute );\n\n\t\tgl.deleteBuffer( attributeData.bufferGPU );\n\n\t\tbackend.delete( attribute );\n\n\t}\n\n\t/**\n\t * This method performs a readback operation by moving buffer data from\n\t * a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can\n\t * be used to retain and reuse handles to the intermediate buffers and prevent\n\t * new allocation.\n\t *\n\t * @async\n\t * @param {BufferAttribute} attribute - The storage buffer attribute to read frm.\n\t * @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.\n\t * @param {number} offset - The storage buffer attribute.\n\t * @param {number} count - The offset from which to start reading the\n\t * @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.\n\t */\n\tasync getArrayBufferAsync( attribute, target = null, offset = 0, count = -1 ) {\n\n\t\tconst backend = this.backend;\n\t\tconst { gl } = backend;\n\n\t\tconst bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;\n\t\tconst attributeInfo = backend.get( bufferAttribute );\n\t\tconst { bufferGPU } = attributeInfo;\n\n\t\tconst byteLength = count === -1 ? attributeInfo.byteLength - offset : count;\n\n\t\t// read the data back\n\t\tlet dstBuffer;\n\t\tif ( target === null ) {\n\n\t\t\tdstBuffer = new Uint8Array( new ArrayBuffer( byteLength ) );\n\n\t\t} else if ( target.isReadbackBuffer ) {\n\n\t\t\tif ( target._mapped === true ) {\n\n\t\t\t\tthrow new Error( 'WebGPURenderer: ReadbackBuffer must be released before being used again.' );\n\n\t\t\t}\n\n\t\t\tconst releaseCallback = () => {\n\n\t\t\t\ttarget.buffer = null;\n\t\t\t\ttarget._mapped = false;\n\t\t\t\ttarget.removeEventListener( 'release', releaseCallback );\n\t\t\t\ttarget.removeEventListener( 'dispose', releaseCallback );\n\n\t\t\t};\n\n\t\t\ttarget.addEventListener( 'release', releaseCallback );\n\t\t\ttarget.addEventListener( 'dispose', releaseCallback );\n\n\t\t\t// WebGL has no concept of a \"mapped\" data buffer so we create a new buffer, instead.\n\t\t\tdstBuffer = new Uint8Array( new ArrayBuffer( byteLength ) );\n\t\t\ttarget.buffer = dstBuffer.buffer;\n\n\t\t} else {\n\n\t\t\tdstBuffer = new Uint8Array( target );\n\n\t\t}\n\n\t\t// Ensure the buffer is bound before reading\n\t\tgl.bindBuffer( gl.COPY_READ_BUFFER, bufferGPU );\n\t\tgl.getBufferSubData( gl.COPY_READ_BUFFER, offset, dstBuffer );\n\n\t\tgl.bindBuffer( gl.COPY_READ_BUFFER, null );\n\t\tgl.bindBuffer( gl.COPY_WRITE_BUFFER, null );\n\n\t\t// return the appropriate type\n\t\tif ( target && target.isReadbackBuffer ) {\n\n\t\t\treturn target;\n\n\t\t} else {\n\n\t\t\treturn dstBuffer.buffer;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a WebGL buffer with the given data.\n\t *\n\t * @private\n\t * @param {WebGL2RenderingContext} gl - The rendering context.\n\t * @param {GLenum } bufferType - A flag that indicates the buffer type and thus binding point target.\n\t * @param {TypedArray} array - The array of the buffer attribute.\n\t * @param {GLenum} usage - The usage.\n\t * @return {WebGLBuffer} The WebGL buffer.\n\t */\n\t_createBuffer( gl, bufferType, array, usage ) {\n\n\t\tconst bufferGPU = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, bufferGPU );\n\t\tgl.bufferData( bufferType, array, usage );\n\t\tgl.bindBuffer( bufferType, null );\n\n\t\treturn bufferGPU;\n\n\t}\n\n}\n\nlet equationToGL, factorToGL;\n\n/**\n * A WebGL 2 backend utility module for managing the WebGL state.\n *\n * The major goal of this module is to reduce the number of state changes\n * by caching the WEbGL state with a series of variables. In this way, the\n * renderer only executes state change commands when necessary which\n * improves the overall performance.\n *\n * @private\n */\nclass WebGLState {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGLBackend} backend - The WebGL 2 backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGL 2 backend.\n\t\t *\n\t\t * @type {WebGLBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * A reference to the rendering context.\n\t\t *\n\t\t * @type {WebGL2RenderingContext}\n\t\t */\n\t\tthis.gl = this.backend.gl;\n\n\t\t// Below properties are intended to cache\n\t\t// the WebGL state and are not explicitly\n\t\t// documented for convenience reasons.\n\n\t\tthis.enabled = {};\n\t\tthis.parameters = {};\n\t\tthis.currentFlipSided = null;\n\t\tthis.currentCullFace = null;\n\t\tthis.currentProgram = null;\n\t\tthis.currentBlendingEnabled = false;\n\t\tthis.currentBlending = null;\n\t\tthis.currentBlendSrc = null;\n\t\tthis.currentBlendDst = null;\n\t\tthis.currentBlendSrcAlpha = null;\n\t\tthis.currentBlendDstAlpha = null;\n\t\tthis.currentPremultipledAlpha = null;\n\t\tthis.currentPolygonOffsetFactor = null;\n\t\tthis.currentPolygonOffsetUnits = null;\n\t\tthis.currentColorMask = null;\n\t\tthis.currentDepthReversed = false;\n\t\tthis.currentDepthFunc = null;\n\t\tthis.currentDepthMask = null;\n\t\tthis.currentStencilFunc = null;\n\t\tthis.currentStencilRef = null;\n\t\tthis.currentStencilFuncMask = null;\n\t\tthis.currentStencilFail = null;\n\t\tthis.currentStencilZFail = null;\n\t\tthis.currentStencilZPass = null;\n\t\tthis.currentStencilMask = null;\n\t\tthis.currentLineWidth = null;\n\t\tthis.currentClippingPlanes = 0;\n\n\t\tthis.currentVAO = null;\n\t\tthis.currentIndex = null;\n\n\t\tthis.currentBoundFramebuffers = {};\n\t\tthis.currentDrawbuffers = new WeakMap();\n\n\t\tthis.maxTextures = this.gl.getParameter( this.gl.MAX_TEXTURE_IMAGE_UNITS );\n\t\tthis.currentTextureSlot = null;\n\t\tthis.currentBoundTextures = {};\n\t\tthis.currentBoundBufferBases = {};\n\n\t\tthis._init();\n\n\t}\n\n\t/**\n\t * Inits the state of the utility.\n\t *\n\t * @private\n\t */\n\t_init() {\n\n\t\tconst gl = this.gl;\n\n\t\t// Store only WebGL constants here.\n\n\t\tequationToGL = {\n\t\t\t[ AddEquation ]: gl.FUNC_ADD,\n\t\t\t[ SubtractEquation ]: gl.FUNC_SUBTRACT,\n\t\t\t[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT\n\t\t};\n\n\t\tfactorToGL = {\n\t\t\t[ ZeroFactor ]: gl.ZERO,\n\t\t\t[ OneFactor ]: gl.ONE,\n\t\t\t[ SrcColorFactor ]: gl.SRC_COLOR,\n\t\t\t[ SrcAlphaFactor ]: gl.SRC_ALPHA,\n\t\t\t[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,\n\t\t\t[ DstColorFactor ]: gl.DST_COLOR,\n\t\t\t[ DstAlphaFactor ]: gl.DST_ALPHA,\n\t\t\t[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,\n\t\t\t[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,\n\t\t\t[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,\n\t\t\t[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA\n\t\t};\n\n\t\tconst scissorParam = gl.getParameter( gl.SCISSOR_BOX );\n\t\tconst viewportParam = gl.getParameter( gl.VIEWPORT );\n\n\t\tthis.currentScissor = new Vector4().fromArray( scissorParam );\n\t\tthis.currentViewport = new Vector4().fromArray( viewportParam );\n\n\t\tthis._tempVec4 = new Vector4();\n\n\t}\n\n\t/**\n\t * Enables the given WebGL capability.\n\t *\n\t * This method caches the capability state so\n\t * `gl.enable()` is only called when necessary.\n\t *\n\t * @param {GLenum} id - The capability to enable.\n\t */\n\tenable( id ) {\n\n\t\tconst { enabled } = this;\n\n\t\tif ( enabled[ id ] !== true ) {\n\n\t\t\tthis.gl.enable( id );\n\t\t\tenabled[ id ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disables the given WebGL capability.\n\t *\n\t * This method caches the capability state so\n\t * `gl.disable()` is only called when necessary.\n\t *\n\t * @param {GLenum} id - The capability to enable.\n\t */\n\tdisable( id ) {\n\n\t\tconst { enabled } = this;\n\n\t\tif ( enabled[ id ] !== false ) {\n\n\t\t\tthis.gl.disable( id );\n\t\t\tenabled[ id ] = false;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies whether polygons are front- or back-facing\n\t * by setting the winding orientation.\n\t *\n\t * This method caches the state so `gl.frontFace()` is only\n\t * called when necessary.\n\t *\n\t * @param {boolean} flipSided - Whether triangles flipped their sides or not.\n\t */\n\tsetFlipSided( flipSided ) {\n\n\t\tif ( this.currentFlipSided !== flipSided ) {\n\n\t\t\tconst { gl } = this;\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tthis.currentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies whether or not front- and/or back-facing\n\t * polygons can be culled.\n\t *\n\t * This method caches the state so `gl.cullFace()` is only\n\t * called when necessary.\n\t *\n\t * @param {number} cullFace - Defines which polygons are candidates for culling.\n\t */\n\tsetCullFace( cullFace ) {\n\n\t\tconst { gl } = this;\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tthis.enable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== this.currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.disable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tthis.currentCullFace = cullFace;\n\n\t}\n\n\t/**\n\t * Specifies the width of line primitives.\n\t *\n\t * This method caches the state so `gl.lineWidth()` is only\n\t * called when necessary.\n\t *\n\t * @param {number} width - The line width.\n\t */\n\tsetLineWidth( width ) {\n\n\t\tconst { currentLineWidth, gl } = this;\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tgl.lineWidth( width );\n\n\t\t\tthis.currentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tsetMRTBlending( textures, mrt, material ) {\n\n\t\tconst gl = this.gl;\n\t\tconst drawBuffersIndexedExt = this.backend.drawBuffersIndexedExt;\n\n\t\tif ( ! drawBuffersIndexedExt ) {\n\n\t\t\twarnOnce( 'WebGPURenderer: Multiple Render Targets (MRT) blending configuration is not fully supported in compatibility mode. The material blending will be used for all render targets.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tlet blending = null;\n\n\t\t\tif ( mrt !== null ) {\n\n\t\t\t\tconst blendMode = mrt.getBlendMode( texture.name );\n\n\t\t\t\tif ( blendMode.blending === MaterialBlending ) {\n\n\t\t\t\t\t// use material blending\n\t\t\t\t\tblending = material;\n\n\t\t\t\t} else if ( blendMode.blending !== NoBlending ) {\n\n\t\t\t\t\tblending = blendMode;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// use material blending\n\t\t\t\tblending = material;\n\n\t\t\t}\n\n\t\t\tif ( blending !== null ) {\n\n\t\t\t\tthis._setMRTBlendingIndex( i, blending );\n\n\t\t\t} else {\n\n\t\t\t\t// use opaque blending (no blending)\n\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( i, gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies blending configuration for a specific draw buffer index.\n\t *\n\t * @private\n\t * @param {number} index - The draw buffer index.\n\t * @param {Object} blending - The blending configuration (material or BlendMode).\n\t */\n\t_setMRTBlendingIndex( index, blending ) {\n\n\t\tconst { gl } = this;\n\t\tconst drawBuffersIndexedExt = this.backend.drawBuffersIndexedExt;\n\n\t\tconst blendingType = blending.blending;\n\t\tconst blendSrc = blending.blendSrc;\n\t\tconst blendDst = blending.blendDst;\n\t\tconst blendEquation = blending.blendEquation;\n\t\tconst premultipliedAlpha = blending.premultipliedAlpha;\n\n\t\tif ( blendingType === CustomBlending ) {\n\n\t\t\tconst blendSrcAlpha = blending.blendSrcAlpha !== null ? blending.blendSrcAlpha : blendSrc;\n\t\t\tconst blendDstAlpha = blending.blendDstAlpha !== null ? blending.blendDstAlpha : blendDst;\n\t\t\tconst blendEquationAlpha = blending.blendEquationAlpha !== null ? blending.blendEquationAlpha : blendEquation;\n\n\t\t\tdrawBuffersIndexedExt.blendEquationSeparateiOES( index, equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t} else {\n\n\t\t\tdrawBuffersIndexedExt.blendEquationSeparateiOES( index, gl.FUNC_ADD, gl.FUNC_ADD );\n\n\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\tswitch ( blendingType ) {\n\n\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ONE, gl.ONE, gl.ONE, gl.ONE );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( blendingType ) {\n\n\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tdrawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Defines the blending.\n\t *\n\t * This method caches the state so `gl.blendEquation()`, `gl.blendEquationSeparate()`,\n\t * `gl.blendFunc()` and  `gl.blendFuncSeparate()` are only called when necessary.\n\t *\n\t * @param {number} blending - The blending type.\n\t * @param {number} blendEquation - The blending equation.\n\t * @param {number} blendSrc - Only relevant for custom blending. The RGB source blending factor.\n\t * @param {number} blendDst - Only relevant for custom blending. The RGB destination blending factor.\n\t * @param {number} blendEquationAlpha - Only relevant for custom blending. The blending equation for alpha.\n\t * @param {number} blendSrcAlpha - Only relevant for custom blending. The alpha source blending factor.\n\t * @param {number} blendDstAlpha - Only relevant for custom blending. The alpha destination blending factor.\n\t * @param {boolean} premultipliedAlpha - Whether premultiplied alpha is enabled or not.\n\t */\n\tsetBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tconst { gl } = this;\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( this.currentBlendingEnabled === true ) {\n\n\t\t\t\tthis.disable( gl.BLEND );\n\t\t\t\tthis.currentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.currentBlendingEnabled === false ) {\n\n\t\t\tthis.enable( gl.BLEND );\n\t\t\tthis.currentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== this.currentBlending || premultipliedAlpha !== this.currentPremultipledAlpha ) {\n\n\t\t\t\tif ( this.currentBlendEquation !== AddEquation || this.currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\n\t\t\t\t\tthis.currentBlendEquation = AddEquation;\n\t\t\t\t\tthis.currentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\terror( 'WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\terror( 'WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true' );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\terror( 'WebGLState: MultiplyBlending requires material.premultipliedAlpha = true' );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\terror( 'WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.currentBlendSrc = null;\n\t\t\t\tthis.currentBlendDst = null;\n\t\t\t\tthis.currentBlendSrcAlpha = null;\n\t\t\t\tthis.currentBlendDstAlpha = null;\n\n\t\t\t\tthis.currentBlending = blending;\n\t\t\t\tthis.currentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== this.currentBlendEquation || blendEquationAlpha !== this.currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tthis.currentBlendEquation = blendEquation;\n\t\t\tthis.currentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== this.currentBlendSrc || blendDst !== this.currentBlendDst || blendSrcAlpha !== this.currentBlendSrcAlpha || blendDstAlpha !== this.currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tthis.currentBlendSrc = blendSrc;\n\t\t\tthis.currentBlendDst = blendDst;\n\t\t\tthis.currentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tthis.currentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tthis.currentBlending = blending;\n\t\tthis.currentPremultipledAlpha = false;\n\n\t}\n\n\t/**\n\t * Specifies whether colors can be written when rendering\n\t * into a framebuffer or not.\n\t *\n\t * This method caches the state so `gl.colorMask()` is only\n\t * called when necessary.\n\t *\n\t * @param {boolean} colorMask - The color mask.\n\t */\n\tsetColorMask( colorMask ) {\n\n\t\tif ( this.currentColorMask !== colorMask ) {\n\n\t\t\tthis.gl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\tthis.currentColorMask = colorMask;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies whether the depth test is enabled or not.\n\t *\n\t * @param {boolean} depthTest - Whether the depth test is enabled or not.\n\t */\n\tsetDepthTest( depthTest ) {\n\n\t\tconst { gl } = this;\n\n\t\tif ( depthTest ) {\n\n\t\t\tthis.enable( gl.DEPTH_TEST );\n\n\t\t} else {\n\n\t\t\tthis.disable( gl.DEPTH_TEST );\n\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Configures the WebGL state to use a reversed depth buffer.\n\t *\n\t * @param {boolean} reversed - Whether the depth buffer is reversed or not.\n\t */\n\tsetReversedDepth( reversed ) {\n\n\t\tif ( this.currentDepthReversed !== reversed ) {\n\n\t\t\tconst ext = this.backend.extensions.get( 'EXT_clip_control' );\n\n\t\t\tif ( reversed ) {\n\n\t\t\t\text.clipControlEXT( ext.LOWER_LEFT_EXT, ext.ZERO_TO_ONE_EXT );\n\n\t\t\t} else {\n\n\t\t\t\text.clipControlEXT( ext.LOWER_LEFT_EXT, ext.NEGATIVE_ONE_TO_ONE_EXT );\n\n\t\t\t}\n\n\t\t\tthis.currentDepthReversed = reversed;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies whether depth values can be written when rendering\n\t * into a framebuffer or not.\n\t *\n\t * This method caches the state so `gl.depthMask()` is only\n\t * called when necessary.\n\t *\n\t * @param {boolean} depthMask - The depth mask.\n\t */\n\tsetDepthMask( depthMask ) {\n\n\t\tif ( this.currentDepthMask !== depthMask ) {\n\n\t\t\tthis.gl.depthMask( depthMask );\n\t\t\tthis.currentDepthMask = depthMask;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies the depth compare function.\n\t *\n\t * This method caches the state so `gl.depthFunc()` is only\n\t * called when necessary.\n\t *\n\t * @param {number} depthFunc - The depth compare function.\n\t */\n\tsetDepthFunc( depthFunc ) {\n\n\t\tif ( this.currentDepthReversed ) depthFunc = ReversedDepthFuncs[ depthFunc ];\n\n\t\tif ( this.currentDepthFunc !== depthFunc ) {\n\n\t\t\tconst { gl } = this;\n\n\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase LessDepth:\n\n\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t}\n\n\t\t\tthis.currentDepthFunc = depthFunc;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies the scissor box.\n\t *\n\t * @param {number} x - The x-coordinate of the lower left corner of the viewport.\n\t * @param {number} y - The y-coordinate of the lower left corner of the viewport.\n\t * @param {number} width - The width of the viewport.\n\t * @param {number} height - The height of the viewport.\n\t *\n\t */\n\tscissor( x, y, width, height ) {\n\n\t\tconst scissor = this._tempVec4.set( x, y, width, height );\n\n\t\tif ( this.currentScissor.equals( scissor ) === false ) {\n\n\t\t\tconst { gl } = this;\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tthis.currentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies the viewport.\n\t *\n\t * @param {number} x - The x-coordinate of the lower left corner of the viewport.\n\t * @param {number} y - The y-coordinate of the lower left corner of the viewport.\n\t * @param {number} width - The width of the viewport.\n\t * @param {number} height - The height of the viewport.\n\t *\n\t */\n\tviewport( x, y, width, height ) {\n\n\t\tconst viewport = this._tempVec4.set( x, y, width, height );\n\n\t\tif ( this.currentViewport.equals( viewport ) === false ) {\n\n\t\t\tconst { gl } = this;\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tthis.currentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Defines the scissor test.\n\t *\n\t * @param {boolean} boolean - Whether the scissor test should be enabled or not.\n\t */\n\tsetScissorTest( boolean ) {\n\n\t\tconst gl = this.gl;\n\n\t\tif ( boolean ) {\n\n\t\t\tthis.enable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tthis.disable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies whether the stencil test is enabled or not.\n\t *\n\t * @param {boolean} stencilTest - Whether the stencil test is enabled or not.\n\t */\n\tsetStencilTest( stencilTest ) {\n\n\t\tconst { gl } = this;\n\n\t\tif ( stencilTest ) {\n\n\t\t\tthis.enable( gl.STENCIL_TEST );\n\n\t\t} else {\n\n\t\t\tthis.disable( gl.STENCIL_TEST );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies whether stencil values can be written when rendering\n\t * into a framebuffer or not.\n\t *\n\t * This method caches the state so `gl.stencilMask()` is only\n\t * called when necessary.\n\t *\n\t * @param {boolean} stencilMask - The stencil mask.\n\t */\n\tsetStencilMask( stencilMask ) {\n\n\t\tif ( this.currentStencilMask !== stencilMask ) {\n\n\t\t\tthis.gl.stencilMask( stencilMask );\n\t\t\tthis.currentStencilMask = stencilMask;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies whether the stencil test functions.\n\t *\n\t * This method caches the state so `gl.stencilFunc()` is only\n\t * called when necessary.\n\t *\n\t * @param {number} stencilFunc - The stencil compare function.\n\t * @param {number} stencilRef - The reference value for the stencil test.\n\t * @param {number} stencilMask - A bit-wise mask that is used to AND the reference value and the stored stencil value when the test is done.\n\t */\n\tsetStencilFunc( stencilFunc, stencilRef, stencilMask ) {\n\n\t\tif ( this.currentStencilFunc !== stencilFunc ||\n\t\t\t this.currentStencilRef !== stencilRef ||\n\t\t\t this.currentStencilFuncMask !== stencilMask ) {\n\n\t\t\tthis.gl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\tthis.currentStencilFunc = stencilFunc;\n\t\t\tthis.currentStencilRef = stencilRef;\n\t\t\tthis.currentStencilFuncMask = stencilMask;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies whether the stencil test operation.\n\t *\n\t * This method caches the state so `gl.stencilOp()` is only\n\t * called when necessary.\n\t *\n\t * @param {number} stencilFail - The function to use when the stencil test fails.\n\t * @param {number} stencilZFail - The function to use when the stencil test passes, but the depth test fail.\n\t * @param {number} stencilZPass - The function to use when both the stencil test and the depth test pass,\n\t * or when the stencil test passes and there is no depth buffer or depth testing is disabled.\n\t */\n\tsetStencilOp( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\tif ( this.currentStencilFail !== stencilFail ||\n\t\t\t this.currentStencilZFail !== stencilZFail ||\n\t\t\t this.currentStencilZPass !== stencilZPass ) {\n\n\t\t\tthis.gl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\tthis.currentStencilFail = stencilFail;\n\t\t\tthis.currentStencilZFail = stencilZFail;\n\t\t\tthis.currentStencilZPass = stencilZPass;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Configures the WebGL state for the given material.\n\t *\n\t * @param {Material} material - The material to configure the state for.\n\t * @param {number} frontFaceCW - Whether the front faces are counter-clockwise or not.\n\t * @param {number} hardwareClippingPlanes - The number of hardware clipping planes.\n\t */\n\tsetMaterial( material, frontFaceCW, hardwareClippingPlanes ) {\n\n\t\tconst { gl } = this;\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? this.disable( gl.CULL_FACE )\n\t\t\t: this.enable( gl.CULL_FACE );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tthis.setFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? this.setBlending( NoBlending )\n\t\t\t: this.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tthis.setDepthFunc( material.depthFunc );\n\t\tthis.setDepthTest( material.depthTest );\n\t\tthis.setDepthMask( material.depthWrite );\n\t\tthis.setColorMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tthis.setStencilTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tthis.setStencilMask( material.stencilWriteMask );\n\t\t\tthis.setStencilFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tthis.setStencilOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tthis.setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true && this.backend.renderer.currentSamples > 0\n\t\t\t? this.enable( gl.SAMPLE_ALPHA_TO_COVERAGE )\n\t\t\t: this.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t\tif ( hardwareClippingPlanes > 0 ) {\n\n\t\t\tif ( this.currentClippingPlanes !== hardwareClippingPlanes ) {\n\n\t\t\t\tconst CLIP_DISTANCE0_WEBGL = 0x3000;\n\n\t\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\t\tif ( i < hardwareClippingPlanes ) {\n\n\t\t\t\t\t\tthis.enable( CLIP_DISTANCE0_WEBGL + i );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.disable( CLIP_DISTANCE0_WEBGL + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies the polygon offset.\n\t *\n\t * This method caches the state so `gl.polygonOffset()` is only\n\t * called when necessary.\n\t *\n\t * @param {boolean} polygonOffset - Whether polygon offset is enabled or not.\n\t * @param {number} factor - The scale factor for the variable depth offset for each polygon.\n\t * @param {number} units - The multiplier by which an implementation-specific value is multiplied with to create a constant depth offset.\n\t */\n\tsetPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tconst { gl } = this;\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tthis.enable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( this.currentPolygonOffsetFactor !== factor || this.currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tthis.currentPolygonOffsetFactor = factor;\n\t\t\t\tthis.currentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.disable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Defines the usage of the given WebGL program.\n\t *\n\t * This method caches the state so `gl.useProgram()` is only\n\t * called when necessary.\n\t *\n\t * @param {WebGLProgram} program - The WebGL program to use.\n\t * @return {boolean} Whether a program change has been executed or not.\n\t */\n\tuseProgram( program ) {\n\n\t\tif ( this.currentProgram !== program ) {\n\n\t\t\tthis.gl.useProgram( program );\n\n\t\t\tthis.currentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Sets the vertex state by binding the given VAO and element buffer.\n\t *\n\t * @param {WebGLVertexArrayObject} vao - The VAO.\n\t * @param {?WebGLBuffer} indexBuffer - The index buffer.\n\t * @return {boolean} Whether a vertex state has been changed or not.\n\t */\n\tsetVertexState( vao, indexBuffer = null ) {\n\n\t\tconst gl = this.gl;\n\n\t\tif ( this.currentVAO !== vao || this.currentIndex !== indexBuffer ) {\n\n\t\t\tgl.bindVertexArray( vao );\n\n\t\t\tif ( indexBuffer !== null ) {\n\n\t\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, indexBuffer );\n\n\t\t\t}\n\n\t\t\tthis.currentVAO = vao;\n\t\t\tthis.currentIndex = indexBuffer;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Resets the vertex array state by resetting the VAO and element buffer.\n\t */\n\tresetVertexState() {\n\n\t\tconst gl = this.gl;\n\n\t\tgl.bindVertexArray( null );\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, null );\n\n\t\tthis.currentVAO = null;\n\t\tthis.currentIndex = null;\n\n\t}\n\n\t// framebuffer\n\n\n\t/**\n\t * Binds the given framebuffer.\n\t *\n\t * This method caches the state so `gl.bindFramebuffer()` is only\n\t * called when necessary.\n\t *\n\t * @param {number} target - The binding point (target).\n\t * @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer to bind.\n\t * @return {boolean} Whether a bind has been executed or not.\n\t */\n\tbindFramebuffer( target, framebuffer ) {\n\n\t\tconst { gl, currentBoundFramebuffers } = this;\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\t// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER\n\n\t\t\tif ( target === gl.DRAW_FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\tif ( target === gl.FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Defines draw buffers to which fragment colors are written into.\n\t * Configures the MRT setup of custom framebuffers.\n\t *\n\t * This method caches the state so `gl.drawBuffers()` is only\n\t * called when necessary.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer.\n\t */\n\tdrawBuffers( renderContext, framebuffer ) {\n\n\t\tconst { gl } = this;\n\n\t\tlet drawBuffers = [];\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderContext.textures !== null ) {\n\n\t\t\tdrawBuffers = this.currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tthis.currentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\n\t\t\tconst textures = renderContext.textures;\n\n\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tdrawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;\n\n\t\t\t\t}\n\n\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== gl.BACK ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = gl.BACK;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t}\n\n\t}\n\n\n\t// texture\n\n\t/**\n\t * Makes the given texture unit active.\n\t *\n\t * This method caches the state so `gl.activeTexture()` is only\n\t * called when necessary.\n\t *\n\t * @param {number} webglSlot - The texture unit to make active.\n\t */\n\tactiveTexture( webglSlot ) {\n\n\t\tconst { gl, currentTextureSlot, maxTextures } = this;\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tthis.currentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Binds the given WebGL texture to a target.\n\t *\n\t * This method caches the state so `gl.bindTexture()` is only\n\t * called when necessary.\n\t *\n\t * @param {number} webglType - The binding point (target).\n\t * @param {WebGLTexture} webglTexture - The WebGL texture to bind.\n\t * @param {number} webglSlot - The texture.\n\t */\n\tbindTexture( webglType, webglTexture, webglSlot ) {\n\n\t\tconst { gl, currentTextureSlot, currentBoundTextures, maxTextures } = this;\n\n\t\tif ( webglSlot === undefined ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\twebglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\t} else {\n\n\t\t\t\twebglSlot = currentTextureSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ webglSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ webglSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tthis.currentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t\tgl.bindTexture( webglType, webglTexture );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Binds a given WebGL buffer to a given binding point (target) at a given index.\n\t *\n\t * This method caches the state so `gl.bindBufferBase()` is only\n\t * called when necessary.\n\t *\n\t * @param {number} target - The target for the bind operation.\n\t * @param {number} index - The index of the target.\n\t * @param {WebGLBuffer} buffer - The WebGL buffer.\n\t * @return {boolean} Whether a bind has been executed or not.\n\t */\n\tbindBufferBase( target, index, buffer ) {\n\n\t\tconst { gl } = this;\n\n\t\tconst key = `${target}-${index}`;\n\n\t\tif ( this.currentBoundBufferBases[ key ] !== buffer ) {\n\n\t\t\tgl.bindBufferBase( target, index, buffer );\n\t\t\tthis.currentBoundBufferBases[ key ] = buffer;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Unbinds the current bound texture.\n\t *\n\t * This method caches the state so `gl.bindTexture()` is only\n\t * called when necessary.\n\t */\n\tunbindTexture() {\n\n\t\tconst { gl, currentTextureSlot, currentBoundTextures } = this;\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the value for the given parameter.\n\t *\n\t * @param {number} name - The paramter to get the value for.\n\t * @return {any} The value for the given parameter.\n\t */\n\tgetParameter( name ) {\n\n\t\tconst { gl, parameters } = this;\n\n\t\tif ( parameters[ name ] !== undefined ) {\n\n\t\t\treturn parameters[ name ];\n\n\t\t} else {\n\n\t\t\treturn gl.getParameter( name );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specifies a pixel storage mode.\n\t *\n\t * @param {number} name - The parameter to set.\n\t * @param {any} value - A value to set the parameter to.\n\t */\n\tpixelStorei( name, value ) {\n\n\t\tconst { gl, parameters } = this;\n\n\t\tif ( parameters[ name ] !== value ) {\n\n\t\t\tgl.pixelStorei( name, value );\n\t\t\tparameters[ name ] = value;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * A WebGL 2 backend utility module with common helpers.\n *\n * @private\n */\nclass WebGLUtils {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGLBackend} backend - The WebGL 2 backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGL 2 backend.\n\t\t *\n\t\t * @type {WebGLBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * A reference to the rendering context.\n\t\t *\n\t\t * @type {WebGL2RenderingContext}\n\t\t */\n\t\tthis.gl = this.backend.gl;\n\n\t\t/**\n\t\t * A reference to a backend module holding extension-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {WebGLExtensions}\n\t\t */\n\t\tthis.extensions = backend.extensions;\n\n\t}\n\n\t/**\n\t * Converts the given three.js constant into a WebGL constant.\n\t * The method currently supports the conversion of texture formats\n\t * and types.\n\t *\n\t * @param {number} p - The three.js constant.\n\t * @param {string} [colorSpace=NoColorSpace] - The color space.\n\t * @return {?number} The corresponding WebGL constant.\n\t */\n\tconvert( p, colorSpace = NoColorSpace ) {\n\n\t\tconst { gl, extensions } = this;\n\n\t\tlet extension;\n\n\t\tconst transfer = ColorManagement.getTransfer( colorSpace );\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;\n\t\tif ( p === UnsignedInt101111Type ) return gl.UNSIGNED_INT_10F_11F_11F_REV;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\treturn gl.HALF_FLOAT;\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedFormat ) return gl.RED;\n\t\tif ( p === RedIntegerFormat ) return gl.RED_INTEGER;\n\t\tif ( p === RGFormat ) return gl.RG;\n\t\tif ( p === RGIntegerFormat ) return gl.RG_INTEGER;\n\t\tif ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( transfer === SRGBTransfer ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC\n\n\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format || p === R11_EAC_Format || p === SIGNED_R11_EAC_Format || p === RG11_EAC_Format || p === SIGNED_RG11_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\n\t\t\t\tif ( p === R11_EAC_Format ) return extension.COMPRESSED_R11_EAC;\n\t\t\t\tif ( p === SIGNED_R11_EAC_Format ) return extension.COMPRESSED_SIGNED_R11_EAC;\n\t\t\t\tif ( p === RG11_EAC_Format ) return extension.COMPRESSED_RG11_EAC;\n\t\t\t\tif ( p === SIGNED_RG11_EAC_Format ) return extension.COMPRESSED_SIGNED_RG11_EAC;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// RGTC\n\n\t\tif ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_rgtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RED_RGTC1_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;\n\t\t\t\tif ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\treturn gl.UNSIGNED_INT_24_8;\n\n\t\t}\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\t/**\n\t * This method can be used to synchronize the CPU with the GPU by waiting until\n\t * ongoing GPU commands have been completed.\n\t *\n\t * @private\n\t * @return {Promise} A promise that resolves when all ongoing GPU commands have been completed.\n\t */\n\t_clientWaitAsync() {\n\n\t\tconst { gl } = this;\n\n\t\tconst sync = gl.fenceSync( gl.SYNC_GPU_COMMANDS_COMPLETE, 0 );\n\n\t\tgl.flush();\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tfunction test() {\n\n\t\t\t\tconst res = gl.clientWaitSync( sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0 );\n\n\t\t\t\tif ( res === gl.WAIT_FAILED ) {\n\n\t\t\t\t\tgl.deleteSync( sync );\n\n\t\t\t\t\treject();\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( res === gl.TIMEOUT_EXPIRED ) {\n\n\t\t\t\t\trequestAnimationFrame( test );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tgl.deleteSync( sync );\n\n\t\t\t\tresolve();\n\n\t\t\t}\n\n\t\t\ttest();\n\n\t\t} );\n\n\t}\n\n}\n\nlet initialized = false, wrappingToGL, filterToGL, compareToGL;\n\n/**\n * A WebGL 2 backend utility module for managing textures.\n *\n * @private\n */\nclass WebGLTextureUtils {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGLBackend} backend - The WebGL 2 backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGL 2 backend.\n\t\t *\n\t\t * @type {WebGLBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * A reference to the rendering context.\n\t\t *\n\t\t * @type {WebGL2RenderingContext}\n\t\t */\n\t\tthis.gl = backend.gl;\n\n\t\t/**\n\t\t * A reference to a backend module holding extension-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {WebGLExtensions}\n\t\t */\n\t\tthis.extensions = backend.extensions;\n\n\t\t/**\n\t\t * A dictionary for managing default textures. The key\n\t\t * is the binding point (target), the value the WEbGL texture object.\n\t\t *\n\t\t * @type {Object<GLenum,WebGLTexture>}\n\t\t */\n\t\tthis.defaultTextures = {};\n\n\t\t/**\n\t\t * A scratch framebuffer used for attaching the source texture in\n\t\t * {@link copyTextureToTexture}.\n\t\t *\n\t\t * @private\n\t\t * @type {?WebGLFramebuffer}\n\t\t */\n\t\tthis._srcFramebuffer = null;\n\n\t\t/**\n\t\t * A scratch framebuffer used for attaching the destination texture in\n\t\t * {@link copyTextureToTexture}.\n\t\t *\n\t\t * @private\n\t\t * @type {?WebGLFramebuffer}\n\t\t */\n\t\tthis._dstFramebuffer = null;\n\n\t\tif ( initialized === false ) {\n\n\t\t\tthis._init();\n\n\t\t\tinitialized = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Inits the state of the utility.\n\t *\n\t * @private\n\t */\n\t_init() {\n\n\t\tconst gl = this.gl;\n\n\t\t// Store only WebGL constants here.\n\n\t\twrappingToGL = {\n\t\t\t[ RepeatWrapping ]: gl.REPEAT,\n\t\t\t[ ClampToEdgeWrapping ]: gl.CLAMP_TO_EDGE,\n\t\t\t[ MirroredRepeatWrapping ]: gl.MIRRORED_REPEAT\n\t\t};\n\n\t\tfilterToGL = {\n\t\t\t[ NearestFilter ]: gl.NEAREST,\n\t\t\t[ NearestMipmapNearestFilter ]: gl.NEAREST_MIPMAP_NEAREST,\n\t\t\t[ NearestMipmapLinearFilter ]: gl.NEAREST_MIPMAP_LINEAR,\n\n\t\t\t[ LinearFilter ]: gl.LINEAR,\n\t\t\t[ LinearMipmapNearestFilter ]: gl.LINEAR_MIPMAP_NEAREST,\n\t\t\t[ LinearMipmapLinearFilter ]: gl.LINEAR_MIPMAP_LINEAR\n\t\t};\n\n\t\tcompareToGL = {\n\t\t\t[ NeverCompare ]: gl.NEVER,\n\t\t\t[ AlwaysCompare ]: gl.ALWAYS,\n\t\t\t[ LessCompare ]: gl.LESS,\n\t\t\t[ LessEqualCompare ]: gl.LEQUAL,\n\t\t\t[ EqualCompare ]: gl.EQUAL,\n\t\t\t[ GreaterEqualCompare ]: gl.GEQUAL,\n\t\t\t[ GreaterCompare ]: gl.GREATER,\n\t\t\t[ NotEqualCompare ]: gl.NOTEQUAL\n\t\t};\n\n\t}\n\n\t/**\n\t * Returns the native texture type for the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @return {GLenum} The native texture type.\n\t */\n\tgetGLTextureType( texture ) {\n\n\t\tconst { gl } = this;\n\n\t\tlet glTextureType;\n\n\t\tif ( texture.isCubeTexture === true ) {\n\n\t\t\tglTextureType = gl.TEXTURE_CUBE_MAP;\n\n\t\t} else if ( texture.isArrayTexture === true || texture.isDataArrayTexture === true || texture.isCompressedArrayTexture === true ) {\n\n\t\t\tglTextureType = gl.TEXTURE_2D_ARRAY;\n\n\t\t} else if ( texture.isData3DTexture === true ) { // TODO: isCompressed3DTexture, wait for #26642\n\n\t\t\tglTextureType = gl.TEXTURE_3D;\n\n\t\t} else {\n\n\t\t\tglTextureType = gl.TEXTURE_2D;\n\n\n\t\t}\n\n\t\treturn glTextureType;\n\n\t}\n\n\t/**\n\t * Returns the native texture type for the given texture.\n\t *\n\t * @param {?string} internalFormatName - The internal format name. When `null`, the internal format is derived from the subsequent parameters.\n\t * @param {GLenum} glFormat - The WebGL format.\n\t * @param {GLenum} glType - The WebGL type.\n\t * @param {string} colorSpace - The texture's color space.\n\t * @param {boolean} [forceLinearTransfer=false] - Whether to force a linear transfer or not.\n\t * @return {GLenum} The internal format.\n\t */\n\tgetInternalFormat( internalFormatName, glFormat, glType, normalized, colorSpace, forceLinearTransfer = false ) {\n\n\t\tconst { gl, extensions } = this;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( gl[ internalFormatName ] !== undefined ) return gl[ internalFormatName ];\n\n\t\t\twarn( 'WebGLBackend: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet extTextureNorm16 = null;\n\n\t\tif ( normalized ) {\n\n\t\t\textTextureNorm16 = extensions.get( 'EXT_texture_norm16' );\n\n\t\t\tif ( ! extTextureNorm16 ) {\n\n\t\t\t\twarn( 'WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === gl.RED ) {\n\n\t\t\tif ( glType === gl.FLOAT ) internalFormat = gl.R32F;\n\t\t\tif ( glType === gl.HALF_FLOAT ) internalFormat = gl.R16F;\n\t\t\tif ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.R8;\n\t\t\tif ( glType === gl.BYTE ) internalFormat = gl.R8_SNORM;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.R16_EXT;\n\t\t\tif ( glType === gl.SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.R16_SNORM_EXT;\n\n\t\t}\n\n\t\tif ( glFormat === gl.RED_INTEGER ) {\n\n\t\t\tif ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.R8UI;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.R16UI;\n\t\t\tif ( glType === gl.UNSIGNED_INT ) internalFormat = gl.R32UI;\n\t\t\tif ( glType === gl.BYTE ) internalFormat = gl.R8I;\n\t\t\tif ( glType === gl.SHORT ) internalFormat = gl.R16I;\n\t\t\tif ( glType === gl.INT ) internalFormat = gl.R32I;\n\n\t\t}\n\n\t\tif ( glFormat === gl.RG ) {\n\n\t\t\tif ( glType === gl.FLOAT ) internalFormat = gl.RG32F;\n\t\t\tif ( glType === gl.HALF_FLOAT ) internalFormat = gl.RG16F;\n\t\t\tif ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.RG8;\n\t\t\tif ( glType === gl.BYTE ) internalFormat = gl.RG8_SNORM;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RG16_EXT;\n\t\t\tif ( glType === gl.SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RG16_SNORM_EXT;\n\n\t\t}\n\n\t\tif ( glFormat === gl.RG_INTEGER ) {\n\n\t\t\tif ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.RG8UI;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.RG16UI;\n\t\t\tif ( glType === gl.UNSIGNED_INT ) internalFormat = gl.RG32UI;\n\t\t\tif ( glType === gl.BYTE ) internalFormat = gl.RG8I;\n\t\t\tif ( glType === gl.SHORT ) internalFormat = gl.RG16I;\n\t\t\tif ( glType === gl.INT ) internalFormat = gl.RG32I;\n\n\t\t}\n\n\t\tif ( glFormat === gl.RGB ) {\n\n\t\t\tconst transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer( colorSpace );\n\n\t\t\tif ( glType === gl.FLOAT ) internalFormat = gl.RGB32F;\n\t\t\tif ( glType === gl.HALF_FLOAT ) internalFormat = gl.RGB16F;\n\t\t\tif ( glType === gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? gl.SRGB8 : gl.RGB8;\n\t\t\tif ( glType === gl.BYTE ) internalFormat = gl.RGB8_SNORM;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RGB16_EXT;\n\t\t\tif ( glType === gl.SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RGB16_SNORM_EXT;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT_5_6_5 ) internalFormat = gl.RGB565;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = gl.RGB5_A1;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = gl.RGB4;\n\t\t\tif ( glType === gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = gl.RGB9_E5;\n\t\t\tif ( glType === gl.UNSIGNED_INT_10F_11F_11F_REV ) internalFormat = gl.R11F_G11F_B10F;\n\n\t\t}\n\n\t\tif ( glFormat === gl.RGB_INTEGER ) {\n\n\t\t\tif ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.RGB8UI;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.RGB16UI;\n\t\t\tif ( glType === gl.UNSIGNED_INT ) internalFormat = gl.RGB32UI;\n\t\t\tif ( glType === gl.BYTE ) internalFormat = gl.RGB8I;\n\t\t\tif ( glType === gl.SHORT ) internalFormat = gl.RGB16I;\n\t\t\tif ( glType === gl.INT ) internalFormat = gl.RGB32I;\n\n\t\t}\n\n\t\tif ( glFormat === gl.RGBA ) {\n\n\t\t\tconst transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer( colorSpace );\n\n\t\t\tif ( glType === gl.FLOAT ) internalFormat = gl.RGBA32F;\n\t\t\tif ( glType === gl.HALF_FLOAT ) internalFormat = gl.RGBA16F;\n\t\t\tif ( glType === gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? gl.SRGB8_ALPHA8 : gl.RGBA8;\n\t\t\tif ( glType === gl.BYTE ) internalFormat = gl.RGBA8_SNORM;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RGBA16_EXT;\n\t\t\tif ( glType === gl.SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RGBA16_SNORM_EXT;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = gl.RGBA4;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = gl.RGB5_A1;\n\n\t\t}\n\n\t\tif ( glFormat === gl.RGBA_INTEGER ) {\n\n\t\t\tif ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.RGBA8UI;\n\t\t\tif ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.RGBA16UI;\n\t\t\tif ( glType === gl.UNSIGNED_INT ) internalFormat = gl.RGBA32UI;\n\t\t\tif ( glType === gl.BYTE ) internalFormat = gl.RGBA8I;\n\t\t\tif ( glType === gl.SHORT ) internalFormat = gl.RGBA16I;\n\t\t\tif ( glType === gl.INT ) internalFormat = gl.RGBA32I;\n\n\t\t}\n\n\t\tif ( glFormat === gl.DEPTH_COMPONENT ) {\n\n\t\t\tif ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.DEPTH_COMPONENT16;\n\t\t\tif ( glType === gl.UNSIGNED_INT ) internalFormat = gl.DEPTH_COMPONENT24;\n\t\t\tif ( glType === gl.FLOAT ) internalFormat = gl.DEPTH_COMPONENT32F;\n\n\t\t}\n\n\t\tif ( glFormat === gl.DEPTH_STENCIL ) {\n\n\t\t\tif ( glType === gl.UNSIGNED_INT_24_8 ) internalFormat = gl.DEPTH24_STENCIL8;\n\n\t\t}\n\n\t\tif ( internalFormat === gl.R16F || internalFormat === gl.R32F ||\n\t\t\tinternalFormat === gl.RG16F || internalFormat === gl.RG32F ||\n\t\t\tinternalFormat === gl.RGBA16F || internalFormat === gl.RGBA32F ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\t/**\n\t * Sets the texture parameters for the given texture.\n\t *\n\t * @param {GLenum} textureType - The texture type.\n\t * @param {Texture} texture - The texture.\n\t */\n\tsetTextureParameters( textureType, texture ) {\n\n\t\tconst { gl, extensions, backend } = this;\n\t\tconst { state } = this.backend;\n\n\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? gl.NONE : gl.BROWSER_DEFAULT_WEBGL;\n\n\t\tstate.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\tstate.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\tstate.pixelStorei( gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\tstate.pixelStorei( gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\tgl.texParameteri( textureType, gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );\n\t\tgl.texParameteri( textureType, gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );\n\n\t\tif ( textureType === gl.TEXTURE_3D || textureType === gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t// WebGL 2 does not support wrapping for depth 2D array textures\n\t\t\tif ( ! texture.isArrayTexture ) {\n\n\t\t\t\tgl.texParameteri( textureType, gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.texParameteri( textureType, gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );\n\n\n\t\tconst hasMipmaps = texture.mipmaps !== undefined && texture.mipmaps.length > 0;\n\n\t\t// follow WebGPU backend mapping for texture filtering\n\t\tconst minFilter = texture.minFilter === LinearFilter && hasMipmaps ? LinearMipmapLinearFilter : texture.minFilter;\n\n\t\tgl.texParameteri( textureType, gl.TEXTURE_MIN_FILTER, filterToGL[ minFilter ] );\n\n\t\tif ( texture.compareFunction ) {\n\n\t\t\tgl.texParameteri( textureType, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE );\n\t\t\tgl.texParameteri( textureType, gl.TEXTURE_COMPARE_FUNC, compareToGL[ texture.compareFunction ] );\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tif ( texture.magFilter === NearestFilter ) return;\n\t\t\tif ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2\n\n\t\t\tif ( texture.anisotropy > 1 ) {\n\n\t\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\t\t\t\tgl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, backend.capabilities.getMaxAnisotropy() ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a default texture for the given texture that can be used\n\t * as a placeholder until the actual texture is ready for usage.\n\t *\n\t * @param {Texture} texture - The texture to create a default texture for.\n\t */\n\tcreateDefaultTexture( texture ) {\n\n\t\tconst { gl, backend, defaultTextures } = this;\n\n\n\t\tconst glTextureType = this.getGLTextureType( texture );\n\n\t\tlet textureGPU = defaultTextures[ glTextureType ];\n\n\t\tif ( textureGPU === undefined ) {\n\n\t\t\ttextureGPU = gl.createTexture();\n\n\t\t\tbackend.state.bindTexture( glTextureType, textureGPU );\n\t\t\tgl.texParameteri( glTextureType, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\t\tgl.texParameteri( glTextureType, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\t\t// gl.texImage2D( glTextureType, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\tdefaultTextures[ glTextureType ] = textureGPU;\n\n\t\t}\n\n\t\tbackend.set( texture, {\n\t\t\ttextureGPU,\n\t\t\tglTextureType\n\t\t} );\n\n\t}\n\n\t/**\n\t * Defines a texture on the GPU for the given texture object.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t * @return {undefined}\n\t */\n\tcreateTexture( texture, options ) {\n\n\t\tconst { gl, backend } = this;\n\t\tconst { levels, width, height, depth } = options;\n\n\t\tconst glFormat = backend.utils.convert( texture.format, texture.colorSpace );\n\t\tconst glType = backend.utils.convert( texture.type );\n\t\tconst glInternalFormat = this.getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace, texture.isVideoTexture );\n\n\t\tconst textureGPU = gl.createTexture();\n\t\tconst glTextureType = this.getGLTextureType( texture );\n\n\t\tbackend.state.bindTexture( glTextureType, textureGPU );\n\n\t\tthis.setTextureParameters( glTextureType, texture );\n\n\t\tif ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\tgl.texStorage3D( gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, width, height, depth );\n\n\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\tgl.texStorage3D( gl.TEXTURE_3D, levels, glInternalFormat, width, height, depth );\n\n\t\t} else if ( ! texture.isVideoTexture ) {\n\n\t\t\tgl.texStorage2D( glTextureType, levels, glInternalFormat, width, height );\n\n\t\t}\n\n\t\tbackend.set( texture, {\n\t\t\ttextureGPU,\n\t\t\tglTextureType,\n\t\t\tglFormat,\n\t\t\tglType,\n\t\t\tglInternalFormat\n\t\t} );\n\n\t}\n\n\t/**\n\t * Uploads texture buffer data to the GPU memory.\n\t *\n\t * @param {WebGLBuffer} buffer - The buffer data.\n\t * @param {Texture} texture - The texture,\n\t */\n\tcopyBufferToTexture( buffer, texture ) {\n\n\t\tconst { gl, backend } = this;\n\t\tconst { state } = backend;\n\n\t\tconst { textureGPU, glTextureType, glFormat, glType } = backend.get( texture );\n\n\t\tconst { width, height } = texture.source.data;\n\n\t\tgl.bindBuffer( gl.PIXEL_UNPACK_BUFFER, buffer );\n\n\t\tbackend.state.bindTexture( glTextureType, textureGPU );\n\n\t\tstate.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, false );\n\t\tstate.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false );\n\t\tgl.texSubImage2D( glTextureType, 0, 0, 0, width, height, glFormat, glType, 0 );\n\n\t\tgl.bindBuffer( gl.PIXEL_UNPACK_BUFFER, null );\n\n\t\tbackend.state.unbindTexture();\n\t\t// debug\n\t\t// const framebuffer = gl.createFramebuffer();\n\t\t// backend.state.bindFramebuffer( gl.FRAMEBUFFER, framebuffer );\n\t\t// gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, glTextureType, textureGPU, 0 );\n\n\t\t// const readout = new Float32Array( width * height * 4 );\n\n\t\t// const altFormat = gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT );\n\t\t// const altType = gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE );\n\n\t\t// gl.readPixels( 0, 0, width, height, altFormat, altType, readout );\n\t\t// backend.state.bindFramebuffer( gl.FRAMEBUFFER, null );\n\t\t// log( readout );\n\n\t}\n\n\t/**\n\t * Uploads the updated texture data to the GPU.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t */\n\tupdateTexture( texture, options ) {\n\n\t\tconst { gl } = this;\n\t\tconst { width, height } = options;\n\t\tconst { textureGPU, glTextureType, glFormat, glType, glInternalFormat } = this.backend.get( texture );\n\n\t\tif ( texture.isRenderTargetTexture || ( textureGPU === undefined /* unsupported texture format */ ) )\n\t\t\treturn;\n\n\t\tthis.backend.state.bindTexture( glTextureType, textureGPU );\n\n\t\tthis.setTextureParameters( glTextureType, texture );\n\n\t\tif ( texture.isCompressedTexture ) {\n\n\t\t\tconst mipmaps = texture.mipmaps;\n\t\t\tconst image = options.image;\n\n\t\t\tfor ( let i = 0; i < mipmaps.length; i ++ ) {\n\n\t\t\t\tconst mipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.isCompressedArrayTexture ) {\n\n\n\t\t\t\t\tif ( texture.format !== gl.RGBA ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tgl.compressedTexSubImage3D( gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\twarn( 'WebGLBackend: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.texSubImage3D( gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\tgl.compressedTexSubImage2D( gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\twarn( 'WebGLBackend: Unsupported compressed texture format' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t} else if ( texture.isCubeTexture ) {\n\n\t\t\tconst images = options.images;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tconst image = getImage( images[ i ] );\n\n\t\t\t\tgl.texSubImage2D( gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, width, height, glFormat, glType, image );\n\n\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\tconst image = getImage( mipmap.images[ i ] );\n\n\t\t\t\t\tgl.texSubImage2D( gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, image.width, image.height, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( texture.isDataArrayTexture || texture.isArrayTexture ) {\n\n\t\t\tconst image = options.image;\n\n\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\tconst layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );\n\n\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\tconst layerData = image.data.subarray(\n\t\t\t\t\t\tlayerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT\n\t\t\t\t\t);\n\t\t\t\t\tgl.texSubImage3D( gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t} else {\n\n\t\t\t\tgl.texSubImage3D( gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t}\n\n\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\tconst image = options.image;\n\n\t\t\tgl.texSubImage3D( gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t} else if ( texture.isVideoTexture ) {\n\n\t\t\ttexture.update();\n\n\t\t\tgl.texImage2D( glTextureType, 0, glInternalFormat, glFormat, glType, options.image );\n\n\t\t} else if ( texture.isHTMLTexture ) {\n\n\t\t\tif ( typeof gl.texElementImage2D === 'function' ) {\n\n\t\t\t\tgl.texElementImage2D( gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, options.image );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ i ];\n\n\t\t\t\t\tconst image = getImage( mipmap );\n\t\t\t\t\tgl.texSubImage2D( glTextureType, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst image = getImage( options.image );\n\t\t\t\tgl.texSubImage2D( glTextureType, 0, 0, 0, width, height, glFormat, glType, image );\n\n\t\t\t}\n\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Generates mipmaps for the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t */\n\tgenerateMipmaps( texture ) {\n\n\t\tconst { gl, backend } = this;\n\t\tconst { textureGPU, glTextureType } = backend.get( texture );\n\n\t\tbackend.state.bindTexture( glTextureType, textureGPU );\n\t\tgl.generateMipmap( glTextureType );\n\n\t}\n\n\t/**\n\t * Deallocates the render buffers of the given render target.\n\t *\n\t * @param {RenderTarget} renderTarget - The render target.\n\t */\n\tdeallocateRenderBuffers( renderTarget ) {\n\n\t\tconst { gl, backend } = this;\n\n\t\t// remove framebuffer reference\n\t\tif ( renderTarget ) {\n\n\t\t\tconst renderContextData = backend.get( renderTarget );\n\n\t\t\trenderContextData.renderBufferStorageSetup = undefined;\n\n\t\t\tif ( renderContextData.framebuffers ) {\n\n\t\t\t\tfor ( const cacheKey in renderContextData.framebuffers ) {\n\n\t\t\t\t\tgl.deleteFramebuffer( renderContextData.framebuffers[ cacheKey ] );\n\n\t\t\t\t}\n\n\t\t\t\tdelete renderContextData.framebuffers;\n\n\t\t\t}\n\n\t\t\tif ( renderContextData.depthRenderbuffer ) {\n\n\t\t\t\tgl.deleteRenderbuffer( renderContextData.depthRenderbuffer );\n\t\t\t\tdelete renderContextData.depthRenderbuffer;\n\n\t\t\t}\n\n\t\t\tif ( renderContextData.stencilRenderbuffer ) {\n\n\t\t\t\tgl.deleteRenderbuffer( renderContextData.stencilRenderbuffer );\n\t\t\t\tdelete renderContextData.stencilRenderbuffer;\n\n\t\t\t}\n\n\t\t\tif ( renderContextData.msaaFrameBuffer ) {\n\n\t\t\t\tgl.deleteFramebuffer( renderContextData.msaaFrameBuffer );\n\t\t\t\tdelete renderContextData.msaaFrameBuffer;\n\n\t\t\t}\n\n\t\t\tif ( renderContextData.msaaRenderbuffers ) {\n\n\t\t\t\tfor ( let i = 0; i < renderContextData.msaaRenderbuffers.length; i ++ ) {\n\n\t\t\t\t\tgl.deleteRenderbuffer( renderContextData.msaaRenderbuffers[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tdelete renderContextData.msaaRenderbuffers;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Destroys the GPU data for the given texture object.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.\n\t */\n\tdestroyTexture( texture, isDefaultTexture = false ) {\n\n\t\tconst { gl, backend } = this;\n\t\tconst { textureGPU, renderTarget } = backend.get( texture );\n\n\t\tthis.deallocateRenderBuffers( renderTarget );\n\n\t\tif ( isDefaultTexture === false ) {\n\n\t\t\tgl.deleteTexture( textureGPU );\n\n\t\t}\n\n\t\tbackend.delete( texture );\n\n\t}\n\n\t/**\n\t * Copies data of the given source texture to the given destination texture.\n\t *\n\t * @param {Texture} srcTexture - The source texture.\n\t * @param {Texture} dstTexture - The destination texture.\n\t * @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.\n\t * @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.\n\t * @param {number} [srcLevel=0] - The source mip level to copy from.\n\t * @param {number} [dstLevel=0] - The destination mip level to copy to.\n\t */\n\tcopyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {\n\n\t\tconst { gl, backend } = this;\n\t\tconst { state } = this.backend;\n\n\t\tconst { textureGPU: dstTextureGPU, glTextureType, glType, glFormat } = backend.get( dstTexture );\n\n\t\tstate.bindTexture( glTextureType, dstTextureGPU );\n\n\t\t// gather the necessary dimensions to copy\n\t\tlet width, height, depth, minX, minY, minZ;\n\t\tlet dstX, dstY, dstZ;\n\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ dstLevel ] : srcTexture.image;\n\n\t\tif ( srcRegion !== null ) {\n\n\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\tdepth = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1;\n\t\t\tminX = srcRegion.min.x;\n\t\t\tminY = srcRegion.min.y;\n\t\t\tminZ = srcRegion.isBox3 ? srcRegion.min.z : 0;\n\n\t\t} else {\n\n\t\t\tconst levelScale = Math.pow( 2, - srcLevel );\n\t\t\twidth = Math.floor( image.width * levelScale );\n\t\t\theight = Math.floor( image.height * levelScale );\n\n\t\t\tif ( srcTexture.isDataArrayTexture || srcTexture.isArrayTexture ) {\n\n\t\t\t\tdepth = image.depth;\n\n\t\t\t} else if ( srcTexture.isData3DTexture ) {\n\n\t\t\t\tdepth = Math.floor( image.depth * levelScale );\n\n\t\t\t} else {\n\n\t\t\t\tdepth = 1;\n\n\t\t\t}\n\n\t\t\tminX = 0;\n\t\t\tminY = 0;\n\t\t\tminZ = 0;\n\n\t\t}\n\n\t\tif ( dstPosition !== null ) {\n\n\t\t\tdstX = dstPosition.x;\n\t\t\tdstY = dstPosition.y;\n\t\t\tdstZ = dstPosition.z;\n\n\t\t} else {\n\n\t\t\tdstX = 0;\n\t\t\tdstY = 0;\n\t\t\tdstZ = 0;\n\n\t\t}\n\n\t\tstate.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\tstate.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\tstate.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t// used for copying data from cpu\n\t\tconst currentUnpackRowLen = state.getParameter( gl.UNPACK_ROW_LENGTH );\n\t\tconst currentUnpackImageHeight = state.getParameter( gl.UNPACK_IMAGE_HEIGHT );\n\t\tconst currentUnpackSkipPixels = state.getParameter( gl.UNPACK_SKIP_PIXELS );\n\t\tconst currentUnpackSkipRows = state.getParameter( gl.UNPACK_SKIP_ROWS );\n\t\tconst currentUnpackSkipImages = state.getParameter( gl.UNPACK_SKIP_IMAGES );\n\n\t\tstate.pixelStorei( gl.UNPACK_ROW_LENGTH, image.width );\n\t\tstate.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\tstate.pixelStorei( gl.UNPACK_SKIP_PIXELS, minX );\n\t\tstate.pixelStorei( gl.UNPACK_SKIP_ROWS, minY );\n\t\tstate.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );\n\n\t\t// set up the src texture\n\t\tconst isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture || dstTexture.isArrayTexture;\n\t\tconst isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture || dstTexture.isArrayTexture;\n\n\t\tif ( srcTexture.isDepthTexture ) {\n\n\t\t\tconst srcTextureData = backend.get( srcTexture );\n\t\t\tconst dstTextureData = backend.get( dstTexture );\n\n\t\t\tconst srcRenderContextData = backend.get( srcTextureData.renderTarget );\n\t\t\tconst dstRenderContextData = backend.get( dstTextureData.renderTarget );\n\n\t\t\tconst srcFramebuffer = srcRenderContextData.framebuffers[ srcTextureData.cacheKey ];\n\t\t\tconst dstFramebuffer = dstRenderContextData.framebuffers[ dstTextureData.cacheKey ];\n\n\t\t\tstate.bindFramebuffer( gl.READ_FRAMEBUFFER, srcFramebuffer );\n\t\t\tstate.bindFramebuffer( gl.DRAW_FRAMEBUFFER, dstFramebuffer );\n\n\t\t\tfor ( let i = 0; i < depth; i ++ ) {\n\n\t\t\t\t// if the source or destination are a 3d target then a layer needs to be bound\n\t\t\t\tif ( isSrc3D ) {\n\n\t\t\t\t\tgl.framebufferTextureLayer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, srcTextureData.textureGPU, srcLevel, minZ + i );\n\t\t\t\t\tgl.framebufferTextureLayer( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, dstTextureGPU, dstLevel, dstZ + i );\n\n\t\t\t\t}\n\n\t\t\t\tgl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, gl.DEPTH_BUFFER_BIT, gl.NEAREST );\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\t\t\tstate.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );\n\n\t\t} else if ( srcLevel !== 0 || srcTexture.isRenderTargetTexture || backend.has( srcTexture ) ) {\n\n\t\t\t// get the appropriate frame buffers\n\t\t\tconst srcTextureData = backend.get( srcTexture );\n\n\t\t\tif ( this._srcFramebuffer === null ) this._srcFramebuffer = gl.createFramebuffer();\n\t\t\tif ( this._dstFramebuffer === null ) this._dstFramebuffer = gl.createFramebuffer();\n\n\t\t\t// bind the frame buffer targets\n\t\t\tstate.bindFramebuffer( gl.READ_FRAMEBUFFER, this._srcFramebuffer );\n\t\t\tstate.bindFramebuffer( gl.DRAW_FRAMEBUFFER, this._dstFramebuffer );\n\n\t\t\tfor ( let i = 0; i < depth; i ++ ) {\n\n\t\t\t\t// assign the correct layers and mip maps to the frame buffers\n\t\t\t\tif ( isSrc3D ) {\n\n\t\t\t\t\tgl.framebufferTextureLayer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, srcTextureData.textureGPU, srcLevel, minZ + i );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.framebufferTexture2D( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, srcTextureData.textureGPU, srcLevel );\n\n\t\t\t\t}\n\n\t\t\t\tif ( isDst3D ) {\n\n\t\t\t\t\tgl.framebufferTextureLayer( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, dstTextureGPU, dstLevel, dstZ + i );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, dstTextureGPU, dstLevel );\n\n\t\t\t\t}\n\n\t\t\t\t// copy the data using the fastest function that can achieve the copy\n\t\t\t\tif ( srcLevel !== 0 ) {\n\n\t\t\t\t\tgl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, gl.COLOR_BUFFER_BIT, gl.NEAREST );\n\n\t\t\t\t} else if ( isDst3D ) {\n\n\t\t\t\t\tgl.copyTexSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ + i, minX, minY, width, height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.copyTexSubImage2D( glTextureType, dstLevel, dstX, dstY, minX, minY, width, height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// unbind read, draw buffers\n\t\t\tstate.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\t\t\tstate.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );\n\n\t\t} else {\n\n\t\t\tif ( isDst3D ) {\n\n\t\t\t\t// copy data into the 3d texture\n\t\t\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t\t\tgl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );\n\n\t\t\t\t} else if ( dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tgl.compressedTexSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// copy data into the 2d texture\n\t\t\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t\t\tgl.texSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );\n\n\t\t\t\t} else if ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t\tgl.compressedTexSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.texSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// reset values\n\t\tstate.pixelStorei( gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\tstate.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\tstate.pixelStorei( gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\tstate.pixelStorei( gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\tstate.pixelStorei( gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( dstLevel === 0 && dstTexture.generateMipmaps ) {\n\n\t\t\tgl.generateMipmap( glTextureType );\n\n\t\t}\n\n\t\tstate.unbindTexture();\n\n\t}\n\n\n\t/**\n\t * Copies the current bound framebuffer to the given texture.\n\t *\n\t * @param {Texture} texture - The destination texture.\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {Vector4} rectangle - A four dimensional vector defining the origin and dimension of the copy.\n\t */\n\tcopyFramebufferToTexture( texture, renderContext, rectangle ) {\n\n\t\tconst { gl } = this;\n\t\tconst { state } = this.backend;\n\n\t\tconst { textureGPU } = this.backend.get( texture );\n\n\t\tconst { x, y, z: width, w: height } = rectangle;\n\n\t\tconst requireDrawFrameBuffer = texture.isDepthTexture === true || ( renderContext.renderTarget && renderContext.renderTarget.samples > 0 );\n\n\t\tconst srcHeight = renderContext.renderTarget ? renderContext.renderTarget.height : this.backend.getDrawingBufferSize().y;\n\n\t\tif ( requireDrawFrameBuffer ) {\n\n\t\t\tconst partial = ( x !== 0 || y !== 0 );\n\t\t\tlet mask;\n\t\t\tlet attachment;\n\n\t\t\tif ( texture.isDepthTexture === true ) {\n\n\t\t\t\tmask = gl.DEPTH_BUFFER_BIT;\n\t\t\t\tattachment = gl.DEPTH_ATTACHMENT;\n\n\t\t\t\tif ( renderContext.stencil ) {\n\n\t\t\t\t\tmask |= gl.STENCIL_BUFFER_BIT;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmask = gl.COLOR_BUFFER_BIT;\n\t\t\t\tattachment = gl.COLOR_ATTACHMENT0;\n\n\t\t\t}\n\n\t\t\tif ( partial ) {\n\n\t\t\t\tconst renderTargetContextData = this.backend.get( renderContext.renderTarget );\n\n\t\t\t\tconst fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];\n\t\t\t\tconst msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;\n\n\t\t\t\tstate.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );\n\t\t\t\tstate.bindFramebuffer( gl.READ_FRAMEBUFFER, msaaFrameBuffer );\n\n\t\t\t\tconst flippedY = srcHeight - y - height;\n\n\t\t\t\tgl.blitFramebuffer( x, flippedY, x + width, flippedY + height, x, flippedY, x + width, flippedY + height, mask, gl.NEAREST );\n\n\t\t\t\tstate.bindFramebuffer( gl.READ_FRAMEBUFFER, fb );\n\n\t\t\t\tstate.bindTexture( gl.TEXTURE_2D, textureGPU );\n\n\t\t\t\tgl.copyTexSubImage2D( gl.TEXTURE_2D, 0, 0, 0, x, flippedY, width, height );\n\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t} else {\n\n\t\t\t\tconst fb = gl.createFramebuffer();\n\n\t\t\t\tstate.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );\n\n\t\t\t\tgl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureGPU, 0 );\n\t\t\t\tgl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, gl.NEAREST );\n\n\t\t\t\tgl.deleteFramebuffer( fb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( gl.TEXTURE_2D, textureGPU );\n\t\t\tgl.copyTexSubImage2D( gl.TEXTURE_2D, 0, 0, 0, x, srcHeight - height - y, width, height );\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\tif ( texture.generateMipmaps ) this.generateMipmaps( texture );\n\n\t\tthis.backend._setFramebuffer( renderContext );\n\n\t}\n\n\t/**\n\t * SetupS storage for internal depth/stencil buffers and bind to correct framebuffer.\n\t *\n\t * @param {WebGLRenderbuffer} renderbuffer - The render buffer.\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {number} samples - The MSAA sample count.\n\t * @param {boolean} [useMultisampledRTT=false] - Whether to use WEBGL_multisampled_render_to_texture or not.\n\t */\n\tsetupRenderBufferStorage( renderbuffer, renderContext, samples, useMultisampledRTT = false ) {\n\n\t\tconst { gl } = this;\n\t\tconst renderTarget = renderContext.renderTarget;\n\n\t\tconst { depthTexture, depthBuffer, stencilBuffer, width, height } = renderTarget;\n\n\t\tgl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( depthBuffer && ! stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = gl.DEPTH_COMPONENT24;\n\n\t\t\tif ( useMultisampledRTT === true ) {\n\n\t\t\t\tconst multisampledRTTExt = this.extensions.get( 'WEBGL_multisampled_render_to_texture' );\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( gl.RENDERBUFFER, renderTarget.samples, glInternalFormat, width, height );\n\n\t\t\t} else if ( samples > 0 ) {\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === gl.FLOAT ) {\n\n\t\t\t\t\t\tglInternalFormat = gl.DEPTH_COMPONENT32F;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, glInternalFormat, width, height );\n\n\t\t\t} else {\n\n\t\t\t\tgl.renderbufferStorage( gl.RENDERBUFFER, glInternalFormat, width, height );\n\n\t\t\t}\n\n\t\t\tgl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else if ( depthBuffer && stencilBuffer ) {\n\n\t\t\tif ( samples > 0 ) {\n\n\t\t\t\tgl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, gl.DEPTH24_STENCIL8, width, height );\n\n\t\t\t} else {\n\n\t\t\t\tgl.renderbufferStorage( gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height );\n\n\t\t\t}\n\n\n\t\t\tgl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, renderbuffer );\n\n\t\t}\n\n\t\tgl.bindRenderbuffer( gl.RENDERBUFFER, null );\n\n\t}\n\n\t/**\n\t * Returns texture data as a typed array.\n\t *\n\t * @async\n\t * @param {Texture} texture - The texture to copy.\n\t * @param {number} x - The x coordinate of the copy origin.\n\t * @param {number} y - The y coordinate of the copy origin.\n\t * @param {number} width - The width of the copy.\n\t * @param {number} height - The height of the copy.\n\t * @param {number} faceIndex - The face index.\n\t * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.\n\t */\n\tasync copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {\n\n\t\tconst { backend, gl } = this;\n\n\t\tconst { textureGPU, glFormat, glType } = this.backend.get( texture );\n\n\t\tconst fb = gl.createFramebuffer();\n\n\t\tbackend.state.bindFramebuffer( gl.READ_FRAMEBUFFER, fb );\n\n\t\tconst target = texture.isCubeTexture ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex : gl.TEXTURE_2D;\n\n\t\tgl.framebufferTexture2D( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, target, textureGPU, 0 );\n\n\t\tconst typedArrayType = this._getTypedArrayType( glType );\n\t\tconst bytesPerTexel = this._getBytesPerTexel( glType, glFormat );\n\n\t\tconst elementCount = width * height;\n\t\tconst byteLength = elementCount * bytesPerTexel;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( gl.PIXEL_PACK_BUFFER, buffer );\n\t\tgl.bufferData( gl.PIXEL_PACK_BUFFER, byteLength, gl.STREAM_READ );\n\t\tgl.readPixels( x, y, width, height, glFormat, glType, 0 );\n\t\tgl.bindBuffer( gl.PIXEL_PACK_BUFFER, null );\n\n\t\tawait backend.utils._clientWaitAsync();\n\n\t\tconst dstBuffer = new typedArrayType( byteLength / typedArrayType.BYTES_PER_ELEMENT );\n\n\t\tgl.bindBuffer( gl.PIXEL_PACK_BUFFER, buffer );\n\t\tgl.getBufferSubData( gl.PIXEL_PACK_BUFFER, 0, dstBuffer );\n\t\tgl.bindBuffer( gl.PIXEL_PACK_BUFFER, null );\n\n\t\tbackend.state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\n\t\tgl.deleteFramebuffer( fb );\n\n\t\treturn dstBuffer;\n\n\t}\n\n\t/**\n\t * Returns the corresponding typed array type for the given WebGL data type.\n\t *\n\t * @private\n\t * @param {GLenum} glType - The WebGL data type.\n\t * @return {TypedArray.constructor} The typed array type.\n\t */\n\t_getTypedArrayType( glType ) {\n\n\t\tconst { gl } = this;\n\n\t\tif ( glType === gl.UNSIGNED_BYTE ) return Uint8Array;\n\n\t\tif ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ) return Uint16Array;\n\t\tif ( glType === gl.UNSIGNED_SHORT_5_5_5_1 ) return Uint16Array;\n\t\tif ( glType === gl.UNSIGNED_SHORT_5_6_5 ) return Uint16Array;\n\t\tif ( glType === gl.UNSIGNED_SHORT ) return Uint16Array;\n\t\tif ( glType === gl.UNSIGNED_INT ) return Uint32Array;\n\n\t\tif ( glType === gl.HALF_FLOAT ) return Uint16Array;\n\t\tif ( glType === gl.FLOAT ) return Float32Array;\n\n\t\tthrow new Error( `Unsupported WebGL type: ${glType}` );\n\n\t}\n\n\t/**\n\t * Returns the bytes-per-texel value for the given WebGL data type and texture format.\n\t *\n\t * @private\n\t * @param {GLenum} glType - The WebGL data type.\n\t * @param {GLenum} glFormat - The WebGL texture format.\n\t * @return {number} The bytes-per-texel.\n\t */\n\t_getBytesPerTexel( glType, glFormat ) {\n\n\t\tconst { gl } = this;\n\n\t\tlet bytesPerComponent = 0;\n\n\t\tif ( glType === gl.UNSIGNED_BYTE ) bytesPerComponent = 1;\n\n\t\tif ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ||\n\t\t\tglType === gl.UNSIGNED_SHORT_5_5_5_1 ||\n\t\t\tglType === gl.UNSIGNED_SHORT_5_6_5 ||\n\t\t\tglType === gl.UNSIGNED_SHORT ||\n\t\t\tglType === gl.HALF_FLOAT ) bytesPerComponent = 2;\n\n\t\tif ( glType === gl.UNSIGNED_INT ||\n\t\t\tglType === gl.FLOAT ) bytesPerComponent = 4;\n\n\t\tif ( glFormat === gl.RGBA ) return bytesPerComponent * 4;\n\t\tif ( glFormat === gl.RGB ) return bytesPerComponent * 3;\n\t\tif ( glFormat === gl.ALPHA ) return bytesPerComponent;\n\n\t}\n\n\t/**\n\t * Frees the internal resources.\n\t */\n\tdispose() {\n\n\t\tconst { gl } = this;\n\n\t\tif ( this._srcFramebuffer !== null ) gl.deleteFramebuffer( this._srcFramebuffer );\n\t\tif ( this._dstFramebuffer !== null ) gl.deleteFramebuffer( this._dstFramebuffer );\n\n\t}\n\n}\n\nfunction getImage( source ) {\n\n\tif ( source.isDataTexture ) {\n\n\t\treturn source.image.data;\n\n\t} else if ( ( typeof HTMLImageElement !== 'undefined' && source instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && source instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && source instanceof ImageBitmap ) ||\n\t\t( typeof OffscreenCanvas !== 'undefined' && source instanceof OffscreenCanvas ) ) {\n\n\t\treturn source;\n\n\t}\n\n\treturn source.data;\n\n}\n\n/**\n * A WebGL 2 backend utility module for managing extensions.\n *\n * @private\n */\nclass WebGLExtensions {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGLBackend} backend - The WebGL 2 backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGL 2 backend.\n\t\t *\n\t\t * @type {WebGLBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * A reference to the rendering context.\n\t\t *\n\t\t * @type {WebGL2RenderingContext}\n\t\t */\n\t\tthis.gl = this.backend.gl;\n\n\t\t/**\n\t\t * A list with all the supported WebGL extensions.\n\t\t *\n\t\t * @type {Array<string>}\n\t\t */\n\t\tthis.availableExtensions = this.gl.getSupportedExtensions();\n\n\t\t/**\n\t\t * A dictionary with requested WebGL extensions.\n\t\t * The key is the name of the extension, the value\n\t\t * the requested extension object.\n\t\t *\n\t\t * @type {Object<string,Object>}\n\t\t */\n\t\tthis.extensions = {};\n\n\t}\n\n\t/**\n\t * Returns the extension object for the given extension name.\n\t *\n\t * @param {string} name - The extension name.\n\t * @return {Object} The extension object.\n\t */\n\tget( name ) {\n\n\t\tlet extension = this.extensions[ name ];\n\n\t\tif ( extension === undefined ) {\n\n\t\t\textension = this.gl.getExtension( name );\n\n\t\t\tthis.extensions[ name ] = extension;\n\n\t\t}\n\n\t\treturn extension;\n\n\t}\n\n\t/**\n\t * Returns `true` if the requested extension is available.\n\t *\n\t * @param {string} name - The extension name.\n\t * @return {boolean} Whether the given extension is available or not.\n\t */\n\thas( name ) {\n\n\t\treturn this.availableExtensions.includes( name );\n\n\t}\n\n}\n\n/**\n * A WebGL 2 backend utility module for managing the device's capabilities.\n *\n * @private\n */\nclass WebGLCapabilities {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGLBackend} backend - The WebGL 2 backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGL 2 backend.\n\t\t *\n\t\t * @type {WebGLBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * This value holds the cached max anisotropy value.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.maxAnisotropy = null;\n\n\t\t/**\n\t\t * This value holds the cached max uniform block size value.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.maxUniformBlockSize = null;\n\n\t}\n\n\t/**\n\t * Returns the maximum anisotropy texture filtering value. This value\n\t * depends on the device and is reported by the `EXT_texture_filter_anisotropic`\n\t * WebGL extension.\n\t *\n\t * @return {number} The maximum anisotropy texture filtering value.\n\t */\n\tgetMaxAnisotropy() {\n\n\t\tif ( this.maxAnisotropy !== null ) return this.maxAnisotropy;\n\n\t\tconst gl = this.backend.gl;\n\t\tconst extensions = this.backend.extensions;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tthis.maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tthis.maxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn this.maxAnisotropy;\n\n\t}\n\n\t/**\n\t * Returns the maximum number of bytes available for uniform buffers.\n\t *\n\t * @return {number} The maximum number of bytes available for uniform buffers.\n\t */\n\tgetUniformBufferLimit() {\n\n\t\tif ( this.maxUniformBlockSize !== null ) return this.maxUniformBlockSize;\n\n\t\tconst gl = this.backend.gl;\n\n\t\tthis.maxUniformBlockSize = gl.getParameter( gl.MAX_UNIFORM_BLOCK_SIZE );\n\n\t\treturn this.maxUniformBlockSize;\n\n\t}\n\n}\n\nconst GLFeatureName = {\n\n\t'WEBGL_multi_draw': 'WEBGL_multi_draw',\n\t'WEBGL_compressed_texture_astc': 'texture-compression-astc',\n\t'WEBGL_compressed_texture_etc': 'texture-compression-etc2',\n\t'WEBGL_compressed_texture_etc1': 'texture-compression-etc1',\n\t'WEBGL_compressed_texture_pvrtc': 'texture-compression-pvrtc',\n\t'WEBGL_compressed_texture_s3tc': 'texture-compression-s3tc',\n\t'EXT_texture_compression_bptc': 'texture-compression-bc',\n\t'EXT_disjoint_timer_query_webgl2': 'timestamp-query',\n\t'OVR_multiview2': 'OVR_multiview2'\n\n};\n\nclass WebGLBufferRenderer {\n\n\tconstructor( backend ) {\n\n\t\tthis.gl = backend.gl;\n\t\tthis.extensions = backend.extensions;\n\t\tthis.info = backend.renderer.info;\n\t\tthis.mode = null;\n\t\tthis.index = 0;\n\t\tthis.type = null;\n\t\tthis.object = null;\n\n\t}\n\n\trender( start, count ) {\n\n\t\tconst { gl, mode, object, type, info, index } = this;\n\n\t\tif ( index !== 0 ) {\n\n\t\t\tgl.drawElements( mode, count, type, start );\n\n\t\t} else {\n\n\t\t\tgl.drawArrays( mode, start, count );\n\n\t\t}\n\n\t\tinfo.update( object, count, 1 );\n\n\t}\n\n\trenderInstances( start, count, primcount ) {\n\n\t\tconst { gl, mode, type, index, object, info } = this;\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tif ( index !== 0 ) {\n\n\t\t\tgl.drawElementsInstanced( mode, count, type, start, primcount );\n\n\t\t} else {\n\n\t\t\tgl.drawArraysInstanced( mode, start, count, primcount );\n\n\t\t}\n\n\t\tinfo.update( object, count, primcount );\n\n\t}\n\n\trenderMultiDraw( starts, counts, drawCount ) {\n\n\t\tconst { extensions, mode, object, info } = this;\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\tthis.render( starts[ i ], counts[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this.index !== 0 ) {\n\n\t\t\t\textension.multiDrawElementsWEBGL( mode, counts, 0, this.type, starts, 0, drawCount );\n\n\t\t\t} else {\n\n\t\t\t\textension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );\n\n\t\t\t}\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ];\n\n\t\t\t}\n\n\t\t\tinfo.update( object, elementCount, 1 );\n\n\t\t}\n\n\t}\n\n\t//\n\n}\n\n/**\n * Abstract base class of a timestamp query pool.\n *\n * @abstract\n */\nclass TimestampQueryPool {\n\n\t/**\n\t * Creates a new timestamp query pool.\n\t *\n\t * @param {number} [maxQueries=256] - Maximum number of queries this pool can hold.\n\t */\n\tconstructor( maxQueries = 256 ) {\n\n\t\t/**\n\t\t * Whether to track timestamps or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.trackTimestamp = true;\n\n\t\t/**\n\t\t * Maximum number of queries this pool can hold.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 256\n\t\t */\n\t\tthis.maxQueries = maxQueries;\n\n\t\t/**\n\t\t * How many queries allocated so far.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.currentQueryIndex = 0;\n\n\t\t/**\n\t\t * Tracks offsets for different contexts.\n\t\t *\n\t\t * @type {Map<string, number>}\n\t\t */\n\t\tthis.queryOffsets = new Map();\n\n\t\t/**\n\t\t * Whether the pool has been disposed or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.isDisposed = false;\n\n\t\t/**\n\t\t * The total frame duration until the next update.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.lastValue = 0;\n\n\t\t/**\n\t\t * Stores all timestamp frames.\n\t\t *\n\t\t * @type {Array<number>}\n\t\t */\n\t\tthis.frames = [];\n\n\t\t/**\n\t\t * This property is used to avoid multiple concurrent resolve operations.\n\t\t * The WebGL backend uses it as a boolean flag. In context of WebGPU, it holds\n\t\t * the promise of the current resolve operation.\n\t\t *\n\t\t * @type {boolean|Promise<number>}\n\t\t * @default false\n\t\t */\n\t\tthis.pendingResolve = false;\n\n\t\t/**\n\t\t * Stores the latest timestamp for each render context.\n\t\t *\n\t\t * @type {Map<string, number>}\n\t\t */\n\t\tthis.timestamps = new Map();\n\n\t}\n\n\t/**\n\t * Returns all timestamp frames.\n\t *\n\t * @return {Array<number>} The timestamp frames.\n\t */\n\tgetTimestampFrames() {\n\n\t\treturn this.frames;\n\n\t}\n\n\t/**\n\t * Returns the timestamp for a given render context.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t * @return {?number} The timestamp, or undefined if not available.\n\t */\n\tgetTimestamp( uid ) {\n\n\t\tlet timestamp = this.timestamps.get( uid );\n\n\t\tif ( timestamp === undefined ) {\n\n\t\t\twarn( `TimestampQueryPool: No timestamp available for uid ${ uid }.` );\n\n\t\t\ttimestamp = 0;\n\n\t\t}\n\n\t\treturn timestamp;\n\n\t}\n\n\t/**\n\t * Returns whether a timestamp is available for a given render context.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t * @return {boolean} True if a timestamp is available, false otherwise.\n\t */\n\thasTimestamp( uid ) {\n\n\t\treturn this.timestamps.has( uid );\n\n\t}\n\n\t/**\n\t * Allocate queries for a specific uid.\n\t *\n\t * @abstract\n\t * @param {string} uid - A unique identifier for the render context.\n\t * @param {number} frameId - The current frame identifier.\n\t * @returns {?number}\n\t */\n\tallocateQueriesForContext( /* uid, frameId */ ) {}\n\n\t/**\n\t * Resolve all timestamps and return data (or process them).\n\t *\n\t * @abstract\n\t * @async\n\t * @returns {Promise<number>|number} The resolved timestamp value.\n\t */\n\tasync resolveQueriesAsync() {}\n\n\t/**\n\t * Dispose of the query pool.\n\t *\n\t * @abstract\n\t */\n\tdispose() {}\n\n}\n\n/**\n * Manages a pool of WebGL timestamp queries for performance measurement.\n * Handles creation, execution, and resolution of timer queries using WebGL extensions.\n *\n * @augments TimestampQueryPool\n */\nclass WebGLTimestampQueryPool extends TimestampQueryPool {\n\n\t/**\n\t * Creates a new WebGL timestamp query pool.\n\t *\n\t * @param {WebGLRenderingContext|WebGL2RenderingContext} gl - The WebGL context.\n\t * @param {string} type - The type identifier for this query pool.\n\t * @param {number} [maxQueries=2048] - Maximum number of queries this pool can hold.\n\t */\n\tconstructor( gl, type, maxQueries = 2048 ) {\n\n\t\tsuper( maxQueries );\n\n\t\tthis.gl = gl;\n\t\tthis.type = type;\n\n\t\t// Check for timer query extensions\n\t\tthis.ext = gl.getExtension( 'EXT_disjoint_timer_query_webgl2' ) ||\n\t\t\t\t  gl.getExtension( 'EXT_disjoint_timer_query' );\n\n\t\tif ( ! this.ext ) {\n\n\t\t\twarn( 'EXT_disjoint_timer_query not supported; timestamps will be disabled.' );\n\t\t\tthis.trackTimestamp = false;\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Create query objects\n\t\tthis.queries = [];\n\t\tfor ( let i = 0; i < this.maxQueries; i ++ ) {\n\n\t\t\tthis.queries.push( gl.createQuery() );\n\n\t\t}\n\n\t\tthis.activeQuery = null;\n\t\tthis.queryStates = new Map(); // Track state of each query: 'inactive', 'started', 'ended'\n\n\t}\n\n\t/**\n\t * Allocates a pair of queries for a given render context.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t * @returns {?number} The base offset for the allocated queries, or null if allocation failed.\n\t */\n\tallocateQueriesForContext( uid ) {\n\n\t\tif ( ! this.trackTimestamp ) return null;\n\n\t\t// Check if we have enough space for a new query pair\n\t\tif ( this.currentQueryIndex + 2 > this.maxQueries ) {\n\n\t\t\twarnOnce( `WebGLTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst baseOffset = this.currentQueryIndex;\n\t\tthis.currentQueryIndex += 2;\n\n\t\t// Initialize query states\n\t\tthis.queryStates.set( baseOffset, 'inactive' );\n\t\tthis.queryOffsets.set( uid, baseOffset );\n\n\t\treturn baseOffset;\n\n\t}\n\n\t/**\n\t * Begins a timestamp query for the specified render context.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t */\n\tbeginQuery( uid ) {\n\n\t\tif ( ! this.trackTimestamp || this.isDisposed ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst baseOffset = this.queryOffsets.get( uid );\n\t\tif ( baseOffset == null ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Don't start a new query if there's an active one\n\t\tif ( this.activeQuery !== null ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst query = this.queries[ baseOffset ];\n\t\tif ( ! query ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// Only begin if query is inactive\n\t\t\tif ( this.queryStates.get( baseOffset ) === 'inactive' ) {\n\n\t\t\t\tthis.gl.beginQuery( this.ext.TIME_ELAPSED_EXT, query );\n\t\t\t\tthis.activeQuery = baseOffset;\n\t\t\t\tthis.queryStates.set( baseOffset, 'started' );\n\n\t\t\t}\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'Error in beginQuery:', e );\n\t\t\tthis.activeQuery = null;\n\t\t\tthis.queryStates.set( baseOffset, 'inactive' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Ends the active timestamp query for the specified render context.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t */\n\tendQuery( uid ) {\n\n\t\tif ( ! this.trackTimestamp || this.isDisposed ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst baseOffset = this.queryOffsets.get( uid );\n\t\tif ( baseOffset == null ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Only end if this is the active query\n\t\tif ( this.activeQuery !== baseOffset ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tthis.gl.endQuery( this.ext.TIME_ELAPSED_EXT );\n\t\t\tthis.queryStates.set( baseOffset, 'ended' );\n\t\t\tthis.activeQuery = null;\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'Error in endQuery:', e );\n\t\t\t// Reset state on error\n\t\t\tthis.queryStates.set( baseOffset, 'inactive' );\n\t\t\tthis.activeQuery = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Asynchronously resolves all completed queries and returns the total duration.\n\t *\n\t * @async\n\t * @returns {Promise<number>} The total duration in milliseconds, or the last valid value if resolution fails.\n\t */\n\tasync resolveQueriesAsync() {\n\n\t\tif ( ! this.trackTimestamp || this.pendingResolve ) {\n\n\t\t\treturn this.lastValue;\n\n\t\t}\n\n\t\tthis.pendingResolve = true;\n\n\t\ttry {\n\n\t\t\t// Wait for all ended queries to complete\n\t\t\tconst resolvePromises = new Map();\n\n\t\t\tfor ( const [ uid, baseOffset ] of this.queryOffsets ) {\n\n\t\t\t\tconst state = this.queryStates.get( baseOffset );\n\n\t\t\t\tif ( state === 'ended' ) {\n\n\t\t\t\t\tconst query = this.queries[ baseOffset ];\n\t\t\t\t\tresolvePromises.set( uid, this.resolveQuery( query ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( resolvePromises.size === 0 ) {\n\n\t\t\t\treturn this.lastValue;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst framesDuration = {};\n\n\t\t\tconst frames = [];\n\n\t\t\tfor ( const [ uid, promise ] of resolvePromises ) {\n\n\t\t\t\tconst match = uid.match( /^(.*):f(\\d+)$/ );\n\t\t\t\tconst frame = parseInt( match[ 2 ] );\n\n\t\t\t\tif ( frames.includes( frame ) === false ) {\n\n\t\t\t\t\tframes.push( frame );\n\n\t\t\t\t}\n\n\t\t\t\tif ( framesDuration[ frame ] === undefined ) framesDuration[ frame ] = 0;\n\n\t\t\t\tconst duration = await promise;\n\n\t\t\t\tthis.timestamps.set( uid, duration );\n\n\t\t\t\tframesDuration[ frame ] += duration;\n\n\t\t\t}\n\n\t\t\t// Return the total duration of the last frame\n\t\t\tconst totalDuration = framesDuration[ frames[ frames.length - 1 ] ];\n\n\t\t\t// Store the last valid result\n\t\t\tthis.lastValue = totalDuration;\n\t\t\tthis.frames = frames;\n\n\t\t\t// Reset states\n\t\t\tthis.currentQueryIndex = 0;\n\t\t\tthis.queryOffsets.clear();\n\t\t\tthis.queryStates.clear();\n\t\t\tthis.activeQuery = null;\n\n\t\t\treturn totalDuration;\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'Error resolving queries:', e );\n\t\t\treturn this.lastValue;\n\n\t\t} finally {\n\n\t\t\tthis.pendingResolve = false;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Resolves a single query, checking for completion and disjoint operation.\n\t *\n\t * @async\n\t * @param {WebGLQuery} query - The query object to resolve.\n\t * @returns {Promise<number>} The elapsed time in milliseconds.\n\t */\n\tasync resolveQuery( query ) {\n\n\t\treturn new Promise( ( resolve ) => {\n\n\t\t\tif ( this.isDisposed ) {\n\n\t\t\t\tresolve( this.lastValue );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet timeoutId;\n\t\t\tlet isResolved = false;\n\n\t\t\tconst cleanup = () => {\n\n\t\t\t\tif ( timeoutId ) {\n\n\t\t\t\t\tclearTimeout( timeoutId );\n\t\t\t\t\ttimeoutId = null;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tconst finalizeResolution = ( value ) => {\n\n\t\t\t\tif ( ! isResolved ) {\n\n\t\t\t\t\tisResolved = true;\n\t\t\t\t\tcleanup();\n\t\t\t\t\tresolve( value );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tconst checkQuery = () => {\n\n\t\t\t\tif ( this.isDisposed ) {\n\n\t\t\t\t\tfinalizeResolution( this.lastValue );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Check if the GPU timer was disjoint (i.e., timing was unreliable)\n\t\t\t\t\tconst disjoint = this.gl.getParameter( this.ext.GPU_DISJOINT_EXT );\n\t\t\t\t\tif ( disjoint ) {\n\n\t\t\t\t\t\tfinalizeResolution( this.lastValue );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst available = this.gl.getQueryParameter( query, this.gl.QUERY_RESULT_AVAILABLE );\n\t\t\t\t\tif ( ! available ) {\n\n\t\t\t\t\t\ttimeoutId = setTimeout( checkQuery, 1 );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst elapsed = this.gl.getQueryParameter( query, this.gl.QUERY_RESULT );\n\t\t\t\t\tresolve( Number( elapsed ) / 1e6 ); // Convert nanoseconds to milliseconds\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\terror( 'Error checking query:', e );\n\t\t\t\t\tresolve( this.lastValue );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tcheckQuery();\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Releases all resources held by this query pool.\n\t * This includes deleting all query objects and clearing internal state.\n\t */\n\tdispose() {\n\n\t\tif ( this.isDisposed ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.isDisposed = true;\n\n\t\tif ( ! this.trackTimestamp ) return;\n\n\t\tfor ( const query of this.queries ) {\n\n\t\t\tthis.gl.deleteQuery( query );\n\n\t\t}\n\n\t\tthis.queries = [];\n\t\tthis.queryStates.clear();\n\t\tthis.queryOffsets.clear();\n\t\tthis.lastValue = 0;\n\t\tthis.activeQuery = null;\n\n\t}\n\n}\n\n/**\n * A backend implementation targeting WebGL 2.\n *\n * @private\n * @augments Backend\n */\nclass WebGLBackend extends Backend {\n\n\t/**\n\t * WebGLBackend options.\n\t *\n\t * @typedef {Object} WebGLBackend~Options\n\t * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.\n\t * @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.\n\t * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.\n\t * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.\n\t * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.\n\t * @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.\n\t * @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.\n\t * @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.\n\t * @property {WebGL2RenderingContext} [context=undefined] - A WebGL 2 rendering context.\n\t */\n\n\t/**\n\t * Constructs a new WebGPU backend.\n\t *\n\t * @param {WebGLBackend~Options} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters = {} ) {\n\n\t\tsuper( parameters );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWebGLBackend = true;\n\n\t\t/**\n\t\t * A reference to a backend module holding shader attribute-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {?WebGLAttributeUtils}\n\t\t * @default null\n\t\t */\n\t\tthis.attributeUtils = null;\n\n\t\t/**\n\t\t * A reference to a backend module holding extension-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {?WebGLExtensions}\n\t\t * @default null\n\t\t */\n\t\tthis.extensions = null;\n\n\t\t/**\n\t\t * A reference to a backend module holding capability-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {?WebGLCapabilities}\n\t\t * @default null\n\t\t */\n\t\tthis.capabilities = null;\n\n\t\t/**\n\t\t * A reference to a backend module holding texture-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {?WebGLTextureUtils}\n\t\t * @default null\n\t\t */\n\t\tthis.textureUtils = null;\n\n\t\t/**\n\t\t * A reference to a backend module holding renderer-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {?WebGLBufferRenderer}\n\t\t * @default null\n\t\t */\n\t\tthis.bufferRenderer = null;\n\n\t\t/**\n\t\t * A reference to the rendering context.\n\t\t *\n\t\t * @type {?WebGL2RenderingContext}\n\t\t * @default null\n\t\t */\n\t\tthis.gl = null;\n\n\t\t/**\n\t\t * A reference to a backend module holding state-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {?WebGLState}\n\t\t * @default null\n\t\t */\n\t\tthis.state = null;\n\n\t\t/**\n\t\t * A reference to a backend module holding common\n\t\t * utility functions.\n\t\t *\n\t\t * @type {?WebGLUtils}\n\t\t * @default null\n\t\t */\n\t\tthis.utils = null;\n\n\t\t/**\n\t\t * Dictionary for caching VAOs.\n\t\t *\n\t\t * @type {Object<string,WebGLVertexArrayObject>}\n\t\t */\n\t\tthis.vaoCache = {};\n\n\t\t/**\n\t\t * Dictionary for caching transform feedback objects.\n\t\t *\n\t\t * @type {Object<string,WebGLTransformFeedback>}\n\t\t */\n\t\tthis.transformFeedbackCache = {};\n\n\t\t/**\n\t\t * Controls if `gl.RASTERIZER_DISCARD` should be enabled or not.\n\t\t * Only relevant when using compute shaders.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.discard = false;\n\n\t\t/**\n\t\t * A reference to the `EXT_disjoint_timer_query_webgl2` extension. `null` if the\n\t\t * device does not support the extension.\n\t\t *\n\t\t * @type {?EXTDisjointTimerQueryWebGL2}\n\t\t * @default null\n\t\t */\n\t\tthis.disjoint = null;\n\n\t\t/**\n\t\t* A reference to the `KHR_parallel_shader_compile` extension. `null` if the\n\t\t* device does not support the extension.\n\t\t*\n\t\t* @type {?KHRParallelShaderCompile}\n\t\t* @default null\n\t\t*/\n\t\tthis.parallel = null;\n\n\t\t/**\n\t\t * A reference to the current render context.\n\t\t *\n\t\t * @private\n\t\t * @type {RenderContext}\n\t\t * @default null\n\t\t */\n\t\tthis._currentContext = null;\n\n\t\t/**\n\t\t * A unique collection of bindings.\n\t\t *\n\t\t * @private\n\t\t * @type {WeakSet<Array<BindGroup>>}\n\t\t */\n\t\tthis._knownBindings = new WeakSet();\n\n\t\t/**\n\t\t * Whether the device supports framebuffers invalidation or not.\n\t\t *\n\t\t * @private\n\t\t * @type {boolean}\n\t\t */\n\t\tthis._supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );\n\n\t\t/**\n\t\t * The target framebuffer when rendering with\n\t\t * the WebXR device API.\n\t\t *\n\t\t * @private\n\t\t * @type {?WebGLFramebuffer}\n\t\t * @default null\n\t\t */\n\t\tthis._xrFramebuffer = null;\n\n\t}\n\n\t/**\n\t * Initializes the backend so it is ready for usage.\n\t *\n\t * @param {Renderer} renderer - The renderer.\n\t */\n\tinit( renderer ) {\n\n\t\tsuper.init( renderer );\n\n\t\t//\n\n\t\tconst parameters = this.parameters;\n\n\t\tconst contextAttributes = {\n\t\t\tantialias: renderer.currentSamples > 0,\n\t\t\talpha: true, // always true for performance reasons\n\t\t\tdepth: renderer.depth,\n\t\t\tstencil: renderer.stencil\n\t\t};\n\n\t\tconst glContext = ( parameters.context !== undefined ) ? parameters.context : renderer.domElement.getContext( 'webgl2', contextAttributes );\n\n\t \tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconst contextLossInfo = {\n\t\t\t\tapi: 'WebGL',\n\t\t\t\tmessage: event.statusMessage || 'Unknown reason',\n\t\t\t\treason: null,\n\t\t\t\toriginalEvent: event\n\t\t\t};\n\n\t\t\trenderer.onDeviceLost( contextLossInfo );\n\n\t\t}\n\n\t\tthis._onContextLost = onContextLost;\n\n\t\trenderer.domElement.addEventListener( 'webglcontextlost', onContextLost, false );\n\n\t\tthis.gl = glContext;\n\n\t\tthis.extensions = new WebGLExtensions( this );\n\t\tthis.capabilities = new WebGLCapabilities( this );\n\t\tthis.attributeUtils = new WebGLAttributeUtils( this );\n\t\tthis.textureUtils = new WebGLTextureUtils( this );\n\t\tthis.bufferRenderer = new WebGLBufferRenderer( this );\n\n\t\tthis.state = new WebGLState( this );\n\t\tthis.utils = new WebGLUtils( this );\n\n\t\tthis.extensions.get( 'EXT_color_buffer_float' );\n\t\tthis.extensions.get( 'WEBGL_clip_cull_distance' );\n\t\tthis.extensions.get( 'OES_texture_float_linear' );\n\t\tthis.extensions.get( 'EXT_color_buffer_half_float' );\n\t\tthis.extensions.get( 'WEBGL_multisampled_render_to_texture' );\n\t\tthis.extensions.get( 'WEBGL_render_shared_exponent' );\n\t\tthis.extensions.get( 'WEBGL_multi_draw' );\n\t\tthis.extensions.get( 'OVR_multiview2' );\n\t\tthis.extensions.get( 'EXT_clip_control' );\n\n\t\tthis.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );\n\t\tthis.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );\n\t\tthis.drawBuffersIndexedExt = this.extensions.get( 'OES_draw_buffers_indexed' );\n\n\t\tif ( parameters.reversedDepthBuffer ) {\n\n\t\t\tif ( this.extensions.has( 'EXT_clip_control' ) ) {\n\n\t\t\t\trenderer.reversedDepthBuffer = true;\n\n\t\t\t} else {\n\n\t\t\t\twarn( 'WebGPURenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.' );\n\n\t\t\t\trenderer.reversedDepthBuffer = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( renderer.reversedDepthBuffer ) {\n\n\t\t\tthis.state.setReversedDepth( true );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The coordinate system of the backend.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget coordinateSystem() {\n\n\t\treturn WebGLCoordinateSystem;\n\n\t}\n\n\t/**\n\t * This method performs a readback operation by moving buffer data from\n\t * a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can\n\t * be used to retain and reuse handles to the intermediate buffers and prevent\n\t * new allocation.\n\t *\n\t * @async\n\t * @param {BufferAttribute} attribute - The storage buffer attribute to read frm.\n\t * @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.\n\t * @param {number} offset - The storage buffer attribute.\n\t * @param {number} count - The offset from which to start reading the\n\t * @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.\n\t */\n\tasync getArrayBufferAsync( attribute, target = null, offset = 0, count = -1 ) {\n\n\t\treturn await this.attributeUtils.getArrayBufferAsync( attribute, target, offset, count );\n\n\t}\n\n\t/**\n\t * Ensures the backend is XR compatible.\n\t *\n\t * @async\n\t * @return {Promise} A Promise that resolve when the renderer is XR compatible.\n\t */\n\tasync makeXRCompatible() {\n\n\t\tconst attributes = this.gl.getContextAttributes();\n\n\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\tawait this.gl.makeXRCompatible();\n\n\t\t}\n\n\t}\n\t/**\n\t * Sets the XR rendering destination.\n\t *\n\t * @param {WebGLFramebuffer} xrFramebuffer - The XR framebuffer.\n\t */\n\tsetXRTarget( xrFramebuffer ) {\n\n\t\tthis._xrFramebuffer = xrFramebuffer;\n\n\t}\n\n\t/**\n\t * Configures the given XR render target with external textures.\n\t *\n\t * This method is only relevant when using the WebXR Layers API.\n\t *\n\t * @param {XRRenderTarget} renderTarget - The XR render target.\n\t * @param {WebGLTexture} colorTexture - A native color texture.\n\t * @param {?WebGLTexture} [depthTexture=null] - A native depth texture.\n\t */\n\tsetXRRenderTargetTextures( renderTarget, colorTexture, depthTexture = null ) {\n\n\t\tconst gl = this.gl;\n\n\t\tthis.set( renderTarget.texture, { textureGPU: colorTexture, glInternalFormat: gl.RGBA8 } ); // see #24698 why RGBA8 and not SRGB8_ALPHA8 is used\n\n\t\tif ( depthTexture !== null ) {\n\n\t\t\tconst glInternalFormat = renderTarget.stencilBuffer ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\n\n\t\t\tthis.set( renderTarget.depthTexture, { textureGPU: depthTexture, glInternalFormat: glInternalFormat } );\n\n\t\t\t// The multisample_render_to_texture extension doesn't work properly if there\n\t\t\t// are midframe flushes and an external depth texture.\n\t\t\tif ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget._autoAllocateDepthBuffer === true && renderTarget.multiview === false ) {\n\n\t\t\t\twarn( 'WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );\n\n\t\t\t}\n\n\t\t\trenderTarget._autoAllocateDepthBuffer = false;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Inits a time stamp query for the given render context.\n\t *\n\t * @param {string} type - The type of the timestamp query.\n\t * @param {string} uid - A unique identifier for the timestamp query.\n\t */\n\tinitTimestampQuery( type, uid ) {\n\n\t\tif ( ! this.disjoint || ! this.trackTimestamp ) return;\n\n\t\tif ( ! this.timestampQueryPool[ type ] ) {\n\n\t\t\t// TODO: Variable maxQueries?\n\t\t\tthis.timestampQueryPool[ type ] = new WebGLTimestampQueryPool( this.gl, type, 2048 );\n\n\t\t}\n\n\t\tconst timestampQueryPool = this.timestampQueryPool[ type ];\n\n\t\tconst baseOffset = timestampQueryPool.allocateQueriesForContext( uid );\n\n\t\tif ( baseOffset !== null ) {\n\n\t\t\ttimestampQueryPool.beginQuery( uid );\n\n\t\t}\n\n\t}\n\n\t// timestamp utils\n\n\t/**\n\t * Prepares the timestamp buffer.\n\t *\n\t * @param {string} type - The type of the timestamp query.\n\t * @param {string} uid - A unique identifier for the timestamp query.\n\t */\n\tprepareTimestampBuffer( type, uid ) {\n\n\t\tif ( ! this.disjoint || ! this.trackTimestamp ) return;\n\n\t\tconst timestampQueryPool = this.timestampQueryPool[ type ];\n\n\t\ttimestampQueryPool.endQuery( uid );\n\n\t}\n\n\n\t/**\n\t * Returns the backend's rendering context.\n\t *\n\t * @return {WebGL2RenderingContext} The rendering context.\n\t */\n\tgetContext() {\n\n\t\treturn this.gl;\n\n\t}\n\n\t/**\n\t * This method is executed at the beginning of a render call and prepares\n\t * the WebGL state for upcoming render calls\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tbeginRender( renderContext ) {\n\n\t\tconst { state } = this;\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\t//\n\n\t\tif ( renderContext.viewport ) {\n\n\t\t\tthis.updateViewport( renderContext );\n\n\t\t} else {\n\n\t\t\tconst { width, height } = this.getDrawingBufferSize();\n\t\t\tstate.viewport( 0, 0, width, height );\n\n\t\t}\n\n\t\tif ( renderContext.scissor ) {\n\n\t\t\tthis.updateScissor( renderContext );\n\n\t\t} else {\n\n\t\t\tconst { width, height } = this.getDrawingBufferSize();\n\t\t\tstate.scissor( 0, 0, width, height );\n\n\t\t}\n\n\t\t//\n\n\t\tthis.initTimestampQuery( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );\n\n\t\trenderContextData.previousContext = this._currentContext;\n\t\tthis._currentContext = renderContext;\n\n\t\tthis._setFramebuffer( renderContext );\n\t\tthis.clear( renderContext.clearColor, renderContext.clearDepth, renderContext.clearStencil, renderContext, false );\n\n\t\tconst occlusionQueryCount = renderContext.occlusionQueryCount;\n\n\t\tif ( occlusionQueryCount > 0 ) {\n\n\t\t\t// Get a reference to the array of objects with queries. The renderContextData property\n\t\t\t// can be changed by another render pass before the async reading of all previous queries complete\n\t\t\trenderContextData.currentOcclusionQueries = renderContextData.occlusionQueries;\n\t\t\trenderContextData.currentOcclusionQueryObjects = renderContextData.occlusionQueryObjects;\n\n\t\t\trenderContextData.lastOcclusionObject = null;\n\t\t\trenderContextData.occlusionQueries = new Array( occlusionQueryCount );\n\t\t\trenderContextData.occlusionQueryObjects = new Array( occlusionQueryCount );\n\t\t\trenderContextData.occlusionQueryIndex = 0;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is executed at the end of a render call and finalizes work\n\t * after draw calls.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tfinishRender( renderContext ) {\n\n\t\tconst { gl, state } = this;\n\t\tconst renderContextData = this.get( renderContext );\n\t\tconst previousContext = renderContextData.previousContext;\n\n\t\tstate.resetVertexState();\n\n\t\tconst occlusionQueryCount = renderContext.occlusionQueryCount;\n\n\t\tif ( occlusionQueryCount > 0 ) {\n\n\t\t\tif ( occlusionQueryCount > renderContextData.occlusionQueryIndex ) {\n\n\t\t\t\tgl.endQuery( gl.ANY_SAMPLES_PASSED );\n\n\t\t\t}\n\n\t\t\tthis.resolveOccludedAsync( renderContext );\n\n\t\t}\n\n\t\tconst textures = renderContext.textures;\n\n\t\tif ( textures !== null ) {\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tif ( texture.generateMipmaps ) {\n\n\t\t\t\t\tthis.generateMipmaps( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._currentContext = previousContext;\n\n\t\tthis._resolveRenderTarget( renderContext );\n\n\t\tif ( previousContext !== null ) {\n\n\t\t\tthis._setFramebuffer( previousContext );\n\n\t\t\tif ( previousContext.viewport ) {\n\n\t\t\t\tthis.updateViewport( previousContext );\n\n\t\t\t} else {\n\n\t\t\t\tconst { width, height } = this.getDrawingBufferSize();\n\t\t\t\tstate.viewport( 0, 0, width, height );\n\n\t\t\t}\n\n\t\t\tif ( previousContext.scissor ) {\n\n\t\t\t\tthis.updateScissor( previousContext );\n\n\t\t\t} else {\n\n\t\t\t\tconst { width, height } = this.getDrawingBufferSize();\n\t\t\t\tstate.scissor( 0, 0, width, height );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.prepareTimestampBuffer( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );\n\n\t}\n\n\t/**\n\t * This method processes the result of occlusion queries and writes it\n\t * into render context data.\n\t *\n\t * @async\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tresolveOccludedAsync( renderContext ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\t// handle occlusion query results\n\n\t\tconst { currentOcclusionQueries, currentOcclusionQueryObjects } = renderContextData;\n\n\t\tif ( currentOcclusionQueries && currentOcclusionQueryObjects ) {\n\n\t\t\tconst occluded = new WeakSet();\n\t\t\tconst { gl } = this;\n\n\t\t\trenderContextData.currentOcclusionQueryObjects = null;\n\t\t\trenderContextData.currentOcclusionQueries = null;\n\n\t\t\tconst check = () => {\n\n\t\t\t\tlet completed = 0;\n\n\t\t\t\t// check all queries and requeue as appropriate\n\t\t\t\tfor ( let i = 0; i < currentOcclusionQueries.length; i ++ ) {\n\n\t\t\t\t\tconst query = currentOcclusionQueries[ i ];\n\n\t\t\t\t\tif ( query === null ) continue;\n\n\t\t\t\t\tif ( gl.getQueryParameter( query, gl.QUERY_RESULT_AVAILABLE ) ) {\n\n\t\t\t\t\t\tif ( gl.getQueryParameter( query, gl.QUERY_RESULT ) === 0 ) occluded.add( currentOcclusionQueryObjects[ i ] );\n\n\t\t\t\t\t\tcurrentOcclusionQueries[ i ] = null;\n\t\t\t\t\t\tgl.deleteQuery( query );\n\n\t\t\t\t\t\tcompleted ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( completed < currentOcclusionQueries.length ) {\n\n\t\t\t\t\trequestAnimationFrame( check );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderContextData.occluded = occluded;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tcheck();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns `true` if the given 3D object is fully occluded by other\n\t * 3D objects in the scene.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {Object3D} object - The 3D object to test.\n\t * @return {boolean} Whether the 3D object is fully occluded or not.\n\t */\n\tisOccluded( renderContext, object ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\treturn renderContextData.occluded && renderContextData.occluded.has( object );\n\n\t}\n\n\t/**\n\t * Updates the viewport with the values from the given render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tupdateViewport( renderContext ) {\n\n\t\tconst { state } = this;\n\t\tconst { x, y, width, height } = renderContext.viewportValue;\n\n\t\tstate.viewport( x, renderContext.height - height - y, width, height );\n\n\t}\n\n\t/**\n\t * Updates the scissor with the values from the given render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tupdateScissor( renderContext ) {\n\n\t\tconst { state } = this;\n\t\tconst { x, y, width, height } = renderContext.scissorValue;\n\n\t\tstate.scissor( x, renderContext.height - height - y, width, height );\n\n\t}\n\n\t/**\n\t * Defines the scissor test.\n\t *\n\t * @param {boolean} boolean - Whether the scissor test should be enabled or not.\n\t */\n\tsetScissorTest( boolean ) {\n\n\t\tconst state = this.state;\n\n\t\tstate.setScissorTest( boolean );\n\n\t}\n\n\t/**\n\t * Returns the clear color and alpha into a single\n\t * color object.\n\t *\n\t * @return {Color4} The clear color.\n\t */\n\tgetClearColor() {\n\n\t\tconst clearColor = super.getClearColor();\n\n\t\t// Since the canvas is always created with alpha: true,\n\t\t// WebGL must always premultiply the clear color.\n\n\t\tclearColor.r *= clearColor.a;\n\t\tclearColor.g *= clearColor.a;\n\t\tclearColor.b *= clearColor.a;\n\n\t\treturn clearColor;\n\n\t}\n\n\t/**\n\t * Performs a clear operation.\n\t *\n\t * @param {boolean} color - Whether the color buffer should be cleared or not.\n\t * @param {boolean} depth - Whether the depth buffer should be cleared or not.\n\t * @param {boolean} stencil - Whether the stencil buffer should be cleared or not.\n\t * @param {?Object} [descriptor=null] - The render context of the current set render target.\n\t * @param {boolean} [setFrameBuffer=true] - Controls whether the intermediate framebuffer should be set or not.\n\t * @param {boolean} [resolveRenderTarget=true] - Controls whether an active render target should be resolved\n\t * or not. Only relevant for explicit clears.\n\t */\n\tclear( color, depth, stencil, descriptor = null, setFrameBuffer = true, resolveRenderTarget = true ) {\n\n\t\tconst { gl, renderer } = this;\n\n\t\tif ( descriptor === null ) {\n\n\t\t\tconst clearColor = this.getClearColor();\n\n\t\t\tdescriptor = {\n\t\t\t\ttextures: null,\n\t\t\t\tclearColorValue: clearColor\n\t\t\t};\n\n\t\t}\n\n\t\t//\n\n\t\tlet clear = 0;\n\n\t\tif ( color ) clear |= gl.COLOR_BUFFER_BIT;\n\t\tif ( depth ) clear |= gl.DEPTH_BUFFER_BIT;\n\t\tif ( stencil ) clear |= gl.STENCIL_BUFFER_BIT;\n\n\t\tif ( clear !== 0 ) {\n\n\t\t\tlet clearColor;\n\n\t\t\tif ( descriptor.clearColorValue ) {\n\n\t\t\t\tclearColor = descriptor.clearColorValue;\n\n\t\t\t} else {\n\n\t\t\t\tclearColor = this.getClearColor();\n\n\t\t\t}\n\n\t\t\tconst clearDepth = renderer.getClearDepth();\n\t\t\tconst clearStencil = renderer.getClearStencil();\n\n\t\t\tif ( depth ) this.state.setDepthMask( true );\n\n\t\t\tif ( descriptor.textures === null ) {\n\n\t\t\t\tgl.clearColor( clearColor.r, clearColor.g, clearColor.b, clearColor.a );\n\t\t\t\tgl.clear( clear );\n\n\t\t\t} else {\n\n\t\t\t\tif ( setFrameBuffer ) this._setFramebuffer( descriptor );\n\n\t\t\t\tif ( color ) {\n\n\t\t\t\t\tfor ( let i = 0; i < descriptor.textures.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\tgl.clearBufferfv( gl.COLOR, i, [ clearColor.r, clearColor.g, clearColor.b, clearColor.a ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.clearBufferfv( gl.COLOR, i, [ 0, 0, 0, 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( depth && stencil ) {\n\n\t\t\t\t\tgl.clearBufferfi( gl.DEPTH_STENCIL, 0, clearDepth, clearStencil );\n\n\t\t\t\t} else if ( depth ) {\n\n\t\t\t\t\tgl.clearBufferfv( gl.DEPTH, 0, [ clearDepth ] );\n\n\t\t\t\t} else if ( stencil ) {\n\n\t\t\t\t\tgl.clearBufferiv( gl.STENCIL, 0, [ clearStencil ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( setFrameBuffer && resolveRenderTarget ) this._resolveRenderTarget( descriptor );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is executed at the beginning of a compute call and\n\t * prepares the state for upcoming compute tasks.\n\t *\n\t * @param {Node|Array<Node>} computeGroup - The compute node(s).\n\t */\n\tbeginCompute( computeGroup ) {\n\n\t\tconst { state, gl } = this;\n\n\t\t//\n\n\t\tstate.bindFramebuffer( gl.FRAMEBUFFER, null );\n\t\tthis.initTimestampQuery( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );\n\n\t}\n\n\t/**\n\t * Executes a compute command for the given compute node.\n\t *\n\t * @param {Node|Array<Node>} computeGroup - The group of compute nodes of a compute call. Can be a single compute node.\n\t * @param {Node} computeNode - The compute node.\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t * @param {ComputePipeline} pipeline - The compute pipeline.\n\t * @param {?number} [count=null] - The count of compute invocations. If `null`, the count is determined by the compute node.\n\t */\n\tcompute( computeGroup, computeNode, bindings, pipeline, count = null ) {\n\n\t\tconst { state, gl } = this;\n\n\t\tif ( this.discard === false ) {\n\n\t\t\t// required here to handle async behaviour of render.compute()\n\t\t\tstate.enable( gl.RASTERIZER_DISCARD );\n\t\t\tthis.discard = true;\n\n\t\t}\n\n\t\tconst { programGPU, transformBuffers, attributes } = this.get( pipeline );\n\n\t\tconst vaoKey = this._getVaoKey( attributes );\n\n\t\tconst vaoGPU = this.vaoCache[ vaoKey ];\n\n\t\tif ( vaoGPU === undefined ) {\n\n\t\t\tthis.vaoCache[ vaoKey ] = this._createVao( attributes );\n\n\t\t} else {\n\n\t\t\tstate.setVertexState( vaoGPU );\n\n\t\t}\n\n\t\tstate.useProgram( programGPU );\n\n\t\tthis._bindUniforms( bindings );\n\n\t\tconst transformFeedbackGPU = this._getTransformFeedback( transformBuffers );\n\n\t\tgl.bindTransformFeedback( gl.TRANSFORM_FEEDBACK, transformFeedbackGPU );\n\t\tgl.beginTransformFeedback( gl.POINTS );\n\n\t\tcount = ( count !== null ) ? count : computeNode.count;\n\n\t\tif ( Array.isArray( count ) ) {\n\n\t\t\twarnOnce( 'WebGLBackend.compute(): The count parameter must be a single number, not an array.' );\n\n\t\t\tcount = count[ 0 ];\n\n\t\t} else if ( count && typeof count === 'object' && count.isIndirectStorageBufferAttribute ) {\n\n\t\t\twarnOnce( 'WebGLBackend.compute(): The count parameter must be a single number, not IndirectStorageBufferAttribute' );\n\n\t\t\tcount = computeNode.count;\n\n\t\t}\n\n\t\tif ( attributes[ 0 ].isStorageInstancedBufferAttribute ) {\n\n\t\t\tgl.drawArraysInstanced( gl.POINTS, 0, 1, count );\n\n\t\t} else {\n\n\t\t\tgl.drawArrays( gl.POINTS, 0, count );\n\n\t\t}\n\n\t\tgl.endTransformFeedback();\n\t\tgl.bindTransformFeedback( gl.TRANSFORM_FEEDBACK, null );\n\n\t\t// switch active buffers\n\n\t\tfor ( let i = 0; i < transformBuffers.length; i ++ ) {\n\n\t\t\tconst dualAttributeData = transformBuffers[ i ];\n\n\t\t\tif ( dualAttributeData.pbo && this.has( dualAttributeData.pbo ) ) {\n\n\t\t\t\tthis.textureUtils.copyBufferToTexture( dualAttributeData.transformBuffer, dualAttributeData.pbo );\n\n\t\t\t}\n\n\t\t\tdualAttributeData.switchBuffers();\n\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is executed at the end of a compute call and\n\t * finalizes work after compute tasks.\n\t *\n\t * @param {Node|Array<Node>} computeGroup - The compute node(s).\n\t */\n\tfinishCompute( computeGroup ) {\n\n\t\tconst { state, gl } = this;\n\n\t\tthis.discard = false;\n\n\t\tstate.disable( gl.RASTERIZER_DISCARD );\n\n\t\tthis.prepareTimestampBuffer( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );\n\n\t\tif ( this._currentContext ) {\n\n\t\t\tthis._setFramebuffer( this._currentContext );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Internal to determine if the current render target is a render target array with depth 2D array texture.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @return {boolean} Whether the render target is a render target array with depth 2D array texture.\n\t *\n\t * @private\n\t */\n\t_isRenderCameraDepthArray( renderContext ) {\n\n\t\treturn renderContext.depthTexture && renderContext.depthTexture.isArrayTexture && renderContext.camera.isArrayCamera;\n\n\t}\n\n\t/**\n\t * Internal draw function.\n\t *\n\t * @private\n\t * @param {Object3D} object - The object to render.\n\t * @param {WebGLBufferRenderer} renderer - The internal renderer.\n\t * @param {number} firstVertex - The first vertex to render.\n\t * @param {number} vertexCount - The vertex count.\n\t * @param {number} instanceCount - The intance count.\n\t * @param {WebGLProgram} programGPU - The raw WebGL shader program.\n\t */\n\t_draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU ) {\n\n\t\tif ( object.isBatchedMesh ) {\n\n\t\t\tif ( this.hasFeature( 'WEBGL_multi_draw' ) === false ) {\n\n\t\t\t\tconst { gl } = this;\n\n\t\t\t\tconst drawIdLocation = gl.getUniformLocation( programGPU, 'nodeUniformDrawId' );\n\n\t\t\t\tconst starts = object._multiDrawStarts;\n\t\t\t\tconst counts = object._multiDrawCounts;\n\t\t\t\tconst drawCount = object._multiDrawCount;\n\n\t\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\t\tgl.uniform1ui( drawIdLocation, i );\n\t\t\t\t\trenderer.render( starts[ i ], counts[ i ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );\n\n\t\t\t}\n\n\t\t} else if ( instanceCount > 1 ) {\n\n\t\t\trenderer.renderInstances( firstVertex, vertexCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( firstVertex, vertexCount );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Executes a draw command for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object to draw.\n\t * @param {Info} info - Holds a series of statistical information about the GPU memory and the rendering process.\n\t */\n\tdraw( renderObject/*, info*/ ) {\n\n\t\tconst { object, pipeline, material, context, hardwareClippingPlanes } = renderObject;\n\t\tconst { programGPU } = this.get( pipeline );\n\n\t\tconst { gl, state } = this;\n\n\t\tconst contextData = this.get( context );\n\n\t\tconst drawParams = renderObject.getDrawParameters();\n\n\t\tif ( drawParams === null ) return;\n\n\t\t//\n\n\t\tthis._bindUniforms( renderObject.getBindings() );\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tstate.setMaterial( material, frontFaceCW, hardwareClippingPlanes );\n\n\t\tif ( context.mrt !== null && context.textures !== null ) {\n\n\t\t\tstate.setMRTBlending( context.textures, context.mrt, material );\n\n\t\t}\n\n\t\tstate.useProgram( programGPU );\n\n\t\t// vertex state\n\n\t\tconst attributes = renderObject.getAttributes();\n\t\tconst attributesData = this.get( attributes );\n\n\t\tlet vaoGPU = attributesData.vaoGPU;\n\n\t\tif ( vaoGPU === undefined ) {\n\n\t\t\tconst vaoKey = this._getVaoKey( attributes );\n\n\t\t\tvaoGPU = this.vaoCache[ vaoKey ];\n\n\t\t\tif ( vaoGPU === undefined ) {\n\n\t\t\t\tvaoGPU = this._createVao( attributes );\n\n\t\t\t\tthis.vaoCache[ vaoKey ] = vaoGPU;\n\t\t\t\tattributesData.vaoGPU = vaoGPU;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst index = renderObject.getIndex();\n\t\tconst indexGPU = ( index !== null ) ? this.get( index ).bufferGPU : null;\n\n\t\tstate.setVertexState( vaoGPU, indexGPU );\n\n\t\t//\n\n\t\tconst lastObject = contextData.lastOcclusionObject;\n\n\t\tif ( lastObject !== object && lastObject !== undefined ) {\n\n\t\t\tif ( lastObject !== null && lastObject.occlusionTest === true ) {\n\n\t\t\t\tgl.endQuery( gl.ANY_SAMPLES_PASSED );\n\n\t\t\t\tcontextData.occlusionQueryIndex ++;\n\n\t\t\t}\n\n\t\t\tif ( object.occlusionTest === true ) {\n\n\t\t\t\tconst query = gl.createQuery();\n\n\t\t\t\tgl.beginQuery( gl.ANY_SAMPLES_PASSED, query );\n\n\t\t\t\tcontextData.occlusionQueries[ contextData.occlusionQueryIndex ] = query;\n\t\t\t\tcontextData.occlusionQueryObjects[ contextData.occlusionQueryIndex ] = object;\n\n\t\t\t}\n\n\t\t\tcontextData.lastOcclusionObject = object;\n\n\t\t}\n\n\t\t//\n\t\tconst renderer = this.bufferRenderer;\n\n\t\tif ( object.isPoints ) renderer.mode = gl.POINTS;\n\t\telse if ( object.isLineSegments ) renderer.mode = gl.LINES;\n\t\telse if ( object.isLine ) renderer.mode = gl.LINE_STRIP;\n\t\telse if ( object.isLineLoop ) renderer.mode = gl.LINE_LOOP;\n\t\telse {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * this.renderer.getPixelRatio() );\n\t\t\t\trenderer.mode = gl.LINES;\n\n\t\t\t} else {\n\n\t\t\t\trenderer.mode = gl.TRIANGLES;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst { vertexCount, instanceCount } = drawParams;\n\t\tlet { firstVertex } = drawParams;\n\n\t\trenderer.object = object;\n\n\t\tif ( index !== null ) {\n\n\t\t\tfirstVertex *= index.array.BYTES_PER_ELEMENT;\n\n\t\t\tconst indexData = this.get( index );\n\n\t\t\trenderer.index = index.count;\n\t\t\trenderer.type = indexData.type;\n\n\t\t} else {\n\n\t\t\trenderer.index = 0;\n\n\t\t}\n\n\t\tif ( renderObject.camera.isArrayCamera === true && renderObject.camera.cameras.length > 0 && renderObject.camera.isMultiViewCamera === false ) {\n\n\t\t\tconst cameraData = this.get( renderObject.camera );\n\t\t\tconst cameras = renderObject.camera.cameras;\n\t\t\tconst cameraIndex = renderObject.getBindingGroup( 'cameraIndex' ).bindings[ 0 ];\n\n\t\t\tif ( cameraData.indexesGPU === undefined || cameraData.indexesGPU.length !== cameras.length ) {\n\n\t\t\t\tconst data = new Uint32Array( [ 0, 0, 0, 0 ] );\n\t\t\t\tconst indexesGPU = [];\n\n\t\t\t\tfor ( let i = 0, len = cameras.length; i < len; i ++ ) {\n\n\t\t\t\t\tconst bufferGPU = gl.createBuffer();\n\n\t\t\t\t\tdata[ 0 ] = i;\n\n\t\t\t\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );\n\t\t\t\t\tgl.bufferData( gl.UNIFORM_BUFFER, data, gl.STATIC_DRAW );\n\n\t\t\t\t\tindexesGPU.push( bufferGPU );\n\n\t\t\t\t}\n\n\t\t\t\tcameraData.indexesGPU = indexesGPU; // TODO: Create a global library for this\n\n\t\t\t}\n\n\t\t\tlet cameraIndexBufferIndex = 0;\n\n\t\t\tbindingsSearch: for ( const bindGroup of renderObject.getBindings() ) {\n\n\t\t\t\tfor ( const binding of bindGroup.bindings ) {\n\n\t\t\t\t\tif ( binding === cameraIndex ) break bindingsSearch;\n\n\t\t\t\t\tif ( binding.isUniformsGroup || binding.isUniformBuffer ) cameraIndexBufferIndex ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pixelRatio = this.renderer.getPixelRatio();\n\n\t\t\tconst renderTarget = this._currentContext.renderTarget;\n\t\t\tconst isRenderCameraDepthArray = this._isRenderCameraDepthArray( this._currentContext );\n\t\t\tconst prevActiveCubeFace = this._currentContext.activeCubeFace;\n\n\t\t\tif ( isRenderCameraDepthArray ) {\n\n\t\t\t\t// Clear the depth texture\n\t\t\t\tconst textureData = this.get( renderTarget.depthTexture );\n\n\t\t\t\tif ( textureData.clearedRenderId !== this.renderer._nodes.nodeFrame.renderId ) {\n\n\t\t\t\t\ttextureData.clearedRenderId = this.renderer._nodes.nodeFrame.renderId;\n\n\t\t\t\t\tconst { stencilBuffer } = renderTarget;\n\n\t\t\t\t\tfor ( let i = 0, len = cameras.length; i < len; i ++ ) {\n\n\t\t\t\t\t\tthis.renderer._activeCubeFace = i;\n\t\t\t\t\t\tthis._currentContext.activeCubeFace = i;\n\n\t\t\t\t\t\tthis._setFramebuffer( this._currentContext );\n\t\t\t\t\t\tthis.clear( false, true, stencilBuffer, this._currentContext, false, false );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.renderer._activeCubeFace = prevActiveCubeFace;\n\t\t\t\t\tthis._currentContext.activeCubeFace = prevActiveCubeFace;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, len = cameras.length; i < len; i ++ ) {\n\n\t\t\t\tconst subCamera = cameras[ i ];\n\n\t\t\t\tif ( object.layers.test( subCamera.layers ) ) {\n\n\t\t\t\t\tif ( isRenderCameraDepthArray ) {\n\n\t\t\t\t\t\t// Update the active layer\n\t\t\t\t\t\tthis.renderer._activeCubeFace = i;\n\t\t\t\t\t\tthis._currentContext.activeCubeFace = i;\n\n\t\t\t\t\t\tthis._setFramebuffer( this._currentContext );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst vp = subCamera.viewport;\n\n\t\t\t\t\tif ( vp !== undefined ) {\n\n\t\t\t\t\t\tconst x = vp.x * pixelRatio;\n\t\t\t\t\t\tconst y = vp.y * pixelRatio;\n\t\t\t\t\t\tconst width = vp.width * pixelRatio;\n\t\t\t\t\t\tconst height = vp.height * pixelRatio;\n\n\t\t\t\t\t\tstate.viewport(\n\t\t\t\t\t\t\tMath.floor( x ),\n\t\t\t\t\t\t\tMath.floor( renderObject.context.height - height - y ),\n\t\t\t\t\t\t\tMath.floor( width ),\n\t\t\t\t\t\t\tMath.floor( height )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexBufferIndex, cameraData.indexesGPU[ i ] );\n\n\t\t\t\t\tthis._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );\n\n\t\t\t\t}\n\n\t\t\t\tthis._currentContext.activeCubeFace = prevActiveCubeFace;\n\t\t\t\tthis.renderer._activeCubeFace = prevActiveCubeFace;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Explain why always null is returned.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {boolean} Whether the render pipeline requires an update or not.\n\t */\n\tneedsRenderUpdate( /*renderObject*/ ) {\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Explain why no cache key is computed.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {string} The cache key.\n\t */\n\tgetRenderCacheKey( /*renderObject*/ ) {\n\n\t\treturn '';\n\n\t}\n\n\t// textures\n\n\t/**\n\t * Creates a default texture for the given texture that can be used\n\t * as a placeholder until the actual texture is ready for usage.\n\t *\n\t * @param {Texture} texture - The texture to create a default texture for.\n\t */\n\tcreateDefaultTexture( texture ) {\n\n\t\tthis.textureUtils.createDefaultTexture( texture );\n\n\t}\n\n\t/**\n\t * Defines a texture on the GPU for the given texture object.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t */\n\tcreateTexture( texture, options ) {\n\n\t\tthis.textureUtils.createTexture( texture, options );\n\n\t}\n\n\t/**\n\t * Uploads the updated texture data to the GPU.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t */\n\tupdateTexture( texture, options ) {\n\n\t\tthis.textureUtils.updateTexture( texture, options );\n\n\t}\n\n\t/**\n\t * Generates mipmaps for the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t */\n\tgenerateMipmaps( texture ) {\n\n\t\tthis.textureUtils.generateMipmaps( texture );\n\n\t}\n\n\t/**\n\t * Destroys the GPU data for the given texture object.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.\n\t */\n\tdestroyTexture( texture, isDefaultTexture = false ) {\n\n\t\tthis.textureUtils.destroyTexture( texture, isDefaultTexture );\n\n\t}\n\n\t/**\n\t * Returns texture data as a typed array.\n\t *\n\t * @async\n\t * @param {Texture} texture - The texture to copy.\n\t * @param {number} x - The x coordinate of the copy origin.\n\t * @param {number} y - The y coordinate of the copy origin.\n\t * @param {number} width - The width of the copy.\n\t * @param {number} height - The height of the copy.\n\t * @param {number} faceIndex - The face index.\n\t * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.\n\t */\n\tasync copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {\n\n\t\treturn this.textureUtils.copyTextureToBuffer( texture, x, y, width, height, faceIndex );\n\n\t}\n\n\t/**\n\t * This method does nothing since WebGL 2 has no concept of samplers.\n\t *\n\t * @param {Texture} texture - The texture to update the sampler for.\n\t * @return {string} The current sampler key.\n\t */\n\tupdateSampler( /*texture*/ ) {\n\n\t\treturn '';\n\n\t}\n\n\t// node builder\n\n\t/**\n\t * Returns a node builder for the given render object.\n\t *\n\t * @param {RenderObject} object - The render object.\n\t * @param {Renderer} renderer - The renderer.\n\t * @return {GLSLNodeBuilder} The node builder.\n\t */\n\tcreateNodeBuilder( object, renderer ) {\n\n\t\treturn new GLSLNodeBuilder( object, renderer );\n\n\t}\n\n\t// program\n\n\t/**\n\t * Creates a shader program from the given programmable stage.\n\t *\n\t * @param {ProgrammableStage} program - The programmable stage.\n\t */\n\tcreateProgram( program ) {\n\n\t\tconst gl = this.gl;\n\t\tconst { stage, code } = program;\n\n\t\tconst shader = stage === 'fragment' ? gl.createShader( gl.FRAGMENT_SHADER ) : gl.createShader( gl.VERTEX_SHADER );\n\n\t\tgl.shaderSource( shader, code );\n\t\tgl.compileShader( shader );\n\n\t\tthis.set( program, {\n\t\t\tshaderGPU: shader\n\t\t} );\n\n\t}\n\n\t/**\n\t * Destroys the shader program of the given programmable stage.\n\t *\n\t * @param {ProgrammableStage} program - The programmable stage.\n\t */\n\tdestroyProgram( program ) {\n\n\t\tthis.delete( program );\n\n\t}\n\n\t/**\n\t * Creates a render pipeline for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {Array<Promise>} promises - An array of compilation promises which are used in `compileAsync()`.\n\t */\n\tcreateRenderPipeline( renderObject, promises ) {\n\n\t\tconst gl = this.gl;\n\t\tconst pipeline = renderObject.pipeline;\n\n\t\t// Program\n\n\t\tconst { fragmentProgram, vertexProgram } = pipeline;\n\n\t\tconst programGPU = gl.createProgram();\n\n\t\tconst fragmentShader = this.get( fragmentProgram ).shaderGPU;\n\t\tconst vertexShader = this.get( vertexProgram ).shaderGPU;\n\n\t\tgl.attachShader( programGPU, fragmentShader );\n\t\tgl.attachShader( programGPU, vertexShader );\n\t\tgl.linkProgram( programGPU );\n\n\t\tthis.set( pipeline, {\n\t\t\tprogramGPU,\n\t\t\tfragmentShader,\n\t\t\tvertexShader\n\t\t} );\n\n\t\tif ( promises !== null && this.parallel ) {\n\n\t\t\tconst p = new Promise( ( resolve /*, reject*/ ) => {\n\n\t\t\t\tconst parallel = this.parallel;\n\t\t\t\tconst checkStatus = () => {\n\n\t\t\t\t\tif ( gl.getProgramParameter( programGPU, parallel.COMPLETION_STATUS_KHR ) ) {\n\n\t\t\t\t\t\tthis._completeCompile( renderObject, pipeline );\n\t\t\t\t\t\tresolve();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trequestAnimationFrame( checkStatus );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tcheckStatus();\n\n\t\t\t} );\n\n\t\t\tpromises.push( p );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._completeCompile( renderObject, pipeline );\n\n\t}\n\n\t/**\n\t * Formats the source code of error messages.\n\t *\n\t * @private\n\t * @param {string} string - The code.\n\t * @param {number} errorLine - The error line.\n\t * @return {string} The formatted code.\n\t */\n\t_handleSource( string, errorLine ) {\n\n\t\tconst lines = string.split( '\\n' );\n\t\tconst lines2 = [];\n\n\t\tconst from = Math.max( errorLine - 6, 0 );\n\t\tconst to = Math.min( errorLine + 6, lines.length );\n\n\t\tfor ( let i = from; i < to; i ++ ) {\n\n\t\t\tconst line = i + 1;\n\t\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t\t}\n\n\t\treturn lines2.join( '\\n' );\n\n\t}\n\n\t/**\n\t * Gets the shader compilation errors from the info log.\n\t *\n\t * @private\n\t * @param {WebGL2RenderingContext} gl - The rendering context.\n\t * @param {WebGLShader} shader - The WebGL shader object.\n\t * @param {string} type - The shader type.\n\t * @return {string} The shader errors.\n\t */\n\t_getShaderErrors( gl, shader, type ) {\n\n\t\tconst status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );\n\n\t\tconst shaderInfoLog = gl.getShaderInfoLog( shader ) || '';\n\t\tconst errors = shaderInfoLog.trim();\n\n\t\tif ( status && errors === '' ) return '';\n\n\t\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\t\tif ( errorMatches ) {\n\n\t\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + this._handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t\t} else {\n\n\t\t\treturn errors;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Logs shader compilation errors.\n\t *\n\t * @private\n\t * @param {WebGLProgram} programGPU - The WebGL program.\n\t * @param {WebGLShader} glFragmentShader - The fragment shader as a native WebGL shader object.\n\t * @param {WebGLShader} glVertexShader - The vertex shader as a native WebGL shader object.\n\t */\n\t_logProgramError( programGPU, glFragmentShader, glVertexShader ) {\n\n\t\tif ( this.renderer.debug.checkShaderErrors ) {\n\n\t\t\tconst gl = this.gl;\n\n\t\t\tconst programInfoLog = gl.getProgramInfoLog( programGPU ) || '';\n\t\t\tconst programLog = programInfoLog.trim();\n\n\t\t\tif ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {\n\n\t\t\t\tif ( typeof this.renderer.debug.onShaderError === 'function' ) {\n\n\t\t\t\t\tthis.renderer.debug.onShaderError( gl, programGPU, glVertexShader, glFragmentShader );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// default error reporting\n\n\t\t\t\t\tconst vertexErrors = this._getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\t\t\tconst fragmentErrors = this._getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\t\t\terror(\n\t\t\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( programGPU, gl.VALIDATE_STATUS ) + '\\n\\n' +\n\t\t\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\t\t\tfragmentErrors\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( programLog !== '' ) {\n\n\t\t\t\twarn( 'WebGLProgram: Program Info Log:', programLog );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Completes the shader program setup for the given render object.\n\t *\n\t * @private\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {RenderPipeline} pipeline - The render pipeline.\n\t */\n\t_completeCompile( renderObject, pipeline ) {\n\n\t\tconst { state, gl } = this;\n\t\tconst pipelineData = this.get( pipeline );\n\t\tconst { programGPU, fragmentShader, vertexShader } = pipelineData;\n\n\t\tif ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {\n\n\t\t\tthis._logProgramError( programGPU, fragmentShader, vertexShader );\n\n\t\t}\n\n\t\tstate.useProgram( programGPU );\n\n\t\t// Bindings\n\n\t\tconst bindings = renderObject.getBindings();\n\n\t\tthis._setupBindings( bindings, programGPU );\n\n\t\t//\n\n\t\tthis.set( pipeline, {\n\t\t\tprogramGPU,\n\t\t\tpipeline: programGPU\n\t\t} );\n\n\t}\n\n\t/**\n\t * Creates a compute pipeline for the given compute node.\n\t *\n\t * @param {ComputePipeline} computePipeline - The compute pipeline.\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t */\n\tcreateComputePipeline( computePipeline, bindings ) {\n\n\t\tconst { state, gl } = this;\n\n\t\t// Program\n\n\t\tconst fragmentProgram = {\n\t\t\tstage: 'fragment',\n\t\t\tcode: '#version 300 es\\nprecision highp float;\\nvoid main() {}'\n\t\t};\n\n\t\tthis.createProgram( fragmentProgram );\n\n\t\tconst { computeProgram } = computePipeline;\n\n\t\tconst programGPU = gl.createProgram();\n\n\t\tconst fragmentShader = this.get( fragmentProgram ).shaderGPU;\n\t\tconst vertexShader = this.get( computeProgram ).shaderGPU;\n\n\t\tconst transforms = computeProgram.transforms;\n\n\t\tconst transformVaryingNames = [];\n\t\tconst transformAttributeNodes = [];\n\n\t\tfor ( let i = 0; i < transforms.length; i ++ ) {\n\n\t\t\tconst transform = transforms[ i ];\n\n\t\t\ttransformVaryingNames.push( transform.varyingName );\n\t\t\ttransformAttributeNodes.push( transform.attributeNode );\n\n\t\t}\n\n\t\tgl.attachShader( programGPU, fragmentShader );\n\t\tgl.attachShader( programGPU, vertexShader );\n\n\t\tgl.transformFeedbackVaryings(\n\t\t\tprogramGPU,\n\t\t\ttransformVaryingNames,\n\t\t\tgl.SEPARATE_ATTRIBS\n\t\t);\n\n\t\tgl.linkProgram( programGPU );\n\n\t\tif ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {\n\n\t\t\tthis._logProgramError( programGPU, fragmentShader, vertexShader );\n\n\n\t\t}\n\n\t\tstate.useProgram( programGPU );\n\n\t\t// Bindings\n\n\t\tthis._setupBindings( bindings, programGPU );\n\n\t\tconst attributeNodes = computeProgram.attributes;\n\t\tconst attributes = [];\n\t\tconst transformBuffers = [];\n\n\t\tfor ( let i = 0; i < attributeNodes.length; i ++ ) {\n\n\t\t\tconst attribute = attributeNodes[ i ].node.attribute;\n\n\t\t\tattributes.push( attribute );\n\n\t\t\tif ( ! this.has( attribute ) ) this.attributeUtils.createAttribute( attribute, gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < transformAttributeNodes.length; i ++ ) {\n\n\t\t\tconst attribute = transformAttributeNodes[ i ].attribute;\n\n\t\t\tif ( ! this.has( attribute ) ) this.attributeUtils.createAttribute( attribute, gl.ARRAY_BUFFER );\n\n\t\t\tconst attributeData = this.get( attribute );\n\n\t\t\ttransformBuffers.push( attributeData );\n\n\t\t}\n\n\t\t//\n\n\t\tthis.set( computePipeline, {\n\t\t\tprogramGPU,\n\t\t\ttransformBuffers,\n\t\t\tattributes\n\t\t} );\n\n\t}\n\n\t/**\n\t * Creates bindings from the given bind group definition.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @param {Array<BindGroup>} bindings - Array of bind groups.\n\t * @param {number} cacheIndex - The cache index.\n\t * @param {number} version - The version.\n\t */\n\tcreateBindings( bindGroup, bindings /*, cacheIndex, version*/ ) {\n\n\t\tif ( this._knownBindings.has( bindings ) === false ) {\n\n\t\t\tthis._knownBindings.add( bindings );\n\n\t\t\tlet uniformBuffers = 0;\n\t\t\tlet textures = 0;\n\n\t\t\tfor ( const bindGroup of bindings ) {\n\n\t\t\t\tthis.set( bindGroup, {\n\t\t\t\t\ttextures: textures,\n\t\t\t\t\tuniformBuffers: uniformBuffers\n\t\t\t\t} );\n\n\t\t\t\tfor ( const binding of bindGroup.bindings ) {\n\n\t\t\t\t\tif ( binding.isUniformBuffer ) uniformBuffers ++;\n\t\t\t\t\tif ( binding.isSampledTexture ) textures ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.updateBindings( bindGroup, bindings );\n\n\t}\n\n\t/**\n\t * Updates the given bind group definition.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @param {Array<BindGroup>} bindings - Array of bind groups.\n\t * @param {number} cacheIndex - The cache index.\n\t * @param {number} version - The version.\n\t */\n\tupdateBindings( bindGroup /*, bindings, cacheIndex, version*/ ) {\n\n\t\tconst { gl } = this;\n\n\t\tfor ( const binding of bindGroup.bindings ) {\n\n\t\t\tconst map = this.get( binding );\n\n\t\t\tif ( binding.isUniformsGroup || binding.isUniformBuffer ) {\n\n\t\t\t\tconst array = binding.buffer;\n\t\t\t\tlet { bufferGPU } = this.get( array );\n\n\t\t\t\tif ( bufferGPU === undefined ) {\n\n\t\t\t\t\t// create\n\n\t\t\t\t\tbufferGPU = gl.createBuffer();\n\n\t\t\t\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );\n\t\t\t\t\tgl.bufferData( gl.UNIFORM_BUFFER, array.byteLength, gl.DYNAMIC_DRAW );\n\n\t\t\t\t\tthis.set( array, { bufferGPU } );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );\n\n\t\t\t\t}\n\n\t\t\t\t// update\n\n\t\t\t\tconst updateRanges = binding.updateRanges;\n\n\t\t\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );\n\n\t\t\t\tif ( updateRanges.length === 0 ) {\n\n\t\t\t\t\tgl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst isTyped = isTypedArray( array );\n\t\t\t\t\tconst byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;\n\n\t\t\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\t\t\tconst dataOffset = range.start * byteOffsetFactor;\n\t\t\t\t\t\tconst size = range.count * byteOffsetFactor;\n\n\t\t\t\t\t\tconst bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes\n\n\t\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmap.bufferGPU = bufferGPU;\n\n\t\t\t\tthis.set( binding, map );\n\n\t\t\t} else if ( binding.isSampledTexture ) {\n\n\t\t\t\tconst { textureGPU, glTextureType } = this.get( binding.texture );\n\n\t\t\t\tmap.textureGPU = textureGPU;\n\t\t\t\tmap.glTextureType = glTextureType;\n\n\t\t\t\tthis.set( binding, map );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates a buffer binding.\n\t *\n\t *  @param {Buffer} binding - The buffer binding to update.\n\t */\n\tupdateBinding( binding ) {\n\n\t\tconst gl = this.gl;\n\n\t\tif ( binding.isUniformsGroup || binding.isUniformBuffer ) {\n\n\t\t\tconst bindingData = this.get( binding );\n\t\t\tconst bufferGPU = bindingData.bufferGPU;\n\t\t\tconst array = binding.buffer;\n\n\t\t\tconst updateRanges = binding.updateRanges;\n\n\t\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );\n\n\t\t\tif ( updateRanges.length === 0 ) {\n\n\t\t\t\tgl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );\n\n\t\t\t} else {\n\n\t\t\t\tconst isTyped = isTypedArray( array );\n\t\t\t\tconst byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;\n\n\t\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\t\tconst dataOffset = range.start * byteOffsetFactor;\n\t\t\t\t\tconst size = range.count * byteOffsetFactor;\n\n\t\t\t\t\tconst bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes\n\n\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// attributes\n\n\t/**\n\t * Creates the GPU buffer of an indexed shader attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The indexed buffer attribute.\n\t */\n\tcreateIndexAttribute( attribute ) {\n\n\t\tconst gl = this.gl;\n\n\t\tthis.attributeUtils.createAttribute( attribute, gl.ELEMENT_ARRAY_BUFFER );\n\n\t}\n\n\t/**\n\t * Creates the GPU buffer of a shader attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tcreateAttribute( attribute ) {\n\n\t\tif ( this.has( attribute ) ) return;\n\n\t\tconst gl = this.gl;\n\n\t\tthis.attributeUtils.createAttribute( attribute, gl.ARRAY_BUFFER );\n\n\t}\n\n\t/**\n\t * Creates the GPU buffer of a storage attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tcreateStorageAttribute( attribute ) {\n\n\t\tif ( this.has( attribute ) ) return;\n\n\t\tconst gl = this.gl;\n\n\t\tthis.attributeUtils.createAttribute( attribute, gl.ARRAY_BUFFER );\n\n\t}\n\n\t/**\n\t * Updates the GPU buffer of a shader attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute to update.\n\t */\n\tupdateAttribute( attribute ) {\n\n\t\tthis.attributeUtils.updateAttribute( attribute );\n\n\t}\n\n\t/**\n\t * Destroys the GPU buffer of a shader attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute to destroy.\n\t */\n\tdestroyAttribute( attribute ) {\n\n\t\tthis.attributeUtils.destroyAttribute( attribute );\n\n\t}\n\n\t/**\n\t * Checks if the given feature is supported  by the backend.\n\t *\n\t * @param {string} name - The feature's name.\n\t * @return {boolean} Whether the feature is supported or not.\n\t */\n\thasFeature( name ) {\n\n\t\tconst keysMatching = Object.keys( GLFeatureName ).filter( key => GLFeatureName[ key ] === name );\n\n\t\tconst extensions = this.extensions;\n\n\t\tfor ( let i = 0; i < keysMatching.length; i ++ ) {\n\n\t\t\tif ( extensions.has( keysMatching[ i ] ) ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Copies data of the given source texture to the given destination texture.\n\t *\n\t * @param {Texture} srcTexture - The source texture.\n\t * @param {Texture} dstTexture - The destination texture.\n\t * @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.\n\t * @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.\n\t * @param {number} [srcLevel=0] - The source mip level to copy from.\n\t * @param {number} [dstLevel=0] - The destination mip level to copy to.\n\t */\n\tcopyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {\n\n\t\tthis.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );\n\n\t}\n\n\t/**\n\t * Copies the current bound framebuffer to the given texture.\n\t *\n\t * @param {Texture} texture - The destination texture.\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {Vector4} rectangle - A four dimensional vector defining the origin and dimension of the copy.\n\t */\n\tcopyFramebufferToTexture( texture, renderContext, rectangle ) {\n\n\t\tthis.textureUtils.copyFramebufferToTexture( texture, renderContext, rectangle );\n\n\t}\n\n\t/**\n\t * Checks if the given compatibility is supported by the backend.\n\t *\n\t * @param {string} name - The compatibility name.\n\t * @return {boolean} Whether the compatibility is supported or not.\n\t */\n\thasCompatibility( name ) {\n\n\t\tif ( name === Compatibility.TEXTURE_COMPARE ) return true;\n\n\t\treturn super.hasCompatibility( name );\n\n\t}\n\n\t/**\n\t * Initializes the render target defined in the given render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tinitRenderTarget( renderContext ) {\n\n\t\tconst { gl, state } = this;\n\n\t\tthis._setFramebuffer( renderContext );\n\n\t\tstate.bindFramebuffer( gl.FRAMEBUFFER, null );\n\n\t}\n\n\t/**\n\t * Configures the active framebuffer from the given render context.\n\t *\n\t * @private\n\t * @param {RenderContext} descriptor - The render context.\n\t */\n\t_setFramebuffer( descriptor ) {\n\n\t\tconst { gl, state } = this;\n\n\t\tlet currentFrameBuffer = null;\n\n\t\tif ( descriptor.textures !== null ) {\n\n\t\t\tconst renderTarget = descriptor.renderTarget;\n\t\t\tconst renderTargetContextData = this.get( renderTarget );\n\t\t\tconst { samples, depthBuffer, stencilBuffer } = renderTarget;\n\n\t\t\tconst isCube = renderTarget.isCubeRenderTarget === true;\n\t\t\tconst isRenderTarget3D = renderTarget.isRenderTarget3D === true;\n\t\t\tconst isRenderTargetArray = renderTarget.depth > 1;\n\t\t\tconst isXRRenderTarget = renderTarget.isXRRenderTarget === true;\n\t\t\tconst _hasExternalTextures = ( isXRRenderTarget === true && renderTarget._hasExternalTextures === true );\n\n\t\t\tlet msaaFb = renderTargetContextData.msaaFrameBuffer;\n\t\t\tlet depthRenderbuffer = renderTargetContextData.depthRenderbuffer;\n\t\t\tconst multisampledRTTExt = this.extensions.get( 'WEBGL_multisampled_render_to_texture' );\n\t\t\tconst multiviewExt = this.extensions.get( 'OVR_multiview2' );\n\t\t\tconst useMultisampledRTT = this._useMultisampledExtension( renderTarget );\n\t\t\tconst cacheKey = getCacheKey( descriptor );\n\n\t\t\tlet fb;\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetContextData.cubeFramebuffers || ( renderTargetContextData.cubeFramebuffers = {} );\n\n\t\t\t\tfb = renderTargetContextData.cubeFramebuffers[ cacheKey ];\n\n\t\t\t} else if ( isXRRenderTarget && _hasExternalTextures === false ) {\n\n\t\t\t\tfb = this._xrFramebuffer;\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetContextData.framebuffers || ( renderTargetContextData.framebuffers = {} );\n\n\t\t\t\tfb = renderTargetContextData.framebuffers[ cacheKey ];\n\n\t\t\t}\n\n\t\t\tif ( fb === undefined ) {\n\n\t\t\t\tfb = gl.createFramebuffer();\n\n\t\t\t\tstate.bindFramebuffer( gl.FRAMEBUFFER, fb );\n\n\t\t\t\tconst textures = descriptor.textures;\n\t\t\t\tconst depthInvalidationArray = [];\n\n\t\t\t\tif ( isCube ) {\n\n\t\t\t\t\trenderTargetContextData.cubeFramebuffers[ cacheKey ] = fb;\n\n\t\t\t\t\tconst { textureGPU } = this.get( textures[ 0 ] );\n\n\t\t\t\t\tconst cubeFace = this.renderer._activeCubeFace;\n\t\t\t\t\tconst mipLevel = this.renderer._activeMipmapLevel;\n\n\t\t\t\t\tgl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureGPU, mipLevel );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderTargetContextData.framebuffers[ cacheKey ] = fb;\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\t\tconst textureData = this.get( texture );\n\t\t\t\t\t\ttextureData.renderTarget = descriptor.renderTarget;\n\t\t\t\t\t\ttextureData.cacheKey = cacheKey; // required for copyTextureToTexture()\n\n\t\t\t\t\t\tconst attachment = gl.COLOR_ATTACHMENT0 + i;\n\n\t\t\t\t\t\tif ( renderTarget.multiview ) {\n\n\t\t\t\t\t\t\tmultiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, attachment, textureData.textureGPU, 0, samples, 0, 2 );\n\n\t\t\t\t\t\t} else if ( isRenderTarget3D || isRenderTargetArray ) {\n\n\t\t\t\t\t\t\tconst layer = this.renderer._activeCubeFace;\n\t\t\t\t\t\t\tconst mipLevel = this.renderer._activeMipmapLevel;\n\n\t\t\t\t\t\t\tgl.framebufferTextureLayer( gl.FRAMEBUFFER, attachment, textureData.textureGPU, mipLevel, layer );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useMultisampledRTT ) {\n\n\t\t\t\t\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconst mipLevel = this.renderer._activeMipmapLevel;\n\n\t\t\t\t\t\t\t\tgl.framebufferTexture2D( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, mipLevel );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;\n\n\t\t\t\tif ( renderTarget._autoAllocateDepthBuffer === true ) {\n\n\t\t\t\t\tconst renderbuffer = gl.createRenderbuffer();\n\t\t\t\t\tthis.textureUtils.setupRenderBufferStorage( renderbuffer, descriptor, 0, useMultisampledRTT );\n\t\t\t\t\trenderTargetContextData.xrDepthRenderbuffer = renderbuffer;\n\t\t\t\t\tdepthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT );\n\n\t\t\t\t\tgl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );\n\t\t\t\t\tgl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, renderbuffer );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( descriptor.depthTexture !== null ) {\n\n\t\t\t\t\t\tdepthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT );\n\n\t\t\t\t\t\tconst textureData = this.get( descriptor.depthTexture );\n\t\t\t\t\t\ttextureData.renderTarget = descriptor.renderTarget;\n\t\t\t\t\t\ttextureData.cacheKey = cacheKey; // required for copyTextureToTexture()\n\n\t\t\t\t\t\tif ( renderTarget.multiview ) {\n\n\t\t\t\t\t\t\tmultiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, samples, 0, 2 );\n\n\t\t\t\t\t\t} else if ( _hasExternalTextures && useMultisampledRTT ) {\n\n\t\t\t\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( descriptor.depthTexture.isArrayTexture ) {\n\n\t\t\t\t\t\t\t\tconst layer = this.renderer._activeCubeFace;\n\n\t\t\t\t\t\t\t\tgl.framebufferTextureLayer( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, layer );\n\n\t\t\t\t\t\t\t} else if ( descriptor.depthTexture.isCubeTexture ) {\n\n\t\t\t\t\t\t\t\tconst cubeFace = this.renderer._activeCubeFace;\n\n\t\t\t\t\t\t\t\tgl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureData.textureGPU, 0 );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tgl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\trenderTargetContextData.depthInvalidationArray = depthInvalidationArray;\n\n\n\t\t\t} else {\n\n\t\t\t\tconst isRenderCameraDepthArray = this._isRenderCameraDepthArray( descriptor );\n\n\t\t\t\tif ( isRenderCameraDepthArray ) {\n\n\t\t\t\t\tstate.bindFramebuffer( gl.FRAMEBUFFER, fb );\n\n\t\t\t\t\tconst layer = this.renderer._activeCubeFace;\n\n\t\t\t\t\tconst depthData = this.get( descriptor.depthTexture );\n\t\t\t\t\tconst depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;\n\t\t\t\t\tgl.framebufferTextureLayer(\n\t\t\t\t\t\tgl.FRAMEBUFFER,\n\t\t\t\t\t\tdepthStyle,\n\t\t\t\t\t\tdepthData.textureGPU,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tlayer\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t\t// rebind external XR textures\n\n\t\t\t\tif ( ( isXRRenderTarget || useMultisampledRTT || renderTarget.multiview ) && ( renderTarget._isOpaqueFramebuffer !== true ) ) {\n\n\t\t\t\t\tstate.bindFramebuffer( gl.FRAMEBUFFER, fb );\n\n\t\t\t\t\t// rebind color\n\n\t\t\t\t\tconst textureData = this.get( descriptor.textures[ 0 ] );\n\n\t\t\t\t\tif ( renderTarget.multiview ) {\n\n\t\t\t\t\t\tmultiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, textureData.textureGPU, 0, samples, 0, 2 );\n\n\t\t\t\t\t} else if ( useMultisampledRTT ) {\n\n\t\t\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureData.textureGPU, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// rebind depth\n\n\t\t\t\t\tconst depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;\n\n\t\t\t\t\tif ( renderTarget._autoAllocateDepthBuffer === true ) {\n\n\t\t\t\t\t\tconst renderbuffer = renderTargetContextData.xrDepthRenderbuffer;\n\t\t\t\t\t\tgl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );\n\t\t\t\t\t\tgl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, renderbuffer );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst textureData = this.get( descriptor.depthTexture );\n\n\t\t\t\t\t\tif ( renderTarget.multiview ) {\n\n\t\t\t\t\t\t\tmultiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, samples, 0, 2 );\n\n\t\t\t\t\t\t} else if ( useMultisampledRTT ) {\n\n\t\t\t\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( samples > 0 && useMultisampledRTT === false && ! renderTarget.multiview ) {\n\n\t\t\t\tif ( msaaFb === undefined ) {\n\n\t\t\t\t\tconst invalidationArray = [];\n\n\t\t\t\t\tmsaaFb = gl.createFramebuffer();\n\n\t\t\t\t\tstate.bindFramebuffer( gl.FRAMEBUFFER, msaaFb );\n\n\t\t\t\t\tconst msaaRenderbuffers = [];\n\n\t\t\t\t\tconst textures = descriptor.textures;\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tmsaaRenderbuffers[ i ] = gl.createRenderbuffer();\n\n\t\t\t\t\t\tgl.bindRenderbuffer( gl.RENDERBUFFER, msaaRenderbuffers[ i ] );\n\n\t\t\t\t\t\tinvalidationArray.push( gl.COLOR_ATTACHMENT0 + i );\n\n\t\t\t\t\t\tconst texture = descriptor.textures[ i ];\n\t\t\t\t\t\tconst textureData = this.get( texture );\n\n\t\t\t\t\t\tgl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, textureData.glInternalFormat, descriptor.width, descriptor.height );\n\t\t\t\t\t\tgl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );\n\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.bindRenderbuffer( gl.RENDERBUFFER, null );\n\n\t\t\t\t\trenderTargetContextData.msaaFrameBuffer = msaaFb;\n\t\t\t\t\trenderTargetContextData.msaaRenderbuffers = msaaRenderbuffers;\n\n\t\t\t\t\tif ( depthBuffer && depthRenderbuffer === undefined ) {\n\n\t\t\t\t\t\tdepthRenderbuffer = gl.createRenderbuffer();\n\t\t\t\t\t\tthis.textureUtils.setupRenderBufferStorage( depthRenderbuffer, descriptor, samples );\n\n\t\t\t\t\t\trenderTargetContextData.depthRenderbuffer = depthRenderbuffer;\n\n\t\t\t\t\t\tconst depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;\n\t\t\t\t\t\tinvalidationArray.push( depthStyle );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trenderTargetContextData.invalidationArray = invalidationArray;\n\n\t\t\t\t}\n\n\t\t\t\tcurrentFrameBuffer = renderTargetContextData.msaaFrameBuffer;\n\n\t\t\t} else {\n\n\t\t\t\tcurrentFrameBuffer = fb;\n\n\t\t\t}\n\n\t\t\tstate.drawBuffers( descriptor, fb );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( gl.FRAMEBUFFER, currentFrameBuffer );\n\n\t}\n\n\t/**\n\t * Computes the VAO key for the given index and attributes.\n\t *\n\t * @private\n\t * @param {Array<BufferAttribute>} attributes - An array of buffer attributes.\n\t * @return {string} The VAO key.\n\t */\n\t_getVaoKey( attributes ) {\n\n\t\tlet key = '';\n\n\t\tfor ( let i = 0; i < attributes.length; i ++ ) {\n\n\t\t\tconst attributeData = this.get( attributes[ i ] );\n\n\t\t\tkey += ':' + attributeData.id;\n\n\t\t}\n\n\t\treturn key;\n\n\t}\n\n\t/**\n\t * Creates a VAO from the index and attributes.\n\t *\n\t * @private\n\t * @param {Array<BufferAttribute>} attributes - An array of buffer attributes.\n\t * @return {Object} The VAO data.\n\t */\n\t_createVao( attributes ) {\n\n\t\tconst { gl } = this;\n\n\t\tconst vaoGPU = gl.createVertexArray();\n\n\t\tgl.bindVertexArray( vaoGPU );\n\n\t\tfor ( let i = 0; i < attributes.length; i ++ ) {\n\n\t\t\tconst attribute = attributes[ i ];\n\t\t\tconst attributeData = this.get( attribute );\n\n\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, attributeData.bufferGPU );\n\t\t\tgl.enableVertexAttribArray( i );\n\n\t\t\tlet stride, offset;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute === true ) {\n\n\t\t\t\tstride = attribute.data.stride * attributeData.bytesPerElement;\n\t\t\t\toffset = attribute.offset * attributeData.bytesPerElement;\n\n\t\t\t} else {\n\n\t\t\t\tstride = 0;\n\t\t\t\toffset = 0;\n\n\t\t\t}\n\n\t\t\tif ( attributeData.isInteger ) {\n\n\t\t\t\tgl.vertexAttribIPointer( i, attribute.itemSize, attributeData.type, stride, offset );\n\n\t\t\t} else {\n\n\t\t\t\tgl.vertexAttribPointer( i, attribute.itemSize, attributeData.type, attribute.normalized, stride, offset );\n\n\t\t\t}\n\n\t\t\tif ( attribute.isInstancedBufferAttribute && ! attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tgl.vertexAttribDivisor( i, attribute.meshPerAttribute );\n\n\t\t\t} else if ( attribute.isInterleavedBufferAttribute && attribute.data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\tgl.vertexAttribDivisor( i, attribute.data.meshPerAttribute );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, null );\n\n\t\treturn vaoGPU;\n\n\t}\n\n\t/**\n\t * Creates a transform feedback from the given transform buffers.\n\t *\n\t * @private\n\t * @param {Array<DualAttributeData>} transformBuffers - The transform buffers.\n\t * @return {WebGLTransformFeedback} The transform feedback.\n\t */\n\t_getTransformFeedback( transformBuffers ) {\n\n\t\tlet key = '';\n\n\t\tfor ( let i = 0; i < transformBuffers.length; i ++ ) {\n\n\t\t\tkey += ':' + transformBuffers[ i ].id;\n\n\t\t}\n\n\t\tlet transformFeedbackGPU = this.transformFeedbackCache[ key ];\n\n\t\tif ( transformFeedbackGPU !== undefined ) {\n\n\t\t\treturn transformFeedbackGPU;\n\n\t\t}\n\n\t\tconst { gl } = this;\n\n\t\ttransformFeedbackGPU = gl.createTransformFeedback();\n\n\t\tgl.bindTransformFeedback( gl.TRANSFORM_FEEDBACK, transformFeedbackGPU );\n\n\t\tfor ( let i = 0; i < transformBuffers.length; i ++ ) {\n\n\t\t\tconst attributeData = transformBuffers[ i ];\n\n\t\t\tgl.bindBufferBase( gl.TRANSFORM_FEEDBACK_BUFFER, i, attributeData.transformBuffer );\n\n\t\t}\n\n\t\tgl.bindTransformFeedback( gl.TRANSFORM_FEEDBACK, null );\n\n\t\tthis.transformFeedbackCache[ key ] = transformFeedbackGPU;\n\n\t\treturn transformFeedbackGPU;\n\n\t}\n\n\t/**\n\t * Setups the given bindings.\n\t *\n\t * @private\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t * @param {WebGLProgram} programGPU - The WebGL program.\n\t */\n\t_setupBindings( bindings, programGPU ) {\n\n\t\tconst gl = this.gl;\n\n\t\tlet uniformBuffers = 0;\n\t\tlet textures = 0;\n\n\t\tfor ( const bindGroup of bindings ) {\n\n\t\t\tfor ( const binding of bindGroup.bindings ) {\n\n\t\t\t\tif ( binding.isUniformsGroup || binding.isUniformBuffer ) {\n\n\t\t\t\t\tconst index = uniformBuffers ++;\n\t\t\t\t\tconst location = gl.getUniformBlockIndex( programGPU, binding.name );\n\t\t\t\t\tgl.uniformBlockBinding( programGPU, location, index );\n\n\t\t\t\t} else if ( binding.isSampledTexture ) {\n\n\t\t\t\t\tconst index = textures ++;\n\t\t\t\t\tconst location = gl.getUniformLocation( programGPU, binding.name );\n\t\t\t\t\tgl.uniform1i( location, index );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Binds the given uniforms.\n\t *\n\t * @private\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t */\n\t_bindUniforms( bindings ) {\n\n\t\tconst { gl, state } = this;\n\n\t\tlet uniformBuffers = 0;\n\t\tlet textures = 0;\n\n\t\tfor ( const bindGroup of bindings ) {\n\n\t\t\tfor ( const binding of bindGroup.bindings ) {\n\n\t\t\t\tconst bindingData = this.get( binding );\n\n\t\t\t\tif ( binding.isUniformsGroup || binding.isUniformBuffer ) {\n\n\t\t\t\t\tconst index = uniformBuffers ++;\n\t\t\t\t\t// TODO USE bindBufferRange to group multiple uniform buffers\n\t\t\t\t\tstate.bindBufferBase( gl.UNIFORM_BUFFER, index, bindingData.bufferGPU );\n\n\t\t\t\t} else if ( binding.isSampledTexture ) {\n\n\t\t\t\t\tconst index = textures ++;\n\t\t\t\t\tstate.bindTexture( bindingData.glTextureType, bindingData.textureGPU, gl.TEXTURE0 + index );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The method ensures multisampled render targets are resolved.\n\t *\n\t * @private\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\t_resolveRenderTarget( renderContext ) {\n\n\t\tconst { gl, state } = this;\n\n\t\tconst renderTarget = renderContext.renderTarget;\n\n\t\tif ( renderContext.textures !== null && renderTarget ) {\n\n\t\t\tconst renderTargetContextData = this.get( renderTarget );\n\n\t\t\tif ( renderTarget.samples > 0 && this._useMultisampledExtension( renderTarget ) === false ) {\n\n\t\t\t\tconst fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];\n\n\t\t\t\tlet mask = gl.COLOR_BUFFER_BIT;\n\n\t\t\t\tif ( renderTarget.resolveDepthBuffer ) {\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= gl.DEPTH_BUFFER_BIT;\n\t\t\t\t\tif ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= gl.STENCIL_BUFFER_BIT;\n\n\t\t\t\t}\n\n\t\t\t\tconst msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;\n\t\t\t\tconst msaaRenderbuffers = renderTargetContextData.msaaRenderbuffers;\n\n\t\t\t\tconst textures = renderContext.textures;\n\t\t\t\tconst isMRT = textures.length > 1;\n\n\t\t\t\tstate.bindFramebuffer( gl.READ_FRAMEBUFFER, msaaFrameBuffer );\n\t\t\t\tstate.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );\n\n\t\t\t\tif ( isMRT ) {\n\n\t\t\t\t\t// blitFramebuffer() can only copy/resolve the first color attachment of a framebuffer. When using MRT,\n\t\t\t\t\t// the engine temporarily removes all attachments and then configures each attachment for the resolve.\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tgl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, null );\n\t\t\t\t\t\tgl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, null, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tif ( isMRT ) {\n\n\t\t\t\t\t\t// configure attachment for resolve\n\n\t\t\t\t\t\tconst { textureGPU } = this.get( textures[ i ] );\n\n\t\t\t\t\t\tgl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );\n\t\t\t\t\t\tgl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureGPU, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( renderContext.scissor ) {\n\n\t\t\t\t\t\tconst { x, y, width, height } = renderContext.scissorValue;\n\n\t\t\t\t\t\tconst viewY = renderContext.height - height - y;\n\n\t\t\t\t\t\tgl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( isMRT ) {\n\n\t\t\t\t\t// restore attachments\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tconst { textureGPU } = this.get( textures[ i ] );\n\n\t\t\t\t\t\tgl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );\n\t\t\t\t\t\tgl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, textureGPU, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( this._supportsInvalidateFramebuffer === true ) {\n\n\t\t\t\t\tgl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );\n\n\t\t\t\t}\n\n\t\t\t} else if ( renderTarget.resolveDepthBuffer === false && renderTargetContextData.framebuffers ) {\n\n\t\t\t\tconst fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];\n\t\t\t\tstate.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );\n\t\t\t\tgl.invalidateFramebuffer( gl.DRAW_FRAMEBUFFER, renderTargetContextData.depthInvalidationArray );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns `true` if the `WEBGL_multisampled_render_to_texture` extension\n\t * should be used when MSAA is enabled.\n\t *\n\t * @private\n\t * @param {RenderTarget} renderTarget - The render target that should be multisampled.\n\t * @return {boolean} Whether to use the `WEBGL_multisampled_render_to_texture` extension for MSAA or not.\n\t */\n\t_useMultisampledExtension( renderTarget ) {\n\n\t\tif ( renderTarget.multiview === true ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn renderTarget.samples > 0 && this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTarget._autoAllocateDepthBuffer !== false;\n\n\t}\n\n\t/**\n\t * Frees internal resources.\n\t */\n\tdispose() {\n\n\t\tif ( this.textureUtils !== null ) this.textureUtils.dispose();\n\n\t\tconst extension = this.extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t\tthis.renderer.domElement.removeEventListener( 'webglcontextlost', this._onContextLost );\n\n\t}\n\n}\n\nconst GPUPrimitiveTopology = {\n\tPointList: 'point-list',\n\tLineList: 'line-list',\n\tLineStrip: 'line-strip',\n\tTriangleList: 'triangle-list'};\n\nconst GPUShaderStage = ( typeof self !== 'undefined' && self.GPUShaderStage ) ? self.GPUShaderStage : { VERTEX: 1, FRAGMENT: 2, COMPUTE: 4 };\n\nconst GPUCompareFunction = {\n\tNever: 'never',\n\tLess: 'less',\n\tEqual: 'equal',\n\tLessEqual: 'less-equal',\n\tGreater: 'greater',\n\tNotEqual: 'not-equal',\n\tGreaterEqual: 'greater-equal',\n\tAlways: 'always'\n};\n\nconst GPUStoreOp = {\n\tStore: 'store'};\n\nconst GPULoadOp = {\n\tLoad: 'load',\n\tClear: 'clear'\n};\n\nconst GPUFrontFace = {\n\tCCW: 'ccw',\n\tCW: 'cw'\n};\n\nconst GPUCullMode = {\n\tNone: 'none',\n\tBack: 'back'\n};\n\nconst GPUIndexFormat = {\n\tUint16: 'uint16',\n\tUint32: 'uint32'\n};\n\nconst GPUTextureFormat = {\n\n\t// 8-bit formats\n\n\tR8Unorm: 'r8unorm',\n\tR8Snorm: 'r8snorm',\n\tR8Uint: 'r8uint',\n\tR8Sint: 'r8sint',\n\n\t// 16-bit formats\n\n\tR16Uint: 'r16uint',\n\tR16Sint: 'r16sint',\n\tR16Float: 'r16float',\n\tRG8Unorm: 'rg8unorm',\n\tRG8Snorm: 'rg8snorm',\n\tRG8Uint: 'rg8uint',\n\tRG8Sint: 'rg8sint',\n\tR16Unorm: 'r16unorm',\n\tR16Snorm: 'r16snorm',\n\n\t// 32-bit formats\n\n\tR32Uint: 'r32uint',\n\tR32Sint: 'r32sint',\n\tR32Float: 'r32float',\n\tRG16Uint: 'rg16uint',\n\tRG16Sint: 'rg16sint',\n\tRG16Float: 'rg16float',\n\tRGBA8Unorm: 'rgba8unorm',\n\tRGBA8UnormSRGB: 'rgba8unorm-srgb',\n\tRGBA8Snorm: 'rgba8snorm',\n\tRGBA8Uint: 'rgba8uint',\n\tRGBA8Sint: 'rgba8sint',\n\tBGRA8Unorm: 'bgra8unorm',\n\tBGRA8UnormSRGB: 'bgra8unorm-srgb',\n\tRG16Unorm: 'rg16unorm',\n\tRG16Snorm: 'rg16snorm',\n\n\t// Packed 32-bit formats\n\n\tRGB9E5UFloat: 'rgb9e5ufloat',\n\tRGB10A2Unorm: 'rgb10a2unorm',\n\tRG11B10UFloat: 'rg11b10ufloat',\n\n\t// 64-bit formats\n\n\tRG32Uint: 'rg32uint',\n\tRG32Sint: 'rg32sint',\n\tRG32Float: 'rg32float',\n\tRGBA16Uint: 'rgba16uint',\n\tRGBA16Sint: 'rgba16sint',\n\tRGBA16Float: 'rgba16float',\n\tRGBA16Unorm: 'rgba16unorm',\n\tRGBA16Snorm: 'rgba16snorm',\n\n\t// 128-bit formats\n\n\tRGBA32Uint: 'rgba32uint',\n\tRGBA32Sint: 'rgba32sint',\n\tRGBA32Float: 'rgba32float',\n\n\tDepth16Unorm: 'depth16unorm',\n\tDepth24Plus: 'depth24plus',\n\tDepth24PlusStencil8: 'depth24plus-stencil8',\n\tDepth32Float: 'depth32float',\n\n\t// 'depth32float-stencil8' extension\n\n\tDepth32FloatStencil8: 'depth32float-stencil8',\n\n\t// BC compressed formats usable if 'texture-compression-bc' is both\n\t// supported by the device/user agent and enabled in requestDevice.\n\n\tBC1RGBAUnorm: 'bc1-rgba-unorm',\n\tBC1RGBAUnormSRGB: 'bc1-rgba-unorm-srgb',\n\tBC2RGBAUnorm: 'bc2-rgba-unorm',\n\tBC2RGBAUnormSRGB: 'bc2-rgba-unorm-srgb',\n\tBC3RGBAUnorm: 'bc3-rgba-unorm',\n\tBC3RGBAUnormSRGB: 'bc3-rgba-unorm-srgb',\n\tBC4RUnorm: 'bc4-r-unorm',\n\tBC4RSnorm: 'bc4-r-snorm',\n\tBC5RGUnorm: 'bc5-rg-unorm',\n\tBC5RGSnorm: 'bc5-rg-snorm',\n\tBC6HRGBUFloat: 'bc6h-rgb-ufloat',\n\tBC6HRGBFloat: 'bc6h-rgb-float',\n\tBC7RGBAUnorm: 'bc7-rgba-unorm',\n\tBC7RGBAUnormSRGB: 'bc7-rgba-unorm-srgb',\n\n\t// ETC2 compressed formats usable if 'texture-compression-etc2' is both\n\t// supported by the device/user agent and enabled in requestDevice.\n\n\tETC2RGB8Unorm: 'etc2-rgb8unorm',\n\tETC2RGB8UnormSRGB: 'etc2-rgb8unorm-srgb',\n\tETC2RGB8A1Unorm: 'etc2-rgb8a1unorm',\n\tETC2RGB8A1UnormSRGB: 'etc2-rgb8a1unorm-srgb',\n\tETC2RGBA8Unorm: 'etc2-rgba8unorm',\n\tETC2RGBA8UnormSRGB: 'etc2-rgba8unorm-srgb',\n\tEACR11Unorm: 'eac-r11unorm',\n\tEACR11Snorm: 'eac-r11snorm',\n\tEACRG11Unorm: 'eac-rg11unorm',\n\tEACRG11Snorm: 'eac-rg11snorm',\n\n\t// ASTC compressed formats usable if 'texture-compression-astc' is both\n\t// supported by the device/user agent and enabled in requestDevice.\n\n\tASTC4x4Unorm: 'astc-4x4-unorm',\n\tASTC4x4UnormSRGB: 'astc-4x4-unorm-srgb',\n\tASTC5x4Unorm: 'astc-5x4-unorm',\n\tASTC5x4UnormSRGB: 'astc-5x4-unorm-srgb',\n\tASTC5x5Unorm: 'astc-5x5-unorm',\n\tASTC5x5UnormSRGB: 'astc-5x5-unorm-srgb',\n\tASTC6x5Unorm: 'astc-6x5-unorm',\n\tASTC6x5UnormSRGB: 'astc-6x5-unorm-srgb',\n\tASTC6x6Unorm: 'astc-6x6-unorm',\n\tASTC6x6UnormSRGB: 'astc-6x6-unorm-srgb',\n\tASTC8x5Unorm: 'astc-8x5-unorm',\n\tASTC8x5UnormSRGB: 'astc-8x5-unorm-srgb',\n\tASTC8x6Unorm: 'astc-8x6-unorm',\n\tASTC8x6UnormSRGB: 'astc-8x6-unorm-srgb',\n\tASTC8x8Unorm: 'astc-8x8-unorm',\n\tASTC8x8UnormSRGB: 'astc-8x8-unorm-srgb',\n\tASTC10x5Unorm: 'astc-10x5-unorm',\n\tASTC10x5UnormSRGB: 'astc-10x5-unorm-srgb',\n\tASTC10x6Unorm: 'astc-10x6-unorm',\n\tASTC10x6UnormSRGB: 'astc-10x6-unorm-srgb',\n\tASTC10x8Unorm: 'astc-10x8-unorm',\n\tASTC10x8UnormSRGB: 'astc-10x8-unorm-srgb',\n\tASTC10x10Unorm: 'astc-10x10-unorm',\n\tASTC10x10UnormSRGB: 'astc-10x10-unorm-srgb',\n\tASTC12x10Unorm: 'astc-12x10-unorm',\n\tASTC12x10UnormSRGB: 'astc-12x10-unorm-srgb',\n\tASTC12x12Unorm: 'astc-12x12-unorm',\n\tASTC12x12UnormSRGB: 'astc-12x12-unorm-srgb',\n\n};\n\nconst GPUAddressMode = {\n\tClampToEdge: 'clamp-to-edge',\n\tRepeat: 'repeat',\n\tMirrorRepeat: 'mirror-repeat'\n};\n\nconst GPUFilterMode = {\n\tLinear: 'linear',\n\tNearest: 'nearest'\n};\n\nconst GPUBlendFactor = {\n\tZero: 'zero',\n\tOne: 'one',\n\tSrc: 'src',\n\tOneMinusSrc: 'one-minus-src',\n\tSrcAlpha: 'src-alpha',\n\tOneMinusSrcAlpha: 'one-minus-src-alpha',\n\tDst: 'dst',\n\tOneMinusDst: 'one-minus-dst',\n\tDstAlpha: 'dst-alpha',\n\tOneMinusDstAlpha: 'one-minus-dst-alpha',\n\tSrcAlphaSaturated: 'src-alpha-saturated',\n\tConstant: 'constant',\n\tOneMinusConstant: 'one-minus-constant'\n};\n\nconst GPUBlendOperation = {\n\tAdd: 'add',\n\tSubtract: 'subtract',\n\tReverseSubtract: 'reverse-subtract',\n\tMin: 'min',\n\tMax: 'max'\n};\n\nconst GPUColorWriteFlags = {\n\tNone: 0,\n\tAll: 0xF\n};\n\nconst GPUStencilOperation = {\n\tKeep: 'keep',\n\tZero: 'zero',\n\tReplace: 'replace',\n\tInvert: 'invert',\n\tIncrementClamp: 'increment-clamp',\n\tDecrementClamp: 'decrement-clamp',\n\tIncrementWrap: 'increment-wrap',\n\tDecrementWrap: 'decrement-wrap'\n};\n\nconst GPUBufferBindingType = {\n\tStorage: 'storage',\n\tReadOnlyStorage: 'read-only-storage'\n};\n\nconst GPUStorageTextureAccess = {\n\tWriteOnly: 'write-only',\n\tReadOnly: 'read-only',\n\tReadWrite: 'read-write',\n};\n\nconst GPUSamplerBindingType = {\n\tNonFiltering: 'non-filtering',\n\tComparison: 'comparison'\n};\n\nconst GPUTextureSampleType = {\n\tFloat: 'float',\n\tUnfilterableFloat: 'unfilterable-float',\n\tDepth: 'depth',\n\tSInt: 'sint',\n\tUInt: 'uint'\n};\n\nconst GPUTextureDimension = {\n\tTwoD: '2d',\n\tThreeD: '3d'\n};\n\nconst GPUTextureViewDimension = {\n\tTwoD: '2d',\n\tTwoDArray: '2d-array',\n\tCube: 'cube',\n\tThreeD: '3d'\n};\n\nconst GPUTextureAspect = {\n\tAll: 'all'};\n\nconst GPUInputStepMode = {\n\tVertex: 'vertex',\n\tInstance: 'instance'\n};\n\nconst GPUFeatureName = {\n\tCoreFeaturesAndLimits: 'core-features-and-limits',\n\tDepthClipControl: 'depth-clip-control',\n\tDepth32FloatStencil8: 'depth32float-stencil8',\n\tTextureCompressionBC: 'texture-compression-bc',\n\tTextureCompressionBCSliced3D: 'texture-compression-bc-sliced-3d',\n\tTextureCompressionETC2: 'texture-compression-etc2',\n\tTextureCompressionASTC: 'texture-compression-astc',\n\tTextureCompressionASTCSliced3D: 'texture-compression-astc-sliced-3d',\n\tTimestampQuery: 'timestamp-query',\n\tIndirectFirstInstance: 'indirect-first-instance',\n\tShaderF16: 'shader-f16',\n\tRG11B10UFloat: 'rg11b10ufloat-renderable',\n\tBGRA8UNormStorage: 'bgra8unorm-storage',\n\tFloat32Filterable: 'float32-filterable',\n\tFloat32Blendable: 'float32-blendable',\n\tClipDistances: 'clip-distances',\n\tDualSourceBlending: 'dual-source-blending',\n\tSubgroups: 'subgroups',\n\tTextureFormatsTier1: 'texture-formats-tier1',\n\tTextureFormatsTier2: 'texture-formats-tier2'\n};\n\nconst GPUFeatureMap = {\n\t'texture-compression-s3tc': 'texture-compression-bc',\n\t'texture-compression-etc1': 'texture-compression-etc2'\n};\n\n/**\n * A special form of sampler binding type.\n * It's texture value is managed by a node object.\n *\n * @private\n * @augments Sampler\n */\nclass NodeSampler extends Sampler {\n\n\t/**\n\t * Constructs a new node-based sampler.\n\t *\n\t * @param {string} name - The samplers's name.\n\t * @param {TextureNode} textureNode - The texture node.\n\t * @param {UniformGroupNode} groupNode - The uniform group node.\n\t */\n\tconstructor( name, textureNode, groupNode ) {\n\n\t\tsuper( name, textureNode ? textureNode.value : null );\n\n\t\t/**\n\t\t * The texture node.\n\t\t *\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis.textureNode = textureNode;\n\n\t\t/**\n\t\t * The uniform group node.\n\t\t *\n\t\t * @type {UniformGroupNode}\n\t\t */\n\t\tthis.groupNode = groupNode;\n\n\t}\n\n\t/**\n\t * Updates the texture value of this sampler.\n\t *\n\t * @return {boolean} Whether the sampler needs an update or not.\n\t */\n\tupdate() {\n\n\t\tconst { textureNode } = this;\n\n\t\tif ( this.texture !== textureNode.value ) {\n\n\t\t\tthis.texture = textureNode.value;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn super.update();\n\n\t}\n\n}\n\n/**\n * Represents a storage buffer binding type.\n *\n * @private\n * @augments Buffer\n */\nclass StorageBuffer extends Buffer {\n\n\t/**\n\t * Constructs a new uniform buffer.\n\t *\n\t * @param {string} name - The buffer's name.\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tconstructor( name, attribute ) {\n\n\t\tsuper( name, attribute ? attribute.array : null );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @private\n\t\t * @type {BufferAttribute}\n\t\t */\n\t\tthis._attribute = attribute;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStorageBuffer = true;\n\n\t}\n\n\t/**\n\t * The storage buffer attribute.\n\t *\n\t * @type {BufferAttribute}\n\t */\n\tget attribute() {\n\n\t\treturn this._attribute;\n\n\t}\n\n}\n\nlet _id = 0;\n\n/**\n * A special form of storage buffer binding type.\n * It's buffer value is managed by a node object.\n *\n * @private\n * @augments StorageBuffer\n */\nclass NodeStorageBuffer extends StorageBuffer {\n\n\t/**\n\t * Constructs a new node-based storage buffer.\n\t *\n\t * @param {StorageBufferNode} nodeUniform - The storage buffer node.\n\t * @param {UniformGroupNode} groupNode - The uniform group node.\n\t */\n\tconstructor( nodeUniform, groupNode ) {\n\n\t\tsuper( 'StorageBuffer_' + _id ++, nodeUniform ? nodeUniform.value : null );\n\n\t\t/**\n\t\t * The node uniform.\n\t\t *\n\t\t * @type {StorageBufferNode}\n\t\t */\n\t\tthis.nodeUniform = nodeUniform;\n\n\t\t/**\n\t\t * The access type.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.access = nodeUniform ? nodeUniform.access : NodeAccess.READ_WRITE;\n\n\t\t/**\n\t\t * The uniform group node.\n\t\t *\n\t\t * @type {UniformGroupNode}\n\t\t */\n\t\tthis.groupNode = groupNode;\n\n\t}\n\n\t/**\n\t * The storage buffer attribute node.\n\t *\n\t * @type {StorageBufferAttribute}\n\t */\n\tget attribute() {\n\n\t\treturn this.nodeUniform.value;\n\n\t}\n\n\t/**\n\t * The storage buffer.\n\t *\n\t * @type {Float32Array}\n\t */\n\tget buffer() {\n\n\t\treturn this.nodeUniform.value.array;\n\n\t}\n\n}\n\n/**\n * A WebGPU backend utility module used by {@link WebGPUTextureUtils}.\n *\n * @private\n */\nclass WebGPUTexturePassUtils extends DataMap {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {GPUDevice} device - The WebGPU device.\n\t */\n\tconstructor( device ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The WebGPU device.\n\t\t *\n\t\t * @type {GPUDevice}\n\t\t */\n\t\tthis.device = device;\n\n\t\tconst mipmapSource = `\nstruct VarysStruct {\n\t@builtin( position ) Position: vec4f,\n\t@location( 0 ) vTex : vec2f,\n\t@location( 1 ) @interpolate(flat, either) vBaseArrayLayer: u32,\n};\n\n@group( 0 ) @binding ( 2 )\nvar<uniform> flipY: u32;\n\n@vertex\nfn mainVS(\n\t\t@builtin( vertex_index ) vertexIndex : u32,\n\t\t@builtin( instance_index ) instanceIndex : u32 ) -> VarysStruct {\n\n\tvar Varys : VarysStruct;\n\n\tvar pos = array(\n\t\tvec2f( -1, -1 ),\n\t\tvec2f( -1,  3 ),\n\t\tvec2f(  3, -1 ),\n\t);\n\n\tlet p = pos[ vertexIndex ];\n\tlet mult = select( vec2f( 0.5, -0.5 ), vec2f( 0.5, 0.5 ), flipY != 0 );\n\tVarys.vTex = p * mult + vec2f( 0.5 );\n\tVarys.Position = vec4f( p, 0, 1 );\n\tVarys.vBaseArrayLayer = instanceIndex;\n\n\treturn Varys;\n\n}\n\n@group( 0 ) @binding( 0 )\nvar imgSampler : sampler;\n\n@group( 0 ) @binding( 1 )\nvar img2d : texture_2d<f32>;\n\n@fragment\nfn main_2d( Varys: VarysStruct ) -> @location( 0 ) vec4<f32> {\n\n\treturn textureSample( img2d, imgSampler, Varys.vTex );\n\n}\n\n@group( 0 ) @binding( 1 )\nvar img2dArray : texture_2d_array<f32>;\n\n@fragment\nfn main_2d_array( Varys: VarysStruct ) -> @location( 0 ) vec4<f32> {\n\n\treturn textureSample( img2dArray, imgSampler, Varys.vTex, Varys.vBaseArrayLayer );\n\n}\n\nconst faceMat = array(\n  mat3x3f(  0,  0,  -2,  0, -2,   0,  1,  1,   1 ),   // pos-x\n  mat3x3f(  0,  0,   2,  0, -2,   0, -1,  1,  -1 ),   // neg-x\n  mat3x3f(  2,  0,   0,  0,  0,   2, -1,  1,  -1 ),   // pos-y\n  mat3x3f(  2,  0,   0,  0,  0,  -2, -1, -1,   1 ),   // neg-y\n  mat3x3f(  2,  0,   0,  0, -2,   0, -1,  1,   1 ),   // pos-z\n  mat3x3f( -2,  0,   0,  0, -2,   0,  1,  1,  -1 ),   // neg-z\n);\n\n@group( 0 ) @binding( 1 )\nvar imgCube : texture_cube<f32>;\n\n@fragment\nfn main_cube( Varys: VarysStruct ) -> @location( 0 ) vec4<f32> {\n\n\treturn textureSample( imgCube, imgSampler, faceMat[ Varys.vBaseArrayLayer ] * vec3f( fract( Varys.vTex ), 1 ) );\n\n}\n`;\n\n\t\t/**\n\t\t * The mipmap GPU sampler.\n\t\t *\n\t\t * @type {GPUSampler}\n\t\t */\n\t\tthis.mipmapSampler = device.createSampler( { minFilter: GPUFilterMode.Linear } );\n\n\t\t/**\n\t\t * The flipY GPU sampler.\n\t\t *\n\t\t * @type {GPUSampler}\n\t\t */\n\t\tthis.flipYSampler = device.createSampler( { minFilter: GPUFilterMode.Nearest } ); //@TODO?: Consider using textureLoad()\n\n\t\t/**\n\t\t * flip uniform buffer\n\t\t * @type {GPUBuffer}\n\t\t */\n\t\tthis.flipUniformBuffer = device.createBuffer( {\n\t\t\tsize: 4,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t} );\n\t\tdevice.queue.writeBuffer( this.flipUniformBuffer, 0, new Uint32Array( [ 1 ] ) );\n\n\t\t/**\n\t\t * no flip uniform buffer\n\t\t * @type {GPUBuffer}\n\t\t */\n\t\tthis.noFlipUniformBuffer = device.createBuffer( {\n\t\t\tsize: 4,\n\t\t\tusage: GPUBufferUsage.UNIFORM\n\t\t} );\n\n\t\t/**\n\t\t * A cache for GPU render pipelines used for copy/transfer passes.\n\t\t * Every texture format and textureBindingViewDimension combo requires a unique pipeline.\n\t\t *\n\t\t * @type {Object<string,GPURenderPipeline>}\n\t\t */\n\t\tthis.transferPipelines = {};\n\n\t\t/**\n\t\t * The mipmap shader module.\n\t\t *\n\t\t * @type {GPUShaderModule}\n\t\t */\n\t\tthis.mipmapShaderModule = device.createShaderModule( {\n\t\t\tlabel: 'mipmap',\n\t\t\tcode: mipmapSource\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns a render pipeline for the internal copy render pass. The pass\n\t * requires a unique render pipeline for each texture format.\n\t *\n\t * @param {string} format - The GPU texture format\n\t * @param {string?} textureBindingViewDimension - The GPU texture binding view dimension\n\t * @return {GPURenderPipeline} The GPU render pipeline.\n\t */\n\tgetTransferPipeline( format, textureBindingViewDimension ) {\n\n\t\ttextureBindingViewDimension = textureBindingViewDimension || '2d-array';\n\t\tconst key = `${ format }-${ textureBindingViewDimension }`;\n\t\tlet pipeline = this.transferPipelines[ key ];\n\n\t\tif ( pipeline === undefined ) {\n\n\t\t\tpipeline = this.device.createRenderPipeline( {\n\t\t\t\tlabel: `mipmap-${ format }-${ textureBindingViewDimension }`,\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: this.mipmapShaderModule,\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: this.mipmapShaderModule,\n\t\t\t\t\tentryPoint: `main_${ textureBindingViewDimension.replace( '-', '_' ) }`,\n\t\t\t\t\ttargets: [ { format } ]\n\t\t\t\t},\n\t\t\t\tlayout: 'auto'\n\t\t\t} );\n\n\t\t\tthis.transferPipelines[ key ] = pipeline;\n\n\t\t}\n\n\t\treturn pipeline;\n\n\t}\n\n\t/**\n\t * Flip the contents of the given GPU texture along its vertical axis.\n\t *\n\t * @param {GPUTexture} textureGPU - The GPU texture object.\n\t * @param {Object} textureGPUDescriptor - The texture descriptor.\n\t * @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.\n\t */\n\tflipY( textureGPU, textureGPUDescriptor, baseArrayLayer = 0 ) {\n\n\t\tconst format = textureGPUDescriptor.format;\n\t\tconst { width, height } = textureGPUDescriptor.size;\n\n\t\tconst tempTexture = this.device.createTexture( {\n\t\t\tsize: { width, height },\n\t\t\tformat,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING\n\t\t} );\n\n\t\tconst copyTransferPipeline = this.getTransferPipeline( format, textureGPU.textureBindingViewDimension );\n\t\tconst flipTransferPipeline = this.getTransferPipeline( format, tempTexture.textureBindingViewDimension );\n\n\t\tconst commandEncoder = this.device.createCommandEncoder( {} );\n\n\t\tconst pass = ( pipeline, sourceTexture, sourceArrayLayer, destinationTexture, destinationArrayLayer, flipY ) => {\n\n\t\t\tconst bindGroupLayout = pipeline.getBindGroupLayout( 0 ); // @TODO: Consider making this static.\n\n\t\t\tconst bindGroup = this.device.createBindGroup( {\n\t\t\t\tlayout: bindGroupLayout,\n\t\t\t\tentries: [ {\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.flipYSampler\n\t\t\t\t}, {\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sourceTexture.createView( {\n\t\t\t\t\t\tdimension: sourceTexture.textureBindingViewDimension || '2d-array',\n\t\t\t\t\t\tbaseMipLevel: 0,\n\t\t\t\t\t\tmipLevelCount: 1,\n\t\t\t\t\t} ),\n\t\t\t\t}, {\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: flipY ? this.flipUniformBuffer : this.noFlipUniformBuffer }\n\t\t\t\t} ]\n\t\t\t} );\n\n\t\t\tconst passEncoder = commandEncoder.beginRenderPass( {\n\t\t\t\tcolorAttachments: [ {\n\t\t\t\t\tview: destinationTexture.createView( {\n\t\t\t\t\t\tdimension: '2d',\n\t\t\t\t\t\tbaseMipLevel: 0,\n\t\t\t\t\t\tmipLevelCount: 1,\n\t\t\t\t\t\tbaseArrayLayer: destinationArrayLayer,\n\t\t\t\t\t\tarrayLayerCount: 1,\n\t\t\t\t\t} ),\n\t\t\t\t\tloadOp: GPULoadOp.Clear,\n\t\t\t\t\tstoreOp: GPUStoreOp.Store,\n\t\t\t\t} ]\n\t\t\t} );\n\n\t\t\tpassEncoder.setPipeline( pipeline );\n\t\t\tpassEncoder.setBindGroup( 0, bindGroup );\n\t\t\tpassEncoder.draw( 3, 1, 0, sourceArrayLayer );\n\t\t\tpassEncoder.end();\n\n\t\t};\n\n\t\tpass( copyTransferPipeline, textureGPU, baseArrayLayer, tempTexture, 0, false );\n\t\tpass( flipTransferPipeline, tempTexture, 0, textureGPU, baseArrayLayer, true );\n\n\t\tthis.device.queue.submit( [ commandEncoder.finish() ] );\n\n\t\ttempTexture.destroy();\n\n\t}\n\n\t/**\n\t * Generates mipmaps for the given GPU texture.\n\t *\n\t * @param {GPUTexture} textureGPU - The GPU texture object.\n\t * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.\n\t */\n\tgenerateMipmaps( textureGPU, encoder = null ) {\n\n\t\tconst textureData = this.get( textureGPU );\n\n\t\tconst passes = textureData.layers || this._mipmapCreateBundles( textureGPU );\n\n\t\tconst commandEncoder = encoder || this.device.createCommandEncoder( { label: 'mipmapEncoder' } );\n\n\t\tthis._mipmapRunBundles( commandEncoder, passes );\n\n\t\tif ( encoder === null ) this.device.queue.submit( [ commandEncoder.finish() ] );\n\n\t\ttextureData.layers = passes;\n\n\t}\n\n\t/**\n\t * Since multiple copy render passes are required to generate mipmaps, the passes\n\t * are managed as render bundles to improve performance.\n\t *\n\t * @param {GPUTexture} textureGPU - The GPU texture object.\n\t * @return {Array<Object>} An array of render bundles.\n\t */\n\t_mipmapCreateBundles( textureGPU ) {\n\n\t\tconst textureBindingViewDimension = textureGPU.textureBindingViewDimension || '2d-array';\n\t\tconst pipeline = this.getTransferPipeline( textureGPU.format, textureBindingViewDimension );\n\n\t\tconst bindGroupLayout = pipeline.getBindGroupLayout( 0 ); // @TODO: Consider making this static.\n\n\t\tconst passes = [];\n\n\t\tfor ( let baseMipLevel = 1; baseMipLevel < textureGPU.mipLevelCount; baseMipLevel ++ ) {\n\n\t\t\tfor ( let baseArrayLayer = 0; baseArrayLayer < textureGPU.depthOrArrayLayers; baseArrayLayer ++ ) {\n\n\t\t\t\tconst bindGroup = this.device.createBindGroup( {\n\t\t\t\t\tlayout: bindGroupLayout,\n\t\t\t\t\tentries: [ {\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: this.mipmapSampler\n\t\t\t\t\t}, {\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: textureGPU.createView( {\n\t\t\t\t\t\t\tdimension: textureBindingViewDimension,\n\t\t\t\t\t\t\tbaseMipLevel: baseMipLevel - 1,\n\t\t\t\t\t\t\tmipLevelCount: 1,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t}, {\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: { buffer: this.noFlipUniformBuffer }\n\t\t\t\t\t} ]\n\t\t\t\t} );\n\n\t\t\t\tconst passDescriptor = {\n\t\t\t\t\tcolorAttachments: [ {\n\t\t\t\t\t\tview: textureGPU.createView( {\n\t\t\t\t\t\t\tdimension: '2d',\n\t\t\t\t\t\t\tbaseMipLevel,\n\t\t\t\t\t\t\tmipLevelCount: 1,\n\t\t\t\t\t\t\tbaseArrayLayer,\n\t\t\t\t\t\t\tarrayLayerCount: 1,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t\tloadOp: GPULoadOp.Clear,\n\t\t\t\t\t\tstoreOp: GPUStoreOp.Store,\n\t\t\t\t\t} ]\n\t\t\t\t};\n\n\t\t\t\tconst passEncoder = this.device.createRenderBundleEncoder( {\n\t\t\t\t\tcolorFormats: [ textureGPU.format ]\n\t\t\t\t} );\n\n\t\t\t\tpassEncoder.setPipeline( pipeline );\n\t\t\t\tpassEncoder.setBindGroup( 0, bindGroup );\n\t\t\t\tpassEncoder.draw( 3, 1, 0, baseArrayLayer );\n\n\t\t\t\tpasses.push( {\n\t\t\t\t\trenderBundles: [ passEncoder.finish() ],\n\t\t\t\t\tpassDescriptor\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn passes;\n\n\t}\n\n\t/**\n\t * Executes the render bundles.\n\t *\n\t * @param {GPUCommandEncoder} commandEncoder - The GPU command encoder.\n\t * @param {Array<Object>} passes - An array of render bundles.\n\t */\n\t_mipmapRunBundles( commandEncoder, passes ) {\n\n\t\tconst levels = passes.length;\n\n\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\tconst pass = passes[ i ];\n\n\t\t\tconst passEncoder = commandEncoder.beginRenderPass( pass.passDescriptor );\n\n\t\t\tpassEncoder.executeBundles( pass.renderBundles );\n\n\t\t\tpassEncoder.end();\n\n\t\t}\n\n\t}\n\n}\n\nconst _compareToWebGPU = {\n\t[ NeverCompare ]: 'never',\n\t[ LessCompare ]: 'less',\n\t[ EqualCompare ]: 'equal',\n\t[ LessEqualCompare ]: 'less-equal',\n\t[ GreaterCompare ]: 'greater',\n\t[ GreaterEqualCompare ]: 'greater-equal',\n\t[ AlwaysCompare ]: 'always',\n\t[ NotEqualCompare ]: 'not-equal'\n};\n\nconst _flipMap = [ 0, 1, 3, 2, 4, 5 ];\n\n/**\n * A WebGPU backend utility module for managing textures.\n *\n * @private\n */\nclass WebGPUTextureUtils {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGPUBackend} backend - The WebGPU backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGPU backend.\n\t\t *\n\t\t * @type {WebGPUBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * A reference to the pass utils.\n\t\t *\n\t\t * @type {?WebGPUTexturePassUtils}\n\t\t * @default null\n\t\t */\n\t\tthis._passUtils = null;\n\n\t\t/**\n\t\t * A dictionary for managing default textures. The key\n\t\t * is the texture format, the value the texture object.\n\t\t *\n\t\t * @type {Object<string,Texture>}\n\t\t */\n\t\tthis.defaultTexture = {};\n\n\t\t/**\n\t\t * A dictionary for managing default cube textures. The key\n\t\t * is the texture format, the value the texture object.\n\t\t *\n\t\t * @type {Object<string,CubeTexture>}\n\t\t */\n\t\tthis.defaultCubeTexture = {};\n\n\t\t/**\n\t\t * A default video frame.\n\t\t *\n\t\t * @type {?VideoFrame}\n\t\t * @default null\n\t\t */\n\t\tthis.defaultVideoFrame = null;\n\n\t\t/**\n\t\t * A cache of shared texture samplers.\n\t\t *\n\t\t * @type {Map<string, Object>}\n\t\t */\n\t\tthis._samplerCache = new Map();\n\n\t}\n\n\t/**\n\t * Creates a GPU sampler for the given texture.\n\t *\n\t * @param {Texture} texture - The texture to create the sampler for.\n\t * @return {string} The current sampler key.\n\t */\n\tupdateSampler( texture ) {\n\n\t\tconst backend = this.backend;\n\n\t\tconst samplerKey = texture.minFilter + '-' + texture.magFilter + '-' +\n\t\t\ttexture.wrapS + '-' + texture.wrapT + '-' + ( texture.wrapR || '0' ) + '-' +\n\t\t\ttexture.anisotropy + '-' + ( texture.compareFunction || 0 );\n\n\t\tlet samplerData = this._samplerCache.get( samplerKey );\n\n\t\tif ( samplerData === undefined ) {\n\n\t\t\tconst samplerDescriptorGPU = {\n\t\t\t\taddressModeU: this._convertAddressMode( texture.wrapS ),\n\t\t\t\taddressModeV: this._convertAddressMode( texture.wrapT ),\n\t\t\t\taddressModeW: this._convertAddressMode( texture.wrapR ),\n\t\t\t\tmagFilter: this._convertFilterMode( texture.magFilter ),\n\t\t\t\tminFilter: this._convertFilterMode( texture.minFilter ),\n\t\t\t\tmipmapFilter: this._convertFilterMode( texture.minFilter ),\n\t\t\t\tmaxAnisotropy: 1\n\t\t\t};\n\n\t\t\t// Depth textures without compare function must use non-filtering (nearest) sampling\n\t\t\tif ( texture.isDepthTexture && texture.compareFunction === null ) {\n\n\t\t\t\tsamplerDescriptorGPU.magFilter = GPUFilterMode.Nearest;\n\t\t\t\tsamplerDescriptorGPU.minFilter = GPUFilterMode.Nearest;\n\t\t\t\tsamplerDescriptorGPU.mipmapFilter = GPUFilterMode.Nearest;\n\n\t\t\t}\n\n\t\t\t// anisotropy can only be used when all filter modes are set to linear.\n\n\t\t\tif ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {\n\n\t\t\t\tsamplerDescriptorGPU.maxAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t\tif ( texture.isDepthTexture && texture.compareFunction !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {\n\n\t\t\t\tsamplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];\n\n\t\t\t}\n\n\t\t\tconst sampler = backend.device.createSampler( samplerDescriptorGPU );\n\n\t\t\tsamplerData = { sampler, usedTimes: 0 };\n\n\t\t\tthis._samplerCache.set( samplerKey, samplerData );\n\n\t\t}\n\n\t\tconst textureData = backend.get( texture );\n\n\t\tif ( textureData.sampler !== samplerData.sampler ) {\n\n\t\t\t// check if previous sampler is unused so it can be deleted\n\n\t\t\tif ( textureData.sampler !== undefined ) {\n\n\t\t\t\tconst oldSamplerData = this._samplerCache.get( textureData.samplerKey );\n\t\t\t\toldSamplerData.usedTimes --;\n\n\t\t\t\tif ( oldSamplerData.usedTimes === 0 ) {\n\n\t\t\t\t\tthis._samplerCache.delete( textureData.samplerKey );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// update to new sampler data\n\n\t\t\ttextureData.samplerKey = samplerKey;\n\t\t\ttextureData.sampler = samplerData.sampler;\n\n\t\t\tsamplerData.usedTimes ++;\n\n\t\t}\n\n\t\treturn samplerKey;\n\n\t}\n\n\t/**\n\t * Creates a default texture for the given texture that can be used\n\t * as a placeholder until the actual texture is ready for usage.\n\t *\n\t * @param {Texture} texture - The texture to create a default texture for.\n\t */\n\tcreateDefaultTexture( texture ) {\n\n\t\tlet textureGPU;\n\n\t\tconst format = getFormat( texture, this.backend.device );\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\ttextureGPU = this._getDefaultCubeTextureGPU( format );\n\n\t\t} else {\n\n\t\t\ttextureGPU = this._getDefaultTextureGPU( format );\n\n\t\t}\n\n\t\tthis.backend.get( texture ).texture = textureGPU;\n\n\t}\n\n\t/**\n\t * Defines a texture on the GPU for the given texture object.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t */\n\tcreateTexture( texture, options = {} ) {\n\n\t\tconst backend = this.backend;\n\t\tconst textureData = backend.get( texture );\n\n\t\tif ( textureData.initialized ) {\n\n\t\t\tthrow new Error( 'WebGPUTextureUtils: Texture already initialized.' );\n\n\t\t}\n\n\t\tif ( texture.isExternalTexture ) {\n\n\t\t\ttextureData.texture = texture.sourceTexture;\n\t\t\ttextureData.initialized = true;\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( options.needsMipmaps === undefined ) options.needsMipmaps = false;\n\t\tif ( options.levels === undefined ) options.levels = 1;\n\t\tif ( options.depth === undefined ) options.depth = 1;\n\n\t\tconst { width, height, depth, levels } = options;\n\n\t\tif ( texture.isFramebufferTexture ) {\n\n\t\t\tif ( options.renderTarget ) {\n\n\t\t\t\toptions.format = this.backend.utils.getCurrentColorFormat( options.renderTarget );\n\n\t\t\t} else {\n\n\t\t\t\toptions.format = this.backend.utils.getPreferredCanvasFormat();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst dimension = this._getDimension( texture );\n\t\tconst format = texture.internalFormat || options.format || getFormat( texture, backend.device );\n\n\t\ttextureData.format = format;\n\n\t\tconst { samples, primarySamples, isMSAA } = backend.utils.getTextureSampleData( texture );\n\n\t\tlet usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC;\n\n\t\tif ( texture.isStorageTexture === true ) {\n\n\t\t\tusage |= GPUTextureUsage.STORAGE_BINDING;\n\n\t\t}\n\n\t\tif ( texture.isCompressedTexture !== true && texture.isCompressedArrayTexture !== true && format !== GPUTextureFormat.RGB9E5UFloat ) {\n\n\t\t\tusage |= GPUTextureUsage.RENDER_ATTACHMENT;\n\n\t\t}\n\n\t\tconst textureDescriptorGPU = {\n\t\t\tlabel: texture.name,\n\t\t\tsize: {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\tdepthOrArrayLayers: depth,\n\t\t\t},\n\t\t\tmipLevelCount: levels,\n\t\t\tsampleCount: primarySamples,\n\t\t\tdimension: dimension,\n\t\t\tformat: format,\n\t\t\tusage: usage\n\t\t};\n\n\t\t// texture creation\n\n\t\tif ( format === undefined ) {\n\n\t\t\twarn( 'WebGPURenderer: Texture format not supported.' );\n\n\t\t\tthis.createDefaultTexture( texture );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\ttextureDescriptorGPU.textureBindingViewDimension = GPUTextureViewDimension.Cube;\n\n\t\t}\n\n\t\ttry {\n\n\t\t\ttextureData.texture = backend.device.createTexture( textureDescriptorGPU );\n\n\t\t} catch ( e ) {\n\n\t\t\twarn( 'WebGPURenderer: Failed to create texture with descriptor:', textureDescriptorGPU );\n\t\t\tthis.createDefaultTexture( texture );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( isMSAA ) {\n\n\t\t\tconst msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );\n\n\t\t\tmsaaTextureDescriptorGPU.label = msaaTextureDescriptorGPU.label + '-msaa';\n\t\t\tmsaaTextureDescriptorGPU.sampleCount = samples;\n\t\t\tmsaaTextureDescriptorGPU.mipLevelCount = 1; // See https://www.w3.org/TR/webgpu/#texture-creation\n\n\t\t\ttextureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );\n\n\t\t}\n\n\t\ttextureData.initialized = true;\n\n\t\ttextureData.textureDescriptorGPU = textureDescriptorGPU;\n\n\t}\n\n\t/**\n\t * Destroys the GPU data for the given texture object.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.\n\t */\n\tdestroyTexture( texture, isDefaultTexture = false ) {\n\n\t\tconst backend = this.backend;\n\t\tconst textureData = backend.get( texture );\n\n\t\tif ( textureData.texture !== undefined && isDefaultTexture === false ) textureData.texture.destroy();\n\n\t\tif ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();\n\n\t\tbackend.delete( texture );\n\n\t}\n\n\t/**\n\t * Generates mipmaps for the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.\n\t */\n\tgenerateMipmaps( texture, encoder = null ) {\n\n\t\tconst textureData = this.backend.get( texture );\n\n\t\tthis._generateMipmaps( textureData.texture, encoder );\n\n\t}\n\n\t/**\n\t * Returns the color buffer representing the color\n\t * attachment of the default framebuffer.\n\t *\n\t * @return {GPUTexture} The color buffer.\n\t */\n\tgetColorBuffer() {\n\n\t\tconst backend = this.backend;\n\t\tconst canvasTarget = backend.renderer.getCanvasTarget();\n\t\tconst { width, height } = backend.getDrawingBufferSize();\n\t\tconst samples = backend.renderer.currentSamples;\n\n\t\tconst colorTexture = canvasTarget.colorTexture;\n\t\tconst colorTextureData = backend.get( colorTexture );\n\n\t\tif ( colorTexture.width === width && colorTexture.height === height && colorTexture.samples === samples ) {\n\n\t\t\treturn colorTextureData.texture;\n\n\t\t}\n\n\t\t// recreate\n\n\t\tlet colorBuffer = colorTextureData.texture;\n\n\t\tif ( colorBuffer ) colorBuffer.destroy();\n\n\t\tcolorBuffer = backend.device.createTexture( {\n\t\t\tlabel: 'colorBuffer',\n\t\t\tsize: {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\tdepthOrArrayLayers: 1\n\t\t\t},\n\t\t\tsampleCount: backend.utils.getSampleCount( backend.renderer.currentSamples ),\n\t\t\tformat: backend.utils.getPreferredCanvasFormat(),\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC\n\t\t} );\n\n\t\t//\n\n\t\tcolorTexture.source.width = width;\n\t\tcolorTexture.source.height = height;\n\t\tcolorTexture.samples = samples;\n\n\t\tcolorTextureData.texture = colorBuffer;\n\n\t\treturn colorBuffer;\n\n\t}\n\n\t/**\n\t * Returns the depth buffer representing the depth\n\t * attachment of the default framebuffer.\n\t *\n\t * @param {boolean} [depth=true] - Whether depth is enabled or not.\n\t * @param {boolean} [stencil=false] -  Whether stencil is enabled or not.\n\t * @return {GPUTexture} The depth buffer.\n\t */\n\tgetDepthBuffer( depth = true, stencil = false ) {\n\n\t\tconst backend = this.backend;\n\t\tconst canvasTarget = backend.renderer.getCanvasTarget();\n\t\tconst { width, height } = backend.getDrawingBufferSize();\n\t\tconst samples = backend.renderer.currentSamples;\n\n\t\tconst depthTexture = canvasTarget.depthTexture;\n\n\t\tif ( depthTexture.width === width &&\n\t\t\tdepthTexture.height === height &&\n\t\t\tdepthTexture.samples === samples &&\n\t\t\tdepthTexture.depth === depth &&\n\t\t\tdepthTexture.stencil === stencil ) {\n\n\t\t\treturn backend.get( depthTexture ).texture;\n\n\t\t}\n\n\t\t//\n\n\t\tconst depthTextureGPU = backend.get( depthTexture ).texture;\n\n\t\tlet format, type;\n\n\t\tif ( stencil ) {\n\n\t\t\tformat = DepthStencilFormat;\n\t\t\ttype = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedInt248Type;\n\n\t\t} else if ( depth ) {\n\n\t\t\tformat = DepthFormat;\n\t\t\ttype = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedIntType;\n\n\t\t}\n\n\t\tif ( depthTextureGPU !== undefined ) {\n\n\t\t\tif ( depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type && depthTexture.samples === samples ) {\n\n\t\t\t\treturn depthTextureGPU;\n\n\t\t\t}\n\n\t\t\tthis.destroyTexture( depthTexture );\n\n\t\t}\n\n\t\t// recreate\n\n\t\tdepthTexture.name = 'depthBuffer';\n\t\tdepthTexture.format = format;\n\t\tdepthTexture.type = type;\n\t\tdepthTexture.image.width = width;\n\t\tdepthTexture.image.height = height;\n\t\tdepthTexture.samples = samples;\n\n\t\tthis.createTexture( depthTexture, { width, height } );\n\n\t\treturn backend.get( depthTexture ).texture;\n\n\t}\n\n\t/**\n\t * Uploads the updated texture data to the GPU.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t */\n\tupdateTexture( texture, options ) {\n\n\t\tconst textureData = this.backend.get( texture );\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tconst { textureDescriptorGPU } = textureData;\n\n\t\tif ( texture.isRenderTargetTexture || ( textureDescriptorGPU === undefined /* unsupported texture format */ ) )\n\t\t\treturn;\n\n\t\t// transfer texture data\n\n\t\tif ( texture.isDataTexture ) {\n\n\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ i ];\n\n\t\t\t\t\tthis._copyBufferToTexture( mipmap, textureData.texture, textureDescriptorGPU, 0, texture.flipY, 0, i );\n\n\t\t\t\t}\n\n\n\t\t\t} else {\n\n\t\t\t\tthis._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );\n\n\t\t\t}\n\n\t\t} else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {\n\n\t\t\tif ( texture.layerUpdates && texture.layerUpdates.size > 0 ) {\n\n\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\tthis._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, layerIndex, texture.flipY, layerIndex );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < options.image.depth; i ++ ) {\n\n\t\t\t\t\tthis._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\tthis._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU );\n\n\t\t} else if ( texture.isCubeTexture ) {\n\n\t\t\tthis._copyCubeMapToTexture( texture, textureData.texture, textureDescriptorGPU );\n\n\t\t} else if ( texture.isHTMLTexture ) {\n\n\t\t\tconst device = this.backend.device;\n\t\t\tconst canvas = this.backend.renderer.domElement;\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( typeof device.queue.copyElementImageToTexture !== 'function' ) return;\n\n\t\t\t// Skip the first frame — the element needs a paint record first.\n\t\t\tif ( ! textureData.hasPaintCallback ) {\n\n\t\t\t\ttextureData.hasPaintCallback = true;\n\t\t\t\tcanvas.requestPaint();\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst width = textureDescriptorGPU.size.width;\n\t\t\tconst height = textureDescriptorGPU.size.height;\n\n\t\t\tdevice.queue.copyElementImageToTexture(\n\t\t\t\timage, width, height,\n\t\t\t\t{ texture: textureData.texture }\n\t\t\t);\n\n\t\t\tif ( texture.flipY ) {\n\n\t\t\t\tthis._flipY( textureData.texture, textureDescriptorGPU );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ i ];\n\n\t\t\t\t\tthis._copyImageToTexture( mipmap, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha, i );\n\n\t\t\t\t}\n\n\n\t\t\t} else {\n\n\t\t\t\tthis._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\ttextureData.version = texture.version;\n\n\t}\n\n\t/**\n\t * Returns texture data as a typed array.\n\t *\n\t * @async\n\t * @param {Texture} texture - The texture to copy.\n\t * @param {number} x - The x coordinate of the copy origin.\n\t * @param {number} y - The y coordinate of the copy origin.\n\t * @param {number} width - The width of the copy.\n\t * @param {number} height - The height of the copy.\n\t * @param {number} faceIndex - The face index.\n\t * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.\n\t */\n\tasync copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {\n\n\t\tconst device = this.backend.device;\n\n\t\tconst textureData = this.backend.get( texture );\n\t\tconst textureGPU = textureData.texture;\n\t\tconst format = textureData.textureDescriptorGPU.format;\n\t\tconst bytesPerTexel = this._getBytesPerTexel( format );\n\n\t\tlet bytesPerRow = width * bytesPerTexel;\n\t\tbytesPerRow = Math.ceil( bytesPerRow / 256 ) * 256; // Align to 256 bytes\n\n\t\tconst readBuffer = device.createBuffer(\n\t\t\t{\n\t\t\t\tsize: ( ( height - 1 ) * bytesPerRow ) + ( width * bytesPerTexel ), // see https://github.com/mrdoob/three.js/issues/31658#issuecomment-3229442010\n\t\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t\t\t}\n\t\t);\n\n\t\tconst encoder = device.createCommandEncoder();\n\n\t\tencoder.copyTextureToBuffer(\n\t\t\t{\n\t\t\t\ttexture: textureGPU,\n\t\t\t\torigin: { x, y, z: faceIndex },\n\t\t\t},\n\t\t\t{\n\t\t\t\tbuffer: readBuffer,\n\t\t\t\tbytesPerRow: bytesPerRow\n\t\t\t},\n\t\t\t{\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t}\n\n\t\t);\n\n\t\tconst typedArrayType = this._getTypedArrayType( format );\n\n\t\tdevice.queue.submit( [ encoder.finish() ] );\n\n\t\tawait readBuffer.mapAsync( GPUMapMode.READ );\n\n\t\tconst buffer = readBuffer.getMappedRange().slice();\n\n\t\treadBuffer.destroy();\n\n\t\treturn new typedArrayType( buffer );\n\n\t}\n\n\t/**\n\t * Frees all internal resources.\n\t */\n\tdispose() {\n\n\t\tthis._samplerCache.clear();\n\n\t}\n\n\t/**\n\t * Returns the default GPU texture for the given format.\n\t *\n\t * @private\n\t * @param {string} format - The GPU format.\n\t * @return {GPUTexture} The GPU texture.\n\t */\n\t_getDefaultTextureGPU( format ) {\n\n\t\tlet defaultTexture = this.defaultTexture[ format ];\n\n\t\tif ( defaultTexture === undefined ) {\n\n\t\t\tconst texture = new Texture();\n\t\t\ttexture.minFilter = NearestFilter;\n\t\t\ttexture.magFilter = NearestFilter;\n\n\t\t\tthis.createTexture( texture, { width: 1, height: 1, format } );\n\n\t\t\tthis.defaultTexture[ format ] = defaultTexture = texture;\n\n\t\t}\n\n\t\treturn this.backend.get( defaultTexture ).texture;\n\n\t}\n\n\t/**\n\t * Returns the default GPU cube texture for the given format.\n\t *\n\t * @private\n\t * @param {string} format - The GPU format.\n\t * @return {GPUTexture} The GPU texture.\n\t */\n\t_getDefaultCubeTextureGPU( format ) {\n\n\t\tlet defaultCubeTexture = this.defaultCubeTexture[ format ];\n\n\t\tif ( defaultCubeTexture === undefined ) {\n\n\t\t\tconst texture = new CubeTexture();\n\t\t\ttexture.minFilter = NearestFilter;\n\t\t\ttexture.magFilter = NearestFilter;\n\n\t\t\tthis.createTexture( texture, { width: 1, height: 1, depth: 6 } );\n\n\t\t\tthis.defaultCubeTexture[ format ] = defaultCubeTexture = texture;\n\n\t\t}\n\n\t\treturn this.backend.get( defaultCubeTexture ).texture;\n\n\t}\n\n\t/**\n\t * Uploads cube texture image data to the GPU memory.\n\t *\n\t * @private\n\t * @param {CubeTexture} texture - The cube texture.\n\t * @param {GPUTexture} textureGPU - The GPU texture.\n\t * @param {Object} textureDescriptorGPU - The GPU texture descriptor.\n\t */\n\t_copyCubeMapToTexture( texture, textureGPU, textureDescriptorGPU ) {\n\n\t\tconst images = texture.images;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst image = images[ i ];\n\n\t\t\tconst flipIndex = texture.flipY === true ? _flipMap[ i ] : i;\n\n\t\t\tif ( image.isDataTexture ) {\n\n\t\t\t\tthis._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY );\n\n\t\t\t} else {\n\n\t\t\t\tthis._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, texture.premultiplyAlpha );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\tconst image = mipmap.images[ i ];\n\n\t\t\t\tif ( image.isDataTexture ) {\n\n\t\t\t\t\tthis._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, 0, j + 1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, texture.premultiplyAlpha, j + 1 );\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uploads texture image data to the GPU memory.\n\t *\n\t * @private\n\t * @param {HTMLImageElement|ImageBitmap|HTMLCanvasElement} image - The image data.\n\t * @param {GPUTexture} textureGPU - The GPU texture.\n\t * @param {Object} textureDescriptorGPU - The GPU texture descriptor.\n\t * @param {number} originDepth - The origin depth.\n\t * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.\n\t * @param {boolean} premultiplyAlpha - Whether the texture should have its RGB channels premultiplied by the alpha channel or not.\n\t * @param {number} [mipLevel=0] - The mip level where the data should be copied to.\n\t */\n\t_copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, premultiplyAlpha, mipLevel = 0 ) {\n\n\t\tconst device = this.backend.device;\n\n\t\tconst width = ( mipLevel > 0 ) ? image.width : textureDescriptorGPU.size.width;\n\t\tconst height = ( mipLevel > 0 ) ? image.height : textureDescriptorGPU.size.height;\n\n\t\ttry {\n\n\t\t\tdevice.queue.copyExternalImageToTexture(\n\t\t\t\t{\n\t\t\t\t\tsource: image,\n\t\t\t\t\tflipY: flipY\n\t\t\t\t}, {\n\t\t\t\t\ttexture: textureGPU,\n\t\t\t\t\tmipLevel: mipLevel,\n\t\t\t\t\torigin: { x: 0, y: 0, z: originDepth },\n\t\t\t\t\tpremultipliedAlpha: premultiplyAlpha\n\t\t\t\t}, {\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height,\n\t\t\t\t\tdepthOrArrayLayers: 1\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t// try/catch has been added to fix bad video frame data on certain devices, see #32391\n\n\t\t} catch ( _ ) {}\n\n\t}\n\n\t/**\n\t * Returns the pass utils singleton.\n\t *\n\t * @private\n\t * @return {WebGPUTexturePassUtils} The utils instance.\n\t */\n\t_getPassUtils() {\n\n\t\tlet passUtils = this._passUtils;\n\n\t\tif ( passUtils === null ) {\n\n\t\t\tthis._passUtils = passUtils = new WebGPUTexturePassUtils( this.backend.device );\n\n\t\t}\n\n\t\treturn passUtils;\n\n\t}\n\n\t/**\n\t * Generates mipmaps for the given GPU texture.\n\t *\n\t * @private\n\t * @param {GPUTexture} textureGPU - The GPU texture object.\n\t * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.\n\t */\n\t_generateMipmaps( textureGPU, encoder = null ) {\n\n\t\tthis._getPassUtils().generateMipmaps( textureGPU, encoder );\n\n\t}\n\n\t/**\n\t * Flip the contents of the given GPU texture along its vertical axis.\n\t *\n\t * @private\n\t * @param {GPUTexture} textureGPU - The GPU texture object.\n\t * @param {Object} textureDescriptorGPU - The texture descriptor.\n\t * @param {number} [originDepth=0] - The origin depth.\n\t */\n\t_flipY( textureGPU, textureDescriptorGPU, originDepth = 0 ) {\n\n\t\tthis._getPassUtils().flipY( textureGPU, textureDescriptorGPU, originDepth );\n\n\t}\n\n\t/**\n\t * Uploads texture buffer data to the GPU memory.\n\t *\n\t * @private\n\t * @param {Object} image - An object defining the image buffer data.\n\t * @param {GPUTexture} textureGPU - The GPU texture.\n\t * @param {Object} textureDescriptorGPU - The GPU texture descriptor.\n\t * @param {number} originDepth - The origin depth.\n\t * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.\n\t * @param {number} [depth=0] - The depth offset when copying array or 3D texture data.\n\t * @param {number} [mipLevel=0] - The mip level where the data should be copied to.\n\t */\n\t_copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0, mipLevel = 0 ) {\n\n\t\t// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()\n\t\t// @TODO: Consider to support valid buffer layouts with other formats like RGB\n\n\t\tconst device = this.backend.device;\n\n\t\tconst data = image.data;\n\n\t\tconst bytesPerTexel = this._getBytesPerTexel( textureDescriptorGPU.format );\n\t\tconst bytesPerRow = image.width * bytesPerTexel;\n\n\t\tdevice.queue.writeTexture(\n\t\t\t{\n\t\t\t\ttexture: textureGPU,\n\t\t\t\tmipLevel: mipLevel,\n\t\t\t\torigin: { x: 0, y: 0, z: originDepth }\n\t\t\t},\n\t\t\tdata,\n\t\t\t{\n\t\t\t\toffset: image.width * image.height * bytesPerTexel * depth,\n\t\t\t\tbytesPerRow\n\t\t\t},\n\t\t\t{\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\tdepthOrArrayLayers: 1\n\t\t\t} );\n\n\t\tif ( flipY === true ) {\n\n\t\t\tthis._flipY( textureGPU, textureDescriptorGPU, originDepth );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uploads compressed texture data to the GPU memory.\n\t *\n\t * @private\n\t * @param {Array<Object>} mipmaps - An array with mipmap data.\n\t * @param {GPUTexture} textureGPU - The GPU texture.\n\t * @param {Object} textureDescriptorGPU - The GPU texture descriptor.\n\t */\n\t_copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU ) {\n\n\t\t// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()\n\n\t\tconst device = this.backend.device;\n\n\t\tconst blockData = this._getBlockData( textureDescriptorGPU.format );\n\t\tconst isArrayTexture = textureDescriptorGPU.size.depthOrArrayLayers > 1;\n\n\t\tfor ( let i = 0; i < mipmaps.length; i ++ ) {\n\n\t\t\tconst mipmap = mipmaps[ i ];\n\n\t\t\tconst width = mipmap.width;\n\t\t\tconst height = mipmap.height;\n\t\t\tconst depth = isArrayTexture ? textureDescriptorGPU.size.depthOrArrayLayers : 1;\n\n\t\t\tconst bytesPerRow = Math.ceil( width / blockData.width ) * blockData.byteLength;\n\t\t\tconst bytesPerImage = bytesPerRow * Math.ceil( height / blockData.height );\n\n\t\t\tfor ( let j = 0; j < depth; j ++ ) {\n\n\t\t\t\tdevice.queue.writeTexture(\n\t\t\t\t\t{\n\t\t\t\t\t\ttexture: textureGPU,\n\t\t\t\t\t\tmipLevel: i,\n\t\t\t\t\t\torigin: { x: 0, y: 0, z: j }\n\t\t\t\t\t},\n\t\t\t\t\tmipmap.data,\n\t\t\t\t\t{\n\t\t\t\t\t\toffset: j * bytesPerImage,\n\t\t\t\t\t\tbytesPerRow,\n\t\t\t\t\t\trowsPerImage: Math.ceil( height / blockData.height )\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\twidth: Math.ceil( width / blockData.width ) * blockData.width,\n\t\t\t\t\t\theight: Math.ceil( height / blockData.height ) * blockData.height,\n\t\t\t\t\t\tdepthOrArrayLayers: 1\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is only relevant for compressed texture formats. It returns a block\n\t * data descriptor for the given GPU compressed texture format.\n\t *\n\t * @private\n\t * @param {string} format - The GPU compressed texture format.\n\t * @return {Object} The block data descriptor.\n\t */\n\t_getBlockData( format ) {\n\n\t\tif ( format === GPUTextureFormat.BC1RGBAUnorm || format === GPUTextureFormat.BC1RGBAUnormSRGB ) return { byteLength: 8, width: 4, height: 4 }; // DXT1\n\t\tif ( format === GPUTextureFormat.BC2RGBAUnorm || format === GPUTextureFormat.BC2RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT3\n\t\tif ( format === GPUTextureFormat.BC3RGBAUnorm || format === GPUTextureFormat.BC3RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT5\n\t\tif ( format === GPUTextureFormat.BC4RUnorm || format === GPUTextureFormat.BC4RSnorm ) return { byteLength: 8, width: 4, height: 4 }; // RGTC1\n\t\tif ( format === GPUTextureFormat.BC5RGUnorm || format === GPUTextureFormat.BC5RGSnorm ) return { byteLength: 16, width: 4, height: 4 }; // RGTC2\n\t\tif ( format === GPUTextureFormat.BC6HRGBUFloat || format === GPUTextureFormat.BC6HRGBFloat ) return { byteLength: 16, width: 4, height: 4 }; // BPTC (float)\n\t\tif ( format === GPUTextureFormat.BC7RGBAUnorm || format === GPUTextureFormat.BC7RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // BPTC (unorm)\n\n\t\tif ( format === GPUTextureFormat.ETC2RGB8Unorm || format === GPUTextureFormat.ETC2RGB8UnormSRGB ) return { byteLength: 8, width: 4, height: 4 };\n\t\tif ( format === GPUTextureFormat.ETC2RGB8A1Unorm || format === GPUTextureFormat.ETC2RGB8A1UnormSRGB ) return { byteLength: 8, width: 4, height: 4 };\n\t\tif ( format === GPUTextureFormat.ETC2RGBA8Unorm || format === GPUTextureFormat.ETC2RGBA8UnormSRGB ) return { byteLength: 16, width: 4, height: 4 };\n\t\tif ( format === GPUTextureFormat.EACR11Unorm ) return { byteLength: 8, width: 4, height: 4 };\n\t\tif ( format === GPUTextureFormat.EACR11Snorm ) return { byteLength: 8, width: 4, height: 4 };\n\t\tif ( format === GPUTextureFormat.EACRG11Unorm ) return { byteLength: 16, width: 4, height: 4 };\n\t\tif ( format === GPUTextureFormat.EACRG11Snorm ) return { byteLength: 16, width: 4, height: 4 };\n\n\t\tif ( format === GPUTextureFormat.ASTC4x4Unorm || format === GPUTextureFormat.ASTC4x4UnormSRGB ) return { byteLength: 16, width: 4, height: 4 };\n\t\tif ( format === GPUTextureFormat.ASTC5x4Unorm || format === GPUTextureFormat.ASTC5x4UnormSRGB ) return { byteLength: 16, width: 5, height: 4 };\n\t\tif ( format === GPUTextureFormat.ASTC5x5Unorm || format === GPUTextureFormat.ASTC5x5UnormSRGB ) return { byteLength: 16, width: 5, height: 5 };\n\t\tif ( format === GPUTextureFormat.ASTC6x5Unorm || format === GPUTextureFormat.ASTC6x5UnormSRGB ) return { byteLength: 16, width: 6, height: 5 };\n\t\tif ( format === GPUTextureFormat.ASTC6x6Unorm || format === GPUTextureFormat.ASTC6x6UnormSRGB ) return { byteLength: 16, width: 6, height: 6 };\n\t\tif ( format === GPUTextureFormat.ASTC8x5Unorm || format === GPUTextureFormat.ASTC8x5UnormSRGB ) return { byteLength: 16, width: 8, height: 5 };\n\t\tif ( format === GPUTextureFormat.ASTC8x6Unorm || format === GPUTextureFormat.ASTC8x6UnormSRGB ) return { byteLength: 16, width: 8, height: 6 };\n\t\tif ( format === GPUTextureFormat.ASTC8x8Unorm || format === GPUTextureFormat.ASTC8x8UnormSRGB ) return { byteLength: 16, width: 8, height: 8 };\n\t\tif ( format === GPUTextureFormat.ASTC10x5Unorm || format === GPUTextureFormat.ASTC10x5UnormSRGB ) return { byteLength: 16, width: 10, height: 5 };\n\t\tif ( format === GPUTextureFormat.ASTC10x6Unorm || format === GPUTextureFormat.ASTC10x6UnormSRGB ) return { byteLength: 16, width: 10, height: 6 };\n\t\tif ( format === GPUTextureFormat.ASTC10x8Unorm || format === GPUTextureFormat.ASTC10x8UnormSRGB ) return { byteLength: 16, width: 10, height: 8 };\n\t\tif ( format === GPUTextureFormat.ASTC10x10Unorm || format === GPUTextureFormat.ASTC10x10UnormSRGB ) return { byteLength: 16, width: 10, height: 10 };\n\t\tif ( format === GPUTextureFormat.ASTC12x10Unorm || format === GPUTextureFormat.ASTC12x10UnormSRGB ) return { byteLength: 16, width: 12, height: 10 };\n\t\tif ( format === GPUTextureFormat.ASTC12x12Unorm || format === GPUTextureFormat.ASTC12x12UnormSRGB ) return { byteLength: 16, width: 12, height: 12 };\n\n\t}\n\n\t/**\n\t * Converts the three.js uv wrapping constants to GPU address mode constants.\n\t *\n\t * @private\n\t * @param {number} value - The three.js constant defining a uv wrapping mode.\n\t * @return {string} The GPU address mode.\n\t */\n\t_convertAddressMode( value ) {\n\n\t\tlet addressMode = GPUAddressMode.ClampToEdge;\n\n\t\tif ( value === RepeatWrapping ) {\n\n\t\t\taddressMode = GPUAddressMode.Repeat;\n\n\t\t} else if ( value === MirroredRepeatWrapping ) {\n\n\t\t\taddressMode = GPUAddressMode.MirrorRepeat;\n\n\t\t}\n\n\t\treturn addressMode;\n\n\t}\n\n\t/**\n\t * Converts the three.js filter constants to GPU filter constants.\n\t *\n\t * @private\n\t * @param {number} value - The three.js constant defining a filter mode.\n\t * @return {string} The GPU filter mode.\n\t */\n\t_convertFilterMode( value ) {\n\n\t\tlet filterMode = GPUFilterMode.Linear;\n\n\t\tif ( value === NearestFilter || value === NearestMipmapNearestFilter || value === NearestMipmapLinearFilter ) {\n\n\t\t\tfilterMode = GPUFilterMode.Nearest;\n\n\t\t}\n\n\t\treturn filterMode;\n\n\t}\n\n\t/**\n\t * Returns the bytes-per-texel value for the given GPU texture format.\n\t *\n\t * @private\n\t * @param {string} format - The GPU texture format.\n\t * @return {number} The bytes-per-texel.\n\t */\n\t_getBytesPerTexel( format ) {\n\n\t\t// 8-bit formats\n\t\tif ( format === GPUTextureFormat.R8Unorm ||\n\t\t\tformat === GPUTextureFormat.R8Snorm ||\n\t\t\tformat === GPUTextureFormat.R8Uint ||\n\t\t\tformat === GPUTextureFormat.R8Sint ) return 1;\n\n\t\t// 16-bit formats\n\t\tif ( format === GPUTextureFormat.R16Uint ||\n\t\t\tformat === GPUTextureFormat.R16Sint ||\n\t\t\tformat === GPUTextureFormat.R16Float ||\n\t\t\tformat === GPUTextureFormat.RG8Unorm ||\n\t\t\tformat === GPUTextureFormat.RG8Snorm ||\n\t\t\tformat === GPUTextureFormat.RG8Uint ||\n\t\t\tformat === GPUTextureFormat.RG8Sint ||\n\t\t\tformat === GPUTextureFormat.R16Unorm ||\n\t\t\tformat === GPUTextureFormat.R16Snorm ) return 2;\n\n\t\t// 32-bit formats\n\t\tif ( format === GPUTextureFormat.R32Uint ||\n\t\t\tformat === GPUTextureFormat.R32Sint ||\n\t\t\tformat === GPUTextureFormat.R32Float ||\n\t\t\tformat === GPUTextureFormat.RG16Uint ||\n\t\t\tformat === GPUTextureFormat.RG16Sint ||\n\t\t\tformat === GPUTextureFormat.RG16Float ||\n\t\t\tformat === GPUTextureFormat.RGBA8Unorm ||\n\t\t\tformat === GPUTextureFormat.RGBA8UnormSRGB ||\n\t\t\tformat === GPUTextureFormat.RGBA8Snorm ||\n\t\t\tformat === GPUTextureFormat.RGBA8Uint ||\n\t\t\tformat === GPUTextureFormat.RGBA8Sint ||\n\t\t\tformat === GPUTextureFormat.BGRA8Unorm ||\n\t\t\tformat === GPUTextureFormat.BGRA8UnormSRGB ||\n\t\t\tformat === GPUTextureFormat.RG16Unorm ||\n\t\t\tformat === GPUTextureFormat.RG16Snorm ||\n\t\t\t// Packed 32-bit formats\n\t\t\tformat === GPUTextureFormat.RGB9E5UFloat ||\n\t\t\tformat === GPUTextureFormat.RGB10A2Unorm ||\n\t\t\tformat === GPUTextureFormat.RG11B10UFloat ||\n\t\t\tformat === GPUTextureFormat.Depth32Float ||\n\t\t\tformat === GPUTextureFormat.Depth24Plus ||\n\t\t\tformat === GPUTextureFormat.Depth24PlusStencil8 ||\n\t\t\tformat === GPUTextureFormat.Depth32FloatStencil8 ) return 4;\n\n\t\t// 64-bit formats\n\t\tif ( format === GPUTextureFormat.RG32Uint ||\n\t\t\tformat === GPUTextureFormat.RG32Sint ||\n\t\t\tformat === GPUTextureFormat.RG32Float ||\n\t\t\tformat === GPUTextureFormat.RGBA16Uint ||\n\t\t\tformat === GPUTextureFormat.RGBA16Sint ||\n\t\t\tformat === GPUTextureFormat.RGBA16Float ||\n\t\t\tformat === GPUTextureFormat.RGBA16Unorm ||\n\t\t\tformat === GPUTextureFormat.RGBA16Snorm ) return 8;\n\n\t\t// 128-bit formats\n\t\tif ( format === GPUTextureFormat.RGBA32Uint ||\n\t\t\tformat === GPUTextureFormat.RGBA32Sint ||\n\t\t\tformat === GPUTextureFormat.RGBA32Float ) return 16;\n\n\n\t}\n\n\t/**\n\t * Returns the corresponding typed array type for the given GPU texture format.\n\t *\n\t * @private\n\t * @param {string} format - The GPU texture format.\n\t * @return {TypedArray.constructor} The typed array type.\n\t */\n\t_getTypedArrayType( format ) {\n\n\t\tif ( format === GPUTextureFormat.R8Uint ) return Uint8Array;\n\t\tif ( format === GPUTextureFormat.R8Sint ) return Int8Array;\n\t\tif ( format === GPUTextureFormat.R8Unorm ) return Uint8Array;\n\t\tif ( format === GPUTextureFormat.R8Snorm ) return Int8Array;\n\t\tif ( format === GPUTextureFormat.RG8Uint ) return Uint8Array;\n\t\tif ( format === GPUTextureFormat.RG8Sint ) return Int8Array;\n\t\tif ( format === GPUTextureFormat.RG8Unorm ) return Uint8Array;\n\t\tif ( format === GPUTextureFormat.RG8Snorm ) return Int8Array;\n\t\tif ( format === GPUTextureFormat.RGBA8Uint ) return Uint8Array;\n\t\tif ( format === GPUTextureFormat.RGBA8Sint ) return Int8Array;\n\t\tif ( format === GPUTextureFormat.RGBA8Unorm || format === GPUTextureFormat.RGBA8UnormSRGB ) return Uint8Array;\n\t\tif ( format === GPUTextureFormat.RGBA8Snorm ) return Int8Array;\n\n\n\t\tif ( format === GPUTextureFormat.R16Uint ) return Uint16Array;\n\t\tif ( format === GPUTextureFormat.R16Sint ) return Int16Array;\n\t\tif ( format === GPUTextureFormat.RG16Uint ) return Uint16Array;\n\t\tif ( format === GPUTextureFormat.RG16Sint ) return Int16Array;\n\t\tif ( format === GPUTextureFormat.RGBA16Uint ) return Uint16Array;\n\t\tif ( format === GPUTextureFormat.RGBA16Sint ) return Int16Array;\n\t\tif ( format === GPUTextureFormat.R16Float ) return Uint16Array;\n\t\tif ( format === GPUTextureFormat.RG16Float ) return Uint16Array;\n\t\tif ( format === GPUTextureFormat.RGBA16Float ) return Uint16Array;\n\n\t\tif ( format === GPUTextureFormat.R16Unorm ) return Uint16Array;\n\t\tif ( format === GPUTextureFormat.R16Snorm ) return Int16Array;\n\t\tif ( format === GPUTextureFormat.RG16Unorm ) return Uint16Array;\n\t\tif ( format === GPUTextureFormat.RG16Snorm ) return Int16Array;\n\t\tif ( format === GPUTextureFormat.RGBA16Unorm ) return Uint16Array;\n\t\tif ( format === GPUTextureFormat.RGBA16Snorm ) return Int16Array;\n\n\t\tif ( format === GPUTextureFormat.R32Uint ) return Uint32Array;\n\t\tif ( format === GPUTextureFormat.R32Sint ) return Int32Array;\n\t\tif ( format === GPUTextureFormat.R32Float ) return Float32Array;\n\t\tif ( format === GPUTextureFormat.RG32Uint ) return Uint32Array;\n\t\tif ( format === GPUTextureFormat.RG32Sint ) return Int32Array;\n\t\tif ( format === GPUTextureFormat.RG32Float ) return Float32Array;\n\t\tif ( format === GPUTextureFormat.RGBA32Uint ) return Uint32Array;\n\t\tif ( format === GPUTextureFormat.RGBA32Sint ) return Int32Array;\n\t\tif ( format === GPUTextureFormat.RGBA32Float ) return Float32Array;\n\n\t\tif ( format === GPUTextureFormat.BGRA8Unorm || format === GPUTextureFormat.BGRA8UnormSRGB ) return Uint8Array;\n\t\tif ( format === GPUTextureFormat.RGB10A2Unorm ) return Uint32Array;\n\t\tif ( format === GPUTextureFormat.RGB9E5UFloat ) return Uint32Array;\n\t\tif ( format === GPUTextureFormat.RG11B10UFloat ) return Uint32Array;\n\n\t\tif ( format === GPUTextureFormat.Depth32Float ) return Float32Array;\n\t\tif ( format === GPUTextureFormat.Depth24Plus ) return Uint32Array;\n\t\tif ( format === GPUTextureFormat.Depth24PlusStencil8 ) return Uint32Array;\n\t\tif ( format === GPUTextureFormat.Depth32FloatStencil8 ) return Float32Array;\n\n\t}\n\n\t/**\n\t * Returns the GPU dimensions for the given texture.\n\t *\n\t * @private\n\t * @param {Texture} texture - The texture.\n\t * @return {string} The GPU dimension.\n\t */\n\t_getDimension( texture ) {\n\n\t\tlet dimension;\n\n\t\tif ( texture.is3DTexture || texture.isData3DTexture ) {\n\n\t\t\tdimension = GPUTextureDimension.ThreeD;\n\n\t\t} else {\n\n\t\t\tdimension = GPUTextureDimension.TwoD;\n\n\t\t}\n\n\t\treturn dimension;\n\n\t}\n\n}\n\n/**\n * Returns the GPU format for the given texture.\n *\n * @param {Texture} texture - The texture.\n * @param {GPUDevice} [device] - The GPU device which is used for feature detection.\n * @return {string} The GPU format.\n */\nfunction getFormat( texture, device ) {\n\n\tconst format = texture.format;\n\tconst type = texture.type;\n\tconst normalized = texture.normalized;\n\tconst colorSpace = texture.colorSpace;\n\tconst transfer = ColorManagement.getTransfer( colorSpace );\n\n\tlet formatGPU;\n\n\tlet textureFormatsTier1 = false;\n\n\tif ( normalized ) {\n\n\t\ttextureFormatsTier1 = device.features.has( GPUFeatureName.TextureFormatsTier1 );\n\n\t\tif ( textureFormatsTier1 === false ) {\n\n\t\t\twarn( 'WebGPURenderer: Unable to use normalized textures without texture-formats-tier1 feature.' );\n\n\t\t}\n\n\t}\n\n\tif ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {\n\n\t\tswitch ( format ) {\n\n\t\t\tcase RGB_S3TC_DXT1_Format:\n\t\t\tcase RGBA_S3TC_DXT1_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC1RGBAUnormSRGB : GPUTextureFormat.BC1RGBAUnorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_S3TC_DXT3_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC2RGBAUnormSRGB : GPUTextureFormat.BC2RGBAUnorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_S3TC_DXT5_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RED_RGTC1_Format:\n\t\t\t\tformatGPU = GPUTextureFormat.BC4RUnorm;\n\t\t\t\tbreak;\n\n\t\t\tcase SIGNED_RED_RGTC1_Format:\n\t\t\t\tformatGPU = GPUTextureFormat.BC4RSnorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RED_GREEN_RGTC2_Format:\n\t\t\t\tformatGPU = GPUTextureFormat.BC5RGUnorm;\n\t\t\t\tbreak;\n\n\t\t\tcase SIGNED_RED_GREEN_RGTC2_Format:\n\t\t\t\tformatGPU = GPUTextureFormat.BC5RGSnorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_BPTC_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC7RGBAUnormSRGB : GPUTextureFormat.BC7RGBAUnorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGB_ETC2_Format:\n\t\t\tcase RGB_ETC1_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ETC2_EAC_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase R11_EAC_Format:\n\t\t\t\tformatGPU = GPUTextureFormat.EACR11Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase SIGNED_R11_EAC_Format:\n\t\t\t\tformatGPU = GPUTextureFormat.EACR11Snorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RG11_EAC_Format:\n\t\t\t\tformatGPU = GPUTextureFormat.EACRG11Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase SIGNED_RG11_EAC_Format:\n\t\t\t\tformatGPU = GPUTextureFormat.EACRG11Snorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_4x4_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_5x4_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC5x4UnormSRGB : GPUTextureFormat.ASTC5x4Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_5x5_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC5x5UnormSRGB : GPUTextureFormat.ASTC5x5Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_6x5_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC6x5UnormSRGB : GPUTextureFormat.ASTC6x5Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_6x6_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC6x6UnormSRGB : GPUTextureFormat.ASTC6x6Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_8x5_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x5UnormSRGB : GPUTextureFormat.ASTC8x5Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_8x6_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x6UnormSRGB : GPUTextureFormat.ASTC8x6Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_8x8_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x8UnormSRGB : GPUTextureFormat.ASTC8x8Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_10x5_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x5UnormSRGB : GPUTextureFormat.ASTC10x5Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_10x6_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x6UnormSRGB : GPUTextureFormat.ASTC10x6Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_10x8_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x8UnormSRGB : GPUTextureFormat.ASTC10x8Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_10x10_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x10UnormSRGB : GPUTextureFormat.ASTC10x10Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_12x10_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC12x10UnormSRGB : GPUTextureFormat.ASTC12x10Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBA_ASTC_12x12_Format:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC12x12UnormSRGB : GPUTextureFormat.ASTC12x12Unorm;\n\t\t\t\tbreak;\n\n\t\t\tcase RGBAFormat:\n\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\terror( 'WebGPURenderer: Unsupported texture format.', format );\n\n\t\t}\n\n\t} else {\n\n\t\tswitch ( format ) {\n\n\t\t\tcase RGBAFormat:\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase ByteType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RGBA8Snorm;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ShortType:\n\t\t\t\t\t\tformatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Snorm : GPUTextureFormat.RGBA16Sint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedShortType:\n\t\t\t\t\t\tformatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Unorm : GPUTextureFormat.RGBA16Uint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedIntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RGBA32Uint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase IntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RGBA32Sint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedByteType:\n\t\t\t\t\t\tformatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RGBA16Float;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase FloatType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RGBA32Float;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terror( 'WebGPURenderer: Unsupported texture type with RGBAFormat.', type );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase RGBFormat:\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase UnsignedInt5999Type:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RGB9E5UFloat;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedInt101111Type:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RG11B10UFloat;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terror( 'WebGPURenderer: Unsupported texture type with RGBFormat.', type );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase RedFormat:\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase ByteType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.R8Snorm;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ShortType:\n\t\t\t\t\t\tformatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Snorm : GPUTextureFormat.R16Sint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedShortType:\n\t\t\t\t\t\tformatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Unorm : GPUTextureFormat.R16Uint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedIntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.R32Uint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase IntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.R32Sint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedByteType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.R8Unorm;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.R16Float;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase FloatType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.R32Float;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terror( 'WebGPURenderer: Unsupported texture type with RedFormat.', type );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase RGFormat:\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase ByteType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RG8Snorm;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ShortType:\n\t\t\t\t\t\tformatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Snorm : GPUTextureFormat.RG16Sint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedShortType:\n\t\t\t\t\t\tformatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Unorm : GPUTextureFormat.RG16Uint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedIntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RG32Uint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase IntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RG32Sint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedByteType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RG8Unorm;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RG16Float;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase FloatType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RG32Float;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terror( 'WebGPURenderer: Unsupported texture type with RGFormat.', type );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase DepthFormat:\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase UnsignedShortType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.Depth16Unorm;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedIntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.Depth24Plus;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase FloatType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.Depth32Float;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terror( 'WebGPURenderer: Unsupported texture type with DepthFormat.', type );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase DepthStencilFormat:\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase UnsignedInt248Type:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.Depth24PlusStencil8;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase FloatType:\n\n\t\t\t\t\t\tif ( device && device.features.has( GPUFeatureName.Depth32FloatStencil8 ) === false ) {\n\n\t\t\t\t\t\t\terror( 'WebGPURenderer: Depth textures with DepthStencilFormat + FloatType can only be used with the \"depth32float-stencil8\" GPU feature.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.Depth32FloatStencil8;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terror( 'WebGPURenderer: Unsupported texture type with DepthStencilFormat.', type );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase RedIntegerFormat:\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase IntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.R32Sint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedIntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.R32Uint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terror( 'WebGPURenderer: Unsupported texture type with RedIntegerFormat.', type );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase RGIntegerFormat:\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase IntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RG32Sint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedIntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RG32Uint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terror( 'WebGPURenderer: Unsupported texture type with RGIntegerFormat.', type );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase RGBAIntegerFormat:\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase IntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RGBA32Sint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase UnsignedIntType:\n\t\t\t\t\t\tformatGPU = GPUTextureFormat.RGBA32Uint;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terror( 'WebGPURenderer: Unsupported texture type with RGBAIntegerFormat.', type );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\terror( 'WebGPURenderer: Unsupported texture format.', format );\n\n\t\t}\n\n\t}\n\n\treturn formatGPU;\n\n}\n\nconst declarationRegexp = /^[fn]*\\s*([a-z_0-9]+)?\\s*\\(([\\s\\S]*?)\\)\\s*[\\-\\>]*\\s*([a-z_0-9]+(?:<[\\s\\S]+?>)?)/i;\nconst propertiesRegexp = /([a-z_0-9]+)\\s*:\\s*([a-z_0-9]+(?:<[\\s\\S]+?>)?)/ig;\n\nconst wgslTypeLib$1 = {\n\t'f32': 'float',\n\t'i32': 'int',\n\t'u32': 'uint',\n\t'bool': 'bool',\n\n\t'vec2<f32>': 'vec2',\n \t'vec2<i32>': 'ivec2',\n \t'vec2<u32>': 'uvec2',\n \t'vec2<bool>': 'bvec2',\n\n\t'vec2f': 'vec2',\n\t'vec2i': 'ivec2',\n\t'vec2u': 'uvec2',\n\t'vec2b': 'bvec2',\n\n\t'vec3<f32>': 'vec3',\n\t'vec3<i32>': 'ivec3',\n\t'vec3<u32>': 'uvec3',\n\t'vec3<bool>': 'bvec3',\n\n\t'vec3f': 'vec3',\n\t'vec3i': 'ivec3',\n\t'vec3u': 'uvec3',\n\t'vec3b': 'bvec3',\n\n\t'vec4<f32>': 'vec4',\n\t'vec4<i32>': 'ivec4',\n\t'vec4<u32>': 'uvec4',\n\t'vec4<bool>': 'bvec4',\n\n\t'vec4f': 'vec4',\n\t'vec4i': 'ivec4',\n\t'vec4u': 'uvec4',\n\t'vec4b': 'bvec4',\n\n\t'mat2x2<f32>': 'mat2',\n\t'mat2x2f': 'mat2',\n\n\t'mat3x3<f32>': 'mat3',\n\t'mat3x3f': 'mat3',\n\n\t'mat4x4<f32>': 'mat4',\n\t'mat4x4f': 'mat4',\n\n\t'sampler': 'sampler',\n\n\t'texture_1d': 'texture',\n\n\t'texture_2d': 'texture',\n\t'texture_2d_array': 'texture',\n\t'texture_multisampled_2d': 'cubeTexture',\n\n\t'texture_depth_2d': 'depthTexture',\n\t'texture_depth_2d_array': 'depthTexture',\n\t'texture_depth_multisampled_2d': 'depthTexture',\n\t'texture_depth_cube': 'depthTexture',\n\t'texture_depth_cube_array': 'depthTexture',\n\n\t'texture_3d': 'texture3D',\n\n\t'texture_cube': 'cubeTexture',\n\t'texture_cube_array': 'cubeTexture',\n\n\t'texture_storage_1d': 'storageTexture',\n\t'texture_storage_2d': 'storageTexture',\n\t'texture_storage_2d_array': 'storageTexture',\n\t'texture_storage_3d': 'storageTexture'\n\n};\n\nconst parse = ( source ) => {\n\n\tsource = source.trim();\n\n\tconst declaration = source.match( declarationRegexp );\n\n\tif ( declaration !== null && declaration.length === 4 ) {\n\n\t\tconst inputsCode = declaration[ 2 ];\n\t\tconst propsMatches = [];\n\t\tlet match = null;\n\n\t\twhile ( ( match = propertiesRegexp.exec( inputsCode ) ) !== null ) {\n\n\t\t\tpropsMatches.push( { name: match[ 1 ], type: match[ 2 ] } );\n\n\t\t}\n\n\t\t// Process matches to correctly pair names and types\n\t\tconst inputs = [];\n\t\tfor ( let i = 0; i < propsMatches.length; i ++ ) {\n\n\t\t\tconst { name, type } = propsMatches[ i ];\n\n\t\t\tlet resolvedType = type;\n\n\t\t\tif ( resolvedType.startsWith( 'ptr' ) ) {\n\n\t\t\t\tresolvedType = 'pointer';\n\n\t\t\t} else {\n\n\t\t\t\tif ( resolvedType.startsWith( 'texture' ) ) {\n\n\t\t\t\t\tresolvedType = type.split( '<' )[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tresolvedType = wgslTypeLib$1[ resolvedType ];\n\n\t\t\t}\n\n\t\t\tinputs.push( new NodeFunctionInput( resolvedType, name ) );\n\n\t\t}\n\n\t\tconst blockCode = source.substring( declaration[ 0 ].length );\n\t\tconst outputType = declaration[ 3 ] || 'void';\n\n\t\tconst name = declaration[ 1 ] !== undefined ? declaration[ 1 ] : '';\n\t\tconst type = wgslTypeLib$1[ outputType ] || outputType;\n\n\t\treturn {\n\t\t\ttype,\n\t\t\tinputs,\n\t\t\tname,\n\t\t\tinputsCode,\n\t\t\tblockCode,\n\t\t\toutputType\n\t\t};\n\n\t} else {\n\n\t\tthrow new Error( 'FunctionNode: Function is not a WGSL code.' );\n\n\t}\n\n};\n\n/**\n * This class represents a WSL node function.\n *\n * @augments NodeFunction\n */\nclass WGSLNodeFunction extends NodeFunction {\n\n\t/**\n\t * Constructs a new WGSL node function.\n\t *\n\t * @param {string} source - The WGSL source.\n\t */\n\tconstructor( source ) {\n\n\t\tconst { type, inputs, name, inputsCode, blockCode, outputType } = parse( source );\n\n\t\tsuper( type, inputs, name );\n\n\t\tthis.inputsCode = inputsCode;\n\t\tthis.blockCode = blockCode;\n\t\tthis.outputType = outputType;\n\n\t}\n\n\t/**\n\t * This method returns the WGSL code of the node function.\n\t *\n\t * @param {string} [name=this.name] - The function's name.\n\t * @return {string} The shader code.\n\t */\n\tgetCode( name = this.name ) {\n\n\t\tconst outputType = this.outputType !== 'void' ? '-> ' + this.outputType : '';\n\n\t\treturn `fn ${ name } ( ${ this.inputsCode.trim() } ) ${ outputType }` + this.blockCode;\n\n\t}\n\n}\n\n/**\n * A WGSL node parser.\n *\n * @augments NodeParser\n */\nclass WGSLNodeParser extends NodeParser {\n\n\t/**\n\t * The method parses the given WGSL code an returns a node function.\n\t *\n\t * @param {string} source - The WGSL code.\n\t * @return {WGSLNodeFunction} A node function.\n\t */\n\tparseFunction( source ) {\n\n\t\treturn new WGSLNodeFunction( source );\n\n\t}\n\n}\n\nconst accessNames = {\n\t[ NodeAccess.READ_ONLY ]: 'read',\n\t[ NodeAccess.WRITE_ONLY ]: 'write',\n\t[ NodeAccess.READ_WRITE ]: 'read_write'\n};\n\nconst wrapNames = {\n\t[ RepeatWrapping ]: 'repeat',\n\t[ ClampToEdgeWrapping ]: 'clamp',\n\t[ MirroredRepeatWrapping ]: 'mirror'\n};\n\nconst gpuShaderStageLib = {\n\t'vertex': GPUShaderStage.VERTEX,\n\t'fragment': GPUShaderStage.FRAGMENT,\n\t'compute': GPUShaderStage.COMPUTE\n};\n\nconst supports = {\n\tinstance: true,\n\tswizzleAssign: false,\n\tstorageBuffer: true\n};\n\nconst wgslFnOpLib = {\n\t'^^': 'tsl_xor'\n};\n\nconst wgslTypeLib = {\n\tfloat: 'f32',\n\tint: 'i32',\n\tuint: 'u32',\n\tbool: 'bool',\n\tcolor: 'vec3<f32>',\n\n\tvec2: 'vec2<f32>',\n\tivec2: 'vec2<i32>',\n\tuvec2: 'vec2<u32>',\n\tbvec2: 'vec2<bool>',\n\n\tvec3: 'vec3<f32>',\n\tivec3: 'vec3<i32>',\n\tuvec3: 'vec3<u32>',\n\tbvec3: 'vec3<bool>',\n\n\tvec4: 'vec4<f32>',\n\tivec4: 'vec4<i32>',\n\tuvec4: 'vec4<u32>',\n\tbvec4: 'vec4<bool>',\n\n\tmat2: 'mat2x2<f32>',\n\tmat3: 'mat3x3<f32>',\n\tmat4: 'mat4x4<f32>'\n};\n\nconst wgslCodeCache = {};\n\nconst wgslPolyfill = {\n\ttsl_xor: new CodeNode( 'fn tsl_xor( a : bool, b : bool ) -> bool { return ( a || b ) && !( a && b ); }' ),\n\tmod_float: new CodeNode( 'fn tsl_mod_float( x : f32, y : f32 ) -> f32 { return x - y * floor( x / y ); }' ),\n\tmod_vec2: new CodeNode( 'fn tsl_mod_vec2( x : vec2f, y : vec2f ) -> vec2f { return x - y * floor( x / y ); }' ),\n\tmod_vec3: new CodeNode( 'fn tsl_mod_vec3( x : vec3f, y : vec3f ) -> vec3f { return x - y * floor( x / y ); }' ),\n\tmod_vec4: new CodeNode( 'fn tsl_mod_vec4( x : vec4f, y : vec4f ) -> vec4f { return x - y * floor( x / y ); }' ),\n\tequals_bool: new CodeNode( 'fn tsl_equals_bool( a : bool, b : bool ) -> bool { return a == b; }' ),\n\tequals_bvec2: new CodeNode( 'fn tsl_equals_bvec2( a : vec2f, b : vec2f ) -> vec2<bool> { return vec2<bool>( a.x == b.x, a.y == b.y ); }' ),\n\tequals_bvec3: new CodeNode( 'fn tsl_equals_bvec3( a : vec3f, b : vec3f ) -> vec3<bool> { return vec3<bool>( a.x == b.x, a.y == b.y, a.z == b.z ); }' ),\n\tequals_bvec4: new CodeNode( 'fn tsl_equals_bvec4( a : vec4f, b : vec4f ) -> vec4<bool> { return vec4<bool>( a.x == b.x, a.y == b.y, a.z == b.z, a.w == b.w ); }' ),\n\trepeatWrapping_float: new CodeNode( 'fn tsl_repeatWrapping_float( coord: f32 ) -> f32 { return fract( coord ); }' ),\n\tmirrorWrapping_float: new CodeNode( 'fn tsl_mirrorWrapping_float( coord: f32 ) -> f32 { let mirrored = fract( coord * 0.5 ) * 2.0; return 1.0 - abs( 1.0 - mirrored ); }' ),\n\tclampWrapping_float: new CodeNode( 'fn tsl_clampWrapping_float( coord: f32 ) -> f32 { return clamp( coord, 0.0, 1.0 ); }' ),\n\tbiquadraticTexture: new CodeNode( /* wgsl */`\nfn tsl_biquadraticTexture( map : texture_2d<f32>, coord : vec2f, iRes : vec2u, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n` ),\n\tbiquadraticTextureArray: new CodeNode( /* wgsl */`\nfn tsl_biquadraticTexture_array( map : texture_2d_array<f32>, coord : vec2f, iRes : vec2u, layer : u32, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, layer, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, layer, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n` )\n};\n\nconst wgslMethods = {\n\tdFdx: 'dpdx',\n\tdFdy: '- dpdy',\n\tmod_float: 'tsl_mod_float',\n\tmod_vec2: 'tsl_mod_vec2',\n\tmod_vec3: 'tsl_mod_vec3',\n\tmod_vec4: 'tsl_mod_vec4',\n\tequals_bool: 'tsl_equals_bool',\n\tequals_bvec2: 'tsl_equals_bvec2',\n\tequals_bvec3: 'tsl_equals_bvec3',\n\tequals_bvec4: 'tsl_equals_bvec4',\n\tinversesqrt: 'inverseSqrt',\n\tbitcast: 'bitcast<f32>',\n\tfloatpack_snorm_2x16: 'pack2x16snorm',\n\tfloatpack_unorm_2x16: 'pack2x16unorm',\n\tfloatpack_float16_2x16: 'pack2x16float',\n\tfloatunpack_snorm_2x16: 'unpack2x16snorm',\n\tfloatunpack_unorm_2x16: 'unpack2x16unorm',\n\tfloatunpack_float16_2x16: 'unpack2x16float'\n};\n\n//\n\nlet diagnostics = '';\n\nif ( ( typeof navigator !== 'undefined' && /Firefox|Deno/g.test( navigator.userAgent ) ) !== true ) {\n\n\tdiagnostics += 'diagnostic( off, derivative_uniformity );\\n';\n\n}\n\n/**\n * A node builder targeting WGSL.\n *\n * This module generates WGSL shader code from node materials and also\n * generates the respective bindings and vertex buffer definitions. These\n * data are later used by the renderer to create render and compute pipelines\n * for render objects.\n *\n * @augments NodeBuilder\n */\nclass WGSLNodeBuilder extends NodeBuilder {\n\n\t/**\n\t * Constructs a new WGSL node builder renderer.\n\t *\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Renderer} renderer - The renderer.\n\t */\n\tconstructor( object, renderer ) {\n\n\t\tsuper( object, renderer, new WGSLNodeParser() );\n\n\t\t/**\n\t\t * A dictionary that holds for each shader stage ('vertex', 'fragment', 'compute')\n\t\t * another dictionary which manages UBOs per group ('render','frame','object').\n\t\t *\n\t\t * @type {Object<string,Object<string,NodeUniformsGroup>>}\n\t\t */\n\t\tthis.uniformGroups = {};\n\n\t\t/**\n\t\t * A dictionary that holds the assigned binding indices for each uniform group.\n\t\t * This ensures the same binding index is used across all shader stages.\n\t\t *\n\t\t * @type {Object<string,{index: number, id: number}>}\n\t\t */\n\t\tthis.uniformGroupsBindings = {};\n\n\t\t/**\n\t\t * A dictionary that holds for each shader stage a Map of builtins.\n\t\t *\n\t\t * @type {Object<string,Map<string,Object>>}\n\t\t */\n\t\tthis.builtins = {};\n\n\t\t/**\n\t\t * A dictionary that holds for each shader stage a Set of directives.\n\t\t *\n\t\t * @type {Object<string,Set<string>>}\n\t\t */\n\t\tthis.directives = {};\n\n\t\t/**\n\t\t * A map for managing scope arrays. Only relevant for when using\n\t\t * {@link WorkgroupInfoNode} in context of compute shaders.\n\t\t *\n\t\t * @type {Map<string,Object>}\n\t\t */\n\t\tthis.scopedArrays = new Map();\n\n\t\t/**\n\t\t * A flag that indicates that early returns are allowed.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.allowEarlyReturns = true;\n\n\t\t/**\n\t\t * A flag that indicates that global variables are allowed.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.allowGlobalVariables = true;\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet for sampled textures.\n\t *\n\t * @private\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The WGSL snippet.\n\t */\n\t_generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {\n\n\t\tif ( shaderStage === 'fragment' ) {\n\n\t\t\tif ( depthSnippet ) {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet } )`;\n\n\t\t\t} else {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet } )`;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn this.generateTextureSampleLevel( texture, textureProperty, uvSnippet, '0', depthSnippet );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet when sampling textures with explicit mip level.\n\t *\n\t * @private\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.\n\t * @param {string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateTextureSampleLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {\n\n\t\tif ( this.isUnfilterable( texture ) === false ) {\n\n\t\t\tif ( depthSnippet ) {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ levelSnippet } )`;\n\n\t\t\t} else {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;\n\n\t\t\t}\n\n\t\t} else if ( this.isFilteredTexture( texture ) ) {\n\n\t\t\treturn this.generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet, depthSnippet );\n\n\t\t} else {\n\n\t\t\treturn this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Generates a wrap function used in context of textures.\n\t *\n\t * @param {Texture} texture - The texture to generate the function for.\n\t * @return {string} The name of the generated function.\n\t */\n\tgenerateWrapFunction( texture ) {\n\n\t\tconst functionName = `tsl_coord_${ wrapNames[ texture.wrapS ] }S_${ wrapNames[ texture.wrapT ] }_${ texture.is3DTexture || texture.isData3DTexture ? '3d' : '2d' }T`;\n\n\t\tlet nodeCode = wgslCodeCache[ functionName ];\n\n\t\tif ( nodeCode === undefined ) {\n\n\t\t\tconst includes = [];\n\n\t\t\t// For 3D textures, use vec3f; for texture arrays, keep vec2f since array index is separate\n\t\t\tconst coordType = texture.is3DTexture || texture.isData3DTexture ? 'vec3f' : 'vec2f';\n\t\t\tlet code = `fn ${ functionName }( coord : ${ coordType } ) -> ${ coordType } {\\n\\n\\treturn ${ coordType }(\\n`;\n\n\t\t\tconst addWrapSnippet = ( wrap, axis ) => {\n\n\t\t\t\tif ( wrap === RepeatWrapping ) {\n\n\t\t\t\t\tincludes.push( wgslPolyfill.repeatWrapping_float );\n\n\t\t\t\t\tcode += `\\t\\ttsl_repeatWrapping_float( coord.${ axis } )`;\n\n\t\t\t\t} else if ( wrap === ClampToEdgeWrapping ) {\n\n\t\t\t\t\tincludes.push( wgslPolyfill.clampWrapping_float );\n\n\t\t\t\t\tcode += `\\t\\ttsl_clampWrapping_float( coord.${ axis } )`;\n\n\t\t\t\t} else if ( wrap === MirroredRepeatWrapping ) {\n\n\t\t\t\t\tincludes.push( wgslPolyfill.mirrorWrapping_float );\n\n\t\t\t\t\tcode += `\\t\\ttsl_mirrorWrapping_float( coord.${ axis } )`;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcode += `\\t\\tcoord.${ axis }`;\n\n\t\t\t\t\twarn( `WebGPURenderer: Unsupported texture wrap type \"${ wrap }\" for vertex shader.` );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\taddWrapSnippet( texture.wrapS, 'x' );\n\n\t\t\tcode += ',\\n';\n\n\t\t\taddWrapSnippet( texture.wrapT, 'y' );\n\n\t\t\tif ( texture.is3DTexture || texture.isData3DTexture ) {\n\n\t\t\t\tcode += ',\\n';\n\t\t\t\taddWrapSnippet( texture.wrapR, 'z' );\n\n\t\t\t}\n\n\t\t\tcode += '\\n\\t);\\n\\n}\\n';\n\n\t\t\twgslCodeCache[ functionName ] = nodeCode = new CodeNode( code, includes );\n\n\t\t}\n\n\t\tnodeCode.build( this );\n\n\t\treturn functionName;\n\n\t}\n\n\t/**\n\t * Generates the array declaration string.\n\t *\n\t * @param {string} type - The type.\n\t * @param {?number} [count] - The count.\n\t * @return {string} The generated value as a shader string.\n\t */\n\tgenerateArrayDeclaration( type, count ) {\n\n\t\treturn `array< ${ this.getType( type ) }, ${ count } >`;\n\n\t}\n\n\t/**\n\t * Generates a WGSL variable that holds the texture dimension of the given texture.\n\t * It also returns information about the number of layers (elements) of an arrayed\n\t * texture as well as the cube face count of cube textures.\n\t *\n\t * @param {Texture} texture - The texture to generate the function for.\n\t * @param {string} textureProperty - The name of the video texture uniform in the shader.\n\t * @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.\n\t * @return {string} The name of the dimension variable.\n\t */\n\tgenerateTextureDimension( texture, textureProperty, levelSnippet ) {\n\n\t\tconst textureData = this.getDataFromNode( texture, this.shaderStage, this.cache );\n\n\t\tif ( textureData.dimensionsSnippet === undefined ) textureData.dimensionsSnippet = {};\n\n\t\tlet textureDimensionNode = textureData.dimensionsSnippet[ levelSnippet ];\n\n\t\tif ( textureData.dimensionsSnippet[ levelSnippet ] === undefined ) {\n\n\t\t\tlet textureDimensionsParams;\n\t\t\tlet dimensionType;\n\n\t\t\tconst { primarySamples } = this.renderer.backend.utils.getTextureSampleData( texture );\n\t\t\tconst isMultisampled = primarySamples > 1;\n\n\t\t\tif ( texture.is3DTexture || texture.isData3DTexture ) {\n\n\t\t\t\tdimensionType = 'vec3<u32>';\n\n\t\t\t} else {\n\n\t\t\t\t// Regular 2D textures, depth textures, etc.\n\t\t\t\tdimensionType = 'vec2<u32>';\n\n\t\t\t}\n\n\t\t\t// Build parameters string based on texture type and multisampling\n\t\t\tif ( isMultisampled || texture.isStorageTexture ) {\n\n\t\t\t\ttextureDimensionsParams = textureProperty;\n\n\t\t\t} else {\n\n\t\t\t\ttextureDimensionsParams = `${textureProperty}${levelSnippet ? `, u32( ${ levelSnippet } )` : ''}`;\n\n\t\t\t}\n\n\t\t\ttextureDimensionNode = new VarNode( new ExpressionNode( `textureDimensions( ${ textureDimensionsParams } )`, dimensionType ) );\n\n\t\t\ttextureData.dimensionsSnippet[ levelSnippet ] = textureDimensionNode;\n\n\t\t\tif ( texture.isArrayTexture || texture.isDataArrayTexture || texture.is3DTexture || texture.isData3DTexture ) {\n\n\t\t\t\ttextureData.arrayLayerCount = new VarNode(\n\t\t\t\t\tnew ExpressionNode(\n\t\t\t\t\t\t`textureNumLayers(${textureProperty})`,\n\t\t\t\t\t\t'u32'\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\t// For cube textures, we know it's always 6 faces\n\t\t\tif ( texture.isTextureCube ) {\n\n\t\t\t\ttextureData.cubeFaceCount = new VarNode(\n\t\t\t\t\tnew ExpressionNode( '6u', 'u32' )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textureDimensionNode.build( this );\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet for a manual filtered texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @param {string} [levelSnippet='0u'] - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet = '0u', depthSnippet ) {\n\n\t\tconst wrapFunction = this.generateWrapFunction( texture );\n\t\tconst textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );\n\n\t\tif ( offsetSnippet ) {\n\n\t\t\tuvSnippet = `${ uvSnippet } + vec2<f32>(${ offsetSnippet }) / ${ textureDimension }`;\n\n\t\t}\n\n\t\tif ( depthSnippet ) {\n\n\t\t\tthis._include( 'biquadraticTextureArray' );\n\n\t\t\treturn `tsl_biquadraticTexture_array( ${ textureProperty }, ${ wrapFunction }( ${ uvSnippet } ), ${ textureDimension }, u32( ${ depthSnippet } ), u32( ${ levelSnippet } ) )`;\n\n\t\t}\n\n\t\tthis._include( 'biquadraticTexture' );\n\n\t\treturn `tsl_biquadraticTexture( ${ textureProperty }, ${ wrapFunction }( ${ uvSnippet } ), ${ textureDimension }, u32( ${ levelSnippet } ) )`;\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet for a texture lookup with explicit level-of-detail.\n\t * Since it's a lookup, no sampling or filtering is applied.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @param {string} [levelSnippet='0u'] - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet = '0u' ) {\n\n\t\t// Cube textures cannot use textureLoad in WGSL, must use textureSampleLevel\n\t\tif ( texture.isCubeTexture === true ) {\n\n\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\tuvSnippet = `${ uvSnippet } + vec3<f32>(${ offsetSnippet })`;\n\n\t\t\t}\n\n\t\t\t// Depth textures require integer level, regular textures use float\n\t\t\tconst levelType = texture.isDepthTexture ? 'u32' : 'f32';\n\n\t\t\treturn `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelType }( ${ levelSnippet } ) )`;\n\n\t\t}\n\n\t\tconst wrapFunction = this.generateWrapFunction( texture );\n\t\tconst textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );\n\n\t\tconst vecType = texture.is3DTexture || texture.isData3DTexture ? 'vec3' : 'vec2';\n\t\tconst textureDimensionMargin = ( vecType === 'vec3' ) ? 'vec3<u32>( 1, 1, 1 )' : 'vec2<u32>( 1, 1 )';\n\n\t\tif ( offsetSnippet ) {\n\n\t\t\tuvSnippet = `${ uvSnippet } + ${ vecType }<f32>(${ offsetSnippet }) / ${ vecType }<f32>( ${ textureDimension } )`;\n\n\t\t}\n\n\t\tconst clampMin = `${ vecType }<f32>( 0 )`;\n\t\tconst clampMax = `${ vecType }<f32>( ${ textureDimension } - ${ textureDimensionMargin } )`;\n\n\t\tuvSnippet = `${ vecType }<u32>( clamp( floor( ${ wrapFunction }( ${ uvSnippet } ) * ${ vecType }<f32>( ${ textureDimension } ) ), ${ clampMin }, ${ clampMax } ) )`;\n\n\t\treturn this.generateTextureLoad( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, null );\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet that reads a single texel from a storage texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvIndexSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {?string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateStorageTextureLoad( texture, textureProperty, uvIndexSnippet, levelSnippet, depthSnippet, offsetSnippet ) {\n\n\t\tif ( offsetSnippet ) {\n\n\t\t\tuvIndexSnippet = `${ uvIndexSnippet } + ${ offsetSnippet }`;\n\n\t\t}\n\n\t\tlet snippet;\n\n\t\tif ( depthSnippet ) {\n\n\t\t\tsnippet = `textureLoad( ${ textureProperty }, ${ uvIndexSnippet }, ${ depthSnippet } )`;\n\n\t\t} else {\n\n\t\t\tsnippet = `textureLoad( ${ textureProperty }, ${ uvIndexSnippet } )`;\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet that reads a single texel from a texture without sampling or filtering.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvIndexSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {?string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateTextureLoad( texture, textureProperty, uvIndexSnippet, levelSnippet, depthSnippet, offsetSnippet ) {\n\n\t\tif ( levelSnippet === null ) levelSnippet = '0u';\n\n\t\tif ( offsetSnippet ) {\n\n\t\t\tuvIndexSnippet = `${ uvIndexSnippet } + ${ offsetSnippet }`;\n\n\t\t}\n\n\t\tlet snippet;\n\n\t\tif ( depthSnippet ) {\n\n\t\t\tsnippet = `textureLoad( ${ textureProperty }, ${ uvIndexSnippet }, ${ depthSnippet }, u32( ${ levelSnippet } ) )`;\n\n\t\t} else {\n\n\t\t\tsnippet = `textureLoad( ${ textureProperty }, ${ uvIndexSnippet }, u32( ${ levelSnippet } ) )`;\n\n\t\t\tif ( this.renderer.backend.compatibilityMode && texture.isDepthTexture ) {\n\n\t\t\t\tsnippet += '.x';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet that writes a single texel to a texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvIndexSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {string} valueSnippet - A WGSL snippet that represent the new texel value.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateTextureStore( texture, textureProperty, uvIndexSnippet, depthSnippet, valueSnippet ) {\n\n\t\tlet snippet;\n\n\t\tif ( depthSnippet ) {\n\n\t\t\tsnippet = `textureStore( ${ textureProperty }, ${ uvIndexSnippet }, ${ depthSnippet }, ${ valueSnippet } )`;\n\n\t\t} else {\n\n\t\t\tsnippet = `textureStore( ${ textureProperty }, ${ uvIndexSnippet }, ${ valueSnippet } )`;\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Returns `true` if the sampled values of the given texture should be compared against a reference value.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @return {boolean} Whether the sampled values of the given texture should be compared against a reference value or not.\n\t */\n\tisSampleCompare( texture ) {\n\n\t\treturn texture.isDepthTexture === true && texture.compareFunction !== null && this.renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE );\n\n\t}\n\n\t/**\n\t * Returns `true` if the given texture is unfilterable.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @return {boolean} Whether the given texture is unfilterable or not.\n\t */\n\tisUnfilterable( texture ) {\n\n\t\treturn this.getComponentTypeFromTexture( texture ) !== 'float' ||\n\t\t\t( ! this.isAvailable( 'float32Filterable' ) && texture.type === FloatType ) ||\n\t\t\t( this.isSampleCompare( texture ) === false && texture.minFilter === NearestFilter && texture.magFilter === NearestFilter ) ||\n\t\t\tthis.renderer.backend.utils.getTextureSampleData( texture ).primarySamples > 1;\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet for sampling/loading the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {\n\n\t\tlet snippet = null;\n\n\t\tif ( this.isUnfilterable( texture ) ) {\n\n\t\t\tsnippet = this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, '0', shaderStage );\n\n\t\t} else {\n\n\t\t\tsnippet = this._generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage );\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet for sampling/loading the given texture using explicit gradients.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {Array<string>} gradSnippet - An array holding both gradient WGSL snippets.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {\n\n\t\tif ( shaderStage === 'fragment' ) {\n\n\t\t\tif ( depthSnippet ) {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;\n\n\t\t\t} else {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\terror( `WebGPURenderer: THREE.TextureNode.gradient() does not support ${ shaderStage } shader.` );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet for sampling a depth texture and comparing the sampled depth values\n\t * against a reference value.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {string} compareSnippet -  A WGSL snippet that represents the reference value.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {\n\n\t\tif ( shaderStage === 'fragment' ) {\n\n\t\t\tif ( texture.isDepthTexture === true && texture.isArrayTexture === true ) {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } )`;\n\n\t\t\t}\n\n\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\treturn `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ compareSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t}\n\n\t\t\treturn `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ compareSnippet } )`;\n\n\t\t} else {\n\n\t\t\terror( `WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${ shaderStage } shader.` );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet when sampling textures with explicit mip level.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {\n\n\t\tif ( this.isUnfilterable( texture ) === false ) {\n\n\t\t\tif ( depthSnippet ) {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ levelSnippet } )`;\n\n\t\t\t} else {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;\n\n\t\t\t}\n\n\t\t} else if ( this.isFilteredTexture( texture ) ) {\n\n\t\t\treturn this.generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet, depthSnippet );\n\n\t\t} else {\n\n\t\t\treturn this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Generates the WGSL snippet when sampling textures with a bias to the mip level.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {string} textureProperty - The name of the texture uniform in the shader.\n\t * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.\n\t * @param {string} biasSnippet - A WGSL snippet that represents the bias to apply to the mip level before sampling.\n\t * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.\n\t * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The WGSL snippet.\n\t */\n\tgenerateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {\n\n\t\tif ( shaderStage === 'fragment' ) {\n\n\t\t\tif ( depthSnippet ) {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ biasSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ biasSnippet } )`;\n\n\t\t\t} else {\n\n\t\t\t\tif ( offsetSnippet ) {\n\n\t\t\t\t\treturn `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ biasSnippet }, ${ offsetSnippet } )`;\n\n\t\t\t\t}\n\n\t\t\t\treturn `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ biasSnippet } )`;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\terror( `WebGPURenderer: THREE.TextureNode.biasNode does not support ${ shaderStage } shader.` );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a WGSL snippet that represents the property name of the given node.\n\t *\n\t * @param {Node} node - The node.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The property name.\n\t */\n\tgetPropertyName( node, shaderStage = this.shaderStage ) {\n\n\t\tif ( node.isNodeVarying === true && node.needsInterpolation === true ) {\n\n\t\t\tif ( shaderStage === 'vertex' ) {\n\n\t\t\t\treturn `varyings.${ node.name }`;\n\n\t\t\t}\n\n\t\t} else if ( node.isNodeUniform === true ) {\n\n\t\t\tconst name = node.name;\n\t\t\tconst type = node.type;\n\n\t\t\tif ( type === 'texture' || type === 'cubeTexture' || type === 'cubeDepthTexture' || type === 'storageTexture' || type === 'texture3D' ) {\n\n\t\t\t\treturn name;\n\n\t\t\t} else if ( type === 'buffer' || type === 'storageBuffer' || type === 'indirectStorageBuffer' ) {\n\n\t\t\t\tif ( this.isCustomStruct( node ) ) {\n\n\t\t\t\t\treturn name;\n\n\t\t\t\t}\n\n\t\t\t\treturn name + '.value';\n\n\t\t\t} else {\n\n\t\t\t\treturn node.groupNode.name + '.' + name;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn super.getPropertyName( node );\n\n\t}\n\n\t/**\n\t * Returns the output struct name.\n\t *\n\t * @return {string} The name of the output struct.\n\t */\n\tgetOutputStructName() {\n\n\t\treturn 'output';\n\n\t}\n\n\t/**\n\t * Returns the native shader operator name for a given generic name.\n\t *\n\t * @param {string} op - The operator name to resolve.\n\t * @return {?string} The resolved operator name.\n\t */\n\tgetFunctionOperator( op ) {\n\n\t\tconst fnOp = wgslFnOpLib[ op ];\n\n\t\tif ( fnOp !== undefined ) {\n\n\t\t\tthis._include( fnOp );\n\n\t\t\treturn fnOp;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Returns the node access for the given node and shader stage.\n\t *\n\t * @param {StorageTextureNode|StorageBufferNode} node - The storage node.\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The node access.\n\t */\n\tgetNodeAccess( node, shaderStage ) {\n\n\t\tif ( shaderStage !== 'compute' ) {\n\n\t\t\tif ( node.isAtomic === true ) {\n\n\t\t\t\twarn( 'WebGPURenderer: Atomic operations are only supported in compute shaders.' );\n\n\t\t\t\treturn NodeAccess.READ_WRITE;\n\n\t\t\t}\n\n\t\t\treturn NodeAccess.READ_ONLY;\n\n\t\t}\n\n\t\treturn node.access;\n\n\t}\n\n\t/**\n\t * Returns A WGSL snippet representing the storage access.\n\t *\n\t * @param {StorageTextureNode|StorageBufferNode} node - The storage node.\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The WGSL snippet representing the storage access.\n\t */\n\tgetStorageAccess( node, shaderStage ) {\n\n\t\treturn accessNames[ this.getNodeAccess( node, shaderStage ) ];\n\n\t}\n\n\t/**\n\t * This method is one of the more important ones since it's responsible\n\t * for generating a matching binding instance for the given uniform node.\n\t *\n\t * These bindings are later used in the renderer to create bind groups\n\t * and layouts.\n\t *\n\t * @param {UniformNode} node - The uniform node.\n\t * @param {string} type - The node data type.\n\t * @param {string} shaderStage - The shader stage.\n\t * @param {?string} [name=null] - An optional uniform name.\n\t * @return {NodeUniform} The node uniform object.\n\t */\n\tgetUniformFromNode( node, type, shaderStage, name = null ) {\n\n\t\tconst uniformNode = super.getUniformFromNode( node, type, shaderStage, name );\n\t\tconst nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );\n\n\t\tif ( nodeData.uniformGPU === undefined ) {\n\n\t\t\tlet uniformGPU;\n\n\t\t\tconst group = node.groupNode;\n\t\t\tconst groupName = group.name;\n\n\t\t\tconst bindings = this.getBindGroupArray( groupName, shaderStage );\n\n\t\t\tif ( type === 'texture' || type === 'cubeTexture' || type === 'cubeDepthTexture' || type === 'storageTexture' || type === 'texture3D' ) {\n\n\t\t\t\tlet texture = null;\n\n\t\t\t\tconst access = this.getNodeAccess( node, shaderStage );\n\n\t\t\t\tif ( type === 'texture' || type === 'storageTexture' ) {\n\n\t\t\t\t\tif ( node.value.is3DTexture === true ) {\n\n\t\t\t\t\t\ttexture = new NodeSampledTexture3D( uniformNode.name, uniformNode.node, group, access );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new NodeSampledTexture( uniformNode.name, uniformNode.node, group, access );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( type === 'cubeTexture' || type === 'cubeDepthTexture' ) {\n\n\t\t\t\t\ttexture = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group, access );\n\n\t\t\t\t} else if ( type === 'texture3D' ) {\n\n\t\t\t\t\ttexture = new NodeSampledTexture3D( uniformNode.name, uniformNode.node, group, access );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.store = node.isStorageTextureNode === true;\n\t\t\t\ttexture.mipLevel = texture.store ? node.mipLevel : 0;\n\t\t\t\ttexture.setVisibility( gpuShaderStageLib[ shaderStage ] );\n\n\t\t\t\t// Cube textures always need samplers (they use textureSampleLevel, not textureLoad)\n\t\t\t\tconst needsSampler = node.value.isCubeTexture === true || ( this.isUnfilterable( node.value ) === false && texture.store === false );\n\n\t\t\t\tif ( needsSampler ) {\n\n\t\t\t\t\tconst sampler = new NodeSampler( `${ uniformNode.name }_sampler`, uniformNode.node, group );\n\t\t\t\t\tsampler.setVisibility( gpuShaderStageLib[ shaderStage ] );\n\n\t\t\t\t\tbindings.push( sampler, texture );\n\n\t\t\t\t\tuniformGPU = [ sampler, texture ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbindings.push( texture );\n\n\t\t\t\t\tuniformGPU = [ texture ];\n\n\t\t\t\t}\n\n\t\t\t} else if ( type === 'buffer' || type === 'storageBuffer' || type === 'indirectStorageBuffer' ) {\n\n\t\t\t\tconst sharedData = this.getSharedDataFromNode( node );\n\n\t\t\t\tlet buffer = sharedData.buffer;\n\n\t\t\t\tif ( buffer === undefined ) {\n\n\t\t\t\t\tconst bufferClass = type === 'buffer' ? NodeUniformBuffer : NodeStorageBuffer;\n\n\t\t\t\t\tbuffer = new bufferClass( node, group );\n\n\t\t\t\t\tsharedData.buffer = buffer;\n\n\t\t\t\t}\n\n\t\t\t\tbuffer.setVisibility( buffer.getVisibility() | gpuShaderStageLib[ shaderStage ] );\n\n\t\t\t\tbindings.push( buffer );\n\n\t\t\t\tuniformGPU = buffer;\n\n\t\t\t\tuniformNode.name = name ? name : 'NodeBuffer_' + uniformNode.id;\n\n\t\t\t} else {\n\n\t\t\t\tlet uniformsGroup = this.uniformGroups[ groupName ];\n\n\t\t\t\tif ( uniformsGroup === undefined ) {\n\n\t\t\t\t\tuniformsGroup = new NodeUniformsGroup( groupName, group );\n\t\t\t\t\tuniformsGroup.setVisibility( GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT | GPUShaderStage.COMPUTE );\n\n\t\t\t\t\tthis.uniformGroups[ groupName ] = uniformsGroup;\n\n\t\t\t\t}\n\n\t\t\t\t// Add to bindings for this stage if not already present\n\t\t\t\tif ( bindings.indexOf( uniformsGroup ) === -1 ) {\n\n\t\t\t\t\tbindings.push( uniformsGroup );\n\n\t\t\t\t}\n\n\t\t\t\tuniformGPU = this.getNodeUniform( uniformNode, type );\n\n\t\t\t\t// Only add uniform if not already present in the group (check by name to avoid duplicates across stages)\n\t\t\t\tconst uniformName = uniformGPU.name;\n\t\t\t\tconst alreadyExists = uniformsGroup.uniforms.some( u => u.name === uniformName );\n\n\t\t\t\tif ( ! alreadyExists ) {\n\n\t\t\t\t\tuniformsGroup.addUniform( uniformGPU );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tnodeData.uniformGPU = uniformGPU;\n\n\t\t}\n\n\t\treturn uniformNode;\n\n\t}\n\n\t/**\n\t * This method should be used whenever builtins are required in nodes.\n\t * The internal builtins data structure will make sure builtins are\n\t * defined in the WGSL source.\n\t *\n\t * @param {string} name - The builtin name.\n\t * @param {string} property - The property name.\n\t * @param {string} type - The node data type.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {string} The property name.\n\t */\n\tgetBuiltin( name, property, type, shaderStage = this.shaderStage ) {\n\n\t\tconst map = this.builtins[ shaderStage ] || ( this.builtins[ shaderStage ] = new Map() );\n\n\t\tif ( map.has( name ) === false ) {\n\n\t\t\tmap.set( name, {\n\t\t\t\tname,\n\t\t\t\tproperty,\n\t\t\t\ttype\n\t\t\t} );\n\n\t\t}\n\n\t\treturn property;\n\n\t}\n\n\t/**\n\t * Returns `true` if the given builtin is defined in the given shader stage.\n\t *\n\t * @param {string} name - The builtin name.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.\n\t * @return {boolean} Whether the given builtin is defined in the given shader stage or not.\n\t */\n\thasBuiltin( name, shaderStage = this.shaderStage ) {\n\n\t\treturn ( this.builtins[ shaderStage ] !== undefined && this.builtins[ shaderStage ].has( name ) );\n\n\t}\n\n\t/**\n\t * Returns the vertex index builtin.\n\t *\n\t * @return {string} The vertex index.\n\t */\n\tgetVertexIndex() {\n\n\t\tif ( this.shaderStage === 'vertex' ) {\n\n\t\t\treturn this.getBuiltin( 'vertex_index', 'vertexIndex', 'u32', 'attribute' );\n\n\t\t}\n\n\t\treturn 'vertexIndex';\n\n\t}\n\n\t/**\n\t * Builds the given shader node.\n\t *\n\t * @param {ShaderNodeInternal} shaderNode - The shader node.\n\t * @return {string} The WGSL function code.\n\t */\n\tbuildFunctionCode( shaderNode ) {\n\n\t\tconst layout = shaderNode.layout;\n\t\tconst flowData = this.flowShaderNode( shaderNode );\n\n\t\tconst parameters = [];\n\n\t\tfor ( const input of layout.inputs ) {\n\n\t\t\tparameters.push( input.name + ' : ' + this.getType( input.type ) );\n\n\t\t}\n\n\t\t//\n\n\t\tlet code = `fn ${ layout.name }( ${ parameters.join( ', ' ) } ) -> ${ this.getType( layout.type ) } {\n${ flowData.vars }\n${ flowData.code }\n`;\n\n\t\tif ( flowData.result ) {\n\n\t\t\tcode += `\\treturn ${ flowData.result };\\n`;\n\n\t\t}\n\n\t\tcode += '\\n}\\n';\n\n\t\t//\n\n\t\treturn code;\n\n\t}\n\n\t/**\n\t * Contextually returns either the vertex stage instance index builtin\n\t * or the linearized index of an compute invocation within a grid of workgroups.\n\t *\n\t * @return {string} The instance index.\n\t */\n\tgetInstanceIndex() {\n\n\t\tif ( this.shaderStage === 'vertex' ) {\n\n\t\t\treturn this.getBuiltin( 'instance_index', 'instanceIndex', 'u32', 'attribute' );\n\n\t\t}\n\n\t\treturn 'instanceIndex';\n\n\t}\n\n\n\t/**\n\t * Returns a builtin representing the index of a compute invocation within the scope of a workgroup load.\n\t *\n\t * @return {string} The invocation local index.\n\t */\n\tgetInvocationLocalIndex() {\n\n\t\treturn this.getBuiltin( 'local_invocation_index', 'invocationLocalIndex', 'u32', 'attribute' );\n\n\t}\n\n\t/**\n\t * Returns a builtin representing the size of a subgroup within the current shader.\n\t *\n\t * @return {string} The subgroup size.\n\t */\n\tgetSubgroupSize() {\n\n\t\tthis.enableSubGroups();\n\n\t\treturn this.getBuiltin( 'subgroup_size', 'subgroupSize', 'u32', 'attribute' );\n\n\t}\n\n\t/**\n\t * Returns a builtin representing the index of a compute invocation within the scope of a subgroup.\n\t *\n\t * @return {string} The invocation subgroup index.\n\t */\n\tgetInvocationSubgroupIndex() {\n\n\t\tthis.enableSubGroups();\n\n\t\treturn this.getBuiltin( 'subgroup_invocation_id', 'invocationSubgroupIndex', 'u32', 'attribute' );\n\n\t}\n\n\t/**\n\t * Returns a builtin representing the index of a compute invocation's subgroup within its workgroup.\n\t *\n\t * @return {string} The subgroup index.\n\t */\n\tgetSubgroupIndex() {\n\n\t\tthis.enableSubGroups();\n\n\t\treturn this.getBuiltin( 'subgroup_id', 'subgroupIndex', 'u32', 'attribute' );\n\n\t}\n\n\t/**\n\t * Overwritten as a NOP since this method is intended for the WebGL 2 backend.\n\t *\n\t * @return {null} Null.\n\t */\n\tgetDrawIndex() {\n\n\t\treturn null;\n\n\t}\n\n\t/**\n\t * Returns the front facing builtin.\n\t *\n\t * @return {string} The front facing builtin.\n\t */\n\tgetFrontFacing() {\n\n\t\treturn this.getBuiltin( 'front_facing', 'isFront', 'bool' );\n\n\t}\n\n\t/**\n\t * Returns the frag coord builtin.\n\t *\n\t * @return {string} The frag coord builtin.\n\t */\n\tgetFragCoord() {\n\n\t\treturn this.getBuiltin( 'position', 'fragCoord', 'vec4<f32>' ) + '.xy';\n\n\t}\n\n\t/**\n\t * Returns the frag depth builtin.\n\t *\n\t * @return {string} The frag depth builtin.\n\t */\n\tgetFragDepth() {\n\n\t\treturn 'output.' + this.getBuiltin( 'frag_depth', 'depth', 'f32', 'output' );\n\n\t}\n\n\t/**\n\t * Returns the clip distances builtin.\n\t *\n\t * @return {string} The clip distances builtin.\n\t */\n\tgetClipDistance() {\n\n\t\treturn 'varyings.hw_clip_distances';\n\n\t}\n\n\t/**\n\t * Whether to flip texture data along its vertical axis or not.\n\t *\n\t * @return {boolean} Returns always `false` in context of WGSL.\n\t */\n\tisFlipY() {\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Enables the given directive for the given shader stage.\n\t *\n\t * @param {string} name - The directive name.\n\t * @param {string} [shaderStage=this.shaderStage] - The shader stage to enable the directive for.\n\t */\n\tenableDirective( name, shaderStage = this.shaderStage ) {\n\n\t\tconst stage = this.directives[ shaderStage ] || ( this.directives[ shaderStage ] = new Set() );\n\t\tstage.add( name );\n\n\t}\n\n\t/**\n\t * Returns the directives of the given shader stage as a WGSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} A WGSL snippet that enables the directives of the given stage.\n\t */\n\tgetDirectives( shaderStage ) {\n\n\t\tconst snippets = [];\n\t\tconst directives = this.directives[ shaderStage ];\n\n\t\tif ( directives !== undefined ) {\n\n\t\t\tfor ( const directive of directives ) {\n\n\t\t\t\tsnippets.push( `enable ${directive};` );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn snippets.join( '\\n' );\n\n\t}\n\n\t/**\n\t * Enables the 'subgroups' directive.\n\t */\n\tenableSubGroups() {\n\n\t\tthis.enableDirective( 'subgroups' );\n\n\t}\n\n\t/**\n\t * Enables the 'subgroups-f16' directive.\n\t */\n\tenableSubgroupsF16() {\n\n\t\tthis.enableDirective( 'subgroups-f16' );\n\n\t}\n\n\t/**\n\t * Enables the 'clip_distances' directive.\n\t */\n\tenableClipDistances() {\n\n\t\tthis.enableDirective( 'clip_distances' );\n\n\t}\n\n\t/**\n\t * Enables the 'f16' directive.\n\t */\n\tenableShaderF16() {\n\n\t\tthis.enableDirective( 'f16' );\n\n\t}\n\n\t/**\n\t * Enables the 'dual_source_blending' directive.\n\t */\n\tenableDualSourceBlending() {\n\n\t\tthis.enableDirective( 'dual_source_blending' );\n\n\t}\n\n\t/**\n\t * Enables hardware clipping.\n\t *\n\t * @param {string} planeCount - The clipping plane count.\n\t */\n\tenableHardwareClipping( planeCount ) {\n\n\t\tthis.enableClipDistances();\n\t\tthis.getBuiltin( 'clip_distances', 'hw_clip_distances', `array<f32, ${ planeCount } >`, 'vertex' );\n\n\t}\n\n\t/**\n\t * Returns the builtins of the given shader stage as a WGSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} A WGSL snippet that represents the builtins of the given stage.\n\t */\n\tgetBuiltins( shaderStage ) {\n\n\t\tconst snippets = [];\n\t\tconst builtins = this.builtins[ shaderStage ];\n\n\t\tif ( builtins !== undefined ) {\n\n\t\t\tfor ( const { name, property, type } of builtins.values() ) {\n\n\t\t\t\tsnippets.push( `@builtin( ${name} ) ${property} : ${type}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn snippets.join( ',\\n\\t' );\n\n\t}\n\n\t/**\n\t * This method should be used when a new scoped buffer is used in context of\n\t * compute shaders. It adds the array to the internal data structure which is\n\t * later used to generate the respective WGSL.\n\t *\n\t * @param {string} name - The array name.\n\t * @param {string} scope - The scope.\n\t * @param {string} bufferType - The buffer type.\n\t * @param {string} bufferCount - The buffer count.\n\t * @return {string} The array name.\n\t */\n\tgetScopedArray( name, scope, bufferType, bufferCount ) {\n\n\t\tif ( this.scopedArrays.has( name ) === false ) {\n\n\t\t\tthis.scopedArrays.set( name, {\n\t\t\t\tname,\n\t\t\t\tscope,\n\t\t\t\tbufferType,\n\t\t\t\tbufferCount\n\t\t\t} );\n\n\t\t}\n\n\t\treturn name;\n\n\t}\n\n\t/**\n\t * Returns the scoped arrays of the given shader stage as a WGSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string|undefined} The WGSL snippet that defines the scoped arrays.\n\t * Returns `undefined` when used in the vertex or fragment stage.\n\t */\n\tgetScopedArrays( shaderStage ) {\n\n\t\tif ( shaderStage !== 'compute' ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst snippets = [];\n\n\t\tfor ( const { name, scope, bufferType, bufferCount } of this.scopedArrays.values() ) {\n\n\t\t\tconst type = this.getType( bufferType );\n\n\t\t\tsnippets.push( `var<${scope}> ${name}: array< ${type}, ${bufferCount} >;` );\n\n\t\t}\n\n\t\treturn snippets.join( '\\n' );\n\n\t}\n\n\t/**\n\t * Returns the shader attributes of the given shader stage as a WGSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The WGSL snippet that defines the shader attributes.\n\t */\n\tgetAttributes( shaderStage ) {\n\n\t\tconst snippets = [];\n\n\t\tif ( shaderStage === 'compute' ) {\n\n\t\t\tthis.getBuiltin( 'global_invocation_id', 'globalId', 'vec3<u32>', 'attribute' );\n\t\t\tthis.getBuiltin( 'workgroup_id', 'workgroupId', 'vec3<u32>', 'attribute' );\n\t\t\tthis.getBuiltin( 'local_invocation_id', 'localId', 'vec3<u32>', 'attribute' );\n\t\t\tthis.getBuiltin( 'num_workgroups', 'numWorkgroups', 'vec3<u32>', 'attribute' );\n\n\t\t\tif ( this.renderer.hasFeature( 'subgroups' ) ) {\n\n\t\t\t\tthis.enableDirective( 'subgroups', shaderStage );\n\t\t\t\tthis.getBuiltin( 'subgroup_size', 'subgroupSize', 'u32', 'attribute' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( shaderStage === 'vertex' || shaderStage === 'compute' ) {\n\n\t\t\tconst builtins = this.getBuiltins( 'attribute' );\n\n\t\t\tif ( builtins ) snippets.push( builtins );\n\n\t\t\tconst attributes = this.getAttributesArray();\n\n\t\t\tfor ( let index = 0, length = attributes.length; index < length; index ++ ) {\n\n\t\t\t\tconst attribute = attributes[ index ];\n\t\t\t\tconst name = attribute.name;\n\t\t\t\tconst type = this.getType( attribute.type );\n\n\t\t\t\tsnippets.push( `@location( ${index} ) ${ name } : ${ type }` );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn snippets.join( ',\\n\\t' );\n\n\t}\n\n\t/**\n\t * Returns the members of the given struct type node as a WGSL string.\n\t *\n\t * @param {StructTypeNode} struct - The struct type node.\n\t * @return {string} The WGSL snippet that defines the struct members.\n\t */\n\tgetStructMembers( struct ) {\n\n\t\tconst snippets = [];\n\n\t\tfor ( const member of struct.members ) {\n\n\t\t\tconst prefix = struct.output ? '@location( ' + member.index + ' ) ' : '';\n\n\t\t\tlet type = this.getType( member.type );\n\n\t\t\tif ( member.atomic ) {\n\n\t\t\t\ttype = 'atomic< ' + type + ' >';\n\n\t\t\t}\n\n\t\t\tsnippets.push( `\\t${ prefix + member.name } : ${ type }` );\n\n\t\t}\n\n\t\tif ( struct.output ) {\n\n\t\t\tsnippets.push( `\\t${ this.getBuiltins( 'output' ) }` );\n\n\t\t}\n\n\t\treturn snippets.join( ',\\n' );\n\n\t}\n\n\t/**\n\t * Returns the structs of the given shader stage as a WGSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The WGSL snippet that defines the structs.\n\t */\n\tgetStructs( shaderStage ) {\n\n\t\tlet result = '';\n\n\t\tconst structs = this.structs[ shaderStage ];\n\n\t\tif ( structs.length > 0 ) {\n\n\t\t\tconst snippets = [];\n\n\t\t\tfor ( const struct of structs ) {\n\n\t\t\t\tlet snippet = `struct ${ struct.name } {\\n`;\n\t\t\t\tsnippet += this.getStructMembers( struct );\n\t\t\t\tsnippet += '\\n};';\n\n\t\t\t\tsnippets.push( snippet );\n\n\t\t\t}\n\n\t\t\tresult = '\\n' + snippets.join( '\\n\\n' ) + '\\n';\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Returns a WGSL string representing a variable.\n\t *\n\t * @param {string} type - The variable's type.\n\t * @param {string} name - The variable's name.\n\t * @param {?number} [count=null] - The array length.\n\t * @param {string} [qualifier=''] - The variable's qualifier.\n\t * @return {string} The WGSL snippet that defines a variable.\n\t */\n\tgetVar( type, name, count = null, qualifier = '' ) {\n\n\t\tlet snippet = `var${ qualifier } ${ name } : `;\n\n\t\tif ( count !== null ) {\n\n\t\t\tsnippet += this.generateArrayDeclaration( type, count );\n\n\t\t} else {\n\n\t\t\tsnippet += this.getType( type );\n\n\t\t}\n\n\t\treturn snippet;\n\n\t}\n\n\t/**\n\t * Returns the variables of the given shader stage as a WGSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The WGSL snippet that defines the variables.\n\t */\n\tgetVars( shaderStage, global = false ) {\n\n\t\tlet qualifier = '';\n\n\t\tif ( global ) {\n\n\t\t\tqualifier = '<private>';\n\n\t\t}\n\n\t\tconst snippets = [];\n\t\tconst vars = this.vars[ shaderStage ];\n\n\t\tif ( vars !== undefined ) {\n\n\t\t\tfor ( const variable of vars ) {\n\n\t\t\t\tsnippets.push( `${ this.getVar( variable.type, variable.name, variable.count, qualifier ) };` );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn global ? snippets.join( '\\n' ) : `\\n\\t${ snippets.join( '\\n\\t' ) }\\n`;\n\n\t}\n\n\t/**\n\t * Returns the varyings of the given shader stage as a WGSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The WGSL snippet that defines the varyings.\n\t */\n\tgetVaryings( shaderStage ) {\n\n\t\tconst snippets = [];\n\n\t\tif ( shaderStage === 'vertex' ) {\n\n\t\t\tthis.getBuiltin( 'position', 'builtinClipSpace', 'vec4<f32>', 'vertex' );\n\n\t\t}\n\n\t\tif ( shaderStage === 'vertex' || shaderStage === 'fragment' ) {\n\n\t\t\tconst varyings = this.varyings;\n\t\t\tconst vars = this.vars[ shaderStage ];\n\n\t\t\tlet varyingIndex = 0;\n\n\t\t\tfor ( let index = 0; index < varyings.length; index ++ ) {\n\n\t\t\t\tconst varying = varyings[ index ];\n\n\t\t\t\tif ( varying.needsInterpolation ) {\n\n\t\t\t\t\tlet attributesSnippet = `@location( ${ varyingIndex ++ } )`;\n\n\t\t\t\t\tif ( varying.interpolationType ) {\n\n\t\t\t\t\t\tconst samplingSnippet = varying.interpolationSampling !== null ? `, ${ varying.interpolationSampling } )` : ' )';\n\n\t\t\t\t\t\tattributesSnippet += ` @interpolate( ${ varying.interpolationType }${ samplingSnippet }`;\n\n\t\t\t\t\t\t// Otherwise, optimize interpolation when sensible\n\n\t\t\t\t\t} else if ( /^(int|uint|ivec|uvec)/.test( varying.type ) ) {\n\n\t\t\t\t\t\tattributesSnippet += ' @interpolate(flat, either)';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tsnippets.push( `${ attributesSnippet } ${ varying.name } : ${ this.getType( varying.type ) }` );\n\n\t\t\t\t} else if ( shaderStage === 'vertex' && vars.includes( varying ) === false ) {\n\n\t\t\t\t\tvars.push( varying );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst builtins = this.getBuiltins( shaderStage );\n\n\t\tif ( builtins ) snippets.push( builtins );\n\n\t\tconst code = snippets.join( ',\\n\\t' );\n\n\t\treturn shaderStage === 'vertex' ? this._getWGSLStruct( 'VaryingsStruct', '\\t' + code ) : code;\n\n\t}\n\n\tisCustomStruct( nodeUniform ) {\n\n\t\tconst attribute = nodeUniform.value;\n\t\tconst bufferNode = nodeUniform.node;\n\n\t\tconst isAttributeStructType = ( attribute.isBufferAttribute || attribute.isInstancedBufferAttribute ) && bufferNode.structTypeNode !== null;\n\n\t\tconst isStructArray =\n\t\t\t( bufferNode.value && bufferNode.value.array ) &&\n\t\t\t( typeof bufferNode.value.itemSize === 'number' && bufferNode.value.array.length > bufferNode.value.itemSize );\n\n\t\treturn isAttributeStructType && ! isStructArray;\n\n\t}\n\n\t/**\n\t * Returns the uniforms of the given shader stage as a WGSL string.\n\t *\n\t * @param {string} shaderStage - The shader stage.\n\t * @return {string} The WGSL snippet that defines the uniforms.\n\t */\n\tgetUniforms( shaderStage ) {\n\n\t\tconst backend = this.renderer.backend;\n\t\tconst uniforms = this.uniforms[ shaderStage ];\n\n\t\tconst bindingSnippets = [];\n\t\tconst bufferSnippets = [];\n\t\tconst structSnippets = [];\n\t\tconst uniformGroups = {};\n\n\t\tfor ( const uniform of uniforms ) {\n\n\t\t\tconst groupName = uniform.groupNode.name;\n\t\t\tconst uniformIndexes = this.bindingsIndexes[ groupName ];\n\n\t\t\tif ( uniform.type === 'texture' || uniform.type === 'cubeTexture' || uniform.type === 'cubeDepthTexture' || uniform.type === 'storageTexture' || uniform.type === 'texture3D' ) {\n\n\t\t\t\tconst texture = uniform.node.value;\n\n\t\t\t\t// Cube textures always need samplers (they use textureSampleLevel, not textureLoad)\n\t\t\t\tconst needsSampler = texture.isCubeTexture === true || ( this.isUnfilterable( texture ) === false && uniform.node.isStorageTextureNode !== true );\n\n\t\t\t\tif ( needsSampler ) {\n\n\t\t\t\t\tif ( this.isSampleCompare( texture ) ) {\n\n\t\t\t\t\t\tbindingSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var ${ uniform.name }_sampler : sampler_comparison;` );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbindingSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var ${ uniform.name }_sampler : sampler;` );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tlet textureType;\n\n\t\t\t\tlet multisampled = '';\n\n\t\t\t\tconst { primarySamples } = backend.utils.getTextureSampleData( texture );\n\n\t\t\t\tif ( primarySamples > 1 ) {\n\n\t\t\t\t\tmultisampled = '_multisampled';\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.isCubeTexture === true && texture.isDepthTexture === true ) {\n\n\t\t\t\t\ttextureType = 'texture_depth_cube';\n\n\t\t\t\t} else if ( texture.isCubeTexture === true ) {\n\n\t\t\t\t\ttextureType = 'texture_cube<f32>';\n\n\t\t\t\t} else if ( texture.isDepthTexture === true ) {\n\n\t\t\t\t\tif ( backend.compatibilityMode && texture.compareFunction === null ) {\n\n\t\t\t\t\t\ttextureType = `texture${ multisampled }_2d<f32>`;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttextureType = `texture_depth${ multisampled }_2d${ texture.isArrayTexture === true ? '_array' : '' }`;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( uniform.node.isStorageTextureNode === true ) {\n\n\t\t\t\t\tconst format = getFormat( texture, backend.device );\n\t\t\t\t\tconst access = this.getStorageAccess( uniform.node, shaderStage );\n\n\t\t\t\t\tconst is3D = uniform.node.value.is3DTexture;\n\t\t\t\t\tconst isArrayTexture = uniform.node.value.isArrayTexture;\n\n\t\t\t\t\tconst dimension = is3D ? '3d' : `2d${ isArrayTexture ? '_array' : '' }`;\n\n\t\t\t\t\ttextureType = `texture_storage_${ dimension }<${ format }, ${ access }>`;\n\n\t\t\t\t} else if ( texture.isArrayTexture === true || texture.isDataArrayTexture === true || texture.isCompressedArrayTexture === true ) {\n\n\t\t\t\t\ttextureType = 'texture_2d_array<f32>';\n\n\t\t\t\t} else if ( texture.is3DTexture === true || texture.isData3DTexture === true ) {\n\n\t\t\t\t\ttextureType = 'texture_3d<f32>';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst componentPrefix = this.getComponentTypeFromTexture( texture ).charAt( 0 );\n\n\t\t\t\t\ttextureType = `texture${ multisampled }_2d<${ componentPrefix }32>`;\n\n\t\t\t\t}\n\n\t\t\t\tbindingSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var ${ uniform.name } : ${ textureType };` );\n\n\t\t\t} else if ( uniform.type === 'buffer' || uniform.type === 'storageBuffer' || uniform.type === 'indirectStorageBuffer' ) {\n\n\t\t\t\tconst bufferNode = uniform.node;\n\t\t\t\tconst bufferType = this.getType( bufferNode.getNodeType( this ) );\n\t\t\t\tconst bufferCount = bufferNode.bufferCount;\n\t\t\t\tconst bufferCountSnippet = bufferCount > 0 && uniform.type === 'buffer' ? ', ' + bufferCount : '';\n\t\t\t\tconst bufferAccessMode = bufferNode.isStorageBufferNode ? `storage, ${ this.getStorageAccess( bufferNode, shaderStage ) }` : 'uniform';\n\n\t\t\t\tif ( this.isCustomStruct( uniform ) ) {\n\n\t\t\t\t\tbufferSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var<${ bufferAccessMode }> ${ uniform.name } : ${ bufferType };` );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst bufferTypeSnippet = bufferNode.isAtomic ? `atomic<${ bufferType }>` : `${ bufferType }`;\n\t\t\t\t\tconst bufferSnippet = `\\tvalue : array< ${ bufferTypeSnippet }${ bufferCountSnippet } >`;\n\n\t\t\t\t\tbufferSnippets.push( this._getWGSLStructBinding( uniform.name, bufferSnippet, bufferAccessMode, uniformIndexes.binding ++, uniformIndexes.group ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst groupName = uniform.groupNode.name;\n\n\t\t\t\t// Check if this group has already been processed in this shader stage\n\t\t\t\tif ( uniformGroups[ groupName ] === undefined ) {\n\n\t\t\t\t\t// Get the shared uniform group that contains uniforms from all stages\n\t\t\t\t\tconst sharedUniformGroup = this.uniformGroups[ groupName ];\n\n\t\t\t\t\tif ( sharedUniformGroup !== undefined ) {\n\n\t\t\t\t\t\t// Generate snippets for ALL uniforms in this shared group\n\t\t\t\t\t\tconst snippets = [];\n\n\t\t\t\t\t\tfor ( const sharedUniform of sharedUniformGroup.uniforms ) {\n\n\t\t\t\t\t\t\tconst type = sharedUniform.getType();\n\t\t\t\t\t\t\tconst vectorType = this.getType( this.getVectorType( type ) );\n\t\t\t\t\t\t\tsnippets.push( `\\t${ sharedUniform.name } : ${ vectorType }` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check if this group already has an assigned binding index (from another shader stage)\n\t\t\t\t\t\tlet groupBinding = this.uniformGroupsBindings[ groupName ];\n\n\t\t\t\t\t\tif ( groupBinding === undefined ) {\n\n\t\t\t\t\t\t\t// First time processing this group - assign a new binding index\n\t\t\t\t\t\t\tgroupBinding = {\n\t\t\t\t\t\t\t\tindex: uniformIndexes.binding ++,\n\t\t\t\t\t\t\t\tid: uniformIndexes.group\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tthis.uniformGroupsBindings[ groupName ] = groupBinding;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuniformGroups[ groupName ] = {\n\t\t\t\t\t\t\tindex: groupBinding.index,\n\t\t\t\t\t\t\tid: groupBinding.id,\n\t\t\t\t\t\t\tsnippets: snippets\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const name in uniformGroups ) {\n\n\t\t\tconst group = uniformGroups[ name ];\n\n\t\t\tstructSnippets.push( this._getWGSLStructBinding( name, group.snippets.join( ',\\n' ), 'uniform', group.index, group.id ) );\n\n\t\t}\n\n\t\tconst code = [ ...bindingSnippets, ...bufferSnippets, ...structSnippets ].join( '\\n' );\n\n\t\treturn code;\n\n\t}\n\n\t/**\n\t * Controls the code build of the shader stages.\n\t */\n\tbuildCode() {\n\n\t\tconst shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };\n\n\t\tthis.sortBindingGroups();\n\n\t\tfor ( const shaderStage in shadersData ) {\n\n\t\t\tthis.shaderStage = shaderStage;\n\n\t\t\tconst allowGlobal = this.allowGlobalVariables;\n\n\t\t\tconst stageData = shadersData[ shaderStage ];\n\t\t\tstageData.uniforms = this.getUniforms( shaderStage );\n\t\t\tstageData.attributes = this.getAttributes( shaderStage );\n\t\t\tstageData.varyings = this.getVaryings( shaderStage );\n\t\t\tstageData.structs = this.getStructs( shaderStage );\n\t\t\tstageData.vars = this.getVars( shaderStage, allowGlobal );\n\t\t\tstageData.codes = this.getCodes( shaderStage );\n\t\t\tstageData.directives = this.getDirectives( shaderStage );\n\t\t\tstageData.scopedArrays = this.getScopedArrays( shaderStage );\n\n\t\t\t//\n\n\t\t\tlet flow = '// code\\n\\n';\n\t\t\tflow += this.flowCode[ shaderStage ];\n\n\t\t\tconst flowNodes = this.flowNodes[ shaderStage ];\n\t\t\tconst mainNode = flowNodes[ flowNodes.length - 1 ];\n\n\t\t\tconst outputNode = mainNode.outputNode;\n\t\t\tconst isOutputStruct = ( outputNode !== undefined && outputNode.isOutputStructNode === true );\n\n\t\t\tfor ( const node of flowNodes ) {\n\n\t\t\t\tconst flowSlotData = this.getFlowData( node/*, shaderStage*/ );\n\t\t\t\tconst slotName = node.name;\n\n\t\t\t\tif ( slotName ) {\n\n\t\t\t\t\tif ( flow.length > 0 ) flow += '\\n';\n\n\t\t\t\t\tflow += `\\t// flow -> ${ slotName }\\n`;\n\n\t\t\t\t}\n\n\t\t\t\tflow += `${ flowSlotData.code }\\n\\t`;\n\n\t\t\t\tif ( node === mainNode && shaderStage !== 'compute' ) {\n\n\t\t\t\t\tflow += '// result\\n\\n\\t';\n\n\t\t\t\t\tif ( shaderStage === 'vertex' ) {\n\n\t\t\t\t\t\tflow += `varyings.builtinClipSpace = ${ flowSlotData.result };`;\n\n\t\t\t\t\t} else if ( shaderStage === 'fragment' ) {\n\n\t\t\t\t\t\tif ( isOutputStruct ) {\n\n\t\t\t\t\t\t\tstageData.returnType = outputNode.getNodeType( this );\n\t\t\t\t\t\t\tstageData.structs += 'var<private> output : ' + stageData.returnType + ';';\n\n\t\t\t\t\t\t\tflow += `return ${ flowSlotData.result };`;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tlet structSnippet = '\\t@location( 0 ) color: vec4<f32>';\n\n\t\t\t\t\t\t\tconst builtins = this.getBuiltins( 'output' );\n\n\t\t\t\t\t\t\tif ( builtins ) structSnippet += ',\\n\\t' + builtins;\n\n\t\t\t\t\t\t\tstageData.returnType = 'OutputStruct';\n\t\t\t\t\t\t\tstageData.structs += this._getWGSLStruct( 'OutputStruct', structSnippet );\n\t\t\t\t\t\t\tstageData.structs += '\\nvar<private> output : OutputStruct;';\n\n\t\t\t\t\t\t\tflow += `output.color = ${ flowSlotData.result };\\n\\n\\treturn output;`;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstageData.flow = flow;\n\n\t\t}\n\n\t\tthis.shaderStage = null;\n\n\t\tif ( this.material !== null ) {\n\n\t\t\tthis.vertexShader = this._getWGSLVertexCode( shadersData.vertex );\n\t\t\tthis.fragmentShader = this._getWGSLFragmentCode( shadersData.fragment );\n\n\t\t} else {\n\n\t\t\t// Early strictly validated in computeNode\n\n\t\t\tconst workgroupSize = this.object.workgroupSize;\n\n\t\t\tthis.computeShader = this._getWGSLComputeCode( shadersData.compute, workgroupSize );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the native shader method name for a given generic name.\n\t *\n\t * @param {string} method - The method name to resolve.\n\t * @param {?string} [output=null] - An optional output.\n\t * @return {string} The resolved WGSL method name.\n\t */\n\tgetMethod( method, output = null ) {\n\n\t\tlet wgslMethod;\n\n\t\tif ( output !== null ) {\n\n\t\t\twgslMethod = this._getWGSLMethod( method + '_' + output );\n\n\t\t}\n\n\t\tif ( wgslMethod === undefined ) {\n\n\t\t\twgslMethod = this._getWGSLMethod( method );\n\n\t\t}\n\n\t\treturn wgslMethod || method;\n\n\t}\n\n\t/**\n\t * Returns the bitcast method name for a given input and outputType.\n\t *\n\t * @param {string} type - The output type to bitcast to.\n\t * @return {string} The resolved WGSL bitcast invocation.\n\t */\n\tgetBitcastMethod( type ) {\n\n\t\tconst dataType = this.getType( type );\n\n\t\treturn `bitcast<${ dataType }>`;\n\n\t}\n\n\t/**\n\t * Returns the float packing method name for a given numeric encoding.\n\t *\n\t * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range.\n\t * @returns {string} The resolve WGSL float packing method name.\n\t */\n\tgetFloatPackingMethod( encoding ) {\n\n\t\treturn this.getMethod( `floatpack_${ encoding }_2x16` );\n\n\t}\n\n\t/**\n\t * Returns the float unpacking method name for a given numeric encoding.\n\t *\n\t * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range.\n\t * @returns {string} The resolve WGSL float unpacking method name.\n\t */\n\tgetFloatUnpackingMethod( encoding ) {\n\n\t\treturn this.getMethod( `floatunpack_${ encoding }_2x16` );\n\n\t}\n\n\t/**\n\t * Returns the native snippet for a ternary operation.\n\t *\n\t * @param {string} condSnippet - The condition determining which expression gets resolved.\n\t * @param {string} ifSnippet - The expression to resolve to if the condition is true.\n\t * @param {string} elseSnippet - The expression to resolve to if the condition is false.\n\t * @return {string} The resolved method name.\n\t */\n\tgetTernary( condSnippet, ifSnippet, elseSnippet ) {\n\n\t\treturn `select( ${elseSnippet}, ${ifSnippet}, ${condSnippet} )`;\n\n\t}\n\n\t/**\n\t * Returns the WGSL type of the given node data type.\n\t *\n\t * @param {string} type - The node data type.\n\t * @return {string} The WGSL type.\n\t */\n\tgetType( type ) {\n\n\t\treturn wgslTypeLib[ type ] || type;\n\n\t}\n\n\t/**\n\t * Whether the requested feature is available or not.\n\t *\n\t * @param {string} name - The requested feature.\n\t * @return {boolean} Whether the requested feature is supported or not.\n\t */\n\tisAvailable( name ) {\n\n\t\tlet result = supports[ name ];\n\n\t\tif ( result === undefined ) {\n\n\t\t\tif ( name === 'float32Filterable' ) {\n\n\t\t\t\tresult = this.renderer.hasFeature( 'float32-filterable' );\n\n\t\t\t} else if ( name === 'clipDistance' ) {\n\n\t\t\t\tresult = this.renderer.hasFeature( 'clip-distances' );\n\n\t\t\t}\n\n\t\t\tsupports[ name ] = result;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t/**\n\t * Returns the native shader method name for a given generic name.\n\t *\n\t * @private\n\t * @param {string} method - The method name to resolve.\n\t * @return {string} The resolved WGSL method name.\n\t */\n\t_getWGSLMethod( method ) {\n\n\t\tif ( wgslPolyfill[ method ] !== undefined ) {\n\n\t\t\tthis._include( method );\n\n\t\t}\n\n\t\treturn wgslMethods[ method ];\n\n\t}\n\n\t/**\n\t * Includes the given method name into the current\n\t * function node.\n\t *\n\t * @private\n\t * @param {string} name - The method name to include.\n\t * @return {CodeNode} The respective code node.\n\t */\n\t_include( name ) {\n\n\t\tconst codeNode = wgslPolyfill[ name ];\n\t\tcodeNode.build( this );\n\n\t\tthis.addInclude( codeNode );\n\n\t\treturn codeNode;\n\n\t}\n\n\t/**\n\t * Returns a WGSL vertex shader based on the given shader data.\n\t *\n\t * @private\n\t * @param {Object} shaderData - The shader data.\n\t * @return {string} The vertex shader.\n\t */\n\t_getWGSLVertexCode( shaderData ) {\n\n\t\treturn `${ this.getSignature() }\n// directives\n${shaderData.directives}\n\n// structs\n${shaderData.structs}\n\n// uniforms\n${shaderData.uniforms}\n\n// varyings\n${shaderData.varyings}\nvar<private> varyings : VaryingsStruct;\n\n// vars\n${shaderData.vars}\n\n// codes\n${shaderData.codes}\n\n@vertex\nfn main( ${shaderData.attributes} ) -> VaryingsStruct {\n\n\t// flow\n\t${shaderData.flow}\n\n\treturn varyings;\n\n}\n`;\n\n\t}\n\n\t/**\n\t * Returns a WGSL fragment shader based on the given shader data.\n\t *\n\t * @private\n\t * @param {Object} shaderData - The shader data.\n\t * @return {string} The vertex shader.\n\t */\n\t_getWGSLFragmentCode( shaderData ) {\n\n\t\treturn `${ this.getSignature() }\n// global\n${ diagnostics }\n\n// structs\n${shaderData.structs}\n\n// uniforms\n${shaderData.uniforms}\n\n// vars\n${shaderData.vars}\n\n// codes\n${shaderData.codes}\n\n@fragment\nfn main( ${shaderData.varyings} ) -> ${shaderData.returnType} {\n\n\t// flow\n\t${shaderData.flow}\n\n}\n`;\n\n\t}\n\n\t/**\n\t * Returns a WGSL compute shader based on the given shader data.\n\t *\n\t * @private\n\t * @param {Object} shaderData - The shader data.\n\t * @param {string} workgroupSize - The workgroup size.\n\t * @return {string} The vertex shader.\n\t */\n\t_getWGSLComputeCode( shaderData, workgroupSize ) {\n\n\t\tconst [ workgroupSizeX, workgroupSizeY, workgroupSizeZ ] = workgroupSize;\n\n\t\treturn `${ this.getSignature() }\n// directives\n${ shaderData.directives }\n\n// system\nvar<private> instanceIndex : u32;\n\n// locals\n${ shaderData.scopedArrays }\n\n// structs\n${ shaderData.structs }\n\n// uniforms\n${ shaderData.uniforms }\n\n// vars\n${ this.allowGlobalVariables ? shaderData.vars : '' }\n\n// codes\n${ shaderData.codes }\n\n@compute @workgroup_size( ${ workgroupSizeX }, ${ workgroupSizeY }, ${ workgroupSizeZ } )\nfn main( ${ shaderData.attributes } ) {\n\n\t// local vars\n\t${ this.allowGlobalVariables ? '' : shaderData.vars }\n\n\t// system\n\tinstanceIndex = globalId.x\n\t\t+ globalId.y * ( ${ workgroupSizeX } * numWorkgroups.x )\n\t\t+ globalId.z * ( ${ workgroupSizeX } * numWorkgroups.x ) * ( ${ workgroupSizeY } * numWorkgroups.y );\n\n\t// flow\n\t${ shaderData.flow }\n\n}\n`;\n\n\t}\n\n\t/**\n\t * Returns a WGSL struct based on the given name and variables.\n\t *\n\t * @private\n\t * @param {string} name - The struct name.\n\t * @param {string} vars - The struct variables.\n\t * @return {string} The WGSL snippet representing a struct.\n\t */\n\t_getWGSLStruct( name, vars ) {\n\n\t\treturn `\nstruct ${name} {\n${vars}\n};`;\n\n\t}\n\n\t/**\n\t * Returns a WGSL struct binding.\n\t *\n\t * @private\n\t * @param {string} name - The struct name.\n\t * @param {string} vars - The struct variables.\n\t * @param {string} access - The access.\n\t * @param {number} [binding=0] - The binding index.\n\t * @param {number} [group=0] - The group index.\n\t * @return {string} The WGSL snippet representing a struct binding.\n\t */\n\t_getWGSLStructBinding( name, vars, access, binding = 0, group = 0 ) {\n\n\t\tconst structName = name + 'Struct';\n\t\tconst structSnippet = this._getWGSLStruct( structName, vars );\n\n\t\treturn `${structSnippet}\n@binding( ${ binding } ) @group( ${ group } )\nvar<${access}> ${ name } : ${ structName };`;\n\n\t}\n\n}\n\n/**\n * A WebGPU backend utility module with common helpers.\n *\n * @private\n */\nclass WebGPUUtils {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGPUBackend} backend - The WebGPU backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGPU backend.\n\t\t *\n\t\t * @type {WebGPUBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t}\n\n\t/**\n\t * Returns the depth/stencil GPU format for the given render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @return {string} The depth/stencil GPU texture format.\n\t */\n\tgetCurrentDepthStencilFormat( renderContext ) {\n\n\t\tlet format;\n\n\t\tif ( renderContext.depth ) {\n\n\t\t\tif ( renderContext.depthTexture !== null ) {\n\n\t\t\t\tformat = this.getTextureFormatGPU( renderContext.depthTexture );\n\n\t\t\t} else if ( renderContext.stencil ) {\n\n\t\t\t\tif ( this.backend.renderer.reversedDepthBuffer === true ) {\n\n\t\t\t\t\tformat = GPUTextureFormat.Depth32FloatStencil8;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tformat = GPUTextureFormat.Depth24PlusStencil8;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.backend.renderer.reversedDepthBuffer === true ) {\n\n\t\t\t\t\tformat = GPUTextureFormat.Depth32Float;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tformat = GPUTextureFormat.Depth24Plus;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn format;\n\n\t}\n\n\t/**\n\t * Returns the GPU format for the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @return {string} The GPU texture format.\n\t */\n\tgetTextureFormatGPU( texture ) {\n\n\t\treturn this.backend.get( texture ).format;\n\n\t}\n\n\t/**\n\t * Returns an object that defines the multi-sampling state of the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @return {Object} The multi-sampling state.\n\t */\n\tgetTextureSampleData( texture ) {\n\n\t\tlet samples;\n\n\t\tif ( texture.isFramebufferTexture ) {\n\n\t\t\tsamples = 1;\n\n\t\t} else if ( texture.isDepthTexture && ! texture.renderTarget ) {\n\n\t\t\tconst renderer = this.backend.renderer;\n\t\t\tconst renderTarget = renderer.getRenderTarget();\n\n\t\t\tsamples = renderTarget ? renderTarget.samples : renderer.currentSamples;\n\n\t\t} else if ( texture.renderTarget ) {\n\n\t\t\tsamples = texture.renderTarget.samples;\n\n\t\t}\n\n\t\tsamples = samples || 1;\n\n\t\tconst isMSAA = samples > 1 && texture.renderTarget !== null && ( texture.isDepthTexture !== true && texture.isFramebufferTexture !== true );\n\t\tconst primarySamples = isMSAA ? 1 : samples;\n\n\t\treturn { samples, primarySamples, isMSAA };\n\n\t}\n\n\t/**\n\t * Returns the default color attachment's GPU format of the current render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @return {string} The GPU texture format of the default color attachment.\n\t */\n\tgetCurrentColorFormat( renderContext ) {\n\n\t\tlet format;\n\n\t\tif ( renderContext.textures !== null ) {\n\n\t\t\tformat = this.getTextureFormatGPU( renderContext.textures[ 0 ] );\n\n\t\t} else {\n\n\t\t\tformat = this.getPreferredCanvasFormat(); // default context format\n\n\t\t}\n\n\t\treturn format;\n\n\t}\n\n\t/**\n\t * Returns the GPU formats of all color attachments of the current render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @return {Array<string>} The GPU texture formats of all color attachments.\n\t */\n\tgetCurrentColorFormats( renderContext ) {\n\n\t\tif ( renderContext.textures !== null ) {\n\n\t\t\treturn renderContext.textures.map( t => this.getTextureFormatGPU( t ) );\n\n\t\t} else {\n\n\t\t\treturn [ this.getPreferredCanvasFormat() ]; // default context format\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the output color space of the current render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @return {string} The output color space.\n\t */\n\tgetCurrentColorSpace( renderContext ) {\n\n\t\tif ( renderContext.textures !== null ) {\n\n\t\t\treturn renderContext.textures[ 0 ].colorSpace;\n\n\t\t}\n\n\t\treturn this.backend.renderer.outputColorSpace;\n\n\t}\n\n\t/**\n\t * Returns GPU primitive topology for the given object and material.\n\t *\n\t * @param {Object3D} object - The 3D object.\n\t * @param {Material} material - The material.\n\t * @return {string} The GPU primitive topology.\n\t */\n\tgetPrimitiveTopology( object, material ) {\n\n\t\tif ( object.isPoints ) return GPUPrimitiveTopology.PointList;\n\t\telse if ( object.isLineSegments || ( object.isMesh && material.wireframe === true ) ) return GPUPrimitiveTopology.LineList;\n\t\telse if ( object.isLine ) return GPUPrimitiveTopology.LineStrip;\n\t\telse if ( object.isMesh ) return GPUPrimitiveTopology.TriangleList;\n\n\t}\n\n\t/**\n\t * Returns a modified sample count from the given sample count value.\n\t *\n\t * That is required since WebGPU only supports either 1 or 4.\n\t *\n\t * @param {number} sampleCount - The input sample count.\n\t * @return {number} The (potentially updated) output sample count.\n\t */\n\tgetSampleCount( sampleCount ) {\n\n\t\treturn sampleCount >= 4 ? 4 : 1;\n\n\t}\n\n\t/**\n\t * Returns the sample count of the given render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @return {number} The sample count.\n\t */\n\tgetSampleCountRenderContext( renderContext ) {\n\n\t\tif ( renderContext.textures !== null ) {\n\n\t\t\treturn this.getSampleCount( renderContext.sampleCount );\n\n\t\t}\n\n\t\treturn this.getSampleCount( this.backend.renderer.currentSamples );\n\n\t}\n\n\t/**\n\t * Returns the preferred canvas format.\n\t *\n\t * There is a separate method for this so it's possible to\n\t * honor edge cases for specific devices.\n\t *\n\t * @return {string} The GPU texture format of the canvas.\n\t */\n\tgetPreferredCanvasFormat() {\n\n\t\tconst parameters = this.backend.parameters;\n\n\t\tconst bufferType = parameters.outputType;\n\n\t\tif ( bufferType === undefined ) {\n\n\t\t\treturn navigator.gpu.getPreferredCanvasFormat();\n\n\t\t} else if ( bufferType === UnsignedByteType ) {\n\n\t\t\treturn GPUTextureFormat.BGRA8Unorm;\n\n\t\t} else if ( bufferType === HalfFloatType ) {\n\n\t\t\treturn GPUTextureFormat.RGBA16Float;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unsupported output buffer type.' );\n\n\t\t}\n\n\t}\n\n}\n\nconst typedArraysToVertexFormatPrefix = new Map( [\n\t[ Int8Array, [ 'sint8', 'snorm8' ]],\n\t[ Uint8Array, [ 'uint8', 'unorm8' ]],\n\t[ Int16Array, [ 'sint16', 'snorm16' ]],\n\t[ Uint16Array, [ 'uint16', 'unorm16' ]],\n\t[ Int32Array, [ 'sint32', 'snorm32' ]],\n\t[ Uint32Array, [ 'uint32', 'unorm32' ]],\n\t[ Float32Array, [ 'float32', ]],\n] );\n\nif ( typeof Float16Array !== 'undefined' ) {\n\n\ttypedArraysToVertexFormatPrefix.set( Float16Array, [ 'float16' ] );\n\n}\n\nconst typedAttributeToVertexFormatPrefix = new Map( [\n\t[ Float16BufferAttribute, [ 'float16', ]],\n] );\n\nconst typeArraysToVertexFormatPrefixForItemSize1 = new Map( [\n\t[ Int32Array, 'sint32' ],\n\t[ Int16Array, 'sint32' ], // patch for INT16\n\t[ Uint32Array, 'uint32' ],\n\t[ Uint16Array, 'uint32' ], // patch for UINT16\n\t[ Float32Array, 'float32' ]\n] );\n\n/**\n * A WebGPU backend utility module for managing shader attributes.\n *\n * @private\n */\nclass WebGPUAttributeUtils {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGPUBackend} backend - The WebGPU backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGPU backend.\n\t\t *\n\t\t * @type {WebGPUBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t}\n\n\t/**\n\t * Creates the GPU buffer for the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t * @param {GPUBufferUsage} usage - A flag that indicates how the buffer may be used after its creation.\n\t */\n\tcreateAttribute( attribute, usage ) {\n\n\t\tconst bufferAttribute = this._getBufferAttribute( attribute );\n\n\t\tconst backend = this.backend;\n\t\tconst bufferData = backend.get( bufferAttribute );\n\n\t\tlet buffer = bufferData.buffer;\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tconst device = backend.device;\n\n\t\t\tlet array = bufferAttribute.array;\n\n\t\t\t// patch for INT16 and UINT16\n\t\t\tif ( attribute.normalized === false ) {\n\n\t\t\t\tif ( array.constructor === Int16Array || array.constructor === Int8Array ) {\n\n\t\t\t\t\tarray = new Int32Array( array );\n\n\t\t\t\t} else if ( array.constructor === Uint16Array || array.constructor === Uint8Array ) {\n\n\t\t\t\t\tarray = new Uint32Array( array );\n\n\t\t\t\t\tif ( usage & GPUBufferUsage.INDEX ) {\n\n\t\t\t\t\t\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\t\t\t\t\t\tif ( array[ i ] === 0xffff ) array[ i ] = 0xffffffff; // use correct primitive restart index\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbufferAttribute.array = array;\n\n\t\t\tif ( ( bufferAttribute.isStorageBufferAttribute || bufferAttribute.isStorageInstancedBufferAttribute ) && bufferAttribute.itemSize === 3 ) {\n\n\t\t\t\tarray = new array.constructor( bufferAttribute.count * 4 );\n\n\t\t\t\tfor ( let i = 0; i < bufferAttribute.count; i ++ ) {\n\n\t\t\t\t\tarray.set( bufferAttribute.array.subarray( i * 3, i * 3 + 3 ), i * 4 );\n\n\t\t\t\t}\n\n\t\t\t\t// Update BufferAttribute\n\t\t\t\tbufferAttribute.itemSize = 4;\n\t\t\t\tbufferAttribute.array = array;\n\n\t\t\t\tbufferData._force3to4BytesAlignment = true;\n\n\t\t\t}\n\n\t\t\t// ensure 4 byte alignment\n\t\t\tconst byteLength = array.byteLength;\n\t\t\tconst size = byteLength + ( ( 4 - ( byteLength % 4 ) ) % 4 );\n\n\t\t\tbuffer = device.createBuffer( {\n\t\t\t\tlabel: bufferAttribute.name,\n\t\t\t\tsize: size,\n\t\t\t\tusage: usage,\n\t\t\t\tmappedAtCreation: true\n\t\t\t} );\n\n\t\t\tnew array.constructor( buffer.getMappedRange() ).set( array );\n\n\t\t\tbuffer.unmap();\n\n\t\t\tbufferData.buffer = buffer;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the GPU buffer of the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tupdateAttribute( attribute ) {\n\n\t\tconst bufferAttribute = this._getBufferAttribute( attribute );\n\n\t\tconst backend = this.backend;\n\t\tconst device = backend.device;\n\n\t\tconst bufferData = backend.get( bufferAttribute );\n\t\tconst buffer = backend.get( bufferAttribute ).buffer;\n\n\t\tlet array = bufferAttribute.array;\n\n\t\t//  if storage buffer ensure 4 byte alignment\n\t\tif ( bufferData._force3to4BytesAlignment === true ) {\n\n\t\t\tarray = new array.constructor( bufferAttribute.count * 4 );\n\n\t\t\tfor ( let i = 0; i < bufferAttribute.count; i ++ ) {\n\n\t\t\t\tarray.set( bufferAttribute.array.subarray( i * 3, i * 3 + 3 ), i * 4 );\n\n\t\t\t}\n\n\t\t\tbufferAttribute.array = array;\n\n\t\t}\n\n\n\t\tconst updateRanges = bufferAttribute.updateRanges;\n\n\t\tif ( updateRanges.length === 0 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tdevice.queue.writeBuffer(\n\t\t\t\tbuffer,\n\t\t\t\t0,\n\t\t\t\tarray,\n\t\t\t\t0\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tconst isTyped = isTypedArray( array );\n\t\t\tconst byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\t\t\t\tlet dataOffset, size;\n\n\t\t\t\tif ( bufferData._force3to4BytesAlignment === true ) {\n\n\t\t\t\t\tconst vertexStart = Math.floor( range.start / 3 );\n\t\t\t\t\tconst vertexCount = Math.ceil( range.count / 3 );\n\t\t\t\t\tdataOffset = vertexStart * 4 * byteOffsetFactor;\n\t\t\t\t\tsize = vertexCount * 4 * byteOffsetFactor;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdataOffset = range.start * byteOffsetFactor;\n\t\t\t\t\tsize = range.count * byteOffsetFactor;\n\n\t\t\t\t}\n\n\t\t\t\tconst bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes\n\n\t\t\t\tdevice.queue.writeBuffer(\n\t\t\t\t\tbuffer,\n\t\t\t\t\tbufferOffset,\n\t\t\t\t\tarray,\n\t\t\t\t\tdataOffset,\n\t\t\t\t\tsize\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tbufferAttribute.clearUpdateRanges();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method creates the vertex buffer layout data which are\n\t * require when creating a render pipeline for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {Array<Object>} An array holding objects which describe the vertex buffer layout.\n\t */\n\tcreateShaderVertexBuffers( renderObject ) {\n\n\t\tconst attributes = renderObject.getAttributes();\n\t\tconst vertexBuffers = new Map();\n\n\t\tfor ( let slot = 0; slot < attributes.length; slot ++ ) {\n\n\t\t\tconst geometryAttribute = attributes[ slot ];\n\t\t\tconst bytesPerElement = geometryAttribute.array.BYTES_PER_ELEMENT;\n\t\t\tconst bufferAttribute = this._getBufferAttribute( geometryAttribute );\n\n\t\t\tlet vertexBufferLayout = vertexBuffers.get( bufferAttribute );\n\n\t\t\tif ( vertexBufferLayout === undefined ) {\n\n\t\t\t\tlet arrayStride, stepMode;\n\n\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute === true ) {\n\n\t\t\t\t\tarrayStride = geometryAttribute.data.stride * bytesPerElement;\n\t\t\t\t\tstepMode = geometryAttribute.data.isInstancedInterleavedBuffer ? GPUInputStepMode.Instance : GPUInputStepMode.Vertex;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarrayStride = geometryAttribute.itemSize * bytesPerElement;\n\t\t\t\t\tstepMode = geometryAttribute.isInstancedBufferAttribute ? GPUInputStepMode.Instance : GPUInputStepMode.Vertex;\n\n\t\t\t\t}\n\n\t\t\t\t// patch for INT16 and UINT16\n\t\t\t\tif ( geometryAttribute.normalized === false && ( geometryAttribute.array.constructor === Int16Array || geometryAttribute.array.constructor === Uint16Array ) ) {\n\n\t\t\t\t\tarrayStride = 4;\n\n\t\t\t\t}\n\n\t\t\t\tvertexBufferLayout = {\n\t\t\t\t\tarrayStride,\n\t\t\t\t\tattributes: [],\n\t\t\t\t\tstepMode\n\t\t\t\t};\n\n\t\t\t\tvertexBuffers.set( bufferAttribute, vertexBufferLayout );\n\n\t\t\t}\n\n\t\t\tconst format = this._getVertexFormat( geometryAttribute );\n\t\t\tconst offset = ( geometryAttribute.isInterleavedBufferAttribute === true ) ? geometryAttribute.offset * bytesPerElement : 0;\n\n\t\t\tvertexBufferLayout.attributes.push( {\n\t\t\t\tshaderLocation: slot,\n\t\t\t\toffset,\n\t\t\t\tformat\n\t\t\t} );\n\n\t\t}\n\n\t\treturn Array.from( vertexBuffers.values() );\n\n\t}\n\n\t/**\n\t * Destroys the GPU buffer of the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tdestroyAttribute( attribute ) {\n\n\t\tconst backend = this.backend;\n\t\tconst data = backend.get( this._getBufferAttribute( attribute ) );\n\n\t\tdata.buffer.destroy();\n\n\t\tbackend.delete( attribute );\n\n\t}\n\n\t/**\n\t * This method performs a readback operation by moving buffer data from\n\t * a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can\n\t * be used to retain and reuse handles to the intermediate buffers and prevent\n\t * new allocation.\n\t *\n\t * @async\n\t * @param {BufferAttribute} attribute - The storage buffer attribute to read frm.\n\t * @param {number} count - The offset from which to start reading the\n\t * @param {number} offset - The storage buffer attribute.\n\t * @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.\n\t * @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.\n\t */\n\tasync getArrayBufferAsync( attribute, target = null, offset = 0, count = -1 ) {\n\n\t\tconst backend = this.backend;\n\t\tconst device = backend.device;\n\n\t\tconst data = backend.get( this._getBufferAttribute( attribute ) );\n\t\tconst bufferGPU = data.buffer;\n\t\tconst byteLength = count === -1 ? bufferGPU.size - offset : count;\n\n\t\tlet readBufferGPU;\n\t\tif ( target !== null && target.isReadbackBuffer ) {\n\n\t\t\tconst readbackInfo = backend.get( target );\n\n\t\t\tif ( target._mapped === true ) {\n\n\t\t\t\tthrow new Error( 'WebGPURenderer: ReadbackBuffer must be released before being used again.' );\n\n\t\t\t}\n\n\t\t\ttarget._mapped = true;\n\n\t\t\t// initialize the GPU-side read copy buffer if it is not present\n\t\t\tif ( readbackInfo.readBufferGPU === undefined ) {\n\n\t\t\t\treadBufferGPU = device.createBuffer( {\n\t\t\t\t\tlabel: `${ target.name }_readback`,\n\t\t\t\t\tsize: target.maxByteLength,\n\t\t\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t\t\t\t} );\n\n\t\t\t\t// release / dispose\n\t\t\t\tconst releaseCallback = () => {\n\n\t\t\t\t\ttarget.buffer = null;\n\t\t\t\t\ttarget._mapped = false;\n\n\t\t\t\t\treadBufferGPU.unmap();\n\n\t\t\t\t};\n\n\t\t\t\tconst disposeCallback = () => {\n\n\t\t\t\t\ttarget.buffer = null;\n\t\t\t\t\ttarget._mapped = false;\n\n\t\t\t\t\treadBufferGPU.destroy();\n\n\t\t\t\t\tbackend.delete( target );\n\n\t\t\t\t\ttarget.removeEventListener( 'release', releaseCallback );\n\t\t\t\t\ttarget.removeEventListener( 'dispose', disposeCallback );\n\n\t\t\t\t};\n\n\t\t\t\ttarget.addEventListener( 'release', releaseCallback );\n\t\t\t\ttarget.addEventListener( 'dispose', disposeCallback );\n\n\t\t\t\t// register\n\t\t\t\treadbackInfo.readBufferGPU = readBufferGPU;\n\n\t\t\t} else {\n\n\t\t\t\treadBufferGPU = readbackInfo.readBufferGPU;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// create a new temp buffer for array buffers otherwise\n\t\t\treadBufferGPU = device.createBuffer( {\n\t\t\t\tlabel: `${ attribute.name }_readback`,\n\t\t\t\tsize: byteLength,\n\t\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t\t\t} );\n\n\t\t}\n\n\t\t// copy the data\n\t\tconst cmdEncoder = device.createCommandEncoder( {\n\t\t\tlabel: `readback_encoder_${ attribute.name }`\n\t\t} );\n\n\t\tcmdEncoder.copyBufferToBuffer(\n\t\t\tbufferGPU,\n\t\t\toffset,\n\t\t\treadBufferGPU,\n\t\t\t0,\n\t\t\tbyteLength,\n\t\t);\n\n\t\tconst gpuCommands = cmdEncoder.finish();\n\t\tdevice.queue.submit( [ gpuCommands ] );\n\n\t\t// map the data to the CPU\n\t\tawait readBufferGPU.mapAsync( GPUMapMode.READ, 0, byteLength );\n\n\t\tif ( target === null ) {\n\n\t\t\t// return a new array buffer and clean up the gpu handles\n\t\t\tconst arrayBuffer = readBufferGPU.getMappedRange( 0, byteLength );\n\t\t\tconst result = arrayBuffer.slice();\n\t\t\treadBufferGPU.destroy();\n\t\t\treturn result;\n\n\t\t} else if ( target.isReadbackBuffer ) {\n\n\t\t\t// assign the data to the read back handle\n\t\t\ttarget.buffer = readBufferGPU.getMappedRange( 0, byteLength );\n\t\t\treturn target;\n\n\t\t} else {\n\n\t\t\t// copy the data into the target array buffer\n\t\t\tconst arrayBuffer = readBufferGPU.getMappedRange( 0, byteLength );\n\t\t\tnew Uint8Array( target ).set( new Uint8Array( arrayBuffer ) );\n\t\t\treadBufferGPU.destroy();\n\t\t\treturn target;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the vertex format of the given buffer attribute.\n\t *\n\t * @private\n\t * @param {BufferAttribute} geometryAttribute - The buffer attribute.\n\t * @return {string|undefined} The vertex format (e.g. 'float32x3').\n\t */\n\t_getVertexFormat( geometryAttribute ) {\n\n\t\tconst { itemSize, normalized } = geometryAttribute;\n\t\tconst ArrayType = geometryAttribute.array.constructor;\n\t\tconst AttributeType = geometryAttribute.constructor;\n\n\t\tlet format;\n\n\t\tif ( itemSize === 1 ) {\n\n\t\t\tformat = typeArraysToVertexFormatPrefixForItemSize1.get( ArrayType );\n\n\t\t} else {\n\n\t\t\tconst prefixOptions = typedAttributeToVertexFormatPrefix.get( AttributeType ) || typedArraysToVertexFormatPrefix.get( ArrayType );\n\t\t\tconst prefix = prefixOptions[ normalized ? 1 : 0 ];\n\n\t\t\tif ( prefix ) {\n\n\t\t\t\tconst bytesPerUnit = ArrayType.BYTES_PER_ELEMENT * itemSize;\n\t\t\t\tconst paddedBytesPerUnit = Math.floor( ( bytesPerUnit + 3 ) / 4 ) * 4;\n\t\t\t\tconst paddedItemSize = paddedBytesPerUnit / ArrayType.BYTES_PER_ELEMENT;\n\n\t\t\t\tif ( paddedItemSize % 1 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.WebGPUAttributeUtils: Bad vertex format item size.' );\n\n\t\t\t\t}\n\n\t\t\t\tformat = `${prefix}x${paddedItemSize}`;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ! format ) {\n\n\t\t\terror( 'WebGPUAttributeUtils: Vertex format not supported yet.' );\n\n\t\t}\n\n\t\treturn format;\n\n\t}\n\n\t/**\n\t * Utility method for handling interleaved buffer attributes correctly.\n\t * To process them, their `InterleavedBuffer` is returned.\n\t *\n\t * @private\n\t * @param {BufferAttribute} attribute - The attribute.\n\t * @return {BufferAttribute|InterleavedBuffer}\n\t */\n\t_getBufferAttribute( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn attribute;\n\n\t}\n\n}\n\n/**\n * Class representing a WebGPU bind group layout.\n *\n * @private\n */\nclass BindGroupLayout {\n\n\t/**\n\t * Constructs a new layout.\n\t *\n\t * @param {GPUBindGroupLayout} layoutGPU - A GPU Bind Group Layout.\n\t */\n\tconstructor( layoutGPU ) {\n\n\t\t/**\n\t\t * The current GPUBindGroupLayout.\n\t\t *\n\t\t * @type {GPUBindGroupLayout}\n\t\t */\n\t\tthis.layoutGPU = layoutGPU;\n\n\t\t/**\n\t\t * The number of bind groups that use this layout.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\n/**\n * A WebGPU backend utility module for managing bindings.\n *\n * When reading the documentation it's helpful to keep in mind that\n * all class definitions starting with 'GPU*' are modules from the\n * WebGPU API. So for example `BindGroup` is a class from the engine\n * whereas `GPUBindGroup` is a class from WebGPU.\n *\n * @private\n */\nclass WebGPUBindingUtils {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGPUBackend} backend - The WebGPU backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGPU backend.\n\t\t *\n\t\t * @type {WebGPUBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * A cache that maps combinations of layout entries to existing bind group layouts.\n\t\t *\n\t\t * @private\n\t\t * @type {Map<string, BindGroupLayout>}\n\t\t */\n\t\tthis._bindGroupLayoutCache = new Map();\n\n\t}\n\n\t/**\n\t * Creates a GPU bind group layout for the given bind group.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @return {GPUBindGroupLayout} The GPU bind group layout.\n\t */\n\tcreateBindingsLayout( bindGroup ) {\n\n\t\tconst backend = this.backend;\n\t\tconst device = backend.device;\n\n\t\tconst bindingsData = backend.get( bindGroup );\n\n\t\t// check if the the bind group already has a layout\n\n\t\tif ( bindingsData.layout ) {\n\n\t\t\treturn bindingsData.layout.layoutGPU;\n\n\t\t}\n\n\t\t// if not, assing one\n\n\t\tconst entries = this._createLayoutEntries( bindGroup );\n\t\tconst bindGroupLayoutKey = hashString( JSON.stringify( entries ) );\n\n\t\t// try to find an existing layout in the cache\n\n\t\tlet bindGroupLayout = this._bindGroupLayoutCache.get( bindGroupLayoutKey );\n\n\t\t// if not create a new one\n\n\t\tif ( bindGroupLayout === undefined ) {\n\n\t\t\tbindGroupLayout = new BindGroupLayout( device.createBindGroupLayout( { entries } ) );\n\t\t\tthis._bindGroupLayoutCache.set( bindGroupLayoutKey, bindGroupLayout );\n\n\t\t}\n\n\t\tbindGroupLayout.usedTimes ++;\n\n\t\tbindingsData.layout = bindGroupLayout;\n\t\tbindingsData.layoutKey = bindGroupLayoutKey;\n\n\t\treturn bindGroupLayout.layoutGPU;\n\n\t}\n\n\t/**\n\t * Creates bindings from the given bind group definition.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @param {Array<BindGroup>} bindings - Array of bind groups.\n\t * @param {number} cacheIndex - The cache index.\n\t * @param {number} version - The version.\n\t */\n\tcreateBindings( bindGroup, bindings, cacheIndex, version = 0 ) {\n\n\t\tconst { backend } = this;\n\t\tconst bindingsData = backend.get( bindGroup );\n\n\t\t// setup (static) binding layout and (dynamic) binding group\n\n\t\tconst bindLayoutGPU = this.createBindingsLayout( bindGroup );\n\n\t\tlet bindGroupGPU;\n\n\t\tif ( cacheIndex > 0 ) {\n\n\t\t\tif ( bindingsData.groups === undefined ) {\n\n\t\t\t\tbindingsData.groups = [];\n\t\t\t\tbindingsData.versions = [];\n\n\t\t\t}\n\n\t\t\tif ( bindingsData.versions[ cacheIndex ] === version ) {\n\n\t\t\t\tbindGroupGPU = bindingsData.groups[ cacheIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( bindGroupGPU === undefined ) {\n\n\t\t\tbindGroupGPU = this.createBindGroup( bindGroup, bindLayoutGPU );\n\n\t\t\tif ( cacheIndex > 0 ) {\n\n\t\t\t\tbindingsData.groups[ cacheIndex ] = bindGroupGPU;\n\t\t\t\tbindingsData.versions[ cacheIndex ] = version;\n\n\t\t\t}\n\n\t\t}\n\n\t\tbindingsData.group = bindGroupGPU;\n\n\t}\n\n\t/**\n\t * Updates a buffer binding.\n\t *\n\t *  @param {Buffer} binding - The buffer binding to update.\n\t */\n\tupdateBinding( binding ) {\n\n\t\tconst backend = this.backend;\n\t\tconst device = backend.device;\n\n\t\tconst array = binding.buffer; // cpu\n\t\tconst buffer = backend.get( binding ).buffer; // gpu\n\n\t\tconst updateRanges = binding.updateRanges;\n\n\t\tif ( updateRanges.length === 0 ) {\n\n\t\t\tdevice.queue.writeBuffer(\n\t\t\t\tbuffer,\n\t\t\t\t0,\n\t\t\t\tarray,\n\t\t\t\t0\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tconst isTyped = isTypedArray( array );\n\t\t\tconst byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\tconst dataOffset = range.start * byteOffsetFactor;\n\t\t\t\tconst size = range.count * byteOffsetFactor;\n\n\t\t\t\tconst bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes\n\n\t\t\t\tdevice.queue.writeBuffer(\n\t\t\t\t\tbuffer,\n\t\t\t\t\tbufferOffset,\n\t\t\t\t\tarray,\n\t\t\t\t\tdataOffset,\n\t\t\t\t\tsize\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a GPU bind group for the camera index.\n\t *\n\t * @param {Uint32Array} data - The index data.\n\t * @param {GPUBindGroupLayout} layoutGPU - The GPU bind group layout.\n\t * @return {GPUBindGroup} The GPU bind group.\n\t */\n\tcreateBindGroupIndex( data, layoutGPU ) {\n\n\t\tconst backend = this.backend;\n\t\tconst device = backend.device;\n\n\t\tconst usage = GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST;\n\t\tconst index = data[ 0 ];\n\n\t\tconst buffer = device.createBuffer( {\n\t\t\tlabel: 'bindingCameraIndex_' + index,\n\t\t\tsize: 16, // uint(4) * 4\n\t\t\tusage: usage\n\t\t} );\n\n\t\tdevice.queue.writeBuffer( buffer, 0, data, 0 );\n\n\t\tconst entries = [ { binding: 0, resource: { buffer } } ];\n\n\t\treturn device.createBindGroup( {\n\t\t\tlabel: 'bindGroupCameraIndex_' + index,\n\t\t\tlayout: layoutGPU,\n\t\t\tentries\n\t\t} );\n\n\t}\n\n\t/**\n\t * Creates a GPU bind group for the given bind group and GPU layout.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @param {GPUBindGroupLayout} layoutGPU - The GPU bind group layout.\n\t * @return {GPUBindGroup} The GPU bind group.\n\t */\n\tcreateBindGroup( bindGroup, layoutGPU ) {\n\n\t\tconst backend = this.backend;\n\t\tconst device = backend.device;\n\n\t\tlet bindingPoint = 0;\n\t\tconst entriesGPU = [];\n\n\t\tfor ( const binding of bindGroup.bindings ) {\n\n\t\t\tif ( binding.isUniformBuffer ) {\n\n\t\t\t\tconst bindingData = backend.get( binding );\n\n\t\t\t\tif ( bindingData.buffer === undefined ) {\n\n\t\t\t\t\tconst byteLength = binding.byteLength;\n\n\t\t\t\t\tconst usage = GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST;\n\n\t\t\t\t\tconst visibilities = [];\n\t\t\t\t\tif ( binding.visibility & GPUShaderStage.VERTEX ) {\n\n\t\t\t\t\t\tvisibilities.push( 'vertex' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( binding.visibility & GPUShaderStage.FRAGMENT ) {\n\n\t\t\t\t\t\tvisibilities.push( 'fragment' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( binding.visibility & GPUShaderStage.COMPUTE ) {\n\n\t\t\t\t\t\tvisibilities.push( 'compute' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst bufferVisibility = `(${visibilities.join( ',' )})`;\n\n\t\t\t\t\tconst bufferGPU = device.createBuffer( {\n\t\t\t\t\t\tlabel: `bindingBuffer${binding.id}_${binding.name}_${bufferVisibility}`,\n\t\t\t\t\t\tsize: byteLength,\n\t\t\t\t\t\tusage: usage\n\t\t\t\t\t} );\n\n\t\t\t\t\tbindingData.buffer = bufferGPU;\n\n\t\t\t\t}\n\n\t\t\t\tentriesGPU.push( { binding: bindingPoint, resource: { buffer: bindingData.buffer } } );\n\n\t\t\t} else if ( binding.isStorageBuffer ) {\n\n\t\t\t\tconst buffer = backend.get( binding.attribute ).buffer;\n\n\t\t\t\tentriesGPU.push( { binding: bindingPoint, resource: { buffer: buffer } } );\n\n\t\t\t} else if ( binding.isSampledTexture ) {\n\n\t\t\t\tconst textureData = backend.get( binding.texture );\n\n\t\t\t\tlet resourceGPU;\n\n\t\t\t\tif ( textureData.externalTexture !== undefined ) {\n\n\t\t\t\t\tresourceGPU = device.importExternalTexture( { source: textureData.externalTexture } );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst mipLevelCount = binding.store ? 1 : textureData.texture.mipLevelCount;\n\t\t\t\t\tconst baseMipLevel = binding.store ? binding.mipLevel : 0;\n\t\t\t\t\tlet propertyName = `view-${ textureData.texture.width }-${ textureData.texture.height }`;\n\n\t\t\t\t\tif ( textureData.texture.depthOrArrayLayers > 1 ) {\n\n\t\t\t\t\t\tpropertyName += `-${ textureData.texture.depthOrArrayLayers }`;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpropertyName += `-${ mipLevelCount }-${ baseMipLevel }`;\n\n\t\t\t\t\tresourceGPU = textureData[ propertyName ];\n\n\t\t\t\t\tif ( resourceGPU === undefined ) {\n\n\t\t\t\t\t\tconst aspectGPU = GPUTextureAspect.All;\n\n\t\t\t\t\t\tlet dimensionViewGPU;\n\n\t\t\t\t\t\tif ( binding.isSampledCubeTexture ) {\n\n\t\t\t\t\t\t\tdimensionViewGPU = GPUTextureViewDimension.Cube;\n\n\t\t\t\t\t\t} else if ( binding.isSampledTexture3D ) {\n\n\t\t\t\t\t\t\tdimensionViewGPU = GPUTextureViewDimension.ThreeD;\n\n\t\t\t\t\t\t} else if ( binding.texture.isArrayTexture || binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\t\t\tdimensionViewGPU = GPUTextureViewDimension.TwoDArray;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdimensionViewGPU = GPUTextureViewDimension.TwoD;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresourceGPU = textureData[ propertyName ] = textureData.texture.createView( { aspect: aspectGPU, dimension: dimensionViewGPU, mipLevelCount, baseMipLevel } );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tentriesGPU.push( { binding: bindingPoint, resource: resourceGPU } );\n\n\t\t\t} else if ( binding.isSampler ) {\n\n\t\t\t\tconst textureGPU = backend.get( binding.texture );\n\n\t\t\t\tentriesGPU.push( { binding: bindingPoint, resource: textureGPU.sampler } );\n\n\t\t\t}\n\n\t\t\tbindingPoint ++;\n\n\t\t}\n\n\t\treturn device.createBindGroup( {\n\t\t\tlabel: 'bindGroup_' + bindGroup.name,\n\t\t\tlayout: layoutGPU,\n\t\t\tentries: entriesGPU\n\t\t} );\n\n\t}\n\n\t/**\n\t * Creates a GPU bind group layout entries for the given bind group.\n\t *\n\t * @private\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @return {Array<GPUBindGroupLayoutEntry>} The GPU bind group layout entries.\n\t */\n\t_createLayoutEntries( bindGroup ) {\n\n\t\tconst entries = [];\n\t\tlet index = 0;\n\n\t\tfor ( const binding of bindGroup.bindings ) {\n\n\t\t\tconst backend = this.backend;\n\n\t\t\tconst bindingGPU = {\n\t\t\t\tbinding: index,\n\t\t\t\tvisibility: binding.visibility\n\t\t\t};\n\n\t\t\tif ( binding.isUniformBuffer || binding.isStorageBuffer ) {\n\n\t\t\t\tconst buffer = {}; // GPUBufferBindingLayout\n\n\t\t\t\tif ( binding.isStorageBuffer ) {\n\n\t\t\t\t\tif ( binding.visibility & GPUShaderStage.COMPUTE ) {\n\n\t\t\t\t\t\t// compute\n\n\t\t\t\t\t\tif ( binding.access === NodeAccess.READ_WRITE || binding.access === NodeAccess.WRITE_ONLY ) {\n\n\t\t\t\t\t\t\tbuffer.type = GPUBufferBindingType.Storage;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbuffer.type = GPUBufferBindingType.ReadOnlyStorage;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbuffer.type = GPUBufferBindingType.ReadOnlyStorage;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbindingGPU.buffer = buffer;\n\n\t\t\t} else if ( binding.isSampledTexture && binding.store ) {\n\n\t\t\t\tconst storageTexture = {}; // GPUStorageTextureBindingLayout\n\t\t\t\tstorageTexture.format = this.backend.get( binding.texture ).texture.format;\n\n\t\t\t\tconst access = binding.access;\n\n\t\t\t\tif ( access === NodeAccess.READ_WRITE ) {\n\n\t\t\t\t\tstorageTexture.access = GPUStorageTextureAccess.ReadWrite;\n\n\t\t\t\t} else if ( access === NodeAccess.WRITE_ONLY ) {\n\n\t\t\t\t\tstorageTexture.access = GPUStorageTextureAccess.WriteOnly;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstorageTexture.access = GPUStorageTextureAccess.ReadOnly;\n\n\t\t\t\t}\n\n\t\t\t\tif ( binding.texture.isArrayTexture ) {\n\n\t\t\t\t\tstorageTexture.viewDimension = GPUTextureViewDimension.TwoDArray;\n\n\t\t\t\t} else if ( binding.texture.is3DTexture ) {\n\n\t\t\t\t\tstorageTexture.viewDimension = GPUTextureViewDimension.ThreeD;\n\n\t\t\t\t}\n\n\t\t\t\tbindingGPU.storageTexture = storageTexture;\n\n\t\t\t} else if ( binding.isSampledTexture ) {\n\n\t\t\t\tconst texture = {}; // GPUTextureBindingLayout\n\n\t\t\t\tconst { primarySamples } = backend.utils.getTextureSampleData( binding.texture );\n\n\t\t\t\tif ( primarySamples > 1 ) {\n\n\t\t\t\t\ttexture.multisampled = true;\n\n\t\t\t\t\tif ( ! binding.texture.isDepthTexture ) {\n\n\t\t\t\t\t\ttexture.sampleType = GPUTextureSampleType.UnfilterableFloat;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( binding.texture.isDepthTexture ) {\n\n\t\t\t\t\tif ( backend.compatibilityMode && binding.texture.compareFunction === null ) {\n\n\t\t\t\t\t\ttexture.sampleType = GPUTextureSampleType.UnfilterableFloat;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture.sampleType = GPUTextureSampleType.Depth;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( binding.texture.isDataTexture || binding.texture.isDataArrayTexture || binding.texture.isData3DTexture || binding.texture.isStorageTexture ) {\n\n\t\t\t\t\tconst type = binding.texture.type;\n\n\t\t\t\t\tif ( type === IntType ) {\n\n\t\t\t\t\t\ttexture.sampleType = GPUTextureSampleType.SInt;\n\n\t\t\t\t\t} else if ( type === UnsignedIntType ) {\n\n\t\t\t\t\t\ttexture.sampleType = GPUTextureSampleType.UInt;\n\n\t\t\t\t\t} else if ( type === FloatType ) {\n\n\t\t\t\t\t\tif ( this.backend.hasFeature( 'float32-filterable' ) ) {\n\n\t\t\t\t\t\t\ttexture.sampleType = GPUTextureSampleType.Float;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttexture.sampleType = GPUTextureSampleType.UnfilterableFloat;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( binding.isSampledCubeTexture ) {\n\n\t\t\t\t\ttexture.viewDimension = GPUTextureViewDimension.Cube;\n\n\t\t\t\t} else if ( binding.texture.isArrayTexture || binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\ttexture.viewDimension = GPUTextureViewDimension.TwoDArray;\n\n\t\t\t\t} else if ( binding.isSampledTexture3D ) {\n\n\t\t\t\t\ttexture.viewDimension = GPUTextureViewDimension.ThreeD;\n\n\t\t\t\t}\n\n\t\t\t\tbindingGPU.texture = texture;\n\n\t\t\t} else if ( binding.isSampler ) {\n\n\t\t\t\tconst sampler = {}; // GPUSamplerBindingLayout\n\n\t\t\t\tif ( binding.texture.isDepthTexture ) {\n\n\t\t\t\t\tif ( binding.texture.compareFunction !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {\n\n\t\t\t\t\t\tsampler.type = GPUSamplerBindingType.Comparison;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Depth textures without compare must use non-filtering sampler\n\t\t\t\t\t\tsampler.type = GPUSamplerBindingType.NonFiltering;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbindingGPU.sampler = sampler;\n\n\t\t\t} else {\n\n\t\t\t\terror( `WebGPUBindingUtils: Unsupported binding \"${ binding }\".` );\n\n\t\t\t}\n\n\t\t\tentries.push( bindingGPU );\n\t\t\tindex ++;\n\n\t\t}\n\n\t\treturn entries;\n\n\t}\n\n\t/**\n\t * Delete the data associated with a bind group.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group.\n\t */\n\tdeleteBindGroupData( bindGroup ) {\n\n\t\tconst { backend } = this;\n\n\t\tconst bindingsData = backend.get( bindGroup );\n\n\t\tif ( bindingsData.layout ) {\n\n\t\t\tbindingsData.layout.usedTimes --;\n\n\t\t\tif ( bindingsData.layout.usedTimes === 0 ) {\n\n\t\t\t\tthis._bindGroupLayoutCache.delete( bindingsData.layoutKey );\n\n\t\t\t}\n\n\t\t\tbindingsData.layout = undefined;\n\t\t\tbindingsData.layoutKey = undefined;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Frees internal resources.\n\t */\n\tdispose() {\n\n\t\tthis._bindGroupLayoutCache.clear();\n\n\t}\n\n}\n\n/**\n * A WebGPU backend utility module for managing the device's capabilities.\n *\n * @private\n */\nclass WebGPUCapabilities {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGPUBackend} backend - The WebGPU backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGPU backend.\n\t\t *\n\t\t * @type {WebGPUBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t}\n\n\t/**\n\t * Returns the maximum anisotropy texture filtering value.\n\t *\n\t * @return {number} The maximum anisotropy texture filtering value.\n\t */\n\tgetMaxAnisotropy() {\n\n\t\treturn 16;\n\n\t}\n\n\t/**\n\t * Returns the maximum number of bytes available for uniform buffers.\n\t *\n\t * @return {number} The maximum number of bytes available for uniform buffers.\n\t */\n\tgetUniformBufferLimit() {\n\n\t\treturn this.backend.device.limits.maxUniformBufferBindingSize;\n\n\t}\n\n}\n\n/**\n * A WebGPU backend utility module for managing pipelines.\n *\n * @private\n */\nclass WebGPUPipelineUtils {\n\n\t/**\n\t * Constructs a new utility object.\n\t *\n\t * @param {WebGPUBackend} backend - The WebGPU backend.\n\t */\n\tconstructor( backend ) {\n\n\t\t/**\n\t\t * A reference to the WebGPU backend.\n\t\t *\n\t\t * @type {WebGPUBackend}\n\t\t */\n\t\tthis.backend = backend;\n\n\t\t/**\n\t\t * A Weak Map that tracks the active pipeline for render or compute passes.\n\t\t *\n\t\t * @private\n\t\t * @type {WeakMap<(GPURenderPassEncoder|GPUComputePassEncoder),(GPURenderPipeline|GPUComputePipeline)>}\n\t\t */\n\t\tthis._activePipelines = new WeakMap();\n\n\t}\n\n\t/**\n\t * Sets the given pipeline for the given pass. The method makes sure to only set the\n\t * pipeline when necessary.\n\t *\n\t * @param {(GPURenderPassEncoder|GPUComputePassEncoder)} pass - The pass encoder.\n\t * @param {(GPURenderPipeline|GPUComputePipeline)} pipeline - The pipeline.\n\t */\n\tsetPipeline( pass, pipeline ) {\n\n\t\tconst currentPipeline = this._activePipelines.get( pass );\n\n\t\tif ( currentPipeline !== pipeline ) {\n\n\t\t\tpass.setPipeline( pipeline );\n\n\t\t\tthis._activePipelines.set( pass, pipeline );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the sample count derived from the given render context.\n\t *\n\t * @private\n\t * @param {RenderContext} renderContext - The render context.\n\t * @return {number} The sample count.\n\t */\n\t_getSampleCount( renderContext ) {\n\n\t\treturn this.backend.utils.getSampleCountRenderContext( renderContext );\n\n\t}\n\n\t/**\n\t * Creates a render pipeline for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {Array<Promise>} promises - An array of compilation promises which are used in `compileAsync()`.\n\t */\n\tcreateRenderPipeline( renderObject, promises ) {\n\n\t\tconst { object, material, geometry, pipeline } = renderObject;\n\t\tconst { vertexProgram, fragmentProgram } = pipeline;\n\n\t\tconst backend = this.backend;\n\t\tconst device = backend.device;\n\t\tconst utils = backend.utils;\n\n\t\tconst pipelineData = backend.get( pipeline );\n\n\t\t// bind group layouts\n\n\t\tconst bindGroupLayouts = [];\n\n\t\tfor ( const bindGroup of renderObject.getBindings() ) {\n\n\t\t\tconst bindingsData = backend.get( bindGroup );\n\t\t\tconst { layoutGPU } = bindingsData.layout;\n\n\t\t\tbindGroupLayouts.push( layoutGPU );\n\n\t\t}\n\n\t\t// vertex buffers\n\n\t\tconst vertexBuffers = backend.attributeUtils.createShaderVertexBuffers( renderObject );\n\n\t\t// material blending\n\n\t\tlet materialBlending;\n\n\t\tif ( material.blending !== NoBlending && ( material.blending !== NormalBlending || material.transparent !== false ) ) {\n\n\t\t\tmaterialBlending = this._getBlending( material );\n\n\t\t}\n\n\t\t// stencil\n\n\t\tlet stencilFront = {};\n\n\t\tif ( material.stencilWrite === true ) {\n\n\t\t\tstencilFront = {\n\t\t\t\tcompare: this._getStencilCompare( material ),\n\t\t\t\tfailOp: this._getStencilOperation( material.stencilFail ),\n\t\t\t\tdepthFailOp: this._getStencilOperation( material.stencilZFail ),\n\t\t\t\tpassOp: this._getStencilOperation( material.stencilZPass )\n\t\t\t};\n\n\t\t}\n\n\t\tconst colorWriteMask = this._getColorWriteMask( material );\n\n\t\tconst targets = [];\n\n\t\tif ( renderObject.context.textures !== null ) {\n\n\t\t\tconst textures = renderObject.context.textures;\n\t\t\tconst mrt = renderObject.context.mrt;\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\t\t\t\tconst colorFormat = utils.getTextureFormatGPU( texture );\n\n\t\t\t\t// mrt blending\n\n\t\t\t\tlet blending;\n\n\t\t\t\tif ( mrt !== null ) {\n\n\t\t\t\t\tif ( this.backend.compatibilityMode !== true ) {\n\n\t\t\t\t\t\tconst blendMode = mrt.getBlendMode( texture.name );\n\n\t\t\t\t\t\tif ( blendMode.blending === MaterialBlending ) {\n\n\t\t\t\t\t\t\tblending = materialBlending;\n\n\t\t\t\t\t\t} else if ( blendMode.blending !== NoBlending ) {\n\n\t\t\t\t\t\t\tblending = this._getBlending( blendMode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\twarnOnce( 'WebGPURenderer: Multiple Render Targets (MRT) blending configuration is not fully supported in compatibility mode. The material blending will be used for all render targets.' );\n\n\t\t\t\t\t\tblending = materialBlending;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tblending = materialBlending;\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( {\n\t\t\t\t\tformat: colorFormat,\n\t\t\t\t\tblend: blending,\n\t\t\t\t\twriteMask: colorWriteMask\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst colorFormat = utils.getCurrentColorFormat( renderObject.context );\n\n\t\t\ttargets.push( {\n\t\t\t\tformat: colorFormat,\n\t\t\t\tblend: materialBlending,\n\t\t\t\twriteMask: colorWriteMask\n\t\t\t} );\n\n\t\t}\n\n\t\tconst vertexModule = backend.get( vertexProgram ).module;\n\t\tconst fragmentModule = backend.get( fragmentProgram ).module;\n\n\t\tconst primitiveState = this._getPrimitiveState( object, geometry, material );\n\t\tconst depthCompare = this._getDepthCompare( material );\n\t\tconst depthStencilFormat = utils.getCurrentDepthStencilFormat( renderObject.context );\n\n\t\tconst sampleCount = this._getSampleCount( renderObject.context );\n\n\t\tconst pipelineDescriptor = {\n\t\t\tlabel: `renderPipeline_${ material.name || material.type }_${ material.id }`,\n\t\t\tvertex: Object.assign( {}, vertexModule, { buffers: vertexBuffers } ),\n\t\t\tfragment: Object.assign( {}, fragmentModule, { targets } ),\n\t\t\tprimitive: primitiveState,\n\t\t\tmultisample: {\n\t\t\t\tcount: sampleCount,\n\t\t\t\talphaToCoverageEnabled: material.alphaToCoverage && sampleCount > 1\n\t\t\t},\n\t\t\tlayout: device.createPipelineLayout( {\n\t\t\t\tbindGroupLayouts\n\t\t\t} )\n\t\t};\n\n\n\t\tconst depthStencil = {};\n\t\tconst renderDepth = renderObject.context.depth;\n\t\tconst renderStencil = renderObject.context.stencil;\n\n\t\tif ( renderDepth === true || renderStencil === true ) {\n\n\t\t\tif ( renderDepth === true ) {\n\n\t\t\t\tdepthStencil.format = depthStencilFormat;\n\t\t\t\tdepthStencil.depthWriteEnabled = material.depthWrite;\n\t\t\t\tdepthStencil.depthCompare = depthCompare;\n\n\t\t\t}\n\n\t\t\tif ( renderStencil === true ) {\n\n\t\t\t\tdepthStencil.stencilFront = stencilFront;\n\t\t\t\tdepthStencil.stencilBack = stencilFront; // apply the same stencil ops to both faces, matching gl.stencilOp() which is not face-separated\n\t\t\t\tdepthStencil.stencilReadMask = material.stencilFuncMask;\n\t\t\t\tdepthStencil.stencilWriteMask = material.stencilWriteMask;\n\n\t\t\t}\n\n\t\t\tif ( material.polygonOffset === true ) {\n\n\t\t\t\tdepthStencil.depthBias = material.polygonOffsetUnits;\n\t\t\t\tdepthStencil.depthBiasSlopeScale = material.polygonOffsetFactor;\n\t\t\t\tdepthStencil.depthBiasClamp = 0; // three.js does not provide an API to configure this value\n\n\t\t\t}\n\n\t\t\tpipelineDescriptor.depthStencil = depthStencil;\n\n\t\t}\n\n\t\t// create pipeline\n\n\t\tdevice.pushErrorScope( 'validation' );\n\n\t\tif ( promises === null ) {\n\n\t\t\tpipelineData.pipeline = device.createRenderPipeline( pipelineDescriptor );\n\n\t\t\tdevice.popErrorScope().then( ( err ) => {\n\n\t\t\t\tif ( err !== null ) {\n\n\t\t\t\t\tpipelineData.error = true;\n\n\t\t\t\t\terror( err.message );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\tconst p = new Promise( async ( resolve /*, reject*/ ) => {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tpipelineData.pipeline = await device.createRenderPipelineAsync( pipelineDescriptor );\n\n\t\t\t\t} catch ( err ) { }\n\n\t\t\t\tconst errorScope = await device.popErrorScope();\n\n\t\t\t\tif ( errorScope !== null ) {\n\n\t\t\t\t\tpipelineData.error = true;\n\n\t\t\t\t\terror( errorScope.message );\n\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\n\t\t\t} );\n\n\t\t\tpromises.push( p );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates GPU render bundle encoder for the given render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {?string} [label='renderBundleEncoder'] - The label.\n\t * @return {GPURenderBundleEncoder} The GPU render bundle encoder.\n\t */\n\tcreateBundleEncoder( renderContext, label = 'renderBundleEncoder' ) {\n\n\t\tconst backend = this.backend;\n\t\tconst { utils, device } = backend;\n\n\t\tconst depthStencilFormat = utils.getCurrentDepthStencilFormat( renderContext );\n\t\tconst colorFormats = utils.getCurrentColorFormats( renderContext );\n\t\tconst sampleCount = this._getSampleCount( renderContext );\n\n\t\tconst descriptor = {\n\t\t\tlabel,\n\t\t\tcolorFormats,\n\t\t\tdepthStencilFormat,\n\t\t\tsampleCount\n\t\t};\n\n\t\treturn device.createRenderBundleEncoder( descriptor );\n\n\t}\n\n\t/**\n\t * Creates a compute pipeline for the given compute node.\n\t *\n\t * @param {ComputePipeline} pipeline - The compute pipeline.\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t */\n\tcreateComputePipeline( pipeline, bindings ) {\n\n\t\tconst backend = this.backend;\n\t\tconst device = backend.device;\n\n\t\tconst computeProgram = backend.get( pipeline.computeProgram ).module;\n\n\t\tconst pipelineGPU = backend.get( pipeline );\n\n\t\t// bind group layouts\n\n\t\tconst bindGroupLayouts = [];\n\n\t\tfor ( const bindingsGroup of bindings ) {\n\n\t\t\tconst bindingsData = backend.get( bindingsGroup );\n\t\t\tconst { layoutGPU } = bindingsData.layout;\n\n\t\t\tbindGroupLayouts.push( layoutGPU );\n\n\t\t}\n\n\t\tpipelineGPU.pipeline = device.createComputePipeline( {\n\t\t\tcompute: computeProgram,\n\t\t\tlayout: device.createPipelineLayout( {\n\t\t\t\tbindGroupLayouts\n\t\t\t} )\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns the blending state as a descriptor object required\n\t * for the pipeline creation.\n\t *\n\t * @private\n\t * @param {Material|BlendMode} object - The object containing blending information.\n\t * @return {Object} The blending state.\n\t */\n\t_getBlending( object ) {\n\n\t\tlet color, alpha;\n\n\t\tconst blending = object.blending;\n\t\tconst blendSrc = object.blendSrc;\n\t\tconst blendDst = object.blendDst;\n\t\tconst blendEquation = object.blendEquation;\n\n\n\t\tif ( blending === CustomBlending ) {\n\n\t\t\tconst blendSrcAlpha = object.blendSrcAlpha !== null ? object.blendSrcAlpha : blendSrc;\n\t\t\tconst blendDstAlpha = object.blendDstAlpha !== null ? object.blendDstAlpha : blendDst;\n\t\t\tconst blendEquationAlpha = object.blendEquationAlpha !== null ? object.blendEquationAlpha : blendEquation;\n\n\t\t\tcolor = {\n\t\t\t\tsrcFactor: this._getBlendFactor( blendSrc ),\n\t\t\t\tdstFactor: this._getBlendFactor( blendDst ),\n\t\t\t\toperation: this._getBlendOperation( blendEquation )\n\t\t\t};\n\n\t\t\talpha = {\n\t\t\t\tsrcFactor: this._getBlendFactor( blendSrcAlpha ),\n\t\t\t\tdstFactor: this._getBlendFactor( blendDstAlpha ),\n\t\t\t\toperation: this._getBlendOperation( blendEquationAlpha )\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconst premultipliedAlpha = object.premultipliedAlpha;\n\n\t\t\tconst setBlend = ( srcRGB, dstRGB, srcAlpha, dstAlpha ) => {\n\n\t\t\t\tcolor = {\n\t\t\t\t\tsrcFactor: srcRGB,\n\t\t\t\t\tdstFactor: dstRGB,\n\t\t\t\t\toperation: GPUBlendOperation.Add\n\t\t\t\t};\n\n\t\t\t\talpha = {\n\t\t\t\t\tsrcFactor: srcAlpha,\n\t\t\t\t\tdstFactor: dstAlpha,\n\t\t\t\t\toperation: GPUBlendOperation.Add\n\t\t\t\t};\n\n\t\t\t};\n\n\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\tsetBlend( GPUBlendFactor.One, GPUBlendFactor.OneMinusSrcAlpha, GPUBlendFactor.One, GPUBlendFactor.OneMinusSrcAlpha );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\tsetBlend( GPUBlendFactor.One, GPUBlendFactor.One, GPUBlendFactor.One, GPUBlendFactor.One );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\tsetBlend( GPUBlendFactor.Zero, GPUBlendFactor.OneMinusSrc, GPUBlendFactor.Zero, GPUBlendFactor.One );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\tsetBlend( GPUBlendFactor.Dst, GPUBlendFactor.OneMinusSrcAlpha, GPUBlendFactor.Zero, GPUBlendFactor.One );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\tsetBlend( GPUBlendFactor.SrcAlpha, GPUBlendFactor.OneMinusSrcAlpha, GPUBlendFactor.One, GPUBlendFactor.OneMinusSrcAlpha );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\tsetBlend( GPUBlendFactor.SrcAlpha, GPUBlendFactor.One, GPUBlendFactor.One, GPUBlendFactor.One );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\terror( `WebGPURenderer: \"SubtractiveBlending\" requires \"${ object.isMaterial ? 'material' : 'blendMode' }.premultipliedAlpha = true\".` );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\terror( `WebGPURenderer: \"MultiplyBlending\" requires \"${ object.isMaterial ? 'material' : 'blendMode' }.premultipliedAlpha = true\".` );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( color !== undefined && alpha !== undefined ) {\n\n\t\t\treturn { color, alpha };\n\n\t\t} else {\n\n\t\t\terror( 'WebGPURenderer: Invalid blending: ', blending );\n\n\t\t}\n\n\t}\n\t/**\n\t * Returns the GPU blend factor which is required for the pipeline creation.\n\t *\n\t * @private\n\t * @param {number} blend - The blend factor as a three.js constant.\n\t * @return {string} The GPU blend factor.\n\t */\n\t_getBlendFactor( blend ) {\n\n\t\tlet blendFactor;\n\n\t\tswitch ( blend ) {\n\n\t\t\tcase ZeroFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.Zero;\n\t\t\t\tbreak;\n\n\t\t\tcase OneFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.One;\n\t\t\t\tbreak;\n\n\t\t\tcase SrcColorFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.Src;\n\t\t\t\tbreak;\n\n\t\t\tcase OneMinusSrcColorFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.OneMinusSrc;\n\t\t\t\tbreak;\n\n\t\t\tcase SrcAlphaFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.SrcAlpha;\n\t\t\t\tbreak;\n\n\t\t\tcase OneMinusSrcAlphaFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.OneMinusSrcAlpha;\n\t\t\t\tbreak;\n\n\t\t\tcase DstColorFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.Dst;\n\t\t\t\tbreak;\n\n\t\t\tcase OneMinusDstColorFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.OneMinusDst;\n\t\t\t\tbreak;\n\n\t\t\tcase DstAlphaFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.DstAlpha;\n\t\t\t\tbreak;\n\n\t\t\tcase OneMinusDstAlphaFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.OneMinusDstAlpha;\n\t\t\t\tbreak;\n\n\t\t\tcase SrcAlphaSaturateFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.SrcAlphaSaturated;\n\t\t\t\tbreak;\n\n\t\t\tcase BlendColorFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.Constant;\n\t\t\t\tbreak;\n\n\t\t\tcase OneMinusBlendColorFactor:\n\t\t\t\tblendFactor = GPUBlendFactor.OneMinusConstant;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\terror( 'WebGPURenderer: Blend factor not supported.', blend );\n\n\t\t}\n\n\t\treturn blendFactor;\n\n\t}\n\n\t/**\n\t * Returns the GPU stencil compare function which is required for the pipeline creation.\n\t *\n\t * @private\n\t * @param {Material} material - The material.\n\t * @return {string} The GPU stencil compare function.\n\t */\n\t_getStencilCompare( material ) {\n\n\t\tlet stencilCompare;\n\n\t\tconst stencilFunc = material.stencilFunc;\n\n\t\tswitch ( stencilFunc ) {\n\n\t\t\tcase NeverStencilFunc:\n\t\t\t\tstencilCompare = GPUCompareFunction.Never;\n\t\t\t\tbreak;\n\n\t\t\tcase AlwaysStencilFunc:\n\t\t\t\tstencilCompare = GPUCompareFunction.Always;\n\t\t\t\tbreak;\n\n\t\t\tcase LessStencilFunc:\n\t\t\t\tstencilCompare = GPUCompareFunction.Less;\n\t\t\t\tbreak;\n\n\t\t\tcase LessEqualStencilFunc:\n\t\t\t\tstencilCompare = GPUCompareFunction.LessEqual;\n\t\t\t\tbreak;\n\n\t\t\tcase EqualStencilFunc:\n\t\t\t\tstencilCompare = GPUCompareFunction.Equal;\n\t\t\t\tbreak;\n\n\t\t\tcase GreaterEqualStencilFunc:\n\t\t\t\tstencilCompare = GPUCompareFunction.GreaterEqual;\n\t\t\t\tbreak;\n\n\t\t\tcase GreaterStencilFunc:\n\t\t\t\tstencilCompare = GPUCompareFunction.Greater;\n\t\t\t\tbreak;\n\n\t\t\tcase NotEqualStencilFunc:\n\t\t\t\tstencilCompare = GPUCompareFunction.NotEqual;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\terror( 'WebGPURenderer: Invalid stencil function.', stencilFunc );\n\n\t\t}\n\n\t\treturn stencilCompare;\n\n\t}\n\n\t/**\n\t * Returns the GPU stencil operation which is required for the pipeline creation.\n\t *\n\t * @private\n\t * @param {number} op - A three.js constant defining the stencil operation.\n\t * @return {string} The GPU stencil operation.\n\t */\n\t_getStencilOperation( op ) {\n\n\t\tlet stencilOperation;\n\n\t\tswitch ( op ) {\n\n\t\t\tcase KeepStencilOp:\n\t\t\t\tstencilOperation = GPUStencilOperation.Keep;\n\t\t\t\tbreak;\n\n\t\t\tcase ZeroStencilOp:\n\t\t\t\tstencilOperation = GPUStencilOperation.Zero;\n\t\t\t\tbreak;\n\n\t\t\tcase ReplaceStencilOp:\n\t\t\t\tstencilOperation = GPUStencilOperation.Replace;\n\t\t\t\tbreak;\n\n\t\t\tcase InvertStencilOp:\n\t\t\t\tstencilOperation = GPUStencilOperation.Invert;\n\t\t\t\tbreak;\n\n\t\t\tcase IncrementStencilOp:\n\t\t\t\tstencilOperation = GPUStencilOperation.IncrementClamp;\n\t\t\t\tbreak;\n\n\t\t\tcase DecrementStencilOp:\n\t\t\t\tstencilOperation = GPUStencilOperation.DecrementClamp;\n\t\t\t\tbreak;\n\n\t\t\tcase IncrementWrapStencilOp:\n\t\t\t\tstencilOperation = GPUStencilOperation.IncrementWrap;\n\t\t\t\tbreak;\n\n\t\t\tcase DecrementWrapStencilOp:\n\t\t\t\tstencilOperation = GPUStencilOperation.DecrementWrap;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\terror( 'WebGPURenderer: Invalid stencil operation.', stencilOperation );\n\n\t\t}\n\n\t\treturn stencilOperation;\n\n\t}\n\n\t/**\n\t * Returns the GPU blend operation which is required for the pipeline creation.\n\t *\n\t * @private\n\t * @param {number} blendEquation - A three.js constant defining the blend equation.\n\t * @return {string} The GPU blend operation.\n\t */\n\t_getBlendOperation( blendEquation ) {\n\n\t\tlet blendOperation;\n\n\t\tswitch ( blendEquation ) {\n\n\t\t\tcase AddEquation:\n\t\t\t\tblendOperation = GPUBlendOperation.Add;\n\t\t\t\tbreak;\n\n\t\t\tcase SubtractEquation:\n\t\t\t\tblendOperation = GPUBlendOperation.Subtract;\n\t\t\t\tbreak;\n\n\t\t\tcase ReverseSubtractEquation:\n\t\t\t\tblendOperation = GPUBlendOperation.ReverseSubtract;\n\t\t\t\tbreak;\n\n\t\t\tcase MinEquation:\n\t\t\t\tblendOperation = GPUBlendOperation.Min;\n\t\t\t\tbreak;\n\n\t\t\tcase MaxEquation:\n\t\t\t\tblendOperation = GPUBlendOperation.Max;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\terror( 'WebGPUPipelineUtils: Blend equation not supported.', blendEquation );\n\n\t\t}\n\n\t\treturn blendOperation;\n\n\t}\n\n\t/**\n\t * Returns the primitive state as a descriptor object required\n\t * for the pipeline creation.\n\t *\n\t * @private\n\t * @param {Object3D} object - The 3D object.\n\t * @param {BufferGeometry} geometry - The geometry.\n\t * @param {Material} material - The material.\n\t * @return {Object} The primitive state.\n\t */\n\t_getPrimitiveState( object, geometry, material ) {\n\n\t\tconst descriptor = {};\n\t\tconst utils = this.backend.utils;\n\n\t\t//\n\n\t\tdescriptor.topology = utils.getPrimitiveTopology( object, material );\n\n\t\tif ( geometry.index !== null && object.isLine === true && object.isLineSegments !== true ) {\n\n\t\t\tdescriptor.stripIndexFormat = ( geometry.index.array instanceof Uint16Array ) ? GPUIndexFormat.Uint16 : GPUIndexFormat.Uint32;\n\n\t\t}\n\n\t\t//\n\n\t\tlet flipSided = ( material.side === BackSide );\n\n\t\tif ( object.isMesh && object.matrixWorld.determinant() < 0 ) flipSided = ! flipSided;\n\n\t\tdescriptor.frontFace = ( flipSided === true ) ? GPUFrontFace.CW : GPUFrontFace.CCW;\n\n\t\t//\n\n\t\tdescriptor.cullMode = ( material.side === DoubleSide ) ? GPUCullMode.None : GPUCullMode.Back;\n\n\t\treturn descriptor;\n\n\t}\n\n\t/**\n\t * Returns the GPU color write mask which is required for the pipeline creation.\n\t *\n\t * @private\n\t * @param {Material} material - The material.\n\t * @return {number} The GPU color write mask.\n\t */\n\t_getColorWriteMask( material ) {\n\n\t\treturn ( material.colorWrite === true ) ? GPUColorWriteFlags.All : GPUColorWriteFlags.None;\n\n\t}\n\n\t/**\n\t * Returns the GPU depth compare function which is required for the pipeline creation.\n\t *\n\t * @private\n\t * @param {Material} material - The material.\n\t * @return {string} The GPU depth compare function.\n\t */\n\t_getDepthCompare( material ) {\n\n\t\tlet depthCompare;\n\n\t\tif ( material.depthTest === false ) {\n\n\t\t\tdepthCompare = GPUCompareFunction.Always;\n\n\t\t} else {\n\n\t\t\tconst depthFunc = ( this.backend.parameters.reversedDepthBuffer ) ? ReversedDepthFuncs[ material.depthFunc ] : material.depthFunc;\n\n\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\tcase NeverDepth:\n\t\t\t\t\tdepthCompare = GPUCompareFunction.Never;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase AlwaysDepth:\n\t\t\t\t\tdepthCompare = GPUCompareFunction.Always;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase LessDepth:\n\t\t\t\t\tdepthCompare = GPUCompareFunction.Less;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase LessEqualDepth:\n\t\t\t\t\tdepthCompare = GPUCompareFunction.LessEqual;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase EqualDepth:\n\t\t\t\t\tdepthCompare = GPUCompareFunction.Equal;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase GreaterEqualDepth:\n\t\t\t\t\tdepthCompare = GPUCompareFunction.GreaterEqual;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase GreaterDepth:\n\t\t\t\t\tdepthCompare = GPUCompareFunction.Greater;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NotEqualDepth:\n\t\t\t\t\tdepthCompare = GPUCompareFunction.NotEqual;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\terror( 'WebGPUPipelineUtils: Invalid depth function.', depthFunc );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn depthCompare;\n\n\t}\n\n}\n\n/**\n * Manages a pool of WebGPU timestamp queries for performance measurement.\n * Extends the base TimestampQueryPool to provide WebGPU-specific implementation.\n *\n * @augments TimestampQueryPool\n */\nclass WebGPUTimestampQueryPool extends TimestampQueryPool {\n\n\t/**\n\t * Creates a new WebGPU timestamp query pool.\n\t *\n\t * @param {GPUDevice} device - The WebGPU device to create queries on.\n\t * @param {string} type - The type identifier for this query pool.\n\t * @param {number} [maxQueries=2048] - Maximum number of queries this pool can hold.\n\t */\n\tconstructor( device, type, maxQueries = 2048 ) {\n\n\t\tsuper( maxQueries );\n\t\tthis.device = device;\n\t\tthis.type = type;\n\n\t\tthis.querySet = this.device.createQuerySet( {\n\t\t\ttype: 'timestamp',\n\t\t\tcount: this.maxQueries,\n\t\t\tlabel: `queryset_global_timestamp_${type}`\n\t\t} );\n\n\t\tconst bufferSize = this.maxQueries * 8;\n\t\tthis.resolveBuffer = this.device.createBuffer( {\n\t\t\tlabel: `buffer_timestamp_resolve_${type}`,\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC\n\t\t} );\n\n\t\tthis.resultBuffer = this.device.createBuffer( {\n\t\t\tlabel: `buffer_timestamp_result_${type}`,\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t\t} );\n\n\t}\n\n\t/**\n\t * Allocates a pair of queries for a given render context.\n\t *\n\t * @param {string} uid - A unique identifier for the render context.\n\t * @returns {?number} The base offset for the allocated queries, or null if allocation failed.\n\t */\n\tallocateQueriesForContext( uid ) {\n\n\t\tif ( ! this.trackTimestamp || this.isDisposed ) return null;\n\n\t\tif ( this.currentQueryIndex + 2 > this.maxQueries ) {\n\n\t\t\twarnOnce( `WebGPUTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst baseOffset = this.currentQueryIndex;\n\t\tthis.currentQueryIndex += 2;\n\n\t\tthis.queryOffsets.set( uid, baseOffset );\n\n\t\treturn baseOffset;\n\n\t}\n\n\t/**\n\t * Asynchronously resolves all pending queries and returns the total duration.\n\t * If there's already a pending resolve operation, returns that promise instead.\n\t *\n\t * @async\n\t * @returns {Promise<number>} The total duration in milliseconds, or the last valid value if resolution fails.\n\t */\n\tasync resolveQueriesAsync() {\n\n\t\tif ( ! this.trackTimestamp || this.currentQueryIndex === 0 || this.isDisposed ) {\n\n\t\t\treturn this.lastValue;\n\n\t\t}\n\n\t\tif ( this.pendingResolve ) {\n\n\t\t\treturn this.pendingResolve;\n\n\t\t}\n\n\t\tthis.pendingResolve = this._resolveQueries();\n\n\t\ttry {\n\n\t\t\tconst result = await this.pendingResolve;\n\t\t\treturn result;\n\n\t\t} finally {\n\n\t\t\tthis.pendingResolve = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Internal method to resolve queries and calculate total duration.\n\t *\n\t * @async\n\t * @private\n\t * @returns {Promise<number>} The total duration in milliseconds.\n\t */\n\tasync _resolveQueries() {\n\n\t\tif ( this.isDisposed ) {\n\n\t\t\treturn this.lastValue;\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tif ( this.resultBuffer.mapState !== 'unmapped' ) {\n\n\t\t\t\treturn this.lastValue;\n\n\t\t\t}\n\n\t\t\tconst currentOffsets = new Map( this.queryOffsets );\n\t\t\tconst queryCount = this.currentQueryIndex;\n\t\t\tconst bytesUsed = queryCount * 8;\n\n\t\t\t// Reset state before GPU work\n\t\t\tthis.currentQueryIndex = 0;\n\t\t\tthis.queryOffsets.clear();\n\n\t\t\tconst commandEncoder = this.device.createCommandEncoder();\n\n\t\t\tcommandEncoder.resolveQuerySet(\n\t\t\t\tthis.querySet,\n\t\t\t\t0,\n\t\t\t\tqueryCount,\n\t\t\t\tthis.resolveBuffer,\n\t\t\t\t0\n\t\t\t);\n\n\t\t\tcommandEncoder.copyBufferToBuffer(\n\t\t\t\tthis.resolveBuffer,\n\t\t\t\t0,\n\t\t\t\tthis.resultBuffer,\n\t\t\t\t0,\n\t\t\t\tbytesUsed\n\t\t\t);\n\n\t\t\tconst commandBuffer = commandEncoder.finish();\n\t\t\tthis.device.queue.submit( [ commandBuffer ] );\n\n\t\t\tif ( this.resultBuffer.mapState !== 'unmapped' ) {\n\n\t\t\t\treturn this.lastValue;\n\n\t\t\t}\n\n\t\t\t// Create and track the mapping operation\n\t\t\tawait this.resultBuffer.mapAsync( GPUMapMode.READ, 0, bytesUsed );\n\n\t\t\tif ( this.isDisposed ) {\n\n\t\t\t\tif ( this.resultBuffer.mapState === 'mapped' ) {\n\n\t\t\t\t\tthis.resultBuffer.unmap();\n\n\t\t\t\t}\n\n\t\t\t\treturn this.lastValue;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst times = new BigUint64Array( this.resultBuffer.getMappedRange( 0, bytesUsed ) );\n\t\t\tconst framesDuration = {};\n\n\t\t\tconst frames = [];\n\n\t\t\tfor ( const [ uid, baseOffset ] of currentOffsets ) {\n\n\t\t\t\tconst match = uid.match( /^(.*):f(\\d+)$/ );\n\t\t\t\tconst frame = parseInt( match[ 2 ] );\n\n\t\t\t\tif ( frames.includes( frame ) === false ) {\n\n\t\t\t\t\tframes.push( frame );\n\n\t\t\t\t}\n\n\t\t\t\tif ( framesDuration[ frame ] === undefined ) framesDuration[ frame ] = 0;\n\n\t\t\t\tconst startTime = times[ baseOffset ];\n\t\t\t\tconst endTime = times[ baseOffset + 1 ];\n\t\t\t\tconst duration = Number( endTime - startTime ) / 1e6;\n\n\t\t\t\tthis.timestamps.set( uid, duration );\n\n\t\t\t\tframesDuration[ frame ] += duration;\n\n\t\t\t}\n\n\t\t\t// Return the total duration of the last frame\n\t\t\tconst totalDuration = framesDuration[ frames[ frames.length - 1 ] ];\n\n\t\t\tthis.resultBuffer.unmap();\n\t\t\tthis.lastValue = totalDuration;\n\t\t\tthis.frames = frames;\n\n\t\t\treturn totalDuration;\n\n\t\t} catch ( e ) {\n\n\t\t\terror( 'Error resolving queries:', e );\n\t\t\tif ( this.resultBuffer.mapState === 'mapped' ) {\n\n\t\t\t\tthis.resultBuffer.unmap();\n\n\t\t\t}\n\n\t\t\treturn this.lastValue;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Dispose of the query pool.\n\t *\n\t * @async\n\t * @returns {Promise} A Promise that resolves when the dispose has been executed.\n\t */\n\tasync dispose() {\n\n\t\tif ( this.isDisposed ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.isDisposed = true;\n\n\t\t// Wait for pending resolve operation\n\t\tif ( this.pendingResolve ) {\n\n\t\t\ttry {\n\n\t\t\t\tawait this.pendingResolve;\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\terror( 'Error waiting for pending resolve:', e );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Ensure buffer is unmapped before destroying\n\t\tif ( this.resultBuffer && this.resultBuffer.mapState === 'mapped' ) {\n\n\t\t\ttry {\n\n\t\t\t\tthis.resultBuffer.unmap();\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\terror( 'Error unmapping buffer:', e );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Destroy resources\n\t\tif ( this.querySet ) {\n\n\t\t\tthis.querySet.destroy();\n\t\t\tthis.querySet = null;\n\n\t\t}\n\n\t\tif ( this.resolveBuffer ) {\n\n\t\t\tthis.resolveBuffer.destroy();\n\t\t\tthis.resolveBuffer = null;\n\n\t\t}\n\n\t\tif ( this.resultBuffer ) {\n\n\t\t\tthis.resultBuffer.destroy();\n\t\t\tthis.resultBuffer = null;\n\n\t\t}\n\n\t\tthis.queryOffsets.clear();\n\t\tthis.pendingResolve = null;\n\n\t}\n\n}\n\n/*// debugger tools\nimport 'https://greggman.github.io/webgpu-avoid-redundant-state-setting/webgpu-check-redundant-state-setting.js';\n//*/\n\n\nconst _clearValue = { r: 0, g: 0, b: 0, a: 1 };\n\n/**\n * A backend implementation targeting WebGPU.\n *\n * @private\n * @augments Backend\n */\nclass WebGPUBackend extends Backend {\n\n\t/**\n\t * WebGPUBackend options.\n\t *\n\t * @typedef {Object} WebGPUBackend~Options\n\t * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.\n\t * @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.\n\t * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.\n\t * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.\n\t * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.\n\t * @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.\n\t * @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.\n\t * @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.\n\t * @property {boolean} [trackTimestamp=false] - Whether to track timestamps with a Timestamp Query API or not.\n\t * @property {string} [powerPreference=undefined] - The power preference.\n\t * @property {Object} [requiredLimits=undefined] - Specifies the limits that are required by the device request. The request will fail if the adapter cannot provide these limits.\n\t * @property {GPUDevice} [device=undefined] - If there is an existing GPU device on app level, it can be passed to the renderer as a parameter.\n\t * @property {number} [outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.\n\t */\n\n\t/**\n\t * Constructs a new WebGPU backend.\n\t *\n\t * @param {WebGPUBackend~Options} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters = {} ) {\n\n\t\tsuper( parameters );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWebGPUBackend = true;\n\n\t\t// some parameters require default values other than \"undefined\"\n\t\tthis.parameters.alpha = ( parameters.alpha === undefined ) ? true : parameters.alpha;\n\n\t\tthis.parameters.requiredLimits = ( parameters.requiredLimits === undefined ) ? {} : parameters.requiredLimits;\n\n\t\t/**\n\t\t * Indicates whether the backend is in WebGPU compatibility mode or not.\n\t\t * The backend must be initialized before the property can be evaluated.\n\t\t *\n\t\t * @type {?boolean}\n\t\t * @readonly\n\t\t * @default null\n\t\t */\n\t\tthis.compatibilityMode = null;\n\n\t\t/**\n\t\t * A reference to the device.\n\t\t *\n\t\t * @type {?GPUDevice}\n\t\t * @default null\n\t\t */\n\t\tthis.device = null;\n\n\t\t/**\n\t\t * A reference to the default render pass descriptor.\n\t\t *\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis.defaultRenderPassdescriptor = null;\n\n\t\t/**\n\t\t * A reference to a backend module holding common utility functions.\n\t\t *\n\t\t * @type {WebGPUUtils}\n\t\t */\n\t\tthis.utils = new WebGPUUtils( this );\n\n\t\t/**\n\t\t * A reference to a backend module holding shader attribute-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {WebGPUAttributeUtils}\n\t\t */\n\t\tthis.attributeUtils = new WebGPUAttributeUtils( this );\n\n\t\t/**\n\t\t * A reference to a backend module holding shader binding-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {WebGPUBindingUtils}\n\t\t */\n\t\tthis.bindingUtils = new WebGPUBindingUtils( this );\n\n\t\t/**\n\t\t * A reference to a backend module holding device capability related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {WebGPUCapabilities}\n\t\t */\n\t\tthis.capabilities = new WebGPUCapabilities( this );\n\n\t\t/**\n\t\t * A reference to a backend module holding shader pipeline-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {WebGPUPipelineUtils}\n\t\t */\n\t\tthis.pipelineUtils = new WebGPUPipelineUtils( this );\n\n\t\t/**\n\t\t * A reference to a backend module holding shader texture-related\n\t\t * utility functions.\n\t\t *\n\t\t * @type {WebGPUTextureUtils}\n\t\t */\n\t\tthis.textureUtils = new WebGPUTextureUtils( this );\n\n\t\t/**\n\t\t * A map that manages the resolve buffers for occlusion queries.\n\t\t *\n\t\t * @type {Map<number,GPUBuffer>}\n\t\t */\n\t\tthis.occludedResolveCache = new Map();\n\n\t\t// compatibility checks\n\n\t\tconst compatibilityTextureCompare = typeof navigator === 'undefined' ? true : /Android/.test( navigator.userAgent ) === false;\n\n\t\t/**\n\t\t * A map of compatibility checks.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis._compatibility = {\n\t\t\t[ Compatibility.TEXTURE_COMPARE ]: compatibilityTextureCompare\n\t\t};\n\n\t}\n\n\t/**\n\t * Initializes the backend so it is ready for usage.\n\t *\n\t * @async\n\t * @param {Renderer} renderer - The renderer.\n\t * @return {Promise} A Promise that resolves when the backend has been initialized.\n\t */\n\tasync init( renderer ) {\n\n\t\tawait super.init( renderer );\n\n\t\t//\n\n\t\tconst parameters = this.parameters;\n\n\t\t// create the device if it is not passed with parameters\n\n\t\tlet device;\n\n\t\tif ( parameters.device === undefined ) {\n\n\t\t\tconst adapterOptions = {\n\t\t\t\tpowerPreference: parameters.powerPreference,\n\t\t\t\tfeatureLevel: 'compatibility'\n\t\t\t};\n\n\t\t\tconst adapter = ( typeof navigator !== 'undefined' ) ? await navigator.gpu.requestAdapter( adapterOptions ) : null;\n\n\t\t\tif ( adapter === null ) {\n\n\t\t\t\tthrow new Error( 'WebGPUBackend: Unable to create WebGPU adapter.' );\n\n\t\t\t}\n\n\t\t\t// feature support\n\n\t\t\tconst features = Object.values( GPUFeatureName );\n\n\t\t\tconst supportedFeatures = [];\n\n\t\t\tfor ( const name of features ) {\n\n\t\t\t\tif ( adapter.features.has( name ) ) {\n\n\t\t\t\t\tsupportedFeatures.push( name );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst deviceDescriptor = {\n\t\t\t\trequiredFeatures: supportedFeatures,\n\t\t\t\trequiredLimits: parameters.requiredLimits\n\t\t\t};\n\n\t\t\tdevice = await adapter.requestDevice( deviceDescriptor );\n\n\t\t} else {\n\n\t\t\tdevice = parameters.device;\n\n\t\t}\n\n\t\tthis.compatibilityMode = ! device.features.has( 'core-features-and-limits' );\n\n\t\tif ( this.compatibilityMode ) {\n\n\t\t\trenderer._samples = 0;\n\n\t\t}\n\n\t\tdevice.lost.then( ( info ) => {\n\n\t\t\tif ( info.reason === 'destroyed' ) return;\n\n\t\t\tconst deviceLossInfo = {\n\t\t\t\tapi: 'WebGPU',\n\t\t\t\tmessage: info.message || 'Unknown reason',\n\t\t\t\treason: info.reason || null,\n\t\t\t\toriginalEvent: info\n\t\t\t};\n\n\t\t\trenderer.onDeviceLost( deviceLossInfo );\n\n\t\t} );\n\n\t\tthis.device = device;\n\n\t\tthis.trackTimestamp = this.trackTimestamp && this.hasFeature( GPUFeatureName.TimestampQuery );\n\n\t\tthis.updateSize();\n\n\t}\n\n\t/**\n\t * A reference to the context.\n\t *\n\t * @type {?GPUCanvasContext}\n\t * @default null\n\t */\n\tget context() {\n\n\t\tconst canvasTarget = this.renderer.getCanvasTarget();\n\t\tconst canvasData = this.get( canvasTarget );\n\n\t\tlet context = canvasData.context;\n\n\t\tif ( context === undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tif ( canvasTarget.isDefaultCanvasTarget === true && parameters.context !== undefined ) {\n\n\t\t\t\tcontext = parameters.context;\n\n\t\t\t} else {\n\n\t\t\t\tcontext = canvasTarget.domElement.getContext( 'webgpu' );\n\n\t\t\t}\n\n\t\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\t\tif ( 'setAttribute' in canvasTarget.domElement ) canvasTarget.domElement.setAttribute( 'data-engine', `three.js r${ REVISION } webgpu` );\n\n\t\t\tconst alphaMode = parameters.alpha ? 'premultiplied' : 'opaque';\n\n\t\t\tconst toneMappingMode = parameters.outputType === HalfFloatType ? 'extended' : 'standard';\n\n\t\t\tcontext.configure( {\n\t\t\t\tdevice: this.device,\n\t\t\t\tformat: this.utils.getPreferredCanvasFormat(),\n\t\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,\n\t\t\t\talphaMode: alphaMode,\n\t\t\t\ttoneMapping: {\n\t\t\t\t\tmode: toneMappingMode\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tcanvasData.context = context;\n\n\t\t}\n\n\t\treturn context;\n\n\t}\n\n\t/**\n\t * The coordinate system of the backend.\n\t *\n\t * @type {number}\n\t * @readonly\n\t */\n\tget coordinateSystem() {\n\n\t\treturn WebGPUCoordinateSystem;\n\n\t}\n\n\t/**\n\t * This method performs a readback operation by moving buffer data from\n\t * a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can\n\t * be used to retain and reuse handles to the intermediate buffers and prevent\n\t * new allocation.\n\t *\n\t * @async\n\t * @param {BufferAttribute} attribute - The storage buffer attribute to read frm.\n\t * @param {number} count - The offset from which to start reading the\n\t * @param {number} offset - The storage buffer attribute.\n\t * @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.\n\t * @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.\n\t */\n\tasync getArrayBufferAsync( attribute, target = null, offset = 0, count = -1 ) {\n\n\t\treturn await this.attributeUtils.getArrayBufferAsync( attribute, target, offset, count );\n\n\t}\n\n\t/**\n\t * Returns the backend's rendering context.\n\t *\n\t * @return {GPUCanvasContext} The rendering context.\n\t */\n\tgetContext() {\n\n\t\treturn this.context;\n\n\t}\n\n\t/**\n\t * Returns the default render pass descriptor.\n\t *\n\t * In WebGPU, the default framebuffer must be configured\n\t * like custom framebuffers so the backend needs a render\n\t * pass descriptor even when rendering directly to screen.\n\t *\n\t * @private\n\t * @return {Object} The render pass descriptor.\n\t */\n\t_getDefaultRenderPassDescriptor() {\n\n\t\tconst renderer = this.renderer;\n\t\tconst canvasTarget = renderer.getCanvasTarget();\n\t\tconst canvasData = this.get( canvasTarget );\n\t\tconst samples = renderer.currentSamples;\n\n\t\tlet descriptor = canvasData.descriptor;\n\n\t\tif ( descriptor === undefined || canvasData.samples !== samples ) {\n\n\t\t\tdescriptor = {\n\t\t\t\tcolorAttachments: [ {\n\t\t\t\t\tview: null\n\t\t\t\t} ]\n\t\t\t};\n\n\t\t\tif ( renderer.depth === true || renderer.stencil === true ) {\n\n\t\t\t\tdescriptor.depthStencilAttachment = {\n\t\t\t\t\tview: this.textureUtils.getDepthBuffer( renderer.depth, renderer.stencil ).createView()\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tconst colorAttachment = descriptor.colorAttachments[ 0 ];\n\n\t\t\tif ( samples > 0 ) {\n\n\t\t\t\tcolorAttachment.view = this.textureUtils.getColorBuffer().createView();\n\n\t\t\t} else {\n\n\t\t\t\tcolorAttachment.resolveTarget = undefined;\n\n\t\t\t}\n\n\t\t\tcanvasData.descriptor = descriptor;\n\t\t\tcanvasData.samples = samples;\n\n\t\t}\n\n\t\tconst colorAttachment = descriptor.colorAttachments[ 0 ];\n\n\t\tif ( samples > 0 ) {\n\n\t\t\tcolorAttachment.resolveTarget = this.context.getCurrentTexture().createView();\n\n\t\t} else {\n\n\t\t\tcolorAttachment.view = this.context.getCurrentTexture().createView();\n\n\t\t}\n\n\t\treturn descriptor;\n\n\t}\n\n\t/**\n\t * Internal to determine if the current render target is a render target array with depth 2D array texture.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @return {boolean} Whether the render target is a render target array with depth 2D array texture.\n\t *\n\t * @private\n\t */\n\t_isRenderCameraDepthArray( renderContext ) {\n\n\t\treturn renderContext.depthTexture && renderContext.depthTexture.image.depth > 1 && renderContext.camera.isArrayCamera;\n\n\t}\n\n\t/**\n\t * Returns the render pass descriptor for the given render context.\n\t *\n\t * @private\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {Object} colorAttachmentsConfig - Configuration object for the color attachments.\n\t * @return {Object} The render pass descriptor.\n\t */\n\t_getRenderPassDescriptor( renderContext, colorAttachmentsConfig = {} ) {\n\n\t\tconst renderTarget = renderContext.renderTarget;\n\t\tconst renderTargetData = this.get( renderTarget );\n\n\t\tlet descriptors = renderTargetData.descriptors;\n\n\t\tif ( descriptors === undefined ||\n\t\t\trenderTargetData.width !== renderTarget.width ||\n\t\t\trenderTargetData.height !== renderTarget.height ||\n\t\t\trenderTargetData.samples !== renderTarget.samples\n\t\t) {\n\n\t\t\tdescriptors = {};\n\n\t\t\trenderTargetData.descriptors = descriptors;\n\n\t\t}\n\n\t\tconst cacheKey = renderContext.getCacheKey();\n\t\tlet descriptorBase = descriptors[ cacheKey ];\n\n\t\tif ( descriptorBase === undefined ) {\n\n\t\t\tconst textures = renderContext.textures;\n\t\t\tconst textureViews = [];\n\n\t\t\tlet sliceIndex;\n\n\t\t\tconst isRenderCameraDepthArray = this._isRenderCameraDepthArray( renderContext );\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst textureData = this.get( textures[ i ] );\n\n\t\t\t\tconst viewDescriptor = {\n\t\t\t\t\tlabel: `colorAttachment_${ i }`,\n\t\t\t\t\tbaseMipLevel: renderContext.activeMipmapLevel,\n\t\t\t\t\tmipLevelCount: 1,\n\t\t\t\t\tbaseArrayLayer: renderContext.activeCubeFace,\n\t\t\t\t\tarrayLayerCount: 1,\n\t\t\t\t\tdimension: GPUTextureViewDimension.TwoD\n\t\t\t\t};\n\n\t\t\t\tif ( renderTarget.isRenderTarget3D ) {\n\n\t\t\t\t\tsliceIndex = renderContext.activeCubeFace;\n\n\t\t\t\t\tviewDescriptor.baseArrayLayer = 0;\n\t\t\t\t\tviewDescriptor.dimension = GPUTextureViewDimension.ThreeD;\n\t\t\t\t\tviewDescriptor.depthOrArrayLayers = textures[ i ].image.depth;\n\n\t\t\t\t} else if ( renderTarget.isRenderTarget && textures[ i ].image.depth > 1 ) {\n\n\t\t\t\t\tif ( isRenderCameraDepthArray === true ) {\n\n\t\t\t\t\t\tconst cameras = renderContext.camera.cameras;\n\t\t\t\t\t\tfor ( let layer = 0; layer < cameras.length; layer ++ ) {\n\n\t\t\t\t\t\t\tconst layerViewDescriptor = {\n\t\t\t\t\t\t\t\t...viewDescriptor,\n\t\t\t\t\t\t\t\tbaseArrayLayer: layer,\n\t\t\t\t\t\t\t\tarrayLayerCount: 1,\n\t\t\t\t\t\t\t\tdimension: GPUTextureViewDimension.TwoD\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst textureView = textureData.texture.createView( layerViewDescriptor );\n\t\t\t\t\t\t\ttextureViews.push( {\n\t\t\t\t\t\t\t\tview: textureView,\n\t\t\t\t\t\t\t\tresolveTarget: undefined,\n\t\t\t\t\t\t\t\tdepthSlice: undefined\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tviewDescriptor.dimension = GPUTextureViewDimension.TwoDArray;\n\t\t\t\t\t\tviewDescriptor.depthOrArrayLayers = textures[ i ].image.depth;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( isRenderCameraDepthArray !== true ) {\n\n\t\t\t\t\tconst textureView = textureData.texture.createView( viewDescriptor );\n\n\t\t\t\t\tlet view, resolveTarget;\n\n\t\t\t\t\tif ( textureData.msaaTexture !== undefined ) {\n\n\t\t\t\t\t\tview = textureData.msaaTexture.createView();\n\t\t\t\t\t\tresolveTarget = textureView;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tview = textureView;\n\t\t\t\t\t\tresolveTarget = undefined;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttextureViews.push( {\n\t\t\t\t\t\tview,\n\t\t\t\t\t\tresolveTarget,\n\t\t\t\t\t\tdepthSlice: sliceIndex\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdescriptorBase = { textureViews };\n\n\t\t\tif ( renderContext.depth ) {\n\n\t\t\t\tconst depthTextureData = this.get( renderContext.depthTexture );\n\t\t\t\tconst options = {};\n\t\t\t\tif ( renderContext.depthTexture.isArrayTexture || renderContext.depthTexture.isCubeTexture ) {\n\n\t\t\t\t\toptions.dimension = GPUTextureViewDimension.TwoD;\n\t\t\t\t\toptions.arrayLayerCount = 1;\n\t\t\t\t\toptions.baseArrayLayer = renderContext.activeCubeFace;\n\n\t\t\t\t}\n\n\t\t\t\tdescriptorBase.depthStencilView = depthTextureData.texture.createView( options );\n\n\t\t\t}\n\n\t\t\tdescriptors[ cacheKey ] = descriptorBase;\n\n\t\t\trenderTargetData.width = renderTarget.width;\n\t\t\trenderTargetData.height = renderTarget.height;\n\t\t\trenderTargetData.samples = renderTarget.samples;\n\t\t\trenderTargetData.activeMipmapLevel = renderContext.activeMipmapLevel;\n\t\t\trenderTargetData.activeCubeFace = renderContext.activeCubeFace;\n\n\t\t}\n\n\t\tconst descriptor = {\n\t\t\tcolorAttachments: []\n\t\t};\n\n\t\t// Apply dynamic properties to cached views\n\t\tfor ( let i = 0; i < descriptorBase.textureViews.length; i ++ ) {\n\n\t\t\tconst viewInfo = descriptorBase.textureViews[ i ];\n\n\t\t\tlet clearValue = { r: 0, g: 0, b: 0, a: 1 };\n\t\t\tif ( i === 0 && colorAttachmentsConfig.clearValue ) {\n\n\t\t\t\tclearValue = colorAttachmentsConfig.clearValue;\n\n\t\t\t}\n\n\t\t\tdescriptor.colorAttachments.push( {\n\t\t\t\tview: viewInfo.view,\n\t\t\t\tdepthSlice: viewInfo.depthSlice,\n\t\t\t\tresolveTarget: viewInfo.resolveTarget,\n\t\t\t\tloadOp: colorAttachmentsConfig.loadOp || GPULoadOp.Load,\n\t\t\t\tstoreOp: colorAttachmentsConfig.storeOp || GPUStoreOp.Store,\n\t\t\t\tclearValue: clearValue\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( descriptorBase.depthStencilView ) {\n\n\t\t\tdescriptor.depthStencilAttachment = {\n\t\t\t\tview: descriptorBase.depthStencilView\n\t\t\t};\n\n\t\t}\n\n\t\treturn descriptor;\n\n\t}\n\n\t/**\n\t * This method is executed at the beginning of a render call and prepares\n\t * the WebGPU state for upcoming render calls\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tbeginRender( renderContext ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\t//\n\n\t\tconst device = this.device;\n\t\tconst occlusionQueryCount = renderContext.occlusionQueryCount;\n\n\t\tlet occlusionQuerySet;\n\n\t\tif ( occlusionQueryCount > 0 ) {\n\n\t\t\tif ( renderContextData.currentOcclusionQuerySet ) renderContextData.currentOcclusionQuerySet.destroy();\n\t\t\tif ( renderContextData.currentOcclusionQueryBuffer ) renderContextData.currentOcclusionQueryBuffer.destroy();\n\n\t\t\t// Get a reference to the array of objects with queries. The renderContextData property\n\t\t\t// can be changed by another render pass before the buffer.mapAsyc() completes.\n\t\t\trenderContextData.currentOcclusionQuerySet = renderContextData.occlusionQuerySet;\n\t\t\trenderContextData.currentOcclusionQueryBuffer = renderContextData.occlusionQueryBuffer;\n\t\t\trenderContextData.currentOcclusionQueryObjects = renderContextData.occlusionQueryObjects;\n\n\t\t\t//\n\n\t\t\tocclusionQuerySet = device.createQuerySet( { type: 'occlusion', count: occlusionQueryCount, label: `occlusionQuerySet_${ renderContext.id }` } );\n\n\t\t\trenderContextData.occlusionQuerySet = occlusionQuerySet;\n\t\t\trenderContextData.occlusionQueryIndex = 0;\n\t\t\trenderContextData.occlusionQueryObjects = new Array( occlusionQueryCount );\n\n\t\t\trenderContextData.lastOcclusionObject = null;\n\n\t\t}\n\n\t\tlet descriptor;\n\n\t\tif ( renderContext.textures === null ) {\n\n\t\t\tdescriptor = this._getDefaultRenderPassDescriptor();\n\n\t\t} else {\n\n\t\t\tdescriptor = this._getRenderPassDescriptor( renderContext, { loadOp: GPULoadOp.Load } );\n\n\t\t}\n\n\t\tthis.initTimestampQuery( TimestampQuery.RENDER, this.getTimestampUID( renderContext ), descriptor );\n\n\t\tdescriptor.occlusionQuerySet = occlusionQuerySet;\n\n\t\tconst depthStencilAttachment = descriptor.depthStencilAttachment;\n\n\t\tif ( renderContext.textures !== null ) {\n\n\t\t\tconst colorAttachments = descriptor.colorAttachments;\n\n\t\t\tfor ( let i = 0; i < colorAttachments.length; i ++ ) {\n\n\t\t\t\tconst colorAttachment = colorAttachments[ i ];\n\n\t\t\t\tif ( renderContext.clearColor ) {\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcolorAttachment.clearValue = renderContext.clearColorValue;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_clearValue.r = 0;\n\t\t\t\t\t\t_clearValue.g = 0;\n\t\t\t\t\t\t_clearValue.b = 0;\n\t\t\t\t\t\t_clearValue.a = 1;\n\n\t\t\t\t\t\tcolorAttachment.clearValue = _clearValue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcolorAttachment.loadOp = GPULoadOp.Clear;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcolorAttachment.loadOp = GPULoadOp.Load;\n\n\t\t\t\t}\n\n\t\t\t\tcolorAttachment.storeOp = GPUStoreOp.Store;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst colorAttachment = descriptor.colorAttachments[ 0 ];\n\n\t\t\tif ( renderContext.clearColor ) {\n\n\t\t\t\tcolorAttachment.clearValue = renderContext.clearColorValue;\n\t\t\t\tcolorAttachment.loadOp = GPULoadOp.Clear;\n\n\t\t\t} else {\n\n\t\t\t\tcolorAttachment.loadOp = GPULoadOp.Load;\n\n\t\t\t}\n\n\t\t  \tcolorAttachment.storeOp = GPUStoreOp.Store;\n\n\t\t}\n\n\t\t//\n\n\t\tif ( renderContext.depth ) {\n\n\t\t\tif ( renderContext.clearDepth ) {\n\n\t\t\t\tdepthStencilAttachment.depthClearValue = renderContext.clearDepthValue;\n\t\t\t\tdepthStencilAttachment.depthLoadOp = GPULoadOp.Clear;\n\n\t\t\t} else {\n\n\t\t\t\tdepthStencilAttachment.depthLoadOp = GPULoadOp.Load;\n\n\t\t\t}\n\n\t\t  depthStencilAttachment.depthStoreOp = GPUStoreOp.Store;\n\n\t\t}\n\n\t\tif ( renderContext.stencil ) {\n\n\t\t  if ( renderContext.clearStencil ) {\n\n\t\t\t\tdepthStencilAttachment.stencilClearValue = renderContext.clearStencilValue;\n\t\t\t\tdepthStencilAttachment.stencilLoadOp = GPULoadOp.Clear;\n\n\t\t\t} else {\n\n\t\t\t\tdepthStencilAttachment.stencilLoadOp = GPULoadOp.Load;\n\n\t\t\t}\n\n\t\t  depthStencilAttachment.stencilStoreOp = GPUStoreOp.Store;\n\n\t\t}\n\n\t\t//\n\n\t\tconst encoder = device.createCommandEncoder( { label: 'renderContext_' + renderContext.id } );\n\n\t\t// shadow arrays - prepare bundle encoders for each camera in an array camera\n\n\t\tif ( this._isRenderCameraDepthArray( renderContext ) === true ) {\n\n\t\t\tconst cameras = renderContext.camera.cameras;\n\n\t\t\tif ( ! renderContextData.layerDescriptors || renderContextData.layerDescriptors.length !== cameras.length ) {\n\n\t\t\t\tthis._createDepthLayerDescriptors( renderContext, renderContextData, descriptor, cameras );\n\n\t\t\t} else {\n\n\t\t\t\tthis._updateDepthLayerDescriptors( renderContext, renderContextData, cameras );\n\n\t\t\t}\n\n\t\t\t// Create bundle encoders for each layer\n\t\t\trenderContextData.bundleEncoders = [];\n\t\t\trenderContextData.bundleSets = [];\n\n\t\t\t// Create separate bundle encoders for each camera in the array\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tconst bundleEncoder = this.pipelineUtils.createBundleEncoder(\n\t\t\t\t\trenderContext,\n\t\t\t\t\t'renderBundleArrayCamera_' + i\n\t\t\t\t);\n\n\t\t\t\t// Initialize state tracking for this bundle\n\t\t\t\tconst bundleSets = {\n\t\t\t\t\tattributes: {},\n\t\t\t\t\tbindingGroups: [],\n\t\t\t\t\tpipeline: null,\n\t\t\t\t\tindex: null\n\t\t\t\t};\n\n\t\t\t\trenderContextData.bundleEncoders.push( bundleEncoder );\n\t\t\t\trenderContextData.bundleSets.push( bundleSets );\n\n\t\t\t}\n\n\t\t\t// We'll complete the bundles in finishRender\n\t\t\trenderContextData.currentPass = null;\n\n\t\t} else {\n\n\t\t\tconst currentPass = encoder.beginRenderPass( descriptor );\n\t\t\trenderContextData.currentPass = currentPass;\n\n\t\t\tif ( renderContext.viewport ) {\n\n\t\t\t\tthis.updateViewport( renderContext );\n\n\t\t\t}\n\n\t\t\tif ( renderContext.scissor ) {\n\n\t\t\t\tthis.updateScissor( renderContext );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\trenderContextData.descriptor = descriptor;\n\t\trenderContextData.encoder = encoder;\n\t\trenderContextData.currentSets = { attributes: {}, bindingGroups: [], pipeline: null, index: null };\n\t\trenderContextData.renderBundles = [];\n\n\t}\n\n\t/**\n\t * This method creates layer descriptors for each camera in an array camera\n\t * to prepare for rendering to a depth array texture.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {Object} renderContextData - The render context data.\n\t * @param {Object} descriptor  - The render pass descriptor.\n\t * @param {ArrayCamera} cameras - The array camera.\n\t *\n\t * @private\n\t */\n\t_createDepthLayerDescriptors( renderContext, renderContextData, descriptor, cameras ) {\n\n\t\tconst depthStencilAttachment = descriptor.depthStencilAttachment;\n\t\trenderContextData.layerDescriptors = [];\n\n\t\tconst depthTextureData = this.get( renderContext.depthTexture );\n\t\tif ( ! depthTextureData.viewCache ) {\n\n\t\t\tdepthTextureData.viewCache = [];\n\n\t\t}\n\n\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\tconst layerDescriptor = {\n\t\t\t\t...descriptor,\n\t\t\t\tcolorAttachments: [ {\n\t\t\t\t\t...descriptor.colorAttachments[ 0 ],\n\t\t\t\t\tview: descriptor.colorAttachments[ i ].view\n\t\t\t\t} ]\n\t\t\t};\n\n\t\t\tif ( descriptor.depthStencilAttachment ) {\n\n\t\t\t\tconst layerIndex = i;\n\n\t\t\t\tif ( ! depthTextureData.viewCache[ layerIndex ] ) {\n\n\t\t\t\t\tdepthTextureData.viewCache[ layerIndex ] = depthTextureData.texture.createView( {\n\t\t\t\t\t\tdimension: GPUTextureViewDimension.TwoD,\n\t\t\t\t\t\tbaseArrayLayer: i,\n\t\t\t\t\t\tarrayLayerCount: 1\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tlayerDescriptor.depthStencilAttachment = {\n\t\t\t\t\tview: depthTextureData.viewCache[ layerIndex ],\n\t\t\t\t\tdepthLoadOp: depthStencilAttachment.depthLoadOp || GPULoadOp.Clear,\n\t\t\t\t\tdepthStoreOp: depthStencilAttachment.depthStoreOp || GPUStoreOp.Store,\n\t\t\t\t\tdepthClearValue: depthStencilAttachment.depthClearValue || 1.0\n\t\t\t\t};\n\n\t\t\t\tif ( renderContext.stencil ) {\n\n\t\t\t\t\tlayerDescriptor.depthStencilAttachment.stencilLoadOp = depthStencilAttachment.stencilLoadOp;\n\t\t\t\t\tlayerDescriptor.depthStencilAttachment.stencilStoreOp = depthStencilAttachment.stencilStoreOp;\n\t\t\t\t\tlayerDescriptor.depthStencilAttachment.stencilClearValue = depthStencilAttachment.stencilClearValue;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tlayerDescriptor.depthStencilAttachment = { ...depthStencilAttachment };\n\n\t\t\t}\n\n\t\t\trenderContextData.layerDescriptors.push( layerDescriptor );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method updates the layer descriptors for each camera in an array camera\n\t * to prepare for rendering to a depth array texture.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {Object} renderContextData - The render context data.\n\t * @param {ArrayCamera} cameras - The array camera.\n\t *\n\t */\n\t_updateDepthLayerDescriptors( renderContext, renderContextData, cameras ) {\n\n\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\tconst layerDescriptor = renderContextData.layerDescriptors[ i ];\n\n\t\t\tif ( layerDescriptor.depthStencilAttachment ) {\n\n\t\t\t\tconst depthAttachment = layerDescriptor.depthStencilAttachment;\n\n\t\t\t\tif ( renderContext.depth ) {\n\n\t\t\t\t\tif ( renderContext.clearDepth ) {\n\n\t\t\t\t\t\tdepthAttachment.depthClearValue = renderContext.clearDepthValue;\n\t\t\t\t\t\tdepthAttachment.depthLoadOp = GPULoadOp.Clear;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdepthAttachment.depthLoadOp = GPULoadOp.Load;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderContext.stencil ) {\n\n\t\t\t\t\tif ( renderContext.clearStencil ) {\n\n\t\t\t\t\t\tdepthAttachment.stencilClearValue = renderContext.clearStencilValue;\n\t\t\t\t\t\tdepthAttachment.stencilLoadOp = GPULoadOp.Clear;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdepthAttachment.stencilLoadOp = GPULoadOp.Load;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method is executed at the end of a render call and finalizes work\n\t * after draw calls.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tfinishRender( renderContext ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\t\tconst occlusionQueryCount = renderContext.occlusionQueryCount;\n\n\t\tif ( renderContextData.renderBundles.length > 0 ) {\n\n\t\t\trenderContextData.currentPass.executeBundles( renderContextData.renderBundles );\n\n\t\t}\n\n\t\tif ( occlusionQueryCount > renderContextData.occlusionQueryIndex ) {\n\n\t\t\trenderContextData.currentPass.endOcclusionQuery();\n\n\t\t}\n\n\t\t// shadow arrays - Execute bundles for each layer\n\n\t\tconst encoder = renderContextData.encoder;\n\n\t\tif ( this._isRenderCameraDepthArray( renderContext ) === true ) {\n\n\t\t  const bundles = [];\n\n\t\t  for ( let i = 0; i < renderContextData.bundleEncoders.length; i ++ ) {\n\n\t\t\t\tconst bundleEncoder = renderContextData.bundleEncoders[ i ];\n\t\t\t\tbundles.push( bundleEncoder.finish() );\n\n\t\t\t}\n\n\t\t  for ( let i = 0; i < renderContextData.layerDescriptors.length; i ++ ) {\n\n\t\t\t\tif ( i < bundles.length ) {\n\n\t\t\t\t\tconst layerDescriptor = renderContextData.layerDescriptors[ i ];\n\t\t\t\t\tconst renderPass = encoder.beginRenderPass( layerDescriptor );\n\n\t\t\t\t\tif ( renderContext.viewport ) {\n\n\t\t\t\t\t\tconst { x, y, width, height, minDepth, maxDepth } = renderContext.viewportValue;\n\t\t\t\t\t\trenderPass.setViewport( x, y, width, height, minDepth, maxDepth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( renderContext.scissor ) {\n\n\t\t\t\t\t\tconst { x, y, width, height } = renderContext.scissorValue;\n\t\t\t\t\t\trenderPass.setScissorRect( x, y, width, height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trenderPass.executeBundles( [ bundles[ i ] ] );\n\n\t\t\t\t\trenderPass.end();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( renderContextData.currentPass ) {\n\n\t\t  renderContextData.currentPass.end();\n\n\t\t}\n\n\t\tif ( occlusionQueryCount > 0 ) {\n\n\t\t\tconst bufferSize = occlusionQueryCount * 8; // 8 byte entries for query results\n\n\t\t\t//\n\n\t\t\tlet queryResolveBuffer = this.occludedResolveCache.get( bufferSize );\n\n\t\t\tif ( queryResolveBuffer === undefined ) {\n\n\t\t\t\tqueryResolveBuffer = this.device.createBuffer(\n\t\t\t\t\t{\n\t\t\t\t\t\tsize: bufferSize,\n\t\t\t\t\t\tusage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tthis.occludedResolveCache.set( bufferSize, queryResolveBuffer );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst readBuffer = this.device.createBuffer(\n\t\t\t\t{\n\t\t\t\t\tsize: bufferSize,\n\t\t\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t// two buffers required here - WebGPU doesn't allow usage of QUERY_RESOLVE & MAP_READ to be combined\n\t\t\trenderContextData.encoder.resolveQuerySet( renderContextData.occlusionQuerySet, 0, occlusionQueryCount, queryResolveBuffer, 0 );\n\t\t\trenderContextData.encoder.copyBufferToBuffer( queryResolveBuffer, 0, readBuffer, 0, bufferSize );\n\n\t\t\trenderContextData.occlusionQueryBuffer = readBuffer;\n\n\t\t\t//\n\n\t\t\tthis.resolveOccludedAsync( renderContext );\n\n\t\t}\n\n\t\tthis.device.queue.submit( [ renderContextData.encoder.finish() ] );\n\n\n\t\t//\n\n\t\tif ( renderContext.textures !== null ) {\n\n\t\t\tconst textures = renderContext.textures;\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tif ( texture.generateMipmaps === true ) {\n\n\t\t\t\t\tthis.textureUtils.generateMipmaps( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns `true` if the given 3D object is fully occluded by other\n\t * 3D objects in the scene.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {Object3D} object - The 3D object to test.\n\t * @return {boolean} Whether the 3D object is fully occluded or not.\n\t */\n\tisOccluded( renderContext, object ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\treturn renderContextData.occluded && renderContextData.occluded.has( object );\n\n\t}\n\n\t/**\n\t * This method processes the result of occlusion queries and writes it\n\t * into render context data.\n\t *\n\t * @async\n\t * @param {RenderContext} renderContext - The render context.\n\t * @return {Promise} A Promise that resolves when the occlusion query results have been processed.\n\t */\n\tasync resolveOccludedAsync( renderContext ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\t// handle occlusion query results\n\n\t\tconst { currentOcclusionQueryBuffer, currentOcclusionQueryObjects } = renderContextData;\n\n\t\tif ( currentOcclusionQueryBuffer && currentOcclusionQueryObjects ) {\n\n\t\t\tconst occluded = new WeakSet();\n\n\t\t\trenderContextData.currentOcclusionQueryObjects = null;\n\t\t\trenderContextData.currentOcclusionQueryBuffer = null;\n\n\t\t\tawait currentOcclusionQueryBuffer.mapAsync( GPUMapMode.READ );\n\n\t\t\tconst buffer = currentOcclusionQueryBuffer.getMappedRange();\n\t\t\tconst results = new BigUint64Array( buffer );\n\n\t\t\tfor ( let i = 0; i < currentOcclusionQueryObjects.length; i ++ ) {\n\n\t\t\t\tif ( results[ i ] === BigInt( 0 ) ) {\n\n\t\t\t\t\toccluded.add( currentOcclusionQueryObjects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcurrentOcclusionQueryBuffer.destroy();\n\n\t\t\trenderContextData.occluded = occluded;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the viewport with the values from the given render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tupdateViewport( renderContext ) {\n\n\t\tconst { currentPass } = this.get( renderContext );\n\t\tconst { x, y, width, height, minDepth, maxDepth } = renderContext.viewportValue;\n\n\t\tcurrentPass.setViewport( x, y, width, height, minDepth, maxDepth );\n\n\t}\n\n\t/**\n\t * Updates the scissor with the values from the given render context.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tupdateScissor( renderContext ) {\n\n\t\tconst { currentPass } = this.get( renderContext );\n\t\tconst { x, y, width, height } = renderContext.scissorValue;\n\n\t\tcurrentPass.setScissorRect( x, y, width, height );\n\n\t}\n\n\t/**\n\t * Returns the clear color and alpha into a single\n\t * color object.\n\t *\n\t * @return {Color4} The clear color.\n\t */\n\tgetClearColor() {\n\n\t\tconst clearColor = super.getClearColor();\n\n\t\t// only premultiply alpha when alphaMode is \"premultiplied\"\n\n\t\tif ( this.renderer.alpha === true ) {\n\n\t\t\tclearColor.r *= clearColor.a;\n\t\t\tclearColor.g *= clearColor.a;\n\t\t\tclearColor.b *= clearColor.a;\n\n\t\t}\n\n\t\treturn clearColor;\n\n\t}\n\n\t/**\n\t * Performs a clear operation.\n\t *\n\t * @param {boolean} color - Whether the color buffer should be cleared or not.\n\t * @param {boolean} depth - Whether the depth buffer should be cleared or not.\n\t * @param {boolean} stencil - Whether the stencil buffer should be cleared or not.\n\t * @param {?RenderContext} [renderTargetContext=null] - The render context of the current set render target.\n\t */\n\tclear( color, depth, stencil, renderTargetContext = null ) {\n\n\t\tconst device = this.device;\n\t\tconst renderer = this.renderer;\n\n\t\tlet colorAttachments = [];\n\t\tlet depthStencilAttachment;\n\n\t\tlet supportsDepth;\n\t\tlet supportsStencil;\n\n\t\tif ( color ) {\n\n\t\t\tconst clearColor = this.getClearColor();\n\n\t\t\t_clearValue.r = clearColor.r;\n\t\t\t_clearValue.g = clearColor.g;\n\t\t\t_clearValue.b = clearColor.b;\n\t\t\t_clearValue.a = clearColor.a;\n\n\t\t}\n\n\t\tif ( renderTargetContext === null ) {\n\n\t\t\tsupportsDepth = renderer.depth;\n\t\t\tsupportsStencil = renderer.stencil;\n\n\t\t\tconst descriptor = this._getDefaultRenderPassDescriptor();\n\n\t\t\tif ( color ) {\n\n\t\t\t\tcolorAttachments = descriptor.colorAttachments;\n\n\t\t\t\tconst colorAttachment = colorAttachments[ 0 ];\n\n\t\t\t\tcolorAttachment.clearValue = _clearValue;\n\t\t\t\tcolorAttachment.loadOp = GPULoadOp.Clear;\n\t\t\t\tcolorAttachment.storeOp = GPUStoreOp.Store;\n\n\t\t\t}\n\n\t\t\tif ( supportsDepth || supportsStencil ) {\n\n\t\t\t\tdepthStencilAttachment = descriptor.depthStencilAttachment;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tsupportsDepth = renderTargetContext.depth;\n\t\t\tsupportsStencil = renderTargetContext.stencil;\n\n\t\t\tconst clearConfig = {\n\t\t\t\tloadOp: color ? GPULoadOp.Clear : GPULoadOp.Load,\n\t\t\t\tclearValue: color ? _clearValue : undefined\n\t\t\t};\n\n\t\t\tif ( supportsDepth ) {\n\n\t\t\t\tclearConfig.depthLoadOp = depth ? GPULoadOp.Clear : GPULoadOp.Load;\n\t\t\t\tclearConfig.depthClearValue = depth ? renderer.getClearDepth() : undefined;\n\t\t\t\tclearConfig.depthStoreOp = GPUStoreOp.Store;\n\n\t\t\t}\n\n\t\t\tif ( supportsStencil ) {\n\n\t\t\t\tclearConfig.stencilLoadOp = stencil ? GPULoadOp.Clear : GPULoadOp.Load;\n\t\t\t\tclearConfig.stencilClearValue = stencil ? renderer.getClearStencil() : undefined;\n\t\t\t\tclearConfig.stencilStoreOp = GPUStoreOp.Store;\n\n\t\t\t}\n\n\t\t\tconst descriptor = this._getRenderPassDescriptor( renderTargetContext, clearConfig );\n\n\t\t\tcolorAttachments = descriptor.colorAttachments;\n\t\t\tdepthStencilAttachment = descriptor.depthStencilAttachment;\n\n\t\t}\n\n\t\tif ( supportsDepth && depthStencilAttachment ) {\n\n\t\t\tif ( depth ) {\n\n\t\t\t\tdepthStencilAttachment.depthLoadOp = GPULoadOp.Clear;\n\t\t\t\tdepthStencilAttachment.depthClearValue = renderer.getClearDepth();\n\t\t\t\tdepthStencilAttachment.depthStoreOp = GPUStoreOp.Store;\n\n\t\t\t} else {\n\n\t\t\t\tdepthStencilAttachment.depthLoadOp = GPULoadOp.Load;\n\t\t\t\tdepthStencilAttachment.depthStoreOp = GPUStoreOp.Store;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( supportsStencil && depthStencilAttachment ) {\n\n\t\t\tif ( stencil ) {\n\n\t\t\t\tdepthStencilAttachment.stencilLoadOp = GPULoadOp.Clear;\n\t\t\t\tdepthStencilAttachment.stencilClearValue = renderer.getClearStencil();\n\t\t\t\tdepthStencilAttachment.stencilStoreOp = GPUStoreOp.Store;\n\n\t\t\t} else {\n\n\t\t\t\tdepthStencilAttachment.stencilLoadOp = GPULoadOp.Load;\n\t\t\t\tdepthStencilAttachment.stencilStoreOp = GPUStoreOp.Store;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst encoder = device.createCommandEncoder( { label: 'clear' } );\n\t\tconst currentPass = encoder.beginRenderPass( {\n\t\t\tcolorAttachments,\n\t\t\tdepthStencilAttachment\n\t\t} );\n\n\t\tcurrentPass.end();\n\n\t\tdevice.queue.submit( [ encoder.finish() ] );\n\n\t}\n\n\t// compute\n\n\t/**\n\t * This method is executed at the beginning of a compute call and\n\t * prepares the state for upcoming compute tasks.\n\t *\n\t * @param {Node|Array<Node>} computeGroup - The compute node(s).\n\t */\n\tbeginCompute( computeGroup ) {\n\n\t\tconst groupGPU = this.get( computeGroup );\n\n\t\t//\n\n\t\tconst descriptor = {\n\t\t\tlabel: 'computeGroup_' + computeGroup.id\n\t\t};\n\n\t\tthis.initTimestampQuery( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ), descriptor );\n\n\t\tgroupGPU.cmdEncoderGPU = this.device.createCommandEncoder( { label: 'computeGroup_' + computeGroup.id } );\n\n\t\tgroupGPU.passEncoderGPU = groupGPU.cmdEncoderGPU.beginComputePass( descriptor );\n\n\t}\n\n\t/**\n\t * Executes a compute command for the given compute node.\n\t *\n\t * @param {Node|Array<Node>} computeGroup - The group of compute nodes of a compute call. Can be a single compute node.\n\t * @param {Node} computeNode - The compute node.\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t * @param {ComputePipeline} pipeline - The compute pipeline.\n\t * @param {number|Array<number>|IndirectStorageBufferAttribute} [dispatchSize=null]\n\t * - A single number representing count, or\n\t * - An array [x, y, z] representing dispatch size, or\n\t * - A IndirectStorageBufferAttribute for indirect dispatch size.\n\t */\n\tcompute( computeGroup, computeNode, bindings, pipeline, dispatchSize = null ) {\n\n\t\tconst computeNodeData = this.get( computeNode );\n\t\tconst { passEncoderGPU } = this.get( computeGroup );\n\n\t\t// pipeline\n\n\t\tconst pipelineGPU = this.get( pipeline ).pipeline;\n\n\t\tthis.pipelineUtils.setPipeline( passEncoderGPU, pipelineGPU );\n\n\t\t// bind groups\n\n\t\tfor ( let i = 0, l = bindings.length; i < l; i ++ ) {\n\n\t\t\tconst bindGroup = bindings[ i ];\n\t\t\tconst bindingsData = this.get( bindGroup );\n\n\t\t\tpassEncoderGPU.setBindGroup( i, bindingsData.group );\n\n\t\t}\n\n\t\tif ( dispatchSize === null ) {\n\n\t\t\tdispatchSize = computeNode.dispatchSize || computeNode.count;\n\n\t\t}\n\n\t\t// When the dispatchSize is set with a StorageBuffer from the GPU.\n\n\t\tif ( dispatchSize && dispatchSize.isIndirectStorageBufferAttribute ) {\n\n\t\t\tconst dispatchBuffer = this.get( dispatchSize ).buffer;\n\n\t\t\tpassEncoderGPU.dispatchWorkgroupsIndirect( dispatchBuffer, 0 );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( typeof dispatchSize === 'number' ) {\n\n\t\t\t// If a single number is given, we calculate the dispatch size based on the workgroup size\n\n\t\t\tconst count = dispatchSize;\n\n\t\t\tif ( computeNodeData.dispatchSize === undefined || computeNodeData.count !== count ) {\n\n\t\t\t\t// cache dispatch size to avoid recalculating it every time\n\n\t\t\t\tcomputeNodeData.dispatchSize = [ 0, 1, 1 ];\n\t\t\t\tcomputeNodeData.count = count;\n\n\t\t\t\tconst workgroupSize = computeNode.workgroupSize;\n\n\t\t\t\tlet size = workgroupSize[ 0 ];\n\n\t\t\t\tfor ( let i = 1; i < workgroupSize.length; i ++ )\n\t\t\t\t\tsize *= workgroupSize[ i ];\n\n\t\t\t\tconst dispatchCount = Math.ceil( count / size );\n\n\t\t\t\t//\n\n\t\t\t\tconst maxComputeWorkgroupsPerDimension = this.device.limits.maxComputeWorkgroupsPerDimension;\n\n\t\t\t\tdispatchSize = [ dispatchCount, 1, 1 ];\n\n\t\t\t\tif ( dispatchCount > maxComputeWorkgroupsPerDimension ) {\n\n\t\t\t\t\tdispatchSize[ 0 ] = Math.min( dispatchCount, maxComputeWorkgroupsPerDimension );\n\t\t\t\t\tdispatchSize[ 1 ] = Math.ceil( dispatchCount / maxComputeWorkgroupsPerDimension );\n\n\t\t\t\t}\n\n\t\t\t\tcomputeNodeData.dispatchSize = dispatchSize;\n\n\t\t\t}\n\n\t\t\tdispatchSize = computeNodeData.dispatchSize;\n\n\t\t}\n\n\t\t//\n\n\t\tpassEncoderGPU.dispatchWorkgroups(\n\t\t\tdispatchSize[ 0 ],\n\t\t\tdispatchSize[ 1 ] || 1,\n\t\t\tdispatchSize[ 2 ] || 1\n\t\t);\n\n\t}\n\n\t/**\n\t * This method is executed at the end of a compute call and\n\t * finalizes work after compute tasks.\n\t *\n\t * @param {Node|Array<Node>} computeGroup - The compute node(s).\n\t */\n\tfinishCompute( computeGroup ) {\n\n\t\tconst groupData = this.get( computeGroup );\n\n\t\tgroupData.passEncoderGPU.end();\n\n\t\tthis.device.queue.submit( [ groupData.cmdEncoderGPU.finish() ] );\n\n\t}\n\n\t/**\n\t * Internal draw function that performs the draw with the given pass encoder.\n\t *\n\t * @private\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {Info} info - Holds a series of statistical information about the GPU memory and the rendering process.\n\t * @param {Object} renderContextData - The render context data object, holding current pass state and occlusion query tracking.\n\t * @param {GPURenderPipeline} pipelineGPU - The GPU render pipeline.\n\t * @param {Array<BindGroup>} bindings - The bind groups.\n\t * @param {Array<BufferAttribute>} vertexBuffers - The vertex buffers.\n\t * @param {{vertexCount: number, firstVertex: number, instanceCount: number, firstInstance: number}} drawParams - The draw parameters.\n\t * @param {GPURenderPassEncoder|GPURenderBundleEncoder} passEncoderGPU - The GPU pass encoder used for recording draw commands.\n\t * @param {Object} currentSets - Tracking object for currently set pipeline, attributes, bind groups, and index state.\n\t */\n\t_draw( renderObject, info, renderContextData, pipelineGPU, bindings, vertexBuffers, drawParams, passEncoderGPU, currentSets ) {\n\n\t\tconst { object, material, context } = renderObject;\n\n\t\tconst index = renderObject.getIndex();\n\t\tconst hasIndex = ( index !== null );\n\n\t\t// pipeline\n\t\tthis.pipelineUtils.setPipeline( passEncoderGPU, pipelineGPU );\n\t\tcurrentSets.pipeline = pipelineGPU;\n\n\t\t// bind groups\n\t\tconst currentBindingGroups = currentSets.bindingGroups;\n\t\tfor ( let i = 0, l = bindings.length; i < l; i ++ ) {\n\n\t\t\tconst bindGroup = bindings[ i ];\n\t\t\tconst bindingsData = this.get( bindGroup );\n\t\t\tif ( currentBindingGroups[ i ] !== bindGroup.id ) {\n\n\t\t\t\tpassEncoderGPU.setBindGroup( i, bindingsData.group );\n\t\t\t\tcurrentBindingGroups[ i ] = bindGroup.id;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// attributes\n\n\t\t// index\n\n\t\tif ( hasIndex === true ) {\n\n\t\t\tif ( currentSets.index !== index ) {\n\n\t\t\t\tconst buffer = this.get( index ).buffer;\n\t\t\t\tconst indexFormat = ( index.array instanceof Uint16Array ) ? GPUIndexFormat.Uint16 : GPUIndexFormat.Uint32;\n\n\t\t\t\tpassEncoderGPU.setIndexBuffer( buffer, indexFormat );\n\n\t\t\t\tcurrentSets.index = index;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0, l = vertexBuffers.length; i < l; i ++ ) {\n\n\t\t\tconst vertexBuffer = vertexBuffers[ i ];\n\n\t\t\tif ( currentSets.attributes[ i ] !== vertexBuffer ) {\n\n\t\t\t\tconst buffer = this.get( vertexBuffer ).buffer;\n\t\t\t\tpassEncoderGPU.setVertexBuffer( i, buffer );\n\n\t\t\t\tcurrentSets.attributes[ i ] = vertexBuffer;\n\n\t\t\t}\n\n\t\t}\n\t\t// stencil\n\n\t\tif ( context.stencil === true && material.stencilWrite === true && renderContextData.currentStencilRef !== material.stencilRef ) {\n\n\t\t\tpassEncoderGPU.setStencilReference( material.stencilRef );\n\t\t\trenderContextData.currentStencilRef = material.stencilRef;\n\n\t\t}\n\n\t\tif ( object.isBatchedMesh === true ) {\n\n\t\t\tconst starts = object._multiDrawStarts;\n\t\t\tconst counts = object._multiDrawCounts;\n\t\t\tconst drawCount = object._multiDrawCount;\n\n\t\t\tlet bytesPerElement = ( hasIndex === true ) ? index.array.BYTES_PER_ELEMENT : 1;\n\n\t\t\tif ( material.wireframe ) {\n\n\t\t\t\tbytesPerElement = object.geometry.attributes.position.count > 65535 ? 4 : 2;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\tif ( hasIndex === true ) {\n\n\t\t\t\t\tpassEncoderGPU.drawIndexed( counts[ i ], 1, starts[ i ] / bytesPerElement, 0, i );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpassEncoderGPU.draw( counts[ i ], 1, starts[ i ], i );\n\n\t\t\t\t}\n\n\t\t\t\tinfo.update( object, counts[ i ], 1 );\n\n\t\t\t}\n\n\t\t} else if ( hasIndex === true ) {\n\n\t\t\tconst { vertexCount: indexCount, instanceCount, firstVertex: firstIndex } = drawParams;\n\n\t\t\tconst indirect = renderObject.getIndirect();\n\n\t\t\tif ( indirect !== null ) {\n\n\t\t\t\tconst buffer = this.get( indirect ).buffer;\n\t\t\t\tconst indirectOffset = renderObject.getIndirectOffset();\n\t\t\t\tconst indirectOffsets = Array.isArray( indirectOffset ) ? indirectOffset : [ indirectOffset ];\n\n\t\t\t\tfor ( let i = 0; i < indirectOffsets.length; i ++ ) {\n\n\t\t\t\t\tpassEncoderGPU.drawIndexedIndirect( buffer, indirectOffsets[ i ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tpassEncoderGPU.drawIndexed( indexCount, instanceCount, firstIndex, 0, 0 );\n\n\t\t\t}\n\n\t\t\tinfo.update( object, indexCount, instanceCount );\n\n\t\t} else {\n\n\t\t\tconst { vertexCount, instanceCount, firstVertex } = drawParams;\n\n\t\t\tconst indirect = renderObject.getIndirect();\n\n\t\t\tif ( indirect !== null ) {\n\n\t\t\t\tconst buffer = this.get( indirect ).buffer;\n\t\t\t\tconst indirectOffset = renderObject.getIndirectOffset();\n\t\t\t\tconst indirectOffsets = Array.isArray( indirectOffset ) ? indirectOffset : [ indirectOffset ];\n\n\t\t\t\tfor ( let i = 0; i < indirectOffsets.length; i ++ ) {\n\n\t\t\t\t\tpassEncoderGPU.drawIndirect( buffer, indirectOffsets[ i ] );\n\n\t\t\t\t}\n\n\n\t\t\t} else {\n\n\t\t\t\tpassEncoderGPU.draw( vertexCount, instanceCount, firstVertex, 0 );\n\n\t\t\t}\n\n\t\t\tinfo.update( object, vertexCount, instanceCount );\n\n\t\t}\n\n\t}\n\n\t// render object\n\n\t/**\n\t * Executes a draw command for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object to draw.\n\t * @param {Info} info - Holds a series of statistical information about the GPU memory and the rendering process.\n\t */\n\tdraw( renderObject, info ) {\n\n\t\tconst { object, context, pipeline } = renderObject;\n\t\tconst renderContextData = this.get( context );\n\t\tconst pipelineData = this.get( pipeline );\n\t\tconst pipelineGPU = pipelineData.pipeline;\n\n\t\t// Skip if pipeline has error\n\t\tif ( pipelineData.error === true ) return;\n\n\t\tconst drawParams = renderObject.getDrawParameters();\n\t\tif ( drawParams === null ) return;\n\n\t\tconst bindings = renderObject.getBindings();\n\n\t\t// vertex buffers\n\n\t\tconst vertexBuffers = renderObject.getVertexBuffers();\n\n\t\tif ( renderObject.camera.isArrayCamera && renderObject.camera.cameras.length > 0 ) {\n\n\t\t\tconst cameraData = this.get( renderObject.camera );\n\t\t\tconst cameras = renderObject.camera.cameras;\n\t\t\tconst cameraIndex = renderObject.getBindingGroup( 'cameraIndex' );\n\n\t\t\tif ( cameraData.indexesGPU === undefined || cameraData.indexesGPU.length !== cameras.length ) {\n\n\t\t\t\tconst bindingsData = this.get( cameraIndex );\n\t\t\t\tconst indexesGPU = [];\n\n\t\t\t\tconst data = new Uint32Array( [ 0, 0, 0, 0 ] );\n\n\t\t\t\tfor ( let i = 0, len = cameras.length; i < len; i ++ ) {\n\n\t\t\t\t\tdata[ 0 ] = i;\n\n\t\t\t\t\tconst { layoutGPU } = bindingsData.layout;\n\n\t\t\t\t\tconst bindGroupIndex = this.bindingUtils.createBindGroupIndex( data, layoutGPU );\n\n\t\t\t\t\tindexesGPU.push( bindGroupIndex );\n\n\t\t\t\t}\n\n\t\t\t\tcameraData.indexesGPU = indexesGPU; // TODO: Create a global library for this\n\n\t\t\t}\n\n\t\t\tconst pixelRatio = this.renderer.getPixelRatio();\n\n\t\t\tfor ( let i = 0, len = cameras.length; i < len; i ++ ) {\n\n\t\t\t\tconst subCamera = cameras[ i ];\n\n\t\t\t\tif ( object.layers.test( subCamera.layers ) ) {\n\n\t\t\t\t\tconst vp = subCamera.viewport;\n\n\t\t\t\t\tlet pass = renderContextData.currentPass;\n\t\t\t\t\tlet sets = renderContextData.currentSets;\n\t\t\t\t\tif ( renderContextData.bundleEncoders ) {\n\n\t\t\t\t\t\tconst bundleEncoder = renderContextData.bundleEncoders[ i ];\n\t\t\t\t\t\tconst bundleSets = renderContextData.bundleSets[ i ];\n\t\t\t\t\t\tpass = bundleEncoder;\n\t\t\t\t\t\tsets = bundleSets;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( vp ) {\n\n\t\t\t\t\t\tpass.setViewport(\n\t\t\t\t\t\t\tMath.floor( vp.x * pixelRatio ),\n\t\t\t\t\t\t\tMath.floor( vp.y * pixelRatio ),\n\t\t\t\t\t\t\tMath.floor( vp.width * pixelRatio ),\n\t\t\t\t\t\t\tMath.floor( vp.height * pixelRatio ),\n\t\t\t\t\t\t\tcontext.viewportValue.minDepth,\n\t\t\t\t\t\t\tcontext.viewportValue.maxDepth\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set camera index binding for this layer\n\t\t\t\t\tif ( cameraIndex && cameraData.indexesGPU ) {\n\n\t\t\t\t\t\tconst indexPos = bindings.indexOf( cameraIndex );\n\t\t\t\t\t\tpass.setBindGroup( indexPos, cameraData.indexesGPU[ i ] );\n\t\t\t\t\t\tsets.bindingGroups[ indexPos ] = cameraIndex.id;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._draw( renderObject, info, renderContextData, pipelineGPU, bindings, vertexBuffers, drawParams, pass, sets );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Regular single camera rendering\n\t\t\tif ( renderContextData.currentPass ) {\n\n\t\t\t\t// Handle occlusion queries\n\t\t\t\tif ( renderContextData.occlusionQuerySet !== undefined ) {\n\n\t\t\t\t\tconst lastObject = renderContextData.lastOcclusionObject;\n\t\t\t\t\tif ( lastObject !== object ) {\n\n\t\t\t\t\t\tif ( lastObject !== null && lastObject.occlusionTest === true ) {\n\n\t\t\t\t\t\t\trenderContextData.currentPass.endOcclusionQuery();\n\t\t\t\t\t\t\trenderContextData.occlusionQueryIndex ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( object.occlusionTest === true ) {\n\n\t\t\t\t\t\t\trenderContextData.currentPass.beginOcclusionQuery( renderContextData.occlusionQueryIndex );\n\t\t\t\t\t\t\trenderContextData.occlusionQueryObjects[ renderContextData.occlusionQueryIndex ] = object;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trenderContextData.lastOcclusionObject = object;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis._draw( renderObject, info, renderContextData, pipelineGPU, bindings, vertexBuffers, drawParams, renderContextData.currentPass, renderContextData.currentSets );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// cache key\n\n\t/**\n\t * Returns `true` if the render pipeline requires an update.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {boolean} Whether the render pipeline requires an update or not.\n\t */\n\tneedsRenderUpdate( renderObject ) {\n\n\t\tconst data = this.get( renderObject );\n\n\t\tconst { object, material } = renderObject;\n\n\t\tconst utils = this.utils;\n\n\t\tconst sampleCount = utils.getSampleCountRenderContext( renderObject.context );\n\t\tconst colorSpace = utils.getCurrentColorSpace( renderObject.context );\n\t\tconst colorFormat = utils.getCurrentColorFormat( renderObject.context );\n\t\tconst depthStencilFormat = utils.getCurrentDepthStencilFormat( renderObject.context );\n\t\tconst primitiveTopology = utils.getPrimitiveTopology( object, material );\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( data.material !== material || data.materialVersion !== material.version ||\n\t\t\tdata.transparent !== material.transparent || data.blending !== material.blending || data.premultipliedAlpha !== material.premultipliedAlpha ||\n\t\t\tdata.blendSrc !== material.blendSrc || data.blendDst !== material.blendDst || data.blendEquation !== material.blendEquation ||\n\t\t\tdata.blendSrcAlpha !== material.blendSrcAlpha || data.blendDstAlpha !== material.blendDstAlpha || data.blendEquationAlpha !== material.blendEquationAlpha ||\n\t\t\tdata.colorWrite !== material.colorWrite || data.depthWrite !== material.depthWrite || data.depthTest !== material.depthTest || data.depthFunc !== material.depthFunc ||\n\t\t\tdata.stencilWrite !== material.stencilWrite || data.stencilFunc !== material.stencilFunc ||\n\t\t\tdata.stencilFail !== material.stencilFail || data.stencilZFail !== material.stencilZFail || data.stencilZPass !== material.stencilZPass ||\n\t\t\tdata.stencilFuncMask !== material.stencilFuncMask || data.stencilWriteMask !== material.stencilWriteMask ||\n\t\t\tdata.side !== material.side || data.alphaToCoverage !== material.alphaToCoverage ||\n\t\t\tdata.sampleCount !== sampleCount || data.colorSpace !== colorSpace ||\n\t\t\tdata.colorFormat !== colorFormat || data.depthStencilFormat !== depthStencilFormat ||\n\t\t\tdata.primitiveTopology !== primitiveTopology ||\n\t\t\tdata.clippingContextCacheKey !== renderObject.clippingContextCacheKey\n\t\t) {\n\n\t\t\tdata.material = material; data.materialVersion = material.version;\n\t\t\tdata.transparent = material.transparent; data.blending = material.blending; data.premultipliedAlpha = material.premultipliedAlpha;\n\t\t\tdata.blendSrc = material.blendSrc; data.blendDst = material.blendDst; data.blendEquation = material.blendEquation;\n\t\t\tdata.blendSrcAlpha = material.blendSrcAlpha; data.blendDstAlpha = material.blendDstAlpha; data.blendEquationAlpha = material.blendEquationAlpha;\n\t\t\tdata.colorWrite = material.colorWrite;\n\t\t\tdata.depthWrite = material.depthWrite; data.depthTest = material.depthTest; data.depthFunc = material.depthFunc;\n\t\t\tdata.stencilWrite = material.stencilWrite; data.stencilFunc = material.stencilFunc;\n\t\t\tdata.stencilFail = material.stencilFail; data.stencilZFail = material.stencilZFail; data.stencilZPass = material.stencilZPass;\n\t\t\tdata.stencilFuncMask = material.stencilFuncMask; data.stencilWriteMask = material.stencilWriteMask;\n\t\t\tdata.side = material.side; data.alphaToCoverage = material.alphaToCoverage;\n\t\t\tdata.sampleCount = sampleCount;\n\t\t\tdata.colorSpace = colorSpace;\n\t\t\tdata.colorFormat = colorFormat;\n\t\t\tdata.depthStencilFormat = depthStencilFormat;\n\t\t\tdata.primitiveTopology = primitiveTopology;\n\t\t\tdata.clippingContextCacheKey = renderObject.clippingContextCacheKey;\n\n\t\t\tneedsUpdate = true;\n\n\t\t}\n\n\t\treturn needsUpdate;\n\n\t}\n\n\t/**\n\t * Returns a cache key that is used to identify render pipelines.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @return {string} The cache key.\n\t */\n\tgetRenderCacheKey( renderObject ) {\n\n\t\tconst { object, material } = renderObject;\n\n\t\tconst utils = this.utils;\n\t\tconst renderContext = renderObject.context;\n\n\t\t// meshes with negative scale have a different frontFace render pipeline\n\t\t// descriptor value so the following must be honored in the cache key\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\treturn [\n\t\t\tmaterial.transparent, material.blending, material.premultipliedAlpha,\n\t\t\tmaterial.blendSrc, material.blendDst, material.blendEquation,\n\t\t\tmaterial.blendSrcAlpha, material.blendDstAlpha, material.blendEquationAlpha,\n\t\t\tmaterial.colorWrite,\n\t\t\tmaterial.depthWrite, material.depthTest, material.depthFunc,\n\t\t\tmaterial.stencilWrite, material.stencilFunc,\n\t\t\tmaterial.stencilFail, material.stencilZFail, material.stencilZPass,\n\t\t\tmaterial.stencilFuncMask, material.stencilWriteMask,\n\t\t\tmaterial.side,\n\t\t\tfrontFaceCW,\n\t\t\tutils.getSampleCountRenderContext( renderContext ),\n\t\t\tutils.getCurrentColorSpace( renderContext ), utils.getCurrentColorFormat( renderContext ), utils.getCurrentDepthStencilFormat( renderContext ),\n\t\t\tutils.getPrimitiveTopology( object, material ),\n\t\t\trenderObject.getGeometryCacheKey(),\n\t\t\trenderObject.clippingContextCacheKey\n\t\t].join();\n\n\t}\n\n\t// textures\n\n\t/**\n\t * Updates a GPU sampler for the given texture.\n\t *\n\t * @param {Texture} texture - The texture to update the sampler for.\n\t * @return {string} The current sampler key.\n\t */\n\tupdateSampler( texture ) {\n\n\t\treturn this.textureUtils.updateSampler( texture );\n\n\t}\n\n\t/**\n\t * Creates a default texture for the given texture that can be used\n\t * as a placeholder until the actual texture is ready for usage.\n\t *\n\t * @param {Texture} texture - The texture to create a default texture for.\n\t * @return {boolean} Whether the sampler has been updated or not.\n\t */\n\tcreateDefaultTexture( texture ) {\n\n\t\treturn this.textureUtils.createDefaultTexture( texture );\n\n\t}\n\n\t/**\n\t * Defines a texture on the GPU for the given texture object.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t */\n\tcreateTexture( texture, options ) {\n\n\t\tthis.textureUtils.createTexture( texture, options );\n\n\t}\n\n\t/**\n\t * Uploads the updated texture data to the GPU.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {Object} [options={}] - Optional configuration parameter.\n\t */\n\tupdateTexture( texture, options ) {\n\n\t\tthis.textureUtils.updateTexture( texture, options );\n\n\t}\n\n\t/**\n\t * Generates mipmaps for the given texture.\n\t *\n\t * @param {Texture} texture - The texture.\n\t */\n\tgenerateMipmaps( texture ) {\n\n\t\tthis.textureUtils.generateMipmaps( texture );\n\n\t}\n\n\t/**\n\t * Destroys the GPU data for the given texture object.\n\t *\n\t * @param {Texture} texture - The texture.\n\t * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.\n\t */\n\tdestroyTexture( texture, isDefaultTexture = false ) {\n\n\t\tthis.textureUtils.destroyTexture( texture, isDefaultTexture );\n\n\t}\n\n\t/**\n\t * Returns texture data as a typed array.\n\t *\n\t * @async\n\t * @param {Texture} texture - The texture to copy.\n\t * @param {number} x - The x coordinate of the copy origin.\n\t * @param {number} y - The y coordinate of the copy origin.\n\t * @param {number} width - The width of the copy.\n\t * @param {number} height - The height of the copy.\n\t * @param {number} faceIndex - The face index.\n\t * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.\n\t */\n\tasync copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {\n\n\t\treturn this.textureUtils.copyTextureToBuffer( texture, x, y, width, height, faceIndex );\n\n\t}\n\n\t/**\n\t * Inits a time stamp query for the given render context.\n\t *\n\t * @param {string} type - The type of the timestamp query (e.g. 'render', 'compute').\n\t * @param {number} uid - Unique id for the context (e.g. render context id).\n\t * @param {Object} descriptor - The query descriptor.\n\t */\n\tinitTimestampQuery( type, uid, descriptor ) {\n\n\t\tif ( ! this.trackTimestamp ) return;\n\n\t\tif ( ! this.timestampQueryPool[ type ] ) {\n\n\t\t\t// TODO: Variable maxQueries?\n\t\t\tthis.timestampQueryPool[ type ] = new WebGPUTimestampQueryPool( this.device, type, 2048 );\n\n\t\t}\n\n\t\tconst timestampQueryPool = this.timestampQueryPool[ type ];\n\n\t\tconst baseOffset = timestampQueryPool.allocateQueriesForContext( uid );\n\n\t\tdescriptor.timestampWrites = {\n\t\t\tquerySet: timestampQueryPool.querySet,\n\t\t\tbeginningOfPassWriteIndex: baseOffset,\n\t\t\tendOfPassWriteIndex: baseOffset + 1,\n\t\t};\n\n\t}\n\n\n\t// node builder\n\n\t/**\n\t * Returns a node builder for the given render object.\n\t *\n\t * @param {RenderObject} object - The render object.\n\t * @param {Renderer} renderer - The renderer.\n\t * @return {WGSLNodeBuilder} The node builder.\n\t */\n\tcreateNodeBuilder( object, renderer ) {\n\n\t\treturn new WGSLNodeBuilder( object, renderer );\n\n\t}\n\n\t// program\n\n\t/**\n\t * Creates a shader program from the given programmable stage.\n\t *\n\t * @param {ProgrammableStage} program - The programmable stage.\n\t */\n\tcreateProgram( program ) {\n\n\t\tconst programGPU = this.get( program );\n\n\t\tprogramGPU.module = {\n\t\t\tmodule: this.device.createShaderModule( { code: program.code, label: program.stage + ( program.name !== '' ? `_${ program.name }` : '' ) } ),\n\t\t\tentryPoint: 'main'\n\t\t};\n\n\t}\n\n\t/**\n\t * Destroys the shader program of the given programmable stage.\n\t *\n\t * @param {ProgrammableStage} program - The programmable stage.\n\t */\n\tdestroyProgram( program ) {\n\n\t\tthis.delete( program );\n\n\t}\n\n\t// pipelines\n\n\t/**\n\t * Creates a render pipeline for the given render object.\n\t *\n\t * @param {RenderObject} renderObject - The render object.\n\t * @param {Array<Promise>} promises - An array of compilation promises which are used in `compileAsync()`.\n\t */\n\tcreateRenderPipeline( renderObject, promises ) {\n\n\t\tthis.pipelineUtils.createRenderPipeline( renderObject, promises );\n\n\t}\n\n\t/**\n\t * Creates a compute pipeline for the given compute node.\n\t *\n\t * @param {ComputePipeline} computePipeline - The compute pipeline.\n\t * @param {Array<BindGroup>} bindings - The bindings.\n\t */\n\tcreateComputePipeline( computePipeline, bindings ) {\n\n\t\tthis.pipelineUtils.createComputePipeline( computePipeline, bindings );\n\n\t}\n\n\t/**\n\t * Prepares the state for encoding render bundles.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t */\n\tbeginBundle( renderContext ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\trenderContextData._currentPass = renderContextData.currentPass;\n\t\trenderContextData._currentSets = renderContextData.currentSets;\n\n\t\trenderContextData.currentSets = { attributes: {}, bindingGroups: [], pipeline: null, index: null };\n\t\trenderContextData.currentPass = this.pipelineUtils.createBundleEncoder( renderContext );\n\n\t}\n\n\t/**\n\t * After processing render bundles this method finalizes related work.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {RenderBundle} bundle - The render bundle.\n\t */\n\tfinishBundle( renderContext, bundle ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\tconst bundleEncoder = renderContextData.currentPass;\n\t\tconst bundleGPU = bundleEncoder.finish();\n\n\t\tthis.get( bundle ).bundleGPU = bundleGPU;\n\n\t\t// restore render pass state\n\n\t\trenderContextData.currentSets = renderContextData._currentSets;\n\t\trenderContextData.currentPass = renderContextData._currentPass;\n\n\t}\n\n\t/**\n\t * Adds a render bundle to the render context data.\n\t *\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {RenderBundle} bundle - The render bundle to add.\n\t */\n\taddBundle( renderContext, bundle ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\trenderContextData.renderBundles.push( this.get( bundle ).bundleGPU );\n\n\t}\n\n\t// bindings\n\n\t/**\n\t * Creates bindings from the given bind group definition.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @param {Array<BindGroup>} bindings - Array of bind groups.\n\t * @param {number} cacheIndex - The cache index.\n\t * @param {number} version - The version.\n\t */\n\tcreateBindings( bindGroup, bindings, cacheIndex, version ) {\n\n\t\tthis.bindingUtils.createBindings( bindGroup, bindings, cacheIndex, version );\n\n\t}\n\n\t/**\n\t * Updates the given bind group definition.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group.\n\t * @param {Array<BindGroup>} bindings - Array of bind groups.\n\t * @param {number} cacheIndex - The cache index.\n\t * @param {number} version - The version.\n\t */\n\tupdateBindings( bindGroup, bindings, cacheIndex, version ) {\n\n\t\tthis.bindingUtils.createBindings( bindGroup, bindings, cacheIndex, version );\n\n\t}\n\n\t/**\n\t * Updates a buffer binding.\n\t *\n\t *  @param {Buffer} binding - The buffer binding to update.\n\t */\n\tupdateBinding( binding ) {\n\n\t\tthis.bindingUtils.updateBinding( binding );\n\n\t}\n\n\t/**\n\t * Delete data associated with the current bind group.\n\t *\n\t * @param {BindGroup} bindGroup - The bind group.\n\t */\n\tdeleteBindGroupData( bindGroup ) {\n\n\t\tthis.bindingUtils.deleteBindGroupData( bindGroup );\n\n\t}\n\n\t// attributes\n\n\t/**\n\t * Creates the buffer of an indexed shader attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The indexed buffer attribute.\n\t */\n\tcreateIndexAttribute( attribute ) {\n\n\t\tlet usage = GPUBufferUsage.INDEX | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST;\n\n\t\tif ( attribute.isStorageBufferAttribute || attribute.isStorageInstancedBufferAttribute ) {\n\n\t\t\tusage |= GPUBufferUsage.STORAGE;\n\n\t\t}\n\n\t\tthis.attributeUtils.createAttribute( attribute, usage );\n\n\t}\n\n\t/**\n\t * Creates the GPU buffer of a shader attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tcreateAttribute( attribute ) {\n\n\t\tthis.attributeUtils.createAttribute( attribute, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST );\n\n\t}\n\n\t/**\n\t * Creates the GPU buffer of a storage attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tcreateStorageAttribute( attribute ) {\n\n\t\tthis.attributeUtils.createAttribute( attribute, GPUBufferUsage.STORAGE | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST );\n\n\t}\n\n\t/**\n\t * Creates the GPU buffer of an indirect storage attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute.\n\t */\n\tcreateIndirectStorageAttribute( attribute ) {\n\n\t\tthis.attributeUtils.createAttribute( attribute, GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST );\n\n\t}\n\n\t/**\n\t * Updates the GPU buffer of a shader attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute to update.\n\t */\n\tupdateAttribute( attribute ) {\n\n\t\tthis.attributeUtils.updateAttribute( attribute );\n\n\t}\n\n\t/**\n\t * Destroys the GPU buffer of a shader attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute to destroy.\n\t */\n\tdestroyAttribute( attribute ) {\n\n\t\tthis.attributeUtils.destroyAttribute( attribute );\n\n\t}\n\n\t// canvas\n\n\t/**\n\t * Triggers an update of the default render pass descriptor.\n\t */\n\tupdateSize() {\n\n\t\tthis.delete( this.renderer.getCanvasTarget() );\n\n\t}\n\n\t// utils public\n\n\t/**\n\t * Checks if the given feature is supported by the backend.\n\t *\n\t * @param {string} name - The feature's name.\n\t * @return {boolean} Whether the feature is supported or not.\n\t */\n\thasFeature( name ) {\n\n\t\tif ( GPUFeatureMap[ name ] !== undefined ) name = GPUFeatureMap[ name ];\n\n\t\treturn this.device.features.has( name );\n\n\t}\n\n\t/**\n\t * Copies data of the given source texture to the given destination texture.\n\t *\n\t * @param {Texture} srcTexture - The source texture.\n\t * @param {Texture} dstTexture - The destination texture.\n\t * @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.\n\t * @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.\n\t * @param {number} [srcLevel=0] - The mipmap level to copy.\n\t * @param {number} [dstLevel=0] - The destination mip level to copy to.\n\t */\n\tcopyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {\n\n\t\tlet dstX = 0;\n\t\tlet dstY = 0;\n\t\tlet dstZ = 0;\n\n\t\tlet srcX = 0;\n\t\tlet srcY = 0;\n\t\tlet srcZ = 0;\n\n\t\tlet srcWidth = srcTexture.image.width;\n\t\tlet srcHeight = srcTexture.image.height;\n\t\tlet srcDepth = 1;\n\n\n\t\tif ( srcRegion !== null ) {\n\n\t\t\tif ( srcRegion.isBox3 === true ) {\n\n\t\t\t\tsrcX = srcRegion.min.x;\n\t\t\t\tsrcY = srcRegion.min.y;\n\t\t\t\tsrcZ = srcRegion.min.z;\n\t\t\t\tsrcWidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\tsrcHeight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tsrcDepth = srcRegion.max.z - srcRegion.min.z;\n\n\t\t\t} else {\n\n\t\t\t\t// Assume it's a Box2\n\t\t\t\tsrcX = srcRegion.min.x;\n\t\t\t\tsrcY = srcRegion.min.y;\n\t\t\t\tsrcWidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\tsrcHeight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tsrcDepth = 1;\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tif ( dstPosition !== null ) {\n\n\t\t\tdstX = dstPosition.x;\n\t\t\tdstY = dstPosition.y;\n\t\t\tdstZ = dstPosition.z || 0;\n\n\t\t}\n\n\t\tconst encoder = this.device.createCommandEncoder( { label: 'copyTextureToTexture_' + srcTexture.id + '_' + dstTexture.id } );\n\n\t\tconst sourceGPU = this.get( srcTexture ).texture;\n\t\tconst destinationGPU = this.get( dstTexture ).texture;\n\n\t\tencoder.copyTextureToTexture(\n\t\t\t{\n\t\t\t\ttexture: sourceGPU,\n\t\t\t\tmipLevel: srcLevel,\n\t\t\t\torigin: { x: srcX, y: srcY, z: srcZ }\n\t\t\t},\n\t\t\t{\n\t\t\t\ttexture: destinationGPU,\n\t\t\t\tmipLevel: dstLevel,\n\t\t\t\torigin: { x: dstX, y: dstY, z: dstZ }\n\t\t\t},\n\t\t\t[\n\t\t\t\tsrcWidth,\n\t\t\t\tsrcHeight,\n\t\t\t\tsrcDepth\n\t\t\t]\n\t\t);\n\n\t\tthis.device.queue.submit( [ encoder.finish() ] );\n\n\t\tif ( dstLevel === 0 && dstTexture.generateMipmaps ) {\n\n\t\t\tthis.textureUtils.generateMipmaps( dstTexture );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Copies the current bound framebuffer to the given texture.\n\t *\n\t * @param {Texture} texture - The destination texture.\n\t * @param {RenderContext} renderContext - The render context.\n\t * @param {Vector4} rectangle - A four dimensional vector defining the origin and dimension of the copy.\n\t */\n\tcopyFramebufferToTexture( texture, renderContext, rectangle ) {\n\n\t\tconst renderContextData = this.get( renderContext );\n\n\t\tlet sourceGPU = null;\n\n\t\tif ( renderContext.renderTarget ) {\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\tsourceGPU = this.get( renderContext.depthTexture ).texture;\n\n\t\t\t} else {\n\n\t\t\t\tsourceGPU = this.get( renderContext.textures[ 0 ] ).texture;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\tsourceGPU = this.textureUtils.getDepthBuffer( renderContext.depth, renderContext.stencil );\n\n\t\t\t} else {\n\n\t\t\t\tsourceGPU = this.context.getCurrentTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst destinationGPU = this.get( texture ).texture;\n\n\t\tif ( sourceGPU.format !== destinationGPU.format ) {\n\n\t\t\terror( 'WebGPUBackend: copyFramebufferToTexture: Source and destination formats do not match.', sourceGPU.format, destinationGPU.format );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet encoder;\n\n\t\tif ( renderContextData.currentPass ) {\n\n\t\t\trenderContextData.currentPass.end();\n\n\t\t\tencoder = renderContextData.encoder;\n\n\t\t} else {\n\n\t\t\tencoder = this.device.createCommandEncoder( { label: 'copyFramebufferToTexture_' + texture.id } );\n\n\t\t}\n\n\t\tencoder.copyTextureToTexture(\n\t\t\t{\n\t\t\t\ttexture: sourceGPU,\n\t\t\t\torigin: [ rectangle.x, rectangle.y, 0 ],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttexture: destinationGPU\n\t\t\t},\n\t\t\t[\n\t\t\t\trectangle.z,\n\t\t\t\trectangle.w\n\t\t\t]\n\t\t);\n\n\t\t// mipmaps must be genereated with the same encoder otherwise the copied texture data\n\t\t// might be out-of-sync, see #31768\n\n\t\tif ( texture.generateMipmaps ) {\n\n\t\t\tthis.textureUtils.generateMipmaps( texture, encoder );\n\n\t\t}\n\n\t\tif ( renderContextData.currentPass ) {\n\n\t\t\tconst { descriptor } = renderContextData;\n\n\t\t\tfor ( let i = 0; i < descriptor.colorAttachments.length; i ++ ) {\n\n\t\t\t\tdescriptor.colorAttachments[ i ].loadOp = GPULoadOp.Load;\n\n\t\t\t}\n\n\t\t\tif ( renderContext.depth ) descriptor.depthStencilAttachment.depthLoadOp = GPULoadOp.Load;\n\t\t\tif ( renderContext.stencil ) descriptor.depthStencilAttachment.stencilLoadOp = GPULoadOp.Load;\n\n\t\t\trenderContextData.currentPass = encoder.beginRenderPass( descriptor );\n\t\t\trenderContextData.currentSets = { attributes: {}, bindingGroups: [], pipeline: null, index: null };\n\n\t\t\tif ( renderContext.viewport ) {\n\n\t\t\t\tthis.updateViewport( renderContext );\n\n\t\t\t}\n\n\t\t\tif ( renderContext.scissor ) {\n\n\t\t\t\tthis.updateScissor( renderContext );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.device.queue.submit( [ encoder.finish() ] );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the given compatibility is supported by the backend.\n\t *\n\t * @param {string} name - The compatibility name.\n\t * @return {boolean} Whether the compatibility is supported or not.\n\t */\n\thasCompatibility( name ) {\n\n\t\tif ( this._compatibility[ name ] !== undefined ) {\n\n\t\t\treturn this._compatibility[ name ];\n\n\t\t}\n\n\t\treturn super.hasCompatibility( name );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.bindingUtils.dispose();\n\t\tthis.textureUtils.dispose();\n\n\t\tif ( this.occludedResolveCache ) {\n\n\t\t\tfor ( const buffer of this.occludedResolveCache.values() ) {\n\n\t\t\t\tbuffer.destroy();\n\n\t\t\t}\n\n\t\t\tthis.occludedResolveCache.clear();\n\n\t\t}\n\n\t\tif ( this.timestampQueryPool ) {\n\n\t\t\tfor ( const queryPool of Object.values( this.timestampQueryPool ) ) {\n\n\t\t\t\tif ( queryPool !== null ) queryPool.dispose();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.parameters.device === undefined && this.device !== null ) {\n\n\t\t\tthis.device.destroy();\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * A IES version of {@link SpotLight}. Can only be used with {@link WebGPURenderer}.\n *\n * @augments SpotLight\n */\nclass IESSpotLight extends SpotLight {\n\n\t/**\n\t * Constructs a new IES spot light.\n\t *\n\t * @param {(number|Color|string)} [color=0xffffff] - The light's color.\n\t * @param {number} [intensity=1] - The light's strength/intensity measured in candela (cd).\n\t * @param {number} [distance=0] - Maximum range of the light. `0` means no limit.\n\t * @param {number} [angle=Math.PI/3] - Maximum angle of light dispersion from its direction whose upper bound is `Math.PI/2`.\n\t * @param {number} [penumbra=0] - Percent of the spotlight cone that is attenuated due to penumbra. Value range is `[0,1]`.\n\t * @param {number} [decay=2] - The amount the light dims along the distance of the light.\n\t */\n\tconstructor( color, intensity, distance, angle, penumbra, decay ) {\n\n\t\tsuper( color, intensity, distance, angle, penumbra, decay );\n\n\t\t/**\n\t\t * The IES map. It's a lookup table that stores normalized attenuation factors\n\t\t * (0.0 to 1.0) that represent the light's intensity at a specific angle.\n\t\t *\n\t\t * @type {?Texture}\n\t\t * @default null\n\t\t */\n\t\tthis.iesMap = null;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.iesMap = source.iesMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * A projector light version of {@link SpotLight}. Can only be used with {@link WebGPURenderer}.\n *\n * @augments SpotLight\n */\nclass ProjectorLight extends SpotLight {\n\n\t/**\n\t * Constructs a new projector light.\n\t *\n\t * @param {(number|Color|string)} [color=0xffffff] - The light's color.\n\t * @param {number} [intensity=1] - The light's strength/intensity measured in candela (cd).\n\t * @param {number} [distance=0] - Maximum range of the light. `0` means no limit.\n\t * @param {number} [angle=Math.PI/3] - Maximum angle of light dispersion from its direction whose upper bound is `Math.PI/2`.\n\t * @param {number} [penumbra=0] - Percent of the spotlight cone that is attenuated due to penumbra. Value range is `[0,1]`.\n\t * @param {number} [decay=2] - The amount the light dims along the distance of the light.\n\t */\n\tconstructor( color, intensity, distance, angle, penumbra, decay ) {\n\n\t\tsuper( color, intensity, distance, angle, penumbra, decay );\n\n\t\t/**\n\t\t * Aspect ratio of the light. Set to `null` to use the texture aspect ratio.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.aspect = null;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.aspect = source.aspect;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * This version of a node library represents the standard version\n * used in {@link WebGPURenderer}. It maps lights, tone mapping\n * techniques and materials to node-based implementations.\n *\n * @private\n * @augments NodeLibrary\n */\nclass StandardNodeLibrary extends NodeLibrary {\n\n\t/**\n\t * Constructs a new standard node library.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.addMaterial( MeshPhongNodeMaterial, 'MeshPhongMaterial' );\n\t\tthis.addMaterial( MeshStandardNodeMaterial, 'MeshStandardMaterial' );\n\t\tthis.addMaterial( MeshPhysicalNodeMaterial, 'MeshPhysicalMaterial' );\n\t\tthis.addMaterial( MeshToonNodeMaterial, 'MeshToonMaterial' );\n\t\tthis.addMaterial( MeshBasicNodeMaterial, 'MeshBasicMaterial' );\n\t\tthis.addMaterial( MeshLambertNodeMaterial, 'MeshLambertMaterial' );\n\t\tthis.addMaterial( MeshNormalNodeMaterial, 'MeshNormalMaterial' );\n\t\tthis.addMaterial( MeshMatcapNodeMaterial, 'MeshMatcapMaterial' );\n\t\tthis.addMaterial( LineBasicNodeMaterial, 'LineBasicMaterial' );\n\t\tthis.addMaterial( LineDashedNodeMaterial, 'LineDashedMaterial' );\n\t\tthis.addMaterial( PointsNodeMaterial, 'PointsMaterial' );\n\t\tthis.addMaterial( SpriteNodeMaterial, 'SpriteMaterial' );\n\t\tthis.addMaterial( ShadowNodeMaterial, 'ShadowMaterial' );\n\n\t\tthis.addLight( PointLightNode, PointLight );\n\t\tthis.addLight( DirectionalLightNode, DirectionalLight );\n\t\tthis.addLight( RectAreaLightNode, RectAreaLight );\n\t\tthis.addLight( SpotLightNode, SpotLight );\n\t\tthis.addLight( AmbientLightNode, AmbientLight );\n\t\tthis.addLight( HemisphereLightNode, HemisphereLight );\n\t\tthis.addLight( LightProbeNode, LightProbe );\n\t\tthis.addLight( IESSpotLightNode, IESSpotLight );\n\t\tthis.addLight( ProjectorLightNode, ProjectorLight );\n\n\t\tthis.addToneMapping( linearToneMapping, LinearToneMapping );\n\t\tthis.addToneMapping( reinhardToneMapping, ReinhardToneMapping );\n\t\tthis.addToneMapping( cineonToneMapping, CineonToneMapping );\n\t\tthis.addToneMapping( acesFilmicToneMapping, ACESFilmicToneMapping );\n\t\tthis.addToneMapping( agxToneMapping, AgXToneMapping );\n\t\tthis.addToneMapping( neutralToneMapping, NeutralToneMapping );\n\n\t}\n\n}\n\n/*\nconst debugHandler = {\n\n\tget: function ( target, name ) {\n\n\t\t// Add |update\n\t\tif ( /^(create|destroy)/.test( name ) ) log( 'WebGPUBackend.' + name );\n\n\t\treturn target[ name ];\n\n\t}\n\n};\n*/\n\n/**\n * This renderer is the new alternative of `WebGLRenderer`. `WebGPURenderer` has the ability\n * to target different backends. By default, the renderer tries to use a WebGPU backend if the\n * browser supports WebGPU. If not, `WebGPURenderer` falls backs to a WebGL 2 backend.\n *\n * @augments Renderer\n */\nclass WebGPURenderer extends Renderer {\n\n\t/**\n\t * WebGPURenderer options.\n\t *\n\t * @typedef {Object} WebGPURenderer~Options\n\t * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.\n\t * @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.\n\t * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.\n\t * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.\n\t * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.\n\t * @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.\n\t * @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.\n\t * @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.\n\t * @property {boolean} [multiview=false] - If set to `true`, the renderer will use multiview during WebXR rendering if supported.\n\t * @property {number} [outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.\n\t * @property {number} [outputBufferType=HalfFloatType] - Defines the type of output buffers. The default `HalfFloatType` is recommend for best\n\t * quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.\n\t */\n\n\t/**\n\t * Constructs a new WebGPU renderer.\n\t *\n\t * @param {WebGPURenderer~Options} [parameters] - The configuration parameter.\n\t */\n\tconstructor( parameters = {} ) {\n\n\t\tlet BackendClass;\n\n\t\tif ( parameters.forceWebGL ) {\n\n\t\t\tBackendClass = WebGLBackend;\n\n\t\t} else {\n\n\t\t\tBackendClass = WebGPUBackend;\n\n\t\t\tparameters.getFallback = () => {\n\n\t\t\t\twarn( 'WebGPURenderer: WebGPU is not available, running under WebGL2 backend.' );\n\n\t\t\t\treturn new WebGLBackend( parameters );\n\n\t\t\t};\n\n\t\t}\n\n\t\tconst backend = new BackendClass( parameters );\n\n\t\t//super( new Proxy( backend, debugHandler ) );\n\t\tsuper( backend, parameters );\n\n\t\t/**\n\t\t * The generic default value is overwritten with the\n\t\t * standard node library for type mapping.\n\t\t *\n\t\t * @type {StandardNodeLibrary}\n\t\t */\n\t\tthis.library = new StandardNodeLibrary();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isWebGPURenderer = true;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * A specialized group which enables applications access to the\n * Render Bundle API of WebGPU. The group with all its descendant nodes\n * are considered as one render bundle and processed as such by\n * the renderer.\n *\n * This module is only fully supported by `WebGPURenderer` with a WebGPU backend.\n * With a WebGL backend, the group can technically be rendered but without\n * any performance improvements.\n *\n * @augments Group\n */\nclass BundleGroup extends Group {\n\n\t/**\n\t * Constructs a new bundle group.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isBundleGroup = true;\n\n\t\t/**\n\t\t * This property is only relevant for detecting types\n\t\t * during serialization/deserialization. It should always\n\t\t * match the class name.\n\t\t *\n\t\t * @type {string}\n\t\t * @readonly\n\t\t * @default 'BundleGroup'\n\t\t */\n\t\tthis.type = 'BundleGroup';\n\n\t\t/**\n\t\t * Whether the bundle is static or not. When set to `true`, the structure\n\t\t * is assumed to be static and does not change. E.g. no new objects are\n\t\t * added to the group.\n\t\t *\n\t\t * If a change is required, an update can still be forced by setting the\n\t\t * `needsUpdate` flag to `true`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.static = true;\n\n\t\t/**\n\t\t * The bundle group's version.\n\t\t *\n\t\t * @type {number}\n\t\t * @readonly\n\t\t * @default 0\n\t\t */\n\t\tthis.version = 0;\n\n\t}\n\n\t/**\n\t * Set this property to `true` when the bundle group has changed.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t * @param {boolean} value\n\t */\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\n/**\n * This module is responsible to manage the rendering pipeline setups in apps.\n * You usually create a single instance of this class and use it to define\n * the output of your render pipeline and post processing effect chain.\n * ```js\n * const renderPipeline = new RenderPipeline( renderer );\n *\n * const scenePass = pass( scene, camera );\n *\n * renderPipeline.outputNode = scenePass;\n * ```\n *\n * Note: This module can only be used with `WebGPURenderer`.\n */\nclass RenderPipeline {\n\n\t/**\n\t * Constructs a new render pipeline management module.\n\t *\n\t * @param {Renderer} renderer - A reference to the renderer.\n\t * @param {Node<vec4>} outputNode - An optional output node.\n\t */\n\tconstructor( renderer, outputNode = vec4( 0, 0, 1, 1 ) ) {\n\n\t\t/**\n\t\t * A reference to the renderer.\n\t\t *\n\t\t * @type {Renderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\t/**\n\t\t * A node which defines the final output of the rendering\n\t\t * pipeline. This is usually the last node in a chain\n\t\t * of effect nodes.\n\t\t *\n\t\t * @type {Node<vec4>}\n\t\t */\n\t\tthis.outputNode = outputNode;\n\n\t\t/**\n\t\t * Whether the default output tone mapping and color\n\t\t * space transformation should be enabled or not.\n\t\t *\n\t\t * This is enabled by default but it must be disabled for\n\t\t * effects that expect to be executed after tone mapping and color\n\t\t * space conversion. A typical example is FXAA which\n\t\t * requires sRGB input.\n\t\t *\n\t\t * When set to `false`, the app must control the output\n\t\t * transformation with `RenderOutputNode`.\n\t\t *\n\t\t * ```js\n\t\t * const outputPass = renderOutput( scenePass );\n\t\t * ```\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.outputColorTransform = true;\n\n\t\t/**\n\t\t * Must be set to `true` when the output node changes.\n\t\t *\n\t\t * @type {Node<vec4>}\n\t\t */\n\t\tthis.needsUpdate = true;\n\n\t\tconst material = new NodeMaterial();\n\t\tmaterial.name = 'RenderPipeline';\n\n\t\t/**\n\t\t * The full screen quad that is used to render\n\t\t * the effects.\n\t\t *\n\t\t * @private\n\t\t * @type {QuadMesh}\n\t\t */\n\t\tthis._quadMesh = new QuadMesh( material );\n\t\tthis._quadMesh.name = 'Render Pipeline';\n\n\t\t/**\n\t\t * The context of the render pipeline stack.\n\t\t *\n\t\t * @private\n\t\t * @type {?Object}\n\t\t * @default null\n\t\t */\n\t\tthis._context = null;\n\n\t\t/**\n\t\t * The current tone mapping.\n\t\t *\n\t\t * @private\n\t\t * @type {ToneMapping}\n\t\t */\n\t\tthis._toneMapping = renderer.toneMapping;\n\n\t\t/**\n\t\t * The current output color space.\n\t\t *\n\t\t * @private\n\t\t * @type {ColorSpace}\n\t\t */\n\t\tthis._outputColorSpace = renderer.outputColorSpace;\n\n\n\t}\n\n\t/**\n\t * When `RenderPipeline` is used to apply rendering pipeline and post processing effects,\n\t * the application must use this version of `render()` inside\n\t * its animation loop (not the one from the renderer).\n\t */\n\trender() {\n\n\t\tconst renderer = this.renderer;\n\n\t\tthis._update();\n\n\t\tif ( this._context.onBeforeRenderPipeline !== null ) this._context.onBeforeRenderPipeline();\n\n\t\tconst toneMapping = renderer.toneMapping;\n\t\tconst outputColorSpace = renderer.outputColorSpace;\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputColorSpace = ColorManagement.workingColorSpace;\n\n\t\t//\n\n\t\tconst currentXR = renderer.xr.enabled;\n\t\trenderer.xr.enabled = false;\n\n\t\tthis._quadMesh.render( renderer );\n\n\t\trenderer.xr.enabled = currentXR;\n\n\t\t//\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputColorSpace = outputColorSpace;\n\n\t\tif ( this._context.onAfterRenderPipeline !== null ) this._context.onAfterRenderPipeline();\n\n\t}\n\n\t/**\n\t * Returns the current context of the render pipeline stack.\n\t *\n\t * @readonly\n\t * @type {?Object}\n\t */\n\tget context() {\n\n\t\treturn this._context;\n\n\t}\n\n\t/**\n\t * Frees internal resources.\n\t */\n\tdispose() {\n\n\t\tthis._quadMesh.material.dispose();\n\n\t}\n\n\t/**\n\t * Updates the state of the module.\n\t *\n\t * @private\n\t */\n\t_update() {\n\n\t\tif ( this._toneMapping !== this.renderer.toneMapping ) {\n\n\t\t\tthis._toneMapping = this.renderer.toneMapping;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this._outputColorSpace !== this.renderer.outputColorSpace ) {\n\n\t\t\tthis._outputColorSpace = this.renderer.outputColorSpace;\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.needsUpdate === true ) {\n\n\t\t\tconst toneMapping = this._toneMapping;\n\t\t\tconst outputColorSpace = this._outputColorSpace;\n\n\t\t\tconst context = {\n\t\t\t\trenderPipeline: this,\n\t\t\t\tonBeforeRenderPipeline: null,\n\t\t\t\tonAfterRenderPipeline: null\n\t\t\t};\n\n\t\t\tlet outputNode = this.outputNode;\n\n\t\t\tif ( this.outputColorTransform === true ) {\n\n\t\t\t\toutputNode = outputNode.context( context );\n\n\t\t\t\toutputNode = renderOutput( outputNode, toneMapping, outputColorSpace );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.toneMapping = toneMapping;\n\t\t\t\tcontext.outputColorSpace = outputColorSpace;\n\n\t\t\t\toutputNode = outputNode.context( context );\n\n\t\t\t}\n\n\t\t\tthis._context = context;\n\n\t\t\tthis._quadMesh.material.fragmentNode = outputNode;\n\t\t\tthis._quadMesh.material.needsUpdate = true;\n\n\t\t\tthis.needsUpdate = false;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * When `RenderPipeline` is used to apply rendering pipeline and post processing effects,\n\t * the application must use this version of `renderAsync()` inside\n\t * its animation loop (not the one from the renderer).\n\t *\n\t * @async\n\t * @deprecated\n\t * @return {Promise} A Promise that resolves when the render has been finished.\n\t */\n\tasync renderAsync() {\n\n\t\twarnOnce( 'RenderPipeline: \"renderAsync()\" has been deprecated. Use \"render()\" and \"await renderer.init();\" when creating the renderer.' ); // @deprecated r181\n\n\t\tawait this.renderer.init();\n\n\t\tthis.render();\n\n\t}\n\n}\n\n/**\n * @deprecated since r183. Use {@link RenderPipeline} instead. PostProcessing has been renamed to RenderPipeline.\n *\n * This class is a wrapper for backward compatibility and will be removed in a future version.\n */\nclass PostProcessing extends RenderPipeline {\n\n\t/**\n\t * Constructs a new post processing management module.\n\t *\n\t * @param {Renderer} renderer - A reference to the renderer.\n\t * @param {Node<vec4>} outputNode - An optional output node.\n\t * @deprecated since r183. Use {@link RenderPipeline} instead.\n\t */\n\tconstructor( renderer, outputNode ) {\n\n\t\twarnOnce( 'PostProcessing: \"PostProcessing\" has been renamed to \"RenderPipeline\". Please update your code to use \"THREE.RenderPipeline\" instead.' ); // @deprecated, r183\n\n\t\tsuper( renderer, outputNode );\n\n\t}\n\n}\n\n/**\n * A readback buffer is used to transfer data from the GPU to the CPU.\n * It is primarily used to read back compute shader results.\n *\n * @augments EventDispatcher\n */\nclass ReadbackBuffer extends EventDispatcher {\n\n\t/**\n\t * Constructs a new readback buffer.\n\t *\n\t * @param {number} maxByteLength - The maximum size of the buffer to be read back.\n\t */\n\tconstructor( maxByteLength ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * Name used for debugging purposes.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.name = '';\n\n\t\t/**\n\t\t * The mapped, read back array buffer.\n\t\t *\n\t\t * @type {ArrayBuffer|null}\n\t\t */\n\t\tthis.buffer = null;\n\n\t\t/**\n\t\t * The maximum size of the buffer to be read back.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.maxByteLength = maxByteLength;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isReadbackBuffer = true;\n\n\t\tthis._mapped = false;\n\n\t}\n\n\t/**\n\t * Releases the mapped buffer data so the GPU buffer can be\n\t * used by the GPU again.\n\t *\n\t * Note: Any `ArrayBuffer` data associated with this readback buffer\n\t * are removed and no longer accessible after calling this method.\n\t */\n\trelease() {\n\n\t\tthis.dispatchEvent( { type: 'release' } );\n\n\t}\n\n\t/**\n\t * Frees internal resources.\n\t */\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\n/**\n * This special type of texture is intended for compute shaders.\n * It can be used to compute the data of a texture with a compute shader.\n *\n * Note: This type of texture can only be used with `WebGPURenderer`\n * and a WebGPU backend.\n *\n * @augments Texture\n */\nclass StorageTexture extends Texture {\n\n\t/**\n\t * Constructs a new storage texture.\n\t *\n\t * @param {number} [width=1] - The storage texture's width.\n\t * @param {number} [height=1] - The storage texture's height.\n\t */\n\tconstructor( width = 1, height = 1 ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The image object which just represents the texture's dimension.\n\t\t *\n\t\t * @type {{width: number, height: number}}\n\t\t */\n\t\tthis.image = { width, height };\n\n\t\t/**\n\t\t * The default `magFilter` for storage textures is `THREE.LinearFilter`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.magFilter = LinearFilter;\n\n\t\t/**\n\t\t * The default `minFilter` for storage textures is `THREE.LinearFilter`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.minFilter = LinearFilter;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStorageTexture = true;\n\n\t\t/**\n\t\t * When `true`, mipmaps will be auto-generated after compute writes.\n\t\t * When `false`, mipmaps must be written manually via compute shaders.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.mipmapsAutoUpdate = true;\n\n\t}\n\t/**\n\t * Sets the size of the storage texture.\n\t *\n\t * @param {number} width - The new width of the storage texture.\n\t * @param {number} height - The new height of the storage texture.\n\t */\n\tsetSize( width, height ) {\n\n\t\tif ( this.image.width !== width || this.image.height !== height ) {\n\n\t\t\tthis.image.width = width;\n\t\t\tthis.image.height = height;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * This special type of texture is intended for compute shaders.\n * It can be used to compute the data of a texture with a compute shader.\n *\n * Note: This type of texture can only be used with `WebGPURenderer`\n * and a WebGPU backend.\n *\n * @augments Texture\n */\nclass Storage3DTexture extends Texture {\n\n\t/**\n\t * Constructs a new storage texture.\n\t *\n\t * @param {number} [width=1] - The storage texture's width.\n\t * @param {number} [height=1] - The storage texture's height.\n\t * @param {number} [depth=1] - The storage texture's depth.\n\t */\n\tconstructor( width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper();\n\n\t\t//inherited from texture. Must be false for 3DTexture\n\t\tthis.isArrayTexture = false;\n\n\t\t/**\n\t\t * The image object which just represents the texture's dimension.\n\t\t *\n\t\t * @type {{width: number, height: number, depth: number}}\n\t\t */\n\t\tthis.image = { width, height, depth };\n\n\t\t/**\n\t\t * The default `magFilter` for storage textures is `THREE.LinearFilter`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.magFilter = LinearFilter;\n\n\t\t/**\n\t\t * The default `minFilter` for storage textures is `THREE.LinearFilter`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.minFilter = LinearFilter;\n\n\t\t/**\n\t\t * This defines how the texture is wrapped in the depth direction and corresponds to\n\t\t * *W* in UVW mapping.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStorageTexture = true;\n\n\t\t/**\n\t\t * Indicates whether this texture is a 3D texture.\n\t\t *\n\t\t * @type {boolean}\n\t\t *\n\t\t */\n\t\tthis.is3DTexture = true;\n\n\t}\n\n\t/**\n\t * Sets the size of the storage 3d texture.\n\t *\n\t * @param {number} width - The new width of the storage texture.\n\t * @param {number} height - The new height of the storage texture.\n\t * @param {number} depth - The new depth of the storage texture.\n\t */\n\tsetSize( width, height, depth ) {\n\n\t\tif ( this.image.width !== width || this.image.height !== height || this.image.depth !== depth ) {\n\n\t\t\tthis.image.width = width;\n\t\t\tthis.image.height = height;\n\t\t\tthis.image.depth = depth;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * This special type of texture is intended for compute shaders.\n * It can be used to compute the data of a texture with a compute shader.\n *\n * Note: This type of texture can only be used with `WebGPURenderer`\n * and a WebGPU backend.\n *\n * @augments Texture\n */\nclass StorageArrayTexture extends Texture {\n\n\t/**\n\t * Constructs a new storage texture.\n\t *\n\t * @param {number} [width=1] - The storage texture's width.\n\t * @param {number} [height=1] - The storage texture's height.\n\t * @param {number} [depth=1] - The storage texture's depth.\n\t */\n\tconstructor( width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper();\n\n\t\t//inherited from texture\n\t\tthis.isArrayTexture = true;\n\n\t\t/**\n\t\t * The image object which just represents the texture's dimension.\n\t\t *\n\t\t * @type {{width: number, height: number, depth: number}}\n\t\t */\n\t\tthis.image = { width, height, depth };\n\n\t\t/**\n\t\t * The default `magFilter` for storage textures is `THREE.LinearFilter`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.magFilter = LinearFilter;\n\n\t\t/**\n\t\t * The default `minFilter` for storage textures is `THREE.LinearFilter`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.minFilter = LinearFilter;\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isStorageTexture = true;\n\n\t}\n\n\t/**\n\t * Sets the size of the storage array texture.\n\t *\n\t * @param {number} width - The new width of the storage texture.\n\t * @param {number} height - The new height of the storage texture.\n\t * @param {number} depth - The new depth of the storage texture.\n\t */\n\tsetSize( width, height, depth ) {\n\n\t\tif ( this.image.width !== width || this.image.height !== height || this.image.depth !== depth ) {\n\n\t\t\tthis.image.width = width;\n\t\t\tthis.image.height = height;\n\t\t\tthis.image.depth = depth;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * This special type of buffer attribute is intended for compute shaders.\n * It can be used to encode draw parameters for indirect draw calls.\n *\n * Note: This type of buffer attribute can only be used with `WebGPURenderer`\n * and a WebGPU backend.\n *\n * @augments StorageBufferAttribute\n */\nclass IndirectStorageBufferAttribute extends StorageBufferAttribute {\n\n\t/**\n\t * Constructs a new storage buffer attribute.\n\t *\n\t * @param {number|Uint32Array} count - The item count. It is also valid to pass a `Uint32Array` as an argument.\n\t * The subsequent parameter is then obsolete.\n\t * @param {number} itemSize - The item size.\n\t */\n\tconstructor( count, itemSize ) {\n\n\t\tsuper( count, itemSize, Uint32Array );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isIndirectStorageBufferAttribute = true;\n\n\t}\n\n}\n\n/**\n * A loader for loading node objects in the three.js JSON Object/Scene format.\n *\n * @augments Loader\n */\nclass NodeLoader extends Loader {\n\n\t/**\n\t * Constructs a new node loader.\n\t *\n\t * @param {LoadingManager} [manager] - A reference to a loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * Represents a dictionary of textures.\n\t\t *\n\t\t * @type {Object<string,Texture>}\n\t\t */\n\t\tthis.textures = {};\n\n\t\t/**\n\t\t * Represents a dictionary of node types.\n\t\t *\n\t\t * @type {Object<string,Node.constructor>}\n\t\t */\n\t\tthis.nodes = {};\n\n\t}\n\n\t/**\n\t * Loads the node definitions from the given URL.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded.\n\t * @param {Function} onLoad - Will be called when load completes.\n\t * @param {Function} onProgress - Will be called while load progresses.\n\t * @param {Function} onError - Will be called when errors are thrown during the loading process.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, ( text ) => {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( this.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\terror( e );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Parse the node dependencies for the loaded node.\n\t *\n\t * @param {Array<Object>} [json] - The JSON definition\n\t * @return {Object<string,Node>} A dictionary with node dependencies.\n\t */\n\tparseNodes( json ) {\n\n\t\tconst nodes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( const nodeJSON of json ) {\n\n\t\t\t\tconst { uuid, type } = nodeJSON;\n\n\t\t\t\tnodes[ uuid ] = this.createNodeFromType( type );\n\t\t\t\tnodes[ uuid ].uuid = uuid;\n\n\t\t\t}\n\n\t\t\tconst meta = { nodes, textures: this.textures };\n\n\t\t\tfor ( const nodeJSON of json ) {\n\n\t\t\t\tnodeJSON.meta = meta;\n\n\t\t\t\tconst node = nodes[ nodeJSON.uuid ];\n\t\t\t\tnode.deserialize( nodeJSON );\n\n\t\t\t\tdelete nodeJSON.meta;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn nodes;\n\n\t}\n\n\t/**\n\t * Parses the node from the given JSON.\n\t *\n\t * @param {Object} json - The JSON definition\n\t * @param {string} json.type - The node type.\n\t * @param {string} json.uuid - The node UUID.\n\t * @param {Array<Object>} [json.nodes] - The node dependencies.\n\t * @param {Object} [json.meta] - The meta data.\n\t * @return {Node} The parsed node.\n\t */\n\tparse( json ) {\n\n\t\tconst node = this.createNodeFromType( json.type );\n\t\tnode.uuid = json.uuid;\n\n\t\tconst nodes = this.parseNodes( json.nodes );\n\t\tconst meta = { nodes, textures: this.textures };\n\n\t\tjson.meta = meta;\n\n\t\tnode.deserialize( json );\n\n\t\tdelete json.meta;\n\n\t\treturn node;\n\n\t}\n\n\t/**\n\t * Defines the dictionary of textures.\n\t *\n\t * @param {Object<string,Texture>} value - The texture library defines as `<uuid,texture>`.\n\t * @return {NodeLoader} A reference to this loader.\n\t */\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Defines the dictionary of node types.\n\t *\n\t * @param {Object<string,Node.constructor>} value - The node library defined as `<classname,class>`.\n\t * @return {NodeLoader} A reference to this loader.\n\t */\n\tsetNodes( value ) {\n\n\t\tthis.nodes = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates a node object from the given type.\n\t *\n\t * @param {string} type - The node type.\n\t * @return {Node} The created node instance.\n\t */\n\tcreateNodeFromType( type ) {\n\n\t\tif ( this.nodes[ type ] === undefined ) {\n\n\t\t\terror( 'NodeLoader: Node type not found:', type );\n\t\t\treturn float();\n\n\t\t}\n\n\t\treturn new this.nodes[ type ]();\n\n\t}\n\n}\n\n/**\n * A special type of material loader for loading node materials.\n *\n * @augments MaterialLoader\n */\nclass NodeMaterialLoader extends MaterialLoader {\n\n\t/**\n\t * Constructs a new node material loader.\n\t *\n\t * @param {LoadingManager} [manager] - A reference to a loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * Represents a dictionary of node types.\n\t\t *\n\t\t * @type {Object<string,Node.constructor>}\n\t\t */\n\t\tthis.nodes = {};\n\n\t\t/**\n\t\t * Represents a dictionary of node material types.\n\t\t *\n\t\t * @type {Object<string,NodeMaterial.constructor>}\n\t\t */\n\t\tthis.nodeMaterials = {};\n\n\t}\n\n\t/**\n\t * Parses the node material from the given JSON.\n\t *\n\t * @param {Object} json - The JSON definition\n\t * @return {NodeMaterial}. The parsed material.\n\t */\n\tparse( json ) {\n\n\t\tconst material = super.parse( json );\n\n\t\tconst nodes = this.nodes;\n\t\tconst inputNodes = json.inputNodes;\n\n\t\tfor ( const property in inputNodes ) {\n\n\t\t\tconst uuid = inputNodes[ property ];\n\n\t\t\tmaterial[ property ] = nodes[ uuid ];\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\t/**\n\t * Defines the dictionary of node types.\n\t *\n\t * @param {Object<string,Node.constructor>} value - The node library defined as `<classname,class>`.\n\t * @return {NodeLoader} A reference to this loader.\n\t */\n\tsetNodes( value ) {\n\n\t\tthis.nodes = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Defines the dictionary of node material types.\n\t *\n\t * @param {Object<string,NodeMaterial.constructor>} value - The node material library defined as `<classname,class>`.\n\t * @return {NodeLoader} A reference to this loader.\n\t */\n\tsetNodeMaterials( value ) {\n\n\t\tthis.nodeMaterials = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Creates a node material from the given type.\n\t *\n\t * @param {string} type - The node material type.\n\t * @return {Node} The created node material instance.\n\t */\n\tcreateMaterialFromType( type ) {\n\n\t\tconst materialClass = this.nodeMaterials[ type ];\n\n\t\tif ( materialClass !== undefined ) {\n\n\t\t\treturn new materialClass();\n\n\t\t}\n\n\t\treturn super.createMaterialFromType( type );\n\n\t}\n\n}\n\n/**\n * A special type of object loader for loading 3D objects using\n * node materials.\n *\n * @augments ObjectLoader\n */\nclass NodeObjectLoader extends ObjectLoader {\n\n\t/**\n\t * Constructs a new node object loader.\n\t *\n\t * @param {LoadingManager} [manager] - A reference to a loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * Represents a dictionary of node types.\n\t\t *\n\t\t * @type {Object<string,Node.constructor>}\n\t\t */\n\t\tthis.nodes = {};\n\n\t\t/**\n\t\t * Represents a dictionary of node material types.\n\t\t *\n\t\t * @type {Object<string,NodeMaterial.constructor>}\n\t\t */\n\t\tthis.nodeMaterials = {};\n\n\t\t/**\n\t\t * A reference to hold the `nodes` JSON property.\n\t\t *\n\t\t * @private\n\t\t * @type {?Object[]}\n\t\t */\n\t\tthis._nodesJSON = null;\n\n\t}\n\n\t/**\n\t * Defines the dictionary of node types.\n\t *\n\t * @param {Object<string,Node.constructor>} value - The node library defined as `<classname,class>`.\n\t * @return {NodeObjectLoader} A reference to this loader.\n\t */\n\tsetNodes( value ) {\n\n\t\tthis.nodes = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Defines the dictionary of node material types.\n\t *\n\t * @param {Object<string,NodeMaterial.constructor>} value - The node material library defined as `<classname,class>`.\n\t * @return {NodeObjectLoader} A reference to this loader.\n\t */\n\tsetNodeMaterials( value ) {\n\n\t\tthis.nodeMaterials = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parses the node objects from the given JSON.\n\t *\n\t * @param {Object} json - The JSON definition\n\t * @param {Function} onLoad - The onLoad callback function.\n\t * @return {Object3D}. The parsed 3D object.\n\t */\n\tparse( json, onLoad ) {\n\n\t\tthis._nodesJSON = json.nodes;\n\n\t\tconst data = super.parse( json, onLoad );\n\n\t\tthis._nodesJSON = null; // dispose\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Async version of {@link NodeObjectLoader#parse}.\n\t *\n\t * @param {Object} json - The JSON definition\n\t * @return {Promise<Object3D>} A Promise that resolves with the parsed 3D object.\n\t */\n\tasync parseAsync( json ) {\n\n\t\tthis._nodesJSON = json.nodes;\n\n\t\tconst data = await super.parseAsync( json );\n\n\t\tthis._nodesJSON = null; // dispose\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Parses the node objects from the given JSON and textures.\n\t *\n\t * @param {Object[]} json - The JSON definition\n\t * @param {Object<string,Texture>} textures - The texture library.\n\t * @return {Object<string,Node>}. The parsed nodes.\n\t */\n\tparseNodes( json, textures ) {\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new NodeLoader();\n\t\t\tloader.setNodes( this.nodes );\n\t\t\tloader.setTextures( textures );\n\n\t\t\treturn loader.parseNodes( json );\n\n\t\t}\n\n\t\treturn {};\n\n\t}\n\n\t/**\n\t * Parses the node objects from the given JSON and textures.\n\t *\n\t * @param {Object} json - The JSON definition\n\t * @param {Object<string,Texture>} textures - The texture library.\n\t * @return {Object<string,NodeMaterial>}. The parsed materials.\n\t */\n\tparseMaterials( json, textures ) {\n\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst nodes = this.parseNodes( this._nodesJSON, textures );\n\n\t\t\tconst loader = new NodeMaterialLoader();\n\t\t\tloader.setTextures( textures );\n\t\t\tloader.setNodes( nodes );\n\t\t\tloader.setNodeMaterials( this.nodeMaterials );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tmaterials[ data.uuid ] = loader.parse( data );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n}\n\n/**\n * This version of a node library represents a basic version\n * just focusing on lights and tone mapping techniques.\n *\n * @private\n * @augments NodeLibrary\n */\nclass BasicNodeLibrary extends NodeLibrary {\n\n\t/**\n\t * Constructs a new basic node library.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.addLight( PointLightNode, PointLight );\n\t\tthis.addLight( DirectionalLightNode, DirectionalLight );\n\t\tthis.addLight( RectAreaLightNode, RectAreaLight );\n\t\tthis.addLight( SpotLightNode, SpotLight );\n\t\tthis.addLight( AmbientLightNode, AmbientLight );\n\t\tthis.addLight( HemisphereLightNode, HemisphereLight );\n\t\tthis.addLight( LightProbeNode, LightProbe );\n\t\tthis.addLight( IESSpotLightNode, IESSpotLight );\n\t\tthis.addLight( ProjectorLightNode, ProjectorLight );\n\n\t\tthis.addToneMapping( linearToneMapping, LinearToneMapping );\n\t\tthis.addToneMapping( reinhardToneMapping, ReinhardToneMapping );\n\t\tthis.addToneMapping( cineonToneMapping, CineonToneMapping );\n\t\tthis.addToneMapping( acesFilmicToneMapping, ACESFilmicToneMapping );\n\t\tthis.addToneMapping( agxToneMapping, AgXToneMapping );\n\t\tthis.addToneMapping( neutralToneMapping, NeutralToneMapping );\n\n\t}\n\n}\n\n/**\n * In earlier three.js versions, clipping was defined globally\n * on the renderer or on material level. This special version of\n * `THREE.Group` allows to encode the clipping state into the scene\n * graph. Meaning if you create an instance of this group, all\n * descendant 3D objects will be affected by the respective clipping\n * planes.\n *\n * Note: `ClippingGroup` can only be used with `WebGPURenderer`.\n *\n * @augments Group\n */\nclass ClippingGroup extends Group {\n\n\t/**\n\t * Constructs a new clipping group.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isClippingGroup = true;\n\n\t\t/**\n\t\t * An array with clipping planes.\n\t\t *\n\t\t * @type {Array<Plane>}\n\t\t */\n\t\tthis.clippingPlanes = [];\n\n\t\t/**\n\t\t * Whether clipping should be enabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enabled = true;\n\n\t\t/**\n\t\t * Whether the intersection of the clipping planes is used to clip objects, rather than their union.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clipIntersection = false;\n\n\t\t/**\n\t\t * Whether shadows should be clipped or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clipShadows = false;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AONode, AddEquation, AddOperation, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightNode, AnalyticLightNode, ArrayCamera, ArrayElementNode, ArrayNode, AssignNode, AtomicFunctionNode, AttributeNode, BackSide, BarrierNode, BasicEnvironmentNode, BasicLightMapNode, BasicNodeLibrary, BasicShadowMap, BatchNode, BitcastNode, BitcountNode, BlendMode, BoxGeometry, BufferAttribute, BufferAttributeNode, BufferGeometry, BufferNode, BuiltinNode, BumpMapNode, BundleGroup, BypassNode, ByteType, CanvasTarget, CineonToneMapping, ClampToEdgeWrapping, ClippingGroup, ClippingNode, CodeNode, Color, ColorManagement, ColorSpaceNode, Compatibility, ComputeBuiltinNode, ComputeNode, ConditionalNode, ConstNode, ContextNode, ConvertNode, CubeCamera, CubeDepthTexture, CubeMapNode, CubeReflectionMapping, CubeRefractionMapping, CubeRenderTarget, CubeTexture, CubeTextureNode, CubeUVReflectionMapping, CullFaceBack, CullFaceFront, CullFaceNone, CustomBlending, CylinderGeometry, DataArrayTexture, DataTexture, DebugNode, DecrementStencilOp, DecrementWrapStencilOp, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightNode, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicDrawUsage, EnvironmentNode, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, EventDispatcher, EventNode, ExpressionNode, FileLoader, FlipNode, Float16BufferAttribute, Float32BufferAttribute, FloatType, FramebufferTexture, FrontFacingNode, FrontSide, Frustum, FrustumArray, FunctionCallNode, FunctionNode, FunctionOverloadingNode, GLSLNodeBuilder, GLSLNodeParser, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, Group, HalfFloatType, HemisphereLight, HemisphereLightNode, IESSpotLight, IESSpotLightNode, IncrementStencilOp, IncrementWrapStencilOp, IndexNode, IndirectStorageBufferAttribute, InputNode, InspectorBase, InspectorNode, InstanceNode, InstancedBufferAttribute, InstancedInterleavedBuffer, InstancedMeshNode, IntType, InterleavedBuffer, InterleavedBufferAttribute, InvertStencilOp, IrradianceNode, IsolateNode, JoinNode, KeepStencilOp, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, LightProbe, LightProbeNode, Lighting, LightingContextNode, LightingModel, LightingNode, LightsNode, Line2NodeMaterial, LineBasicMaterial, LineBasicNodeMaterial, LineDashedMaterial, LineDashedNodeMaterial, LinearFilter, LinearMipMapLinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoopNode, MRTNode, Material, MaterialBlending, MaterialLoader, MaterialNode, MaterialReferenceNode, MathNode, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, MaxMipLevelNode, MemberNode, Mesh, MeshBasicMaterial, MeshBasicNodeMaterial, MeshLambertMaterial, MeshLambertNodeMaterial, MeshMatcapMaterial, MeshMatcapNodeMaterial, MeshNormalMaterial, MeshNormalNodeMaterial, MeshPhongMaterial, MeshPhongNodeMaterial, MeshPhysicalMaterial, MeshPhysicalNodeMaterial, MeshSSSNodeMaterial, MeshStandardMaterial, MeshStandardNodeMaterial, MeshToonMaterial, MeshToonNodeMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, ModelNode, MorphNode, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, Node, NodeAccess, NodeAttribute, NodeBuilder, NodeCache, NodeCode, NodeError, NodeFrame, NodeFunctionInput, NodeLoader, NodeMaterial, NodeMaterialLoader, NodeMaterialObserver, NodeObjectLoader, NodeShaderStage, NodeType, NodeUniform, NodeUpdateType, NodeUtils, NodeVar, NodeVarying, NormalBlending, NormalGAPacking, NormalMapNode, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, Object3D, Object3DNode, ObjectLoader, ObjectSpaceNormalMap, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OperatorNode, OrthographicCamera, OutputStructNode, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, PMREMNode, PackFloatNode, ParameterNode, PassNode, PerspectiveCamera, PhongLightingModel, PhysicalLightingModel, Plane, PlaneGeometry, PointLight, PointLightNode, PointShadowNode, PointUVNode, PointsMaterial, PointsNodeMaterial, PostProcessing, ProjectorLight, ProjectorLightNode, PropertyNode, QuadMesh, Quaternion, R11_EAC_Format, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBFormat, RGBIntegerFormat, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RTTNode, RangeNode, ReadbackBuffer, RectAreaLight, RectAreaLightNode, RedFormat, RedIntegerFormat, ReferenceBaseNode, ReferenceNode, ReflectorNode, ReinhardToneMapping, RenderOutputNode, RenderPipeline, RenderTarget, RendererReferenceNode, RendererUtils, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RotateNode, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, SampleNode, Scene, ScreenNode, SetNode, ShadowBaseNode, ShadowMaterial, ShadowNode, ShadowNodeMaterial, ShortType, SkinningNode, Sphere, SphereGeometry, SplitNode, SpotLight, SpotLightNode, SpriteMaterial, SpriteNodeMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StackNode, StackTrace, StaticDrawUsage, Storage3DTexture, StorageArrayElementNode, StorageArrayTexture, StorageBufferAttribute, StorageBufferNode, StorageInstancedBufferAttribute, StorageTexture, StorageTextureNode, StructNode, StructTypeNode, SubBuildNode, SubgroupFunctionNode, SubtractEquation, SubtractiveBlending, TSL, TangentSpaceNormalMap, TempNode, Texture, Texture3DNode, TextureNode, TextureSizeNode, TimestampQuery, ToneMappingNode, ToonOutlinePassNode, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, UniformArrayNode, UniformGroupNode, UniformNode, UnpackFloatNode, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, UserDataNode, VSMShadowMap, VarNode, VaryingNode, Vector2, Vector3, Vector4, VelocityNode, VertexColorNode, ViewportDepthNode, ViewportDepthTextureNode, ViewportSharedTextureNode, ViewportTextureNode, VolumeNodeMaterial, WebGLBackend, WebGLCapabilities, WebGLCoordinateSystem, WebGPUBackend, WebGPUCoordinateSystem, WebGPURenderer, WebXRController, WorkgroupInfoNode, ZeroFactor, ZeroStencilOp, createCanvasElement, defaultBuildStages, defaultShaderStages, error, log$1 as log, shaderStages, vectorComponents, warn, warnOnce };\n","/**\n * @license\n * Copyright 2010-2026 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nimport { TSL } from 'three/webgpu';\n\nconst BRDF_GGX = TSL.BRDF_GGX;\nconst BRDF_Lambert = TSL.BRDF_Lambert;\nconst BasicPointShadowFilter = TSL.BasicPointShadowFilter;\nconst BasicShadowFilter = TSL.BasicShadowFilter;\nconst Break = TSL.Break;\nconst Const = TSL.Const;\nconst Continue = TSL.Continue;\nconst DFGLUT = TSL.DFGLUT;\nconst D_GGX = TSL.D_GGX;\nconst Discard = TSL.Discard;\nconst EPSILON = TSL.EPSILON;\nconst F_Schlick = TSL.F_Schlick;\nconst Fn = TSL.Fn;\nconst INFINITY = TSL.INFINITY;\nconst If = TSL.If;\nconst Loop = TSL.Loop;\nconst NodeAccess = TSL.NodeAccess;\nconst NodeShaderStage = TSL.NodeShaderStage;\nconst NodeType = TSL.NodeType;\nconst NodeUpdateType = TSL.NodeUpdateType;\nconst PCFShadowFilter = TSL.PCFShadowFilter;\nconst PCFSoftShadowFilter = TSL.PCFSoftShadowFilter;\nconst PI = TSL.PI;\nconst PI2 = TSL.PI2;\nconst TWO_PI = TSL.TWO_PI;\nconst HALF_PI = TSL.HALF_PI;\nconst PointShadowFilter = TSL.PointShadowFilter;\nconst Return = TSL.Return;\nconst Schlick_to_F0 = TSL.Schlick_to_F0;\nconst ShaderNode = TSL.ShaderNode;\nconst Stack = TSL.Stack;\nconst Switch = TSL.Switch;\nconst TBNViewMatrix = TSL.TBNViewMatrix;\nconst VSMShadowFilter = TSL.VSMShadowFilter;\nconst V_GGX_SmithCorrelated = TSL.V_GGX_SmithCorrelated;\nconst Var = TSL.Var;\nconst VarIntent = TSL.VarIntent;\nconst abs = TSL.abs;\nconst acesFilmicToneMapping = TSL.acesFilmicToneMapping;\nconst acos = TSL.acos;\nconst acosh = TSL.acosh;\nconst add = TSL.add;\nconst addMethodChaining = TSL.addMethodChaining;\nconst addNodeElement = TSL.addNodeElement;\nconst agxToneMapping = TSL.agxToneMapping;\nconst all = TSL.all;\nconst alphaT = TSL.alphaT;\nconst and = TSL.and;\nconst anisotropy = TSL.anisotropy;\nconst anisotropyB = TSL.anisotropyB;\nconst anisotropyT = TSL.anisotropyT;\nconst any = TSL.any;\nconst append = TSL.append;\nconst array = TSL.array;\nconst arrayBuffer = TSL.arrayBuffer;\nconst asin = TSL.asin;\nconst asinh = TSL.asinh;\nconst assign = TSL.assign;\nconst atan = TSL.atan;\nconst atanh = TSL.atanh;\nconst atomicAdd = TSL.atomicAdd;\nconst atomicAnd = TSL.atomicAnd;\nconst atomicFunc = TSL.atomicFunc;\nconst atomicLoad = TSL.atomicLoad;\nconst atomicMax = TSL.atomicMax;\nconst atomicMin = TSL.atomicMin;\nconst atomicOr = TSL.atomicOr;\nconst atomicStore = TSL.atomicStore;\nconst atomicSub = TSL.atomicSub;\nconst atomicXor = TSL.atomicXor;\nconst attenuationColor = TSL.attenuationColor;\nconst attenuationDistance = TSL.attenuationDistance;\nconst attribute = TSL.attribute;\nconst attributeArray = TSL.attributeArray;\nconst backgroundBlurriness = TSL.backgroundBlurriness;\nconst backgroundIntensity = TSL.backgroundIntensity;\nconst backgroundRotation = TSL.backgroundRotation;\nconst batch = TSL.batch;\nconst bentNormalView = TSL.bentNormalView;\nconst billboarding = TSL.billboarding;\nconst bitAnd = TSL.bitAnd;\nconst bitNot = TSL.bitNot;\nconst bitOr = TSL.bitOr;\nconst bitXor = TSL.bitXor;\nconst bitangentGeometry = TSL.bitangentGeometry;\nconst bitangentLocal = TSL.bitangentLocal;\nconst bitangentView = TSL.bitangentView;\nconst bitangentWorld = TSL.bitangentWorld;\nconst bitcast = TSL.bitcast;\nconst blendBurn = TSL.blendBurn;\nconst blendColor = TSL.blendColor;\nconst blendDodge = TSL.blendDodge;\nconst blendOverlay = TSL.blendOverlay;\nconst blendScreen = TSL.blendScreen;\nconst blur = TSL.blur;\nconst bool = TSL.bool;\nconst buffer = TSL.buffer;\nconst bufferAttribute = TSL.bufferAttribute;\nconst bumpMap = TSL.bumpMap;\nconst builtin = TSL.builtin;\nconst builtinAOContext = TSL.builtinAOContext;\nconst builtinShadowContext = TSL.builtinShadowContext;\nconst bvec2 = TSL.bvec2;\nconst bvec3 = TSL.bvec3;\nconst bvec4 = TSL.bvec4;\nconst bypass = TSL.bypass;\nconst cache = TSL.cache;\nconst call = TSL.call;\nconst cameraFar = TSL.cameraFar;\nconst cameraIndex = TSL.cameraIndex;\nconst cameraNear = TSL.cameraNear;\nconst cameraNormalMatrix = TSL.cameraNormalMatrix;\nconst cameraPosition = TSL.cameraPosition;\nconst cameraProjectionMatrix = TSL.cameraProjectionMatrix;\nconst cameraProjectionMatrixInverse = TSL.cameraProjectionMatrixInverse;\nconst cameraViewMatrix = TSL.cameraViewMatrix;\nconst cameraViewport = TSL.cameraViewport;\nconst cameraWorldMatrix = TSL.cameraWorldMatrix;\nconst cbrt = TSL.cbrt;\nconst cdl = TSL.cdl;\nconst ceil = TSL.ceil;\nconst checker = TSL.checker;\nconst cineonToneMapping = TSL.cineonToneMapping;\nconst clamp = TSL.clamp;\nconst clearcoat = TSL.clearcoat;\nconst clearcoatNormalView = TSL.clearcoatNormalView;\nconst clearcoatRoughness = TSL.clearcoatRoughness;\nconst clipSpace = TSL.clipSpace;\nconst code = TSL.code;\nconst color = TSL.color;\nconst colorSpaceToWorking = TSL.colorSpaceToWorking;\nconst colorToDirection = TSL.colorToDirection;\nconst compute = TSL.compute;\nconst computeKernel = TSL.computeKernel;\nconst computeSkinning = TSL.computeSkinning;\nconst context = TSL.context;\nconst convert = TSL.convert;\nconst convertColorSpace = TSL.convertColorSpace;\nconst convertToTexture = TSL.convertToTexture;\nconst countLeadingZeros = TSL.countLeadingZeros;\nconst countOneBits = TSL.countOneBits;\nconst countTrailingZeros = TSL.countTrailingZeros;\nconst cos = TSL.cos;\nconst cosh = TSL.cosh;\nconst cross = TSL.cross;\nconst cubeTexture = TSL.cubeTexture;\nconst cubeTextureBase = TSL.cubeTextureBase;\nconst dFdx = TSL.dFdx;\nconst dFdy = TSL.dFdy;\nconst dashSize = TSL.dashSize;\nconst debug = TSL.debug;\nconst decrement = TSL.decrement;\nconst decrementBefore = TSL.decrementBefore;\nconst defaultBuildStages = TSL.defaultBuildStages;\nconst defaultShaderStages = TSL.defaultShaderStages;\nconst defined = TSL.defined;\nconst degrees = TSL.degrees;\nconst deltaTime = TSL.deltaTime;\nconst densityFog = TSL.densityFog;\nconst densityFogFactor = TSL.densityFogFactor;\nconst depth = TSL.depth;\nconst depthPass = TSL.depthPass;\nconst determinant = TSL.determinant;\nconst difference = TSL.difference;\nconst diffuseColor = TSL.diffuseColor;\nconst directPointLight = TSL.directPointLight;\nconst directionToColor = TSL.directionToColor;\nconst directionToFaceDirection = TSL.directionToFaceDirection;\nconst dispersion = TSL.dispersion;\nconst distance = TSL.distance;\nconst div = TSL.div;\nconst dot = TSL.dot;\nconst drawIndex = TSL.drawIndex;\nconst dynamicBufferAttribute = TSL.dynamicBufferAttribute;\nconst element = TSL.element;\nconst emissive = TSL.emissive;\nconst equal = TSL.equal;\nconst equirectUV = TSL.equirectUV;\nconst exp = TSL.exp;\nconst exp2 = TSL.exp2;\nconst exponentialHeightFogFactor = TSL.exponentialHeightFogFactor;\nconst expression = TSL.expression;\nconst faceDirection = TSL.faceDirection;\nconst faceForward = TSL.faceForward;\nconst faceforward = TSL.faceforward;\nconst float = TSL.float;\nconst floatBitsToInt = TSL.floatBitsToInt;\nconst floatBitsToUint = TSL.floatBitsToUint;\nconst floor = TSL.floor;\nconst fog = TSL.fog;\nconst fract = TSL.fract;\nconst frameGroup = TSL.frameGroup;\nconst frameId = TSL.frameId;\nconst frontFacing = TSL.frontFacing;\nconst fwidth = TSL.fwidth;\nconst gain = TSL.gain;\nconst gapSize = TSL.gapSize;\nconst getConstNodeType = TSL.getConstNodeType;\nconst getCurrentStack = TSL.getCurrentStack;\nconst getDirection = TSL.getDirection;\nconst getDistanceAttenuation = TSL.getDistanceAttenuation;\nconst getGeometryRoughness = TSL.getGeometryRoughness;\nconst getNormalFromDepth = TSL.getNormalFromDepth;\nconst interleavedGradientNoise = TSL.interleavedGradientNoise;\nconst vogelDiskSample = TSL.vogelDiskSample;\nconst getParallaxCorrectNormal = TSL.getParallaxCorrectNormal;\nconst getRoughness = TSL.getRoughness;\nconst getScreenPosition = TSL.getScreenPosition;\nconst getShIrradianceAt = TSL.getShIrradianceAt;\nconst getShadowMaterial = TSL.getShadowMaterial;\nconst getShadowRenderObjectFunction = TSL.getShadowRenderObjectFunction;\nconst getTextureIndex = TSL.getTextureIndex;\nconst getViewPosition = TSL.getViewPosition;\nconst globalId = TSL.globalId;\nconst glsl = TSL.glsl;\nconst glslFn = TSL.glslFn;\nconst grayscale = TSL.grayscale;\nconst greaterThan = TSL.greaterThan;\nconst greaterThanEqual = TSL.greaterThanEqual;\nconst hash = TSL.hash;\nconst highpModelNormalViewMatrix = TSL.highpModelNormalViewMatrix;\nconst highpModelViewMatrix = TSL.highpModelViewMatrix;\nconst hue = TSL.hue;\nconst increment = TSL.increment;\nconst incrementBefore = TSL.incrementBefore;\nconst instance = TSL.instance;\nconst instanceIndex = TSL.instanceIndex;\nconst instancedArray = TSL.instancedArray;\nconst instancedBufferAttribute = TSL.instancedBufferAttribute;\nconst instancedDynamicBufferAttribute = TSL.instancedDynamicBufferAttribute;\nconst instancedMesh = TSL.instancedMesh;\nconst int = TSL.int;\nconst intBitsToFloat = TSL.intBitsToFloat;\nconst inverse = TSL.inverse;\nconst inverseSqrt = TSL.inverseSqrt;\nconst inversesqrt = TSL.inversesqrt;\nconst invocationLocalIndex = TSL.invocationLocalIndex;\nconst invocationSubgroupIndex = TSL.invocationSubgroupIndex;\nconst ior = TSL.ior;\nconst iridescence = TSL.iridescence;\nconst iridescenceIOR = TSL.iridescenceIOR;\nconst iridescenceThickness = TSL.iridescenceThickness;\nconst ivec2 = TSL.ivec2;\nconst ivec3 = TSL.ivec3;\nconst ivec4 = TSL.ivec4;\nconst js = TSL.js;\nconst label = TSL.label;\nconst length = TSL.length;\nconst lengthSq = TSL.lengthSq;\nconst lessThan = TSL.lessThan;\nconst lessThanEqual = TSL.lessThanEqual;\nconst lightPosition = TSL.lightPosition;\nconst lightProjectionUV = TSL.lightProjectionUV;\nconst lightShadowMatrix = TSL.lightShadowMatrix;\nconst lightTargetDirection = TSL.lightTargetDirection;\nconst lightTargetPosition = TSL.lightTargetPosition;\nconst lightViewPosition = TSL.lightViewPosition;\nconst lightingContext = TSL.lightingContext;\nconst lights = TSL.lights;\nconst linearDepth = TSL.linearDepth;\nconst linearToneMapping = TSL.linearToneMapping;\nconst localId = TSL.localId;\nconst log = TSL.log;\nconst log2 = TSL.log2;\nconst logarithmicDepthToViewZ = TSL.logarithmicDepthToViewZ;\nconst luminance = TSL.luminance;\nconst mat2 = TSL.mat2;\nconst mat3 = TSL.mat3;\nconst mat4 = TSL.mat4;\nconst matcapUV = TSL.matcapUV;\nconst materialAO = TSL.materialAO;\nconst materialAlphaTest = TSL.materialAlphaTest;\nconst materialAnisotropy = TSL.materialAnisotropy;\nconst materialAnisotropyVector = TSL.materialAnisotropyVector;\nconst materialAttenuationColor = TSL.materialAttenuationColor;\nconst materialAttenuationDistance = TSL.materialAttenuationDistance;\nconst materialClearcoat = TSL.materialClearcoat;\nconst materialClearcoatNormal = TSL.materialClearcoatNormal;\nconst materialClearcoatRoughness = TSL.materialClearcoatRoughness;\nconst materialColor = TSL.materialColor;\nconst materialDispersion = TSL.materialDispersion;\nconst materialEmissive = TSL.materialEmissive;\nconst materialEnvIntensity = TSL.materialEnvIntensity;\nconst materialEnvRotation = TSL.materialEnvRotation;\nconst materialIOR = TSL.materialIOR;\nconst materialIridescence = TSL.materialIridescence;\nconst materialIridescenceIOR = TSL.materialIridescenceIOR;\nconst materialIridescenceThickness = TSL.materialIridescenceThickness;\nconst materialLightMap = TSL.materialLightMap;\nconst materialLineDashOffset = TSL.materialLineDashOffset;\nconst materialLineDashSize = TSL.materialLineDashSize;\nconst materialLineGapSize = TSL.materialLineGapSize;\nconst materialLineScale = TSL.materialLineScale;\nconst materialLineWidth = TSL.materialLineWidth;\nconst materialMetalness = TSL.materialMetalness;\nconst materialNormal = TSL.materialNormal;\nconst materialOpacity = TSL.materialOpacity;\nconst materialPointSize = TSL.materialPointSize;\nconst materialReference = TSL.materialReference;\nconst materialReflectivity = TSL.materialReflectivity;\nconst materialRefractionRatio = TSL.materialRefractionRatio;\nconst materialRotation = TSL.materialRotation;\nconst materialRoughness = TSL.materialRoughness;\nconst materialSheen = TSL.materialSheen;\nconst materialSheenRoughness = TSL.materialSheenRoughness;\nconst materialShininess = TSL.materialShininess;\nconst materialSpecular = TSL.materialSpecular;\nconst materialSpecularColor = TSL.materialSpecularColor;\nconst materialSpecularIntensity = TSL.materialSpecularIntensity;\nconst materialSpecularStrength = TSL.materialSpecularStrength;\nconst materialThickness = TSL.materialThickness;\nconst materialTransmission = TSL.materialTransmission;\nconst max = TSL.max;\nconst maxMipLevel = TSL.maxMipLevel;\nconst mediumpModelViewMatrix = TSL.mediumpModelViewMatrix;\nconst metalness = TSL.metalness;\nconst min = TSL.min;\nconst mix = TSL.mix;\nconst mixElement = TSL.mixElement;\nconst mod = TSL.mod;\nconst modInt = TSL.modInt;\nconst modelDirection = TSL.modelDirection;\nconst modelNormalMatrix = TSL.modelNormalMatrix;\nconst modelPosition = TSL.modelPosition;\nconst modelRadius = TSL.modelRadius;\nconst modelScale = TSL.modelScale;\nconst modelViewMatrix = TSL.modelViewMatrix;\nconst modelViewPosition = TSL.modelViewPosition;\nconst modelViewProjection = TSL.modelViewProjection;\nconst modelWorldMatrix = TSL.modelWorldMatrix;\nconst modelWorldMatrixInverse = TSL.modelWorldMatrixInverse;\nconst morphReference = TSL.morphReference;\nconst mrt = TSL.mrt;\nconst mul = TSL.mul;\nconst mx_aastep = TSL.mx_aastep;\nconst mx_add = TSL.mx_add;\nconst mx_atan2 = TSL.mx_atan2;\nconst mx_cell_noise_float = TSL.mx_cell_noise_float;\nconst mx_contrast = TSL.mx_contrast;\nconst mx_divide = TSL.mx_divide;\nconst mx_fractal_noise_float = TSL.mx_fractal_noise_float;\nconst mx_fractal_noise_vec2 = TSL.mx_fractal_noise_vec2;\nconst mx_fractal_noise_vec3 = TSL.mx_fractal_noise_vec3;\nconst mx_fractal_noise_vec4 = TSL.mx_fractal_noise_vec4;\nconst mx_frame = TSL.mx_frame;\nconst mx_heighttonormal = TSL.mx_heighttonormal;\nconst mx_hsvtorgb = TSL.mx_hsvtorgb;\nconst mx_ifequal = TSL.mx_ifequal;\nconst mx_ifgreater = TSL.mx_ifgreater;\nconst mx_ifgreatereq = TSL.mx_ifgreatereq;\nconst mx_invert = TSL.mx_invert;\nconst mx_modulo = TSL.mx_modulo;\nconst mx_multiply = TSL.mx_multiply;\nconst mx_noise_float = TSL.mx_noise_float;\nconst mx_noise_vec3 = TSL.mx_noise_vec3;\nconst mx_noise_vec4 = TSL.mx_noise_vec4;\nconst mx_place2d = TSL.mx_place2d;\nconst mx_power = TSL.mx_power;\nconst mx_ramp4 = TSL.mx_ramp4;\nconst mx_ramplr = TSL.mx_ramplr;\nconst mx_ramptb = TSL.mx_ramptb;\nconst mx_rgbtohsv = TSL.mx_rgbtohsv;\nconst mx_rotate2d = TSL.mx_rotate2d;\nconst mx_rotate3d = TSL.mx_rotate3d;\nconst mx_safepower = TSL.mx_safepower;\nconst mx_separate = TSL.mx_separate;\nconst mx_splitlr = TSL.mx_splitlr;\nconst mx_splittb = TSL.mx_splittb;\nconst mx_srgb_texture_to_lin_rec709 = TSL.mx_srgb_texture_to_lin_rec709;\nconst mx_subtract = TSL.mx_subtract;\nconst mx_timer = TSL.mx_timer;\nconst mx_transform_uv = TSL.mx_transform_uv;\nconst mx_unifiednoise2d = TSL.mx_unifiednoise2d;\nconst mx_unifiednoise3d = TSL.mx_unifiednoise3d;\nconst mx_worley_noise_float = TSL.mx_worley_noise_float;\nconst mx_worley_noise_vec2 = TSL.mx_worley_noise_vec2;\nconst mx_worley_noise_vec3 = TSL.mx_worley_noise_vec3;\nconst negate = TSL.negate;\nconst neutralToneMapping = TSL.neutralToneMapping;\nconst nodeArray = TSL.nodeArray;\nconst nodeImmutable = TSL.nodeImmutable;\nconst nodeObject = TSL.nodeObject;\nconst nodeObjectIntent = TSL.nodeObjectIntent;\nconst nodeObjects = TSL.nodeObjects;\nconst nodeProxy = TSL.nodeProxy;\nconst nodeProxyIntent = TSL.nodeProxyIntent;\nconst normalFlat = TSL.normalFlat;\nconst normalGeometry = TSL.normalGeometry;\nconst normalLocal = TSL.normalLocal;\nconst normalMap = TSL.normalMap;\nconst normalView = TSL.normalView;\nconst normalViewGeometry = TSL.normalViewGeometry;\nconst normalWorld = TSL.normalWorld;\nconst normalWorldGeometry = TSL.normalWorldGeometry;\nconst normalize = TSL.normalize;\nconst not = TSL.not;\nconst notEqual = TSL.notEqual;\nconst numWorkgroups = TSL.numWorkgroups;\nconst objectDirection = TSL.objectDirection;\nconst objectGroup = TSL.objectGroup;\nconst objectPosition = TSL.objectPosition;\nconst objectRadius = TSL.objectRadius;\nconst objectScale = TSL.objectScale;\nconst objectViewPosition = TSL.objectViewPosition;\nconst objectWorldMatrix = TSL.objectWorldMatrix;\nconst OnBeforeObjectUpdate = TSL.OnBeforeObjectUpdate;\nconst OnBeforeMaterialUpdate = TSL.OnBeforeMaterialUpdate;\nconst OnObjectUpdate = TSL.OnObjectUpdate;\nconst OnMaterialUpdate = TSL.OnMaterialUpdate;\nconst oneMinus = TSL.oneMinus;\nconst or = TSL.or;\nconst orthographicDepthToViewZ = TSL.orthographicDepthToViewZ;\nconst oscSawtooth = TSL.oscSawtooth;\nconst oscSine = TSL.oscSine;\nconst oscSquare = TSL.oscSquare;\nconst oscTriangle = TSL.oscTriangle;\nconst output = TSL.output;\nconst outputStruct = TSL.outputStruct;\nconst overloadingFn = TSL.overloadingFn;\nconst packHalf2x16 = TSL.packHalf2x16;\nconst packSnorm2x16 = TSL.packSnorm2x16;\nconst packUnorm2x16 = TSL.packUnorm2x16;\nconst parabola = TSL.parabola;\nconst parallaxDirection = TSL.parallaxDirection;\nconst parallaxUV = TSL.parallaxUV;\nconst parameter = TSL.parameter;\nconst pass = TSL.pass;\nconst passTexture = TSL.passTexture;\nconst pcurve = TSL.pcurve;\nconst perspectiveDepthToViewZ = TSL.perspectiveDepthToViewZ;\nconst pmremTexture = TSL.pmremTexture;\nconst pointShadow = TSL.pointShadow;\nconst pointUV = TSL.pointUV;\nconst pointWidth = TSL.pointWidth;\nconst positionGeometry = TSL.positionGeometry;\nconst positionLocal = TSL.positionLocal;\nconst positionPrevious = TSL.positionPrevious;\nconst positionView = TSL.positionView;\nconst positionViewDirection = TSL.positionViewDirection;\nconst positionWorld = TSL.positionWorld;\nconst positionWorldDirection = TSL.positionWorldDirection;\nconst posterize = TSL.posterize;\nconst pow = TSL.pow;\nconst pow2 = TSL.pow2;\nconst pow3 = TSL.pow3;\nconst pow4 = TSL.pow4;\nconst premultiplyAlpha = TSL.premultiplyAlpha;\nconst property = TSL.property;\nconst radians = TSL.radians;\nconst rand = TSL.rand;\nconst range = TSL.range;\nconst rangeFog = TSL.rangeFog;\nconst rangeFogFactor = TSL.rangeFogFactor;\nconst reciprocal = TSL.reciprocal;\nconst reference = TSL.reference;\nconst referenceBuffer = TSL.referenceBuffer;\nconst reflect = TSL.reflect;\nconst reflectVector = TSL.reflectVector;\nconst reflectView = TSL.reflectView;\nconst reflector = TSL.reflector;\nconst refract = TSL.refract;\nconst refractVector = TSL.refractVector;\nconst refractView = TSL.refractView;\nconst reinhardToneMapping = TSL.reinhardToneMapping;\nconst remap = TSL.remap;\nconst remapClamp = TSL.remapClamp;\nconst renderGroup = TSL.renderGroup;\nconst renderOutput = TSL.renderOutput;\nconst rendererReference = TSL.rendererReference;\nconst replaceDefaultUV = TSL.replaceDefaultUV;\nconst rotate = TSL.rotate;\nconst rotateUV = TSL.rotateUV;\nconst roughness = TSL.roughness;\nconst round = TSL.round;\nconst rtt = TSL.rtt;\nconst sRGBTransferEOTF = TSL.sRGBTransferEOTF;\nconst sRGBTransferOETF = TSL.sRGBTransferOETF;\nconst sample = TSL.sample;\nconst sampler = TSL.sampler;\nconst samplerComparison = TSL.samplerComparison;\nconst saturate = TSL.saturate;\nconst saturation = TSL.saturation;\nconst screen = TSL.screen;\nconst screenCoordinate = TSL.screenCoordinate;\nconst screenDPR = TSL.screenDPR;\nconst screenSize = TSL.screenSize;\nconst screenUV = TSL.screenUV;\nconst select = TSL.select;\nconst setCurrentStack = TSL.setCurrentStack;\nconst setName = TSL.setName;\nconst shaderStages = TSL.shaderStages;\nconst shadow = TSL.shadow;\nconst shadowPositionWorld = TSL.shadowPositionWorld;\nconst shapeCircle = TSL.shapeCircle;\nconst sharedUniformGroup = TSL.sharedUniformGroup;\nconst sheen = TSL.sheen;\nconst sheenRoughness = TSL.sheenRoughness;\nconst shiftLeft = TSL.shiftLeft;\nconst shiftRight = TSL.shiftRight;\nconst shininess = TSL.shininess;\nconst sign = TSL.sign;\nconst sin = TSL.sin;\nconst sinh = TSL.sinh;\nconst sinc = TSL.sinc;\nconst skinning = TSL.skinning;\nconst smoothstep = TSL.smoothstep;\nconst smoothstepElement = TSL.smoothstepElement;\nconst specularColor = TSL.specularColor;\nconst specularF90 = TSL.specularF90;\nconst spherizeUV = TSL.spherizeUV;\nconst split = TSL.split;\nconst spritesheetUV = TSL.spritesheetUV;\nconst sqrt = TSL.sqrt;\nconst stack = TSL.stack;\nconst step = TSL.step;\nconst stepElement = TSL.stepElement;\nconst storage = TSL.storage;\nconst storageBarrier = TSL.storageBarrier;\nconst storageTexture = TSL.storageTexture;\nconst string = TSL.string;\nconst struct = TSL.struct;\nconst sub = TSL.sub;\nconst subgroupAdd = TSL.subgroupAdd;\nconst subgroupAll = TSL.subgroupAll;\nconst subgroupAnd = TSL.subgroupAnd;\nconst subgroupAny = TSL.subgroupAny;\nconst subgroupBallot = TSL.subgroupBallot;\nconst subgroupBroadcast = TSL.subgroupBroadcast;\nconst subgroupBroadcastFirst = TSL.subgroupBroadcastFirst;\nconst subBuild = TSL.subBuild;\nconst subgroupElect = TSL.subgroupElect;\nconst subgroupExclusiveAdd = TSL.subgroupExclusiveAdd;\nconst subgroupExclusiveMul = TSL.subgroupExclusiveMul;\nconst subgroupInclusiveAdd = TSL.subgroupInclusiveAdd;\nconst subgroupInclusiveMul = TSL.subgroupInclusiveMul;\nconst subgroupIndex = TSL.subgroupIndex;\nconst subgroupMax = TSL.subgroupMax;\nconst subgroupMin = TSL.subgroupMin;\nconst subgroupMul = TSL.subgroupMul;\nconst subgroupOr = TSL.subgroupOr;\nconst subgroupShuffle = TSL.subgroupShuffle;\nconst subgroupShuffleDown = TSL.subgroupShuffleDown;\nconst subgroupShuffleUp = TSL.subgroupShuffleUp;\nconst subgroupShuffleXor = TSL.subgroupShuffleXor;\nconst subgroupSize = TSL.subgroupSize;\nconst subgroupXor = TSL.subgroupXor;\nconst tan = TSL.tan;\nconst tanh = TSL.tanh;\nconst tangentGeometry = TSL.tangentGeometry;\nconst tangentLocal = TSL.tangentLocal;\nconst tangentView = TSL.tangentView;\nconst tangentWorld = TSL.tangentWorld;\nconst texture = TSL.texture;\nconst texture3D = TSL.texture3D;\nconst textureBarrier = TSL.textureBarrier;\nconst textureBicubic = TSL.textureBicubic;\nconst textureBicubicLevel = TSL.textureBicubicLevel;\nconst textureCubeUV = TSL.textureCubeUV;\nconst textureLoad = TSL.textureLoad;\nconst textureSize = TSL.textureSize;\nconst textureLevel = TSL.textureLevel;\nconst textureStore = TSL.textureStore;\nconst thickness = TSL.thickness;\nconst time = TSL.time;\nconst toneMapping = TSL.toneMapping;\nconst toneMappingExposure = TSL.toneMappingExposure;\nconst toonOutlinePass = TSL.toonOutlinePass;\nconst transformDirection = TSL.transformDirection;\nconst transformNormal = TSL.transformNormal;\nconst transformNormalToView = TSL.transformNormalToView;\nconst transformedClearcoatNormalView = TSL.transformedClearcoatNormalView;\nconst transformedNormalView = TSL.transformedNormalView;\nconst transformedNormalWorld = TSL.transformedNormalWorld;\nconst transmission = TSL.transmission;\nconst transpose = TSL.transpose;\nconst triNoise3D = TSL.triNoise3D;\nconst triplanarTexture = TSL.triplanarTexture;\nconst triplanarTextures = TSL.triplanarTextures;\nconst trunc = TSL.trunc;\nconst uint = TSL.uint;\nconst uintBitsToFloat = TSL.uintBitsToFloat;\nconst uniform = TSL.uniform;\nconst uniformArray = TSL.uniformArray;\nconst uniformCubeTexture = TSL.uniformCubeTexture;\nconst uniformGroup = TSL.uniformGroup;\nconst uniformFlow = TSL.uniformFlow;\nconst uniformTexture = TSL.uniformTexture;\nconst unpackHalf2x16 = TSL.unpackHalf2x16;\nconst unpackSnorm2x16 = TSL.unpackSnorm2x16;\nconst unpackUnorm2x16 = TSL.unpackUnorm2x16;\nconst unpremultiplyAlpha = TSL.unpremultiplyAlpha;\nconst userData = TSL.userData;\nconst uv = TSL.uv;\nconst uvec2 = TSL.uvec2;\nconst uvec3 = TSL.uvec3;\nconst uvec4 = TSL.uvec4;\nconst varying = TSL.varying;\nconst varyingProperty = TSL.varyingProperty;\nconst vec2 = TSL.vec2;\nconst vec3 = TSL.vec3;\nconst vec4 = TSL.vec4;\nconst vectorComponents = TSL.vectorComponents;\nconst velocity = TSL.velocity;\nconst vertexColor = TSL.vertexColor;\nconst vertexIndex = TSL.vertexIndex;\nconst vertexStage = TSL.vertexStage;\nconst vibrance = TSL.vibrance;\nconst viewZToLogarithmicDepth = TSL.viewZToLogarithmicDepth;\nconst viewZToOrthographicDepth = TSL.viewZToOrthographicDepth;\nconst viewZToPerspectiveDepth = TSL.viewZToPerspectiveDepth;\nconst viewZToReversedOrthographicDepth = TSL.viewZToReversedOrthographicDepth;\nconst viewZToReversedPerspectiveDepth = TSL.viewZToReversedPerspectiveDepth;\nconst viewport = TSL.viewport;\nconst viewportCoordinate = TSL.viewportCoordinate;\nconst viewportDepthTexture = TSL.viewportDepthTexture;\nconst viewportLinearDepth = TSL.viewportLinearDepth;\nconst viewportMipTexture = TSL.viewportMipTexture;\nconst viewportOpaqueMipTexture = TSL.viewportOpaqueMipTexture;\nconst viewportResolution = TSL.viewportResolution;\nconst viewportSafeUV = TSL.viewportSafeUV;\nconst viewportSharedTexture = TSL.viewportSharedTexture;\nconst viewportSize = TSL.viewportSize;\nconst viewportTexture = TSL.viewportTexture;\nconst viewportUV = TSL.viewportUV;\nconst wgsl = TSL.wgsl;\nconst wgslFn = TSL.wgslFn;\nconst workgroupArray = TSL.workgroupArray;\nconst workgroupBarrier = TSL.workgroupBarrier;\nconst workgroupId = TSL.workgroupId;\nconst workingToColorSpace = TSL.workingToColorSpace;\nconst xor = TSL.xor;\n\n/*\n// Use this code to generate the export statements dynamically\n\nlet code = '';\n\nfor ( const key of Object.keys( THREE.TSL ) ) {\n\n\tcode += `export const ${ key } = TSL.${ key };\\n`;\n\n}\n\nlog( code );\n//*/\n\nexport { BRDF_GGX, BRDF_Lambert, BasicPointShadowFilter, BasicShadowFilter, Break, Const, Continue, DFGLUT, D_GGX, Discard, EPSILON, F_Schlick, Fn, HALF_PI, INFINITY, If, Loop, NodeAccess, NodeShaderStage, NodeType, NodeUpdateType, OnBeforeMaterialUpdate, OnBeforeObjectUpdate, OnMaterialUpdate, OnObjectUpdate, PCFShadowFilter, PCFSoftShadowFilter, PI, PI2, PointShadowFilter, Return, Schlick_to_F0, ShaderNode, Stack, Switch, TBNViewMatrix, TWO_PI, VSMShadowFilter, V_GGX_SmithCorrelated, Var, VarIntent, abs, acesFilmicToneMapping, acos, acosh, add, addMethodChaining, addNodeElement, agxToneMapping, all, alphaT, and, anisotropy, anisotropyB, anisotropyT, any, append, array, arrayBuffer, asin, asinh, assign, atan, atanh, atomicAdd, atomicAnd, atomicFunc, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, attenuationColor, attenuationDistance, attribute, attributeArray, backgroundBlurriness, backgroundIntensity, backgroundRotation, batch, bentNormalView, billboarding, bitAnd, bitNot, bitOr, bitXor, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, bitcast, blendBurn, blendColor, blendDodge, blendOverlay, blendScreen, blur, bool, buffer, bufferAttribute, builtin, builtinAOContext, builtinShadowContext, bumpMap, bvec2, bvec3, bvec4, bypass, cache, call, cameraFar, cameraIndex, cameraNear, cameraNormalMatrix, cameraPosition, cameraProjectionMatrix, cameraProjectionMatrixInverse, cameraViewMatrix, cameraViewport, cameraWorldMatrix, cbrt, cdl, ceil, checker, cineonToneMapping, clamp, clearcoat, clearcoatNormalView, clearcoatRoughness, clipSpace, code, color, colorSpaceToWorking, colorToDirection, compute, computeKernel, computeSkinning, context, convert, convertColorSpace, convertToTexture, cos, cosh, countLeadingZeros, countOneBits, countTrailingZeros, cross, cubeTexture, cubeTextureBase, dFdx, dFdy, dashSize, debug, decrement, decrementBefore, defaultBuildStages, defaultShaderStages, defined, degrees, deltaTime, densityFog, densityFogFactor, depth, depthPass, determinant, difference, diffuseColor, directPointLight, directionToColor, directionToFaceDirection, dispersion, distance, div, dot, drawIndex, dynamicBufferAttribute, element, emissive, equal, equirectUV, exp, exp2, exponentialHeightFogFactor, expression, faceDirection, faceForward, faceforward, float, floatBitsToInt, floatBitsToUint, floor, fog, fract, frameGroup, frameId, frontFacing, fwidth, gain, gapSize, getConstNodeType, getCurrentStack, getDirection, getDistanceAttenuation, getGeometryRoughness, getNormalFromDepth, getParallaxCorrectNormal, getRoughness, getScreenPosition, getShIrradianceAt, getShadowMaterial, getShadowRenderObjectFunction, getTextureIndex, getViewPosition, globalId, glsl, glslFn, grayscale, greaterThan, greaterThanEqual, hash, highpModelNormalViewMatrix, highpModelViewMatrix, hue, increment, incrementBefore, instance, instanceIndex, instancedArray, instancedBufferAttribute, instancedDynamicBufferAttribute, instancedMesh, int, intBitsToFloat, interleavedGradientNoise, inverse, inverseSqrt, inversesqrt, invocationLocalIndex, invocationSubgroupIndex, ior, iridescence, iridescenceIOR, iridescenceThickness, ivec2, ivec3, ivec4, js, label, length, lengthSq, lessThan, lessThanEqual, lightPosition, lightProjectionUV, lightShadowMatrix, lightTargetDirection, lightTargetPosition, lightViewPosition, lightingContext, lights, linearDepth, linearToneMapping, localId, log, log2, logarithmicDepthToViewZ, luminance, mat2, mat3, mat4, matcapUV, materialAO, materialAlphaTest, materialAnisotropy, materialAnisotropyVector, materialAttenuationColor, materialAttenuationDistance, materialClearcoat, materialClearcoatNormal, materialClearcoatRoughness, materialColor, materialDispersion, materialEmissive, materialEnvIntensity, materialEnvRotation, materialIOR, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialLightMap, materialLineDashOffset, materialLineDashSize, materialLineGapSize, materialLineScale, materialLineWidth, materialMetalness, materialNormal, materialOpacity, materialPointSize, materialReference, materialReflectivity, materialRefractionRatio, materialRotation, materialRoughness, materialSheen, materialSheenRoughness, materialShininess, materialSpecular, materialSpecularColor, materialSpecularIntensity, materialSpecularStrength, materialThickness, materialTransmission, max, maxMipLevel, mediumpModelViewMatrix, metalness, min, mix, mixElement, mod, modInt, modelDirection, modelNormalMatrix, modelPosition, modelRadius, modelScale, modelViewMatrix, modelViewPosition, modelViewProjection, modelWorldMatrix, modelWorldMatrixInverse, morphReference, mrt, mul, mx_aastep, mx_add, mx_atan2, mx_cell_noise_float, mx_contrast, mx_divide, mx_fractal_noise_float, mx_fractal_noise_vec2, mx_fractal_noise_vec3, mx_fractal_noise_vec4, mx_frame, mx_heighttonormal, mx_hsvtorgb, mx_ifequal, mx_ifgreater, mx_ifgreatereq, mx_invert, mx_modulo, mx_multiply, mx_noise_float, mx_noise_vec3, mx_noise_vec4, mx_place2d, mx_power, mx_ramp4, mx_ramplr, mx_ramptb, mx_rgbtohsv, mx_rotate2d, mx_rotate3d, mx_safepower, mx_separate, mx_splitlr, mx_splittb, mx_srgb_texture_to_lin_rec709, mx_subtract, mx_timer, mx_transform_uv, mx_unifiednoise2d, mx_unifiednoise3d, mx_worley_noise_float, mx_worley_noise_vec2, mx_worley_noise_vec3, negate, neutralToneMapping, nodeArray, nodeImmutable, nodeObject, nodeObjectIntent, nodeObjects, nodeProxy, nodeProxyIntent, normalFlat, normalGeometry, normalLocal, normalMap, normalView, normalViewGeometry, normalWorld, normalWorldGeometry, normalize, not, notEqual, numWorkgroups, objectDirection, objectGroup, objectPosition, objectRadius, objectScale, objectViewPosition, objectWorldMatrix, oneMinus, or, orthographicDepthToViewZ, oscSawtooth, oscSine, oscSquare, oscTriangle, output, outputStruct, overloadingFn, packHalf2x16, packSnorm2x16, packUnorm2x16, parabola, parallaxDirection, parallaxUV, parameter, pass, passTexture, pcurve, perspectiveDepthToViewZ, pmremTexture, pointShadow, pointUV, pointWidth, positionGeometry, positionLocal, positionPrevious, positionView, positionViewDirection, positionWorld, positionWorldDirection, posterize, pow, pow2, pow3, pow4, premultiplyAlpha, property, radians, rand, range, rangeFog, rangeFogFactor, reciprocal, reference, referenceBuffer, reflect, reflectVector, reflectView, reflector, refract, refractVector, refractView, reinhardToneMapping, remap, remapClamp, renderGroup, renderOutput, rendererReference, replaceDefaultUV, rotate, rotateUV, roughness, round, rtt, sRGBTransferEOTF, sRGBTransferOETF, sample, sampler, samplerComparison, saturate, saturation, screen, screenCoordinate, screenDPR, screenSize, screenUV, select, setCurrentStack, setName, shaderStages, shadow, shadowPositionWorld, shapeCircle, sharedUniformGroup, sheen, sheenRoughness, shiftLeft, shiftRight, shininess, sign, sin, sinc, sinh, skinning, smoothstep, smoothstepElement, specularColor, specularF90, spherizeUV, split, spritesheetUV, sqrt, stack, step, stepElement, storage, storageBarrier, storageTexture, string, struct, sub, subBuild, subgroupAdd, subgroupAll, subgroupAnd, subgroupAny, subgroupBallot, subgroupBroadcast, subgroupBroadcastFirst, subgroupElect, subgroupExclusiveAdd, subgroupExclusiveMul, subgroupInclusiveAdd, subgroupInclusiveMul, subgroupIndex, subgroupMax, subgroupMin, subgroupMul, subgroupOr, subgroupShuffle, subgroupShuffleDown, subgroupShuffleUp, subgroupShuffleXor, subgroupSize, subgroupXor, tan, tangentGeometry, tangentLocal, tangentView, tangentWorld, tanh, texture, texture3D, textureBarrier, textureBicubic, textureBicubicLevel, textureCubeUV, textureLevel, textureLoad, textureSize, textureStore, thickness, time, toneMapping, toneMappingExposure, toonOutlinePass, transformDirection, transformNormal, transformNormalToView, transformedClearcoatNormalView, transformedNormalView, transformedNormalWorld, transmission, transpose, triNoise3D, triplanarTexture, triplanarTextures, trunc, uint, uintBitsToFloat, uniform, uniformArray, uniformCubeTexture, uniformFlow, uniformGroup, uniformTexture, unpackHalf2x16, unpackSnorm2x16, unpackUnorm2x16, unpremultiplyAlpha, userData, uv, uvec2, uvec3, uvec4, varying, varyingProperty, vec2, vec3, vec4, vectorComponents, velocity, vertexColor, vertexIndex, vertexStage, vibrance, viewZToLogarithmicDepth, viewZToOrthographicDepth, viewZToPerspectiveDepth, viewZToReversedOrthographicDepth, viewZToReversedPerspectiveDepth, viewport, viewportCoordinate, viewportDepthTexture, viewportLinearDepth, viewportMipTexture, viewportOpaqueMipTexture, viewportResolution, viewportSafeUV, viewportSharedTexture, viewportSize, viewportTexture, viewportUV, vogelDiskSample, wgsl, wgslFn, workgroupArray, workgroupBarrier, workgroupId, workingToColorSpace, xor };\n","import {\n\tBox3,\n\tFloat32BufferAttribute,\n\tInstancedBufferGeometry,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tSphere,\n\tVector3,\n\tWireframeGeometry\n} from 'three';\n\nconst _box = new Box3();\nconst _vector = new Vector3();\n\n/**\n * A series of vertex pairs, forming line segments.\n *\n * This is used in {@link LineSegments2} to describe the shape.\n *\n * @augments InstancedBufferGeometry\n * @three_import import { LineSegmentsGeometry } from 'three/addons/lines/LineSegmentsGeometry.js';\n */\nclass LineSegmentsGeometry extends InstancedBufferGeometry {\n\n\t/**\n\t * Constructs a new line segments geometry.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineSegmentsGeometry = true;\n\n\t\tthis.type = 'LineSegmentsGeometry';\n\n\t\tconst positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\t\tconst uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\n\t\tconst index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\n\n\t\tthis.setIndex( index );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\t/**\n\t * Applies the given 4x4 transformation matrix to the geometry.\n\t *\n\t * @param {Matrix4} matrix - The matrix to apply.\n\t * @return {LineSegmentsGeometry} A reference to this instance.\n\t */\n\tapplyMatrix4( matrix ) {\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined ) {\n\n\t\t\tstart.applyMatrix4( matrix );\n\n\t\t\tend.applyMatrix4( matrix );\n\n\t\t\tstart.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given line positions for this geometry. The length must be a multiple of six since\n\t * each line segment is defined by a start end vertex in the pattern `(xyz xyz)`.\n\t *\n\t * @param {Float32Array|Array<number>} array - The position data to set.\n\t * @return {LineSegmentsGeometry} A reference to this geometry.\n\t */\n\tsetPositions( array ) {\n\n\t\tlet lineSegments;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tlineSegments = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tlineSegments = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\n\n\t\tthis.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\n\t\tthis.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\n\n\t\tthis.instanceCount = this.attributes.instanceStart.count;\n\n\t\t//\n\n\t\tthis.computeBoundingBox();\n\t\tthis.computeBoundingSphere();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given line colors for this geometry. The length must be a multiple of six since\n\t * each line segment is defined by a start end color in the pattern `(rgb rgb)`.\n\t *\n\t * @param {Float32Array|Array<number>} array - The position data to set.\n\t * @return {LineSegmentsGeometry} A reference to this geometry.\n\t */\n\tsetColors( array ) {\n\n\t\tlet colors;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tcolors = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tcolors = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\n\n\t\tthis.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\n\t\tthis.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Setups this line segments geometry from the given wireframe geometry.\n\t *\n\t * @param {WireframeGeometry} geometry - The geometry that should be used as a data source for this geometry.\n\t * @return {LineSegmentsGeometry} A reference to this geometry.\n\t */\n\tfromWireframeGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Setups this line segments geometry from the given edges geometry.\n\t *\n\t * @param {EdgesGeometry} geometry - The geometry that should be used as a data source for this geometry.\n\t * @return {LineSegmentsGeometry} A reference to this geometry.\n\t */\n\tfromEdgesGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Setups this line segments geometry from the given mesh.\n\t *\n\t * @param {Mesh} mesh - The mesh geometry that should be used as a data source for this geometry.\n\t * @return {LineSegmentsGeometry} A reference to this geometry.\n\t */\n\tfromMesh( mesh ) {\n\n\t\tthis.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) );\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Setups this line segments geometry from the given line segments.\n\t *\n\t * @param {LineSegments} lineSegments - The line segments that should be used as a data source for this geometry.\n\t * Assumes the source geometry is not using indices.\n\t * @return {LineSegmentsGeometry} A reference to this geometry.\n\t */\n\tfromLineSegments( lineSegments ) {\n\n\t\tconst geometry = lineSegments.geometry;\n\n\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( start );\n\n\t\t\t_box.setFromBufferAttribute( end );\n\n\t\t\tthis.boundingBox.union( _box );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\tthis.boundingBox.getCenter( center );\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = start.count; i < il; i ++ ) {\n\n\t\t\t\t_vector.fromBufferAttribute( start, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t\t_vector.fromBufferAttribute( end, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\t// todo\n\n\t}\n\n}\n\nexport { LineSegmentsGeometry };\n","import {\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2,\n} from 'three';\n\nUniformsLib.line = {\n\n\tworldUnits: { value: 1 },\n\tlinewidth: { value: 1 },\n\tresolution: { value: new Vector2( 1, 1 ) },\n\tdashOffset: { value: 0 },\n\tdashScale: { value: 1 },\n\tdashSize: { value: 1 },\n\tgapSize: { value: 1 } // todo FIX - maybe change to totalSize\n\n};\n\nShaderLib[ 'line' ] = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.line\n\t] ),\n\n\tvertexShader:\n\t/* glsl */`\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tworldStart = start.xyz;\n\t\t\t\tworldEnd = end.xyz;\n\n\t\t\t#else\n\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\t\tvec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );\n\t\t\t\tvec3 worldUp = normalize( cross( worldDir, tmpFwd ) );\n\t\t\t\tvec3 worldFwd = cross( worldDir, worldUp );\n\t\t\t\tworldPos = position.y < 0.5 ? start: end;\n\n\t\t\t\t// height offset\n\t\t\t\tfloat hw = linewidth * 0.5;\n\t\t\t\tworldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp;\n\n\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t// won't be rendering the endcaps\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t// cap extension\n\t\t\t\t\tworldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir;\n\n\t\t\t\t\t// add width to the box\n\t\t\t\t\tworldPos.xyz += worldFwd * hw;\n\n\t\t\t\t\t// endcaps\n\t\t\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\t\t\tworldPos.xyz -= worldFwd * 2.0 * hw;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t\t// project the worldpos\n\t\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t// segments overlap neatly\n\t\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\t#else\n\n\t\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\tdir.x /= aspect;\n\t\t\t\toffset.x /= aspect;\n\n\t\t\t\t// sign flip\n\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t// endcaps\n\t\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\t\toffset += - dir;\n\n\t\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\t\toffset += dir;\n\n\t\t\t\t}\n\n\t\t\t\t// adjust for linewidth\n\t\t\t\toffset *= linewidth;\n\n\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\toffset /= resolution.y;\n\n\t\t\t\t// select end\n\t\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t\t// back to clip space\n\t\t\t\toffset *= clip.w;\n\n\t\t\t\tclip.xy += offset;\n\n\t\t\t#endif\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t`,\n\n\tfragmentShader:\n\t/* glsl */`\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\t\tuniform float linewidth;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float dashSize;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\tfloat mua;\n\t\t\tfloat mub;\n\n\t\t\tvec3 p13 = p1 - p3;\n\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\tmua = numer / denom;\n\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\treturn vec2( mua, mub );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat alpha = opacity;\n\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\n\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\t\tvec3 delta = p1 - p2;\n\t\t\t\tfloat len = length( delta );\n\t\t\t\tfloat norm = len / linewidth;\n\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\tfloat dnorm = fwidth( norm );\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tif ( norm > 0.5 ) {\n\n\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#endif\n\n\t\t\t#else\n\n\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\tfloat len2 = a * a + b * b;\n\t\t\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t#else\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\t#include <logdepthbuf_fragment>\n\t\t\t#include <color_fragment>\n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, alpha );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <colorspace_fragment>\n\t\t\t#include <fog_fragment>\n\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t}\n\t\t`\n};\n\n/**\n * A material for drawing wireframe-style geometries.\n *\n * Unlike {@link LineBasicMaterial}, it supports arbitrary line widths and allows using world units\n * instead of screen space units. This material is used with {@link LineSegments2} and {@link Line2}.\n *\n * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},\n * use {@link Line2NodeMaterial}.\n *\n * @augments ShaderMaterial\n * @three_import import { LineMaterial } from 'three/addons/lines/LineMaterial.js';\n */\nclass LineMaterial extends ShaderMaterial {\n\n\t/**\n\t * Constructs a new line segments geometry.\n\t *\n\t * @param {Object} [parameters] - An object with one or more properties\n\t * defining the material's appearance. Any property of the material\n\t * (including any property from inherited materials) can be passed\n\t * in here. Color values can be passed any type of value accepted\n\t * by {@link Color#set}.\n\t */\n\tconstructor( parameters ) {\n\n\t\tsuper( {\n\n\t\t\ttype: 'LineMaterial',\n\t\t\tuniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ),\n\n\t\t\tvertexShader: ShaderLib[ 'line' ].vertexShader,\n\t\t\tfragmentShader: ShaderLib[ 'line' ].fragmentShader,\n\n\t\t\tclipping: true // required for clipping support\n\n\t\t} );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineMaterial = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\t/**\n\t * The material's color.\n\t *\n\t * @type {Color}\n\t * @default (1,1,1)\n\t */\n\tget color() {\n\n\t\treturn this.uniforms.diffuse.value;\n\n\t}\n\n\tset color( value ) {\n\n\t\tthis.uniforms.diffuse.value = value;\n\n\t}\n\n\t/**\n\t * Whether the material's sizes (width, dash gaps) are in world units.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t */\n\tget worldUnits() {\n\n\t\treturn 'WORLD_UNITS' in this.defines;\n\n\t}\n\n\tset worldUnits( value ) {\n\n\t\tif ( ( value === true ) !== this.worldUnits ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.WORLD_UNITS = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.WORLD_UNITS;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Controls line thickness in CSS pixel units when `worldUnits` is `false` (default),\n\t * or in world units when `worldUnits` is `true`.\n\t *\n\t * @type {number}\n\t * @default 1\n\t */\n\tget linewidth() {\n\n\t\treturn this.uniforms.linewidth.value;\n\n\t}\n\n\tset linewidth( value ) {\n\n\t\tif ( ! this.uniforms.linewidth ) return;\n\t\tthis.uniforms.linewidth.value = value;\n\n\t}\n\n\t/**\n\t * Whether the line is dashed, or solid.\n\t *\n\t * @type {boolean}\n\t * @default false\n\t */\n\tget dashed() {\n\n\t\treturn 'USE_DASH' in this.defines;\n\n\t}\n\n\tset dashed( value ) {\n\n\t\tif ( ( value === true ) !== this.dashed ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_DASH = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_DASH;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * The scale of the dashes and gaps.\n\t *\n\t * @type {number}\n\t * @default 1\n\t */\n\tget dashScale() {\n\n\t\treturn this.uniforms.dashScale.value;\n\n\t}\n\n\tset dashScale( value ) {\n\n\t\tthis.uniforms.dashScale.value = value;\n\n\t}\n\n\t/**\n\t * The size of the dash.\n\t *\n\t * @type {number}\n\t * @default 1\n\t */\n\tget dashSize() {\n\n\t\treturn this.uniforms.dashSize.value;\n\n\t}\n\n\tset dashSize( value ) {\n\n\t\tthis.uniforms.dashSize.value = value;\n\n\t}\n\n\t/**\n\t * Where in the dash cycle the dash starts.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget dashOffset() {\n\n\t\treturn this.uniforms.dashOffset.value;\n\n\t}\n\n\tset dashOffset( value ) {\n\n\t\tthis.uniforms.dashOffset.value = value;\n\n\t}\n\n\t/**\n\t * The size of the gap.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget gapSize() {\n\n\t\treturn this.uniforms.gapSize.value;\n\n\t}\n\n\tset gapSize( value ) {\n\n\t\tthis.uniforms.gapSize.value = value;\n\n\t}\n\n\t/**\n\t * The opacity.\n\t *\n\t * @type {number}\n\t * @default 1\n\t */\n\tget opacity() {\n\n\t\treturn this.uniforms.opacity.value;\n\n\t}\n\n\tset opacity( value ) {\n\n\t\tif ( ! this.uniforms ) return;\n\t\tthis.uniforms.opacity.value = value;\n\n\t}\n\n\t/**\n\t * The size of the viewport, in screen pixels. This must be kept updated to make\n\t * screen-space rendering accurate. The `LineSegments2.onBeforeRender` callback\n\t * performs the update for visible objects.\n\t *\n\t * @type {Vector2}\n\t */\n\tget resolution() {\n\n\t\treturn this.uniforms.resolution.value;\n\n\t}\n\n\tset resolution( value ) {\n\n\t\tthis.uniforms.resolution.value.copy( value );\n\n\t}\n\n\t/**\n\t * Whether to use alphaToCoverage or not. When enabled, this can improve the\n\t * anti-aliasing of line edges when using MSAA.\n\t *\n\t * @type {boolean}\n\t */\n\tget alphaToCoverage() {\n\n\t\treturn 'USE_ALPHA_TO_COVERAGE' in this.defines;\n\n\t}\n\n\tset alphaToCoverage( value ) {\n\n\t\tif ( ! this.defines ) return;\n\n\t\tif ( ( value === true ) !== this.alphaToCoverage ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_ALPHA_TO_COVERAGE = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_ALPHA_TO_COVERAGE;\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineMaterial };\n","import {\n\tBox3,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tLine3,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tSphere,\n\tVector3,\n\tVector4\n} from 'three';\nimport { LineSegmentsGeometry } from './LineSegmentsGeometry.js';\nimport { LineMaterial } from './LineMaterial.js';\n\nconst _viewport = new Vector4();\n\nconst _start = new Vector3();\nconst _end = new Vector3();\n\nconst _start4 = new Vector4();\nconst _end4 = new Vector4();\n\nconst _ssOrigin = new Vector4();\nconst _ssOrigin3 = new Vector3();\nconst _mvMatrix = new Matrix4();\nconst _line = new Line3();\nconst _closestPoint = new Vector3();\n\nconst _box = new Box3();\nconst _sphere = new Sphere();\nconst _clipToWorldVector = new Vector4();\n\nlet _ray, _lineWidth;\n\n// Returns the margin required to expand by in world space given the distance from the camera,\n// line width, resolution, and camera projection\nfunction getWorldSpaceHalfWidth( camera, distance, resolution ) {\n\n\t// transform into clip space, adjust the x and y values by the pixel width offset, then\n\t// transform back into world space to get world offset. Note clip space is [-1, 1] so full\n\t// width does not need to be halved.\n\t_clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\t_clipToWorldVector.x = _lineWidth / resolution.width;\n\t_clipToWorldVector.y = _lineWidth / resolution.height;\n\t_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\n\treturn Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );\n\n}\n\nfunction raycastWorldUnits( lineSegments, intersects ) {\n\n\tconst matrixWorld = lineSegments.matrixWorld;\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t_line.applyMatrix4( matrixWorld );\n\n\t\tconst pointOnLine = new Vector3();\n\t\tconst point = new Vector3();\n\n\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\t\tconst isInside = point.distanceTo( pointOnLine ) < _lineWidth * 0.5;\n\n\t\tif ( isInside ) {\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint,\n\t\t\t\tpointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nfunction raycastScreenSpace( lineSegments, camera, intersects ) {\n\n\tconst projectionMatrix = camera.projectionMatrix;\n\tconst material = lineSegments.material;\n\tconst resolution = material.resolution;\n\tconst matrixWorld = lineSegments.matrixWorld;\n\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tconst near = - camera.near;\n\n\t//\n\n\t// pick a point 1 unit out along the ray to avoid the ray origin\n\t// sitting at the camera origin which will cause \"w\" to be 0 when\n\t// applying the projection matrix.\n\t_ray.at( 1, _ssOrigin );\n\n\t// ndc space [ - 1.0, 1.0 ]\n\t_ssOrigin.w = 1;\n\t_ssOrigin.applyMatrix4( camera.matrixWorldInverse );\n\t_ssOrigin.applyMatrix4( projectionMatrix );\n\t_ssOrigin.multiplyScalar( 1 / _ssOrigin.w );\n\n\t// screen space\n\t_ssOrigin.x *= resolution.x / 2;\n\t_ssOrigin.y *= resolution.y / 2;\n\t_ssOrigin.z = 0;\n\n\t_ssOrigin3.copy( _ssOrigin );\n\n\t_mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_start4.fromBufferAttribute( instanceStart, i );\n\t\t_end4.fromBufferAttribute( instanceEnd, i );\n\n\t\t_start4.w = 1;\n\t\t_end4.w = 1;\n\n\t\t// camera space\n\t\t_start4.applyMatrix4( _mvMatrix );\n\t\t_end4.applyMatrix4( _mvMatrix );\n\n\t\t// skip the segment if it's entirely behind the camera\n\t\tconst isBehindCameraNear = _start4.z > near && _end4.z > near;\n\t\tif ( isBehindCameraNear ) {\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\t// trim the segment if it extends behind camera near\n\t\tif ( _start4.z > near ) {\n\n\t\t\tconst deltaDist = _start4.z - _end4.z;\n\t\t\tconst t = ( _start4.z - near ) / deltaDist;\n\t\t\t_start4.lerp( _end4, t );\n\n\t\t} else if ( _end4.z > near ) {\n\n\t\t\tconst deltaDist = _end4.z - _start4.z;\n\t\t\tconst t = ( _end4.z - near ) / deltaDist;\n\t\t\t_end4.lerp( _start4, t );\n\n\t\t}\n\n\t\t// clip space\n\t\t_start4.applyMatrix4( projectionMatrix );\n\t\t_end4.applyMatrix4( projectionMatrix );\n\n\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t_start4.multiplyScalar( 1 / _start4.w );\n\t\t_end4.multiplyScalar( 1 / _end4.w );\n\n\t\t// screen space\n\t\t_start4.x *= resolution.x / 2;\n\t\t_start4.y *= resolution.y / 2;\n\n\t\t_end4.x *= resolution.x / 2;\n\t\t_end4.y *= resolution.y / 2;\n\n\t\t// create 2d segment\n\t\t_line.start.copy( _start4 );\n\t\t_line.start.z = 0;\n\n\t\t_line.end.copy( _end4 );\n\t\t_line.end.z = 0;\n\n\t\t// get closest point on ray to segment\n\t\tconst param = _line.closestPointToPointParameter( _ssOrigin3, true );\n\t\t_line.at( param, _closestPoint );\n\n\t\t// check if the intersection point is within clip space\n\t\tconst zPos = MathUtils.lerp( _start4.z, _end4.z, param );\n\t\tconst isInClipSpace = zPos >= - 1 && zPos <= 1;\n\n\t\tconst isInside = _ssOrigin3.distanceTo( _closestPoint ) < _lineWidth * 0.5;\n\n\t\tif ( isInClipSpace && isInside ) {\n\n\t\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t_line.start.applyMatrix4( matrixWorld );\n\t\t\t_line.end.applyMatrix4( matrixWorld );\n\n\t\t\tconst pointOnLine = new Vector3();\n\t\t\tconst point = new Vector3();\n\n\t\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint: point,\n\t\t\t\tpointOnLine: pointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * A series of lines drawn between pairs of vertices.\n *\n * This adds functionality beyond {@link LineSegments}, like arbitrary line width and changing width\n * to be in world units. {@link Line2} extends this object, forming a polyline instead of individual\n * segments.\n *\n * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},\n * import the class from `lines/webgpu/LineSegments2.js`.\n *\n *  ```js\n * const geometry = new LineSegmentsGeometry();\n * geometry.setPositions( positions );\n * geometry.setColors( colors );\n *\n * const material = new LineMaterial( { linewidth: 5, vertexColors: true } };\n *\n * const lineSegments = new LineSegments2( geometry, material );\n * scene.add( lineSegments );\n * ```\n *\n * @augments Mesh\n * @three_import import { LineSegments2 } from 'three/addons/lines/LineSegments2.js';\n */\nclass LineSegments2 extends Mesh {\n\n\t/**\n\t * Constructs a new wide line.\n\t *\n\t * @param {LineSegmentsGeometry} [geometry] - The line geometry.\n\t * @param {LineMaterial} [material] - The line material.\n\t */\n\tconstructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineSegments2 = true;\n\n\t\tthis.type = 'LineSegments2';\n\n\t}\n\n\t/**\n\t * Computes an array of distance values which are necessary for rendering dashed lines.\n\t * For each vertex in the geometry, the method calculates the cumulative length from the\n\t * current point to the very beginning of the line.\n\t *\n\t * @return {LineSegments2} A reference to this instance.\n\t */\n\tcomputeLineDistances() {\n\n\t\t// for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst instanceStart = geometry.attributes.instanceStart;\n\t\tconst instanceEnd = geometry.attributes.instanceEnd;\n\t\tconst lineDistances = new Float32Array( 2 * instanceStart.count );\n\n\t\tfor ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {\n\n\t\t\t_start.fromBufferAttribute( instanceStart, i );\n\t\t\t_end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );\n\n\t\t}\n\n\t\tconst instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Computes intersection points between a casted ray and this instance.\n\t *\n\t * @param {Raycaster} raycaster - The raycaster.\n\t * @param {Array<Object>} intersects - The target array that holds the intersection points.\n\t */\n\traycast( raycaster, intersects ) {\n\n\t\tconst worldUnits = this.material.worldUnits;\n\t\tconst camera = raycaster.camera;\n\n\t\tif ( camera === null && ! worldUnits ) {\n\n\t\t\tconsole.error( 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.' );\n\n\t\t}\n\n\t\tconst threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;\n\n\t\t_ray = raycaster.ray;\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\t_lineWidth = material.linewidth + threshold;\n\n\t\t// check if we intersect the sphere bounds\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\t_sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );\n\n\t\t// increase the sphere bounds by the worst case line screen space width\n\t\tlet sphereMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tsphereMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) );\n\t\t\tsphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, material.resolution );\n\n\t\t}\n\n\t\t_sphere.radius += sphereMargin;\n\n\t\tif ( _ray.intersectsSphere( _sphere ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// check if we intersect the box bounds\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\t_box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );\n\n\t\t// increase the box bounds by the worst case line width\n\t\tlet boxMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tboxMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) );\n\t\t\tboxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, material.resolution );\n\n\t\t}\n\n\t\t_box.expandByScalar( boxMargin );\n\n\t\tif ( _ray.intersectsBox( _box ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( worldUnits ) {\n\n\t\t\traycastWorldUnits( this, intersects );\n\n\t\t} else {\n\n\t\t\traycastScreenSpace( this, camera, intersects );\n\n\t\t}\n\n\t}\n\n\tonBeforeRender( renderer ) {\n\n\t\tconst uniforms = this.material.uniforms;\n\n\t\tif ( uniforms && uniforms.resolution ) {\n\n\t\t\trenderer.getViewport( _viewport );\n\t\t\tthis.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineSegments2 };\n","import { LineSegmentsGeometry } from './LineSegmentsGeometry.js';\n\n/**\n * A chain of vertices, forming a polyline.\n *\n * This is used in {@link Line2} to describe the shape.\n *\n * ```js\n * const points = [\n * \tnew THREE.Vector3( - 10, 0, 0 ),\n * \tnew THREE.Vector3( 0, 5, 0 ),\n * \tnew THREE.Vector3( 10, 0, 0 ),\n * ];\n *\n * const geometry = new LineGeometry();\n * geometry.setFromPoints( points );\n * ```\n *\n * @augments LineSegmentsGeometry\n * @three_import import { LineLineGeometry2 } from 'three/addons/lines/LineGeometry.js';\n */\nclass LineGeometry extends LineSegmentsGeometry {\n\n\t/**\n\t * Constructs a new line geometry.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLineGeometry = true;\n\n\t\tthis.type = 'LineGeometry';\n\n\t}\n\n\t/**\n\t * Sets the given line positions for this geometry.\n\t *\n\t * @param {Float32Array|Array<number>} array - The position data to set.\n\t * @return {LineGeometry} A reference to this geometry.\n\t */\n\tsetPositions( array ) {\n\n\t\t// converts [ x1, y1, z1,  x2, y2, z2, ... ] to pairs format\n\n\t\tconst length = array.length - 3;\n\t\tconst points = new Float32Array( 2 * length );\n\n\t\tfor ( let i = 0; i < length; i += 3 ) {\n\n\t\t\tpoints[ 2 * i ] = array[ i ];\n\t\t\tpoints[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tpoints[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tpoints[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tpoints[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tpoints[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tsuper.setPositions( points );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given line colors for this geometry.\n\t *\n\t * @param {Float32Array|Array<number>} array - The position data to set.\n\t * @return {LineGeometry} A reference to this geometry.\n\t */\n\tsetColors( array ) {\n\n\t\t// converts [ r1, g1, b1,  r2, g2, b2, ... ] to pairs format\n\n\t\tconst length = array.length - 3;\n\t\tconst colors = new Float32Array( 2 * length );\n\n\t\tfor ( let i = 0; i < length; i += 3 ) {\n\n\t\t\tcolors[ 2 * i ] = array[ i ];\n\t\t\tcolors[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tcolors[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tcolors[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tcolors[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tcolors[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tsuper.setColors( colors );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Setups this line segments geometry from the given sequence of points.\n\t *\n\t * @param {Array<Vector3|Vector2>} points - An array of points in 2D or 3D space.\n\t * @return {LineGeometry} A reference to this geometry.\n\t */\n\tsetFromPoints( points ) {\n\n\t\t// converts a vector3 or vector2 array to pairs format\n\n\t\tconst length = points.length - 1;\n\t\tconst positions = new Float32Array( 6 * length );\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tpositions[ 6 * i ] = points[ i ].x;\n\t\t\tpositions[ 6 * i + 1 ] = points[ i ].y;\n\t\t\tpositions[ 6 * i + 2 ] = points[ i ].z || 0;\n\n\t\t\tpositions[ 6 * i + 3 ] = points[ i + 1 ].x;\n\t\t\tpositions[ 6 * i + 4 ] = points[ i + 1 ].y;\n\t\t\tpositions[ 6 * i + 5 ] = points[ i + 1 ].z || 0;\n\n\t\t}\n\n\t\tsuper.setPositions( positions );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Setups this line segments geometry from the given line.\n\t *\n\t * @param {Line} line - The line that should be used as a data source for this geometry.\n\t * @return {LineGeometry} A reference to this geometry.\n\t */\n\tfromLine( line ) {\n\n\t\tconst geometry = line.geometry;\n\n\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { LineGeometry };\n","import { LineSegments2 } from './LineSegments2.js';\nimport { LineGeometry } from './LineGeometry.js';\nimport { LineMaterial } from './LineMaterial.js';\n\n/**\n * A polyline drawn between vertices.\n *\n * This adds functionality beyond {@link Line}, like arbitrary line width and changing width to\n * be in world units.It extends {@link LineSegments2}, simplifying constructing segments from a\n * chain of points.\n *\n * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},\n * import the class from `lines/webgpu/Line2.js`.\n *\n * ```js\n * const geometry = new LineGeometry();\n * geometry.setPositions( positions );\n * geometry.setColors( colors );\n *\n * const material = new LineMaterial( { linewidth: 5, vertexColors: true } };\n *\n * const line = new Line2( geometry, material );\n * scene.add( line );\n * ```\n *\n * @augments LineSegments2\n * @three_import import { Line2 } from 'three/addons/lines/Line2.js';\n */\nclass Line2 extends LineSegments2 {\n\n\t/**\n\t * Constructs a new wide line.\n\t *\n\t * @param {LineGeometry} [geometry] - The line geometry.\n\t * @param {LineMaterial} [material] - The line material.\n\t */\n\tconstructor( geometry = new LineGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isLine2 = true;\n\n\t\tthis.type = 'Line2';\n\n\t}\n\n}\n\nexport { Line2 };\n","import {\n\tFileLoader,\n\tLoader,\n\tShapePath\n} from 'three';\n\n/**\n * A loader for loading fonts.\n *\n * You can convert fonts online using [facetype.js](https://gero3.github.io/facetype.js/).\n *\n * ```js\n * const loader = new FontLoader();\n * const font = await loader.loadAsync( 'fonts/helvetiker_regular.typeface.json' );\n * ```\n *\n * @augments Loader\n * @three_import import { FontLoader } from 'three/addons/loaders/FontLoader.js';\n */\nclass FontLoader extends Loader {\n\n\t/**\n\t * Constructs a new font loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded font\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Font)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tconst font = scope.parse( JSON.parse( text ) );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Parses the given font data and returns the resulting font.\n\t *\n\t * @param {Object} json - The raw font data as a JSON object.\n\t * @return {Font} The font.\n\t */\n\tparse( json ) {\n\n\t\treturn new Font( json );\n\n\t}\n\n}\n\n/**\n * Class representing a font.\n */\nclass Font {\n\n\t/**\n\t * Constructs a new font.\n\t *\n\t * @param {Object} data - The font data as JSON.\n\t */\n\tconstructor( data ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isFont = true;\n\n\t\tthis.type = 'Font';\n\n\t\t/**\n\t\t * The font data as JSON.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.data = data;\n\n\t}\n\n\t/**\n\t * Generates geometry shapes from the given text and size. The result of this method\n\t * should be used with {@link ShapeGeometry} to generate the actual geometry data.\n\t *\n\t * @param {string} text - The text.\n\t * @param {number} [size=100] - The text size.\n\t * @param {string} [direction='ltr'] - Char direction: ltr(left to right), rtl(right to left) & tb(top bottom).\n\t * @return {Array<Shape>} An array of shapes representing the text.\n\t */\n\tgenerateShapes( text, size = 100, direction = 'ltr' ) {\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data, direction );\n\n\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tshapes.push( ...paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nfunction createPaths( text, size, data, direction ) {\n\n\tconst chars = Array.from( text );\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tif ( direction == 'rtl' || direction == 'tb' ) {\n\n\t\tchars.reverse();\n\n\t}\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\n\t\t\tif ( direction == 'tb' ) {\n\n\t\t\t\toffsetX = 0;\n\t\t\t\toffsetY += data.ascender * scale;\n\n\t\t\t} else {\n\n\t\t\t\toffsetX += ret.offsetX;\n\n\t\t\t}\n\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\nexport { FontLoader, Font };\n","import {\n\tExtrudeGeometry\n} from 'three';\n\nimport { Font } from '../loaders/FontLoader.js';\n\n/**\n * A class for generating text as a single geometry. It is constructed by providing a string of text, and a set of\n * parameters consisting of a loaded font and extrude settings.\n *\n * See the {@link FontLoader} page for additional details.\n *\n * `TextGeometry` uses [typeface.json](http://gero3.github.io/facetype.js/) generated fonts.\n * Some existing fonts can be found located in `/examples/fonts`.\n *\n * ```js\n * const loader = new FontLoader();\n * const font = await loader.loadAsync( 'fonts/helvetiker_regular.typeface.json' );\n * const geometry = new TextGeometry( 'Hello three.js!', {\n * \tfont: font,\n * \tsize: 80,\n * \tdepth: 5,\n * \tcurveSegments: 12\n * } );\n * ```\n *\n * @augments ExtrudeGeometry\n * @three_import import { TextGeometry } from 'three/addons/geometries/TextGeometry.js';\n */\nclass TextGeometry extends ExtrudeGeometry {\n\n\t/**\n\t * Constructs a new text geometry.\n\t *\n\t * @param {string} text - The text that should be transformed into a geometry.\n\t * @param {TextGeometry~Options} [parameters] - The text settings.\n\t */\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( font === undefined ) {\n\n\t\t\tsuper(); // generate default extrude geometry\n\n\t\t} else {\n\n\t\t\tconst shapes = font.generateShapes( text, parameters.size, parameters.direction );\n\n\t\t\t// defaults\n\n\t\t\tif ( parameters.depth === undefined ) parameters.depth = 50;\n\t\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\t\tsuper( shapes, parameters );\n\n\t\t}\n\n\t\tthis.type = 'TextGeometry';\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\tconst options = data.options;\n\n\t\toptions.font = new Font( options.font.data );\n\t\treturn new TextGeometry( options.text, options );\n\n\t}\n\n}\n\n/**\n * Represents the `options` type of the geometry's constructor.\n *\n * @typedef {Object} TextGeometry~Options\n * @property {Font} [font] - The font.\n * @property {number} [size=100] - The text size.\n * @property {number} [depth=50] - Depth to extrude the shape.\n * @property {number} [curveSegments=12] - Number of points on the curves.\n * @property {number} [steps=1] - Number of points used for subdividing segments along the depth of the extruded spline.\n * @property {boolean} [bevelEnabled=false] - Whether to beveling to the shape or not.\n * @property {number} [bevelThickness=10] - How deep into the original shape the bevel goes.\n * @property {number} [bevelSize=8] - Distance from the shape outline that the bevel extends.\n * @property {number} [bevelOffset=0] - Distance from the shape outline that the bevel starts.\n * @property {number} [bevelSegments=3] - Number of bevel layers.\n * @property {string} [direction='ltr'] - Char direction: ltr(left to right), rtl(right to left) & tb(top bottom).\n * @property {?Curve} [extrudePath=null] - A 3D spline path along which the shape should be extruded. Bevels not supported for path extrusion.\n * @property {Object} [UVGenerator] - An object that provides UV generator functions for custom UV generation.\n **/\n\nexport { TextGeometry };\n","import { Mesh, BackSide, BufferAttribute, ShaderMaterial, Color, SphereGeometry, TextureLoader, SRGBColorSpace, MeshPhongMaterial, Group, LineSegments, LineBasicMaterial, CylinderGeometry, Matrix4, Object3D, BufferGeometry, MeshLambertMaterial, Vector3, ShaderChunk, Line, NormalBlending, TubeGeometry, CubicBezierCurve3, Curve, DoubleSide, MeshBasicMaterial, CircleGeometry, Euler, Points, PointsMaterial, BoxGeometry, Camera, Vector2 } from 'three';\nimport Kapsule from 'kapsule';\nimport { Tween, Easing, Group as Group$1 } from '@tweenjs/tween.js';\nimport SlippyMap from 'three-slippy-map-globe';\nimport GeoJsonGeometry from 'three-geojson-geometry';\nimport { geoGraticule10, geoDistance as geoDistance$1, geoInterpolate } from 'd3-geo';\nimport * as _bfg from 'three/examples/jsm/utils/BufferGeometryUtils.js';\nimport accessorFn from 'accessor-fn';\nimport { color } from 'd3-color';\nimport tinyColor from 'tinycolor2';\nimport DataBindMapper from 'data-bind-mapper';\nimport _FrameTicker from 'frame-ticker';\nimport { scaleLinear, scaleQuantize } from 'd3-scale';\nimport ConicPolygonGeometry from 'three-conic-polygon-geometry';\nimport indexBy from 'index-array-by';\nimport { latLngToCell, cellToLatLng, cellToBoundary, polygonToCells } from 'h3-js';\nimport { interpolateTurbo } from 'd3-scale-chromatic';\nimport { sum, max } from 'd3-array';\nimport { StorageInstancedBufferAttribute, WebGPURenderer } from 'three/webgpu';\nimport * as tsl from 'three/tsl';\nimport { Line2 } from 'three/examples/jsm/lines/Line2.js';\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js';\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js';\nimport { interpolateArray } from 'd3-interpolate';\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js';\nimport { Font } from 'three/examples/jsm/loaders/FontLoader.js';\nimport { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer.js';\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _assertClassBrand(e, t, n) {\n  if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n  throw new TypeError(\"Private element is not present on this object\");\n}\nfunction _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) {\n  try {\n    var i = n[a](c),\n      u = i.value;\n  } catch (n) {\n    return void e(n);\n  }\n  i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n  return function () {\n    var t = this,\n      e = arguments;\n    return new Promise(function (r, o) {\n      var a = n.apply(t, e);\n      function _next(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n      }\n      function _throw(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n      }\n      _next(void 0);\n    });\n  };\n}\nfunction _callSuper(t, o, e) {\n  return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));\n}\nfunction _checkPrivateRedeclaration(e, t) {\n  if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n}\nfunction _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _classPrivateFieldGet2(s, a) {\n  return s.get(_assertClassBrand(s, a));\n}\nfunction _classPrivateFieldInitSpec(e, t, a) {\n  _checkPrivateRedeclaration(e, t), t.set(e, a);\n}\nfunction _classPrivateFieldSet2(s, a, r) {\n  return s.set(_assertClassBrand(s, a), r), r;\n}\nfunction _construct(t, e, r) {\n  if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n  var o = [null];\n  o.push.apply(o, e);\n  var p = new (t.bind.apply(t, o))();\n  return p;\n}\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || false, o.configurable = true, \"value\" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), Object.defineProperty(e, \"prototype\", {\n    writable: false\n  }), e;\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\nfunction _get() {\n  return _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {\n    var p = _superPropBase(e, t);\n    if (p) {\n      var n = Object.getOwnPropertyDescriptor(p, t);\n      return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;\n    }\n  }, _get.apply(null, arguments);\n}\nfunction _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: true,\n      configurable: true\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: false\n  }), e && _setPrototypeOf(t, e);\n}\nfunction _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function () {\n    return !!t;\n  })();\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), true).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = _objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == typeof e || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return _assertThisInitialized(t);\n}\nfunction _regenerator() {\n  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */\n  var e,\n    t,\n    r = \"function\" == typeof Symbol ? Symbol : {},\n    n = r.iterator || \"@@iterator\",\n    o = r.toStringTag || \"@@toStringTag\";\n  function i(r, n, o, i) {\n    var c = n && n.prototype instanceof Generator ? n : Generator,\n      u = Object.create(c.prototype);\n    return _regeneratorDefine(u, \"_invoke\", function (r, n, o) {\n      var i,\n        c,\n        u,\n        f = 0,\n        p = o || [],\n        y = false,\n        G = {\n          p: 0,\n          n: 0,\n          v: e,\n          a: d,\n          f: d.bind(e, 4),\n          d: function (t, r) {\n            return i = t, c = 0, u = e, G.n = r, a;\n          }\n        };\n      function d(r, n) {\n        for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {\n          var o,\n            i = p[t],\n            d = G.p,\n            l = i[2];\n          r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));\n        }\n        if (o || r > 1) return a;\n        throw y = true, n;\n      }\n      return function (o, p, l) {\n        if (f > 1) throw TypeError(\"Generator is already running\");\n        for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {\n          i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);\n          try {\n            if (f = 2, i) {\n              if (c || (o = \"next\"), t = i[o]) {\n                if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\");\n                if (!t.done) return t;\n                u = t.value, c < 2 && (c = 0);\n              } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1);\n              i = e;\n            } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;\n          } catch (t) {\n            i = e, c = 1, u = t;\n          } finally {\n            f = 1;\n          }\n        }\n        return {\n          value: t,\n          done: y\n        };\n      };\n    }(r, o, i), true), u;\n  }\n  var a = {};\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  t = Object.getPrototypeOf;\n  var c = [][n] ? t(t([][n]())) : (_regeneratorDefine(t = {}, n, function () {\n      return this;\n    }), t),\n    u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);\n  function f(e) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e;\n  }\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine(u), _regeneratorDefine(u, o, \"Generator\"), _regeneratorDefine(u, n, function () {\n    return this;\n  }), _regeneratorDefine(u, \"toString\", function () {\n    return \"[object Generator]\";\n  }), (_regenerator = function () {\n    return {\n      w: i,\n      m: f\n    };\n  })();\n}\nfunction _regeneratorDefine(e, r, n, t) {\n  var i = Object.defineProperty;\n  try {\n    i({}, \"\", {});\n  } catch (e) {\n    i = 0;\n  }\n  _regeneratorDefine = function (e, r, n, t) {\n    function o(r, n) {\n      _regeneratorDefine(e, r, function (e) {\n        return this._invoke(r, n, e);\n      });\n    }\n    r ? i ? i(e, r, {\n      value: n,\n      enumerable: !t,\n      configurable: !t,\n      writable: !t\n    }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2));\n  }, _regeneratorDefine(e, r, n, t);\n}\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _superPropBase(t, o) {\n  for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t)););\n  return t;\n}\nfunction _superPropGet(t, o, e, r) {\n  var p = _get(_getPrototypeOf(t.prototype ), o, e);\n  return \"function\" == typeof p ? function (t) {\n    return p.apply(e, t);\n  } : p;\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar _materialDispose = function materialDispose(material) {\n  if (material instanceof Array) {\n    material.forEach(_materialDispose);\n  } else {\n    if (material.map) {\n      material.map.dispose();\n    }\n    material.dispose();\n  }\n};\nvar _deallocate = function deallocate(obj) {\n  if (obj.geometry) {\n    obj.geometry.dispose();\n  }\n  if (obj.material) {\n    _materialDispose(obj.material);\n  }\n  if (obj.texture) {\n    obj.texture.dispose();\n  }\n  if (obj.children) {\n    obj.children.forEach(_deallocate);\n  }\n};\nvar emptyObject = function emptyObject(obj) {\n  if (obj && obj.children) while (obj.children.length) {\n    var childObj = obj.children[0];\n    obj.remove(childObj);\n    _deallocate(childObj);\n  }\n};\n\nfunction linkKapsule (kapsulePropName, kapsuleType) {\n  var dummyK = new kapsuleType(); // To extract defaults\n\n  return {\n    linkProp: function linkProp(prop) {\n      // link property config\n      return {\n        \"default\": dummyK[prop](),\n        onChange: function onChange(v, state) {\n          state[kapsulePropName][prop](v);\n        },\n        triggerUpdate: false\n      };\n    },\n    linkMethod: function linkMethod(method) {\n      // link method pass-through\n      return function (state) {\n        var kapsuleInstance = state[kapsulePropName];\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        var returnVal = kapsuleInstance[method].apply(kapsuleInstance, args);\n        return returnVal === kapsuleInstance ? this // chain based on the parent object, not the inner kapsule\n        : returnVal;\n      };\n    }\n  };\n}\n\nvar GLOBE_RADIUS = 100;\n\nfunction getGlobeRadius() {\n  return GLOBE_RADIUS;\n}\nfunction polar2Cartesian(lat, lng) {\n  var relAltitude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  var phi = (90 - lat) * Math.PI / 180;\n  var theta = (90 - lng) * Math.PI / 180;\n  var r = GLOBE_RADIUS * (1 + relAltitude);\n  var phiSin = Math.sin(phi);\n  return {\n    x: r * phiSin * Math.cos(theta),\n    y: r * Math.cos(phi),\n    z: r * phiSin * Math.sin(theta)\n  };\n}\nfunction cartesian2Polar(_ref) {\n  var x = _ref.x,\n    y = _ref.y,\n    z = _ref.z;\n  var r = Math.sqrt(x * x + y * y + z * z);\n  var phi = Math.acos(y / r);\n  var theta = Math.atan2(z, x);\n  return {\n    lat: 90 - phi * 180 / Math.PI,\n    lng: 90 - theta * 180 / Math.PI - (theta < -Math.PI / 2 ? 360 : 0),\n    // keep within [-180, 180] boundaries\n    altitude: r / GLOBE_RADIUS - 1\n  };\n}\nfunction deg2Rad$1(deg) {\n  return deg * Math.PI / 180;\n}\n\nvar THREE$i = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BackSide: BackSide,\n  BufferAttribute: BufferAttribute,\n  Color: Color,\n  Mesh: Mesh,\n  ShaderMaterial: ShaderMaterial\n};\nvar vertexShader = \"\\nuniform float hollowRadius;\\n\\nvarying vec3 vVertexWorldPosition;\\nvarying vec3 vVertexNormal;\\nvarying float vCameraDistanceToObjCenter;\\nvarying float vVertexAngularDistanceToHollowRadius;\\n\\nvoid main() {    \\n  vVertexNormal\\t= normalize(normalMatrix * normal);\\n  vVertexWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;\\n  \\n  vec4 objCenterViewPosition = modelViewMatrix * vec4(0.0, 0.0, 0.0, 1.0);\\n  vCameraDistanceToObjCenter = length(objCenterViewPosition);\\n  \\n  float edgeAngle = atan(hollowRadius / vCameraDistanceToObjCenter);\\n  float vertexAngle = acos(dot(normalize(modelViewMatrix * vec4(position, 1.0)), normalize(objCenterViewPosition)));\\n  vVertexAngularDistanceToHollowRadius = vertexAngle - edgeAngle;\\n\\n  gl_Position\\t= projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\";\nvar fragmentShader = \"\\nuniform vec3 color;\\nuniform float coefficient;\\nuniform float power;\\nuniform float hollowRadius;\\n\\nvarying vec3 vVertexNormal;\\nvarying vec3 vVertexWorldPosition;\\nvarying float vCameraDistanceToObjCenter;\\nvarying float vVertexAngularDistanceToHollowRadius;\\n\\nvoid main() {\\n  if (vCameraDistanceToObjCenter < hollowRadius) discard; // inside the hollowRadius\\n  if (vVertexAngularDistanceToHollowRadius < 0.0) discard; // frag position is within the hollow radius\\n\\n  vec3 worldCameraToVertex = vVertexWorldPosition - cameraPosition;\\n  vec3 viewCameraToVertex\\t= (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;\\n  viewCameraToVertex = normalize(viewCameraToVertex);\\n  float intensity\\t= pow(\\n    coefficient + dot(vVertexNormal, viewCameraToVertex),\\n    power\\n  );\\n  gl_FragColor = vec4(color, intensity);\\n}\";\n\n// Based off: http://stemkoski.blogspot.fr/2013/07/shaders-in-threejs-glow-and-halo.html\nfunction createGlowMaterial(coefficient, color, power, hollowRadius) {\n  return new THREE$i.ShaderMaterial({\n    depthWrite: false,\n    transparent: true,\n    vertexShader: vertexShader,\n    fragmentShader: fragmentShader,\n    uniforms: {\n      coefficient: {\n        value: coefficient\n      },\n      color: {\n        value: new THREE$i.Color(color)\n      },\n      power: {\n        value: power\n      },\n      hollowRadius: {\n        value: hollowRadius\n      }\n    }\n  });\n}\nfunction createGlowGeometry(geometry, size) {\n  var glowGeometry = geometry.clone();\n\n  // Resize vertex positions according to normals\n  var position = new Float32Array(geometry.attributes.position.count * 3);\n  for (var idx = 0, len = position.length; idx < len; idx++) {\n    var normal = geometry.attributes.normal.array[idx];\n    var curPos = geometry.attributes.position.array[idx];\n    position[idx] = curPos + normal * size;\n  }\n  glowGeometry.setAttribute('position', new THREE$i.BufferAttribute(position, 3));\n  return glowGeometry;\n}\nvar GlowMesh = /*#__PURE__*/function (_THREE$Mesh) {\n  function GlowMesh(geometry) {\n    var _this;\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref$color = _ref.color,\n      color = _ref$color === void 0 ? 'gold' : _ref$color,\n      _ref$size = _ref.size,\n      size = _ref$size === void 0 ? 2 : _ref$size,\n      _ref$coefficient = _ref.coefficient,\n      coefficient = _ref$coefficient === void 0 ? 0.5 : _ref$coefficient,\n      _ref$power = _ref.power,\n      power = _ref$power === void 0 ? 1 : _ref$power,\n      _ref$hollowRadius = _ref.hollowRadius,\n      hollowRadius = _ref$hollowRadius === void 0 ? 0 : _ref$hollowRadius,\n      _ref$backside = _ref.backside,\n      backside = _ref$backside === void 0 ? true : _ref$backside;\n    _classCallCheck(this, GlowMesh);\n    _this = _callSuper(this, GlowMesh);\n    var glowGeometry = createGlowGeometry(geometry, size);\n    var glowMaterial = createGlowMaterial(coefficient, color, power, hollowRadius);\n    backside && (glowMaterial.side = THREE$i.BackSide);\n    _this.geometry = glowGeometry;\n    _this.material = glowMaterial;\n    return _this;\n  }\n  _inherits(GlowMesh, _THREE$Mesh);\n  return _createClass(GlowMesh);\n}(THREE$i.Mesh);\n\nvar THREE$h = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  Color: Color,\n  Group: Group,\n  LineBasicMaterial: LineBasicMaterial,\n  LineSegments: LineSegments,\n  Mesh: Mesh,\n  MeshPhongMaterial: MeshPhongMaterial,\n  SphereGeometry: SphereGeometry,\n  SRGBColorSpace: SRGBColorSpace,\n  TextureLoader: TextureLoader\n};\n\n//\n\nvar GlobeLayerKapsule = Kapsule({\n  props: {\n    globeImageUrl: {},\n    bumpImageUrl: {},\n    showGlobe: {\n      \"default\": true,\n      onChange: function onChange(showGlobe, state) {\n        state.globeGroup.visible = !!showGlobe;\n      },\n      triggerUpdate: false\n    },\n    showGraticules: {\n      \"default\": false,\n      onChange: function onChange(showGraticules, state) {\n        state.graticulesObj.visible = !!showGraticules;\n      },\n      triggerUpdate: false\n    },\n    showAtmosphere: {\n      \"default\": true,\n      onChange: function onChange(showAtmosphere, state) {\n        state.atmosphereObj && (state.atmosphereObj.visible = !!showAtmosphere);\n      },\n      triggerUpdate: false\n    },\n    atmosphereColor: {\n      \"default\": 'lightskyblue'\n    },\n    atmosphereAltitude: {\n      \"default\": 0.15\n    },\n    globeCurvatureResolution: {\n      \"default\": 4\n    },\n    globeTileEngineUrl: {\n      onChange: function onChange(v, state) {\n        state.tileEngine.tileUrl = v;\n      }\n    },\n    globeTileEngineMaxLevel: {\n      \"default\": 17,\n      onChange: function onChange(v, state) {\n        state.tileEngine.maxLevel = v;\n      },\n      triggerUpdate: false\n    },\n    updatePov: {\n      onChange: function onChange(v, state) {\n        state.tileEngine.updatePov(v);\n      },\n      triggerUpdate: false\n    },\n    onReady: {\n      \"default\": function _default() {},\n      triggerUpdate: false\n    }\n  },\n  methods: {\n    globeMaterial: function globeMaterial(state, _globeMaterial) {\n      if (_globeMaterial !== undefined) {\n        state.globeObj.material = _globeMaterial || state.defaultGlobeMaterial;\n        return this;\n      }\n      return state.globeObj.material;\n    },\n    globeTileEngineClearCache: function globeTileEngineClearCache(state) {\n      state.tileEngine.clearTiles();\n    },\n    _destructor: function _destructor(state) {\n      _deallocate(state.globeObj);\n      _deallocate(state.tileEngine);\n      _deallocate(state.graticulesObj);\n    }\n  },\n  stateInit: function stateInit() {\n    // create globe\n    var defaultGlobeMaterial = new THREE$h.MeshPhongMaterial({\n      color: 0x000000\n    });\n    var globeObj = new THREE$h.Mesh(undefined, defaultGlobeMaterial);\n    globeObj.rotation.y = -Math.PI / 2; // face prime meridian along Z axis\n\n    // Create empty tile engine\n    var tileEngine = new SlippyMap(GLOBE_RADIUS);\n\n    // Group including globe and tile engine\n    var globeGroup = new THREE$h.Group();\n    globeGroup.__globeObjType = 'globe'; // Add object type\n    globeGroup.add(globeObj);\n    globeGroup.add(tileEngine);\n\n    // create graticules\n    var graticulesObj = new THREE$h.LineSegments(new GeoJsonGeometry(geoGraticule10(), GLOBE_RADIUS, 2), new THREE$h.LineBasicMaterial({\n      color: 'lightgrey',\n      transparent: true,\n      opacity: 0.1\n    }));\n    return {\n      globeGroup: globeGroup,\n      globeObj: globeObj,\n      graticulesObj: graticulesObj,\n      defaultGlobeMaterial: defaultGlobeMaterial,\n      tileEngine: tileEngine\n    };\n  },\n  init: function init(threeObj, state) {\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.scene.add(state.globeGroup); // add globe\n    state.scene.add(state.graticulesObj); // add graticules\n\n    state.ready = false;\n  },\n  update: function update(state, changedProps) {\n    var globeMaterial = state.globeObj.material;\n\n    // Hide globeObj if it's representing tiles\n    state.tileEngine.visible = !(state.globeObj.visible = !state.globeTileEngineUrl);\n    if (changedProps.hasOwnProperty('globeCurvatureResolution')) {\n      var _state$globeObj$geome;\n      (_state$globeObj$geome = state.globeObj.geometry) === null || _state$globeObj$geome === void 0 || _state$globeObj$geome.dispose();\n      var widthSegments = Math.max(4, Math.round(360 / state.globeCurvatureResolution));\n      state.globeObj.geometry = new THREE$h.SphereGeometry(GLOBE_RADIUS, widthSegments, widthSegments / 2);\n      state.tileEngine.curvatureResolution = state.globeCurvatureResolution;\n    }\n    if (changedProps.hasOwnProperty('globeImageUrl')) {\n      if (!state.globeImageUrl) {\n        // Black globe if no image\n        !globeMaterial.color && (globeMaterial.color = new THREE$h.Color(0x000000));\n      } else {\n        new THREE$h.TextureLoader().load(state.globeImageUrl, function (texture) {\n          var _globeMaterial$map;\n          texture.colorSpace = THREE$h.SRGBColorSpace;\n          (_globeMaterial$map = globeMaterial.map) === null || _globeMaterial$map === void 0 || _globeMaterial$map.dispose(); // GC previous texture\n          globeMaterial.map = texture;\n          globeMaterial.color = null;\n          globeMaterial.needsUpdate = true;\n\n          // ready when first globe image finishes loading (asynchronously to allow 1 frame to load texture)\n          !state.ready && (state.ready = true) && setTimeout(state.onReady);\n        });\n      }\n    }\n    if (changedProps.hasOwnProperty('bumpImageUrl')) {\n      if (!state.bumpImageUrl) {\n        globeMaterial.bumpMap = null;\n        globeMaterial.needsUpdate = true;\n      } else {\n        state.bumpImageUrl && new THREE$h.TextureLoader().load(state.bumpImageUrl, function (texture) {\n          var _globeMaterial$bumpMa;\n          (_globeMaterial$bumpMa = globeMaterial.bumpMap) === null || _globeMaterial$bumpMa === void 0 || _globeMaterial$bumpMa.dispose(); // GC previous texture\n          globeMaterial.bumpMap = texture;\n          globeMaterial.needsUpdate = true;\n        });\n      }\n    }\n    if (changedProps.hasOwnProperty('atmosphereColor') || changedProps.hasOwnProperty('atmosphereAltitude')) {\n      if (state.atmosphereObj) {\n        // recycle previous atmosphere object\n        state.scene.remove(state.atmosphereObj);\n        _deallocate(state.atmosphereObj);\n      }\n      if (state.atmosphereColor && state.atmosphereAltitude) {\n        var obj = state.atmosphereObj = new GlowMesh(state.globeObj.geometry, {\n          color: state.atmosphereColor,\n          size: GLOBE_RADIUS * state.atmosphereAltitude,\n          hollowRadius: GLOBE_RADIUS,\n          coefficient: 0.1,\n          power: 3.5 // dispersion\n        });\n        obj.visible = !!state.showAtmosphere;\n        obj.__globeObjType = 'atmosphere'; // Add object type\n        state.scene.add(obj);\n      }\n    }\n    if (!state.ready && (!state.globeImageUrl || state.globeTileEngineUrl)) {\n      // ready immediately if there's no globe image\n      state.ready = true;\n      state.onReady();\n    }\n  }\n});\n\nvar colorStr2Hex = function colorStr2Hex(str) {\n  return isNaN(str) ? parseInt(tinyColor(str).toHex(), 16) : str;\n};\nvar colorAlpha = function colorAlpha(str) {\n  return str && isNaN(str) ? color(str).opacity : 1;\n};\nvar color2ShaderArr = function color2ShaderArr(str) {\n  var includeAlpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  var sRGBColorSpace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var color;\n  var alpha = 1;\n  var rgbaMatch = /^rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.eE+-]+)\\s*\\)$/.exec(str.trim().toLowerCase());\n  if (rgbaMatch) {\n    var _rgbaMatch$slice = rgbaMatch.slice(1),\n      _rgbaMatch$slice2 = _slicedToArray(_rgbaMatch$slice, 4),\n      r = _rgbaMatch$slice2[0],\n      g = _rgbaMatch$slice2[1],\n      b = _rgbaMatch$slice2[2],\n      a = _rgbaMatch$slice2[3];\n    color = new Color(\"rgb(\".concat(+r, \",\").concat(+g, \",\").concat(+b, \")\"));\n    alpha = Math.min(+a, 1);\n  } else {\n    color = new Color(str);\n  }\n  sRGBColorSpace && color.convertLinearToSRGB(); // vertexColors expects linear, but shaders expect sRGB\n\n  var rgbArr = color.toArray();\n  return includeAlpha ? [].concat(_toConsumableArray(rgbArr), [alpha]) : rgbArr;\n};\nfunction setMaterialOpacity(material, opacity, depthWrite) {\n  material.opacity = opacity;\n  material.transparent = opacity < 1;\n  material.depthWrite = opacity >= 1 ; // depthWrite=false recommended for transparent materials, to prevent transparency issues https://discourse.threejs.org/t/threejs-and-the-transparent-problem/11553/31\n\n  return material;\n}\n\nvar THREE$g = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferAttribute: BufferAttribute\n};\nfunction array2BufferAttr(data) {\n  var itemSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var ArrayClass = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Float32Array;\n  if (itemSize === 1) {\n    // edge case handle for improved performance\n    return new THREE$g.BufferAttribute(new ArrayClass(data), itemSize);\n  }\n  var ba = new THREE$g.BufferAttribute(new ArrayClass(data.length * itemSize), itemSize);\n  for (var idx = 0, l = data.length; idx < l; idx++) {\n    ba.set(data[idx], idx * itemSize);\n  }\n  return ba;\n}\nfunction bufferAttr2Array(ba) {\n  var itemSize = ba.itemSize;\n  var res = [];\n  for (var i = 0; i < ba.count; i++) {\n    res.push(ba.array.slice(i * itemSize, (i + 1) * itemSize));\n  }\n  return res;\n}\n\nvar _dataBindAttr = /*#__PURE__*/new WeakMap();\nvar _objBindAttr = /*#__PURE__*/new WeakMap();\nvar _removeDelay = /*#__PURE__*/new WeakMap();\nvar ThreeDigest = /*#__PURE__*/function (_DataBindMapper) {\n  function ThreeDigest(scene) {\n    var _this;\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref$dataBindAttr = _ref.dataBindAttr,\n      dataBindAttr = _ref$dataBindAttr === void 0 ? '__data' : _ref$dataBindAttr,\n      _ref$objBindAttr = _ref.objBindAttr,\n      objBindAttr = _ref$objBindAttr === void 0 ? '__threeObj' : _ref$objBindAttr,\n      _ref$removeDelay = _ref.removeDelay,\n      removeDelay = _ref$removeDelay === void 0 ? 0 : _ref$removeDelay;\n    _classCallCheck(this, ThreeDigest);\n    _this = _callSuper(this, ThreeDigest);\n    _defineProperty(_this, \"scene\", void 0);\n    _classPrivateFieldInitSpec(_this, _dataBindAttr, void 0);\n    _classPrivateFieldInitSpec(_this, _objBindAttr, void 0);\n    _classPrivateFieldInitSpec(_this, _removeDelay, void 0);\n    _this.scene = scene;\n    _classPrivateFieldSet2(_dataBindAttr, _this, dataBindAttr);\n    _classPrivateFieldSet2(_objBindAttr, _this, objBindAttr);\n    _classPrivateFieldSet2(_removeDelay, _this, removeDelay);\n    _this.onRemoveObj(function () {});\n    return _this;\n  }\n  _inherits(ThreeDigest, _DataBindMapper);\n  return _createClass(ThreeDigest, [{\n    key: \"onCreateObj\",\n    value: function onCreateObj(fn) {\n      var _this2 = this;\n      _superPropGet(ThreeDigest, \"onCreateObj\", this)([function (d) {\n        var obj = fn(d);\n        d[_classPrivateFieldGet2(_objBindAttr, _this2)] = obj;\n        obj[_classPrivateFieldGet2(_dataBindAttr, _this2)] = d;\n        _this2.scene.add(obj);\n        return obj;\n      }]);\n      return this;\n    }\n  }, {\n    key: \"onRemoveObj\",\n    value: function onRemoveObj(fn) {\n      var _this3 = this;\n      _superPropGet(ThreeDigest, \"onRemoveObj\", this)([function (obj, dId) {\n        var d = _superPropGet(ThreeDigest, \"getData\", _this3)([obj]);\n        fn(obj, dId);\n        var removeFn = function removeFn() {\n          _this3.scene.remove(obj);\n          _deallocate(obj);\n          delete d[_classPrivateFieldGet2(_objBindAttr, _this3)];\n        };\n        _classPrivateFieldGet2(_removeDelay, _this3) ? setTimeout(removeFn, _classPrivateFieldGet2(_removeDelay, _this3)) : removeFn();\n      }]);\n      return this;\n    }\n  }]);\n}(DataBindMapper);\n\nvar THREE$f = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferGeometry: BufferGeometry,\n  CylinderGeometry: CylinderGeometry,\n  Matrix4: Matrix4,\n  Mesh: Mesh,\n  MeshLambertMaterial: MeshLambertMaterial,\n  Object3D: Object3D,\n  Vector3: Vector3\n};\nvar bfg$2 = Object.assign({}, _bfg);\nvar BufferGeometryUtils$2 = bfg$2.BufferGeometryUtils || bfg$2;\n\n//\n\nvar PointsLayerKapsule = Kapsule({\n  props: {\n    pointsData: {\n      \"default\": []\n    },\n    pointLat: {\n      \"default\": 'lat'\n    },\n    pointLng: {\n      \"default\": 'lng'\n    },\n    pointColor: {\n      \"default\": function _default() {\n        return '#ffffaa';\n      }\n    },\n    pointAltitude: {\n      \"default\": 0.1\n    },\n    // in units of globe radius\n    pointRadius: {\n      \"default\": 0.25\n    },\n    // in deg\n    pointResolution: {\n      \"default\": 12,\n      triggerUpdate: false\n    },\n    // how many slice segments in the cylinder's circumference\n    pointsMerge: {\n      \"default\": false\n    },\n    // boolean. Whether to merge all points into a single mesh for rendering performance\n    pointsTransitionDuration: {\n      \"default\": 1000,\n      triggerUpdate: false\n    } // ms\n  },\n  init: function init(threeObj, state, _ref) {\n    var tweenGroup = _ref.tweenGroup;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.tweenGroup = tweenGroup;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjPoint'\n    });\n  },\n  update: function update(state, changedProps) {\n    // Data accessors\n    var latAccessor = accessorFn(state.pointLat);\n    var lngAccessor = accessorFn(state.pointLng);\n    var altitudeAccessor = accessorFn(state.pointAltitude);\n    var radiusAccessor = accessorFn(state.pointRadius);\n    var colorAccessor = accessorFn(state.pointColor);\n\n    // shared geometry\n    var pointGeometry = new THREE$f.CylinderGeometry(1, 1, 1, state.pointResolution);\n    pointGeometry.applyMatrix4(new THREE$f.Matrix4().makeRotationX(Math.PI / 2));\n    pointGeometry.applyMatrix4(new THREE$f.Matrix4().makeTranslation(0, 0, -0.5));\n    var pxPerDeg = 2 * Math.PI * GLOBE_RADIUS / 360;\n    var pointMaterials = {}; // indexed by color\n\n    if (!state.pointsMerge && changedProps.hasOwnProperty('pointsMerge')) {\n      emptyObject(state.scene); // Empty trailing merged objects\n    }\n    state.dataMapper.scene = state.pointsMerge ? new THREE$f.Object3D() : state.scene; // use fake scene if merging points\n\n    state.dataMapper.onCreateObj(createObj).onUpdateObj(updateObj).digest(state.pointsData);\n    if (state.pointsMerge) {\n      // merge points into a single mesh\n      var pointsGeometry = !state.pointsData.length ? new THREE$f.BufferGeometry() : (BufferGeometryUtils$2.mergeGeometries || BufferGeometryUtils$2.mergeBufferGeometries)(state.pointsData.map(function (d) {\n        var obj = state.dataMapper.getObj(d);\n        var geom = obj.geometry.clone();\n\n        // apply mesh world transform to vertices\n        obj.updateMatrix();\n        geom.applyMatrix4(obj.matrix);\n\n        // color vertices\n        var color = color2ShaderArr(colorAccessor(d));\n        geom.setAttribute('color', array2BufferAttr(Array(geom.getAttribute('position').count).fill(color), 4));\n        return geom;\n      }));\n      var points = new THREE$f.Mesh(pointsGeometry, new THREE$f.MeshLambertMaterial({\n        color: 0xffffff,\n        transparent: true,\n        vertexColors: true\n      }));\n      points.__globeObjType = 'points'; // Add object type\n      points.__data = state.pointsData; // Attach obj data\n\n      state.dataMapper.clear(); // Unbind merged points\n      emptyObject(state.scene);\n      state.scene.add(points);\n    }\n\n    //\n\n    function createObj() {\n      var obj = new THREE$f.Mesh(pointGeometry);\n      obj.__globeObjType = 'point'; // Add object type\n      return obj;\n    }\n    function updateObj(obj, d) {\n      var applyUpdate = function applyUpdate(td) {\n        var _obj$__currentTargetD = obj.__currentTargetD = td,\n          r = _obj$__currentTargetD.r,\n          alt = _obj$__currentTargetD.alt,\n          lat = _obj$__currentTargetD.lat,\n          lng = _obj$__currentTargetD.lng;\n\n        // position cylinder ground\n        Object.assign(obj.position, polar2Cartesian(lat, lng));\n\n        // orientate outwards\n        var globeCenter = state.pointsMerge ? new THREE$f.Vector3(0, 0, 0) : state.scene.localToWorld(new THREE$f.Vector3(0, 0, 0)); // translate from local to world coords\n        obj.lookAt(globeCenter);\n\n        // scale radius and altitude\n        obj.scale.x = obj.scale.y = Math.min(30, r) * pxPerDeg;\n        obj.scale.z = Math.max(alt * GLOBE_RADIUS, 0.1); // avoid non-invertible matrix\n      };\n      var targetD = {\n        alt: +altitudeAccessor(d),\n        r: +radiusAccessor(d),\n        lat: +latAccessor(d),\n        lng: +lngAccessor(d)\n      };\n      var currentTargetD = obj.__currentTargetD || Object.assign({}, targetD, {\n        alt: -1e-3\n      });\n      if (Object.keys(targetD).some(function (k) {\n        return currentTargetD[k] !== targetD[k];\n      })) {\n        if (state.pointsMerge || !state.pointsTransitionDuration || state.pointsTransitionDuration < 0) {\n          // set final position\n          applyUpdate(targetD);\n        } else {\n          // animate\n          state.tweenGroup.add(new Tween(currentTargetD).to(targetD, state.pointsTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyUpdate).onComplete(function () {\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n      }\n      if (!state.pointsMerge) {\n        // Update materials on individual points\n        var color = colorAccessor(d);\n        var opacity = color ? colorAlpha(color) : 0;\n        var showCyl = !!opacity;\n        obj.visible = showCyl;\n        if (showCyl) {\n          if (!pointMaterials.hasOwnProperty(color)) {\n            pointMaterials[color] = new THREE$f.MeshLambertMaterial({\n              color: colorStr2Hex(color),\n              transparent: opacity < 1,\n              opacity: opacity\n            });\n          }\n          obj.material = pointMaterials[color];\n        }\n      }\n    }\n  }\n});\n\nvar dashedLineShaders = function dashedLineShaders() {\n  return {\n    uniforms: {\n      // dash param defaults, all relative to full length\n      dashOffset: {\n        value: 0\n      },\n      dashSize: {\n        value: 1\n      },\n      gapSize: {\n        value: 0\n      },\n      dashTranslate: {\n        value: 0\n      } // used for animating the dash\n    },\n    vertexShader: \"\\n    \".concat(ShaderChunk.common, \"\\n    \").concat(ShaderChunk.logdepthbuf_pars_vertex, \"\\n  \\n    uniform float dashTranslate; \\n\\n    attribute vec4 color;\\n    varying vec4 vColor;\\n    \\n    attribute float relDistance;\\n    varying float vRelDistance;\\n\\n    void main() {\\n      // pass through colors and distances\\n      vColor = color;\\n      vRelDistance = relDistance + dashTranslate;\\n      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n  \\n      \").concat(ShaderChunk.logdepthbuf_vertex, \"\\n    }\\n  \"),\n    fragmentShader: \"\\n    \".concat(ShaderChunk.logdepthbuf_pars_fragment, \"\\n\\n    uniform float dashOffset; \\n    uniform float dashSize;\\n    uniform float gapSize; \\n    \\n    varying vec4 vColor;\\n    varying float vRelDistance;\\n    \\n    void main() {\\n      // ignore pixels in the gap\\n      if (vRelDistance < dashOffset) discard;\\n      if (mod(vRelDistance - dashOffset, dashSize + gapSize) > dashSize) discard;\\n    \\n      // set px color: [r, g, b, a], interpolated between vertices \\n      gl_FragColor = vColor; \\n  \\n      \").concat(ShaderChunk.logdepthbuf_fragment, \"\\n    }\\n  \")\n  };\n};\nvar invisibleUndergroundShaderExtend = function invisibleUndergroundShaderExtend(shader) {\n  shader.uniforms.uSurfaceRadius = {\n    type: 'float',\n    value: 0\n  };\n  shader.vertexShader = ('attribute float surfaceRadius;\\nvarying float vSurfaceRadius;\\nvarying vec3 vPos;\\n' + shader.vertexShader).replace('void main() {', ['void main() {', 'vSurfaceRadius = surfaceRadius;', 'vPos = position;'].join('\\n'));\n  shader.fragmentShader = ('uniform float uSurfaceRadius;\\nvarying float vSurfaceRadius;\\nvarying vec3 vPos;\\n' + shader.fragmentShader).replace('void main() {', ['void main() {', 'if (length(vPos) < max(uSurfaceRadius, vSurfaceRadius)) discard;'].join('\\n'));\n  return shader;\n};\nvar setRadiusShaderExtend = function setRadiusShaderExtend(shader) {\n  shader.vertexShader = \"\\n    attribute float r;\\n    \\n    const float PI = 3.1415926535897932384626433832795;\\n    float toRad(in float a) {\\n      return a * PI / 180.0;\\n    }\\n    \\n    vec3 Polar2Cartesian(in vec3 c) { // [lat, lng, r]\\n      float phi = toRad(90.0 - c.x);\\n      float theta = toRad(90.0 - c.y);\\n      float r = c.z;\\n      return vec3( // x,y,z\\n        r * sin(phi) * cos(theta),\\n        r * cos(phi),\\n        r * sin(phi) * sin(theta)\\n      );\\n    }\\n    \\n    vec2 Cartesian2Polar(in vec3 p) {\\n      float r = sqrt(p.x * p.x + p.y * p.y + p.z * p.z);\\n      float phi = acos(p.y / r);\\n      float theta = atan(p.z, p.x);\\n      return vec2( // lat,lng\\n        90.0 - phi * 180.0 / PI,\\n        90.0 - theta * 180.0 / PI - (theta < -PI / 2.0 ? 360.0 : 0.0)\\n      );\\n    }\\n    \".concat(shader.vertexShader.replace('}', \"                  \\n        vec3 pos = Polar2Cartesian(vec3(Cartesian2Polar(position), r));\\n        gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\\n      }\\n    \"), \"\\n  \");\n  return shader;\n};\n\n//\n\nvar applyShaderExtensionToMaterial = function applyShaderExtensionToMaterial(material, extensionFn) {\n  material.onBeforeCompile = function (shader) {\n    material.userData.shader = extensionFn(shader);\n  };\n  return material;\n};\nvar setExtendedMaterialUniforms = function setExtendedMaterialUniforms(material) {\n  var uniformsFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (u) {\n    return u;\n  };\n  if (material.userData.shader) {\n    uniformsFn(material.userData.shader.uniforms);\n  } else {\n    var curFn = material.onBeforeCompile;\n    material.onBeforeCompile = function (shader) {\n      curFn(shader);\n      uniformsFn(shader.uniforms);\n    };\n  }\n};\n\nvar _excluded = [\"stroke\"];\nvar THREE$e = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferGeometry: BufferGeometry,\n  CubicBezierCurve3: CubicBezierCurve3,\n  Curve: Curve,\n  Group: Group,\n  Line: Line,\n  Mesh: Mesh,\n  NormalBlending: NormalBlending,\n  ShaderMaterial: ShaderMaterial,\n  TubeGeometry: TubeGeometry,\n  Vector3: Vector3\n};\nvar FrameTicker$2 = _FrameTicker[\"default\"] || _FrameTicker;\n\n//\n\nvar ArcsLayerKapsule = Kapsule({\n  props: {\n    arcsData: {\n      \"default\": []\n    },\n    arcStartLat: {\n      \"default\": 'startLat'\n    },\n    arcStartLng: {\n      \"default\": 'startLng'\n    },\n    arcStartAltitude: {\n      \"default\": 0\n    },\n    arcEndLat: {\n      \"default\": 'endLat'\n    },\n    arcEndLng: {\n      \"default\": 'endLng'\n    },\n    arcEndAltitude: {\n      \"default\": 0\n    },\n    arcColor: {\n      \"default\": function _default() {\n        return '#ffffaa';\n      }\n    },\n    // single color, array of colors or color interpolation fn\n    arcAltitude: {},\n    // in units of globe radius\n    arcAltitudeAutoScale: {\n      \"default\": 0.5\n    },\n    // scale altitude proportional to great-arc distance between the two points\n    arcStroke: {},\n    // in deg\n    arcCurveResolution: {\n      \"default\": 64,\n      triggerUpdate: false\n    },\n    // how many straight segments in the curve\n    arcCircularResolution: {\n      \"default\": 6,\n      triggerUpdate: false\n    },\n    // how many slice segments in the tube's circumference\n    arcDashLength: {\n      \"default\": 1\n    },\n    // in units of line length\n    arcDashGap: {\n      \"default\": 0\n    },\n    arcDashInitialGap: {\n      \"default\": 0\n    },\n    arcDashAnimateTime: {\n      \"default\": 0\n    },\n    // ms\n    arcsTransitionDuration: {\n      \"default\": 1000,\n      triggerUpdate: false\n    } // ms\n  },\n  methods: {\n    pauseAnimation: function pauseAnimation(state) {\n      var _state$ticker;\n      (_state$ticker = state.ticker) === null || _state$ticker === void 0 || _state$ticker.pause();\n    },\n    resumeAnimation: function resumeAnimation(state) {\n      var _state$ticker2;\n      (_state$ticker2 = state.ticker) === null || _state$ticker2 === void 0 || _state$ticker2.resume();\n    },\n    _destructor: function _destructor(state) {\n      var _state$ticker3;\n      state.sharedMaterial.dispose();\n      (_state$ticker3 = state.ticker) === null || _state$ticker3 === void 0 || _state$ticker3.dispose();\n    }\n  },\n  stateInit: function stateInit(_ref) {\n    var tweenGroup = _ref.tweenGroup;\n    return {\n      tweenGroup: tweenGroup,\n      ticker: new FrameTicker$2(),\n      sharedMaterial: new THREE$e.ShaderMaterial(_objectSpread2(_objectSpread2({}, dashedLineShaders()), {}, {\n        transparent: true,\n        blending: THREE$e.NormalBlending\n      }))\n    };\n  },\n  init: function init(threeObj, state) {\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjArc'\n    }).onCreateObj(function () {\n      var obj = new THREE$e.Group(); // populated in updateObj\n\n      obj.__globeObjType = 'arc'; // Add object type\n      return obj;\n    });\n\n    // Kick-off dash animations\n    state.ticker.onTick.add(function (_, timeDelta) {\n      state.dataMapper.entries().map(function (_ref2) {\n        var _ref3 = _slicedToArray(_ref2, 2),\n          obj = _ref3[1];\n        return obj;\n      }).filter(function (o) {\n        return o.children.length && o.children[0].material && o.children[0].__dashAnimateStep;\n      }).forEach(function (o) {\n        var obj = o.children[0];\n        var step = obj.__dashAnimateStep * timeDelta;\n        var curTranslate = obj.material.uniforms.dashTranslate.value % 1e9; // reset after 1B loops\n        obj.material.uniforms.dashTranslate.value = curTranslate + step;\n      });\n    });\n  },\n  update: function update(state) {\n    // Data accessors\n    var startLatAccessor = accessorFn(state.arcStartLat);\n    var startLngAccessor = accessorFn(state.arcStartLng);\n    var startAltAccessor = accessorFn(state.arcStartAltitude);\n    var endLatAccessor = accessorFn(state.arcEndLat);\n    var endLngAccessor = accessorFn(state.arcEndLng);\n    var endAltAccessor = accessorFn(state.arcEndAltitude);\n    var altitudeAccessor = accessorFn(state.arcAltitude);\n    var altitudeAutoScaleAccessor = accessorFn(state.arcAltitudeAutoScale);\n    var strokeAccessor = accessorFn(state.arcStroke);\n    var colorAccessor = accessorFn(state.arcColor);\n    var dashLengthAccessor = accessorFn(state.arcDashLength);\n    var dashGapAccessor = accessorFn(state.arcDashGap);\n    var dashInitialGapAccessor = accessorFn(state.arcDashInitialGap);\n    var dashAnimateTimeAccessor = accessorFn(state.arcDashAnimateTime);\n    state.dataMapper.onUpdateObj(function (group, arc) {\n      var stroke = strokeAccessor(arc);\n      var useTube = stroke !== null && stroke !== undefined;\n      if (!group.children.length || useTube !== (group.children[0].type === 'Mesh')) {\n        // create or swap object types\n        emptyObject(group);\n        var _obj = useTube ? new THREE$e.Mesh() : new THREE$e.Line(new THREE$e.BufferGeometry());\n        _obj.material = state.sharedMaterial.clone(); // Separate material instance per object to have dedicated uniforms (but shared shaders)\n\n        group.add(_obj);\n      }\n      var obj = group.children[0];\n\n      // set dash uniforms\n      Object.assign(obj.material.uniforms, {\n        dashSize: {\n          value: dashLengthAccessor(arc)\n        },\n        gapSize: {\n          value: dashGapAccessor(arc)\n        },\n        dashOffset: {\n          value: dashInitialGapAccessor(arc)\n        }\n      });\n\n      // set dash animation step\n      var dashAnimateTime = dashAnimateTimeAccessor(arc);\n      obj.__dashAnimateStep = dashAnimateTime > 0 ? 1000 / dashAnimateTime : 0; // per second\n\n      // calculate vertex colors (to create gradient)\n      var vertexColorArray = calcColorVertexArray(colorAccessor(arc),\n      // single, array of colors or interpolator\n      state.arcCurveResolution,\n      // numSegments\n      useTube ? state.arcCircularResolution + 1 : 1 // num vertices per segment\n      );\n\n      // calculate vertex relative distances (for dashed lines)\n      var vertexRelDistanceArray = calcVertexRelDistances(state.arcCurveResolution,\n      // numSegments\n      useTube ? state.arcCircularResolution + 1 : 1,\n      // num vertices per segment\n      true // run from end to start, to animate in the correct direction\n      );\n      obj.geometry.setAttribute('color', vertexColorArray);\n      obj.geometry.setAttribute('relDistance', vertexRelDistanceArray);\n      var applyUpdate = function applyUpdate(td) {\n        var _group$__currentTarge = group.__currentTargetD = td,\n          stroke = _group$__currentTarge.stroke,\n          curveD = _objectWithoutProperties(_group$__currentTarge, _excluded);\n        var curve = calcCurve(curveD);\n        if (useTube) {\n          obj.geometry && obj.geometry.dispose();\n          obj.geometry = new THREE$e.TubeGeometry(curve, state.arcCurveResolution, stroke / 2, state.arcCircularResolution);\n          obj.geometry.setAttribute('color', vertexColorArray);\n          obj.geometry.setAttribute('relDistance', vertexRelDistanceArray);\n        } else {\n          obj.geometry.setFromPoints(curve.getPoints(state.arcCurveResolution));\n        }\n      };\n      var targetD = {\n        stroke: stroke,\n        alt: altitudeAccessor(arc),\n        altAutoScale: +altitudeAutoScaleAccessor(arc),\n        startLat: +startLatAccessor(arc),\n        startLng: +startLngAccessor(arc),\n        startAlt: +startAltAccessor(arc),\n        endLat: +endLatAccessor(arc),\n        endLng: +endLngAccessor(arc),\n        endAlt: +endAltAccessor(arc)\n      };\n      var currentTargetD = group.__currentTargetD || Object.assign({}, targetD, {\n        altAutoScale: -1e-3\n      });\n      if (Object.keys(targetD).some(function (k) {\n        return currentTargetD[k] !== targetD[k];\n      })) {\n        if (!state.arcsTransitionDuration || state.arcsTransitionDuration < 0) {\n          // set final position\n          applyUpdate(targetD);\n        } else {\n          // animate\n          state.tweenGroup.add(new Tween(currentTargetD).to(targetD, state.arcsTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyUpdate).onComplete(function () {\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n      }\n    }).digest(state.arcsData);\n\n    //\n\n    function calcCurve(_ref4) {\n      var alt = _ref4.alt,\n        altAutoScale = _ref4.altAutoScale,\n        startLat = _ref4.startLat,\n        startLng = _ref4.startLng,\n        startAlt = _ref4.startAlt,\n        endLat = _ref4.endLat,\n        endLng = _ref4.endLng,\n        endAlt = _ref4.endAlt;\n      var getVec = function getVec(_ref5) {\n        var _ref6 = _slicedToArray(_ref5, 3),\n          lng = _ref6[0],\n          lat = _ref6[1],\n          alt = _ref6[2];\n        var _polar2Cartesian = polar2Cartesian(lat, lng, alt),\n          x = _polar2Cartesian.x,\n          y = _polar2Cartesian.y,\n          z = _polar2Cartesian.z;\n        return new THREE$e.Vector3(x, y, z);\n      };\n\n      //calculate curve\n      var startPnt = [startLng, startLat];\n      var endPnt = [endLng, endLat];\n      var altitude = alt;\n      (altitude === null || altitude === undefined) && (\n      // by default set altitude proportional to the great-arc distance\n      altitude = geoDistance$1(startPnt, endPnt) / 2 * altAutoScale + Math.max(startAlt, endAlt));\n      if (altitude || startAlt || endAlt) {\n        var interpolate = geoInterpolate(startPnt, endPnt);\n        var calcAltCp = function calcAltCp(a0, a1) {\n          return a1 + (a1 - a0) * (a0 < a1 ? 0.5 : 0.25);\n        };\n        var _map = [0.25, 0.75].map(function (t) {\n            return [].concat(_toConsumableArray(interpolate(t)), [calcAltCp(t < 0.5 ? startAlt : endAlt, altitude)]);\n          }),\n          _map2 = _slicedToArray(_map, 2),\n          m1Pnt = _map2[0],\n          m2Pnt = _map2[1];\n        var curve = _construct(THREE$e.CubicBezierCurve3, _toConsumableArray([[].concat(startPnt, [startAlt]), m1Pnt, m2Pnt, [].concat(endPnt, [endAlt])].map(getVec)));\n        return curve;\n      } else {\n        // ground line\n        var _alt = 0.001; // slightly above the ground to prevent occlusion\n        return calcSphereArc.apply(void 0, _toConsumableArray([[].concat(startPnt, [_alt]), [].concat(endPnt, [_alt])].map(getVec)));\n      }\n\n      //\n\n      function calcSphereArc(startVec, endVec) {\n        var angle = startVec.angleTo(endVec);\n        var getGreatCirclePoint = angle === 0 ? function () {\n          return startVec.clone();\n        } // points exactly overlap\n        : function (t) {\n          return new THREE$e.Vector3().addVectors(startVec.clone().multiplyScalar(Math.sin((1 - t) * angle)), endVec.clone().multiplyScalar(Math.sin(t * angle))).divideScalar(Math.sin(angle));\n        };\n        var sphereArc = new THREE$e.Curve();\n        sphereArc.getPoint = getGreatCirclePoint;\n        return sphereArc;\n      }\n    }\n    function calcColorVertexArray(colors, numSegments) {\n      var numVerticesPerSegment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var numVerticesGroup = numSegments + 1; // one between every two segments and two at the ends\n\n      var getVertexColor;\n      if (colors instanceof Array || colors instanceof Function) {\n        var colorInterpolator = colors instanceof Array ? scaleLinear() // array of colors, interpolate at each step\n        .domain(colors.map(function (_, idx) {\n          return idx / (colors.length - 1);\n        })) // same number of stops as colors\n        .range(colors) : colors; // already interpolator fn\n\n        getVertexColor = function getVertexColor(t) {\n          return color2ShaderArr(colorInterpolator(t), true, true);\n        };\n      } else {\n        // single color, use constant\n        var vertexColor = color2ShaderArr(colors, true, true);\n        getVertexColor = function getVertexColor() {\n          return vertexColor;\n        };\n      }\n      var vertexColors = [];\n      for (var v = 0, l = numVerticesGroup; v < l; v++) {\n        var _vertexColor = getVertexColor(v / (l - 1));\n        for (var s = 0; s < numVerticesPerSegment; s++) {\n          vertexColors.push(_vertexColor);\n        }\n      }\n      return array2BufferAttr(vertexColors, 4);\n    }\n    function calcVertexRelDistances(numSegments) {\n      var numVerticesPerSegment = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var invert = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var numVerticesGroup = numSegments + 1; // one between every two segments and two at the ends\n\n      var vertexDistances = [];\n      for (var v = 0, l = numVerticesGroup; v < l; v++) {\n        var relDistance = v / (l - 1);\n        for (var s = 0; s < numVerticesPerSegment; s++) {\n          vertexDistances.push(relDistance);\n        }\n      }\n      invert && vertexDistances.reverse();\n      return array2BufferAttr(vertexDistances, 1);\n    }\n  }\n});\n\nvar THREE$d = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferGeometry: BufferGeometry,\n  DoubleSide: DoubleSide,\n  Mesh: Mesh,\n  MeshLambertMaterial: MeshLambertMaterial,\n  Object3D: Object3D\n};\nvar bfg$1 = Object.assign({}, _bfg);\nvar BufferGeometryUtils$1 = bfg$1.BufferGeometryUtils || bfg$1;\n\n//\n\nvar HexBinLayerKapsule = Kapsule({\n  props: {\n    hexBinPointsData: {\n      \"default\": []\n    },\n    hexBinPointLat: {\n      \"default\": 'lat'\n    },\n    hexBinPointLng: {\n      \"default\": 'lng'\n    },\n    hexBinPointWeight: {\n      \"default\": 1\n    },\n    hexBinResolution: {\n      \"default\": 4\n    },\n    // 0-15. Level 0 partitions the earth in 122 (mostly) hexagonal cells. Each subsequent level sub-divides the previous in roughly 7 hexagons.\n    hexMargin: {\n      \"default\": 0.2\n    },\n    // in fraction of diameter\n    hexTopCurvatureResolution: {\n      \"default\": 5\n    },\n    // in angular degrees\n    hexTopColor: {\n      \"default\": function _default() {\n        return '#ffffaa';\n      }\n    },\n    hexSideColor: {\n      \"default\": function _default() {\n        return '#ffffaa';\n      }\n    },\n    hexAltitude: {\n      \"default\": function _default(_ref) {\n        var sumWeight = _ref.sumWeight;\n        return sumWeight * 0.01;\n      }\n    },\n    // in units of globe radius\n    hexBinMerge: {\n      \"default\": false\n    },\n    // boolean. Whether to merge all hex geometries into a single mesh for rendering performance\n    hexTransitionDuration: {\n      \"default\": 1000,\n      triggerUpdate: false\n    } // ms\n  },\n  init: function init(threeObj, state, _ref2) {\n    var tweenGroup = _ref2.tweenGroup;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.tweenGroup = tweenGroup;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjHexbin'\n    });\n  },\n  update: function update(state, changedProps) {\n    // Accessors\n    var latAccessor = accessorFn(state.hexBinPointLat);\n    var lngAccessor = accessorFn(state.hexBinPointLng);\n    var weightAccessor = accessorFn(state.hexBinPointWeight);\n    var altitudeAccessor = accessorFn(state.hexAltitude);\n    var topColorAccessor = accessorFn(state.hexTopColor);\n    var sideColorAccessor = accessorFn(state.hexSideColor);\n    var marginAccessor = accessorFn(state.hexMargin);\n    var byH3Idx = indexBy(state.hexBinPointsData.map(function (d) {\n      return _objectSpread2(_objectSpread2({}, d), {}, {\n        h3Idx: latLngToCell(latAccessor(d), lngAccessor(d), state.hexBinResolution)\n      });\n    }), 'h3Idx');\n    var hexBins = Object.entries(byH3Idx).map(function (_ref3) {\n      var _ref4 = _slicedToArray(_ref3, 2),\n        h3Idx = _ref4[0],\n        points = _ref4[1];\n      return {\n        h3Idx: h3Idx,\n        points: points,\n        sumWeight: points.reduce(function (agg, d) {\n          return agg + +weightAccessor(d);\n        }, 0)\n      };\n    });\n    var hexMaterials = {}; // indexed by color\n\n    if (!state.hexBinMerge && changedProps.hasOwnProperty('hexBinMerge')) {\n      emptyObject(state.scene); // Empty trailing merged objects\n    }\n    state.dataMapper.scene = state.hexBinMerge ? new THREE$d.Object3D() : state.scene; // use fake scene if merging hex points\n\n    state.dataMapper.id(function (d) {\n      return d.h3Idx;\n    }).onCreateObj(createObj).onUpdateObj(updateObj).digest(hexBins);\n    if (state.hexBinMerge) {\n      // merge points into a single mesh\n      var hexPointsGeometry = !hexBins.length ? new THREE$d.BufferGeometry() : (BufferGeometryUtils$1.mergeGeometries || BufferGeometryUtils$1.mergeBufferGeometries)(hexBins.map(function (d) {\n        var obj = state.dataMapper.getObj(d);\n\n        // use non-indexed geometry so that groups can be colored separately, otherwise different groups share vertices\n        var geom = obj.geometry.toNonIndexed();\n\n        // apply mesh world transform to vertices\n        obj.updateMatrix();\n        geom.applyMatrix4(obj.matrix);\n\n        // color vertices\n        var topColor = color2ShaderArr(topColorAccessor(d));\n        var sideColor = color2ShaderArr(sideColorAccessor(d));\n        var nVertices = geom.getAttribute('position').count;\n        var topFaceIdx = geom.groups[0].count; // starting vertex index of top group\n        geom.setAttribute('color', array2BufferAttr(_toConsumableArray(new Array(nVertices)).map(function (_, idx) {\n          return idx >= topFaceIdx ? topColor : sideColor;\n        }), 4));\n        return geom;\n      }));\n      var hexMaterial = new THREE$d.MeshLambertMaterial({\n        color: 0xffffff,\n        transparent: true,\n        vertexColors: true,\n        side: THREE$d.DoubleSide\n      });\n      hexMaterial.onBeforeCompile = function (shader) {\n        hexMaterial.userData.shader = invisibleUndergroundShaderExtend(shader);\n      };\n      var hexPoints = new THREE$d.Mesh(hexPointsGeometry, hexMaterial);\n      hexPoints.__globeObjType = 'hexBinPoints'; // Add object type\n      hexPoints.__data = hexBins; // Attach obj data\n\n      state.dataMapper.clear(); // Unbind merged points\n      emptyObject(state.scene);\n      state.scene.add(hexPoints);\n    }\n\n    //\n\n    function createObj(d) {\n      var obj = new THREE$d.Mesh();\n      obj.__hexCenter = cellToLatLng(d.h3Idx);\n      obj.__hexGeoJson = cellToBoundary(d.h3Idx, true).reverse(); // correct polygon winding\n\n      // stitch longitudes at the anti-meridian\n      var centerLng = obj.__hexCenter[1];\n      obj.__hexGeoJson.forEach(function (d) {\n        var edgeLng = d[0];\n        if (Math.abs(centerLng - edgeLng) > 170) {\n          // normalize large lng distances\n          d[0] += centerLng > edgeLng ? 360 : -360;\n        }\n      });\n      obj.__globeObjType = 'hexbin'; // Add object type\n      return obj;\n    }\n    function updateObj(obj, d) {\n      // compute new geojson with relative margin\n      var relNum = function relNum(st, end, rat) {\n        return st - (st - end) * rat;\n      };\n      var margin = Math.max(0, Math.min(1, +marginAccessor(d)));\n      var _obj$__hexCenter = _slicedToArray(obj.__hexCenter, 2),\n        clat = _obj$__hexCenter[0],\n        clng = _obj$__hexCenter[1];\n      var geoJson = margin === 0 ? obj.__hexGeoJson : obj.__hexGeoJson.map(function (_ref5) {\n        var _ref6 = _slicedToArray(_ref5, 2),\n          elng = _ref6[0],\n          elat = _ref6[1];\n        return [[elng, clng], [elat, clat]].map(function (_ref7) {\n          var _ref8 = _slicedToArray(_ref7, 2),\n            st = _ref8[0],\n            end = _ref8[1];\n          return relNum(st, end, margin);\n        });\n      });\n      var topCurvatureResolution = state.hexTopCurvatureResolution;\n      obj.geometry && obj.geometry.dispose();\n      obj.geometry = new ConicPolygonGeometry([geoJson], 0, GLOBE_RADIUS, false, true, true, topCurvatureResolution);\n      var targetD = {\n        alt: +altitudeAccessor(d)\n      };\n      var applyUpdate = function applyUpdate(td) {\n        var _obj$__currentTargetD = obj.__currentTargetD = td,\n          alt = _obj$__currentTargetD.alt;\n        obj.scale.x = obj.scale.y = obj.scale.z = 1 + alt; // scale according to altitude\n\n        // update surfaceRadius per vertex\n        var vertexSurfaceRadius = GLOBE_RADIUS / (alt + 1);\n        obj.geometry.setAttribute('surfaceRadius', array2BufferAttr(Array(obj.geometry.getAttribute('position').count).fill(vertexSurfaceRadius), 1));\n      };\n      var currentTargetD = obj.__currentTargetD || Object.assign({}, targetD, {\n        alt: -1e-3\n      });\n      if (Object.keys(targetD).some(function (k) {\n        return currentTargetD[k] !== targetD[k];\n      })) {\n        if (state.hexBinMerge || !state.hexTransitionDuration || state.hexTransitionDuration < 0) {\n          // set final position\n          applyUpdate(targetD);\n        } else {\n          // animate\n          state.tweenGroup.add(new Tween(currentTargetD).to(targetD, state.hexTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyUpdate).onComplete(function () {\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n      }\n      if (!state.hexBinMerge) {\n        // Update materials on individual hex points\n        var sideColor = sideColorAccessor(d);\n        var topColor = topColorAccessor(d);\n        [sideColor, topColor].forEach(function (color) {\n          if (!hexMaterials.hasOwnProperty(color)) {\n            var opacity = colorAlpha(color);\n            hexMaterials[color] = applyShaderExtensionToMaterial(new THREE$d.MeshLambertMaterial({\n              color: colorStr2Hex(color),\n              transparent: opacity < 1,\n              opacity: opacity,\n              side: THREE$d.DoubleSide\n            }), invisibleUndergroundShaderExtend);\n          }\n        });\n        obj.material = [sideColor, topColor].map(function (color) {\n          return hexMaterials[color];\n        });\n      }\n    }\n  }\n});\n\nvar sq = function sq(x) {\n  return x * x;\n};\nvar toRad = function toRad(x) {\n  return x * Math.PI / 180;\n};\nfunction geoDistance(a, b) {\n  // on sphere surface, in radians\n  var sqrt = Math.sqrt;\n  var cos = Math.cos;\n  var hav = function hav(x) {\n    return sq(Math.sin(x / 2));\n  };\n  var latA = toRad(a[1]);\n  var latB = toRad(b[1]);\n  var lngA = toRad(a[0]);\n  var lngB = toRad(b[0]);\n\n  // Haversine formula\n  return 2 * Math.asin(sqrt(hav(latB - latA) + cos(latA) * cos(latB) * hav(lngB - lngA)));\n}\nvar sqrt2PI = Math.sqrt(2 * Math.PI);\nfunction gaussianKernel(x, bw) {\n  return Math.exp(-sq(x / bw) / 2) / (bw * sqrt2PI);\n}\nvar getGeoKDE = function getGeoKDE(_ref) {\n  var _ref2 = _slicedToArray(_ref, 2),\n    lng = _ref2[0],\n    lat = _ref2[1];\n  var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n    _ref3$lngAccessor = _ref3.lngAccessor,\n    lngAccessor = _ref3$lngAccessor === void 0 ? function (d) {\n      return d[0];\n    } : _ref3$lngAccessor,\n    _ref3$latAccessor = _ref3.latAccessor,\n    latAccessor = _ref3$latAccessor === void 0 ? function (d) {\n      return d[1];\n    } : _ref3$latAccessor,\n    _ref3$weightAccessor = _ref3.weightAccessor,\n    weightAccessor = _ref3$weightAccessor === void 0 ? function () {\n      return 1;\n    } : _ref3$weightAccessor,\n    bandwidth = _ref3.bandwidth;\n  var pnt = [lng, lat];\n  var bwRad = bandwidth * Math.PI / 180;\n  return sum(data.map(function (d) {\n    var weight = weightAccessor(d);\n    if (!weight) return 0;\n    var dist = geoDistance(pnt, [lngAccessor(d), latAccessor(d)]);\n    return gaussianKernel(dist, bwRad) * weight;\n  }));\n};\n\n// use WebGPU to accelerate computation of kde vals per every coord pair\nvar computeGeoKde = /*#__PURE__*/function () {\n  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(vertexGeoCoords) {\n    var _navigator;\n    var data,\n      _ref5,\n      _ref5$lngAccessor,\n      lngAccessor,\n      _ref5$latAccessor,\n      latAccessor,\n      _ref5$weightAccessor,\n      weightAccessor,\n      bandwidth,\n      BW_RADIUS_INFLUENCE,\n      Fn,\n      If,\n      uniform,\n      storage,\n      _float,\n      instanceIndex,\n      Loop,\n      sqrt,\n      sin,\n      cos,\n      asin,\n      exp,\n      negate,\n      sCoords,\n      sData,\n      res,\n      sRes,\n      PI,\n      sqrt2PI,\n      sq,\n      hav,\n      geoDistance,\n      gaussianKernel,\n      bwRad,\n      maxRRad,\n      n,\n      computeShaderFn,\n      computeNode,\n      renderer,\n      _args = arguments,\n      _t,\n      _t2,\n      _t3;\n    return _regenerator().w(function (_context) {\n      while (1) switch (_context.n) {\n        case 0:\n          data = _args.length > 1 && _args[1] !== undefined ? _args[1] : [];\n          _ref5 = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}, _ref5$lngAccessor = _ref5.lngAccessor, lngAccessor = _ref5$lngAccessor === void 0 ? function (d) {\n            return d[0];\n          } : _ref5$lngAccessor, _ref5$latAccessor = _ref5.latAccessor, latAccessor = _ref5$latAccessor === void 0 ? function (d) {\n            return d[1];\n          } : _ref5$latAccessor, _ref5$weightAccessor = _ref5.weightAccessor, weightAccessor = _ref5$weightAccessor === void 0 ? function () {\n            return 1;\n          } : _ref5$weightAccessor, bandwidth = _ref5.bandwidth;\n          if ((_navigator = navigator) !== null && _navigator !== void 0 && _navigator.gpu) {\n            _context.n = 1;\n            break;\n          }\n          console.warn('WebGPU not enabled in browser. Please consider enabling it to improve performance.');\n          return _context.a(2, vertexGeoCoords.map(function (coords) {\n            return getGeoKDE(coords, data, {\n              lngAccessor: lngAccessor,\n              latAccessor: latAccessor,\n              weightAccessor: weightAccessor,\n              bandwidth: bandwidth\n            });\n          }));\n        case 1:\n          BW_RADIUS_INFLUENCE = 4; // multiplier of bandwidth to set max radius of point influence (exclude points to improve performance)\n          Fn = tsl.Fn, If = tsl.If, uniform = tsl.uniform, storage = tsl.storage, _float = tsl[\"float\"], instanceIndex = tsl.instanceIndex, Loop = tsl.Loop, sqrt = tsl.sqrt, sin = tsl.sin, cos = tsl.cos, asin = tsl.asin, exp = tsl.exp, negate = tsl.negate;\n          sCoords = storage(new StorageInstancedBufferAttribute(new Float32Array(vertexGeoCoords.flat().map(toRad)), 2), 'vec2', vertexGeoCoords.length);\n          sData = storage(new StorageInstancedBufferAttribute(new Float32Array(data.map(function (d) {\n            return [toRad(lngAccessor(d)), toRad(latAccessor(d)), weightAccessor(d)];\n          }).flat()), 3), 'vec3', data.length);\n          res = new StorageInstancedBufferAttribute(vertexGeoCoords.length, 1);\n          sRes = storage(res, 'float', vertexGeoCoords.length);\n          PI = _float(Math.PI);\n          sqrt2PI = sqrt(PI.mul(2));\n          sq = function sq(x) {\n            return x.mul(x);\n          };\n          hav = function hav(x) {\n            return sq(sin(x.div(2)));\n          };\n          geoDistance = function geoDistance(a, b) {\n            // on sphere surface, in radians\n            var latA = _float(a[1]);\n            var latB = _float(b[1]);\n            var lngA = _float(a[0]);\n            var lngB = _float(b[0]);\n\n            // Haversine formula\n            return _float(2).mul(asin(sqrt(hav(latB.sub(latA)).add(cos(latA).mul(cos(latB)).mul(hav(lngB.sub(lngA)))))));\n          };\n          gaussianKernel = function gaussianKernel(x, bw) {\n            return exp(negate(sq(x.div(bw)).div(2))).div(bw.mul(sqrt2PI));\n          };\n          bwRad = uniform(toRad(bandwidth));\n          maxRRad = uniform(toRad(bandwidth * BW_RADIUS_INFLUENCE));\n          n = uniform(data.length);\n          computeShaderFn = Fn(function () {\n            var coords = sCoords.element(instanceIndex);\n            var res = sRes.element(instanceIndex);\n            res.assign(0);\n            Loop(n, function (_ref6) {\n              var i = _ref6.i;\n              var d = sData.element(i);\n              var weight = d.z;\n              If(weight, function () {\n                var dist = geoDistance(d.xy, coords.xy);\n                If(dist && dist.lessThan(maxRRad), function () {\n                  // max degree of influence, beyond is negligible\n                  res.addAssign(gaussianKernel(dist, bwRad).mul(weight));\n                });\n              });\n            });\n          });\n          computeNode = computeShaderFn().compute(vertexGeoCoords.length);\n          renderer = new WebGPURenderer();\n          _context.n = 2;\n          return renderer.computeAsync(computeNode);\n        case 2:\n          _t = Array;\n          _t2 = Float32Array;\n          _context.n = 3;\n          return renderer.getArrayBufferAsync(res);\n        case 3:\n          _t3 = _context.v;\n          return _context.a(2, _t.from.call(_t, new _t2(_t3)));\n      }\n    }, _callee);\n  }));\n  return function computeGeoKde(_x) {\n    return _ref4.apply(this, arguments);\n  };\n}();\n\n/*\nconst basicGpuCompute = async (n = 1000) => {\n  const res = new StorageInstancedBufferAttribute(n, 1);\n  const sRes = storage(res, 'float', n);\n\n  const computeShaderFn = Fn(() => {\n    const uN = uniform(n);\n    const r = sRes.element(instanceIndex);\n    r.assign(float(instanceIndex).div(uN));\n  });\n\n  const computeNode = computeShaderFn().compute(n);\n\n  const renderer = new WebGPURenderer();\n  await renderer.computeAsync(computeNode);\n\n  return Array.from(new Float32Array(await renderer.getArrayBufferAsync(res)));\n}\n*/\n\nvar THREE$c = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  Mesh: Mesh,\n  MeshLambertMaterial: MeshLambertMaterial,\n  SphereGeometry: SphereGeometry\n};\n\n//\n\nvar RES_BW_FACTOR = 3.5; // divider of bandwidth to use in geometry resolution\nvar MIN_RESOLUTION = 0.1; // degrees\nvar NUM_COLORS = 100; // to sample in shader\n\nvar defaultColorInterpolator = function defaultColorInterpolator(t) {\n  var c = color(interpolateTurbo(t)); // turbo, inferno\n  c.opacity = Math.cbrt(t);\n  return c.formatRgb();\n};\nvar HeatmapsLayerKapsule = Kapsule({\n  props: {\n    heatmapsData: {\n      \"default\": []\n    },\n    heatmapPoints: {\n      \"default\": function _default(pnts) {\n        return pnts;\n      }\n    },\n    heatmapPointLat: {\n      \"default\": function _default(d) {\n        return d[0];\n      }\n    },\n    heatmapPointLng: {\n      \"default\": function _default(d) {\n        return d[1];\n      }\n    },\n    heatmapPointWeight: {\n      \"default\": 1\n    },\n    heatmapBandwidth: {\n      \"default\": 2.5\n    },\n    // Gaussian kernel bandwidth, in angular degrees\n    heatmapColorFn: {\n      \"default\": function _default() {\n        return defaultColorInterpolator;\n      }\n    },\n    heatmapColorSaturation: {\n      \"default\": 1.5\n    },\n    // multiplier for color scale max\n    heatmapBaseAltitude: {\n      \"default\": 0.01\n    },\n    // in units of globe radius\n    heatmapTopAltitude: {},\n    // in units of globe radius\n    heatmapsTransitionDuration: {\n      \"default\": 0,\n      triggerUpdate: false\n    } // ms\n  },\n  init: function init(threeObj, state, _ref) {\n    var tweenGroup = _ref.tweenGroup;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.tweenGroup = tweenGroup;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjHeatmap'\n    }).onCreateObj(function () {\n      var obj = new THREE$c.Mesh(new THREE$c.SphereGeometry(GLOBE_RADIUS), applyShaderExtensionToMaterial(new THREE$c.MeshLambertMaterial({\n        vertexColors: true,\n        transparent: true\n      }), setRadiusShaderExtend));\n      obj.__globeObjType = 'heatmap'; // Add object type\n      return obj;\n    });\n  },\n  update: function update(state) {\n    // Accessors\n    var pointsAccessor = accessorFn(state.heatmapPoints);\n    var latPntAccessor = accessorFn(state.heatmapPointLat);\n    var lngPntAccessor = accessorFn(state.heatmapPointLng);\n    var weightPntAccessor = accessorFn(state.heatmapPointWeight);\n    var bandwidthAccessor = accessorFn(state.heatmapBandwidth);\n    var colorFnAccessor = accessorFn(state.heatmapColorFn);\n    var saturationAccessor = accessorFn(state.heatmapColorSaturation);\n    var baseAltitudeAccessor = accessorFn(state.heatmapBaseAltitude);\n    var topAltitudeAccessor = accessorFn(state.heatmapTopAltitude);\n    state.dataMapper.onUpdateObj(function (obj, d) {\n      // Accessors\n      var bandwidth = bandwidthAccessor(d);\n      var colorFn = colorFnAccessor(d);\n      var saturation = saturationAccessor(d);\n      var baseAlt = baseAltitudeAccessor(d);\n      var topAlt = topAltitudeAccessor(d);\n      var pnts = pointsAccessor(d).map(function (pnt) {\n        var lat = latPntAccessor(pnt);\n        var lng = lngPntAccessor(pnt);\n        var _polar2Cartesian = polar2Cartesian(lat, lng),\n          x = _polar2Cartesian.x,\n          y = _polar2Cartesian.y,\n          z = _polar2Cartesian.z;\n        return {\n          x: x,\n          y: y,\n          z: z,\n          lat: lat,\n          lng: lng,\n          weight: weightPntAccessor(pnt)\n        };\n      });\n\n      // Check resolution\n      var resolution = Math.max(MIN_RESOLUTION, bandwidth / RES_BW_FACTOR);\n      var equatorNumSegments = Math.ceil(360 / (resolution || -1));\n      if (obj.geometry.parameters.widthSegments !== equatorNumSegments) {\n        obj.geometry.dispose();\n        obj.geometry = new THREE$c.SphereGeometry(GLOBE_RADIUS, equatorNumSegments, equatorNumSegments / 2);\n      }\n\n      // Get vertex polar coordinates\n      var vertexCoords = bufferAttr2Array(obj.geometry.getAttribute('position'));\n      var vertexGeoCoords = vertexCoords.map(function (_ref2) {\n        var _ref3 = _slicedToArray(_ref2, 3),\n          x = _ref3[0],\n          y = _ref3[1],\n          z = _ref3[2];\n        var _cartesian2Polar = cartesian2Polar({\n            x: x,\n            y: y,\n            z: z\n          }),\n          lng = _cartesian2Polar.lng,\n          lat = _cartesian2Polar.lat;\n        return [lng, lat];\n      });\n\n      // Compute KDE\n      computeGeoKde(vertexGeoCoords, pnts, {\n        latAccessor: function latAccessor(d) {\n          return d.lat;\n        },\n        lngAccessor: function lngAccessor(d) {\n          return d.lng;\n        },\n        weightAccessor: function weightAccessor(d) {\n          return d.weight;\n        },\n        bandwidth: bandwidth\n      }).then(function (kdeVals) {\n        // Animations\n        var colors = _toConsumableArray(new Array(NUM_COLORS)).map(function (_, idx) {\n          return color2ShaderArr(colorFn(idx / (NUM_COLORS - 1)));\n        });\n        var applyUpdate = function applyUpdate(td) {\n          var _obj$__currentTargetD = obj.__currentTargetD = td,\n            kdeVals = _obj$__currentTargetD.kdeVals,\n            topAlt = _obj$__currentTargetD.topAlt,\n            saturation = _obj$__currentTargetD.saturation;\n          var maxVal = max(kdeVals.map(Math.abs)) || 1e-15;\n\n          // Set vertex colors\n          var colorScale = scaleQuantize([0, maxVal / saturation], colors);\n          obj.geometry.setAttribute('color', array2BufferAttr(kdeVals.map(function (v) {\n            return colorScale(Math.abs(v));\n          }), 4));\n\n          // Set altitudes\n          var rScale = scaleLinear([0, maxVal], [GLOBE_RADIUS * (1 + baseAlt), GLOBE_RADIUS * (1 + (topAlt || baseAlt))]);\n          obj.geometry.setAttribute('r', array2BufferAttr(kdeVals.map(rScale)));\n        };\n        var targetD = {\n          kdeVals: kdeVals,\n          topAlt: topAlt,\n          saturation: saturation\n        };\n        var currentTargetD = obj.__currentTargetD || Object.assign({}, targetD, {\n          kdeVals: kdeVals.map(function () {\n            return 0;\n          }),\n          topAlt: !topAlt ? topAlt : baseAlt,\n          saturation: 0.5\n        });\n        // do not interpolate between different length arrays\n        currentTargetD.kdeVals.length !== kdeVals.length && (currentTargetD.kdeVals = kdeVals.slice());\n        if (Object.keys(targetD).some(function (k) {\n          return currentTargetD[k] !== targetD[k];\n        })) {\n          if (!state.heatmapsTransitionDuration || state.heatmapsTransitionDuration < 0) {\n            // set final position\n            applyUpdate(targetD);\n          } else {\n            // animate\n            state.tweenGroup.add(new Tween(currentTargetD).to(targetD, state.heatmapsTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyUpdate).onComplete(function () {\n              state.tweenGroup.remove(this);\n            }).start());\n          }\n        }\n      });\n    }).digest(state.heatmapsData);\n  }\n});\n\nvar THREE$b = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  DoubleSide: DoubleSide,\n  Group: Group,\n  LineBasicMaterial: LineBasicMaterial,\n  LineSegments: LineSegments,\n  Mesh: Mesh,\n  MeshBasicMaterial: MeshBasicMaterial\n};\n\n//\n\nvar PolygonsLayerKapsule = Kapsule({\n  props: {\n    polygonsData: {\n      \"default\": []\n    },\n    polygonGeoJsonGeometry: {\n      \"default\": 'geometry'\n    },\n    polygonSideColor: {\n      \"default\": function _default() {\n        return '#ffffaa';\n      }\n    },\n    polygonSideMaterial: {},\n    polygonCapColor: {\n      \"default\": function _default() {\n        return '#ffffaa';\n      }\n    },\n    polygonCapMaterial: {},\n    polygonStrokeColor: {},\n    polygonAltitude: {\n      \"default\": 0.01\n    },\n    // in units of globe radius\n    polygonCapCurvatureResolution: {\n      \"default\": 5\n    },\n    // in angular degrees\n    polygonsTransitionDuration: {\n      \"default\": 1000,\n      triggerUpdate: false\n    } // ms\n  },\n  init: function init(threeObj, state, _ref) {\n    var tweenGroup = _ref.tweenGroup;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.tweenGroup = tweenGroup;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjPolygon'\n    }).id(function (d) {\n      return d.id;\n    }).onCreateObj(function () {\n      var obj = new THREE$b.Group();\n      obj.__defaultSideMaterial = applyShaderExtensionToMaterial(new THREE$b.MeshBasicMaterial({\n        side: THREE$b.DoubleSide,\n        depthWrite: true\n      }), invisibleUndergroundShaderExtend);\n      obj.__defaultCapMaterial = new THREE$b.MeshBasicMaterial({\n        side: THREE$b.DoubleSide,\n        depthWrite: true\n      });\n\n      // conic geometry\n      obj.add(new THREE$b.Mesh(undefined, [obj.__defaultSideMaterial,\n      // side material\n      obj.__defaultCapMaterial // cap material\n      ]));\n\n      // polygon stroke\n      obj.add(new THREE$b.LineSegments(undefined, new THREE$b.LineBasicMaterial()));\n      obj.__globeObjType = 'polygon'; // Add object type\n\n      return obj;\n    });\n  },\n  update: function update(state) {\n    // Data accessors\n    var geoJsonAccessor = accessorFn(state.polygonGeoJsonGeometry);\n    var altitudeAccessor = accessorFn(state.polygonAltitude);\n    var capCurvatureResolutionAccessor = accessorFn(state.polygonCapCurvatureResolution);\n    var capColorAccessor = accessorFn(state.polygonCapColor);\n    var capMaterialAccessor = accessorFn(state.polygonCapMaterial);\n    var sideColorAccessor = accessorFn(state.polygonSideColor);\n    var sideMaterialAccessor = accessorFn(state.polygonSideMaterial);\n    var strokeColorAccessor = accessorFn(state.polygonStrokeColor);\n    var singlePolygons = [];\n    state.polygonsData.forEach(function (polygon) {\n      var objAttrs = {\n        data: polygon,\n        capColor: capColorAccessor(polygon),\n        capMaterial: capMaterialAccessor(polygon),\n        sideColor: sideColorAccessor(polygon),\n        sideMaterial: sideMaterialAccessor(polygon),\n        strokeColor: strokeColorAccessor(polygon),\n        altitude: +altitudeAccessor(polygon),\n        capCurvatureResolution: +capCurvatureResolutionAccessor(polygon)\n      };\n      var geoJson = geoJsonAccessor(polygon);\n      var geoId = polygon.__id || \"\".concat(Math.round(Math.random() * 1e9)); // generate and stamp polygon ids to keep track in digest\n      polygon.__id = geoId;\n      if (geoJson.type === 'Polygon') {\n        singlePolygons.push(_objectSpread2({\n          id: \"\".concat(geoId, \"_0\"),\n          coords: geoJson.coordinates\n        }, objAttrs));\n      } else if (geoJson.type === 'MultiPolygon') {\n        singlePolygons.push.apply(singlePolygons, _toConsumableArray(geoJson.coordinates.map(function (coords, idx) {\n          return _objectSpread2({\n            id: \"\".concat(geoId, \"_\").concat(idx),\n            coords: coords\n          }, objAttrs);\n        })));\n      } else {\n        console.warn(\"Unsupported GeoJson geometry type: \".concat(geoJson.type, \". Skipping geometry...\"));\n      }\n    });\n    state.dataMapper.onUpdateObj(function (obj, _ref2) {\n      var coords = _ref2.coords,\n        capColor = _ref2.capColor,\n        capMaterial = _ref2.capMaterial,\n        sideColor = _ref2.sideColor,\n        sideMaterial = _ref2.sideMaterial,\n        strokeColor = _ref2.strokeColor,\n        altitude = _ref2.altitude,\n        capCurvatureResolution = _ref2.capCurvatureResolution;\n      var _obj$children = _slicedToArray(obj.children, 2),\n        conicObj = _obj$children[0],\n        strokeObj = _obj$children[1];\n\n      // hide stroke if no color set\n      var addStroke = !!strokeColor;\n      strokeObj.visible = addStroke;\n      var hasCap = !!(capColor || capMaterial);\n      var hasSide = !!(sideColor || sideMaterial);\n\n      // regenerate geometries if needed\n      if (!objMatch(conicObj.geometry.parameters || {}, {\n        polygonGeoJson: coords,\n        curvatureResolution: capCurvatureResolution,\n        closedTop: hasCap,\n        includeSides: hasSide\n      })) {\n        conicObj.geometry && conicObj.geometry.dispose();\n        conicObj.geometry = new ConicPolygonGeometry(coords, 0, GLOBE_RADIUS, false, hasCap, hasSide, capCurvatureResolution);\n      }\n      if (addStroke && (!strokeObj.geometry.parameters || strokeObj.geometry.parameters.geoJson.coordinates !== coords || strokeObj.geometry.parameters.resolution !== capCurvatureResolution)) {\n        strokeObj.geometry && strokeObj.geometry.dispose();\n        strokeObj.geometry = new GeoJsonGeometry({\n          type: 'Polygon',\n          coordinates: coords\n        }, GLOBE_RADIUS, capCurvatureResolution);\n      }\n      var sideIdx = hasSide ? 0 : -1;\n      var capIdx = !hasCap ? -1 : hasSide ? 1 : 0;\n\n      // replace side/cap materials if defined\n      sideIdx >= 0 && (conicObj.material[sideIdx] = sideMaterial || obj.__defaultSideMaterial);\n      capIdx >= 0 && (conicObj.material[capIdx] = capMaterial || obj.__defaultCapMaterial);\n\n      // update default material colors\n      [[!sideMaterial && sideColor, sideIdx], [!capMaterial && capColor, capIdx]].forEach(function (_ref3) {\n        var _ref4 = _slicedToArray(_ref3, 2),\n          color = _ref4[0],\n          materialIdx = _ref4[1];\n        if (!color || materialIdx < 0) return; // skip custom or hidden materials\n\n        // conic object\n        var material = conicObj.material[materialIdx];\n        var opacity = colorAlpha(color);\n        material.color.set(colorStr2Hex(color));\n        material.transparent = opacity < 1;\n        material.opacity = opacity;\n      });\n      if (addStroke) {\n        // stroke object\n        var material = strokeObj.material;\n        var opacity = colorAlpha(strokeColor);\n        material.color.set(colorStr2Hex(strokeColor));\n        material.transparent = opacity < 1;\n        material.opacity = opacity;\n      }\n      var targetD = {\n        alt: altitude\n      };\n      var applyUpdate = function applyUpdate(td) {\n        var _obj$__currentTargetD = obj.__currentTargetD = td,\n          alt = _obj$__currentTargetD.alt;\n        conicObj.scale.x = conicObj.scale.y = conicObj.scale.z = 1 + alt;\n        addStroke && (strokeObj.scale.x = strokeObj.scale.y = strokeObj.scale.z = 1 + alt + 1e-4); // stroke slightly above the conic mesh\n        setExtendedMaterialUniforms(obj.__defaultSideMaterial, function (uniforms) {\n          return uniforms.uSurfaceRadius.value = GLOBE_RADIUS / (alt + 1);\n        }); // update side material scale uniform\n      };\n      var currentTargetD = obj.__currentTargetD || Object.assign({}, targetD, {\n        alt: -1e-3\n      });\n      if (Object.keys(targetD).some(function (k) {\n        return currentTargetD[k] !== targetD[k];\n      })) {\n        if (!state.polygonsTransitionDuration || state.polygonsTransitionDuration < 0 || currentTargetD.alt === targetD.alt) {\n          // set final position\n          applyUpdate(targetD);\n        } else {\n          // animate\n          state.tweenGroup.add(new Tween(currentTargetD).to(targetD, state.polygonsTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyUpdate).onComplete(function () {\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n      }\n    }).digest(singlePolygons);\n  }\n});\nfunction objMatch(obj, attrs) {\n  var compFn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {\n    return function (a, b) {\n      return a === b;\n    };\n  };\n  return Object.entries(attrs).every(function (_ref5) {\n    var _ref6 = _slicedToArray(_ref5, 2),\n      k = _ref6[0],\n      v = _ref6[1];\n    return obj.hasOwnProperty(k) && compFn(k)(obj[k], v);\n  });\n}\n\nvar THREE$a = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferGeometry: BufferGeometry,\n  DoubleSide: DoubleSide,\n  Mesh: Mesh,\n  MeshLambertMaterial: MeshLambertMaterial,\n  Vector3: Vector3\n};\nvar bfg = Object.assign({}, _bfg);\nvar BufferGeometryUtils = bfg.BufferGeometryUtils || bfg;\n\n//\n\nvar HexedPolygonsLayerKapsule = Kapsule({\n  props: {\n    hexPolygonsData: {\n      \"default\": []\n    },\n    hexPolygonGeoJsonGeometry: {\n      \"default\": 'geometry'\n    },\n    hexPolygonColor: {\n      \"default\": function _default() {\n        return '#ffffaa';\n      }\n    },\n    hexPolygonAltitude: {\n      \"default\": 0.001\n    },\n    // in units of globe radius\n    hexPolygonResolution: {\n      \"default\": 3\n    },\n    // 0-15. Level 0 partitions the earth in 122 (mostly) hexagonal cells. Each subsequent level sub-divides the previous in roughly 7 hexagons.\n    hexPolygonMargin: {\n      \"default\": 0.2\n    },\n    // in fraction of hex diameter\n    hexPolygonUseDots: {\n      \"default\": false\n    },\n    // if points should be circular instead of hexagonal\n    hexPolygonCurvatureResolution: {\n      \"default\": 5\n    },\n    // in angular degrees, only relevant for hex tops\n    hexPolygonDotResolution: {\n      \"default\": 12\n    },\n    // how many slice segments in the dot circle's circumference\n    hexPolygonsTransitionDuration: {\n      \"default\": 0,\n      triggerUpdate: false\n    } // ms\n  },\n  init: function init(threeObj, state, _ref) {\n    var tweenGroup = _ref.tweenGroup;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.tweenGroup = tweenGroup;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjHexPolygon'\n    }).onCreateObj(function () {\n      var obj = new THREE$a.Mesh(undefined, new THREE$a.MeshLambertMaterial({\n        side: THREE$a.DoubleSide\n      }));\n      obj.__globeObjType = 'hexPolygon'; // Add object type\n\n      return obj;\n    });\n  },\n  update: function update(state) {\n    // Accessors\n    var geoJsonAccessor = accessorFn(state.hexPolygonGeoJsonGeometry);\n    var colorAccessor = accessorFn(state.hexPolygonColor);\n    var altitudeAccessor = accessorFn(state.hexPolygonAltitude);\n    var resolutionAccessor = accessorFn(state.hexPolygonResolution);\n    var marginAccessor = accessorFn(state.hexPolygonMargin);\n    var useDotsAccessor = accessorFn(state.hexPolygonUseDots);\n    var curvatureResolutionAccessor = accessorFn(state.hexPolygonCurvatureResolution);\n    var dotResolutionAccessor = accessorFn(state.hexPolygonDotResolution);\n    state.dataMapper.onUpdateObj(function (obj, d) {\n      var geoJson = geoJsonAccessor(d);\n      var h3Res = resolutionAccessor(d);\n      var alt = altitudeAccessor(d);\n      var margin = Math.max(0, Math.min(1, +marginAccessor(d)));\n      var useDots = useDotsAccessor(d);\n      var curvatureResolution = curvatureResolutionAccessor(d);\n      var dotResolution = dotResolutionAccessor(d);\n\n      // update material\n      var color = colorAccessor(d);\n      var opacity = colorAlpha(color);\n      obj.material.color.set(colorStr2Hex(color));\n      obj.material.transparent = opacity < 1;\n      obj.material.opacity = opacity;\n      var targetD = {\n        alt: alt,\n        margin: margin,\n        curvatureResolution: curvatureResolution\n      };\n      var memD = {\n        geoJson: geoJson,\n        h3Res: h3Res\n      };\n      var currentTargetD = obj.__currentTargetD || Object.assign({}, targetD, {\n        alt: -1e-3\n      });\n      var currentMemD = obj.__currentMemD || memD;\n      if (Object.keys(targetD).some(function (k) {\n        return currentTargetD[k] !== targetD[k];\n      }) || Object.keys(memD).some(function (k) {\n        return currentMemD[k] !== memD[k];\n      })) {\n        obj.__currentMemD = memD;\n        var h3Idxs = [];\n        if (geoJson.type === 'Polygon') {\n          polygonToCells(geoJson.coordinates, h3Res, true).forEach(function (idx) {\n            return h3Idxs.push(idx);\n          });\n        } else if (geoJson.type === 'MultiPolygon') {\n          geoJson.coordinates.forEach(function (coords) {\n            return polygonToCells(coords, h3Res, true).forEach(function (idx) {\n              return h3Idxs.push(idx);\n            });\n          });\n        } else {\n          console.warn(\"Unsupported GeoJson geometry type: \".concat(geoJson.type, \". Skipping geometry...\"));\n        }\n        var hexBins = h3Idxs.map(function (h3Idx) {\n          var hexCenter = cellToLatLng(h3Idx);\n          var hexGeoJson = cellToBoundary(h3Idx, true).reverse(); // correct polygon winding\n\n          // stitch longitudes at the anti-meridian\n          var centerLng = hexCenter[1];\n          hexGeoJson.forEach(function (d) {\n            var edgeLng = d[0];\n            if (Math.abs(centerLng - edgeLng) > 170) {\n              // normalize large lng distances\n              d[0] += centerLng > edgeLng ? 360 : -360;\n            }\n          });\n          return {\n            h3Idx: h3Idx,\n            hexCenter: hexCenter,\n            hexGeoJson: hexGeoJson\n          };\n        });\n        var applyUpdate = function applyUpdate(td) {\n          var _obj$__currentTargetD = obj.__currentTargetD = td,\n            alt = _obj$__currentTargetD.alt,\n            margin = _obj$__currentTargetD.margin,\n            curvatureResolution = _obj$__currentTargetD.curvatureResolution;\n          obj.geometry && obj.geometry.dispose();\n          obj.geometry = !hexBins.length ? new THREE$a.BufferGeometry() : (BufferGeometryUtils.mergeGeometries || BufferGeometryUtils.mergeBufferGeometries)(hexBins.map(function (h) {\n            var _h$hexCenter = _slicedToArray(h.hexCenter, 2),\n              clat = _h$hexCenter[0],\n              clng = _h$hexCenter[1];\n            if (useDots) {\n              var centerPos = polar2Cartesian(clat, clng, alt);\n              var edgePos = polar2Cartesian(h.hexGeoJson[0][1], h.hexGeoJson[0][0], alt);\n              var r = 0.85 * (1 - margin) * new THREE$a.Vector3(centerPos.x, centerPos.y, centerPos.z).distanceTo(new THREE$a.Vector3(edgePos.x, edgePos.y, edgePos.z));\n              var geometry = new CircleGeometry(r, dotResolution);\n              geometry.rotateX(deg2Rad$1(-clat));\n              geometry.rotateY(deg2Rad$1(clng));\n              geometry.translate(centerPos.x, centerPos.y, centerPos.z);\n              return geometry;\n            } else {\n              var relNum = function relNum(st, end, rat) {\n                return st - (st - end) * rat;\n              };\n\n              // compute new geojson with relative margin\n              var _geoJson = margin === 0 ? h.hexGeoJson : h.hexGeoJson.map(function (_ref2) {\n                var _ref3 = _slicedToArray(_ref2, 2),\n                  elng = _ref3[0],\n                  elat = _ref3[1];\n                return [[elng, clng], [elat, clat]].map(function (_ref4) {\n                  var _ref5 = _slicedToArray(_ref4, 2),\n                    st = _ref5[0],\n                    end = _ref5[1];\n                  return relNum(st, end, margin);\n                });\n              });\n              return new ConicPolygonGeometry([_geoJson], GLOBE_RADIUS, GLOBE_RADIUS * (1 + alt), false, true, false, curvatureResolution);\n            }\n          }));\n        };\n        if (!state.hexPolygonsTransitionDuration || state.hexPolygonsTransitionDuration < 0) {\n          // set final position\n          applyUpdate(targetD);\n        } else {\n          // animate\n          state.tweenGroup.add(new Tween(currentTargetD).to(targetD, state.hexPolygonsTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyUpdate).onComplete(function () {\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n      }\n    }).digest(state.hexPolygonsData);\n  }\n});\n\nvar THREE$9 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  Vector3: Vector3\n};\nfunction interpolateVectors(fromPnts, toPnts) {\n  var extendArr = function extendArr(arr, length) {\n    var repeatItem = arr[arr.length - 1];\n    return [].concat(_toConsumableArray(arr), _toConsumableArray(Array(length - arr.length).fill(repeatItem)));\n  };\n  var arrLength = Math.max(fromPnts.length, toPnts.length);\n  var interpolator = interpolateArray.apply(void 0, _toConsumableArray([fromPnts, toPnts].map(function (pnts) {\n    return pnts.map(function (_ref) {\n      var x = _ref.x,\n        y = _ref.y,\n        z = _ref.z;\n      return [x, y, z];\n    });\n  }).map(function (arr) {\n    return extendArr(arr, arrLength);\n  })));\n  return function (k) {\n    return k === 0 ? fromPnts : k === 1 ? toPnts : interpolator(k).map(function (_ref2) {\n      var _ref3 = _slicedToArray(_ref2, 3),\n        x = _ref3[0],\n        y = _ref3[1],\n        z = _ref3[2];\n      return new THREE$9.Vector3(x, y, z);\n    });\n  };\n}\n\nvar THREE$8 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferGeometry: BufferGeometry,\n  Color: Color,\n  Group: Group,\n  Line: Line,\n  NormalBlending: NormalBlending,\n  ShaderMaterial: ShaderMaterial,\n  Vector3: Vector3\n};\nvar FrameTicker$1 = _FrameTicker[\"default\"] || _FrameTicker;\n\n//\n\nvar PathsLayerKapsule = Kapsule({\n  props: {\n    pathsData: {\n      \"default\": []\n    },\n    pathPoints: {\n      \"default\": function _default(pnts) {\n        return pnts;\n      }\n    },\n    pathPointLat: {\n      \"default\": function _default(arr) {\n        return arr[0];\n      }\n    },\n    pathPointLng: {\n      \"default\": function _default(arr) {\n        return arr[1];\n      }\n    },\n    pathPointAlt: {\n      \"default\": 1e-3\n    },\n    pathResolution: {\n      \"default\": 2\n    },\n    // in deg\n    pathColor: {\n      \"default\": function _default() {\n        return '#ffffaa';\n      }\n    },\n    // single color, array of colors or color interpolation fn\n    pathStroke: {},\n    // in deg\n    pathDashLength: {\n      \"default\": 1\n    },\n    // in units of line length\n    pathDashGap: {\n      \"default\": 0\n    },\n    pathDashInitialGap: {\n      \"default\": 0\n    },\n    pathDashAnimateTime: {\n      \"default\": 0\n    },\n    // ms\n    pathTransitionDuration: {\n      \"default\": 1000,\n      triggerUpdate: false\n    },\n    // ms\n    rendererSize: {} // necessary to set correct fatline proportions\n  },\n  methods: {\n    pauseAnimation: function pauseAnimation(state) {\n      var _state$ticker;\n      (_state$ticker = state.ticker) === null || _state$ticker === void 0 || _state$ticker.pause();\n    },\n    resumeAnimation: function resumeAnimation(state) {\n      var _state$ticker2;\n      (_state$ticker2 = state.ticker) === null || _state$ticker2 === void 0 || _state$ticker2.resume();\n    },\n    _destructor: function _destructor(state) {\n      var _state$ticker3;\n      (_state$ticker3 = state.ticker) === null || _state$ticker3 === void 0 || _state$ticker3.dispose();\n    }\n  },\n  stateInit: function stateInit(_ref) {\n    var tweenGroup = _ref.tweenGroup;\n    return {\n      tweenGroup: tweenGroup,\n      ticker: new FrameTicker$1(),\n      sharedMaterial: new THREE$8.ShaderMaterial(_objectSpread2(_objectSpread2({}, dashedLineShaders()), {}, {\n        transparent: true,\n        blending: THREE$8.NormalBlending\n      }))\n    };\n  },\n  init: function init(threeObj, state) {\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjPath'\n    }).onCreateObj(function () {\n      var obj = new THREE$8.Group(); // populated in updateObj\n\n      obj.__globeObjType = 'path'; // Add object type\n      return obj;\n    });\n\n    // Kick-off dash animations\n    state.ticker.onTick.add(function (_, timeDelta) {\n      state.dataMapper.entries().map(function (_ref2) {\n        var _ref3 = _slicedToArray(_ref2, 2),\n          obj = _ref3[1];\n        return obj;\n      }).filter(function (o) {\n        return o.children.length && o.children[0].material && o.children[0].__dashAnimateStep;\n      }).forEach(function (o) {\n        var obj = o.children[0];\n        var step = obj.__dashAnimateStep * timeDelta;\n        if (obj.type === 'Line') {\n          var curTranslate = obj.material.uniforms.dashTranslate.value % 1e9; // reset after 1B loops\n          obj.material.uniforms.dashTranslate.value = curTranslate + step;\n        } else if (obj.type === 'Line2') {\n          // fatline\n          var offset = obj.material.dashOffset - step;\n          var dashLength = obj.material.dashSize + obj.material.gapSize;\n          while (offset <= -dashLength) offset += dashLength; // cycle within dash length\n          obj.material.dashOffset = offset;\n        }\n      });\n    });\n  },\n  update: function update(state) {\n    // Data accessors\n    var pointsAccessor = accessorFn(state.pathPoints);\n    var pointLatAccessor = accessorFn(state.pathPointLat);\n    var pointLngAccessor = accessorFn(state.pathPointLng);\n    var pointAltAccessor = accessorFn(state.pathPointAlt);\n    var strokeAccessor = accessorFn(state.pathStroke);\n    var colorAccessor = accessorFn(state.pathColor);\n    var dashLengthAccessor = accessorFn(state.pathDashLength);\n    var dashGapAccessor = accessorFn(state.pathDashGap);\n    var dashInitialGapAccessor = accessorFn(state.pathDashInitialGap);\n    var dashAnimateTimeAccessor = accessorFn(state.pathDashAnimateTime);\n    state.dataMapper.onUpdateObj(function (group, path) {\n      var stroke = strokeAccessor(path);\n      var useFatLine = stroke !== null && stroke !== undefined;\n      if (!group.children.length || useFatLine === (group.children[0].type === 'Line')) {\n        // create or swap object types\n        emptyObject(group);\n        var _obj = useFatLine ? new Line2(new LineGeometry(), new LineMaterial()) : new THREE$8.Line(new THREE$8.BufferGeometry(), state.sharedMaterial.clone() // Separate material instance per object to have dedicated uniforms (but shared shaders)\n        );\n        group.add(_obj);\n      }\n      var obj = group.children[0];\n      var points = calcPath(pointsAccessor(path), pointLatAccessor, pointLngAccessor, pointAltAccessor, state.pathResolution);\n\n      // set dash animation step\n      var dashAnimateTime = dashAnimateTimeAccessor(path);\n      obj.__dashAnimateStep = dashAnimateTime > 0 ? 1000 / dashAnimateTime : 0; // per second\n\n      if (!useFatLine) {\n        // set dash uniforms\n        Object.assign(obj.material.uniforms, {\n          dashSize: {\n            value: dashLengthAccessor(path)\n          },\n          gapSize: {\n            value: dashGapAccessor(path)\n          },\n          dashOffset: {\n            value: dashInitialGapAccessor(path)\n          }\n        });\n\n        // calculate vertex colors (to create gradient)\n        var vertexColorArray = calcColorVertexArray(colorAccessor(path),\n        // single, array of colors or interpolator\n        points.length // numSegments\n        );\n\n        // calculate vertex relative distances (for dashed lines)\n        var vertexRelDistanceArray = calcVertexRelDistances(points.length,\n        // numSegments\n        1,\n        // num vertices per segment\n        true // run from end to start, to animate in the correct direction\n        );\n        obj.geometry.setAttribute('color', vertexColorArray);\n        obj.geometry.setAttribute('relDistance', vertexRelDistanceArray);\n      } else {\n        // fat lines\n        obj.material.resolution = state.rendererSize;\n        {\n          // set dash styling\n          var dashLength = dashLengthAccessor(path);\n          var dashGap = dashGapAccessor(path);\n          var dashInitialGap = dashInitialGapAccessor(path);\n          obj.material.dashed = dashGap > 0;\n\n          // temp hack to activate line dashes\n          obj.material.dashed ? obj.material.defines.USE_DASH = \"\" : delete obj.material.defines.USE_DASH;\n          if (obj.material.dashed) {\n            obj.material.dashScale = 1 / calcLineDistance(points); // dash sizes relative to full line length\n\n            obj.material.dashSize = dashLength;\n            obj.material.gapSize = dashGap;\n            obj.material.dashOffset = -dashInitialGap;\n          }\n        }\n        {\n          // set line colors\n          var colors = colorAccessor(path);\n          if (colors instanceof Array) {\n            // calculate vertex colors (to create gradient)\n            var _vertexColorArray = calcColorVertexArray(colorAccessor(path),\n            // single, array of colors or interpolator\n            points.length - 1,\n            // numSegments\n            1,\n            // num vertices per segment\n            false);\n            obj.geometry.setColors(_vertexColorArray.array);\n            obj.material.vertexColors = true;\n          } else {\n            // single color\n            var color = colors;\n            var opacity = colorAlpha(color);\n            obj.material.color = new THREE$8.Color(colorStr2Hex(color));\n            obj.material.transparent = opacity < 1;\n            obj.material.opacity = opacity;\n            obj.material.vertexColors = false;\n          }\n        }\n        obj.material.needsUpdate = true;\n      }\n\n      // animate from start to finish by default\n      var pointsInterpolator = interpolateVectors(group.__currentTargetD && group.__currentTargetD.points || [points[0]], points);\n      var applyUpdate = function applyUpdate(td) {\n        var _group$__currentTarge = group.__currentTargetD = td,\n          stroke = _group$__currentTarge.stroke,\n          interpolK = _group$__currentTarge.interpolK;\n        var kPoints = group.__currentTargetD.points = pointsInterpolator(interpolK);\n        if (useFatLine) {\n          var _ref4;\n          obj.geometry.setPositions((_ref4 = []).concat.apply(_ref4, _toConsumableArray(kPoints.map(function (_ref5) {\n            var x = _ref5.x,\n              y = _ref5.y,\n              z = _ref5.z;\n            return [x, y, z];\n          }))));\n          obj.material.linewidth = stroke;\n\n          // necessary for dashed lines\n          obj.material.dashed && obj.computeLineDistances();\n        } else {\n          obj.geometry.setFromPoints(kPoints);\n          obj.geometry.computeBoundingSphere();\n        }\n      };\n      var targetD = {\n        stroke: stroke,\n        interpolK: 1\n      };\n      var currentTargetD = Object.assign({}, group.__currentTargetD || targetD, {\n        interpolK: 0\n      });\n      if (Object.keys(targetD).some(function (k) {\n        return currentTargetD[k] !== targetD[k];\n      })) {\n        if (!state.pathTransitionDuration || state.pathTransitionDuration < 0) {\n          // set final position\n          applyUpdate(targetD);\n        } else {\n          // animate\n          state.tweenGroup.add(new Tween(currentTargetD).to(targetD, state.pathTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyUpdate).onComplete(function () {\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n      }\n    }).digest(state.pathsData);\n\n    //\n\n    function calcLineDistance(pnts) {\n      var totalDist = 0;\n      var prevPnt;\n      pnts.forEach(function (pnt) {\n        prevPnt && (totalDist += prevPnt.distanceTo(pnt));\n        prevPnt = pnt;\n      });\n      return totalDist;\n    }\n    function calcPath(points, latAccessor, lngAccessor, altAccessor, angularResolution) {\n      var getInterpolatedVals = function getInterpolatedVals(start, end, numPnts) {\n        var result = [];\n        for (var i = 1; i <= numPnts; i++) {\n          result.push(start + (end - start) * i / (numPnts + 1));\n        }\n        return result;\n      };\n      var interpolateLine = function interpolateLine() {\n        var lineCoords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n        var maxDegDistance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n        var result = [];\n        var prevPnt = null;\n        lineCoords.forEach(function (pnt) {\n          if (prevPnt) {\n            // cross the anti-meridian if that's the closest distance between points\n            while (Math.abs(prevPnt[1] - pnt[1]) > 180) prevPnt[1] += 360 * (prevPnt[1] < pnt[1] ? 1 : -1);\n            var dist = Math.sqrt(Math.pow(pnt[0] - prevPnt[0], 2) + Math.pow(pnt[1] - prevPnt[1], 2));\n            if (dist > maxDegDistance) {\n              var numAdditionalPnts = Math.floor(dist / maxDegDistance);\n              var lats = getInterpolatedVals(prevPnt[0], pnt[0], numAdditionalPnts);\n              var lngs = getInterpolatedVals(prevPnt[1], pnt[1], numAdditionalPnts);\n              var alts = getInterpolatedVals(prevPnt[2], pnt[2], numAdditionalPnts);\n              for (var i = 0, len = lats.length; i < len; i++) {\n                result.push([lats[i], lngs[i], alts[i]]);\n              }\n            }\n          }\n          result.push(prevPnt = pnt);\n        });\n        return result;\n      };\n      var getVec = function getVec(_ref6) {\n        var _ref7 = _slicedToArray(_ref6, 3),\n          lat = _ref7[0],\n          lng = _ref7[1],\n          alt = _ref7[2];\n        var _polar2Cartesian = polar2Cartesian(lat, lng, alt),\n          x = _polar2Cartesian.x,\n          y = _polar2Cartesian.y,\n          z = _polar2Cartesian.z;\n        return new THREE$8.Vector3(x, y, z);\n      };\n      return interpolateLine(points.map(function (pnt) {\n        return [latAccessor(pnt), lngAccessor(pnt), altAccessor(pnt)];\n      }), angularResolution).map(getVec);\n    }\n    function calcColorVertexArray(colors, numSegments) {\n      var numVerticesPerSegment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var includeAlpha = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n      var numVerticesGroup = numSegments + 1; // one between every two segments and two at the ends\n\n      var getVertexColor;\n      if (colors instanceof Array || colors instanceof Function) {\n        var colorInterpolator = colors instanceof Array ? scaleLinear() // array of colors, interpolate at each step\n        .domain(colors.map(function (_, idx) {\n          return idx / (colors.length - 1);\n        })) // same number of stops as colors\n        .range(colors) : colors; // already interpolator fn\n\n        getVertexColor = function getVertexColor(t) {\n          return color2ShaderArr(colorInterpolator(t), includeAlpha, true);\n        };\n      } else {\n        // single color, use constant\n        var vertexColor = color2ShaderArr(colors, includeAlpha, true);\n        getVertexColor = function getVertexColor() {\n          return vertexColor;\n        };\n      }\n      var vertexColors = [];\n      for (var v = 0, l = numVerticesGroup; v < l; v++) {\n        var _vertexColor = getVertexColor(v / (l - 1));\n        for (var s = 0; s < numVerticesPerSegment; s++) {\n          vertexColors.push(_vertexColor);\n        }\n      }\n      return array2BufferAttr(vertexColors, includeAlpha ? 4 : 3);\n    }\n    function calcVertexRelDistances(numSegments) {\n      var numVerticesPerSegment = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var invert = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var numVerticesGroup = numSegments + 1; // one between every two segments and two at the ends\n\n      var vertexDistances = [];\n      for (var v = 0, l = numVerticesGroup; v < l; v++) {\n        var relDistance = v / (l - 1);\n        for (var s = 0; s < numVerticesPerSegment; s++) {\n          vertexDistances.push(relDistance);\n        }\n      }\n      invert && vertexDistances.reverse();\n      return array2BufferAttr(vertexDistances, 1);\n    }\n  }\n});\n\nvar THREE$7 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  Euler: Euler,\n  Mesh: Mesh,\n  MeshLambertMaterial: MeshLambertMaterial,\n  SphereGeometry: SphereGeometry\n};\n\n//\n\nvar TilesLayerKapsule = Kapsule({\n  props: {\n    tilesData: {\n      \"default\": []\n    },\n    tileLat: {\n      \"default\": 'lat'\n    },\n    // tile centroid\n    tileLng: {\n      \"default\": 'lng'\n    },\n    tileAltitude: {\n      \"default\": 0.01\n    },\n    // in units of globe radius\n    tileWidth: {\n      \"default\": 1\n    },\n    // in lng degrees\n    tileHeight: {\n      \"default\": 1\n    },\n    // in lat degrees\n    tileUseGlobeProjection: {\n      \"default\": true\n    },\n    // whether to size tiles relative to the globe coordinate system, or independently\n    tileMaterial: {\n      \"default\": function _default() {\n        return new THREE$7.MeshLambertMaterial({\n          color: '#ffbb88',\n          opacity: 0.4,\n          transparent: true\n        });\n      }\n    },\n    tileCurvatureResolution: {\n      \"default\": 5\n    },\n    // in angular degrees\n    tilesTransitionDuration: {\n      \"default\": 1000,\n      triggerUpdate: false\n    } // ms\n  },\n  init: function init(threeObj, state, _ref) {\n    var tweenGroup = _ref.tweenGroup;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.tweenGroup = tweenGroup;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjTile'\n    }).onCreateObj(function () {\n      var obj = new THREE$7.Mesh();\n      obj.__globeObjType = 'tile'; // Add object type\n\n      return obj;\n    });\n  },\n  update: function update(state) {\n    // Data accessors\n    var latAccessor = accessorFn(state.tileLat);\n    var lngAccessor = accessorFn(state.tileLng);\n    var altitudeAccessor = accessorFn(state.tileAltitude);\n    var widthAccessor = accessorFn(state.tileWidth);\n    var heightAccessor = accessorFn(state.tileHeight);\n    var useGlobeProjectionAccessor = accessorFn(state.tileUseGlobeProjection);\n    var materialAccessor = accessorFn(state.tileMaterial);\n    var curvatureResolutionAccessor = accessorFn(state.tileCurvatureResolution);\n    state.dataMapper.onUpdateObj(function (obj, d) {\n      obj.material = materialAccessor(d); // set material\n\n      var useGlobeProjection = useGlobeProjectionAccessor(d);\n      var curvatureResolution = curvatureResolutionAccessor(d);\n\n      // animations\n      var applyPosition = function applyPosition(td) {\n        var _obj$__currentTargetD = obj.__currentTargetD = td,\n          lat = _obj$__currentTargetD.lat,\n          lng = _obj$__currentTargetD.lng,\n          alt = _obj$__currentTargetD.alt,\n          width = _obj$__currentTargetD.width,\n          height = _obj$__currentTargetD.height;\n        var rotLng = deg2Rad(lng);\n        var rotLat = deg2Rad(-lat);\n        obj.geometry && obj.geometry.dispose();\n        obj.geometry = new THREE$7.SphereGeometry(GLOBE_RADIUS * (1 + alt), Math.ceil(width / (curvatureResolution || -1)), Math.ceil(height / (curvatureResolution || -1)), deg2Rad(90 - width / 2) + (useGlobeProjection ? rotLng : 0), deg2Rad(width), deg2Rad(90 - height / 2) + (useGlobeProjection ? rotLat : 0), deg2Rad(height));\n        if (!useGlobeProjection) {\n          // rotate obj instead. order matters, rotate longitudinally first.\n          obj.setRotationFromEuler(new THREE$7.Euler(rotLat, rotLng, 0, 'YXZ'));\n        }\n      };\n      var targetD = {\n        lat: +latAccessor(d),\n        lng: +lngAccessor(d),\n        alt: +altitudeAccessor(d),\n        width: +widthAccessor(d),\n        height: +heightAccessor(d)\n      };\n      var currentTargetD = obj.__currentTargetD || Object.assign({}, targetD, {\n        width: 0,\n        height: 0\n      });\n      if (Object.keys(targetD).some(function (k) {\n        return currentTargetD[k] !== targetD[k];\n      })) {\n        if (!state.tilesTransitionDuration || state.tilesTransitionDuration < 0) {\n          // set final position\n          applyPosition(targetD);\n        } else {\n          // animate\n          state.tweenGroup.add(new Tween(currentTargetD).to(targetD, state.tilesTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyPosition).onComplete(function () {\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n      }\n    }).digest(state.tilesData);\n  }\n});\nvar deg2Rad = function deg2Rad(deg) {\n  return deg * Math.PI / 180;\n};\n\nvar THREE$6 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferGeometry: BufferGeometry,\n  Color: Color,\n  Points: Points,\n  PointsMaterial: PointsMaterial\n};\n\n//\n\nvar ParticlesLayerKapsule = Kapsule({\n  props: {\n    particlesData: {\n      \"default\": []\n    },\n    particlesList: {\n      \"default\": function _default(d) {\n        return d;\n      }\n    },\n    // arrays of arrays\n    particleLat: {\n      \"default\": 'lat'\n    },\n    particleLng: {\n      \"default\": 'lng'\n    },\n    particleAltitude: {\n      \"default\": 0.01\n    },\n    // in units of globe radius\n    particlesSize: {\n      \"default\": 0.5\n    },\n    particlesSizeAttenuation: {\n      \"default\": true\n    },\n    particlesColor: {\n      \"default\": function _default() {\n        return 'white';\n      }\n    },\n    particlesTexture: {}\n  },\n  init: function init(threeObj, state) {\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjParticles'\n    }).onCreateObj(function () {\n      var obj = new THREE$6.Points(new THREE$6.BufferGeometry(), new THREE$6.PointsMaterial());\n      obj.__globeObjType = 'particles'; // Add object type\n\n      return obj;\n    }).onUpdateObj(function (obj, d) {\n      // Data accessors\n      var particlesListAccessor = accessorFn(state.particlesList);\n      var latAccessor = accessorFn(state.particleLat);\n      var lngAccessor = accessorFn(state.particleLng);\n      var altitudeAccessor = accessorFn(state.particleAltitude);\n      obj.geometry.setAttribute('position', array2BufferAttr(particlesListAccessor(d).map(function (p) {\n        return Object.values(polar2Cartesian(latAccessor(p), lngAccessor(p), altitudeAccessor(p)));\n      }), 3));\n    });\n  },\n  update: function update(state, changedProps) {\n    if (['particlesData', 'particlesList', 'particleLat', 'particleLng', 'particleAltitude'].some(function (p) {\n      return changedProps.hasOwnProperty(p);\n    })) {\n      state.dataMapper.digest(state.particlesData);\n    }\n\n    // Data accessors\n    var colorAccessor = accessorFn(state.particlesColor);\n    var sizeAccessor = accessorFn(state.particlesSize);\n    var sizeAttenuationAccessor = accessorFn(state.particlesSizeAttenuation);\n    var textureAccessor = accessorFn(state.particlesTexture);\n    state.dataMapper.entries().forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n        d = _ref2[0],\n        obj = _ref2[1];\n      obj.material.size = sizeAccessor(d);\n      obj.material.sizeAttenuation = sizeAttenuationAccessor(d);\n      if (!state.particlesTexture) {\n        // Plain color\n        var color = colorAccessor(d);\n        var opacity = colorAlpha(color);\n        obj.material.color = new THREE$6.Color(colorStr2Hex(color));\n        obj.material.transparent = opacity < 1;\n        obj.material.opacity = opacity;\n        obj.material.alphaTest = 0;\n      } else {\n        obj.material.color = new THREE$6.Color(0xffffff);\n        obj.material.transparent = false;\n        obj.material.alphaTest = 0.5;\n        obj.material.map = textureAccessor(d);\n      }\n    });\n  }\n});\n\nvar THREE$5 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BufferGeometry: BufferGeometry\n};\nvar CircleLineGeometry = /*#__PURE__*/function (_THREE$BufferGeometry) {\n  function CircleLineGeometry() {\n    var _this;\n    var radius = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    var segmentCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;\n    _classCallCheck(this, CircleLineGeometry);\n    _this = _callSuper(this, CircleLineGeometry);\n    _this.type = 'CircleLineGeometry';\n    _this.parameters = {\n      radius: radius,\n      segmentCount: segmentCount\n    };\n    var points = [];\n    for (var i = 0; i <= segmentCount; i++) {\n      var theta = (i / segmentCount - 0.25) * Math.PI * 2;\n      points.push({\n        x: Math.cos(theta) * radius,\n        y: Math.sin(theta) * radius,\n        z: 0\n      });\n    }\n    _this.setFromPoints(points);\n    return _this;\n  }\n  _inherits(CircleLineGeometry, _THREE$BufferGeometry);\n  return _createClass(CircleLineGeometry);\n}(THREE$5.BufferGeometry);\n\nvar THREE$4 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  Color: Color,\n  Group: Group,\n  Line: Line,\n  LineBasicMaterial: LineBasicMaterial,\n  Vector3: Vector3\n};\nvar FrameTicker = _FrameTicker[\"default\"] || _FrameTicker;\nvar RingsLayerKapsule = Kapsule({\n  props: {\n    ringsData: {\n      \"default\": []\n    },\n    ringLat: {\n      \"default\": 'lat'\n    },\n    ringLng: {\n      \"default\": 'lng'\n    },\n    ringAltitude: {\n      \"default\": 1.5e-3\n    },\n    ringColor: {\n      \"default\": function _default() {\n        return '#ffffaa';\n      },\n      triggerUpdate: false\n    },\n    // single color, array of colors or color interpolation fn\n    ringResolution: {\n      \"default\": 64,\n      triggerUpdate: false\n    },\n    // how many slice segments in each circle's circumference\n    ringMaxRadius: {\n      \"default\": 2,\n      triggerUpdate: false\n    },\n    // degrees\n    ringPropagationSpeed: {\n      \"default\": 1,\n      triggerUpdate: false\n    },\n    // degrees/s\n    ringRepeatPeriod: {\n      \"default\": 700,\n      triggerUpdate: false\n    } // ms\n  },\n  methods: {\n    pauseAnimation: function pauseAnimation(state) {\n      var _state$ticker;\n      (_state$ticker = state.ticker) === null || _state$ticker === void 0 || _state$ticker.pause();\n    },\n    resumeAnimation: function resumeAnimation(state) {\n      var _state$ticker2;\n      (_state$ticker2 = state.ticker) === null || _state$ticker2 === void 0 || _state$ticker2.resume();\n    },\n    _destructor: function _destructor(state) {\n      var _state$ticker3;\n      (_state$ticker3 = state.ticker) === null || _state$ticker3 === void 0 || _state$ticker3.dispose();\n    }\n  },\n  init: function init(threeObj, state, _ref) {\n    var tweenGroup = _ref.tweenGroup;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.tweenGroup = tweenGroup;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjRing',\n      removeDelay: 30000 // wait until all rings are gone\n    }).onCreateObj(function () {\n      var obj = new THREE$4.Group();\n      obj.__globeObjType = 'ring'; // Add object type\n      return obj;\n    });\n    state.ticker = new FrameTicker();\n    state.ticker.onTick.add(function (time) {\n      if (!state.ringsData.length) return;\n\n      // Data accessors\n      var colorAccessor = accessorFn(state.ringColor);\n      var altitudeAccessor = accessorFn(state.ringAltitude);\n      var maxRadiusAccessor = accessorFn(state.ringMaxRadius);\n      var propagationSpeedAccessor = accessorFn(state.ringPropagationSpeed);\n      var repeatPeriodAccessor = accessorFn(state.ringRepeatPeriod);\n      state.dataMapper.entries().filter(function (_ref2) {\n        var _ref3 = _slicedToArray(_ref2, 2),\n          o = _ref3[1];\n        return o;\n      }).forEach(function (_ref4) {\n        var _ref5 = _slicedToArray(_ref4, 2),\n          d = _ref5[0],\n          obj = _ref5[1];\n        if ((obj.__nextRingTime || 0) <= time) {\n          // time to add a new ring\n          var periodSecs = repeatPeriodAccessor(d) / 1000;\n          obj.__nextRingTime = time + (periodSecs <= 0 ? Infinity : periodSecs);\n          var circleObj = new THREE$4.Line(new CircleLineGeometry(1, state.ringResolution), new THREE$4.LineBasicMaterial());\n          var colors = colorAccessor(d);\n          var isMultiColor = colors instanceof Array || colors instanceof Function;\n          var colorInterpolator;\n          if (!isMultiColor) {\n            // set only once\n            circleObj.material.color = new THREE$4.Color(colorStr2Hex(colors));\n            setMaterialOpacity(circleObj.material, colorAlpha(colors));\n          } else {\n            if (colors instanceof Array) {\n              colorInterpolator = scaleLinear().domain(colors.map(function (_, idx) {\n                return idx / (colors.length - 1);\n              })) // same number of stops as colors\n              .range(colors);\n              circleObj.material.transparent = colors.some(function (c) {\n                return colorAlpha(c) < 1;\n              });\n            } else {\n              colorInterpolator = colors;\n              circleObj.material.transparent = true;\n            }\n          }\n          var curveR = GLOBE_RADIUS * (1 + altitudeAccessor(d));\n          var maxRadius = maxRadiusAccessor(d); // in degrees\n          var maxAngle = maxRadius * Math.PI / 180; // in radians\n          var propagationSpeed = propagationSpeedAccessor(d);\n          var isReverse = propagationSpeed <= 0;\n          var updateFn = function updateFn(_ref6) {\n            var t = _ref6.t;\n            var ang = (isReverse ? 1 - t : t) * maxAngle;\n            circleObj.scale.x = circleObj.scale.y = curveR * Math.sin(ang);\n            circleObj.position.z = curveR * (1 - Math.cos(ang));\n            if (isMultiColor) {\n              var color = colorInterpolator(t);\n              circleObj.material.color = new THREE$4.Color(colorStr2Hex(color));\n              circleObj.material.transparent && (circleObj.material.opacity = colorAlpha(color));\n            }\n          };\n          if (propagationSpeed === 0) {\n            updateFn({\n              t: 0\n            });\n            obj.add(circleObj);\n          } else {\n            var transitionTime = Math.abs(maxRadius / propagationSpeed) * 1000;\n            state.tweenGroup.add(new Tween({\n              t: 0\n            }).to({\n              t: 1\n            }, transitionTime).onUpdate(updateFn).onStart(function () {\n              return obj.add(circleObj);\n            }).onComplete(function () {\n              state.tweenGroup.remove(this);\n              obj.remove(circleObj);\n              _deallocate(circleObj);\n            }).start());\n          }\n        }\n      });\n    });\n  },\n  update: function update(state) {\n    // Data accessors\n    var latAccessor = accessorFn(state.ringLat);\n    var lngAccessor = accessorFn(state.ringLng);\n    var altitudeAccessor = accessorFn(state.ringAltitude);\n    var globeCenter = state.scene.localToWorld(new THREE$4.Vector3(0, 0, 0)); // translate from local to world coords\n\n    state.dataMapper.onUpdateObj(function (obj, d) {\n      var lat = latAccessor(d);\n      var lng = lngAccessor(d);\n      var alt = altitudeAccessor(d);\n\n      // position & orientate inwards\n      Object.assign(obj.position, polar2Cartesian(lat, lng, alt));\n      obj.lookAt(globeCenter);\n    }).digest(state.ringsData);\n  }\n});\n\nvar glyphs={\"0\":{x_min:73,x_max:715,ha:792,o:\"m 394 -29 q 153 129 242 -29 q 73 479 73 272 q 152 829 73 687 q 394 989 241 989 q 634 829 545 989 q 715 479 715 684 q 635 129 715 270 q 394 -29 546 -29 m 394 89 q 546 211 489 89 q 598 479 598 322 q 548 748 598 640 q 394 871 491 871 q 241 748 298 871 q 190 479 190 637 q 239 211 190 319 q 394 89 296 89 \"},\"1\":{x_min:215.671875,x_max:574,ha:792,o:\"m 574 0 l 442 0 l 442 697 l 215 697 l 215 796 q 386 833 330 796 q 475 986 447 875 l 574 986 l 574 0 \"},\"2\":{x_min:59,x_max:731,ha:792,o:\"m 731 0 l 59 0 q 197 314 59 188 q 457 487 199 315 q 598 691 598 580 q 543 819 598 772 q 411 867 488 867 q 272 811 328 867 q 209 630 209 747 l 81 630 q 182 901 81 805 q 408 986 271 986 q 629 909 536 986 q 731 694 731 826 q 613 449 731 541 q 378 316 495 383 q 201 122 235 234 l 731 122 l 731 0 \"},\"3\":{x_min:54,x_max:737,ha:792,o:\"m 737 284 q 635 55 737 141 q 399 -25 541 -25 q 156 52 248 -25 q 54 308 54 140 l 185 308 q 245 147 185 202 q 395 96 302 96 q 539 140 484 96 q 602 280 602 190 q 510 429 602 390 q 324 454 451 454 l 324 565 q 487 584 441 565 q 565 719 565 617 q 515 835 565 791 q 395 879 466 879 q 255 824 307 879 q 203 661 203 769 l 78 661 q 166 909 78 822 q 387 992 250 992 q 603 921 513 992 q 701 723 701 844 q 669 607 701 656 q 578 524 637 558 q 696 434 655 499 q 737 284 737 369 \"},\"4\":{x_min:48,x_max:742.453125,ha:792,o:\"m 742 243 l 602 243 l 602 0 l 476 0 l 476 243 l 48 243 l 48 368 l 476 958 l 602 958 l 602 354 l 742 354 l 742 243 m 476 354 l 476 792 l 162 354 l 476 354 \"},\"5\":{x_min:54.171875,x_max:738,ha:792,o:\"m 738 314 q 626 60 738 153 q 382 -23 526 -23 q 155 47 248 -23 q 54 256 54 125 l 183 256 q 259 132 204 174 q 382 91 314 91 q 533 149 471 91 q 602 314 602 213 q 538 469 602 411 q 386 528 475 528 q 284 506 332 528 q 197 439 237 484 l 81 439 l 159 958 l 684 958 l 684 840 l 254 840 l 214 579 q 306 627 258 612 q 407 643 354 643 q 636 552 540 643 q 738 314 738 457 \"},\"6\":{x_min:53,x_max:739,ha:792,o:\"m 739 312 q 633 62 739 162 q 400 -31 534 -31 q 162 78 257 -31 q 53 439 53 206 q 178 859 53 712 q 441 986 284 986 q 643 912 559 986 q 732 713 732 833 l 601 713 q 544 830 594 786 q 426 875 494 875 q 268 793 331 875 q 193 517 193 697 q 301 597 240 570 q 427 624 362 624 q 643 540 552 624 q 739 312 739 451 m 603 298 q 540 461 603 400 q 404 516 484 516 q 268 461 323 516 q 207 300 207 401 q 269 137 207 198 q 405 83 325 83 q 541 137 486 83 q 603 298 603 197 \"},\"7\":{x_min:58.71875,x_max:730.953125,ha:792,o:\"m 730 839 q 469 448 560 641 q 335 0 378 255 l 192 0 q 328 441 235 252 q 593 830 421 630 l 58 830 l 58 958 l 730 958 l 730 839 \"},\"8\":{x_min:55,x_max:736,ha:792,o:\"m 571 527 q 694 424 652 491 q 736 280 736 358 q 648 71 736 158 q 395 -26 551 -26 q 142 69 238 -26 q 55 279 55 157 q 96 425 55 359 q 220 527 138 491 q 120 615 153 562 q 88 726 88 668 q 171 904 88 827 q 395 986 261 986 q 618 905 529 986 q 702 727 702 830 q 670 616 702 667 q 571 527 638 565 m 394 565 q 519 610 475 565 q 563 717 563 655 q 521 823 563 781 q 392 872 474 872 q 265 824 312 872 q 224 720 224 783 q 265 613 224 656 q 394 565 312 565 m 395 91 q 545 150 488 91 q 597 280 597 204 q 546 408 597 355 q 395 465 492 465 q 244 408 299 465 q 194 280 194 356 q 244 150 194 203 q 395 91 299 91 \"},\"9\":{x_min:53,x_max:739,ha:792,o:\"m 739 524 q 619 94 739 241 q 362 -32 516 -32 q 150 47 242 -32 q 59 244 59 126 l 191 244 q 246 129 191 176 q 373 82 301 82 q 526 161 466 82 q 597 440 597 255 q 363 334 501 334 q 130 432 216 334 q 53 650 53 521 q 134 880 53 786 q 383 986 226 986 q 659 841 566 986 q 739 524 739 719 m 388 449 q 535 514 480 449 q 585 658 585 573 q 535 805 585 744 q 388 873 480 873 q 242 809 294 873 q 191 658 191 745 q 239 514 191 572 q 388 449 292 449 \"},\"ο\":{x_min:0,x_max:712,ha:815,o:\"m 356 -25 q 96 88 192 -25 q 0 368 0 201 q 92 642 0 533 q 356 761 192 761 q 617 644 517 761 q 712 368 712 533 q 619 91 712 201 q 356 -25 520 -25 m 356 85 q 527 175 465 85 q 583 369 583 255 q 528 562 583 484 q 356 651 466 651 q 189 560 250 651 q 135 369 135 481 q 187 177 135 257 q 356 85 250 85 \"},S:{x_min:0,x_max:788,ha:890,o:\"m 788 291 q 662 54 788 144 q 397 -26 550 -26 q 116 68 226 -26 q 0 337 0 168 l 131 337 q 200 152 131 220 q 384 85 269 85 q 557 129 479 85 q 650 270 650 183 q 490 429 650 379 q 194 513 341 470 q 33 739 33 584 q 142 964 33 881 q 388 1041 242 1041 q 644 957 543 1041 q 756 716 756 867 l 625 716 q 561 874 625 816 q 395 933 497 933 q 243 891 309 933 q 164 759 164 841 q 325 609 164 656 q 625 526 475 568 q 788 291 788 454 \"},\"¦\":{x_min:343,x_max:449,ha:792,o:\"m 449 462 l 343 462 l 343 986 l 449 986 l 449 462 m 449 -242 l 343 -242 l 343 280 l 449 280 l 449 -242 \"},\"/\":{x_min:183.25,x_max:608.328125,ha:792,o:\"m 608 1041 l 266 -129 l 183 -129 l 520 1041 l 608 1041 \"},\"Τ\":{x_min:-0.4375,x_max:777.453125,ha:839,o:\"m 777 893 l 458 893 l 458 0 l 319 0 l 319 892 l 0 892 l 0 1013 l 777 1013 l 777 893 \"},y:{x_min:0,x_max:684.78125,ha:771,o:\"m 684 738 l 388 -83 q 311 -216 356 -167 q 173 -279 252 -279 q 97 -266 133 -279 l 97 -149 q 132 -155 109 -151 q 168 -160 155 -160 q 240 -114 213 -160 q 274 -26 248 -98 l 0 738 l 137 737 l 341 139 l 548 737 l 684 738 \"},\"Π\":{x_min:0,x_max:803,ha:917,o:\"m 803 0 l 667 0 l 667 886 l 140 886 l 140 0 l 0 0 l 0 1012 l 803 1012 l 803 0 \"},\"ΐ\":{x_min:-111,x_max:339,ha:361,o:\"m 339 800 l 229 800 l 229 925 l 339 925 l 339 800 m -1 800 l -111 800 l -111 925 l -1 925 l -1 800 m 284 3 q 233 -10 258 -5 q 182 -15 207 -15 q 85 26 119 -15 q 42 200 42 79 l 42 737 l 167 737 l 168 215 q 172 141 168 157 q 226 101 183 101 q 248 103 239 101 q 284 112 257 104 l 284 3 m 302 1040 l 113 819 l 30 819 l 165 1040 l 302 1040 \"},g:{x_min:0,x_max:686,ha:838,o:\"m 686 34 q 586 -213 686 -121 q 331 -306 487 -306 q 131 -252 216 -306 q 31 -84 31 -190 l 155 -84 q 228 -174 166 -138 q 345 -207 284 -207 q 514 -109 454 -207 q 564 89 564 -27 q 461 6 521 36 q 335 -23 401 -23 q 88 100 184 -23 q 0 370 0 215 q 87 634 0 522 q 330 758 183 758 q 457 728 398 758 q 564 644 515 699 l 564 737 l 686 737 l 686 34 m 582 367 q 529 560 582 481 q 358 652 468 652 q 189 561 250 652 q 135 369 135 482 q 189 176 135 255 q 361 85 251 85 q 529 176 468 85 q 582 367 582 255 \"},\"²\":{x_min:0,x_max:442,ha:539,o:\"m 442 383 l 0 383 q 91 566 0 492 q 260 668 176 617 q 354 798 354 727 q 315 875 354 845 q 227 905 277 905 q 136 869 173 905 q 99 761 99 833 l 14 761 q 82 922 14 864 q 232 974 141 974 q 379 926 316 974 q 442 797 442 878 q 351 635 442 704 q 183 539 321 611 q 92 455 92 491 l 442 455 l 442 383 \"},\"–\":{x_min:0,x_max:705.5625,ha:803,o:\"m 705 334 l 0 334 l 0 410 l 705 410 l 705 334 \"},\"Κ\":{x_min:0,x_max:819.5625,ha:893,o:\"m 819 0 l 650 0 l 294 509 l 139 356 l 139 0 l 0 0 l 0 1013 l 139 1013 l 139 526 l 626 1013 l 809 1013 l 395 600 l 819 0 \"},\"ƒ\":{x_min:-46.265625,x_max:392,ha:513,o:\"m 392 651 l 259 651 l 79 -279 l -46 -278 l 134 651 l 14 651 l 14 751 l 135 751 q 151 948 135 900 q 304 1041 185 1041 q 334 1040 319 1041 q 392 1034 348 1039 l 392 922 q 337 931 360 931 q 271 883 287 931 q 260 793 260 853 l 260 751 l 392 751 l 392 651 \"},e:{x_min:0,x_max:714,ha:813,o:\"m 714 326 l 140 326 q 200 157 140 227 q 359 87 260 87 q 488 130 431 87 q 561 245 545 174 l 697 245 q 577 48 670 123 q 358 -26 484 -26 q 97 85 195 -26 q 0 363 0 197 q 94 642 0 529 q 358 765 195 765 q 626 627 529 765 q 714 326 714 503 m 576 429 q 507 583 564 522 q 355 650 445 650 q 206 583 266 650 q 140 429 152 522 l 576 429 \"},\"ό\":{x_min:0,x_max:712,ha:815,o:\"m 356 -25 q 94 91 194 -25 q 0 368 0 202 q 92 642 0 533 q 356 761 192 761 q 617 644 517 761 q 712 368 712 533 q 619 91 712 201 q 356 -25 520 -25 m 356 85 q 527 175 465 85 q 583 369 583 255 q 528 562 583 484 q 356 651 466 651 q 189 560 250 651 q 135 369 135 481 q 187 177 135 257 q 356 85 250 85 m 576 1040 l 387 819 l 303 819 l 438 1040 l 576 1040 \"},J:{x_min:0,x_max:588,ha:699,o:\"m 588 279 q 287 -26 588 -26 q 58 73 126 -26 q 0 327 0 158 l 133 327 q 160 172 133 227 q 288 96 198 96 q 426 171 391 96 q 449 336 449 219 l 449 1013 l 588 1013 l 588 279 \"},\"»\":{x_min:-1,x_max:503,ha:601,o:\"m 503 302 l 280 136 l 281 256 l 429 373 l 281 486 l 280 608 l 503 440 l 503 302 m 221 302 l 0 136 l 0 255 l 145 372 l 0 486 l -1 608 l 221 440 l 221 302 \"},\"©\":{x_min:-3,x_max:1008,ha:1106,o:\"m 502 -7 q 123 151 263 -7 q -3 501 -3 294 q 123 851 -3 706 q 502 1011 263 1011 q 881 851 739 1011 q 1008 501 1008 708 q 883 151 1008 292 q 502 -7 744 -7 m 502 60 q 830 197 709 60 q 940 501 940 322 q 831 805 940 681 q 502 944 709 944 q 174 805 296 944 q 65 501 65 680 q 173 197 65 320 q 502 60 294 60 m 741 394 q 661 246 731 302 q 496 190 591 190 q 294 285 369 190 q 228 497 228 370 q 295 714 228 625 q 499 813 370 813 q 656 762 588 813 q 733 625 724 711 l 634 625 q 589 704 629 673 q 498 735 550 735 q 377 666 421 735 q 334 504 334 597 q 374 340 334 408 q 490 272 415 272 q 589 304 549 272 q 638 394 628 337 l 741 394 \"},\"ώ\":{x_min:0,x_max:922,ha:1030,o:\"m 687 1040 l 498 819 l 415 819 l 549 1040 l 687 1040 m 922 339 q 856 97 922 203 q 650 -26 780 -26 q 538 9 587 -26 q 461 103 489 44 q 387 12 436 46 q 277 -22 339 -22 q 69 97 147 -22 q 0 338 0 202 q 45 551 0 444 q 161 737 84 643 l 302 737 q 175 552 219 647 q 124 336 124 446 q 155 179 124 248 q 275 88 197 88 q 375 163 341 88 q 400 294 400 219 l 400 572 l 524 572 l 524 294 q 561 135 524 192 q 643 88 591 88 q 762 182 719 88 q 797 341 797 257 q 745 555 797 450 q 619 737 705 637 l 760 737 q 874 551 835 640 q 922 339 922 444 \"},\"^\":{x_min:193.0625,x_max:598.609375,ha:792,o:\"m 598 772 l 515 772 l 395 931 l 277 772 l 193 772 l 326 1013 l 462 1013 l 598 772 \"},\"«\":{x_min:0,x_max:507.203125,ha:604,o:\"m 506 136 l 284 302 l 284 440 l 506 608 l 507 485 l 360 371 l 506 255 l 506 136 m 222 136 l 0 302 l 0 440 l 222 608 l 221 486 l 73 373 l 222 256 l 222 136 \"},D:{x_min:0,x_max:828,ha:935,o:\"m 389 1013 q 714 867 593 1013 q 828 521 828 729 q 712 161 828 309 q 382 0 587 0 l 0 0 l 0 1013 l 389 1013 m 376 124 q 607 247 523 124 q 681 510 681 355 q 607 771 681 662 q 376 896 522 896 l 139 896 l 139 124 l 376 124 \"},\"∙\":{x_min:0,x_max:142,ha:239,o:\"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 \"},\"ÿ\":{x_min:0,x_max:47,ha:125,o:\"m 47 3 q 37 -7 47 -7 q 28 0 30 -7 q 39 -4 32 -4 q 45 3 45 -1 l 37 0 q 28 9 28 0 q 39 19 28 19 l 47 16 l 47 19 l 47 3 m 37 1 q 44 8 44 1 q 37 16 44 16 q 30 8 30 16 q 37 1 30 1 m 26 1 l 23 22 l 14 0 l 3 22 l 3 3 l 0 25 l 13 1 l 22 25 l 26 1 \"},w:{x_min:0,x_max:1009.71875,ha:1100,o:\"m 1009 738 l 783 0 l 658 0 l 501 567 l 345 0 l 222 0 l 0 738 l 130 738 l 284 174 l 432 737 l 576 738 l 721 173 l 881 737 l 1009 738 \"},$:{x_min:0,x_max:700,ha:793,o:\"m 664 717 l 542 717 q 490 825 531 785 q 381 872 450 865 l 381 551 q 620 446 540 522 q 700 241 700 370 q 618 45 700 116 q 381 -25 536 -25 l 381 -152 l 307 -152 l 307 -25 q 81 62 162 -25 q 0 297 0 149 l 124 297 q 169 146 124 204 q 307 81 215 89 l 307 441 q 80 536 148 469 q 13 725 13 603 q 96 910 13 839 q 307 982 180 982 l 307 1077 l 381 1077 l 381 982 q 574 917 494 982 q 664 717 664 845 m 307 565 l 307 872 q 187 831 233 872 q 142 724 142 791 q 180 618 142 656 q 307 565 218 580 m 381 76 q 562 237 562 96 q 517 361 562 313 q 381 423 472 409 l 381 76 \"},\"\\\\\":{x_min:-0.015625,x_max:425.0625,ha:522,o:\"m 425 -129 l 337 -129 l 0 1041 l 83 1041 l 425 -129 \"},\"µ\":{x_min:0,x_max:697.21875,ha:747,o:\"m 697 -4 q 629 -14 658 -14 q 498 97 513 -14 q 422 9 470 41 q 313 -23 374 -23 q 207 4 258 -23 q 119 81 156 32 l 119 -278 l 0 -278 l 0 738 l 124 738 l 124 343 q 165 173 124 246 q 308 83 216 83 q 452 178 402 83 q 493 359 493 255 l 493 738 l 617 738 l 617 214 q 623 136 617 160 q 673 92 637 92 q 697 96 684 92 l 697 -4 \"},\"Ι\":{x_min:42,x_max:181,ha:297,o:\"m 181 0 l 42 0 l 42 1013 l 181 1013 l 181 0 \"},\"Ύ\":{x_min:0,x_max:1144.5,ha:1214,o:\"m 1144 1012 l 807 416 l 807 0 l 667 0 l 667 416 l 325 1012 l 465 1012 l 736 533 l 1004 1012 l 1144 1012 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 \"},\"’\":{x_min:0,x_max:139,ha:236,o:\"m 139 851 q 102 737 139 784 q 0 669 65 690 l 0 734 q 59 787 42 741 q 72 873 72 821 l 0 873 l 0 1013 l 139 1013 l 139 851 \"},\"Ν\":{x_min:0,x_max:801,ha:915,o:\"m 801 0 l 651 0 l 131 822 l 131 0 l 0 0 l 0 1013 l 151 1013 l 670 191 l 670 1013 l 801 1013 l 801 0 \"},\"-\":{x_min:8.71875,x_max:350.390625,ha:478,o:\"m 350 317 l 8 317 l 8 428 l 350 428 l 350 317 \"},Q:{x_min:0,x_max:968,ha:1072,o:\"m 954 5 l 887 -79 l 744 35 q 622 -11 687 2 q 483 -26 556 -26 q 127 130 262 -26 q 0 504 0 279 q 127 880 0 728 q 484 1041 262 1041 q 841 884 708 1041 q 968 507 968 735 q 933 293 968 398 q 832 104 899 188 l 954 5 m 723 191 q 802 330 777 248 q 828 499 828 412 q 744 790 828 673 q 483 922 650 922 q 228 791 322 922 q 142 505 142 673 q 227 221 142 337 q 487 91 323 91 q 632 123 566 91 l 520 215 l 587 301 l 723 191 \"},\"ς\":{x_min:1,x_max:676.28125,ha:740,o:\"m 676 460 l 551 460 q 498 595 542 546 q 365 651 448 651 q 199 578 263 651 q 136 401 136 505 q 266 178 136 241 q 508 106 387 142 q 640 -50 640 62 q 625 -158 640 -105 q 583 -278 611 -211 l 465 -278 q 498 -182 490 -211 q 515 -80 515 -126 q 381 12 515 -15 q 134 91 197 51 q 1 388 1 179 q 100 651 1 542 q 354 761 199 761 q 587 680 498 761 q 676 460 676 599 \"},M:{x_min:0,x_max:954,ha:1067,o:\"m 954 0 l 819 0 l 819 869 l 537 0 l 405 0 l 128 866 l 128 0 l 0 0 l 0 1013 l 200 1013 l 472 160 l 757 1013 l 954 1013 l 954 0 \"},\"Ψ\":{x_min:0,x_max:1006,ha:1094,o:\"m 1006 678 q 914 319 1006 429 q 571 200 814 200 l 571 0 l 433 0 l 433 200 q 92 319 194 200 q 0 678 0 429 l 0 1013 l 139 1013 l 139 679 q 191 417 139 492 q 433 326 255 326 l 433 1013 l 571 1013 l 571 326 l 580 326 q 813 423 747 326 q 868 679 868 502 l 868 1013 l 1006 1013 l 1006 678 \"},C:{x_min:0,x_max:886,ha:944,o:\"m 886 379 q 760 87 886 201 q 455 -26 634 -26 q 112 136 236 -26 q 0 509 0 283 q 118 882 0 737 q 469 1041 245 1041 q 748 955 630 1041 q 879 708 879 859 l 745 708 q 649 862 724 805 q 473 920 573 920 q 219 791 312 920 q 136 509 136 675 q 217 229 136 344 q 470 99 311 99 q 672 179 591 99 q 753 379 753 259 l 886 379 \"},\"!\":{x_min:0,x_max:138,ha:236,o:\"m 138 684 q 116 409 138 629 q 105 244 105 299 l 33 244 q 16 465 33 313 q 0 684 0 616 l 0 1013 l 138 1013 l 138 684 m 138 0 l 0 0 l 0 151 l 138 151 l 138 0 \"},\"{\":{x_min:0,x_max:480.5625,ha:578,o:\"m 480 -286 q 237 -213 303 -286 q 187 -45 187 -159 q 194 48 187 -15 q 201 141 201 112 q 164 264 201 225 q 0 314 118 314 l 0 417 q 164 471 119 417 q 201 605 201 514 q 199 665 201 644 q 193 772 193 769 q 241 941 193 887 q 480 1015 308 1015 l 480 915 q 336 866 375 915 q 306 742 306 828 q 310 662 306 717 q 314 577 314 606 q 288 452 314 500 q 176 365 256 391 q 289 275 257 337 q 314 143 314 226 q 313 84 314 107 q 310 -11 310 -5 q 339 -131 310 -94 q 480 -182 377 -182 l 480 -286 \"},X:{x_min:-0.015625,x_max:854.15625,ha:940,o:\"m 854 0 l 683 0 l 423 409 l 166 0 l 0 0 l 347 519 l 18 1013 l 186 1013 l 428 637 l 675 1013 l 836 1013 l 504 520 l 854 0 \"},\"#\":{x_min:0,x_max:963.890625,ha:1061,o:\"m 963 690 l 927 590 l 719 590 l 655 410 l 876 410 l 840 310 l 618 310 l 508 -3 l 393 -2 l 506 309 l 329 310 l 215 -2 l 102 -3 l 212 310 l 0 310 l 36 410 l 248 409 l 312 590 l 86 590 l 120 690 l 347 690 l 459 1006 l 573 1006 l 462 690 l 640 690 l 751 1006 l 865 1006 l 754 690 l 963 690 m 606 590 l 425 590 l 362 410 l 543 410 l 606 590 \"},\"ι\":{x_min:42,x_max:284,ha:361,o:\"m 284 3 q 233 -10 258 -5 q 182 -15 207 -15 q 85 26 119 -15 q 42 200 42 79 l 42 738 l 167 738 l 168 215 q 172 141 168 157 q 226 101 183 101 q 248 103 239 101 q 284 112 257 104 l 284 3 \"},\"Ά\":{x_min:0,x_max:906.953125,ha:982,o:\"m 283 1040 l 88 799 l 5 799 l 145 1040 l 283 1040 m 906 0 l 756 0 l 650 303 l 251 303 l 143 0 l 0 0 l 376 1012 l 529 1012 l 906 0 m 609 421 l 452 866 l 293 421 l 609 421 \"},\")\":{x_min:0,x_max:318,ha:415,o:\"m 318 365 q 257 25 318 191 q 87 -290 197 -141 l 0 -290 q 140 21 93 -128 q 193 360 193 189 q 141 704 193 537 q 0 1024 97 850 l 87 1024 q 257 706 197 871 q 318 365 318 542 \"},\"ε\":{x_min:0,x_max:634.71875,ha:714,o:\"m 634 234 q 527 38 634 110 q 300 -25 433 -25 q 98 29 183 -25 q 0 204 0 93 q 37 314 0 265 q 128 390 67 353 q 56 460 82 419 q 26 555 26 505 q 114 712 26 654 q 295 763 191 763 q 499 700 416 763 q 589 515 589 631 l 478 515 q 419 618 464 580 q 307 657 374 657 q 207 630 253 657 q 151 547 151 598 q 238 445 151 469 q 389 434 280 434 l 389 331 l 349 331 q 206 315 255 331 q 125 210 125 287 q 183 107 125 145 q 302 76 233 76 q 436 117 379 76 q 509 234 493 159 l 634 234 \"},\"Δ\":{x_min:0,x_max:952.78125,ha:1028,o:\"m 952 0 l 0 0 l 400 1013 l 551 1013 l 952 0 m 762 124 l 476 867 l 187 124 l 762 124 \"},\"}\":{x_min:0,x_max:481,ha:578,o:\"m 481 314 q 318 262 364 314 q 282 136 282 222 q 284 65 282 97 q 293 -58 293 -48 q 241 -217 293 -166 q 0 -286 174 -286 l 0 -182 q 143 -130 105 -182 q 171 -2 171 -93 q 168 81 171 22 q 165 144 165 140 q 188 275 165 229 q 306 365 220 339 q 191 455 224 391 q 165 588 165 505 q 168 681 165 624 q 171 742 171 737 q 141 865 171 827 q 0 915 102 915 l 0 1015 q 243 942 176 1015 q 293 773 293 888 q 287 675 293 741 q 282 590 282 608 q 318 466 282 505 q 481 417 364 417 l 481 314 \"},\"‰\":{x_min:-3,x_max:1672,ha:1821,o:\"m 846 0 q 664 76 732 0 q 603 244 603 145 q 662 412 603 344 q 846 489 729 489 q 1027 412 959 489 q 1089 244 1089 343 q 1029 76 1089 144 q 846 0 962 0 m 845 103 q 945 143 910 103 q 981 243 981 184 q 947 340 981 301 q 845 385 910 385 q 745 342 782 385 q 709 243 709 300 q 742 147 709 186 q 845 103 781 103 m 888 986 l 284 -25 l 199 -25 l 803 986 l 888 986 m 241 468 q 58 545 126 468 q -3 715 -3 615 q 56 881 -3 813 q 238 958 124 958 q 421 881 353 958 q 483 712 483 813 q 423 544 483 612 q 241 468 356 468 m 241 855 q 137 811 175 855 q 100 710 100 768 q 136 612 100 653 q 240 572 172 572 q 344 614 306 572 q 382 713 382 656 q 347 810 382 771 q 241 855 308 855 m 1428 0 q 1246 76 1314 0 q 1185 244 1185 145 q 1244 412 1185 344 q 1428 489 1311 489 q 1610 412 1542 489 q 1672 244 1672 343 q 1612 76 1672 144 q 1428 0 1545 0 m 1427 103 q 1528 143 1492 103 q 1564 243 1564 184 q 1530 340 1564 301 q 1427 385 1492 385 q 1327 342 1364 385 q 1291 243 1291 300 q 1324 147 1291 186 q 1427 103 1363 103 \"},a:{x_min:0,x_max:698.609375,ha:794,o:\"m 698 0 q 661 -12 679 -7 q 615 -17 643 -17 q 536 12 564 -17 q 500 96 508 41 q 384 6 456 37 q 236 -25 312 -25 q 65 31 130 -25 q 0 194 0 88 q 118 390 0 334 q 328 435 180 420 q 488 483 476 451 q 495 523 495 504 q 442 619 495 584 q 325 654 389 654 q 209 617 257 654 q 152 513 161 580 l 33 513 q 123 705 33 633 q 332 772 207 772 q 528 712 448 772 q 617 531 617 645 l 617 163 q 624 108 617 126 q 664 90 632 90 l 698 94 l 698 0 m 491 262 l 491 372 q 272 329 350 347 q 128 201 128 294 q 166 113 128 144 q 264 83 205 83 q 414 130 346 83 q 491 262 491 183 \"},\"—\":{x_min:0,x_max:941.671875,ha:1039,o:\"m 941 334 l 0 334 l 0 410 l 941 410 l 941 334 \"},\"=\":{x_min:8.71875,x_max:780.953125,ha:792,o:\"m 780 510 l 8 510 l 8 606 l 780 606 l 780 510 m 780 235 l 8 235 l 8 332 l 780 332 l 780 235 \"},N:{x_min:0,x_max:801,ha:914,o:\"m 801 0 l 651 0 l 131 823 l 131 0 l 0 0 l 0 1013 l 151 1013 l 670 193 l 670 1013 l 801 1013 l 801 0 \"},\"ρ\":{x_min:0,x_max:712,ha:797,o:\"m 712 369 q 620 94 712 207 q 362 -26 521 -26 q 230 2 292 -26 q 119 83 167 30 l 119 -278 l 0 -278 l 0 362 q 91 643 0 531 q 355 764 190 764 q 617 647 517 764 q 712 369 712 536 m 583 366 q 530 559 583 480 q 359 651 469 651 q 190 562 252 651 q 135 370 135 483 q 189 176 135 257 q 359 85 250 85 q 528 175 466 85 q 583 366 583 254 \"},\"¯\":{x_min:0,x_max:941.671875,ha:938,o:\"m 941 1033 l 0 1033 l 0 1109 l 941 1109 l 941 1033 \"},Z:{x_min:0,x_max:779,ha:849,o:\"m 779 0 l 0 0 l 0 113 l 621 896 l 40 896 l 40 1013 l 779 1013 l 778 887 l 171 124 l 779 124 l 779 0 \"},u:{x_min:0,x_max:617,ha:729,o:\"m 617 0 l 499 0 l 499 110 q 391 10 460 45 q 246 -25 322 -25 q 61 58 127 -25 q 0 258 0 136 l 0 738 l 125 738 l 125 284 q 156 148 125 202 q 273 82 197 82 q 433 165 369 82 q 493 340 493 243 l 493 738 l 617 738 l 617 0 \"},k:{x_min:0,x_max:612.484375,ha:697,o:\"m 612 738 l 338 465 l 608 0 l 469 0 l 251 382 l 121 251 l 121 0 l 0 0 l 0 1013 l 121 1013 l 121 402 l 456 738 l 612 738 \"},\"Η\":{x_min:0,x_max:803,ha:917,o:\"m 803 0 l 667 0 l 667 475 l 140 475 l 140 0 l 0 0 l 0 1013 l 140 1013 l 140 599 l 667 599 l 667 1013 l 803 1013 l 803 0 \"},\"Α\":{x_min:0,x_max:906.953125,ha:985,o:\"m 906 0 l 756 0 l 650 303 l 251 303 l 143 0 l 0 0 l 376 1013 l 529 1013 l 906 0 m 609 421 l 452 866 l 293 421 l 609 421 \"},s:{x_min:0,x_max:604,ha:697,o:\"m 604 217 q 501 36 604 104 q 292 -23 411 -23 q 86 43 166 -23 q 0 238 0 114 l 121 237 q 175 122 121 164 q 300 85 223 85 q 415 112 363 85 q 479 207 479 147 q 361 309 479 276 q 140 372 141 370 q 21 544 21 426 q 111 708 21 647 q 298 761 190 761 q 492 705 413 761 q 583 531 583 643 l 462 531 q 412 625 462 594 q 298 657 363 657 q 199 636 242 657 q 143 558 143 608 q 262 454 143 486 q 484 394 479 397 q 604 217 604 341 \"},B:{x_min:0,x_max:778,ha:876,o:\"m 580 546 q 724 469 670 535 q 778 311 778 403 q 673 83 778 171 q 432 0 575 0 l 0 0 l 0 1013 l 411 1013 q 629 957 541 1013 q 732 768 732 892 q 691 633 732 693 q 580 546 650 572 m 393 899 l 139 899 l 139 588 l 379 588 q 521 624 462 588 q 592 744 592 667 q 531 859 592 819 q 393 899 471 899 m 419 124 q 566 169 504 124 q 635 303 635 219 q 559 436 635 389 q 402 477 494 477 l 139 477 l 139 124 l 419 124 \"},\"…\":{x_min:0,x_max:614,ha:708,o:\"m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 m 378 0 l 236 0 l 236 151 l 378 151 l 378 0 m 614 0 l 472 0 l 472 151 l 614 151 l 614 0 \"},\"?\":{x_min:0,x_max:607,ha:704,o:\"m 607 777 q 543 599 607 674 q 422 474 482 537 q 357 272 357 391 l 236 272 q 297 487 236 395 q 411 619 298 490 q 474 762 474 691 q 422 885 474 838 q 301 933 371 933 q 179 880 228 933 q 124 706 124 819 l 0 706 q 94 963 0 872 q 302 1044 177 1044 q 511 973 423 1044 q 607 777 607 895 m 370 0 l 230 0 l 230 151 l 370 151 l 370 0 \"},H:{x_min:0,x_max:803,ha:915,o:\"m 803 0 l 667 0 l 667 475 l 140 475 l 140 0 l 0 0 l 0 1013 l 140 1013 l 140 599 l 667 599 l 667 1013 l 803 1013 l 803 0 \"},\"ν\":{x_min:0,x_max:675,ha:761,o:\"m 675 738 l 404 0 l 272 0 l 0 738 l 133 738 l 340 147 l 541 738 l 675 738 \"},c:{x_min:1,x_max:701.390625,ha:775,o:\"m 701 264 q 584 53 681 133 q 353 -26 487 -26 q 91 91 188 -26 q 1 370 1 201 q 92 645 1 537 q 353 761 190 761 q 572 688 479 761 q 690 493 666 615 l 556 493 q 487 606 545 562 q 356 650 428 650 q 186 563 246 650 q 134 372 134 487 q 188 179 134 258 q 359 88 250 88 q 492 136 437 88 q 566 264 548 185 l 701 264 \"},\"¶\":{x_min:0,x_max:566.671875,ha:678,o:\"m 21 892 l 52 892 l 98 761 l 145 892 l 176 892 l 178 741 l 157 741 l 157 867 l 108 741 l 88 741 l 40 871 l 40 741 l 21 741 l 21 892 m 308 854 l 308 731 q 252 691 308 691 q 227 691 240 691 q 207 696 213 695 l 207 712 l 253 706 q 288 733 288 706 l 288 763 q 244 741 279 741 q 193 797 193 741 q 261 860 193 860 q 287 860 273 860 q 308 854 302 855 m 288 842 l 263 843 q 213 796 213 843 q 248 756 213 756 q 288 796 288 756 l 288 842 m 566 988 l 502 988 l 502 -1 l 439 -1 l 439 988 l 317 988 l 317 -1 l 252 -1 l 252 602 q 81 653 155 602 q 0 805 0 711 q 101 989 0 918 q 309 1053 194 1053 l 566 1053 l 566 988 \"},\"β\":{x_min:0,x_max:660,ha:745,o:\"m 471 550 q 610 450 561 522 q 660 280 660 378 q 578 64 660 151 q 367 -22 497 -22 q 239 5 299 -22 q 126 82 178 32 l 126 -278 l 0 -278 l 0 593 q 54 903 0 801 q 318 1042 127 1042 q 519 964 436 1042 q 603 771 603 887 q 567 644 603 701 q 471 550 532 586 m 337 79 q 476 138 418 79 q 535 279 535 198 q 427 437 535 386 q 226 477 344 477 l 226 583 q 398 620 329 583 q 486 762 486 668 q 435 884 486 833 q 312 935 384 935 q 169 861 219 935 q 126 698 126 797 l 126 362 q 170 169 126 242 q 337 79 224 79 \"},\"Μ\":{x_min:0,x_max:954,ha:1068,o:\"m 954 0 l 819 0 l 819 868 l 537 0 l 405 0 l 128 865 l 128 0 l 0 0 l 0 1013 l 199 1013 l 472 158 l 758 1013 l 954 1013 l 954 0 \"},\"Ό\":{x_min:0.109375,x_max:1120,ha:1217,o:\"m 1120 505 q 994 132 1120 282 q 642 -29 861 -29 q 290 130 422 -29 q 167 505 167 280 q 294 883 167 730 q 650 1046 430 1046 q 999 882 868 1046 q 1120 505 1120 730 m 977 504 q 896 784 977 669 q 644 915 804 915 q 391 785 484 915 q 307 504 307 669 q 391 224 307 339 q 644 95 486 95 q 894 224 803 95 q 977 504 977 339 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 \"},\"Ή\":{x_min:0,x_max:1158,ha:1275,o:\"m 1158 0 l 1022 0 l 1022 475 l 496 475 l 496 0 l 356 0 l 356 1012 l 496 1012 l 496 599 l 1022 599 l 1022 1012 l 1158 1012 l 1158 0 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 \"},\"•\":{x_min:0,x_max:663.890625,ha:775,o:\"m 663 529 q 566 293 663 391 q 331 196 469 196 q 97 294 194 196 q 0 529 0 393 q 96 763 0 665 q 331 861 193 861 q 566 763 469 861 q 663 529 663 665 \"},\"¥\":{x_min:0.1875,x_max:819.546875,ha:886,o:\"m 563 561 l 697 561 l 696 487 l 520 487 l 482 416 l 482 380 l 697 380 l 695 308 l 482 308 l 482 0 l 342 0 l 342 308 l 125 308 l 125 380 l 342 380 l 342 417 l 303 487 l 125 487 l 125 561 l 258 561 l 0 1013 l 140 1013 l 411 533 l 679 1013 l 819 1013 l 563 561 \"},\"(\":{x_min:0,x_max:318.0625,ha:415,o:\"m 318 -290 l 230 -290 q 61 23 122 -142 q 0 365 0 190 q 62 712 0 540 q 230 1024 119 869 l 318 1024 q 175 705 219 853 q 125 360 125 542 q 176 22 125 187 q 318 -290 223 -127 \"},U:{x_min:0,x_max:796,ha:904,o:\"m 796 393 q 681 93 796 212 q 386 -25 566 -25 q 101 95 208 -25 q 0 393 0 211 l 0 1013 l 138 1013 l 138 391 q 204 191 138 270 q 394 107 276 107 q 586 191 512 107 q 656 391 656 270 l 656 1013 l 796 1013 l 796 393 \"},\"γ\":{x_min:0.5,x_max:744.953125,ha:822,o:\"m 744 737 l 463 54 l 463 -278 l 338 -278 l 338 54 l 154 495 q 104 597 124 569 q 13 651 67 651 l 0 651 l 0 751 l 39 753 q 168 711 121 753 q 242 594 207 676 l 403 208 l 617 737 l 744 737 \"},\"α\":{x_min:0,x_max:765.5625,ha:809,o:\"m 765 -4 q 698 -14 726 -14 q 564 97 586 -14 q 466 7 525 40 q 337 -26 407 -26 q 88 98 186 -26 q 0 369 0 212 q 88 637 0 525 q 337 760 184 760 q 465 728 407 760 q 563 637 524 696 l 563 739 l 685 739 l 685 222 q 693 141 685 168 q 748 94 708 94 q 765 96 760 94 l 765 -4 m 584 371 q 531 562 584 485 q 360 653 470 653 q 192 566 254 653 q 135 379 135 489 q 186 181 135 261 q 358 84 247 84 q 528 176 465 84 q 584 371 584 260 \"},F:{x_min:0,x_max:683.328125,ha:717,o:\"m 683 888 l 140 888 l 140 583 l 613 583 l 613 458 l 140 458 l 140 0 l 0 0 l 0 1013 l 683 1013 l 683 888 \"},\"­\":{x_min:0,x_max:705.5625,ha:803,o:\"m 705 334 l 0 334 l 0 410 l 705 410 l 705 334 \"},\":\":{x_min:0,x_max:142,ha:239,o:\"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 \"},\"Χ\":{x_min:0,x_max:854.171875,ha:935,o:\"m 854 0 l 683 0 l 423 409 l 166 0 l 0 0 l 347 519 l 18 1013 l 186 1013 l 427 637 l 675 1013 l 836 1013 l 504 521 l 854 0 \"},\"*\":{x_min:116,x_max:674,ha:792,o:\"m 674 768 l 475 713 l 610 544 l 517 477 l 394 652 l 272 478 l 178 544 l 314 713 l 116 766 l 153 876 l 341 812 l 342 1013 l 446 1013 l 446 811 l 635 874 l 674 768 \"},\"†\":{x_min:0,x_max:777,ha:835,o:\"m 458 804 l 777 804 l 777 683 l 458 683 l 458 0 l 319 0 l 319 681 l 0 683 l 0 804 l 319 804 l 319 1015 l 458 1013 l 458 804 \"},\"°\":{x_min:0,x_max:347,ha:444,o:\"m 173 802 q 43 856 91 802 q 0 977 0 905 q 45 1101 0 1049 q 173 1153 90 1153 q 303 1098 255 1153 q 347 977 347 1049 q 303 856 347 905 q 173 802 256 802 m 173 884 q 238 910 214 884 q 262 973 262 937 q 239 1038 262 1012 q 173 1064 217 1064 q 108 1037 132 1064 q 85 973 85 1010 q 108 910 85 937 q 173 884 132 884 \"},V:{x_min:0,x_max:862.71875,ha:940,o:\"m 862 1013 l 505 0 l 361 0 l 0 1013 l 143 1013 l 434 165 l 718 1012 l 862 1013 \"},\"Ξ\":{x_min:0,x_max:734.71875,ha:763,o:\"m 723 889 l 9 889 l 9 1013 l 723 1013 l 723 889 m 673 463 l 61 463 l 61 589 l 673 589 l 673 463 m 734 0 l 0 0 l 0 124 l 734 124 l 734 0 \"},\" \":{x_min:0,x_max:0,ha:853},\"Ϋ\":{x_min:0.328125,x_max:819.515625,ha:889,o:\"m 588 1046 l 460 1046 l 460 1189 l 588 1189 l 588 1046 m 360 1046 l 232 1046 l 232 1189 l 360 1189 l 360 1046 m 819 1012 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1012 l 140 1012 l 411 533 l 679 1012 l 819 1012 \"},\"”\":{x_min:0,x_max:347,ha:454,o:\"m 139 851 q 102 737 139 784 q 0 669 65 690 l 0 734 q 59 787 42 741 q 72 873 72 821 l 0 873 l 0 1013 l 139 1013 l 139 851 m 347 851 q 310 737 347 784 q 208 669 273 690 l 208 734 q 267 787 250 741 q 280 873 280 821 l 208 873 l 208 1013 l 347 1013 l 347 851 \"},\"@\":{x_min:0,x_max:1260,ha:1357,o:\"m 1098 -45 q 877 -160 1001 -117 q 633 -203 752 -203 q 155 -29 327 -203 q 0 360 0 127 q 176 802 0 616 q 687 1008 372 1008 q 1123 854 969 1008 q 1260 517 1260 718 q 1155 216 1260 341 q 868 82 1044 82 q 772 106 801 82 q 737 202 737 135 q 647 113 700 144 q 527 82 594 82 q 367 147 420 82 q 314 312 314 212 q 401 565 314 452 q 639 690 498 690 q 810 588 760 690 l 849 668 l 938 668 q 877 441 900 532 q 833 226 833 268 q 853 182 833 198 q 902 167 873 167 q 1088 272 1012 167 q 1159 512 1159 372 q 1051 793 1159 681 q 687 925 925 925 q 248 747 415 925 q 97 361 97 586 q 226 26 97 159 q 627 -122 370 -122 q 856 -87 737 -122 q 1061 8 976 -53 l 1098 -45 m 786 488 q 738 580 777 545 q 643 615 700 615 q 483 517 548 615 q 425 322 425 430 q 457 203 425 250 q 552 156 490 156 q 722 273 665 156 q 786 488 738 309 \"},\"Ί\":{x_min:0,x_max:499,ha:613,o:\"m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 m 499 0 l 360 0 l 360 1012 l 499 1012 l 499 0 \"},i:{x_min:14,x_max:136,ha:275,o:\"m 136 873 l 14 873 l 14 1013 l 136 1013 l 136 873 m 136 0 l 14 0 l 14 737 l 136 737 l 136 0 \"},\"Β\":{x_min:0,x_max:778,ha:877,o:\"m 580 545 q 724 468 671 534 q 778 310 778 402 q 673 83 778 170 q 432 0 575 0 l 0 0 l 0 1013 l 411 1013 q 629 957 541 1013 q 732 768 732 891 q 691 632 732 692 q 580 545 650 571 m 393 899 l 139 899 l 139 587 l 379 587 q 521 623 462 587 q 592 744 592 666 q 531 859 592 819 q 393 899 471 899 m 419 124 q 566 169 504 124 q 635 302 635 219 q 559 435 635 388 q 402 476 494 476 l 139 476 l 139 124 l 419 124 \"},\"υ\":{x_min:0,x_max:617,ha:725,o:\"m 617 352 q 540 94 617 199 q 308 -24 455 -24 q 76 94 161 -24 q 0 352 0 199 l 0 739 l 126 739 l 126 355 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 355 492 257 l 492 739 l 617 739 l 617 352 \"},\"]\":{x_min:0,x_max:275,ha:372,o:\"m 275 -281 l 0 -281 l 0 -187 l 151 -187 l 151 920 l 0 920 l 0 1013 l 275 1013 l 275 -281 \"},m:{x_min:0,x_max:1019,ha:1128,o:\"m 1019 0 l 897 0 l 897 454 q 860 591 897 536 q 739 660 816 660 q 613 586 659 660 q 573 436 573 522 l 573 0 l 447 0 l 447 455 q 412 591 447 535 q 294 657 372 657 q 165 586 213 657 q 122 437 122 521 l 122 0 l 0 0 l 0 738 l 117 738 l 117 640 q 202 730 150 697 q 316 763 254 763 q 437 730 381 763 q 525 642 494 697 q 621 731 559 700 q 753 763 682 763 q 943 694 867 763 q 1019 512 1019 625 l 1019 0 \"},\"χ\":{x_min:8.328125,x_max:780.5625,ha:815,o:\"m 780 -278 q 715 -294 747 -294 q 616 -257 663 -294 q 548 -175 576 -227 l 379 133 l 143 -277 l 9 -277 l 313 254 l 163 522 q 127 586 131 580 q 36 640 91 640 q 8 637 27 640 l 8 752 l 52 757 q 162 719 113 757 q 236 627 200 690 l 383 372 l 594 737 l 726 737 l 448 250 l 625 -69 q 670 -153 647 -110 q 743 -188 695 -188 q 780 -184 759 -188 l 780 -278 \"},\"ί\":{x_min:42,x_max:326.71875,ha:361,o:\"m 284 3 q 233 -10 258 -5 q 182 -15 207 -15 q 85 26 119 -15 q 42 200 42 79 l 42 737 l 167 737 l 168 215 q 172 141 168 157 q 226 101 183 101 q 248 102 239 101 q 284 112 257 104 l 284 3 m 326 1040 l 137 819 l 54 819 l 189 1040 l 326 1040 \"},\"Ζ\":{x_min:0,x_max:779.171875,ha:850,o:\"m 779 0 l 0 0 l 0 113 l 620 896 l 40 896 l 40 1013 l 779 1013 l 779 887 l 170 124 l 779 124 l 779 0 \"},R:{x_min:0,x_max:781.953125,ha:907,o:\"m 781 0 l 623 0 q 587 242 590 52 q 407 433 585 433 l 138 433 l 138 0 l 0 0 l 0 1013 l 396 1013 q 636 946 539 1013 q 749 731 749 868 q 711 597 749 659 q 608 502 674 534 q 718 370 696 474 q 729 207 722 352 q 781 26 736 62 l 781 0 m 373 551 q 533 594 465 551 q 614 731 614 645 q 532 859 614 815 q 373 896 465 896 l 138 896 l 138 551 l 373 551 \"},o:{x_min:0,x_max:713,ha:821,o:\"m 357 -25 q 94 91 194 -25 q 0 368 0 202 q 93 642 0 533 q 357 761 193 761 q 618 644 518 761 q 713 368 713 533 q 619 91 713 201 q 357 -25 521 -25 m 357 85 q 528 175 465 85 q 584 369 584 255 q 529 562 584 484 q 357 651 467 651 q 189 560 250 651 q 135 369 135 481 q 187 177 135 257 q 357 85 250 85 \"},K:{x_min:0,x_max:819.46875,ha:906,o:\"m 819 0 l 649 0 l 294 509 l 139 355 l 139 0 l 0 0 l 0 1013 l 139 1013 l 139 526 l 626 1013 l 809 1013 l 395 600 l 819 0 \"},\",\":{x_min:0,x_max:142,ha:239,o:\"m 142 -12 q 105 -132 142 -82 q 0 -205 68 -182 l 0 -138 q 57 -82 40 -124 q 70 0 70 -51 l 0 0 l 0 151 l 142 151 l 142 -12 \"},d:{x_min:0,x_max:683,ha:796,o:\"m 683 0 l 564 0 l 564 93 q 456 6 516 38 q 327 -25 395 -25 q 87 100 181 -25 q 0 365 0 215 q 90 639 0 525 q 343 763 187 763 q 564 647 486 763 l 564 1013 l 683 1013 l 683 0 m 582 373 q 529 562 582 484 q 361 653 468 653 q 190 561 253 653 q 135 365 135 479 q 189 175 135 254 q 358 85 251 85 q 529 178 468 85 q 582 373 582 258 \"},\"¨\":{x_min:-109,x_max:247,ha:232,o:\"m 247 1046 l 119 1046 l 119 1189 l 247 1189 l 247 1046 m 19 1046 l -109 1046 l -109 1189 l 19 1189 l 19 1046 \"},E:{x_min:0,x_max:736.109375,ha:789,o:\"m 736 0 l 0 0 l 0 1013 l 725 1013 l 725 889 l 139 889 l 139 585 l 677 585 l 677 467 l 139 467 l 139 125 l 736 125 l 736 0 \"},Y:{x_min:0,x_max:820,ha:886,o:\"m 820 1013 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1013 l 140 1013 l 411 534 l 679 1012 l 820 1013 \"},\"\\\"\":{x_min:0,x_max:299,ha:396,o:\"m 299 606 l 203 606 l 203 988 l 299 988 l 299 606 m 96 606 l 0 606 l 0 988 l 96 988 l 96 606 \"},\"‹\":{x_min:17.984375,x_max:773.609375,ha:792,o:\"m 773 40 l 18 376 l 17 465 l 773 799 l 773 692 l 159 420 l 773 149 l 773 40 \"},\"„\":{x_min:0,x_max:364,ha:467,o:\"m 141 -12 q 104 -132 141 -82 q 0 -205 67 -182 l 0 -138 q 56 -82 40 -124 q 69 0 69 -51 l 0 0 l 0 151 l 141 151 l 141 -12 m 364 -12 q 327 -132 364 -82 q 222 -205 290 -182 l 222 -138 q 279 -82 262 -124 q 292 0 292 -51 l 222 0 l 222 151 l 364 151 l 364 -12 \"},\"δ\":{x_min:1,x_max:710,ha:810,o:\"m 710 360 q 616 87 710 196 q 356 -28 518 -28 q 99 82 197 -28 q 1 356 1 192 q 100 606 1 509 q 355 703 199 703 q 180 829 288 754 q 70 903 124 866 l 70 1012 l 643 1012 l 643 901 l 258 901 q 462 763 422 794 q 636 592 577 677 q 710 360 710 485 m 584 365 q 552 501 584 447 q 451 602 521 555 q 372 611 411 611 q 197 541 258 611 q 136 355 136 472 q 190 171 136 245 q 358 85 252 85 q 528 173 465 85 q 584 365 584 252 \"},\"έ\":{x_min:0,x_max:634.71875,ha:714,o:\"m 634 234 q 527 38 634 110 q 300 -25 433 -25 q 98 29 183 -25 q 0 204 0 93 q 37 313 0 265 q 128 390 67 352 q 56 459 82 419 q 26 555 26 505 q 114 712 26 654 q 295 763 191 763 q 499 700 416 763 q 589 515 589 631 l 478 515 q 419 618 464 580 q 307 657 374 657 q 207 630 253 657 q 151 547 151 598 q 238 445 151 469 q 389 434 280 434 l 389 331 l 349 331 q 206 315 255 331 q 125 210 125 287 q 183 107 125 145 q 302 76 233 76 q 436 117 379 76 q 509 234 493 159 l 634 234 m 520 1040 l 331 819 l 248 819 l 383 1040 l 520 1040 \"},\"ω\":{x_min:0,x_max:922,ha:1031,o:\"m 922 339 q 856 97 922 203 q 650 -26 780 -26 q 538 9 587 -26 q 461 103 489 44 q 387 12 436 46 q 277 -22 339 -22 q 69 97 147 -22 q 0 339 0 203 q 45 551 0 444 q 161 738 84 643 l 302 738 q 175 553 219 647 q 124 336 124 446 q 155 179 124 249 q 275 88 197 88 q 375 163 341 88 q 400 294 400 219 l 400 572 l 524 572 l 524 294 q 561 135 524 192 q 643 88 591 88 q 762 182 719 88 q 797 342 797 257 q 745 556 797 450 q 619 738 705 638 l 760 738 q 874 551 835 640 q 922 339 922 444 \"},\"´\":{x_min:0,x_max:96,ha:251,o:\"m 96 606 l 0 606 l 0 988 l 96 988 l 96 606 \"},\"±\":{x_min:11,x_max:781,ha:792,o:\"m 781 490 l 446 490 l 446 255 l 349 255 l 349 490 l 11 490 l 11 586 l 349 586 l 349 819 l 446 819 l 446 586 l 781 586 l 781 490 m 781 21 l 11 21 l 11 115 l 781 115 l 781 21 \"},\"|\":{x_min:343,x_max:449,ha:792,o:\"m 449 462 l 343 462 l 343 986 l 449 986 l 449 462 m 449 -242 l 343 -242 l 343 280 l 449 280 l 449 -242 \"},\"ϋ\":{x_min:0,x_max:617,ha:725,o:\"m 482 800 l 372 800 l 372 925 l 482 925 l 482 800 m 239 800 l 129 800 l 129 925 l 239 925 l 239 800 m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 \"},\"§\":{x_min:0,x_max:593,ha:690,o:\"m 593 425 q 554 312 593 369 q 467 233 516 254 q 537 83 537 172 q 459 -74 537 -12 q 288 -133 387 -133 q 115 -69 184 -133 q 47 96 47 -6 l 166 96 q 199 7 166 40 q 288 -26 232 -26 q 371 -5 332 -26 q 420 60 420 21 q 311 201 420 139 q 108 309 210 255 q 0 490 0 383 q 33 602 0 551 q 124 687 66 654 q 75 743 93 712 q 58 812 58 773 q 133 984 58 920 q 300 1043 201 1043 q 458 987 394 1043 q 529 814 529 925 l 411 814 q 370 908 404 877 q 289 939 336 939 q 213 911 246 939 q 180 841 180 883 q 286 720 180 779 q 484 612 480 615 q 593 425 593 534 m 467 409 q 355 544 467 473 q 196 630 228 612 q 146 587 162 609 q 124 525 124 558 q 239 387 124 462 q 398 298 369 315 q 448 345 429 316 q 467 409 467 375 \"},b:{x_min:0,x_max:685,ha:783,o:\"m 685 372 q 597 99 685 213 q 347 -25 501 -25 q 219 5 277 -25 q 121 93 161 36 l 121 0 l 0 0 l 0 1013 l 121 1013 l 121 634 q 214 723 157 692 q 341 754 272 754 q 591 637 493 754 q 685 372 685 526 m 554 356 q 499 550 554 470 q 328 644 437 644 q 162 556 223 644 q 108 369 108 478 q 160 176 108 256 q 330 83 221 83 q 498 169 435 83 q 554 356 554 245 \"},q:{x_min:0,x_max:683,ha:876,o:\"m 683 -278 l 564 -278 l 564 97 q 474 8 533 39 q 345 -23 415 -23 q 91 93 188 -23 q 0 364 0 203 q 87 635 0 522 q 337 760 184 760 q 466 727 408 760 q 564 637 523 695 l 564 737 l 683 737 l 683 -278 m 582 375 q 527 564 582 488 q 358 652 466 652 q 190 565 253 652 q 135 377 135 488 q 189 179 135 261 q 361 84 251 84 q 530 179 469 84 q 582 375 582 260 \"},\"Ω\":{x_min:-0.171875,x_max:969.5625,ha:1068,o:\"m 969 0 l 555 0 l 555 123 q 744 308 675 194 q 814 558 814 423 q 726 812 814 709 q 484 922 633 922 q 244 820 334 922 q 154 567 154 719 q 223 316 154 433 q 412 123 292 199 l 412 0 l 0 0 l 0 124 l 217 124 q 68 327 122 210 q 15 572 15 444 q 144 911 15 781 q 484 1041 274 1041 q 822 909 691 1041 q 953 569 953 777 q 899 326 953 443 q 750 124 846 210 l 969 124 l 969 0 \"},\"ύ\":{x_min:0,x_max:617,ha:725,o:\"m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 m 535 1040 l 346 819 l 262 819 l 397 1040 l 535 1040 \"},z:{x_min:-0.015625,x_max:613.890625,ha:697,o:\"m 613 0 l 0 0 l 0 100 l 433 630 l 20 630 l 20 738 l 594 738 l 593 636 l 163 110 l 613 110 l 613 0 \"},\"™\":{x_min:0,x_max:894,ha:1000,o:\"m 389 951 l 229 951 l 229 503 l 160 503 l 160 951 l 0 951 l 0 1011 l 389 1011 l 389 951 m 894 503 l 827 503 l 827 939 l 685 503 l 620 503 l 481 937 l 481 503 l 417 503 l 417 1011 l 517 1011 l 653 580 l 796 1010 l 894 1011 l 894 503 \"},\"ή\":{x_min:0.78125,x_max:697,ha:810,o:\"m 697 -278 l 572 -278 l 572 454 q 540 587 572 536 q 425 650 501 650 q 271 579 337 650 q 206 420 206 509 l 206 0 l 81 0 l 81 489 q 73 588 81 562 q 0 644 56 644 l 0 741 q 68 755 38 755 q 158 721 124 755 q 200 630 193 687 q 297 726 234 692 q 434 761 359 761 q 620 692 544 761 q 697 516 697 624 l 697 -278 m 479 1040 l 290 819 l 207 819 l 341 1040 l 479 1040 \"},\"Θ\":{x_min:0,x_max:960,ha:1056,o:\"m 960 507 q 833 129 960 280 q 476 -32 698 -32 q 123 129 255 -32 q 0 507 0 280 q 123 883 0 732 q 476 1045 255 1045 q 832 883 696 1045 q 960 507 960 732 m 817 500 q 733 789 817 669 q 476 924 639 924 q 223 792 317 924 q 142 507 142 675 q 222 222 142 339 q 476 89 315 89 q 730 218 636 89 q 817 500 817 334 m 716 449 l 243 449 l 243 571 l 716 571 l 716 449 \"},\"®\":{x_min:-3,x_max:1008,ha:1106,o:\"m 503 532 q 614 562 566 532 q 672 658 672 598 q 614 747 672 716 q 503 772 569 772 l 338 772 l 338 532 l 503 532 m 502 -7 q 123 151 263 -7 q -3 501 -3 294 q 123 851 -3 706 q 502 1011 263 1011 q 881 851 739 1011 q 1008 501 1008 708 q 883 151 1008 292 q 502 -7 744 -7 m 502 60 q 830 197 709 60 q 940 501 940 322 q 831 805 940 681 q 502 944 709 944 q 174 805 296 944 q 65 501 65 680 q 173 197 65 320 q 502 60 294 60 m 788 146 l 678 146 q 653 316 655 183 q 527 449 652 449 l 338 449 l 338 146 l 241 146 l 241 854 l 518 854 q 688 808 621 854 q 766 658 766 755 q 739 563 766 607 q 668 497 713 519 q 751 331 747 472 q 788 164 756 190 l 788 146 \"},\"~\":{x_min:0,x_max:833,ha:931,o:\"m 833 958 q 778 753 833 831 q 594 665 716 665 q 402 761 502 665 q 240 857 302 857 q 131 795 166 857 q 104 665 104 745 l 0 665 q 54 867 0 789 q 237 958 116 958 q 429 861 331 958 q 594 765 527 765 q 704 827 670 765 q 729 958 729 874 l 833 958 \"},\"Ε\":{x_min:0,x_max:736.21875,ha:778,o:\"m 736 0 l 0 0 l 0 1013 l 725 1013 l 725 889 l 139 889 l 139 585 l 677 585 l 677 467 l 139 467 l 139 125 l 736 125 l 736 0 \"},\"³\":{x_min:0,x_max:450,ha:547,o:\"m 450 552 q 379 413 450 464 q 220 366 313 366 q 69 414 130 366 q 0 567 0 470 l 85 567 q 126 470 85 504 q 225 437 168 437 q 320 467 280 437 q 360 552 360 498 q 318 632 360 608 q 213 657 276 657 q 195 657 203 657 q 176 657 181 657 l 176 722 q 279 733 249 722 q 334 815 334 752 q 300 881 334 856 q 220 907 267 907 q 133 875 169 907 q 97 781 97 844 l 15 781 q 78 926 15 875 q 220 972 135 972 q 364 930 303 972 q 426 817 426 888 q 344 697 426 733 q 421 642 392 681 q 450 552 450 603 \"},\"[\":{x_min:0,x_max:273.609375,ha:371,o:\"m 273 -281 l 0 -281 l 0 1013 l 273 1013 l 273 920 l 124 920 l 124 -187 l 273 -187 l 273 -281 \"},L:{x_min:0,x_max:645.828125,ha:696,o:\"m 645 0 l 0 0 l 0 1013 l 140 1013 l 140 126 l 645 126 l 645 0 \"},\"σ\":{x_min:0,x_max:803.390625,ha:894,o:\"m 803 628 l 633 628 q 713 368 713 512 q 618 93 713 204 q 357 -25 518 -25 q 94 91 194 -25 q 0 368 0 201 q 94 644 0 533 q 356 761 194 761 q 481 750 398 761 q 608 739 564 739 l 803 739 l 803 628 m 360 85 q 529 180 467 85 q 584 374 584 262 q 527 566 584 490 q 352 651 463 651 q 187 559 247 651 q 135 368 135 478 q 189 175 135 254 q 360 85 251 85 \"},\"ζ\":{x_min:0,x_max:573,ha:642,o:\"m 573 -40 q 553 -162 573 -97 q 510 -278 543 -193 l 400 -278 q 441 -187 428 -219 q 462 -90 462 -132 q 378 -14 462 -14 q 108 45 197 -14 q 0 290 0 117 q 108 631 0 462 q 353 901 194 767 l 55 901 l 55 1012 l 561 1012 l 561 924 q 261 669 382 831 q 128 301 128 489 q 243 117 128 149 q 458 98 350 108 q 573 -40 573 80 \"},\"θ\":{x_min:0,x_max:674,ha:778,o:\"m 674 496 q 601 160 674 304 q 336 -26 508 -26 q 73 153 165 -26 q 0 485 0 296 q 72 840 0 683 q 343 1045 166 1045 q 605 844 516 1045 q 674 496 674 692 m 546 579 q 498 798 546 691 q 336 935 437 935 q 178 798 237 935 q 126 579 137 701 l 546 579 m 546 475 l 126 475 q 170 233 126 348 q 338 80 230 80 q 504 233 447 80 q 546 475 546 346 \"},\"Ο\":{x_min:0,x_max:958,ha:1054,o:\"m 485 1042 q 834 883 703 1042 q 958 511 958 735 q 834 136 958 287 q 481 -26 701 -26 q 126 130 261 -26 q 0 504 0 279 q 127 880 0 729 q 485 1042 263 1042 m 480 98 q 731 225 638 98 q 815 504 815 340 q 733 783 815 670 q 480 913 640 913 q 226 785 321 913 q 142 504 142 671 q 226 224 142 339 q 480 98 319 98 \"},\"Γ\":{x_min:0,x_max:705.28125,ha:749,o:\"m 705 886 l 140 886 l 140 0 l 0 0 l 0 1012 l 705 1012 l 705 886 \"},\" \":{x_min:0,x_max:0,ha:375},\"%\":{x_min:-3,x_max:1089,ha:1186,o:\"m 845 0 q 663 76 731 0 q 602 244 602 145 q 661 412 602 344 q 845 489 728 489 q 1027 412 959 489 q 1089 244 1089 343 q 1029 76 1089 144 q 845 0 962 0 m 844 103 q 945 143 909 103 q 981 243 981 184 q 947 340 981 301 q 844 385 909 385 q 744 342 781 385 q 708 243 708 300 q 741 147 708 186 q 844 103 780 103 m 888 986 l 284 -25 l 199 -25 l 803 986 l 888 986 m 241 468 q 58 545 126 468 q -3 715 -3 615 q 56 881 -3 813 q 238 958 124 958 q 421 881 353 958 q 483 712 483 813 q 423 544 483 612 q 241 468 356 468 m 241 855 q 137 811 175 855 q 100 710 100 768 q 136 612 100 653 q 240 572 172 572 q 344 614 306 572 q 382 713 382 656 q 347 810 382 771 q 241 855 308 855 \"},P:{x_min:0,x_max:726,ha:806,o:\"m 424 1013 q 640 931 555 1013 q 726 719 726 850 q 637 506 726 587 q 413 426 548 426 l 140 426 l 140 0 l 0 0 l 0 1013 l 424 1013 m 379 889 l 140 889 l 140 548 l 372 548 q 522 589 459 548 q 593 720 593 637 q 528 845 593 801 q 379 889 463 889 \"},\"Έ\":{x_min:0,x_max:1078.21875,ha:1118,o:\"m 1078 0 l 342 0 l 342 1013 l 1067 1013 l 1067 889 l 481 889 l 481 585 l 1019 585 l 1019 467 l 481 467 l 481 125 l 1078 125 l 1078 0 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 \"},\"Ώ\":{x_min:0.125,x_max:1136.546875,ha:1235,o:\"m 1136 0 l 722 0 l 722 123 q 911 309 842 194 q 981 558 981 423 q 893 813 981 710 q 651 923 800 923 q 411 821 501 923 q 321 568 321 720 q 390 316 321 433 q 579 123 459 200 l 579 0 l 166 0 l 166 124 l 384 124 q 235 327 289 210 q 182 572 182 444 q 311 912 182 782 q 651 1042 441 1042 q 989 910 858 1042 q 1120 569 1120 778 q 1066 326 1120 443 q 917 124 1013 210 l 1136 124 l 1136 0 m 277 1040 l 83 800 l 0 800 l 140 1041 l 277 1040 \"},_:{x_min:0,x_max:705.5625,ha:803,o:\"m 705 -334 l 0 -334 l 0 -234 l 705 -234 l 705 -334 \"},\"Ϊ\":{x_min:-110,x_max:246,ha:275,o:\"m 246 1046 l 118 1046 l 118 1189 l 246 1189 l 246 1046 m 18 1046 l -110 1046 l -110 1189 l 18 1189 l 18 1046 m 136 0 l 0 0 l 0 1012 l 136 1012 l 136 0 \"},\"+\":{x_min:23,x_max:768,ha:792,o:\"m 768 372 l 444 372 l 444 0 l 347 0 l 347 372 l 23 372 l 23 468 l 347 468 l 347 840 l 444 840 l 444 468 l 768 468 l 768 372 \"},\"½\":{x_min:0,x_max:1050,ha:1149,o:\"m 1050 0 l 625 0 q 712 178 625 108 q 878 277 722 187 q 967 385 967 328 q 932 456 967 429 q 850 484 897 484 q 759 450 798 484 q 721 352 721 416 l 640 352 q 706 502 640 448 q 851 551 766 551 q 987 509 931 551 q 1050 385 1050 462 q 976 251 1050 301 q 829 179 902 215 q 717 68 740 133 l 1050 68 l 1050 0 m 834 985 l 215 -28 l 130 -28 l 750 984 l 834 985 m 224 422 l 142 422 l 142 811 l 0 811 l 0 867 q 104 889 62 867 q 164 973 157 916 l 224 973 l 224 422 \"},\"Ρ\":{x_min:0,x_max:720,ha:783,o:\"m 424 1013 q 637 933 554 1013 q 720 723 720 853 q 633 508 720 591 q 413 426 546 426 l 140 426 l 140 0 l 0 0 l 0 1013 l 424 1013 m 378 889 l 140 889 l 140 548 l 371 548 q 521 589 458 548 q 592 720 592 637 q 527 845 592 801 q 378 889 463 889 \"},\"'\":{x_min:0,x_max:139,ha:236,o:\"m 139 851 q 102 737 139 784 q 0 669 65 690 l 0 734 q 59 787 42 741 q 72 873 72 821 l 0 873 l 0 1013 l 139 1013 l 139 851 \"},\"ª\":{x_min:0,x_max:350,ha:397,o:\"m 350 625 q 307 616 328 616 q 266 631 281 616 q 247 673 251 645 q 190 628 225 644 q 116 613 156 613 q 32 641 64 613 q 0 722 0 669 q 72 826 0 800 q 247 866 159 846 l 247 887 q 220 934 247 916 q 162 953 194 953 q 104 934 129 953 q 76 882 80 915 l 16 882 q 60 976 16 941 q 166 1011 104 1011 q 266 979 224 1011 q 308 891 308 948 l 308 706 q 311 679 308 688 q 331 670 315 670 l 350 672 l 350 625 m 247 757 l 247 811 q 136 790 175 798 q 64 726 64 773 q 83 682 64 697 q 132 667 103 667 q 207 690 174 667 q 247 757 247 718 \"},\"΅\":{x_min:0,x_max:450,ha:553,o:\"m 450 800 l 340 800 l 340 925 l 450 925 l 450 800 m 406 1040 l 212 800 l 129 800 l 269 1040 l 406 1040 m 110 800 l 0 800 l 0 925 l 110 925 l 110 800 \"},T:{x_min:0,x_max:777,ha:835,o:\"m 777 894 l 458 894 l 458 0 l 319 0 l 319 894 l 0 894 l 0 1013 l 777 1013 l 777 894 \"},\"Φ\":{x_min:0,x_max:915,ha:997,o:\"m 527 0 l 389 0 l 389 122 q 110 231 220 122 q 0 509 0 340 q 110 785 0 677 q 389 893 220 893 l 389 1013 l 527 1013 l 527 893 q 804 786 693 893 q 915 509 915 679 q 805 231 915 341 q 527 122 696 122 l 527 0 m 527 226 q 712 310 641 226 q 779 507 779 389 q 712 705 779 627 q 527 787 641 787 l 527 226 m 389 226 l 389 787 q 205 698 275 775 q 136 505 136 620 q 206 308 136 391 q 389 226 276 226 \"},\"⁋\":{x_min:0,x_max:0,ha:694},j:{x_min:-77.78125,x_max:167,ha:349,o:\"m 167 871 l 42 871 l 42 1013 l 167 1013 l 167 871 m 167 -80 q 121 -231 167 -184 q -26 -278 76 -278 l -77 -278 l -77 -164 l -41 -164 q 26 -143 11 -164 q 42 -65 42 -122 l 42 737 l 167 737 l 167 -80 \"},\"Σ\":{x_min:0,x_max:756.953125,ha:819,o:\"m 756 0 l 0 0 l 0 107 l 395 523 l 22 904 l 22 1013 l 745 1013 l 745 889 l 209 889 l 566 523 l 187 125 l 756 125 l 756 0 \"},\"›\":{x_min:18.0625,x_max:774,ha:792,o:\"m 774 376 l 18 40 l 18 149 l 631 421 l 18 692 l 18 799 l 774 465 l 774 376 \"},\"<\":{x_min:17.984375,x_max:773.609375,ha:792,o:\"m 773 40 l 18 376 l 17 465 l 773 799 l 773 692 l 159 420 l 773 149 l 773 40 \"},\"£\":{x_min:0,x_max:704.484375,ha:801,o:\"m 704 41 q 623 -10 664 5 q 543 -26 583 -26 q 359 15 501 -26 q 243 36 288 36 q 158 23 197 36 q 73 -21 119 10 l 6 76 q 125 195 90 150 q 175 331 175 262 q 147 443 175 383 l 0 443 l 0 512 l 108 512 q 43 734 43 623 q 120 929 43 854 q 358 1010 204 1010 q 579 936 487 1010 q 678 729 678 857 l 678 684 l 552 684 q 504 838 552 780 q 362 896 457 896 q 216 852 263 896 q 176 747 176 815 q 199 627 176 697 q 248 512 217 574 l 468 512 l 468 443 l 279 443 q 297 356 297 398 q 230 194 297 279 q 153 107 211 170 q 227 133 190 125 q 293 142 264 142 q 410 119 339 142 q 516 96 482 96 q 579 105 550 96 q 648 142 608 115 l 704 41 \"},t:{x_min:0,x_max:367,ha:458,o:\"m 367 0 q 312 -5 339 -2 q 262 -8 284 -8 q 145 28 183 -8 q 108 143 108 64 l 108 638 l 0 638 l 0 738 l 108 738 l 108 944 l 232 944 l 232 738 l 367 738 l 367 638 l 232 638 l 232 185 q 248 121 232 140 q 307 102 264 102 q 345 104 330 102 q 367 107 360 107 l 367 0 \"},\"¬\":{x_min:0,x_max:706,ha:803,o:\"m 706 411 l 706 158 l 630 158 l 630 335 l 0 335 l 0 411 l 706 411 \"},\"λ\":{x_min:0,x_max:750,ha:803,o:\"m 750 -7 q 679 -15 716 -15 q 538 59 591 -15 q 466 214 512 97 l 336 551 l 126 0 l 0 0 l 270 705 q 223 837 247 770 q 116 899 190 899 q 90 898 100 899 l 90 1004 q 152 1011 125 1011 q 298 938 244 1011 q 373 783 326 901 l 605 192 q 649 115 629 136 q 716 95 669 95 l 736 95 q 750 97 745 97 l 750 -7 \"},W:{x_min:0,x_max:1263.890625,ha:1351,o:\"m 1263 1013 l 995 0 l 859 0 l 627 837 l 405 0 l 265 0 l 0 1013 l 136 1013 l 342 202 l 556 1013 l 701 1013 l 921 207 l 1133 1012 l 1263 1013 \"},\">\":{x_min:18.0625,x_max:774,ha:792,o:\"m 774 376 l 18 40 l 18 149 l 631 421 l 18 692 l 18 799 l 774 465 l 774 376 \"},v:{x_min:0,x_max:675.15625,ha:761,o:\"m 675 738 l 404 0 l 272 0 l 0 738 l 133 737 l 340 147 l 541 737 l 675 738 \"},\"τ\":{x_min:0.28125,x_max:644.5,ha:703,o:\"m 644 628 l 382 628 l 382 179 q 388 120 382 137 q 436 91 401 91 q 474 94 447 91 q 504 97 501 97 l 504 0 q 454 -9 482 -5 q 401 -14 426 -14 q 278 67 308 -14 q 260 233 260 118 l 260 628 l 0 628 l 0 739 l 644 739 l 644 628 \"},\"ξ\":{x_min:0,x_max:624.9375,ha:699,o:\"m 624 -37 q 608 -153 624 -96 q 563 -278 593 -211 l 454 -278 q 491 -183 486 -200 q 511 -83 511 -126 q 484 -23 511 -44 q 370 1 452 1 q 323 0 354 1 q 283 -1 293 -1 q 84 76 169 -1 q 0 266 0 154 q 56 431 0 358 q 197 538 108 498 q 94 613 134 562 q 54 730 54 665 q 77 823 54 780 q 143 901 101 867 l 27 901 l 27 1012 l 576 1012 l 576 901 l 380 901 q 244 863 303 901 q 178 745 178 820 q 312 600 178 636 q 532 582 380 582 l 532 479 q 276 455 361 479 q 118 281 118 410 q 165 173 118 217 q 274 120 208 133 q 494 101 384 110 q 624 -37 624 76 \"},\"&\":{x_min:-3,x_max:894.25,ha:992,o:\"m 894 0 l 725 0 l 624 123 q 471 0 553 40 q 306 -41 390 -41 q 168 -7 231 -41 q 62 92 105 26 q 14 187 31 139 q -3 276 -3 235 q 55 433 -3 358 q 248 581 114 508 q 170 689 196 640 q 137 817 137 751 q 214 985 137 922 q 384 1041 284 1041 q 548 988 483 1041 q 622 824 622 928 q 563 666 622 739 q 431 556 516 608 l 621 326 q 649 407 639 361 q 663 493 653 426 l 781 493 q 703 229 781 352 l 894 0 m 504 818 q 468 908 504 877 q 384 940 433 940 q 293 907 331 940 q 255 818 255 875 q 289 714 255 767 q 363 628 313 678 q 477 729 446 682 q 504 818 504 771 m 556 209 l 314 499 q 179 395 223 449 q 135 283 135 341 q 146 222 135 253 q 183 158 158 192 q 333 80 241 80 q 556 209 448 80 \"},\"Λ\":{x_min:0,x_max:862.5,ha:942,o:\"m 862 0 l 719 0 l 426 847 l 143 0 l 0 0 l 356 1013 l 501 1013 l 862 0 \"},I:{x_min:41,x_max:180,ha:293,o:\"m 180 0 l 41 0 l 41 1013 l 180 1013 l 180 0 \"},G:{x_min:0,x_max:921,ha:1011,o:\"m 921 0 l 832 0 l 801 136 q 655 15 741 58 q 470 -28 568 -28 q 126 133 259 -28 q 0 499 0 284 q 125 881 0 731 q 486 1043 259 1043 q 763 957 647 1043 q 905 709 890 864 l 772 709 q 668 866 747 807 q 486 926 589 926 q 228 795 322 926 q 142 507 142 677 q 228 224 142 342 q 483 94 323 94 q 712 195 625 94 q 796 435 796 291 l 477 435 l 477 549 l 921 549 l 921 0 \"},\"ΰ\":{x_min:0,x_max:617,ha:725,o:\"m 524 800 l 414 800 l 414 925 l 524 925 l 524 800 m 183 800 l 73 800 l 73 925 l 183 925 l 183 800 m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 m 489 1040 l 300 819 l 216 819 l 351 1040 l 489 1040 \"},\"`\":{x_min:0,x_max:138.890625,ha:236,o:\"m 138 699 l 0 699 l 0 861 q 36 974 0 929 q 138 1041 72 1020 l 138 977 q 82 931 95 969 q 69 839 69 893 l 138 839 l 138 699 \"},\"·\":{x_min:0,x_max:142,ha:239,o:\"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 \"},\"Υ\":{x_min:0.328125,x_max:819.515625,ha:889,o:\"m 819 1013 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1013 l 140 1013 l 411 533 l 679 1013 l 819 1013 \"},r:{x_min:0,x_max:355.5625,ha:432,o:\"m 355 621 l 343 621 q 179 569 236 621 q 122 411 122 518 l 122 0 l 0 0 l 0 737 l 117 737 l 117 604 q 204 719 146 686 q 355 753 262 753 l 355 621 \"},x:{x_min:0,x_max:675,ha:764,o:\"m 675 0 l 525 0 l 331 286 l 144 0 l 0 0 l 256 379 l 12 738 l 157 737 l 336 473 l 516 738 l 661 738 l 412 380 l 675 0 \"},\"μ\":{x_min:0,x_max:696.609375,ha:747,o:\"m 696 -4 q 628 -14 657 -14 q 498 97 513 -14 q 422 8 470 41 q 313 -24 374 -24 q 207 3 258 -24 q 120 80 157 31 l 120 -278 l 0 -278 l 0 738 l 124 738 l 124 343 q 165 172 124 246 q 308 82 216 82 q 451 177 402 82 q 492 358 492 254 l 492 738 l 616 738 l 616 214 q 623 136 616 160 q 673 92 636 92 q 696 95 684 92 l 696 -4 \"},h:{x_min:0,x_max:615,ha:724,o:\"m 615 472 l 615 0 l 490 0 l 490 454 q 456 590 490 535 q 338 654 416 654 q 186 588 251 654 q 122 436 122 522 l 122 0 l 0 0 l 0 1013 l 122 1013 l 122 633 q 218 727 149 694 q 362 760 287 760 q 552 676 484 760 q 615 472 615 600 \"},\".\":{x_min:0,x_max:142,ha:239,o:\"m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 \"},\"φ\":{x_min:-2,x_max:878,ha:974,o:\"m 496 -279 l 378 -279 l 378 -17 q 101 88 204 -17 q -2 367 -2 194 q 68 626 -2 510 q 283 758 151 758 l 283 646 q 167 537 209 626 q 133 373 133 462 q 192 177 133 254 q 378 93 259 93 l 378 758 q 445 764 426 763 q 476 765 464 765 q 765 659 653 765 q 878 377 878 553 q 771 96 878 209 q 496 -17 665 -17 l 496 -279 m 496 93 l 514 93 q 687 183 623 93 q 746 380 746 265 q 691 569 746 491 q 522 658 629 658 l 496 656 l 496 93 \"},\";\":{x_min:0,x_max:142,ha:239,o:\"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 m 142 -12 q 105 -132 142 -82 q 0 -206 68 -182 l 0 -138 q 58 -82 43 -123 q 68 0 68 -56 l 0 0 l 0 151 l 142 151 l 142 -12 \"},f:{x_min:0,x_max:378,ha:472,o:\"m 378 638 l 246 638 l 246 0 l 121 0 l 121 638 l 0 638 l 0 738 l 121 738 q 137 935 121 887 q 290 1028 171 1028 q 320 1027 305 1028 q 378 1021 334 1026 l 378 908 q 323 918 346 918 q 257 870 273 918 q 246 780 246 840 l 246 738 l 378 738 l 378 638 \"},\"“\":{x_min:1,x_max:348.21875,ha:454,o:\"m 140 670 l 1 670 l 1 830 q 37 943 1 897 q 140 1011 74 990 l 140 947 q 82 900 97 940 q 68 810 68 861 l 140 810 l 140 670 m 348 670 l 209 670 l 209 830 q 245 943 209 897 q 348 1011 282 990 l 348 947 q 290 900 305 940 q 276 810 276 861 l 348 810 l 348 670 \"},A:{x_min:0.03125,x_max:906.953125,ha:1008,o:\"m 906 0 l 756 0 l 648 303 l 251 303 l 142 0 l 0 0 l 376 1013 l 529 1013 l 906 0 m 610 421 l 452 867 l 293 421 l 610 421 \"},\"‘\":{x_min:1,x_max:139.890625,ha:236,o:\"m 139 670 l 1 670 l 1 830 q 37 943 1 897 q 139 1011 74 990 l 139 947 q 82 900 97 940 q 68 810 68 861 l 139 810 l 139 670 \"},\"ϊ\":{x_min:-70,x_max:283,ha:361,o:\"m 283 800 l 173 800 l 173 925 l 283 925 l 283 800 m 40 800 l -70 800 l -70 925 l 40 925 l 40 800 m 283 3 q 232 -10 257 -5 q 181 -15 206 -15 q 84 26 118 -15 q 41 200 41 79 l 41 737 l 166 737 l 167 215 q 171 141 167 157 q 225 101 182 101 q 247 103 238 101 q 283 112 256 104 l 283 3 \"},\"π\":{x_min:-0.21875,x_max:773.21875,ha:857,o:\"m 773 -7 l 707 -11 q 575 40 607 -11 q 552 174 552 77 l 552 226 l 552 626 l 222 626 l 222 0 l 97 0 l 97 626 l 0 626 l 0 737 l 773 737 l 773 626 l 676 626 l 676 171 q 695 103 676 117 q 773 90 714 90 l 773 -7 \"},\"ά\":{x_min:0,x_max:765.5625,ha:809,o:\"m 765 -4 q 698 -14 726 -14 q 564 97 586 -14 q 466 7 525 40 q 337 -26 407 -26 q 88 98 186 -26 q 0 369 0 212 q 88 637 0 525 q 337 760 184 760 q 465 727 407 760 q 563 637 524 695 l 563 738 l 685 738 l 685 222 q 693 141 685 168 q 748 94 708 94 q 765 95 760 94 l 765 -4 m 584 371 q 531 562 584 485 q 360 653 470 653 q 192 566 254 653 q 135 379 135 489 q 186 181 135 261 q 358 84 247 84 q 528 176 465 84 q 584 371 584 260 m 604 1040 l 415 819 l 332 819 l 466 1040 l 604 1040 \"},O:{x_min:0,x_max:958,ha:1057,o:\"m 485 1041 q 834 882 702 1041 q 958 512 958 734 q 834 136 958 287 q 481 -26 702 -26 q 126 130 261 -26 q 0 504 0 279 q 127 880 0 728 q 485 1041 263 1041 m 480 98 q 731 225 638 98 q 815 504 815 340 q 733 783 815 669 q 480 912 640 912 q 226 784 321 912 q 142 504 142 670 q 226 224 142 339 q 480 98 319 98 \"},n:{x_min:0,x_max:615,ha:724,o:\"m 615 463 l 615 0 l 490 0 l 490 454 q 453 592 490 537 q 331 656 410 656 q 178 585 240 656 q 117 421 117 514 l 117 0 l 0 0 l 0 738 l 117 738 l 117 630 q 218 728 150 693 q 359 764 286 764 q 552 675 484 764 q 615 463 615 593 \"},l:{x_min:41,x_max:166,ha:279,o:\"m 166 0 l 41 0 l 41 1013 l 166 1013 l 166 0 \"},\"¤\":{x_min:40.09375,x_max:728.796875,ha:825,o:\"m 728 304 l 649 224 l 512 363 q 383 331 458 331 q 256 363 310 331 l 119 224 l 40 304 l 177 441 q 150 553 150 493 q 184 673 150 621 l 40 818 l 119 898 l 267 749 q 321 766 291 759 q 384 773 351 773 q 447 766 417 773 q 501 749 477 759 l 649 898 l 728 818 l 585 675 q 612 618 604 648 q 621 553 621 587 q 591 441 621 491 l 728 304 m 384 682 q 280 643 318 682 q 243 551 243 604 q 279 461 243 499 q 383 423 316 423 q 487 461 449 423 q 525 553 525 500 q 490 641 525 605 q 384 682 451 682 \"},\"κ\":{x_min:0,x_max:632.328125,ha:679,o:\"m 632 0 l 482 0 l 225 384 l 124 288 l 124 0 l 0 0 l 0 738 l 124 738 l 124 446 l 433 738 l 596 738 l 312 466 l 632 0 \"},p:{x_min:0,x_max:685,ha:786,o:\"m 685 364 q 598 96 685 205 q 350 -23 504 -23 q 121 89 205 -23 l 121 -278 l 0 -278 l 0 738 l 121 738 l 121 633 q 220 726 159 691 q 351 761 280 761 q 598 636 504 761 q 685 364 685 522 m 557 371 q 501 560 557 481 q 330 651 437 651 q 162 559 223 651 q 108 366 108 479 q 162 177 108 254 q 333 87 224 87 q 502 178 441 87 q 557 371 557 258 \"},\"‡\":{x_min:0,x_max:777,ha:835,o:\"m 458 238 l 458 0 l 319 0 l 319 238 l 0 238 l 0 360 l 319 360 l 319 681 l 0 683 l 0 804 l 319 804 l 319 1015 l 458 1013 l 458 804 l 777 804 l 777 683 l 458 683 l 458 360 l 777 360 l 777 238 l 458 238 \"},\"ψ\":{x_min:0,x_max:808,ha:907,o:\"m 465 -278 l 341 -278 l 341 -15 q 87 102 180 -15 q 0 378 0 210 l 0 739 l 133 739 l 133 379 q 182 195 133 275 q 341 98 242 98 l 341 922 l 465 922 l 465 98 q 623 195 563 98 q 675 382 675 278 l 675 742 l 808 742 l 808 381 q 720 104 808 213 q 466 -13 627 -13 l 465 -278 \"},\"η\":{x_min:0.78125,x_max:697,ha:810,o:\"m 697 -278 l 572 -278 l 572 454 q 540 587 572 536 q 425 650 501 650 q 271 579 337 650 q 206 420 206 509 l 206 0 l 81 0 l 81 489 q 73 588 81 562 q 0 644 56 644 l 0 741 q 68 755 38 755 q 158 720 124 755 q 200 630 193 686 q 297 726 234 692 q 434 761 359 761 q 620 692 544 761 q 697 516 697 624 l 697 -278 \"}};var cssFontWeight=\"normal\";var ascender=1189;var underlinePosition=-100;var cssFontStyle=\"normal\";var boundingBox={yMin:-334,xMin:-111,yMax:1189,xMax:1672};var resolution=1000;var original_font_information={postscript_name:\"Helvetiker-Regular\",version_string:\"Version 1.00 2004 initial release\",vendor_url:\"http://www.magenta.gr/\",full_font_name:\"Helvetiker\",font_family_name:\"Helvetiker\",copyright:\"Copyright (c) Μagenta ltd, 2004\",description:\"\",trademark:\"\",designer:\"\",designer_url:\"\",unique_font_identifier:\"Μagenta ltd:Helvetiker:22-10-104\",license_url:\"http://www.ellak.gr/fonts/MgOpen/license.html\",license_description:\"Copyright (c) 2004 by MAGENTA Ltd. All Rights Reserved.\\r\\n\\r\\nPermission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license (\\\"Fonts\\\") and associated documentation files (the \\\"Font Software\\\"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: \\r\\n\\r\\nThe above copyright and this permission notice shall be included in all copies of one or more of the Font Software typefaces.\\r\\n\\r\\nThe Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing the word \\\"MgOpen\\\", or if the modifications are accepted for inclusion in the Font Software itself by the each appointed Administrator.\\r\\n\\r\\nThis License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the \\\"MgOpen\\\" name.\\r\\n\\r\\nThe Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. \\r\\n\\r\\nTHE FONT SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL MAGENTA OR PERSONS OR BODIES IN CHARGE OF ADMINISTRATION AND MAINTENANCE OF THE FONT SOFTWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.\",manufacturer_name:\"Μagenta ltd\",font_sub_family_name:\"Regular\"};var descender=-334;var familyName=\"Helvetiker\";var lineHeight=1522;var underlineThickness=50;var defaultTypeFace = {glyphs:glyphs,cssFontWeight:cssFontWeight,ascender:ascender,underlinePosition:underlinePosition,cssFontStyle:cssFontStyle,boundingBox:boundingBox,resolution:resolution,original_font_information:original_font_information,descender:descender,familyName:familyName,lineHeight:lineHeight,underlineThickness:underlineThickness};\n\nvar THREE$3 = _objectSpread2(_objectSpread2({}, window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  BoxGeometry: BoxGeometry,\n  CircleGeometry: CircleGeometry,\n  DoubleSide: DoubleSide,\n  Group: Group,\n  Mesh: Mesh,\n  MeshLambertMaterial: MeshLambertMaterial,\n  TextGeometry: TextGeometry,\n  Vector3: Vector3\n}), {}, {\n  Font: Font,\n  TextGeometry: TextGeometry\n});\n\n//\n\nvar LabelsLayerKapsule = Kapsule({\n  props: {\n    labelsData: {\n      \"default\": []\n    },\n    labelLat: {\n      \"default\": 'lat'\n    },\n    labelLng: {\n      \"default\": 'lng'\n    },\n    labelAltitude: {\n      \"default\": 0.002\n    },\n    // in units of globe radius\n    labelText: {\n      \"default\": 'text'\n    },\n    labelSize: {\n      \"default\": 0.5\n    },\n    // text height in deg\n    labelTypeFace: {\n      \"default\": defaultTypeFace,\n      onChange: function onChange(tf, state) {\n        state.font = new THREE$3.Font(tf);\n      }\n    },\n    labelColor: {\n      \"default\": function _default() {\n        return 'lightgrey';\n      }\n    },\n    labelRotation: {\n      \"default\": 0\n    },\n    // clockwise degrees, relative to the latitute parallel plane\n    labelResolution: {\n      \"default\": 3\n    },\n    // how many segments in the text's curves\n    labelIncludeDot: {\n      \"default\": true\n    },\n    labelDotRadius: {\n      \"default\": 0.1\n    },\n    // in deg\n    labelDotOrientation: {\n      \"default\": function _default() {\n        return 'bottom';\n      }\n    },\n    // right, top, bottom\n    labelsTransitionDuration: {\n      \"default\": 1000,\n      triggerUpdate: false\n    } // ms\n  },\n  init: function init(threeObj, state, _ref) {\n    var tweenGroup = _ref.tweenGroup;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.tweenGroup = tweenGroup;\n    var circleGeometry = new THREE$3.CircleGeometry(1, 32);\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjLabel'\n    }).onCreateObj(function () {\n      var material = new THREE$3.MeshLambertMaterial();\n      material.side = DoubleSide;\n      var obj = new THREE$3.Group(); // container\n\n      obj.add(new THREE$3.Mesh(circleGeometry, material)); // dot\n      var textObj = new THREE$3.Mesh(undefined, material);\n      obj.add(textObj); // text\n\n      // text invisible bounding box (raycaster trap)\n      var bbObj = new THREE$3.Mesh();\n      bbObj.visible = false;\n      textObj.add(bbObj);\n      obj.__globeObjType = 'label'; // Add object type\n\n      return obj;\n    });\n  },\n  update: function update(state) {\n    // Data accessors\n    var latAccessor = accessorFn(state.labelLat);\n    var lngAccessor = accessorFn(state.labelLng);\n    var altitudeAccessor = accessorFn(state.labelAltitude);\n    var textAccessor = accessorFn(state.labelText);\n    var sizeAccessor = accessorFn(state.labelSize);\n    var rotationAccessor = accessorFn(state.labelRotation);\n    var colorAccessor = accessorFn(state.labelColor);\n    var includeDotAccessor = accessorFn(state.labelIncludeDot);\n    var dotRadiusAccessor = accessorFn(state.labelDotRadius);\n    var dotOrientationAccessor = accessorFn(state.labelDotOrientation);\n    var orientations = new Set(['right', 'top', 'bottom']);\n    var pxPerDeg = 2 * Math.PI * GLOBE_RADIUS / 360;\n    state.dataMapper.onUpdateObj(function (obj, d) {\n      var _obj$children = _slicedToArray(obj.children, 2),\n        dotObj = _obj$children[0],\n        textObj = _obj$children[1];\n      var _textObj$children = _slicedToArray(textObj.children, 1),\n        bbObj = _textObj$children[0];\n\n      // update color\n      var color = colorAccessor(d);\n      var opacity = colorAlpha(color);\n      textObj.material.color.set(colorStr2Hex(color));\n      textObj.material.transparent = opacity < 1;\n      textObj.material.opacity = opacity;\n\n      // update dot\n      var includeDot = includeDotAccessor(d);\n      var dotOrient = dotOrientationAccessor(d);\n      !includeDot || !orientations.has(dotOrient) && (dotOrient = 'bottom');\n\n      // size dot\n      var dotR = includeDot ? +dotRadiusAccessor(d) * pxPerDeg : 1e-12;\n      dotObj.scale.x = dotObj.scale.y = dotR;\n\n      // create text geometry\n      var textHeight = +sizeAccessor(d) * pxPerDeg;\n      textObj.geometry && textObj.geometry.dispose();\n      textObj.geometry = new THREE$3.TextGeometry(textAccessor(d), {\n        font: state.font,\n        size: textHeight,\n        depth: 0,\n        bevelEnabled: true,\n        bevelThickness: 0,\n        bevelSize: 0,\n        curveSegments: state.labelResolution\n      });\n\n      // update text convex hull/bounding box\n      bbObj.geometry && bbObj.geometry.dispose();\n      textObj.geometry.computeBoundingBox();\n      bbObj.geometry = _construct(THREE$3.BoxGeometry, _toConsumableArray(new THREE$3.Vector3().subVectors(textObj.geometry.boundingBox.max, textObj.geometry.boundingBox.min).clampScalar(0, Infinity) // prevent infinite bounding boxes on empty texts\n      .toArray()));\n\n      // center text (otherwise anchor is on bottom-left)\n      dotOrient !== 'right' && textObj.geometry.center();\n      if (includeDot) {\n        // translate text\n        var padding = dotR + textHeight / 2;\n        dotOrient === 'right' && (textObj.position.x = padding);\n        textObj.position.y = {\n          right: -textHeight / 2,\n          // center vertically\n          top: padding + textHeight / 2,\n          bottom: -padding - textHeight / 2\n        }[dotOrient];\n      }\n\n      // animations\n      var applyPosition = function applyPosition(td) {\n        var _obj$__currentTargetD = obj.__currentTargetD = td,\n          lat = _obj$__currentTargetD.lat,\n          lng = _obj$__currentTargetD.lng,\n          alt = _obj$__currentTargetD.alt,\n          rot = _obj$__currentTargetD.rot,\n          scale = _obj$__currentTargetD.scale;\n\n        // position center\n        Object.assign(obj.position, polar2Cartesian(lat, lng, alt));\n\n        // rotate\n        obj.lookAt(state.scene.localToWorld(new THREE$3.Vector3(0, 0, 0))); // face globe (local) center\n        obj.rotateY(Math.PI); // face outwards\n\n        // rotate clockwise relative to lat parallel\n        obj.rotateZ(-rot * Math.PI / 180);\n\n        // scale it\n        obj.scale.x = obj.scale.y = obj.scale.z = scale;\n      };\n      var targetD = {\n        lat: +latAccessor(d),\n        lng: +lngAccessor(d),\n        alt: +altitudeAccessor(d),\n        rot: +rotationAccessor(d),\n        scale: 1\n      };\n      var currentTargetD = obj.__currentTargetD || Object.assign({}, targetD, {\n        scale: 1e-12\n      });\n      if (Object.keys(targetD).some(function (k) {\n        return currentTargetD[k] !== targetD[k];\n      })) {\n        if (!state.labelsTransitionDuration || state.labelsTransitionDuration < 0) {\n          // set final position\n          applyPosition(targetD);\n        } else {\n          // animate\n          state.tweenGroup.add(new Tween(currentTargetD).to(targetD, state.labelsTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyPosition).onComplete(function () {\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n      }\n    }).digest(state.labelsData);\n  }\n});\n\nvar THREE$2 = _objectSpread2(_objectSpread2({}, window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {}), {}, {\n  CSS2DObject: CSS2DObject\n});\n\n//\n\nvar HtmlElementsLayerKapsule = Kapsule({\n  props: {\n    htmlElementsData: {\n      \"default\": []\n    },\n    htmlLat: {\n      \"default\": 'lat'\n    },\n    htmlLng: {\n      \"default\": 'lng'\n    },\n    htmlAltitude: {\n      \"default\": 0\n    },\n    // in units of globe radius\n    htmlElement: {},\n    htmlElementVisibilityModifier: {\n      triggerUpdate: false\n    },\n    htmlTransitionDuration: {\n      \"default\": 1000,\n      triggerUpdate: false\n    },\n    // ms\n    isBehindGlobe: {\n      onChange: function onChange() {\n        this.updateObjVisibility();\n      },\n      triggerUpdate: false\n    }\n  },\n  methods: {\n    updateObjVisibility: function updateObjVisibility(state, obj) {\n      if (!state.dataMapper) return;\n      // default to all if no obj specified\n      var objs = obj ? [obj] : state.dataMapper.entries().map(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n          o = _ref2[1];\n        return o;\n      }).filter(function (d) {\n        return d;\n      });\n      // Hide elements on the far side of the globe\n      objs.forEach(function (obj) {\n        var isVisible = !state.isBehindGlobe || !state.isBehindGlobe(obj.position);\n        if (state.htmlElementVisibilityModifier) {\n          obj.visible = true;\n          state.htmlElementVisibilityModifier(obj.element, isVisible);\n        } else {\n          obj.visible = isVisible;\n        }\n      });\n    }\n  },\n  init: function init(threeObj, state, _ref3) {\n    var tweenGroup = _ref3.tweenGroup;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.tweenGroup = tweenGroup;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjHtml'\n    }).onCreateObj(function (d) {\n      var elem = accessorFn(state.htmlElement)(d);\n      var obj = new THREE$2.CSS2DObject(elem);\n      obj.__globeObjType = 'html'; // Add object type\n\n      return obj;\n    });\n  },\n  update: function update(state, changedProps) {\n    var _this = this;\n    // Data accessors\n    var latAccessor = accessorFn(state.htmlLat);\n    var lngAccessor = accessorFn(state.htmlLng);\n    var altitudeAccessor = accessorFn(state.htmlAltitude);\n\n    // objs need to be recreated if this prop has changed\n    changedProps.hasOwnProperty('htmlElement') && state.dataMapper.clear();\n    state.dataMapper.onUpdateObj(function (obj, d) {\n      var applyUpdate = function applyUpdate(td) {\n        var _obj$__currentTargetD = obj.__currentTargetD = td,\n          alt = _obj$__currentTargetD.alt,\n          lat = _obj$__currentTargetD.lat,\n          lng = _obj$__currentTargetD.lng;\n        Object.assign(obj.position, polar2Cartesian(lat, lng, alt));\n        _this.updateObjVisibility(obj);\n      };\n      var targetD = {\n        lat: +latAccessor(d),\n        lng: +lngAccessor(d),\n        alt: +altitudeAccessor(d)\n      };\n      if (!state.htmlTransitionDuration || state.htmlTransitionDuration < 0 || !obj.__currentTargetD) {\n        // set final position\n        applyUpdate(targetD);\n      } else {\n        // animate\n        state.tweenGroup.add(new Tween(obj.__currentTargetD).to(targetD, state.htmlTransitionDuration).easing(Easing.Quadratic.InOut).onUpdate(applyUpdate).onComplete(function () {\n          state.tweenGroup.remove(this);\n        }).start());\n      }\n    }).digest(state.htmlElementsData);\n  }\n});\n\nvar THREE$1 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  Group: Group,\n  Mesh: Mesh,\n  MeshLambertMaterial: MeshLambertMaterial,\n  SphereGeometry: SphereGeometry\n};\n\n//\n\nvar ObjectsLayerKapsule = Kapsule({\n  props: {\n    objectsData: {\n      \"default\": []\n    },\n    objectLat: {\n      \"default\": 'lat'\n    },\n    objectLng: {\n      \"default\": 'lng'\n    },\n    objectAltitude: {\n      \"default\": 0.01\n    },\n    // in units of globe radius\n    objectFacesSurface: {\n      \"default\": true\n    },\n    objectRotation: {},\n    objectThreeObject: {\n      \"default\": new THREE$1.Mesh(\n      // default object: yellow sphere\n      new THREE$1.SphereGeometry(1, 16, 8), new THREE$1.MeshLambertMaterial({\n        color: '#ffffaa',\n        transparent: true,\n        opacity: 0.7\n      }))\n    }\n  },\n  init: function init(threeObj, state) {\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjObject'\n    }).onCreateObj(function (d) {\n      var obj = accessorFn(state.objectThreeObject)(d);\n      if (state.objectThreeObject === obj) {\n        // clone object if it's a shared object among all points\n        obj = obj.clone();\n      }\n      var g = new THREE$1.Group();\n      g.add(obj);\n      g.__globeObjType = 'object'; // Add object type\n\n      return g;\n    });\n  },\n  update: function update(state, changedProps) {\n    // Data accessors\n    var latAccessor = accessorFn(state.objectLat);\n    var lngAccessor = accessorFn(state.objectLng);\n    var altitudeAccessor = accessorFn(state.objectAltitude);\n    var parallelAccessor = accessorFn(state.objectFacesSurface);\n    var rotationAccessor = accessorFn(state.objectRotation);\n\n    // objs need to be recreated if this prop has changed\n    changedProps.hasOwnProperty('objectThreeObject') && state.dataMapper.clear();\n    state.dataMapper.onUpdateObj(function (objG, d) {\n      var lat = +latAccessor(d);\n      var lng = +lngAccessor(d);\n      var alt = +altitudeAccessor(d);\n      Object.assign(objG.position, polar2Cartesian(lat, lng, alt));\n      parallelAccessor(d) ? objG.setRotationFromEuler(new Euler(deg2Rad$1(-lat), deg2Rad$1(lng), 0, 'YXZ')) : objG.rotation.set(0, 0, 0);\n      var obj = objG.children[0];\n      var rot = rotationAccessor(d);\n      rot && obj.setRotationFromEuler(new Euler(deg2Rad$1(rot.x || 0), deg2Rad$1(rot.y || 0), deg2Rad$1(rot.z || 0)));\n    }).digest(state.objectsData);\n  }\n});\n\n//\n\nvar CustomLayerKapsule = Kapsule({\n  props: {\n    customLayerData: {\n      \"default\": []\n    },\n    customThreeObject: {},\n    customThreeObjectUpdate: {\n      triggerUpdate: false\n    }\n  },\n  init: function init(threeObj, state) {\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.dataMapper = new ThreeDigest(threeObj, {\n      objBindAttr: '__threeObjCustom'\n    }).onCreateObj(function (d) {\n      var obj = accessorFn(state.customThreeObject)(d, GLOBE_RADIUS);\n      if (obj) {\n        if (state.customThreeObject === obj) {\n          // clone object if it's a shared object among all points\n          obj = obj.clone();\n        }\n        obj.__globeObjType = 'custom'; // Add object type\n      }\n      return obj;\n    });\n  },\n  update: function update(state, changedProps) {\n    if (!state.customThreeObjectUpdate) {\n      emptyObject(state.scene);\n    } // Clear the existing objects to create all new, if there's no update method (brute-force)\n\n    var customObjectUpdateAccessor = accessorFn(state.customThreeObjectUpdate);\n\n    // objs need to be recreated if this prop has changed\n    changedProps.hasOwnProperty('customThreeObject') && state.dataMapper.clear();\n    state.dataMapper.onUpdateObj(function (obj, d) {\n      return customObjectUpdateAccessor(obj, d, GLOBE_RADIUS);\n    }).digest(state.customLayerData);\n  }\n});\n\nvar THREE = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  Camera: Camera,\n  Group: Group,\n  Vector2: Vector2,\n  Vector3: Vector3\n};\n\n//\n\nvar layers = ['globeLayer', 'pointsLayer', 'arcsLayer', 'hexBinLayer', 'heatmapsLayer', 'polygonsLayer', 'hexedPolygonsLayer', 'pathsLayer', 'tilesLayer', 'particlesLayer', 'ringsLayer', 'labelsLayer', 'htmlElementsLayer', 'objectsLayer', 'customLayer'];\n\n// Expose config from layers\nvar bindGlobeLayer = linkKapsule('globeLayer', GlobeLayerKapsule);\nvar linkedGlobeLayerProps = Object.assign.apply(Object, _toConsumableArray(['globeImageUrl', 'bumpImageUrl', 'globeCurvatureResolution', 'globeTileEngineUrl', 'globeTileEngineMaxLevel', 'showGlobe', 'showGraticules', 'showAtmosphere', 'atmosphereColor', 'atmosphereAltitude'].map(function (p) {\n  return _defineProperty({}, p, bindGlobeLayer.linkProp(p));\n})));\nvar linkedGlobeLayerMethods = Object.assign.apply(Object, _toConsumableArray(['globeMaterial', 'globeTileEngineClearCache'].map(function (p) {\n  return _defineProperty({}, p, bindGlobeLayer.linkMethod(p));\n})));\nvar bindPointsLayer = linkKapsule('pointsLayer', PointsLayerKapsule);\nvar linkedPointsLayerProps = Object.assign.apply(Object, _toConsumableArray(['pointsData', 'pointLat', 'pointLng', 'pointColor', 'pointAltitude', 'pointRadius', 'pointResolution', 'pointsMerge', 'pointsTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindPointsLayer.linkProp(p));\n})));\nvar bindArcsLayer = linkKapsule('arcsLayer', ArcsLayerKapsule);\nvar linkedArcsLayerProps = Object.assign.apply(Object, _toConsumableArray(['arcsData', 'arcStartLat', 'arcStartLng', 'arcStartAltitude', 'arcEndLat', 'arcEndLng', 'arcEndAltitude', 'arcColor', 'arcAltitude', 'arcAltitudeAutoScale', 'arcStroke', 'arcCurveResolution', 'arcCircularResolution', 'arcDashLength', 'arcDashGap', 'arcDashInitialGap', 'arcDashAnimateTime', 'arcsTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindArcsLayer.linkProp(p));\n})));\nvar bindHexBinLayer = linkKapsule('hexBinLayer', HexBinLayerKapsule);\nvar linkedHexBinLayerProps = Object.assign.apply(Object, _toConsumableArray(['hexBinPointsData', 'hexBinPointLat', 'hexBinPointLng', 'hexBinPointWeight', 'hexBinResolution', 'hexMargin', 'hexTopCurvatureResolution', 'hexTopColor', 'hexSideColor', 'hexAltitude', 'hexBinMerge', 'hexTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindHexBinLayer.linkProp(p));\n})));\nvar bindHeatmapsLayer = linkKapsule('heatmapsLayer', HeatmapsLayerKapsule);\nvar linkedHeatmapsLayerProps = Object.assign.apply(Object, _toConsumableArray(['heatmapsData', 'heatmapPoints', 'heatmapPointLat', 'heatmapPointLng', 'heatmapPointWeight', 'heatmapBandwidth', 'heatmapColorFn', 'heatmapColorSaturation', 'heatmapBaseAltitude', 'heatmapTopAltitude', 'heatmapsTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindHeatmapsLayer.linkProp(p));\n})));\nvar bindHexedPolygonsLayer = linkKapsule('hexedPolygonsLayer', HexedPolygonsLayerKapsule);\nvar linkedHexedPolygonsLayerProps = Object.assign.apply(Object, _toConsumableArray(['hexPolygonsData', 'hexPolygonGeoJsonGeometry', 'hexPolygonColor', 'hexPolygonAltitude', 'hexPolygonResolution', 'hexPolygonMargin', 'hexPolygonUseDots', 'hexPolygonCurvatureResolution', 'hexPolygonDotResolution', 'hexPolygonsTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindHexedPolygonsLayer.linkProp(p));\n})));\nvar bindPolygonsLayer = linkKapsule('polygonsLayer', PolygonsLayerKapsule);\nvar linkedPolygonsLayerProps = Object.assign.apply(Object, _toConsumableArray(['polygonsData', 'polygonGeoJsonGeometry', 'polygonCapColor', 'polygonCapMaterial', 'polygonSideColor', 'polygonSideMaterial', 'polygonStrokeColor', 'polygonAltitude', 'polygonCapCurvatureResolution', 'polygonsTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindPolygonsLayer.linkProp(p));\n})));\nvar bindPathsLayer = linkKapsule('pathsLayer', PathsLayerKapsule);\nvar linkedPathsLayerProps = Object.assign.apply(Object, _toConsumableArray(['pathsData', 'pathPoints', 'pathPointLat', 'pathPointLng', 'pathPointAlt', 'pathResolution', 'pathColor', 'pathStroke', 'pathDashLength', 'pathDashGap', 'pathDashInitialGap', 'pathDashAnimateTime', 'pathTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindPathsLayer.linkProp(p));\n})));\nvar bindTilesLayer = linkKapsule('tilesLayer', TilesLayerKapsule);\nvar linkedTilesLayerProps = Object.assign.apply(Object, _toConsumableArray(['tilesData', 'tileLat', 'tileLng', 'tileAltitude', 'tileWidth', 'tileHeight', 'tileUseGlobeProjection', 'tileMaterial', 'tileCurvatureResolution', 'tilesTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindTilesLayer.linkProp(p));\n})));\nvar bindParticlesLayer = linkKapsule('particlesLayer', ParticlesLayerKapsule);\nvar linkedParticlesLayerProps = Object.assign.apply(Object, _toConsumableArray(['particlesData', 'particlesList', 'particleLat', 'particleLng', 'particleAltitude', 'particlesSize', 'particlesSizeAttenuation', 'particlesColor', 'particlesTexture'].map(function (p) {\n  return _defineProperty({}, p, bindParticlesLayer.linkProp(p));\n})));\nvar bindRingsLayer = linkKapsule('ringsLayer', RingsLayerKapsule);\nvar linkedRingsLayerProps = Object.assign.apply(Object, _toConsumableArray(['ringsData', 'ringLat', 'ringLng', 'ringAltitude', 'ringColor', 'ringResolution', 'ringMaxRadius', 'ringPropagationSpeed', 'ringRepeatPeriod'].map(function (p) {\n  return _defineProperty({}, p, bindRingsLayer.linkProp(p));\n})));\nvar bindLabelsLayer = linkKapsule('labelsLayer', LabelsLayerKapsule);\nvar linkedLabelsLayerProps = Object.assign.apply(Object, _toConsumableArray(['labelsData', 'labelLat', 'labelLng', 'labelAltitude', 'labelRotation', 'labelText', 'labelSize', 'labelTypeFace', 'labelColor', 'labelResolution', 'labelIncludeDot', 'labelDotRadius', 'labelDotOrientation', 'labelsTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindLabelsLayer.linkProp(p));\n})));\nvar bindHtmlElementsLayer = linkKapsule('htmlElementsLayer', HtmlElementsLayerKapsule);\nvar linkedHtmlElementsLayerProps = Object.assign.apply(Object, _toConsumableArray(['htmlElementsData', 'htmlLat', 'htmlLng', 'htmlAltitude', 'htmlElement', 'htmlElementVisibilityModifier', 'htmlTransitionDuration'].map(function (p) {\n  return _defineProperty({}, p, bindHtmlElementsLayer.linkProp(p));\n})));\nvar bindObjectsLayer = linkKapsule('objectsLayer', ObjectsLayerKapsule);\nvar linkedObjectsLayerProps = Object.assign.apply(Object, _toConsumableArray(['objectsData', 'objectLat', 'objectLng', 'objectAltitude', 'objectRotation', 'objectFacesSurface', 'objectThreeObject'].map(function (p) {\n  return _defineProperty({}, p, bindObjectsLayer.linkProp(p));\n})));\nvar bindCustomLayer = linkKapsule('customLayer', CustomLayerKapsule);\nvar linkedCustomLayerProps = Object.assign.apply(Object, _toConsumableArray(['customLayerData', 'customThreeObject', 'customThreeObjectUpdate'].map(function (p) {\n  return _defineProperty({}, p, bindCustomLayer.linkProp(p));\n})));\n\n//\n\nvar Globe = Kapsule({\n  props: _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({\n    onGlobeReady: {\n      triggerUpdate: false\n    },\n    rendererSize: {\n      \"default\": new THREE.Vector2(window.innerWidth, window.innerHeight),\n      onChange: function onChange(rendererSize, state) {\n        state.pathsLayer.rendererSize(rendererSize);\n      },\n      triggerUpdate: false\n    }\n  }, linkedGlobeLayerProps), linkedPointsLayerProps), linkedArcsLayerProps), linkedHexBinLayerProps), linkedHeatmapsLayerProps), linkedPolygonsLayerProps), linkedHexedPolygonsLayerProps), linkedPathsLayerProps), linkedTilesLayerProps), linkedParticlesLayerProps), linkedRingsLayerProps), linkedLabelsLayerProps), linkedHtmlElementsLayerProps), linkedObjectsLayerProps), linkedCustomLayerProps),\n  methods: _objectSpread2({\n    getGlobeRadius: getGlobeRadius,\n    getCoords: function getCoords(state) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      return polar2Cartesian.apply(void 0, args);\n    },\n    toGeoCoords: function toGeoCoords(state) {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n      return cartesian2Polar.apply(void 0, args);\n    },\n    setPointOfView: function setPointOfView(state, camera) {\n      var globalPov = camera instanceof THREE.Camera ? camera.position : camera; // for backwards compatibility\n      var globeRadius = getGlobeRadius();\n      var isBehindGlobe = undefined;\n      if (state.scene && globalPov) {\n        var pov, povDist, povEdgeDist, povEdgeAngle;\n        isBehindGlobe = function isBehindGlobe(pos) {\n          pov === undefined && (pov = globalPov.clone().applyMatrix4(state.scene.matrixWorld.clone().invert())); // camera position in local space\n          povDist === undefined && (povDist = pov.length());\n\n          // check if it's behind plane of globe's visible area\n          // maxSurfacePosAngle === undefined && (maxSurfacePosAngle = Math.acos(globeRadius / povDist));\n          // return pov.angleTo(pos) > maxSurfacePosAngle;\n\n          // more sophisticated method that checks also pos altitude\n          povEdgeDist === undefined && (povEdgeDist = Math.sqrt(Math.pow(povDist, 2) - Math.pow(globeRadius, 2)));\n          povEdgeAngle === undefined && (povEdgeAngle = Math.acos(povEdgeDist / povDist));\n          var povPosDist = pov.distanceTo(pos);\n          if (povPosDist < povEdgeDist) return false; // pos is closer than visible edge of globe\n\n          var posDist = pos.length();\n          var povPosAngle = Math.acos((Math.pow(povDist, 2) + Math.pow(povPosDist, 2) - Math.pow(posDist, 2)) / (2 * povDist * povPosDist)); // triangle solver\n          return povPosAngle < povEdgeAngle; // pos is within globe's visible area cone\n        };\n      }\n\n      // pass pov-related checker fns for layers that need it\n      state.layersThatNeedUpdatePov.forEach(function (l) {\n        return l.updatePov(camera);\n      });\n      state.layersThatNeedBehindGlobeChecker.forEach(function (l) {\n        return l.isBehindGlobe(isBehindGlobe);\n      });\n    },\n    pauseAnimation: function pauseAnimation(state) {\n      if (state.animationFrameRequestId !== null) {\n        cancelAnimationFrame(state.animationFrameRequestId);\n        state.animationFrameRequestId = null;\n      }\n      state.pausableLayers.forEach(function (l) {\n        var _l$pauseAnimation;\n        return (_l$pauseAnimation = l.pauseAnimation) === null || _l$pauseAnimation === void 0 ? void 0 : _l$pauseAnimation.call(l);\n      });\n      return this;\n    },\n    resumeAnimation: function resumeAnimation(state) {\n      if (state.animationFrameRequestId === null) {\n        this._animationCycle();\n      }\n      state.pausableLayers.forEach(function (l) {\n        var _l$resumeAnimation;\n        return (_l$resumeAnimation = l.resumeAnimation) === null || _l$resumeAnimation === void 0 ? void 0 : _l$resumeAnimation.call(l);\n      });\n      return this;\n    },\n    _animationCycle: function _animationCycle(state) {\n      state.animationFrameRequestId = requestAnimationFrame(this._animationCycle);\n      state.tweenGroup.update(); // run tween updates\n    },\n    _destructor: function _destructor(state) {\n      this.pauseAnimation();\n      state.destructableLayers.forEach(function (l) {\n        return l._destructor();\n      });\n    }\n  }, linkedGlobeLayerMethods),\n  stateInit: function stateInit() {\n    var tweenGroup = new Group$1();\n    var initProps = {\n      tweenGroup: tweenGroup\n    };\n    var layers = {\n      globeLayer: GlobeLayerKapsule(initProps),\n      pointsLayer: PointsLayerKapsule(initProps),\n      arcsLayer: ArcsLayerKapsule(initProps),\n      hexBinLayer: HexBinLayerKapsule(initProps),\n      heatmapsLayer: HeatmapsLayerKapsule(initProps),\n      polygonsLayer: PolygonsLayerKapsule(initProps),\n      hexedPolygonsLayer: HexedPolygonsLayerKapsule(initProps),\n      pathsLayer: PathsLayerKapsule(initProps),\n      tilesLayer: TilesLayerKapsule(initProps),\n      particlesLayer: ParticlesLayerKapsule(initProps),\n      ringsLayer: RingsLayerKapsule(initProps),\n      labelsLayer: LabelsLayerKapsule(initProps),\n      htmlElementsLayer: HtmlElementsLayerKapsule(initProps),\n      objectsLayer: ObjectsLayerKapsule(initProps),\n      customLayer: CustomLayerKapsule(initProps)\n    };\n    return _objectSpread2(_objectSpread2({\n      tweenGroup: tweenGroup\n    }, layers), {}, {\n      layersThatNeedUpdatePov: Object.values(layers).filter(function (l) {\n        return l.hasOwnProperty('updatePov');\n      }),\n      layersThatNeedBehindGlobeChecker: Object.values(layers).filter(function (l) {\n        return l.hasOwnProperty('isBehindGlobe');\n      }),\n      destructableLayers: Object.values(layers).filter(function (l) {\n        return l.hasOwnProperty('_destructor');\n      }),\n      pausableLayers: Object.values(layers).filter(function (l) {\n        return l.hasOwnProperty('pauseAnimation');\n      })\n    });\n  },\n  init: function init(threeObj, state, _ref15) {\n    var _ref15$animateIn = _ref15.animateIn,\n      animateIn = _ref15$animateIn === void 0 ? true : _ref15$animateIn,\n      _ref15$waitForGlobeRe = _ref15.waitForGlobeReady,\n      waitForGlobeReady = _ref15$waitForGlobeRe === void 0 ? true : _ref15$waitForGlobeRe;\n    // Clear the scene\n    emptyObject(threeObj);\n\n    // Main three object to manipulate\n    state.scene = threeObj;\n    state.scene.visible = false; // hide scene before globe initialization\n\n    // Add all layers groups\n    layers.forEach(function (layer) {\n      var g = new THREE.Group();\n      state.scene.add(g);\n      state[layer](g);\n    });\n    var initGlobe = function initGlobe() {\n      if (animateIn) {\n        // Animate build-in just once\n        state.scene.scale.set(1e-6, 1e-6, 1e-6);\n        state.tweenGroup.add(new Tween({\n          k: 1e-6\n        }).to({\n          k: 1\n        }, 600).easing(Easing.Quadratic.Out).onUpdate(function (_ref16) {\n          var k = _ref16.k;\n          return state.scene.scale.set(k, k, k);\n        }).onComplete(function () {\n          state.tweenGroup.remove(this);\n        }).start());\n        var rotAxis = new THREE.Vector3(0, 1, 0);\n        state.tweenGroup.add(new Tween({\n          rot: Math.PI * 2\n        }).to({\n          rot: 0\n        }, 1200).easing(Easing.Quintic.Out).onUpdate(function (_ref17) {\n          var rot = _ref17.rot;\n          return state.scene.setRotationFromAxisAngle(rotAxis, rot);\n        }).onComplete(function () {\n          state.tweenGroup.remove(this);\n        }).start());\n      }\n      state.scene.visible = true;\n      state.onGlobeReady && state.onGlobeReady();\n    };\n    waitForGlobeReady ? state.globeLayer.onReady(initGlobe) : initGlobe();\n\n    // Kick-off animation cycle\n    this._animationCycle();\n  },\n  update: function update(state) {}\n});\n\nfunction fromKapsule (kapsule) {\n  var baseClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Object;\n  var initKapsuleWithSelf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var Globe = /*#__PURE__*/function (_baseClass) {\n    function Globe() {\n      var _this;\n      _classCallCheck(this, Globe);\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      _this = _callSuper(this, Globe, [].concat(args));\n      _this.__kapsuleInstance = _construct(kapsule, [].concat(_toConsumableArray(initKapsuleWithSelf ? [_this] : []), args));\n      return _this;\n    }\n    _inherits(Globe, _baseClass);\n    return _createClass(Globe);\n  }(baseClass); // attach kapsule props/methods to class prototype\n  Object.keys(kapsule()).forEach(function (m) {\n    return Globe.prototype[m] = function () {\n      var _this$__kapsuleInstan;\n      var returnVal = (_this$__kapsuleInstan = this.__kapsuleInstance)[m].apply(_this$__kapsuleInstan, arguments);\n      return returnVal === this.__kapsuleInstance ? this // chain based on this class, not the kapsule obj\n      : returnVal;\n    };\n  });\n  return Globe;\n}\n\nvar three = window.THREE ? window.THREE : {\n  Group: Group\n}; // Prefer consumption from global THREE, if exists\nvar threeGlobe = fromKapsule(Globe, three.Group, true);\n\nexport { threeGlobe as default };\n","import {\n\tControls,\n\tMathUtils,\n\tMOUSE,\n\tQuaternion,\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Fires when the camera has been transformed by the controls.\n *\n * @event TrackballControls#change\n * @type {Object}\n */\nconst _changeEvent = { type: 'change' };\n\n/**\n * Fires when an interaction was initiated.\n *\n * @event TrackballControls#start\n * @type {Object}\n */\nconst _startEvent = { type: 'start' };\n\n/**\n * Fires when an interaction has finished.\n *\n * @event TrackballControls#end\n * @type {Object}\n */\nconst _endEvent = { type: 'end' };\n\nconst _EPS = 0.000001;\nconst _STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\nconst _v2 = new Vector2();\nconst _mouseChange = new Vector2();\nconst _objectUp = new Vector3();\nconst _pan = new Vector3();\nconst _axis = new Vector3();\nconst _quaternion = new Quaternion();\nconst _eyeDirection = new Vector3();\nconst _objectUpDirection = new Vector3();\nconst _objectSidewaysDirection = new Vector3();\nconst _moveDirection = new Vector3();\n\n/**\n * This class is similar to {@link OrbitControls}. However, it does not maintain a constant camera\n * `up` vector. That means if the camera orbits over the “north” and “south” poles, it does not flip\n * to stay \"right side up\".\n *\n * @augments Controls\n * @three_import import { TrackballControls } from 'three/addons/controls/TrackballControls.js';\n */\nclass TrackballControls extends Controls {\n\n\t/**\n\t * Constructs a new controls instance.\n\t *\n\t * @param {Object3D} object - The object that is managed by the controls.\n\t * @param {?HTMLElement} domElement - The HTML element used for event listeners.\n\t */\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper( object, domElement );\n\n\t\t/**\n\t\t * Represents the properties of the screen. Automatically set when `handleResize()` is called.\n\t\t *\n\t\t * @type {Object}\n\t\t * @readonly\n\t\t */\n\t\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\t\t/**\n\t\t * The rotation speed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t/**\n\t\t * The zoom speed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1.2\n\t\t */\n\t\tthis.zoomSpeed = 1.2;\n\n\t\t/**\n\t\t * The pan speed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.3\n\t\t */\n\t\tthis.panSpeed = 0.3;\n\n\t\t/**\n\t\t * Whether rotation is disabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.noRotate = false;\n\n\t\t/**\n\t\t * Whether zooming is disabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.noZoom = false;\n\n\t\t/**\n\t\t * Whether panning is disabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.noPan = false;\n\n\t\t/**\n\t\t * Whether damping is disabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.staticMoving = false;\n\n\t\t/**\n\t\t * Defines the intensity of damping. Only considered if `staticMoving` is set to `false`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.2\n\t\t */\n\t\tthis.dynamicDampingFactor = 0.2;\n\n\t\t/**\n\t\t * How far you can dolly in (perspective camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minDistance = 0;\n\n\t\t/**\n\t\t * How far you can dolly out (perspective camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxDistance = Infinity;\n\n\t\t/**\n\t\t * How far you can zoom in (orthographic camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minZoom = 0;\n\n\t\t/**\n\t\t * How far you can zoom out (orthographic camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxZoom = Infinity;\n\n\t\t/**\n\t\t * This array holds keycodes for controlling interactions.\n\t\t *\n\t\t * - When the first defined key is pressed, all mouse interactions (left, middle, right) performs orbiting.\n\t\t * - When the second defined key is pressed, all mouse interactions (left, middle, right) performs zooming.\n\t\t * - When the third defined key is pressed, all mouse interactions (left, middle, right) performs panning.\n\t\t *\n\t\t * Default is *KeyA, KeyS, KeyD* which represents A, S, D.\n\t\t *\n\t\t * @type {Array<string>}\n\t\t */\n\t\tthis.keys = [ 'KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/ ];\n\n\t\t/**\n\t\t * This object contains references to the mouse actions used by the controls.\n\t\t *\n\t\t * ```js\n\t\t * controls.mouseButtons = {\n\t\t * \tLEFT: THREE.MOUSE.ROTATE,\n\t\t * \tMIDDLE: THREE.MOUSE.DOLLY,\n\t\t * \tRIGHT: THREE.MOUSE.PAN\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t/**\n\t\t * The focus point of the controls.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.target = new Vector3();\n\n\t\t// internals\n\n\t\tthis.state = _STATE.NONE;\n\t\tthis.keyState = _STATE.NONE;\n\n\t\tthis._lastPosition = new Vector3();\n\t\tthis._lastZoom = 1;\n\t\tthis._touchZoomDistanceStart = 0;\n\t\tthis._touchZoomDistanceEnd = 0;\n\t\tthis._lastAngle = 0;\n\n\t\tthis._eye = new Vector3();\n\n\t\tthis._movePrev = new Vector2();\n\t\tthis._moveCurr = new Vector2();\n\n\t\tthis._lastAxis = new Vector3();\n\n\t\tthis._zoomStart = new Vector2();\n\t\tthis._zoomEnd = new Vector2();\n\n\t\tthis._panStart = new Vector2();\n\t\tthis._panEnd = new Vector2();\n\n\t\tthis._pointers = [];\n\t\tthis._pointerPositions = {};\n\n\t\t// event listeners\n\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onPointerCancel = onPointerCancel.bind( this );\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\t\tthis._onMouseWheel = onMouseWheel.bind( this );\n\t\tthis._onKeyDown = onKeyDown.bind( this );\n\t\tthis._onKeyUp = onKeyUp.bind( this );\n\n\t\tthis._onTouchStart = onTouchStart.bind( this );\n\t\tthis._onTouchMove = onTouchMove.bind( this );\n\t\tthis._onTouchEnd = onTouchEnd.bind( this );\n\n\t\tthis._onMouseDown = onMouseDown.bind( this );\n\t\tthis._onMouseMove = onMouseMove.bind( this );\n\t\tthis._onMouseUp = onMouseUp.bind( this );\n\n\t\t// for reset\n\n\t\tthis._target0 = this.target.clone();\n\t\tthis._position0 = this.object.position.clone();\n\t\tthis._up0 = this.object.up.clone();\n\t\tthis._zoom0 = this.object.zoom;\n\n\t\tif ( domElement !== null ) {\n\n\t\t\tthis.connect( domElement );\n\n\t\t\tthis.handleResize();\n\n\t\t}\n\n\t\t// force an update at start\n\t\tthis.update();\n\n\t}\n\n\tconnect( element ) {\n\n\t\tsuper.connect( element );\n\n\t\twindow.addEventListener( 'keydown', this._onKeyDown );\n\t\twindow.addEventListener( 'keyup', this._onKeyUp );\n\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerCancel );\n\t\tthis.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.domElement.style.touchAction = 'none'; // Disable touch scroll\n\n\t}\n\n\tdisconnect() {\n\n\t\twindow.removeEventListener( 'keydown', this._onKeyDown );\n\t\twindow.removeEventListener( 'keyup', this._onKeyUp );\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );\n\t\tthis.domElement.removeEventListener( 'wheel', this._onMouseWheel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.domElement.style.touchAction = ''; // Restore touch scroll\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\t/**\n\t * Must be called if the application window is resized.\n\t */\n\thandleResize() {\n\n\t\tconst box = this.domElement.getBoundingClientRect();\n\t\t// adjustments come from similar code in the jquery offset() function\n\t\tconst d = this.domElement.ownerDocument.documentElement;\n\n\t\tthis.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\tthis.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\tthis.screen.width = box.width;\n\t\tthis.screen.height = box.height;\n\n\t}\n\n\tupdate() {\n\n\t\tthis._eye.subVectors( this.object.position, this.target );\n\n\t\tif ( ! this.noRotate ) {\n\n\t\t\tthis._rotateCamera();\n\n\t\t}\n\n\t\tif ( ! this.noZoom ) {\n\n\t\t\tthis._zoomCamera();\n\n\t\t}\n\n\t\tif ( ! this.noPan ) {\n\n\t\t\tthis._panCamera();\n\n\t\t}\n\n\t\tthis.object.position.addVectors( this.target, this._eye );\n\n\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\tthis._checkDistances();\n\n\t\t\tthis.object.lookAt( this.target );\n\n\t\t\tif ( this._lastPosition.distanceToSquared( this.object.position ) > _EPS ) {\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\tthis._lastPosition.copy( this.object.position );\n\n\t\t\t}\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\tthis.object.lookAt( this.target );\n\n\t\t\tif ( this._lastPosition.distanceToSquared( this.object.position ) > _EPS || this._lastZoom !== this.object.zoom ) {\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\tthis._lastPosition.copy( this.object.position );\n\t\t\t\tthis._lastZoom = this.object.zoom;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Resets the controls to its initial state.\n\t */\n\treset() {\n\n\t\tthis.state = _STATE.NONE;\n\t\tthis.keyState = _STATE.NONE;\n\n\t\tthis.target.copy( this._target0 );\n\t\tthis.object.position.copy( this._position0 );\n\t\tthis.object.up.copy( this._up0 );\n\t\tthis.object.zoom = this._zoom0;\n\n\t\tthis.object.updateProjectionMatrix();\n\n\t\tthis._eye.subVectors( this.object.position, this.target );\n\n\t\tthis.object.lookAt( this.target );\n\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t\tthis._lastPosition.copy( this.object.position );\n\t\tthis._lastZoom = this.object.zoom;\n\n\t}\n\n\t_panCamera() {\n\n\t\t_mouseChange.copy( this._panEnd ).sub( this._panStart );\n\n\t\tif ( _mouseChange.lengthSq() ) {\n\n\t\t\tif ( this.object.isOrthographicCamera ) {\n\n\t\t\t\tconst scale_x = ( this.object.right - this.object.left ) / this.object.zoom / this.domElement.clientWidth;\n\t\t\t\tconst scale_y = ( this.object.top - this.object.bottom ) / this.object.zoom / this.domElement.clientWidth;\n\n\t\t\t\t_mouseChange.x *= scale_x;\n\t\t\t\t_mouseChange.y *= scale_y;\n\n\t\t\t}\n\n\t\t\t_mouseChange.multiplyScalar( this._eye.length() * this.panSpeed );\n\n\t\t\t_pan.copy( this._eye ).cross( this.object.up ).setLength( _mouseChange.x );\n\t\t\t_pan.add( _objectUp.copy( this.object.up ).setLength( _mouseChange.y ) );\n\n\t\t\tthis.object.position.add( _pan );\n\t\t\tthis.target.add( _pan );\n\n\t\t\tif ( this.staticMoving ) {\n\n\t\t\t\tthis._panStart.copy( this._panEnd );\n\n\t\t\t} else {\n\n\t\t\t\tthis._panStart.add( _mouseChange.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.dynamicDampingFactor ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_rotateCamera() {\n\n\t\t_moveDirection.set( this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0 );\n\t\tlet angle = _moveDirection.length();\n\n\t\tif ( angle ) {\n\n\t\t\tthis._eye.copy( this.object.position ).sub( this.target );\n\n\t\t\t_eyeDirection.copy( this._eye ).normalize();\n\t\t\t_objectUpDirection.copy( this.object.up ).normalize();\n\t\t\t_objectSidewaysDirection.crossVectors( _objectUpDirection, _eyeDirection ).normalize();\n\n\t\t\t_objectUpDirection.setLength( this._moveCurr.y - this._movePrev.y );\n\t\t\t_objectSidewaysDirection.setLength( this._moveCurr.x - this._movePrev.x );\n\n\t\t\t_moveDirection.copy( _objectUpDirection.add( _objectSidewaysDirection ) );\n\n\t\t\t_axis.crossVectors( _moveDirection, this._eye ).normalize();\n\n\t\t\tangle *= this.rotateSpeed;\n\t\t\t_quaternion.setFromAxisAngle( _axis, angle );\n\n\t\t\tthis._eye.applyQuaternion( _quaternion );\n\t\t\tthis.object.up.applyQuaternion( _quaternion );\n\n\t\t\tthis._lastAxis.copy( _axis );\n\t\t\tthis._lastAngle = angle;\n\n\t\t} else if ( ! this.staticMoving && this._lastAngle ) {\n\n\t\t\tthis._lastAngle *= Math.sqrt( 1.0 - this.dynamicDampingFactor );\n\t\t\tthis._eye.copy( this.object.position ).sub( this.target );\n\t\t\t_quaternion.setFromAxisAngle( this._lastAxis, this._lastAngle );\n\t\t\tthis._eye.applyQuaternion( _quaternion );\n\t\t\tthis.object.up.applyQuaternion( _quaternion );\n\n\t\t}\n\n\t\tthis._movePrev.copy( this._moveCurr );\n\n\t}\n\n\t_zoomCamera() {\n\n\t\tlet factor;\n\n\t\tif ( this.state === _STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\tfactor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd;\n\t\t\tthis._touchZoomDistanceStart = this._touchZoomDistanceEnd;\n\n\t\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t\tthis._eye.multiplyScalar( factor );\n\n\t\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t\tthis.object.zoom = MathUtils.clamp( this.object.zoom / factor, this.minZoom, this.maxZoom );\n\n\t\t\t\tif ( this._lastZoom !== this.object.zoom ) {\n\n\t\t\t\t\tthis.object.updateProjectionMatrix();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfactor = 1.0 + ( this._zoomEnd.y - this._zoomStart.y ) * this.zoomSpeed;\n\n\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t\t\tthis._eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t\t\tthis.object.zoom = MathUtils.clamp( this.object.zoom / factor, this.minZoom, this.maxZoom );\n\n\t\t\t\t\tif ( this._lastZoom !== this.object.zoom ) {\n\n\t\t\t\t\t\tthis.object.updateProjectionMatrix();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.staticMoving ) {\n\n\t\t\t\tthis._zoomStart.copy( this._zoomEnd );\n\n\t\t\t} else {\n\n\t\t\t\tthis._zoomStart.y += ( this._zoomEnd.y - this._zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_getMouseOnScreen( pageX, pageY ) {\n\n\t\t_v2.set(\n\t\t\t( pageX - this.screen.left ) / this.screen.width,\n\t\t\t( pageY - this.screen.top ) / this.screen.height\n\t\t);\n\n\t\treturn _v2;\n\n\t}\n\n\t_getMouseOnCircle( pageX, pageY ) {\n\n\t\t_v2.set(\n\t\t\t( ( pageX - this.screen.width * 0.5 - this.screen.left ) / ( this.screen.width * 0.5 ) ),\n\t\t\t( ( this.screen.height + 2 * ( this.screen.top - pageY ) ) / this.screen.width ) // screen.width intentional\n\t\t);\n\n\t\treturn _v2;\n\n\t}\n\n\t_addPointer( event ) {\n\n\t\tthis._pointers.push( event );\n\n\t}\n\n\t_removePointer( event ) {\n\n\t\tdelete this._pointerPositions[ event.pointerId ];\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ].pointerId == event.pointerId ) {\n\n\t\t\t\tthis._pointers.splice( i, 1 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_trackPointer( event ) {\n\n\t\tlet position = this._pointerPositions[ event.pointerId ];\n\n\t\tif ( position === undefined ) {\n\n\t\t\tposition = new Vector2();\n\t\t\tthis._pointerPositions[ event.pointerId ] = position;\n\n\t\t}\n\n\t\tposition.set( event.pageX, event.pageY );\n\n\t}\n\n\t_getSecondPointerPosition( event ) {\n\n\t\tconst pointer = ( event.pointerId === this._pointers[ 0 ].pointerId ) ? this._pointers[ 1 ] : this._pointers[ 0 ];\n\n\t\treturn this._pointerPositions[ pointer.pointerId ];\n\n\t}\n\n\t_checkDistances() {\n\n\t\tif ( ! this.noZoom || ! this.noPan ) {\n\n\t\t\tif ( this._eye.lengthSq() > this.maxDistance * this.maxDistance ) {\n\n\t\t\t\tthis.object.position.addVectors( this.target, this._eye.setLength( this.maxDistance ) );\n\t\t\t\tthis._zoomStart.copy( this._zoomEnd );\n\n\t\t\t}\n\n\t\t\tif ( this._eye.lengthSq() < this.minDistance * this.minDistance ) {\n\n\t\t\t\tthis.object.position.addVectors( this.target, this._eye.setLength( this.minDistance ) );\n\t\t\t\tthis._zoomStart.copy( this._zoomEnd );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this._pointers.length === 0 ) {\n\n\t\tthis.domElement.setPointerCapture( event.pointerId );\n\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n\t//\n\n\tthis._addPointer( event );\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchStart( event );\n\n\t} else {\n\n\t\tthis._onMouseDown( event );\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchMove( event );\n\n\t} else {\n\n\t\tthis._onMouseMove( event );\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchEnd( event );\n\n\t} else {\n\n\t\tthis._onMouseUp();\n\n\t}\n\n\t//\n\n\tthis._removePointer( event );\n\n\tif ( this._pointers.length === 0 ) {\n\n\t\tthis.domElement.releasePointerCapture( event.pointerId );\n\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n}\n\nfunction onPointerCancel( event ) {\n\n\tthis._removePointer( event );\n\n}\n\nfunction onKeyUp() {\n\n\tif ( this.enabled === false ) return;\n\n\tthis.keyState = _STATE.NONE;\n\n\twindow.addEventListener( 'keydown', this._onKeyDown );\n\n}\n\nfunction onKeyDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\twindow.removeEventListener( 'keydown', this._onKeyDown );\n\n\tif ( this.keyState !== _STATE.NONE ) {\n\n\t\treturn;\n\n\t} else if ( event.code === this.keys[ _STATE.ROTATE ] && ! this.noRotate ) {\n\n\t\tthis.keyState = _STATE.ROTATE;\n\n\t} else if ( event.code === this.keys[ _STATE.ZOOM ] && ! this.noZoom ) {\n\n\t\tthis.keyState = _STATE.ZOOM;\n\n\t} else if ( event.code === this.keys[ _STATE.PAN ] && ! this.noPan ) {\n\n\t\tthis.keyState = _STATE.PAN;\n\n\t}\n\n}\n\nfunction onMouseDown( event ) {\n\n\tlet mouseAction;\n\n\tswitch ( event.button ) {\n\n\t\tcase 0:\n\t\t\tmouseAction = this.mouseButtons.LEFT;\n\t\t\tbreak;\n\n\t\tcase 1:\n\t\t\tmouseAction = this.mouseButtons.MIDDLE;\n\t\t\tbreak;\n\n\t\tcase 2:\n\t\t\tmouseAction = this.mouseButtons.RIGHT;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmouseAction = - 1;\n\n\t}\n\n\tswitch ( mouseAction ) {\n\n\t\tcase MOUSE.DOLLY:\n\t\t\tthis.state = _STATE.ZOOM;\n\t\t\tbreak;\n\n\t\tcase MOUSE.ROTATE:\n\t\t\tthis.state = _STATE.ROTATE;\n\t\t\tbreak;\n\n\t\tcase MOUSE.PAN:\n\t\t\tthis.state = _STATE.PAN;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tconst state = ( this.keyState !== _STATE.NONE ) ? this.keyState : this.state;\n\n\tif ( state === _STATE.ROTATE && ! this.noRotate ) {\n\n\t\tthis._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );\n\t\tthis._movePrev.copy( this._moveCurr );\n\n\t} else if ( state === _STATE.ZOOM && ! this.noZoom ) {\n\n\t\tthis._zoomStart.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );\n\t\tthis._zoomEnd.copy( this._zoomStart );\n\n\t} else if ( state === _STATE.PAN && ! this.noPan ) {\n\n\t\tthis._panStart.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );\n\t\tthis._panEnd.copy( this._panStart );\n\n\t}\n\n\tthis.dispatchEvent( _startEvent );\n\n}\n\nfunction onMouseMove( event ) {\n\n\tconst state = ( this.keyState !== _STATE.NONE ) ? this.keyState : this.state;\n\n\tif ( state === _STATE.ROTATE && ! this.noRotate ) {\n\n\t\tthis._movePrev.copy( this._moveCurr );\n\t\tthis._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t} else if ( state === _STATE.ZOOM && ! this.noZoom ) {\n\n\t\tthis._zoomEnd.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t} else if ( state === _STATE.PAN && ! this.noPan ) {\n\n\t\tthis._panEnd.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t}\n\n}\n\nfunction onMouseUp() {\n\n\tthis.state = _STATE.NONE;\n\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nfunction onMouseWheel( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this.noZoom === true ) return;\n\n\tevent.preventDefault();\n\n\tswitch ( event.deltaMode ) {\n\n\t\tcase 2:\n\t\t\t// Zoom in pages\n\t\t\tthis._zoomStart.y -= event.deltaY * 0.025;\n\t\t\tbreak;\n\n\t\tcase 1:\n\t\t\t// Zoom in lines\n\t\t\tthis._zoomStart.y -= event.deltaY * 0.01;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t// undefined, 0, assume pixels\n\t\t\tthis._zoomStart.y -= event.deltaY * 0.00025;\n\t\t\tbreak;\n\n\t}\n\n\tthis.dispatchEvent( _startEvent );\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tevent.preventDefault();\n\n}\n\nfunction onTouchStart( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 1:\n\t\t\tthis.state = _STATE.TOUCH_ROTATE;\n\t\t\tthis._moveCurr.copy( this._getMouseOnCircle( this._pointers[ 0 ].pageX, this._pointers[ 0 ].pageY ) );\n\t\t\tthis._movePrev.copy( this._moveCurr );\n\t\t\tbreak;\n\n\t\tdefault: // 2 or more\n\t\t\tthis.state = _STATE.TOUCH_ZOOM_PAN;\n\t\t\tconst dx = this._pointers[ 0 ].pageX - this._pointers[ 1 ].pageX;\n\t\t\tconst dy = this._pointers[ 0 ].pageY - this._pointers[ 1 ].pageY;\n\t\t\tthis._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tconst x = ( this._pointers[ 0 ].pageX + this._pointers[ 1 ].pageX ) / 2;\n\t\t\tconst y = ( this._pointers[ 0 ].pageY + this._pointers[ 1 ].pageY ) / 2;\n\t\t\tthis._panStart.copy( this._getMouseOnScreen( x, y ) );\n\t\t\tthis._panEnd.copy( this._panStart );\n\t\t\tbreak;\n\n\t}\n\n\tthis.dispatchEvent( _startEvent );\n\n}\n\nfunction onTouchMove( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 1:\n\t\t\tthis._movePrev.copy( this._moveCurr );\n\t\t\tthis._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\tbreak;\n\n\t\tdefault: // 2 or more\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst dx = event.pageX - position.x;\n\t\t\tconst dy = event.pageY - position.y;\n\t\t\tthis._touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tconst x = ( event.pageX + position.x ) / 2;\n\t\t\tconst y = ( event.pageY + position.y ) / 2;\n\t\t\tthis._panEnd.copy( this._getMouseOnScreen( x, y ) );\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onTouchEnd( event ) {\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 0:\n\t\t\tthis.state = _STATE.NONE;\n\t\t\tbreak;\n\n\t\tcase 1:\n\t\t\tthis.state = _STATE.TOUCH_ROTATE;\n\t\t\tthis._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\tthis._movePrev.copy( this._moveCurr );\n\t\t\tbreak;\n\n\t\tcase 2:\n\t\t\tthis.state = _STATE.TOUCH_ZOOM_PAN;\n\n\t\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\t\tif ( this._pointers[ i ].pointerId !== event.pointerId ) {\n\n\t\t\t\t\tconst position = this._pointerPositions[ this._pointers[ i ].pointerId ];\n\t\t\t\t\tthis._moveCurr.copy( this._getMouseOnCircle( position.x, position.y ) );\n\t\t\t\t\tthis._movePrev.copy( this._moveCurr );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t}\n\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nexport { TrackballControls };\n","import {\n\tControls,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3,\n\tPlane,\n\tRay,\n\tMathUtils\n} from 'three';\n\n/**\n * Fires when the camera has been transformed by the controls.\n *\n * @event OrbitControls#change\n * @type {Object}\n */\nconst _changeEvent = { type: 'change' };\n\n/**\n * Fires when an interaction was initiated.\n *\n * @event OrbitControls#start\n * @type {Object}\n */\nconst _startEvent = { type: 'start' };\n\n/**\n * Fires when an interaction has finished.\n *\n * @event OrbitControls#end\n * @type {Object}\n */\nconst _endEvent = { type: 'end' };\n\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst _TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nconst _v = new Vector3();\nconst _twoPI = 2 * Math.PI;\n\nconst _STATE = {\n\tNONE: - 1,\n\tROTATE: 0,\n\tDOLLY: 1,\n\tPAN: 2,\n\tTOUCH_ROTATE: 3,\n\tTOUCH_PAN: 4,\n\tTOUCH_DOLLY_PAN: 5,\n\tTOUCH_DOLLY_ROTATE: 6\n};\nconst _EPS = 0.000001;\n\n\n/**\n * Orbit controls allow the camera to orbit around a target.\n *\n * OrbitControls performs orbiting, dollying (zooming), and panning. Unlike {@link TrackballControls},\n * it maintains the \"up\" direction `object.up` (+Y by default).\n *\n * - Orbit: Left mouse / touch: one-finger move.\n * - Zoom: Middle mouse, or mousewheel / touch: two-finger spread or squish.\n * - Pan: Right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move.\n *\n * ```js\n * const controls = new OrbitControls( camera, renderer.domElement );\n *\n * // controls.update() must be called after any manual changes to the camera's transform\n * camera.position.set( 0, 20, 100 );\n * controls.update();\n *\n * function animate() {\n *\n * \t// required if controls.enableDamping or controls.autoRotate are set to true\n * \tcontrols.update();\n *\n * \trenderer.render( scene, camera );\n *\n * }\n * ```\n *\n * @augments Controls\n * @three_import import { OrbitControls } from 'three/addons/controls/OrbitControls.js';\n */\nclass OrbitControls extends Controls {\n\n\t/**\n\t * Constructs a new controls instance.\n\t *\n\t * @param {Object3D} object - The object that is managed by the controls.\n\t * @param {?HTMLElement} domElement - The HTML element used for event listeners.\n\t */\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper( object, domElement );\n\n\t\tthis.state = _STATE.NONE;\n\n\t\t/**\n\t\t * The focus point of the controls, the `object` orbits around this.\n\t\t * It can be updated manually at any point to change the focus of the controls.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.target = new Vector3();\n\n\t\t/**\n\t\t * The focus point of the `minTargetRadius` and `maxTargetRadius` limits.\n\t\t * It can be updated manually at any point to change the center of interest\n\t\t * for the `target`.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.cursor = new Vector3();\n\n\t\t/**\n\t\t * How far you can dolly in (perspective camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minDistance = 0;\n\n\t\t/**\n\t\t * How far you can dolly out (perspective camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxDistance = Infinity;\n\n\t\t/**\n\t\t * How far you can zoom in (orthographic camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minZoom = 0;\n\n\t\t/**\n\t\t * How far you can zoom out (orthographic camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxZoom = Infinity;\n\n\t\t/**\n\t\t * How close you can get the target to the 3D `cursor`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minTargetRadius = 0;\n\n\t\t/**\n\t\t * How far you can move the target from the 3D `cursor`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxTargetRadius = Infinity;\n\n\t\t/**\n\t\t * How far you can orbit vertically, lower limit. Range is `[0, Math.PI]` radians.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minPolarAngle = 0;\n\n\t\t/**\n\t\t * How far you can orbit vertically, upper limit. Range is `[0, Math.PI]` radians.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Math.PI\n\t\t */\n\t\tthis.maxPolarAngle = Math.PI;\n\n\t\t/**\n\t\t * How far you can orbit horizontally, lower limit. If set, the interval `[ min, max ]`\n\t\t * must be a sub-interval of `[ - 2 PI, 2 PI ]`, with `( max - min < 2 PI )`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default -Infinity\n\t\t */\n\t\tthis.minAzimuthAngle = - Infinity;\n\n\t\t/**\n\t\t * How far you can orbit horizontally, upper limit. If set, the interval `[ min, max ]`\n\t\t * must be a sub-interval of `[ - 2 PI, 2 PI ]`, with `( max - min < 2 PI )`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default -Infinity\n\t\t */\n\t\tthis.maxAzimuthAngle = Infinity;\n\n\t\t/**\n\t\t * Set to `true` to enable damping (inertia), which can be used to give a sense of weight\n\t\t * to the controls. Note that if this is enabled, you must call `update()` in your animation\n\t\t * loop.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.enableDamping = false;\n\n\t\t/**\n\t\t * The damping inertia used if `enableDamping` is set to `true`.\n\t\t *\n\t\t * Note that for this to work, you must call `update()` in your animation loop.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.05\n\t\t */\n\t\tthis.dampingFactor = 0.05;\n\n\t\t/**\n\t\t * Enable or disable zooming (dollying) of the camera.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enableZoom = true;\n\n\t\t/**\n\t\t * Speed of zooming / dollying.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t/**\n\t\t * Enable or disable horizontal and vertical rotation of the camera.\n\t\t *\n\t\t * Note that it is possible to disable a single axis by setting the min and max of the\n\t\t * `minPolarAngle` or `minAzimuthAngle` to the same value, which will cause the vertical\n\t\t * or horizontal rotation to be fixed at that value.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enableRotate = true;\n\n\t\t/**\n\t\t * Speed of rotation.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t/**\n\t\t * How fast to rotate the camera when the keyboard is used.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.keyRotateSpeed = 1.0;\n\n\t\t/**\n\t\t * Enable or disable camera panning.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enablePan = true;\n\n\t\t/**\n\t\t * Speed of panning.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.panSpeed = 1.0;\n\n\t\t/**\n\t\t * Defines how the camera's position is translated when panning. If `true`, the camera pans\n\t\t * in screen space. Otherwise, the camera pans in the plane orthogonal to the camera's up\n\t\t * direction.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.screenSpacePanning = true;\n\n\t\t/**\n\t\t * How fast to pan the camera when the keyboard is used in\n\t\t * pixels per keypress.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 7\n\t\t */\n\t\tthis.keyPanSpeed = 7.0;\n\n\t\t/**\n\t\t * Setting this property to `true` allows to zoom to the cursor's position.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.zoomToCursor = false;\n\n\t\t/**\n\t\t * Set to true to automatically rotate around the target\n\t\t *\n\t\t * Note that if this is enabled, you must call `update()` in your animation loop.\n\t\t * If you want the auto-rotate speed to be independent of the frame rate (the refresh\n\t\t * rate of the display), you must pass the time `deltaTime`, in seconds, to `update()`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.autoRotate = false;\n\n\t\t/**\n\t\t * How fast to rotate around the target if `autoRotate` is `true`. The default  equates to 30 seconds\n\t\t * per orbit at 60fps.\n\t\t *\n\t\t * Note that if `autoRotate` is enabled, you must call `update()` in your animation loop.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 2\n\t\t */\n\t\tthis.autoRotateSpeed = 2.0;\n\n\t\t/**\n\t\t * This object contains references to the keycodes for controlling camera panning.\n\t\t *\n\t\t * ```js\n\t\t * controls.keys = {\n\t\t * \tLEFT: 'ArrowLeft', //left arrow\n\t\t * \tUP: 'ArrowUp', // up arrow\n\t\t * \tRIGHT: 'ArrowRight', // right arrow\n\t\t * \tBOTTOM: 'ArrowDown' // down arrow\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\n\n\t\t/**\n\t\t * This object contains references to the mouse actions used by the controls.\n\t\t *\n\t\t * ```js\n\t\t * controls.mouseButtons = {\n\t\t * \tLEFT: THREE.MOUSE.ROTATE,\n\t\t * \tMIDDLE: THREE.MOUSE.DOLLY,\n\t\t * \tRIGHT: THREE.MOUSE.PAN\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t/**\n\t\t * This object contains references to the touch actions used by the controls.\n\t\t *\n\t\t * ```js\n\t\t * controls.mouseButtons = {\n\t\t * \tONE: THREE.TOUCH.ROTATE,\n\t\t * \tTWO: THREE.TOUCH.DOLLY_PAN\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t/**\n\t\t * Used internally by `saveState()` and `reset()`.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.target0 = this.target.clone();\n\n\t\t/**\n\t\t * Used internally by `saveState()` and `reset()`.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.position0 = this.object.position.clone();\n\n\t\t/**\n\t\t * Used internally by `saveState()` and `reset()`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\tthis._cursorStyle = 'auto';\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t// internals\n\n\t\tthis._lastPosition = new Vector3();\n\t\tthis._lastQuaternion = new Quaternion();\n\t\tthis._lastTargetPosition = new Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tthis._quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\tthis._quatInverse = this._quat.clone().invert();\n\n\t\t// current position in spherical coordinates\n\t\tthis._spherical = new Spherical();\n\t\tthis._sphericalDelta = new Spherical();\n\n\t\tthis._scale = 1;\n\t\tthis._panOffset = new Vector3();\n\n\t\tthis._rotateStart = new Vector2();\n\t\tthis._rotateEnd = new Vector2();\n\t\tthis._rotateDelta = new Vector2();\n\n\t\tthis._panStart = new Vector2();\n\t\tthis._panEnd = new Vector2();\n\t\tthis._panDelta = new Vector2();\n\n\t\tthis._dollyStart = new Vector2();\n\t\tthis._dollyEnd = new Vector2();\n\t\tthis._dollyDelta = new Vector2();\n\n\t\tthis._dollyDirection = new Vector3();\n\t\tthis._mouse = new Vector2();\n\t\tthis._performCursorZoom = false;\n\n\t\tthis._pointers = [];\n\t\tthis._pointerPositions = {};\n\n\t\tthis._controlActive = false;\n\n\t\t// event listeners\n\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\t\tthis._onMouseWheel = onMouseWheel.bind( this );\n\t\tthis._onKeyDown = onKeyDown.bind( this );\n\n\t\tthis._onTouchStart = onTouchStart.bind( this );\n\t\tthis._onTouchMove = onTouchMove.bind( this );\n\n\t\tthis._onMouseDown = onMouseDown.bind( this );\n\t\tthis._onMouseMove = onMouseMove.bind( this );\n\n\t\tthis._interceptControlDown = interceptControlDown.bind( this );\n\t\tthis._interceptControlUp = interceptControlUp.bind( this );\n\n\t\t//\n\n\t\tif ( this.domElement !== null ) {\n\n\t\t\tthis.connect( this.domElement );\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Defines the visual representation of the cursor.\n\t *\n\t * @type {('auto'|'grab')}\n\t * @default 'auto'\n\t */\n\tset cursorStyle( type ) {\n\n\t\tthis._cursorStyle = type;\n\n\t\tif ( type === 'grab' ) {\n\n\t\t\tthis.domElement.style.cursor = 'grab';\n\n\t\t} else {\n\n\t\t\tthis.domElement.style.cursor = 'auto';\n\n\t\t}\n\n\t}\n\n\tget cursorStyle() {\n\n\t\treturn this._cursorStyle;\n\n\t}\n\n\tconnect( element ) {\n\n\t\tsuper.connect( element );\n\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\t\tthis.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.addEventListener( 'keydown', this._interceptControlDown, { passive: true, capture: true } );\n\n\t\tthis.domElement.style.touchAction = 'none'; // Disable touch scroll\n\n\t}\n\n\tdisconnect() {\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.removeEventListener( 'wheel', this._onMouseWheel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.stopListenToKeyEvents();\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.removeEventListener( 'keydown', this._interceptControlDown, { capture: true } );\n\n\t\tthis.domElement.style.touchAction = ''; // Restore touch scroll\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\t/**\n\t * Get the current vertical rotation, in radians.\n\t *\n\t * @return {number} The current vertical rotation, in radians.\n\t */\n\tgetPolarAngle() {\n\n\t\treturn this._spherical.phi;\n\n\t}\n\n\t/**\n\t * Get the current horizontal rotation, in radians.\n\t *\n\t * @return {number} The current horizontal rotation, in radians.\n\t */\n\tgetAzimuthalAngle() {\n\n\t\treturn this._spherical.theta;\n\n\t}\n\n\t/**\n\t * Returns the distance from the camera to the target.\n\t *\n\t * @return {number} The distance from the camera to the target.\n\t */\n\tgetDistance() {\n\n\t\treturn this.object.position.distanceTo( this.target );\n\n\t}\n\n\t/**\n\t * Adds key event listeners to the given DOM element.\n\t * `window` is a recommended argument for using this method.\n\t *\n\t * @param {HTMLElement} domElement - The DOM element\n\t */\n\tlistenToKeyEvents( domElement ) {\n\n\t\tdomElement.addEventListener( 'keydown', this._onKeyDown );\n\t\tthis._domElementKeyEvents = domElement;\n\n\t}\n\n\t/**\n\t * Removes the key event listener previously defined with `listenToKeyEvents()`.\n\t */\n\tstopListenToKeyEvents() {\n\n\t\tif ( this._domElementKeyEvents !== null ) {\n\n\t\t\tthis._domElementKeyEvents.removeEventListener( 'keydown', this._onKeyDown );\n\t\t\tthis._domElementKeyEvents = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Save the current state of the controls. This can later be recovered with `reset()`.\n\t */\n\tsaveState() {\n\n\t\tthis.target0.copy( this.target );\n\t\tthis.position0.copy( this.object.position );\n\t\tthis.zoom0 = this.object.zoom;\n\n\t}\n\n\t/**\n\t * Reset the controls to their state from either the last time the `saveState()`\n\t * was called, or the initial state.\n\t */\n\treset() {\n\n\t\tthis.target.copy( this.target0 );\n\t\tthis.object.position.copy( this.position0 );\n\t\tthis.object.zoom = this.zoom0;\n\n\t\tthis.object.updateProjectionMatrix();\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t\tthis.update();\n\n\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\t/**\n\t * Programmatically pan the camera.\n\t *\n\t * @param {number} deltaX - The horizontal pan amount in pixels.\n\t * @param {number} deltaY - The vertical pan amount in pixels.\n\t */\n\tpan( deltaX, deltaY ) {\n\n\t\tthis._pan( deltaX, deltaY );\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Programmatically dolly in (zoom in for perspective camera).\n\t *\n\t * @param {number} dollyScale - The dolly scale factor.\n\t */\n\tdollyIn( dollyScale ) {\n\n\t\tthis._dollyIn( dollyScale );\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Programmatically dolly out (zoom out for perspective camera).\n\t *\n\t * @param {number} dollyScale - The dolly scale factor.\n\t */\n\tdollyOut( dollyScale ) {\n\n\t\tthis._dollyOut( dollyScale );\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Programmatically rotate the camera left (around the vertical axis).\n\t *\n\t * @param {number} angle - The rotation angle in radians.\n\t */\n\trotateLeft( angle ) {\n\n\t\tthis._rotateLeft( angle );\n\t\tthis.update();\n\n\t}\n\n\t/**\n\t * Programmatically rotate the camera up (around the horizontal axis).\n\t *\n\t * @param {number} angle - The rotation angle in radians.\n\t */\n\trotateUp( angle ) {\n\n\t\tthis._rotateUp( angle );\n\t\tthis.update();\n\n\t}\n\n\tupdate( deltaTime = null ) {\n\n\t\tconst position = this.object.position;\n\n\t\t_v.copy( position ).sub( this.target );\n\n\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t_v.applyQuaternion( this._quat );\n\n\t\t// angle from z-axis around y-axis\n\t\tthis._spherical.setFromVector3( _v );\n\n\t\tif ( this.autoRotate && this.state === _STATE.NONE ) {\n\n\t\t\tthis._rotateLeft( this._getAutoRotationAngle( deltaTime ) );\n\n\t\t}\n\n\t\tif ( this.enableDamping ) {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta * this.dampingFactor;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi * this.dampingFactor;\n\n\t\t} else {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi;\n\n\t\t}\n\n\t\t// restrict theta to be between desired limits\n\n\t\tlet min = this.minAzimuthAngle;\n\t\tlet max = this.maxAzimuthAngle;\n\n\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\tif ( min < - Math.PI ) min += _twoPI; else if ( min > Math.PI ) min -= _twoPI;\n\n\t\t\tif ( max < - Math.PI ) max += _twoPI; else if ( max > Math.PI ) max -= _twoPI;\n\n\t\t\tif ( min <= max ) {\n\n\t\t\t\tthis._spherical.theta = Math.max( min, Math.min( max, this._spherical.theta ) );\n\n\t\t\t} else {\n\n\t\t\t\tthis._spherical.theta = ( this._spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\tMath.max( min, this._spherical.theta ) :\n\t\t\t\t\tMath.min( max, this._spherical.theta );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restrict phi to be between desired limits\n\t\tthis._spherical.phi = Math.max( this.minPolarAngle, Math.min( this.maxPolarAngle, this._spherical.phi ) );\n\n\t\tthis._spherical.makeSafe();\n\n\n\t\t// move target to panned location\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis.target.addScaledVector( this._panOffset, this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis.target.add( this._panOffset );\n\n\t\t}\n\n\t\t// Limit the target distance from the cursor to create a sphere around the center of interest\n\t\tthis.target.sub( this.cursor );\n\t\tthis.target.clampLength( this.minTargetRadius, this.maxTargetRadius );\n\t\tthis.target.add( this.cursor );\n\n\t\tlet zoomChanged = false;\n\t\t// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n\t\t// we adjust zoom later in these cases\n\t\tif ( this.zoomToCursor && this._performCursorZoom || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius );\n\n\t\t} else {\n\n\t\t\tconst prevRadius = this._spherical.radius;\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius * this._scale );\n\t\t\tzoomChanged = prevRadius != this._spherical.radius;\n\n\t\t}\n\n\t\t_v.setFromSpherical( this._spherical );\n\n\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t_v.applyQuaternion( this._quatInverse );\n\n\t\tposition.copy( this.target ).add( _v );\n\n\t\tthis.object.lookAt( this.target );\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis._sphericalDelta.theta *= ( 1 - this.dampingFactor );\n\t\t\tthis._sphericalDelta.phi *= ( 1 - this.dampingFactor );\n\n\t\t\tthis._panOffset.multiplyScalar( 1 - this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis._sphericalDelta.set( 0, 0, 0 );\n\n\t\t\tthis._panOffset.set( 0, 0, 0 );\n\n\t\t}\n\n\t\t// adjust camera position\n\t\tif ( this.zoomToCursor && this._performCursorZoom ) {\n\n\t\t\tlet newRadius = null;\n\t\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t\t// move the camera down the pointer ray\n\t\t\t\t// this method avoids floating point error\n\t\t\t\tconst prevRadius = _v.length();\n\t\t\t\tnewRadius = this._clampDistance( prevRadius * this._scale );\n\n\t\t\t\tconst radiusDelta = prevRadius - newRadius;\n\t\t\t\tthis.object.position.addScaledVector( this._dollyDirection, radiusDelta );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tzoomChanged = !! radiusDelta;\n\n\t\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t\t// adjust the ortho camera position based on zoom changes\n\t\t\t\tconst mouseBefore = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseBefore.unproject( this.object );\n\n\t\t\t\tconst prevZoom = this.object.zoom;\n\t\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\t\t\t\tthis.object.updateProjectionMatrix();\n\n\t\t\t\tzoomChanged = prevZoom !== this.object.zoom;\n\n\t\t\t\tconst mouseAfter = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseAfter.unproject( this.object );\n\n\t\t\t\tthis.object.position.sub( mouseAfter ).add( mouseBefore );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tnewRadius = _v.length();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n\t\t\t\tthis.zoomToCursor = false;\n\n\t\t\t}\n\n\t\t\t// handle the placement of the target\n\t\t\tif ( newRadius !== null ) {\n\n\t\t\t\tif ( this.screenSpacePanning ) {\n\n\t\t\t\t\t// position the orbit target in front of the new camera position\n\t\t\t\t\tthis.target.set( 0, 0, - 1 )\n\t\t\t\t\t\t.transformDirection( this.object.matrix )\n\t\t\t\t\t\t.multiplyScalar( newRadius )\n\t\t\t\t\t\t.add( this.object.position );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// get the ray and translation plane to compute target\n\t\t\t\t\t_ray.origin.copy( this.object.position );\n\t\t\t\t\t_ray.direction.set( 0, 0, - 1 ).transformDirection( this.object.matrix );\n\n\t\t\t\t\t// if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n\t\t\t\t\t// extremely large values\n\t\t\t\t\tif ( Math.abs( this.object.up.dot( _ray.direction ) ) < _TILT_LIMIT ) {\n\n\t\t\t\t\t\tthis.object.lookAt( this.target );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( this.object.up, this.target );\n\t\t\t\t\t\t_ray.intersectPlane( _plane, this.target );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\tconst prevZoom = this.object.zoom;\n\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\n\t\t\tif ( prevZoom !== this.object.zoom ) {\n\n\t\t\t\tthis.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._scale = 1;\n\t\tthis._performCursorZoom = false;\n\n\t\t// update condition is:\n\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\tif ( zoomChanged ||\n\t\t\tthis._lastPosition.distanceToSquared( this.object.position ) > _EPS ||\n\t\t\t8 * ( 1 - this._lastQuaternion.dot( this.object.quaternion ) ) > _EPS ||\n\t\t\tthis._lastTargetPosition.distanceToSquared( this.target ) > _EPS ) {\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\tthis._lastPosition.copy( this.object.position );\n\t\t\tthis._lastQuaternion.copy( this.object.quaternion );\n\t\t\tthis._lastTargetPosition.copy( this.target );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_getAutoRotationAngle( deltaTime ) {\n\n\t\tif ( deltaTime !== null ) {\n\n\t\t\treturn ( _twoPI / 60 * this.autoRotateSpeed ) * deltaTime;\n\n\t\t} else {\n\n\t\t\treturn _twoPI / 60 / 60 * this.autoRotateSpeed;\n\n\t\t}\n\n\t}\n\n\t_getZoomScale( delta ) {\n\n\t\tconst normalizedDelta = Math.abs( delta * 0.01 );\n\t\treturn Math.pow( 0.95, this.zoomSpeed * normalizedDelta );\n\n\t}\n\n\t_rotateLeft( angle ) {\n\n\t\tthis._sphericalDelta.theta -= angle;\n\n\t}\n\n\t_rotateUp( angle ) {\n\n\t\tthis._sphericalDelta.phi -= angle;\n\n\t}\n\n\t_panLeft( distance, objectMatrix ) {\n\n\t\t_v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t_v.multiplyScalar( - distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t_panUp( distance, objectMatrix ) {\n\n\t\tif ( this.screenSpacePanning === true ) {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t} else {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t_v.crossVectors( this.object.up, _v );\n\n\t\t}\n\n\t\t_v.multiplyScalar( distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\t_pan( deltaX, deltaY ) {\n\n\t\tconst element = this.domElement;\n\n\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t// perspective\n\t\t\tconst position = this.object.position;\n\t\t\t_v.copy( position ).sub( this.target );\n\t\t\tlet targetDistance = _v.length();\n\n\t\t\t// half of the fov is center to top of screen\n\t\t\ttargetDistance *= Math.tan( ( this.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\tthis._panLeft( 2 * deltaX * targetDistance / element.clientHeight, this.object.matrix );\n\t\t\tthis._panUp( 2 * deltaY * targetDistance / element.clientHeight, this.object.matrix );\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t// orthographic\n\t\t\tthis._panLeft( deltaX * ( this.object.right - this.object.left ) / this.object.zoom / element.clientWidth, this.object.matrix );\n\t\t\tthis._panUp( deltaY * ( this.object.top - this.object.bottom ) / this.object.zoom / element.clientHeight, this.object.matrix );\n\n\t\t} else {\n\n\t\t\t// camera neither orthographic nor perspective\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\tthis.enablePan = false;\n\n\t\t}\n\n\t}\n\n\t_dollyOut( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale /= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_dollyIn( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale *= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_updateZoomParameters( x, y ) {\n\n\t\tif ( ! this.zoomToCursor ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._performCursorZoom = true;\n\n\t\tconst rect = this.domElement.getBoundingClientRect();\n\t\tconst dx = x - rect.left;\n\t\tconst dy = y - rect.top;\n\t\tconst w = rect.width;\n\t\tconst h = rect.height;\n\n\t\tthis._mouse.x = ( dx / w ) * 2 - 1;\n\t\tthis._mouse.y = - ( dy / h ) * 2 + 1;\n\n\t\tthis._dollyDirection.set( this._mouse.x, this._mouse.y, 1 ).unproject( this.object ).sub( this.object.position ).normalize();\n\n\t}\n\n\t_clampDistance( dist ) {\n\n\t\treturn Math.max( this.minDistance, Math.min( this.maxDistance, dist ) );\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\t_handleMouseDownRotate( event ) {\n\n\t\tthis._rotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownDolly( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientX );\n\t\tthis._dollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownPan( event ) {\n\n\t\tthis._panStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseMoveRotate( event ) {\n\n\t\tthis._rotateEnd.set( event.clientX, event.clientY );\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMoveDolly( event ) {\n\n\t\tthis._dollyEnd.set( event.clientX, event.clientY );\n\n\t\tthis._dollyDelta.subVectors( this._dollyEnd, this._dollyStart );\n\n\t\tif ( this._dollyDelta.y > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t} else if ( this._dollyDelta.y < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t}\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMovePan( event ) {\n\n\t\tthis._panEnd.set( event.clientX, event.clientY );\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseWheel( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientY );\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( event.deltaY ) );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( event.deltaY ) );\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\t_handleKeyDown( event ) {\n\n\t\tlet needsUpdate = false;\n\n\t\tswitch ( event.code ) {\n\n\t\t\tcase this.keys.UP:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateUp( _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( 0, this.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.BOTTOM:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateUp( - _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( 0, - this.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.LEFT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateLeft( _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( this.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.RIGHT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateLeft( - _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( - this.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.update();\n\n\t\t}\n\n\n\t}\n\n\t_handleTouchStartRotate( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._rotateStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartPan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyStart.set( 0, distance );\n\n\t}\n\n\t_handleTouchStartDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchStartPan( event );\n\n\t}\n\n\t_handleTouchStartDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchStartRotate( event );\n\n\t}\n\n\t_handleTouchMoveRotate( event ) {\n\n\t\tif ( this._pointers.length == 1 ) {\n\n\t\t\tthis._rotateEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t}\n\n\t_handleTouchMovePan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t}\n\n\t_handleTouchMoveDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyEnd.set( 0, distance );\n\n\t\tthis._dollyDelta.set( 0, Math.pow( this._dollyEnd.y / this._dollyStart.y, this.zoomSpeed ) );\n\n\t\tthis._dollyOut( this._dollyDelta.y );\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tconst centerX = ( event.pageX + position.x ) * 0.5;\n\t\tconst centerY = ( event.pageY + position.y ) * 0.5;\n\n\t\tthis._updateZoomParameters( centerX, centerY );\n\n\t}\n\n\t_handleTouchMoveDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchMovePan( event );\n\n\t}\n\n\t_handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchMoveRotate( event );\n\n\t}\n\n\t// pointers\n\n\t_addPointer( event ) {\n\n\t\tthis._pointers.push( event.pointerId );\n\n\t}\n\n\t_removePointer( event ) {\n\n\t\tdelete this._pointerPositions[ event.pointerId ];\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) {\n\n\t\t\t\tthis._pointers.splice( i, 1 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_isTrackingPointer( event ) {\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_trackPointer( event ) {\n\n\t\tlet position = this._pointerPositions[ event.pointerId ];\n\n\t\tif ( position === undefined ) {\n\n\t\t\tposition = new Vector2();\n\t\t\tthis._pointerPositions[ event.pointerId ] = position;\n\n\t\t}\n\n\t\tposition.set( event.pageX, event.pageY );\n\n\t}\n\n\t_getSecondPointerPosition( event ) {\n\n\t\tconst pointerId = ( event.pointerId === this._pointers[ 0 ] ) ? this._pointers[ 1 ] : this._pointers[ 0 ];\n\n\t\treturn this._pointerPositions[ pointerId ];\n\n\t}\n\n\t//\n\n\t_customWheelEvent( event ) {\n\n\t\tconst mode = event.deltaMode;\n\n\t\t// minimal wheel event altered to meet delta-zoom demand\n\t\tconst newEvent = {\n\t\t\tclientX: event.clientX,\n\t\t\tclientY: event.clientY,\n\t\t\tdeltaY: event.deltaY,\n\t\t};\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 1: // LINE_MODE\n\t\t\t\tnewEvent.deltaY *= 16;\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // PAGE_MODE\n\t\t\t\tnewEvent.deltaY *= 100;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// detect if event was triggered by pinching\n\t\tif ( event.ctrlKey && ! this._controlActive ) {\n\n\t\t\tnewEvent.deltaY *= 10;\n\n\t\t}\n\n\t\treturn newEvent;\n\n\t}\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this._pointers.length === 0 ) {\n\n\t\tthis.domElement.setPointerCapture( event.pointerId );\n\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n\t//\n\n\tif ( this._isTrackingPointer( event ) ) return;\n\n\t//\n\n\tthis._addPointer( event );\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchStart( event );\n\n\t} else {\n\n\t\tthis._onMouseDown( event );\n\n\t}\n\n\tif ( this._cursorStyle === 'grab' ) {\n\n\t\tthis.domElement.style.cursor = 'grabbing';\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchMove( event );\n\n\t} else {\n\n\t\tthis._onMouseMove( event );\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tthis._removePointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 0:\n\n\t\t\tthis.domElement.releasePointerCapture( event.pointerId );\n\n\t\t\tthis.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );\n\t\t\tthis.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\tthis.dispatchEvent( _endEvent );\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t\t\tif ( this._cursorStyle === 'grab' ) {\n\n\t\t\t\tthis.domElement.style.cursor = 'grab';\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tconst pointerId = this._pointers[ 0 ];\n\t\t\tconst position = this._pointerPositions[ pointerId ];\n\n\t\t\t// minimal placeholder event - allows state correction on pointer-up\n\t\t\tthis._onTouchStart( { pointerId: pointerId, pageX: position.x, pageY: position.y } );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseDown( event ) {\n\n\tlet mouseAction;\n\n\tswitch ( event.button ) {\n\n\t\tcase 0:\n\n\t\t\tmouseAction = this.mouseButtons.LEFT;\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tmouseAction = this.mouseButtons.MIDDLE;\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tmouseAction = this.mouseButtons.RIGHT;\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tmouseAction = - 1;\n\n\t}\n\n\tswitch ( mouseAction ) {\n\n\t\tcase MOUSE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseDownDolly( event );\n\n\t\t\tthis.state = _STATE.DOLLY;\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.ROTATE:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.PAN:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onMouseMove( event ) {\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleMouseMoveRotate( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseMoveDolly( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleMouseMovePan( event );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseWheel( event ) {\n\n\tif ( this.enabled === false || this.enableZoom === false || this.state !== _STATE.NONE ) return;\n\n\tevent.preventDefault();\n\n\tthis.dispatchEvent( _startEvent );\n\n\tthis._handleMouseWheel( this._customWheelEvent( event ) );\n\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nfunction onKeyDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tthis._handleKeyDown( event );\n\n}\n\nfunction onTouchStart( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 1:\n\n\t\t\tswitch ( this.touches.ONE ) {\n\n\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tswitch ( this.touches.TWO ) {\n\n\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onTouchMove( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.TOUCH_ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMovePan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_PAN:\n\n\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyPan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tevent.preventDefault();\n\n}\n\nfunction interceptControlDown( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = true;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.addEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nfunction interceptControlUp( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = false;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.removeEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nexport { OrbitControls };\n","import {\n\tControls,\n\tQuaternion,\n\tVector3\n} from 'three';\n\n/**\n * Fires when the camera has been transformed by the controls.\n *\n * @event FlyControls#change\n * @type {Object}\n */\nconst _changeEvent = { type: 'change' };\n\nconst _EPS = 0.000001;\nconst _tmpQuaternion = new Quaternion();\n\n/**\n * This class enables a navigation similar to fly modes in DCC tools like Blender.\n * You can arbitrarily transform the camera in 3D space without any limitations\n * (e.g. focus on a specific target).\n *\n * @augments Controls\n * @three_import import { FlyControls } from 'three/addons/controls/FlyControls.js';\n */\nclass FlyControls extends Controls {\n\n\t/**\n\t * Constructs a new controls instance.\n\t *\n\t * @param {Object3D} object - The object that is managed by the controls.\n\t * @param {?HTMLElement} domElement - The HTML element used for event listeners.\n\t */\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper( object, domElement );\n\n\t\t/**\n\t\t * The movement speed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.movementSpeed = 1.0;\n\n\t\t/**\n\t\t * The rotation speed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.005\n\t\t */\n\t\tthis.rollSpeed = 0.005;\n\n\t\t/**\n\t\t * If set to `true`, you can only look around by performing a drag interaction.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.dragToLook = false;\n\n\t\t/**\n\t\t * If set to `true`, the camera automatically moves forward (and does not stop) when initially translated.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.autoForward = false;\n\n\t\t// internals\n\n\t\tthis._moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 };\n\t\tthis._moveVector = new Vector3( 0, 0, 0 );\n\t\tthis._rotationVector = new Vector3( 0, 0, 0 );\n\t\tthis._lastQuaternion = new Quaternion();\n\t\tthis._lastPosition = new Vector3();\n\t\tthis._status = 0;\n\n\t\t// event listeners\n\n\t\tthis._onKeyDown = onKeyDown.bind( this );\n\t\tthis._onKeyUp = onKeyUp.bind( this );\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onPointerCancel = onPointerCancel.bind( this );\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\n\t\t//\n\n\t\tif ( domElement !== null ) {\n\n\t\t\tthis.connect( domElement );\n\n\t\t}\n\n\t}\n\n\tconnect( element ) {\n\n\t\tsuper.connect( element );\n\n\t\twindow.addEventListener( 'keydown', this._onKeyDown );\n\t\twindow.addEventListener( 'keyup', this._onKeyUp );\n\n\t\tthis.domElement.addEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointerup', this._onPointerUp );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerCancel );\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.domElement.style.touchAction = 'none'; // Disable touch scroll\n\n\t}\n\n\tdisconnect() {\n\n\t\twindow.removeEventListener( 'keydown', this._onKeyDown );\n\t\twindow.removeEventListener( 'keyup', this._onKeyUp );\n\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.domElement.style.touchAction = ''; // Restore touch scroll\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\tconst object = this.object;\n\n\t\tconst moveMult = delta * this.movementSpeed;\n\t\tconst rotMult = delta * this.rollSpeed;\n\n\t\tobject.translateX( this._moveVector.x * moveMult );\n\t\tobject.translateY( this._moveVector.y * moveMult );\n\t\tobject.translateZ( this._moveVector.z * moveMult );\n\n\t\t_tmpQuaternion.set( this._rotationVector.x * rotMult, this._rotationVector.y * rotMult, this._rotationVector.z * rotMult, 1 ).normalize();\n\t\tobject.quaternion.multiply( _tmpQuaternion );\n\n\t\tif (\n\t\t\tthis._lastPosition.distanceToSquared( object.position ) > _EPS ||\n\t\t\t8 * ( 1 - this._lastQuaternion.dot( object.quaternion ) ) > _EPS\n\t\t) {\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\t\t\tthis._lastQuaternion.copy( object.quaternion );\n\t\t\tthis._lastPosition.copy( object.position );\n\n\t\t}\n\n\t}\n\n\t// private\n\n\t_updateMovementVector() {\n\n\t\tconst forward = ( this._moveState.forward || ( this.autoForward && ! this._moveState.back ) ) ? 1 : 0;\n\n\t\tthis._moveVector.x = ( - this._moveState.left + this._moveState.right );\n\t\tthis._moveVector.y = ( - this._moveState.down + this._moveState.up );\n\t\tthis._moveVector.z = ( - forward + this._moveState.back );\n\n\t\t//console.log( 'move:', [ this._moveVector.x, this._moveVector.y, this._moveVector.z ] );\n\n\t}\n\n\t_updateRotationVector() {\n\n\t\tthis._rotationVector.x = ( - this._moveState.pitchDown + this._moveState.pitchUp );\n\t\tthis._rotationVector.y = ( - this._moveState.yawRight + this._moveState.yawLeft );\n\t\tthis._rotationVector.z = ( - this._moveState.rollRight + this._moveState.rollLeft );\n\n\t\t//console.log( 'rotate:', [ this._rotationVector.x, this._rotationVector.y, this._rotationVector.z ] );\n\n\t}\n\n\t_getContainerDimensions() {\n\n\t\tif ( this.domElement != document ) {\n\n\t\t\treturn {\n\t\t\t\tsize: [ this.domElement.offsetWidth, this.domElement.offsetHeight ],\n\t\t\t\toffset: [ this.domElement.offsetLeft, this.domElement.offsetTop ]\n\t\t\t};\n\n\t\t} else {\n\n\t\t\treturn {\n\t\t\t\tsize: [ window.innerWidth, window.innerHeight ],\n\t\t\t\toffset: [ 0, 0 ]\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nfunction onKeyDown( event ) {\n\n\tif ( event.altKey || this.enabled === false ) {\n\n\t\treturn;\n\n\t}\n\n\tswitch ( event.code ) {\n\n\t\tcase 'ShiftLeft':\n\t\tcase 'ShiftRight': this.movementSpeedMultiplier = .1; break;\n\n\t\tcase 'KeyW': this._moveState.forward = 1; break;\n\t\tcase 'KeyS': this._moveState.back = 1; break;\n\n\t\tcase 'KeyA': this._moveState.left = 1; break;\n\t\tcase 'KeyD': this._moveState.right = 1; break;\n\n\t\tcase 'KeyR': this._moveState.up = 1; break;\n\t\tcase 'KeyF': this._moveState.down = 1; break;\n\n\t\tcase 'ArrowUp': this._moveState.pitchUp = 1; break;\n\t\tcase 'ArrowDown': this._moveState.pitchDown = 1; break;\n\n\t\tcase 'ArrowLeft': this._moveState.yawLeft = 1; break;\n\t\tcase 'ArrowRight': this._moveState.yawRight = 1; break;\n\n\t\tcase 'KeyQ': this._moveState.rollLeft = 1; break;\n\t\tcase 'KeyE': this._moveState.rollRight = 1; break;\n\n\t}\n\n\tthis._updateMovementVector();\n\tthis._updateRotationVector();\n\n}\n\nfunction onKeyUp( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tswitch ( event.code ) {\n\n\t\tcase 'ShiftLeft':\n\t\tcase 'ShiftRight': this.movementSpeedMultiplier = 1; break;\n\n\t\tcase 'KeyW': this._moveState.forward = 0; break;\n\t\tcase 'KeyS': this._moveState.back = 0; break;\n\n\t\tcase 'KeyA': this._moveState.left = 0; break;\n\t\tcase 'KeyD': this._moveState.right = 0; break;\n\n\t\tcase 'KeyR': this._moveState.up = 0; break;\n\t\tcase 'KeyF': this._moveState.down = 0; break;\n\n\t\tcase 'ArrowUp': this._moveState.pitchUp = 0; break;\n\t\tcase 'ArrowDown': this._moveState.pitchDown = 0; break;\n\n\t\tcase 'ArrowLeft': this._moveState.yawLeft = 0; break;\n\t\tcase 'ArrowRight': this._moveState.yawRight = 0; break;\n\n\t\tcase 'KeyQ': this._moveState.rollLeft = 0; break;\n\t\tcase 'KeyE': this._moveState.rollRight = 0; break;\n\n\t}\n\n\tthis._updateMovementVector();\n\tthis._updateRotationVector();\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this.dragToLook ) {\n\n\t\tthis._status ++;\n\n\t} else {\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase 0: this._moveState.forward = 1; break;\n\t\t\tcase 2: this._moveState.back = 1; break;\n\n\t\t}\n\n\t\tthis._updateMovementVector();\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( ! this.dragToLook || this._status > 0 ) {\n\n\t\tconst container = this._getContainerDimensions();\n\t\tconst halfWidth = container.size[ 0 ] / 2;\n\t\tconst halfHeight = container.size[ 1 ] / 2;\n\n\t\tthis._moveState.yawLeft = - ( ( event.pageX - container.offset[ 0 ] ) - halfWidth ) / halfWidth;\n\t\tthis._moveState.pitchDown = ( ( event.pageY - container.offset[ 1 ] ) - halfHeight ) / halfHeight;\n\n\t\tthis._updateRotationVector();\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this.dragToLook ) {\n\n\t\tthis._status --;\n\n\t\tthis._moveState.yawLeft = this._moveState.pitchDown = 0;\n\n\t} else {\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase 0: this._moveState.forward = 0; break;\n\t\t\tcase 2: this._moveState.back = 0; break;\n\n\t\t}\n\n\t\tthis._updateMovementVector();\n\n\t}\n\n\tthis._updateRotationVector();\n\n}\n\nfunction onPointerCancel() {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this.dragToLook ) {\n\n\t\tthis._status = 0;\n\n\t\tthis._moveState.yawLeft = this._moveState.pitchDown = 0;\n\n\t} else {\n\n\t\tthis._moveState.forward = 0;\n\t\tthis._moveState.back = 0;\n\n\t\tthis._updateMovementVector();\n\n\t}\n\n\tthis._updateRotationVector();\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tevent.preventDefault();\n\n}\n\nexport { FlyControls };\n","/**\n * @module CopyShader\n * @three_import import { CopyShader } from 'three/addons/shaders/CopyShader.js';\n */\n\n/**\n * Full-screen copy shader pass.\n *\n * @constant\n * @type {ShaderMaterial~Shader}\n */\nconst CopyShader = {\n\n\tname: 'CopyShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\n\t\t}`\n\n};\n\nexport { CopyShader };\n","import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tOrthographicCamera,\n\tMesh\n} from 'three';\n\n/**\n * Abstract base class for all post processing passes.\n *\n * This module is only relevant for post processing with {@link WebGLRenderer}.\n *\n * @abstract\n * @three_import import { Pass } from 'three/addons/postprocessing/Pass.js';\n */\nclass Pass {\n\n\t/**\n\t * Constructs a new pass.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPass = true;\n\n\t\t/**\n\t\t * If set to `true`, the pass is processed by the composer.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enabled = true;\n\n\t\t/**\n\t\t * If set to `true`, the pass indicates to swap read and write buffer after rendering.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.needsSwap = true;\n\n\t\t/**\n\t\t * If set to `true`, the pass clears its buffer before rendering\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clear = false;\n\n\t\t/**\n\t\t * If set to `true`, the result of the pass is rendered to screen. The last pass in the composers\n\t\t * pass chain gets automatically rendered to screen, no matter how this property is configured.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.renderToScreen = false;\n\n\t}\n\n\t/**\n\t * Sets the size of the pass.\n\t *\n\t * @abstract\n\t * @param {number} width - The width to set.\n\t * @param {number} height - The height to set.\n\t */\n\tsetSize( /* width, height */ ) {}\n\n\t/**\n\t * This method holds the render logic of a pass. It must be implemented in all derived classes.\n\t *\n\t * @abstract\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the pass is no longer used in your app.\n\t *\n\t * @abstract\n\t */\n\tdispose() {}\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nclass FullscreenTriangleGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\n\t}\n\n}\n\nconst _geometry = new FullscreenTriangleGeometry();\n\n\n/**\n * This module is a helper for passes which need to render a full\n * screen effect which is quite common in context of post processing.\n *\n * The intended usage is to reuse a single full screen quad for rendering\n * subsequent passes by just reassigning the `material` reference.\n *\n * This module can only be used with {@link WebGLRenderer}.\n *\n * @augments Mesh\n * @three_import import { FullScreenQuad } from 'three/addons/postprocessing/Pass.js';\n */\nclass FullScreenQuad {\n\n\t/**\n\t * Constructs a new full screen quad.\n\t *\n\t * @param {?Material} material - The material to render te full screen quad with.\n\t */\n\tconstructor( material ) {\n\n\t\tthis._mesh = new Mesh( _geometry, material );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis._mesh.geometry.dispose();\n\n\t}\n\n\t/**\n\t * Renders the full screen quad.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t */\n\trender( renderer ) {\n\n\t\trenderer.render( this._mesh, _camera );\n\n\t}\n\n\t/**\n\t * The quad's material.\n\t *\n\t * @type {?Material}\n\t */\n\tget material() {\n\n\t\treturn this._mesh.material;\n\n\t}\n\n\tset material( value ) {\n\n\t\tthis._mesh.material = value;\n\n\t}\n\n}\n\nexport { Pass, FullScreenQuad };\n","import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\n\n/**\n * This pass can be used to create a post processing effect\n * with a raw GLSL shader object. Useful for implementing custom\n * effects.\n *\n * ```js\n * const fxaaPass = new ShaderPass( FXAAShader );\n * composer.addPass( fxaaPass );\n * ```\n *\n * @augments Pass\n * @three_import import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js';\n */\nclass ShaderPass extends Pass {\n\n\t/**\n\t * Constructs a new shader pass.\n\t *\n\t * @param {Object|ShaderMaterial} [shader] - A shader object holding vertex and fragment shader as well as\n\t * defines and uniforms. It's also valid to pass a custom shader material.\n\t * @param {string} [textureID='tDiffuse'] - The name of the texture uniform that should sample\n\t * the read buffer.\n\t */\n\tconstructor( shader, textureID = 'tDiffuse' ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The name of the texture uniform that should sample the read buffer.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'tDiffuse'\n\t\t */\n\t\tthis.textureID = textureID;\n\n\t\t/**\n\t\t * The pass uniforms.\n\t\t *\n\t\t * @type {?Object}\n\t\t */\n\t\tthis.uniforms = null;\n\n\t\t/**\n\t\t * The pass material.\n\t\t *\n\t\t * @type {?ShaderMaterial}\n\t\t */\n\t\tthis.material = null;\n\n\t\tif ( shader instanceof ShaderMaterial ) {\n\n\t\t\tthis.uniforms = shader.uniforms;\n\n\t\t\tthis.material = shader;\n\n\t\t} else if ( shader ) {\n\n\t\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t\tthis.material = new ShaderMaterial( {\n\n\t\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\t\tdefines: Object.assign( {}, shader.defines ),\n\t\t\t\tuniforms: this.uniforms,\n\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// internals\n\n\t\tthis._fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\t/**\n\t * Performs the shader pass.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\tthis._fsQuad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the pass is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis._fsQuad.dispose();\n\n\t}\n\n}\n\nexport { ShaderPass };\n","import { Pass } from './Pass.js';\n\n/**\n * This pass can be used to define a mask during post processing.\n * Meaning only areas of subsequent post processing are affected\n * which lie in the masking area of this pass. Internally, the masking\n * is implemented with the stencil buffer.\n *\n * ```js\n * const maskPass = new MaskPass( scene, camera );\n * composer.addPass( maskPass );\n * ```\n *\n * @augments Pass\n * @three_import import { MaskPass } from 'three/addons/postprocessing/MaskPass.js';\n */\nclass MaskPass extends Pass {\n\n\t/**\n\t * Constructs a new mask pass.\n\t *\n\t * @param {Scene} scene - The 3D objects in this scene will define the mask.\n\t * @param {Camera} camera - The camera.\n\t */\n\tconstructor( scene, camera ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The scene that defines the mask.\n\t\t *\n\t\t * @type {Scene}\n\t\t */\n\t\tthis.scene = scene;\n\n\t\t/**\n\t\t * The camera.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * Overwritten to perform a clear operation by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.clear = true;\n\n\t\t/**\n\t\t * Overwritten to disable the swap.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsSwap = false;\n\n\t\t/**\n\t\t * Whether to inverse the mask or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.inverse = false;\n\n\t}\n\n\t/**\n\t * Performs a mask pass with the configured scene and camera.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst context = renderer.getContext();\n\t\tconst state = renderer.state;\n\n\t\t// don't update color or depth\n\n\t\tstate.buffers.color.setMask( false );\n\t\tstate.buffers.depth.setMask( false );\n\n\t\t// lock buffers\n\n\t\tstate.buffers.color.setLocked( true );\n\t\tstate.buffers.depth.setLocked( true );\n\n\t\t// set up stencil\n\n\t\tlet writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tstate.buffers.stencil.setTest( true );\n\t\tstate.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tstate.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tstate.buffers.stencil.setClear( clearValue );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( writeBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// unlock color and depth buffer and make them writable for subsequent rendering/clearing\n\n\t\tstate.buffers.color.setLocked( false );\n\t\tstate.buffers.depth.setLocked( false );\n\n\t\tstate.buffers.color.setMask( true );\n\t\tstate.buffers.depth.setMask( true );\n\n\t\t// only render where stencil is set to 1\n\n\t\tstate.buffers.stencil.setLocked( false );\n\t\tstate.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n\t\tstate.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t}\n\n}\n\n/**\n * This pass can be used to clear a mask previously defined with {@link MaskPass}.\n *\n * ```js\n * const clearPass = new ClearMaskPass();\n * composer.addPass( clearPass );\n * ```\n *\n * @augments Pass\n */\nclass ClearMaskPass extends Pass {\n\n\t/**\n\t * Constructs a new clear mask pass.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * Overwritten to disable the swap.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsSwap = false;\n\n\t}\n\n\t/**\n\t * Performs the clear of the currently defined mask.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\trenderer.state.buffers.stencil.setLocked( false );\n\t\trenderer.state.buffers.stencil.setTest( false );\n\n\t}\n\n}\n\nexport { MaskPass, ClearMaskPass };\n","import {\n\tHalfFloatType,\n\tNoBlending,\n\tTimer,\n\tVector2,\n\tWebGLRenderTarget\n} from 'three';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { ShaderPass } from './ShaderPass.js';\nimport { ClearMaskPass, MaskPass } from './MaskPass.js';\n\n/**\n * Used to implement post-processing effects in three.js.\n * The class manages a chain of post-processing passes to produce the final visual result.\n * Post-processing passes are executed in order of their addition/insertion.\n * The last pass is automatically rendered to screen.\n *\n * This module can only be used with {@link WebGLRenderer}.\n *\n * ```js\n * const composer = new EffectComposer( renderer );\n *\n * // adding some passes\n * const renderPass = new RenderPass( scene, camera );\n * composer.addPass( renderPass );\n *\n * const glitchPass = new GlitchPass();\n * composer.addPass( glitchPass );\n *\n * const outputPass = new OutputPass()\n * composer.addPass( outputPass );\n *\n * function animate() {\n *\n * \tcomposer.render(); // instead of renderer.render()\n *\n * }\n * ```\n *\n * @three_import import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';\n */\nclass EffectComposer {\n\n\t/**\n\t * Constructs a new effect composer.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} [renderTarget] - This render target and a clone will\n\t * be used as the internal read and write buffers. If not given, the composer creates\n\t * the buffers automatically.\n\t */\n\tconstructor( renderer, renderTarget ) {\n\n\t\t/**\n\t\t * The renderer.\n\t\t *\n\t\t * @type {WebGLRenderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\tthis._pixelRatio = renderer.getPixelRatio();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = renderer.getSize( new Vector2() );\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, { type: HalfFloatType } );\n\t\t\trenderTarget.texture.name = 'EffectComposer.rt1';\n\n\t\t} else {\n\n\t\t\tthis._width = renderTarget.width;\n\t\t\tthis._height = renderTarget.height;\n\n\t\t}\n\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\t\tthis.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n\t\t/**\n\t\t * A reference to the internal write buffer. Passes usually write\n\t\t * their result into this buffer.\n\t\t *\n\t\t * @type {WebGLRenderTarget}\n\t\t */\n\t\tthis.writeBuffer = this.renderTarget1;\n\n\t\t/**\n\t\t * A reference to the internal read buffer. Passes usually read\n\t\t * the previous render result from this buffer.\n\t\t *\n\t\t * @type {WebGLRenderTarget}\n\t\t */\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t\t/**\n\t\t * Whether the final pass is rendered to the screen (default framebuffer) or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.renderToScreen = true;\n\n\t\t/**\n\t\t * An array representing the (ordered) chain of post-processing passes.\n\t\t *\n\t\t * @type {Array<Pass>}\n\t\t */\n\t\tthis.passes = [];\n\n\t\t/**\n\t\t * A copy pass used for internal swap operations.\n\t\t *\n\t\t * @private\n\t\t * @type {ShaderPass}\n\t\t */\n\t\tthis.copyPass = new ShaderPass( CopyShader );\n\t\tthis.copyPass.material.blending = NoBlending;\n\n\t\t/**\n\t\t * The internal timer for managing time data.\n\t\t *\n\t\t * @private\n\t\t * @type {Timer}\n\t\t */\n\t\tthis.timer = new Timer();\n\n\t}\n\n\t/**\n\t * Swaps the internal read/write buffers.\n\t */\n\tswapBuffers() {\n\n\t\tconst tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t}\n\n\t/**\n\t * Adds the given pass to the pass chain.\n\t *\n\t * @param {Pass} pass - The pass to add.\n\t */\n\taddPass( pass ) {\n\n\t\tthis.passes.push( pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\t/**\n\t * Inserts the given pass at a given index.\n\t *\n\t * @param {Pass} pass - The pass to insert.\n\t * @param {number} index - The index into the pass chain.\n\t */\n\tinsertPass( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\t/**\n\t * Removes the given pass from the pass chain.\n\t *\n\t * @param {Pass} pass - The pass to remove.\n\t */\n\tremovePass( pass ) {\n\n\t\tconst index = this.passes.indexOf( pass );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tthis.passes.splice( index, 1 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns `true` if the pass for the given index is the last enabled pass in the pass chain.\n\t *\n\t * @param {number} passIndex - The pass index.\n\t * @return {boolean} Whether the pass for the given index is the last pass in the pass chain.\n\t */\n\tisLastEnabledPass( passIndex ) {\n\n\t\tfor ( let i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n\t\t\tif ( this.passes[ i ].enabled ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Executes all enabled post-processing passes in order to produce the final frame.\n\t *\n\t * @param {number} deltaTime - The delta time in seconds. If not given, the composer computes\n\t * its own time delta value.\n\t */\n\trender( deltaTime ) {\n\n\t\t// deltaTime value is in seconds\n\n\t\tthis.timer.update();\n\n\t\tif ( deltaTime === undefined ) {\n\n\t\t\tdeltaTime = this.timer.getDelta();\n\n\t\t}\n\n\t\tconst currentRenderTarget = this.renderer.getRenderTarget();\n\n\t\tlet maskActive = false;\n\n\t\tfor ( let i = 0, il = this.passes.length; i < il; i ++ ) {\n\n\t\t\tconst pass = this.passes[ i ];\n\n\t\t\tif ( pass.enabled === false ) continue;\n\n\t\t\tpass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tconst context = this.renderer.getContext();\n\t\t\t\t\tconst stencil = this.renderer.state.buffers.stencil;\n\n\t\t\t\t\t//context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n\t\t\t\t\t//context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( MaskPass !== undefined ) {\n\n\t\t\t\tif ( pass instanceof MaskPass ) {\n\n\t\t\t\t\tmaskActive = true;\n\n\t\t\t\t} else if ( pass instanceof ClearMaskPass ) {\n\n\t\t\t\t\tmaskActive = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\t/**\n\t * Resets the internal state of the EffectComposer.\n\t *\n\t * @param {WebGLRenderTarget} [renderTarget] - This render target has the same purpose like\n\t * the one from the constructor. If set, it is used to setup the read and write buffers.\n\t */\n\treset( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = this.renderer.getSize( new Vector2() );\n\t\t\tthis._pixelRatio = this.renderer.getPixelRatio();\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\t\t\trenderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t\t}\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t}\n\n\t/**\n\t * Resizes the internal read and write buffers as well as all passes. Similar to {@link WebGLRenderer#setSize},\n\t * this method honors the current pixel ration.\n\t *\n\t * @param {number} width - The width in logical pixels.\n\t * @param {number} height - The height in logical pixels.\n\t */\n\tsetSize( width, height ) {\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tconst effectiveWidth = this._width * this._pixelRatio;\n\t\tconst effectiveHeight = this._height * this._pixelRatio;\n\n\t\tthis.renderTarget1.setSize( effectiveWidth, effectiveHeight );\n\t\tthis.renderTarget2.setSize( effectiveWidth, effectiveHeight );\n\n\t\tfor ( let i = 0; i < this.passes.length; i ++ ) {\n\n\t\t\tthis.passes[ i ].setSize( effectiveWidth, effectiveHeight );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets device pixel ratio. This is usually used for HiDPI device to prevent blurring output.\n\t * Setting the pixel ratio will automatically resize the composer.\n\t *\n\t * @param {number} pixelRatio - The pixel ratio to set.\n\t */\n\tsetPixelRatio( pixelRatio ) {\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this._width, this._height );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the composer is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\n\t\tthis.copyPass.dispose();\n\n\t}\n\n}\n\nexport { EffectComposer };\n","import {\n\tColor\n} from 'three';\nimport { Pass } from './Pass.js';\n\n/**\n * This class represents a render pass. It takes a camera and a scene and produces\n * a beauty pass for subsequent post processing effects.\n *\n * ```js\n * const renderPass = new RenderPass( scene, camera );\n * composer.addPass( renderPass );\n * ```\n *\n * @augments Pass\n * @three_import import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';\n */\nclass RenderPass extends Pass {\n\n\t/**\n\t * Constructs a new render pass.\n\t *\n\t * @param {Scene} scene - The scene to render.\n\t * @param {Camera} camera - The camera.\n\t * @param {?Material} [overrideMaterial=null] - The override material. If set, this material is used\n\t * for all objects in the scene.\n\t * @param {?(number|Color|string)} [clearColor=null] - The clear color of the render pass.\n\t * @param {?number} [clearAlpha=null] - The clear alpha of the render pass.\n\t */\n\tconstructor( scene, camera, overrideMaterial = null, clearColor = null, clearAlpha = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The scene to render.\n\t\t *\n\t\t * @type {Scene}\n\t\t */\n\t\tthis.scene = scene;\n\n\t\t/**\n\t\t * The camera.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * The override material. If set, this material is used\n\t\t * for all objects in the scene.\n\t\t *\n\t\t * @type {?Material}\n\t\t * @default null\n\t\t */\n\t\tthis.overrideMaterial = overrideMaterial;\n\n\t\t/**\n\t\t * The clear color of the render pass.\n\t\t *\n\t\t * @type {?(number|Color|string)}\n\t\t * @default null\n\t\t */\n\t\tthis.clearColor = clearColor;\n\n\t\t/**\n\t\t * The clear alpha of the render pass.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.clearAlpha = clearAlpha;\n\n\t\t/**\n\t\t * Overwritten to perform a clear operation by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.clear = true;\n\n\t\t/**\n\t\t * If set to `true`, only the depth can be cleared when `clear` is to `false`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clearDepth = false;\n\n\t\t/**\n\t\t * Overwritten to disable the swap.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsSwap = false;\n\n\t\t/**\n\t\t * This flag indicates that this pass renders the scene itself.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isRenderPass = true;\n\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\t/**\n\t * Performs a beauty pass with the configured scene and camera.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tlet oldClearAlpha, oldOverrideMaterial;\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\toldOverrideMaterial = this.scene.overrideMaterial;\n\n\t\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\t}\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\trenderer.setClearColor( this.clearColor, renderer.getClearAlpha() );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\t\t\trenderer.setClearAlpha( this.clearAlpha );\n\n\t\t}\n\n\t\tif ( this.clearDepth == true ) {\n\n\t\t\trenderer.clearDepth();\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n\t\tif ( this.clear === true ) {\n\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// restore\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.setClearColor( this._oldClearColor );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\trenderer.setClearAlpha( oldClearAlpha );\n\n\t\t}\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\tthis.scene.overrideMaterial = oldOverrideMaterial;\n\n\t\t}\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n}\n\nexport { RenderPass };\n","function _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };","function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeFunction(t) {\n  try {\n    return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n  } catch (n) {\n    return \"function\" == typeof t;\n  }\n}\nexport { _isNativeFunction as default };","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  })();\n}\nexport { _isNativeReflectConstruct as default };","import isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _construct(t, e, r) {\n  if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n  var o = [null];\n  o.push.apply(o, e);\n  var p = new (t.bind.apply(t, o))();\n  return r && setPrototypeOf(p, r.prototype), p;\n}\nexport { _construct as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nfunction _wrapNativeSuper(t) {\n  var r = \"function\" == typeof Map ? new Map() : void 0;\n  return _wrapNativeSuper = function _wrapNativeSuper(t) {\n    if (null === t || !isNativeFunction(t)) return t;\n    if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n    if (void 0 !== r) {\n      if (r.has(t)) return r.get(t);\n      r.set(t, Wrapper);\n    }\n    function Wrapper() {\n      return construct(t, arguments, getPrototypeOf(this).constructor);\n    }\n    return Wrapper.prototype = Object.create(t.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: !1,\n        writable: !0,\n        configurable: !0\n      }\n    }), setPrototypeOf(Wrapper, t);\n  }, _wrapNativeSuper(t);\n}\nexport { _wrapNativeSuper as default };","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _wrapNativeSuper from '@babel/runtime/helpers/esm/wrapNativeSuper';\nimport _taggedTemplateLiteralLoose from '@babel/runtime/helpers/esm/taggedTemplateLiteralLoose';\n\nfunction last() {\n  var _ref;\n  return _ref = arguments.length - 1, _ref < 0 || arguments.length <= _ref ? undefined : arguments[_ref];\n}\nfunction negation(a) {\n  return -a;\n}\nfunction addition(a, b) {\n  return a + b;\n}\nfunction subtraction(a, b) {\n  return a - b;\n}\nfunction multiplication(a, b) {\n  return a * b;\n}\nfunction division(a, b) {\n  return a / b;\n}\nfunction max() {\n  return Math.max.apply(Math, arguments);\n}\nfunction min() {\n  return Math.min.apply(Math, arguments);\n}\nfunction comma() {\n  return Array.of.apply(Array, arguments);\n}\nvar defaultSymbols = {\n  symbols: {\n    '*': {\n      infix: {\n        symbol: '*',\n        f: multiplication,\n        notation: 'infix',\n        precedence: 4,\n        rightToLeft: 0,\n        argCount: 2\n      },\n      symbol: '*',\n      regSymbol: '\\\\*'\n    },\n    '/': {\n      infix: {\n        symbol: '/',\n        f: division,\n        notation: 'infix',\n        precedence: 4,\n        rightToLeft: 0,\n        argCount: 2\n      },\n      symbol: '/',\n      regSymbol: '/'\n    },\n    '+': {\n      infix: {\n        symbol: '+',\n        f: addition,\n        notation: 'infix',\n        precedence: 2,\n        rightToLeft: 0,\n        argCount: 2\n      },\n      prefix: {\n        symbol: '+',\n        f: last,\n        notation: 'prefix',\n        precedence: 3,\n        rightToLeft: 0,\n        argCount: 1\n      },\n      symbol: '+',\n      regSymbol: '\\\\+'\n    },\n    '-': {\n      infix: {\n        symbol: '-',\n        f: subtraction,\n        notation: 'infix',\n        precedence: 2,\n        rightToLeft: 0,\n        argCount: 2\n      },\n      prefix: {\n        symbol: '-',\n        f: negation,\n        notation: 'prefix',\n        precedence: 3,\n        rightToLeft: 0,\n        argCount: 1\n      },\n      symbol: '-',\n      regSymbol: '-'\n    },\n    ',': {\n      infix: {\n        symbol: ',',\n        f: comma,\n        notation: 'infix',\n        precedence: 1,\n        rightToLeft: 0,\n        argCount: 2\n      },\n      symbol: ',',\n      regSymbol: ','\n    },\n    '(': {\n      prefix: {\n        symbol: '(',\n        f: last,\n        notation: 'prefix',\n        precedence: 0,\n        rightToLeft: 0,\n        argCount: 1\n      },\n      symbol: '(',\n      regSymbol: '\\\\('\n    },\n    ')': {\n      postfix: {\n        symbol: ')',\n        f: undefined,\n        notation: 'postfix',\n        precedence: 0,\n        rightToLeft: 0,\n        argCount: 1\n      },\n      symbol: ')',\n      regSymbol: '\\\\)'\n    },\n    min: {\n      func: {\n        symbol: 'min',\n        f: min,\n        notation: 'func',\n        precedence: 0,\n        rightToLeft: 0,\n        argCount: 1\n      },\n      symbol: 'min',\n      regSymbol: 'min\\\\b'\n    },\n    max: {\n      func: {\n        symbol: 'max',\n        f: max,\n        notation: 'func',\n        precedence: 0,\n        rightToLeft: 0,\n        argCount: 1\n      },\n      symbol: 'max',\n      regSymbol: 'max\\\\b'\n    }\n  }\n};\nvar defaultSymbolMap = defaultSymbols;\n\n// based on https://github.com/styled-components/styled-components/blob/fcf6f3804c57a14dd7984dfab7bc06ee2edca044/src/utils/error.js\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n * @private\n */\nvar ERRORS = {\n  \"1\": \"Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).\\n\\n\",\n  \"2\": \"Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).\\n\\n\",\n  \"3\": \"Passed an incorrect argument to a color function, please pass a string representation of a color.\\n\\n\",\n  \"4\": \"Couldn't generate valid rgb string from %s, it returned %s.\\n\\n\",\n  \"5\": \"Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.\\n\\n\",\n  \"6\": \"Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).\\n\\n\",\n  \"7\": \"Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).\\n\\n\",\n  \"8\": \"Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.\\n\\n\",\n  \"9\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n  \"10\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n  \"11\": \"Invalid value passed as base to modularScale, expected number or em string but got \\\"%s\\\"\\n\\n\",\n  \"12\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n  \"13\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n  \"14\": \"Passed invalid pixel value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n  \"15\": \"Passed invalid base value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n  \"16\": \"You must provide a template to this method.\\n\\n\",\n  \"17\": \"You passed an unsupported selector state to this method.\\n\\n\",\n  \"18\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n  \"19\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n  \"20\": \"expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n  \"21\": \"expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n  \"22\": \"expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n  \"23\": \"fontFace expects a name of a font-family.\\n\\n\",\n  \"24\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n  \"25\": \"fontFace expects localFonts to be an array.\\n\\n\",\n  \"26\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n  \"27\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n  \"28\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n  \"29\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n  \"30\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n  \"31\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation\\n\\n\",\n  \"32\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')\\n\\n\",\n  \"33\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation\\n\\n\",\n  \"34\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n  \"35\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n  \"36\": \"Property must be a string value.\\n\\n\",\n  \"37\": \"Syntax Error at %s.\\n\\n\",\n  \"38\": \"Formula contains a function that needs parentheses at %s.\\n\\n\",\n  \"39\": \"Formula is missing closing parenthesis at %s.\\n\\n\",\n  \"40\": \"Formula has too many closing parentheses at %s.\\n\\n\",\n  \"41\": \"All values in a formula must have the same unit or be unitless.\\n\\n\",\n  \"42\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n  \"43\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n  \"44\": \"Invalid value passed as base to modularScale, expected number or em/rem string but got %s.\\n\\n\",\n  \"45\": \"Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.\\n\\n\",\n  \"46\": \"Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.\\n\\n\",\n  \"47\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n  \"48\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n  \"49\": \"Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n  \"50\": \"Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.\\n\\n\",\n  \"51\": \"Expects the first argument object to have the properties prop, fromSize, and toSize.\\n\\n\",\n  \"52\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n  \"53\": \"fontFace expects localFonts to be an array.\\n\\n\",\n  \"54\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n  \"55\": \"fontFace expects a name of a font-family.\\n\\n\",\n  \"56\": \"linearGradient requries at least 2 color-stops to properly render.\\n\\n\",\n  \"57\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n  \"58\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n  \"59\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n  \"60\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n  \"61\": \"Property must be a string value.\\n\\n\",\n  \"62\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n  \"63\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n  \"64\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n  \"65\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').\\n\\n\",\n  \"66\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n  \"67\": \"You must provide a template to this method.\\n\\n\",\n  \"68\": \"You passed an unsupported selector state to this method.\\n\\n\",\n  \"69\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got %s instead.\\n\\n\",\n  \"70\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got %s instead.\\n\\n\",\n  \"71\": \"Passed invalid pixel value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n  \"72\": \"Passed invalid base value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n  \"73\": \"Please provide a valid CSS variable.\\n\\n\",\n  \"74\": \"CSS variable not found and no default was provided.\\n\\n\",\n  \"75\": \"important requires a valid style object, got a %s instead.\\n\\n\",\n  \"76\": \"fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.\\n\\n\",\n  \"77\": \"remToPx expects a value in \\\"rem\\\" but you provided it in \\\"%s\\\".\\n\\n\",\n  \"78\": \"base must be set in \\\"px\\\" or \\\"%\\\" but you set it in \\\"%s\\\".\\n\"\n};\n\n/**\n * super basic version of sprintf\n * @private\n */\nfunction format() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  var a = args[0];\n  var b = [];\n  var c;\n  for (c = 1; c < args.length; c += 1) {\n    b.push(args[c]);\n  }\n  b.forEach(function (d) {\n    a = a.replace(/%[a-z]/, d);\n  });\n  return a;\n}\n\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n * @private\n */\nvar PolishedError = /*#__PURE__*/function (_Error) {\n  _inheritsLoose(PolishedError, _Error);\n  function PolishedError(code) {\n    var _this;\n    if (process.env.NODE_ENV === 'production') {\n      _this = _Error.call(this, \"An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#\" + code + \" for more information.\") || this;\n    } else {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n      _this = _Error.call(this, format.apply(void 0, [ERRORS[code]].concat(args))) || this;\n    }\n    return _assertThisInitialized(_this);\n  }\n  return PolishedError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nvar unitRegExp = /((?!\\w)a|na|hc|mc|dg|me[r]?|xe|ni(?![a-zA-Z])|mm|cp|tp|xp|q(?!s)|hv|xamv|nimv|wv|sm|s(?!\\D|$)|ged|darg?|nrut)/g;\n\n// Merges additional math functionality into the defaults.\nfunction mergeSymbolMaps(additionalSymbols) {\n  var symbolMap = {};\n  symbolMap.symbols = additionalSymbols ? _extends({}, defaultSymbolMap.symbols, additionalSymbols.symbols) : _extends({}, defaultSymbolMap.symbols);\n  return symbolMap;\n}\nfunction exec(operators, values) {\n  var _ref;\n  var op = operators.pop();\n  values.push(op.f.apply(op, (_ref = []).concat.apply(_ref, values.splice(-op.argCount))));\n  return op.precedence;\n}\nfunction calculate(expression, additionalSymbols) {\n  var symbolMap = mergeSymbolMaps(additionalSymbols);\n  var match;\n  var operators = [symbolMap.symbols['('].prefix];\n  var values = [];\n  var pattern = new RegExp( // Pattern for numbers\n  \"\\\\d+(?:\\\\.\\\\d+)?|\" +\n  // ...and patterns for individual operators/function names\n  Object.keys(symbolMap.symbols).map(function (key) {\n    return symbolMap.symbols[key];\n  })\n  // longer symbols should be listed first\n  // $FlowFixMe\n  .sort(function (a, b) {\n    return b.symbol.length - a.symbol.length;\n  })\n  // $FlowFixMe\n  .map(function (val) {\n    return val.regSymbol;\n  }).join('|') + \"|(\\\\S)\", 'g');\n  pattern.lastIndex = 0; // Reset regular expression object\n\n  var afterValue = false;\n  do {\n    match = pattern.exec(expression);\n    var _ref2 = match || [')', undefined],\n      token = _ref2[0],\n      bad = _ref2[1];\n    var notNumber = symbolMap.symbols[token];\n    var notNewValue = notNumber && !notNumber.prefix && !notNumber.func;\n    var notAfterValue = !notNumber || !notNumber.postfix && !notNumber.infix;\n\n    // Check for syntax errors:\n    if (bad || (afterValue ? notAfterValue : notNewValue)) {\n      throw new PolishedError(37, match ? match.index : expression.length, expression);\n    }\n    if (afterValue) {\n      // We either have an infix or postfix operator (they should be mutually exclusive)\n      var curr = notNumber.postfix || notNumber.infix;\n      do {\n        var prev = operators[operators.length - 1];\n        if ((curr.precedence - prev.precedence || prev.rightToLeft) > 0) break;\n        // Apply previous operator, since it has precedence over current one\n      } while (exec(operators, values)); // Exit loop after executing an opening parenthesis or function\n      afterValue = curr.notation === 'postfix';\n      if (curr.symbol !== ')') {\n        operators.push(curr);\n        // Postfix always has precedence over any operator that follows after it\n        if (afterValue) exec(operators, values);\n      }\n    } else if (notNumber) {\n      // prefix operator or function\n      operators.push(notNumber.prefix || notNumber.func);\n      if (notNumber.func) {\n        // Require an opening parenthesis\n        match = pattern.exec(expression);\n        if (!match || match[0] !== '(') {\n          throw new PolishedError(38, match ? match.index : expression.length, expression);\n        }\n      }\n    } else {\n      // number\n      values.push(+token);\n      afterValue = true;\n    }\n  } while (match && operators.length);\n  if (operators.length) {\n    throw new PolishedError(39, match ? match.index : expression.length, expression);\n  } else if (match) {\n    throw new PolishedError(40, match ? match.index : expression.length, expression);\n  } else {\n    return values.pop();\n  }\n}\nfunction reverseString(str) {\n  return str.split('').reverse().join('');\n}\n\n/**\n * Helper for doing math with CSS Units. Accepts a formula as a string. All values in the formula must have the same unit (or be unitless). Supports complex formulas utliziing addition, subtraction, multiplication, division, square root, powers, factorial, min, max, as well as parentheses for order of operation.\n *\n *In cases where you need to do calculations with mixed units where one unit is a [relative length unit](https://developer.mozilla.org/en-US/docs/Web/CSS/length#Relative_length_units), you will want to use [CSS Calc](https://developer.mozilla.org/en-US/docs/Web/CSS/calc).\n *\n * *warning* While we've done everything possible to ensure math safely evalutes formulas expressed as strings, you should always use extreme caution when passing `math` user provided values.\n * @example\n * // Styles as object usage\n * const styles = {\n *   fontSize: math('12rem + 8rem'),\n *   fontSize: math('(12px + 2px) * 3'),\n *   fontSize: math('3px^2 + sqrt(4)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   fontSize: ${math('12rem + 8rem')};\n *   fontSize: ${math('(12px + 2px) * 3')};\n *   fontSize: ${math('3px^2 + sqrt(4)')};\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n *   fontSize: '20rem',\n *   fontSize: '42px',\n *   fontSize: '11px',\n * }\n */\nfunction math(formula, additionalSymbols) {\n  var reversedFormula = reverseString(formula);\n  var formulaMatch = reversedFormula.match(unitRegExp);\n\n  // Check that all units are the same\n  if (formulaMatch && !formulaMatch.every(function (unit) {\n    return unit === formulaMatch[0];\n  })) {\n    throw new PolishedError(41);\n  }\n  var cleanFormula = reverseString(reversedFormula.replace(unitRegExp, ''));\n  return \"\" + calculate(cleanFormula, additionalSymbols) + (formulaMatch ? reverseString(formulaMatch[0]) : '');\n}\n\nvar cssVariableRegex = /--[\\S]*/g;\n\n/**\n * Fetches the value of a passed CSS Variable in the :root scope, or otherwise returns a defaultValue if provided.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   'background': cssVar('--background-color'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${cssVar('--background-color')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   'background': 'red'\n * }\n */\nfunction cssVar(cssVariable, defaultValue) {\n  if (!cssVariable || !cssVariable.match(cssVariableRegex)) {\n    throw new PolishedError(73);\n  }\n  var variableValue;\n\n  /* eslint-disable */\n  /* istanbul ignore next */\n  if (typeof document !== 'undefined' && document.documentElement !== null) {\n    variableValue = getComputedStyle(document.documentElement).getPropertyValue(cssVariable);\n  }\n  /* eslint-enable */\n\n  if (variableValue) {\n    return variableValue.trim();\n  } else if (defaultValue) {\n    return defaultValue;\n  }\n  throw new PolishedError(74);\n}\n\n// @private\nfunction capitalizeString(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar positionMap$1 = ['Top', 'Right', 'Bottom', 'Left'];\nfunction generateProperty(property, position) {\n  if (!property) return position.toLowerCase();\n  var splitProperty = property.split('-');\n  if (splitProperty.length > 1) {\n    splitProperty.splice(1, 0, position);\n    return splitProperty.reduce(function (acc, val) {\n      return \"\" + acc + capitalizeString(val);\n    });\n  }\n  var joinedProperty = property.replace(/([a-z])([A-Z])/g, \"$1\" + position + \"$2\");\n  return property === joinedProperty ? \"\" + property + position : joinedProperty;\n}\nfunction generateStyles(property, valuesWithDefaults) {\n  var styles = {};\n  for (var i = 0; i < valuesWithDefaults.length; i += 1) {\n    if (valuesWithDefaults[i] || valuesWithDefaults[i] === 0) {\n      styles[generateProperty(property, positionMap$1[i])] = valuesWithDefaults[i];\n    }\n  }\n  return styles;\n}\n\n/**\n * Enables shorthand for direction-based properties. It accepts a property (hyphenated or camelCased) and up to four values that map to top, right, bottom, and left, respectively. You can optionally pass an empty string to get only the directional values as properties. You can also optionally pass a null argument for a directional value to ignore it.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...directionalProperty('padding', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${directionalProperty('padding', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'paddingTop': '12px',\n *   'paddingRight': '24px',\n *   'paddingBottom': '36px',\n *   'paddingLeft': '48px'\n * }\n */\nfunction directionalProperty(property) {\n  for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    values[_key - 1] = arguments[_key];\n  }\n  //  prettier-ignore\n  var firstValue = values[0],\n    _values$ = values[1],\n    secondValue = _values$ === void 0 ? firstValue : _values$,\n    _values$2 = values[2],\n    thirdValue = _values$2 === void 0 ? firstValue : _values$2,\n    _values$3 = values[3],\n    fourthValue = _values$3 === void 0 ? secondValue : _values$3;\n  var valuesWithDefaults = [firstValue, secondValue, thirdValue, fourthValue];\n  return generateStyles(property, valuesWithDefaults);\n}\n\n/**\n * Check if a string ends with something\n * @private\n */\nfunction endsWith(string, suffix) {\n  return string.substr(-suffix.length) === suffix;\n}\n\nvar cssRegex$1 = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n\n/**\n * Returns a given CSS value minus its unit of measure.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   '--dimension': stripUnit('100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   --dimension: ${stripUnit('100px')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   '--dimension': 100\n * }\n */\nfunction stripUnit(value) {\n  if (typeof value !== 'string') return value;\n  var matchedValue = value.match(cssRegex$1);\n  return matchedValue ? parseFloat(value) : value;\n}\n\n/**\n * Factory function that creates pixel-to-x converters\n * @private\n */\nvar pxtoFactory = function pxtoFactory(to) {\n  return function (pxval, base) {\n    if (base === void 0) {\n      base = '16px';\n    }\n    var newPxval = pxval;\n    var newBase = base;\n    if (typeof pxval === 'string') {\n      if (!endsWith(pxval, 'px')) {\n        throw new PolishedError(69, to, pxval);\n      }\n      newPxval = stripUnit(pxval);\n    }\n    if (typeof base === 'string') {\n      if (!endsWith(base, 'px')) {\n        throw new PolishedError(70, to, base);\n      }\n      newBase = stripUnit(base);\n    }\n    if (typeof newPxval === 'string') {\n      throw new PolishedError(71, pxval, to);\n    }\n    if (typeof newBase === 'string') {\n      throw new PolishedError(72, base, to);\n    }\n    return \"\" + newPxval / newBase + to;\n  };\n};\nvar pixelsto = pxtoFactory;\n\n/**\n * Convert pixel value to ems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n *   'height': em('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   height: ${em('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   'height': '1em'\n * }\n */\nvar em = pixelsto('em');\nvar em$1 = em;\n\nvar cssRegex = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n\n/**\n * Returns a given CSS value and its unit as elements of an array.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   '--dimension': getValueAndUnit('100px')[0],\n *   '--unit': getValueAndUnit('100px')[1],\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   --dimension: ${getValueAndUnit('100px')[0]};\n *   --unit: ${getValueAndUnit('100px')[1]};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   '--dimension': 100,\n *   '--unit': 'px',\n * }\n */\nfunction getValueAndUnit(value) {\n  if (typeof value !== 'string') return [value, ''];\n  var matchedValue = value.match(cssRegex);\n  if (matchedValue) return [parseFloat(value), matchedValue[2]];\n  return [value, undefined];\n}\n\n/**\n * Helper for targeting rules in a style block generated by polished modules that need !important-level specificity. Can optionally specify a rule (or rules) to target specific rules.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...important(cover())\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${important(cover())}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n *   'position': 'absolute !important',\n *   'top': '0 !important',\n *   'right: '0 !important',\n *   'bottom': '0 !important',\n *   'left: '0 !important'\n * }\n */\nfunction important(styleBlock, rules) {\n  if (typeof styleBlock !== 'object' || styleBlock === null) {\n    throw new PolishedError(75, typeof styleBlock);\n  }\n  var newStyleBlock = {};\n  Object.keys(styleBlock).forEach(function (key) {\n    if (typeof styleBlock[key] === 'object' && styleBlock[key] !== null) {\n      newStyleBlock[key] = important(styleBlock[key], rules);\n    } else if (!rules || rules && (rules === key || rules.indexOf(key) >= 0)) {\n      newStyleBlock[key] = styleBlock[key] + \" !important\";\n    } else {\n      newStyleBlock[key] = styleBlock[key];\n    }\n  });\n  return newStyleBlock;\n}\n\nvar ratioNames = {\n  minorSecond: 1.067,\n  majorSecond: 1.125,\n  minorThird: 1.2,\n  majorThird: 1.25,\n  perfectFourth: 1.333,\n  augFourth: 1.414,\n  perfectFifth: 1.5,\n  minorSixth: 1.6,\n  goldenSection: 1.618,\n  majorSixth: 1.667,\n  minorSeventh: 1.778,\n  majorSeventh: 1.875,\n  octave: 2,\n  majorTenth: 2.5,\n  majorEleventh: 2.667,\n  majorTwelfth: 3,\n  doubleOctave: 4\n};\nfunction getRatio(ratioName) {\n  return ratioNames[ratioName];\n}\n\n/**\n * Establish consistent measurements and spacial relationships throughout your projects by incrementing an em or rem value up or down a defined scale. We provide a list of commonly used scales as pre-defined variables.\n * @example\n * // Styles as object usage\n * const styles = {\n *    // Increment two steps up the default scale\n *   'fontSize': modularScale(2)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *    // Increment two steps up the default scale\n *   fontSize: ${modularScale(2)}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   'fontSize': '1.77689em'\n * }\n */\nfunction modularScale(steps, base, ratio) {\n  if (base === void 0) {\n    base = '1em';\n  }\n  if (ratio === void 0) {\n    ratio = 1.333;\n  }\n  if (typeof steps !== 'number') {\n    throw new PolishedError(42);\n  }\n  if (typeof ratio === 'string' && !ratioNames[ratio]) {\n    throw new PolishedError(43);\n  }\n  var _ref = typeof base === 'string' ? getValueAndUnit(base) : [base, ''],\n    realBase = _ref[0],\n    unit = _ref[1];\n  var realRatio = typeof ratio === 'string' ? getRatio(ratio) : ratio;\n  if (typeof realBase === 'string') {\n    throw new PolishedError(44, base);\n  }\n  return \"\" + realBase * Math.pow(realRatio, steps) + (unit || '');\n}\n\n/**\n * Convert pixel value to rems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n *   'height': rem('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   height: ${rem('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   'height': '1rem'\n * }\n */\nvar rem = pixelsto('rem');\nvar rem$1 = rem;\n\nvar defaultFontSize = 16;\nfunction convertBase(base) {\n  var deconstructedValue = getValueAndUnit(base);\n  if (deconstructedValue[1] === 'px') {\n    return parseFloat(base);\n  }\n  if (deconstructedValue[1] === '%') {\n    return parseFloat(base) / 100 * defaultFontSize;\n  }\n  throw new PolishedError(78, deconstructedValue[1]);\n}\nfunction getBaseFromDoc() {\n  /* eslint-disable */\n  /* istanbul ignore next */\n  if (typeof document !== 'undefined' && document.documentElement !== null) {\n    var rootFontSize = getComputedStyle(document.documentElement).fontSize;\n    return rootFontSize ? convertBase(rootFontSize) : defaultFontSize;\n  }\n  /* eslint-enable */\n  /* istanbul ignore next */\n  return defaultFontSize;\n}\n\n/**\n * Convert rem values to px. By default, the base value is pulled from the font-size property on the root element (if it is set in % or px). It defaults to 16px if not found on the root. You can also override the base value by providing your own base in % or px.\n * @example\n * // Styles as object usage\n * const styles = {\n *   'height': remToPx('1.6rem')\n *   'height': remToPx('1.6rem', '10px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   height: ${remToPx('1.6rem')}\n *   height: ${remToPx('1.6rem', '10px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   'height': '25.6px',\n *   'height': '16px',\n * }\n */\nfunction remToPx(value, base) {\n  var deconstructedValue = getValueAndUnit(value);\n  if (deconstructedValue[1] !== 'rem' && deconstructedValue[1] !== '') {\n    throw new PolishedError(77, deconstructedValue[1]);\n  }\n  var newBase = base ? convertBase(base) : getBaseFromDoc();\n  return deconstructedValue[0] * newBase + \"px\";\n}\n\nvar functionsMap$3 = {\n  back: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)',\n  circ: 'cubic-bezier(0.600,  0.040, 0.980, 0.335)',\n  cubic: 'cubic-bezier(0.550,  0.055, 0.675, 0.190)',\n  expo: 'cubic-bezier(0.950,  0.050, 0.795, 0.035)',\n  quad: 'cubic-bezier(0.550,  0.085, 0.680, 0.530)',\n  quart: 'cubic-bezier(0.895,  0.030, 0.685, 0.220)',\n  quint: 'cubic-bezier(0.755,  0.050, 0.855, 0.060)',\n  sine: 'cubic-bezier(0.470,  0.000, 0.745, 0.715)'\n};\n\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   'transitionTimingFunction': easeIn('quad')\n * }\n *\n * // styled-components usage\n *  const div = styled.div`\n *   transitionTimingFunction: ${easeIn('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n *   'transitionTimingFunction': 'cubic-bezier(0.550,  0.085, 0.680, 0.530)',\n * }\n */\nfunction easeIn(functionName) {\n  return functionsMap$3[functionName.toLowerCase().trim()];\n}\n\nvar functionsMap$2 = {\n  back: 'cubic-bezier(0.680, -0.550, 0.265, 1.550)',\n  circ: 'cubic-bezier(0.785,  0.135, 0.150, 0.860)',\n  cubic: 'cubic-bezier(0.645,  0.045, 0.355, 1.000)',\n  expo: 'cubic-bezier(1.000,  0.000, 0.000, 1.000)',\n  quad: 'cubic-bezier(0.455,  0.030, 0.515, 0.955)',\n  quart: 'cubic-bezier(0.770,  0.000, 0.175, 1.000)',\n  quint: 'cubic-bezier(0.860,  0.000, 0.070, 1.000)',\n  sine: 'cubic-bezier(0.445,  0.050, 0.550, 0.950)'\n};\n\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   'transitionTimingFunction': easeInOut('quad')\n * }\n *\n * // styled-components usage\n *  const div = styled.div`\n *   transitionTimingFunction: ${easeInOut('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n *   'transitionTimingFunction': 'cubic-bezier(0.455,  0.030, 0.515, 0.955)',\n * }\n */\nfunction easeInOut(functionName) {\n  return functionsMap$2[functionName.toLowerCase().trim()];\n}\n\nvar functionsMap$1 = {\n  back: 'cubic-bezier(0.175,  0.885, 0.320, 1.275)',\n  cubic: 'cubic-bezier(0.215,  0.610, 0.355, 1.000)',\n  circ: 'cubic-bezier(0.075,  0.820, 0.165, 1.000)',\n  expo: 'cubic-bezier(0.190,  1.000, 0.220, 1.000)',\n  quad: 'cubic-bezier(0.250,  0.460, 0.450, 0.940)',\n  quart: 'cubic-bezier(0.165,  0.840, 0.440, 1.000)',\n  quint: 'cubic-bezier(0.230,  1.000, 0.320, 1.000)',\n  sine: 'cubic-bezier(0.390,  0.575, 0.565, 1.000)'\n};\n\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   'transitionTimingFunction': easeOut('quad')\n * }\n *\n * // styled-components usage\n *  const div = styled.div`\n *   transitionTimingFunction: ${easeOut('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n *   'transitionTimingFunction': 'cubic-bezier(0.250,  0.460, 0.450, 0.940)',\n * }\n */\nfunction easeOut(functionName) {\n  return functionsMap$1[functionName.toLowerCase().trim()];\n}\n\n/**\n * Returns a CSS calc formula for linear interpolation of a property between two values. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px').\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   fontSize: between('20px', '100px', '400px', '1000px'),\n *   fontSize: between('20px', '100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   fontSize: ${between('20px', '100px', '400px', '1000px')};\n *   fontSize: ${between('20px', '100px')}\n * `\n *\n * // CSS as JS Output\n *\n * h1: {\n *   'fontSize': 'calc(-33.33333333333334px + 13.333333333333334vw)',\n *   'fontSize': 'calc(-9.090909090909093px + 9.090909090909092vw)'\n * }\n */\nfunction between(fromSize, toSize, minScreen, maxScreen) {\n  if (minScreen === void 0) {\n    minScreen = '320px';\n  }\n  if (maxScreen === void 0) {\n    maxScreen = '1200px';\n  }\n  var _getValueAndUnit = getValueAndUnit(fromSize),\n    unitlessFromSize = _getValueAndUnit[0],\n    fromSizeUnit = _getValueAndUnit[1];\n  var _getValueAndUnit2 = getValueAndUnit(toSize),\n    unitlessToSize = _getValueAndUnit2[0],\n    toSizeUnit = _getValueAndUnit2[1];\n  var _getValueAndUnit3 = getValueAndUnit(minScreen),\n    unitlessMinScreen = _getValueAndUnit3[0],\n    minScreenUnit = _getValueAndUnit3[1];\n  var _getValueAndUnit4 = getValueAndUnit(maxScreen),\n    unitlessMaxScreen = _getValueAndUnit4[0],\n    maxScreenUnit = _getValueAndUnit4[1];\n  if (typeof unitlessMinScreen !== 'number' || typeof unitlessMaxScreen !== 'number' || !minScreenUnit || !maxScreenUnit || minScreenUnit !== maxScreenUnit) {\n    throw new PolishedError(47);\n  }\n  if (typeof unitlessFromSize !== 'number' || typeof unitlessToSize !== 'number' || fromSizeUnit !== toSizeUnit) {\n    throw new PolishedError(48);\n  }\n  if (fromSizeUnit !== minScreenUnit || toSizeUnit !== maxScreenUnit) {\n    throw new PolishedError(76);\n  }\n  var slope = (unitlessFromSize - unitlessToSize) / (unitlessMinScreen - unitlessMaxScreen);\n  var base = unitlessToSize - slope * unitlessMaxScreen;\n  return \"calc(\" + base.toFixed(2) + (fromSizeUnit || '') + \" + \" + (100 * slope).toFixed(2) + \"vw)\";\n}\n\n/**\n * CSS to contain a float (credit to CSSMojo).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *    ...clearFix(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${clearFix()}\n * `\n *\n * // CSS as JS Output\n *\n * '&::after': {\n *   'clear': 'both',\n *   'content': '\"\"',\n *   'display': 'table'\n * }\n */\nfunction clearFix(parent) {\n  var _ref;\n  if (parent === void 0) {\n    parent = '&';\n  }\n  var pseudoSelector = parent + \"::after\";\n  return _ref = {}, _ref[pseudoSelector] = {\n    clear: 'both',\n    content: '\"\"',\n    display: 'table'\n  }, _ref;\n}\n\n/**\n * CSS to fully cover an area. Can optionally be passed an offset to act as a \"padding\".\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...cover()\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${cover()}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n *   'position': 'absolute',\n *   'top': '0',\n *   'right: '0',\n *   'bottom': '0',\n *   'left: '0'\n * }\n */\nfunction cover(offset) {\n  if (offset === void 0) {\n    offset = 0;\n  }\n  return {\n    position: 'absolute',\n    top: offset,\n    right: offset,\n    bottom: offset,\n    left: offset\n  };\n}\n\n/**\n * CSS to represent truncated text with an ellipsis. You can optionally pass a max-width and number of lines before truncating.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...ellipsis('250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${ellipsis('250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n *   'display': 'inline-block',\n *   'maxWidth': '250px',\n *   'overflow': 'hidden',\n *   'textOverflow': 'ellipsis',\n *   'whiteSpace': 'nowrap',\n *   'wordWrap': 'normal'\n * }\n */\nfunction ellipsis(width, lines) {\n  if (lines === void 0) {\n    lines = 1;\n  }\n  var styles = {\n    display: 'inline-block',\n    maxWidth: width || '100%',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    wordWrap: 'normal'\n  };\n  return lines > 1 ? _extends({}, styles, {\n    WebkitBoxOrient: 'vertical',\n    WebkitLineClamp: lines,\n    display: '-webkit-box',\n    whiteSpace: 'normal'\n  }) : styles;\n}\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n/**\n * Returns a set of media queries that resizes a property (or set of properties) between a provided fromSize and toSize. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px') to constrain the interpolation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...fluidRange(\n *    {\n *        prop: 'padding',\n *        fromSize: '20px',\n *        toSize: '100px',\n *      },\n *      '400px',\n *      '1000px',\n *    )\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${fluidRange(\n *      {\n *        prop: 'padding',\n *        fromSize: '20px',\n *        toSize: '100px',\n *      },\n *      '400px',\n *      '1000px',\n *    )}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n *   \"@media (min-width: 1000px)\": Object {\n *     \"padding\": \"100px\",\n *   },\n *   \"@media (min-width: 400px)\": Object {\n *     \"padding\": \"calc(-33.33333333333334px + 13.333333333333334vw)\",\n *   },\n *   \"padding\": \"20px\",\n * }\n */\nfunction fluidRange(cssProp, minScreen, maxScreen) {\n  if (minScreen === void 0) {\n    minScreen = '320px';\n  }\n  if (maxScreen === void 0) {\n    maxScreen = '1200px';\n  }\n  if (!Array.isArray(cssProp) && typeof cssProp !== 'object' || cssProp === null) {\n    throw new PolishedError(49);\n  }\n  if (Array.isArray(cssProp)) {\n    var mediaQueries = {};\n    var fallbacks = {};\n    for (var _iterator = _createForOfIteratorHelperLoose(cssProp), _step; !(_step = _iterator()).done;) {\n      var _extends2, _extends3;\n      var obj = _step.value;\n      if (!obj.prop || !obj.fromSize || !obj.toSize) {\n        throw new PolishedError(50);\n      }\n      fallbacks[obj.prop] = obj.fromSize;\n      mediaQueries[\"@media (min-width: \" + minScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + minScreen + \")\"], (_extends2 = {}, _extends2[obj.prop] = between(obj.fromSize, obj.toSize, minScreen, maxScreen), _extends2));\n      mediaQueries[\"@media (min-width: \" + maxScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + maxScreen + \")\"], (_extends3 = {}, _extends3[obj.prop] = obj.toSize, _extends3));\n    }\n    return _extends({}, fallbacks, mediaQueries);\n  } else {\n    var _ref, _ref2, _ref3;\n    if (!cssProp.prop || !cssProp.fromSize || !cssProp.toSize) {\n      throw new PolishedError(51);\n    }\n    return _ref3 = {}, _ref3[cssProp.prop] = cssProp.fromSize, _ref3[\"@media (min-width: \" + minScreen + \")\"] = (_ref = {}, _ref[cssProp.prop] = between(cssProp.fromSize, cssProp.toSize, minScreen, maxScreen), _ref), _ref3[\"@media (min-width: \" + maxScreen + \")\"] = (_ref2 = {}, _ref2[cssProp.prop] = cssProp.toSize, _ref2), _ref3;\n  }\n}\n\nvar dataURIRegex = /^\\s*data:([a-z]+\\/[a-z-]+(;[a-z-]+=[a-z-]+)?)?(;charset=[a-z0-9-]+)?(;base64)?,[a-z0-9!$&',()*+,;=\\-._~:@/?%\\s]*\\s*$/i;\nvar formatHintMap = {\n  woff: 'woff',\n  woff2: 'woff2',\n  ttf: 'truetype',\n  otf: 'opentype',\n  eot: 'embedded-opentype',\n  svg: 'svg',\n  svgz: 'svg'\n};\nfunction generateFormatHint(format, formatHint) {\n  if (!formatHint) return '';\n  return \" format(\\\"\" + formatHintMap[format] + \"\\\")\";\n}\nfunction isDataURI(fontFilePath) {\n  return !!fontFilePath.replace(/\\s+/g, ' ').match(dataURIRegex);\n}\nfunction generateFileReferences(fontFilePath, fileFormats, formatHint) {\n  if (isDataURI(fontFilePath)) {\n    return \"url(\\\"\" + fontFilePath + \"\\\")\" + generateFormatHint(fileFormats[0], formatHint);\n  }\n  var fileFontReferences = fileFormats.map(function (format) {\n    return \"url(\\\"\" + fontFilePath + \".\" + format + \"\\\")\" + generateFormatHint(format, formatHint);\n  });\n  return fileFontReferences.join(', ');\n}\nfunction generateLocalReferences(localFonts) {\n  var localFontReferences = localFonts.map(function (font) {\n    return \"local(\\\"\" + font + \"\\\")\";\n  });\n  return localFontReferences.join(', ');\n}\nfunction generateSources(fontFilePath, localFonts, fileFormats, formatHint) {\n  var fontReferences = [];\n  if (localFonts) fontReferences.push(generateLocalReferences(localFonts));\n  if (fontFilePath) {\n    fontReferences.push(generateFileReferences(fontFilePath, fileFormats, formatHint));\n  }\n  return fontReferences.join(', ');\n}\n\n/**\n * CSS for a @font-face declaration. Defaults to check for local copies of the font on the user's machine. You can disable this by passing `null` to localFonts.\n *\n * @example\n * // Styles as object basic usage\n * const styles = {\n *    ...fontFace({\n *      'fontFamily': 'Sans-Pro',\n *      'fontFilePath': 'path/to/file'\n *    })\n * }\n *\n * // styled-components basic usage\n * const GlobalStyle = createGlobalStyle`${\n *   fontFace({\n *     'fontFamily': 'Sans-Pro',\n *     'fontFilePath': 'path/to/file'\n *   }\n * )}`\n *\n * // CSS as JS Output\n *\n * '@font-face': {\n *   'fontFamily': 'Sans-Pro',\n *   'src': 'url(\"path/to/file.eot\"), url(\"path/to/file.woff2\"), url(\"path/to/file.woff\"), url(\"path/to/file.ttf\"), url(\"path/to/file.svg\")',\n * }\n */\n\nfunction fontFace(_ref) {\n  var fontFamily = _ref.fontFamily,\n    fontFilePath = _ref.fontFilePath,\n    fontStretch = _ref.fontStretch,\n    fontStyle = _ref.fontStyle,\n    fontVariant = _ref.fontVariant,\n    fontWeight = _ref.fontWeight,\n    _ref$fileFormats = _ref.fileFormats,\n    fileFormats = _ref$fileFormats === void 0 ? ['eot', 'woff2', 'woff', 'ttf', 'svg'] : _ref$fileFormats,\n    _ref$formatHint = _ref.formatHint,\n    formatHint = _ref$formatHint === void 0 ? false : _ref$formatHint,\n    _ref$localFonts = _ref.localFonts,\n    localFonts = _ref$localFonts === void 0 ? [fontFamily] : _ref$localFonts,\n    unicodeRange = _ref.unicodeRange,\n    fontDisplay = _ref.fontDisplay,\n    fontVariationSettings = _ref.fontVariationSettings,\n    fontFeatureSettings = _ref.fontFeatureSettings;\n  // Error Handling\n  if (!fontFamily) throw new PolishedError(55);\n  if (!fontFilePath && !localFonts) {\n    throw new PolishedError(52);\n  }\n  if (localFonts && !Array.isArray(localFonts)) {\n    throw new PolishedError(53);\n  }\n  if (!Array.isArray(fileFormats)) {\n    throw new PolishedError(54);\n  }\n  var fontFaceDeclaration = {\n    '@font-face': {\n      fontFamily: fontFamily,\n      src: generateSources(fontFilePath, localFonts, fileFormats, formatHint),\n      unicodeRange: unicodeRange,\n      fontStretch: fontStretch,\n      fontStyle: fontStyle,\n      fontVariant: fontVariant,\n      fontWeight: fontWeight,\n      fontDisplay: fontDisplay,\n      fontVariationSettings: fontVariationSettings,\n      fontFeatureSettings: fontFeatureSettings\n    }\n  };\n\n  // Removes undefined fields for cleaner css object.\n  return JSON.parse(JSON.stringify(fontFaceDeclaration));\n}\n\n/**\n * CSS to hide text to show a background image in a SEO-friendly way.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   'backgroundImage': 'url(logo.png)',\n *   ...hideText(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   backgroundImage: url(logo.png);\n *   ${hideText()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n *   'backgroundImage': 'url(logo.png)',\n *   'textIndent': '101%',\n *   'overflow': 'hidden',\n *   'whiteSpace': 'nowrap',\n * }\n */\nfunction hideText() {\n  return {\n    textIndent: '101%',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap'\n  };\n}\n\n/**\n * CSS to hide content visually but remain accessible to screen readers.\n * from [HTML5 Boilerplate](https://github.com/h5bp/html5-boilerplate/blob/9a176f57af1cfe8ec70300da4621fb9b07e5fa31/src/css/main.css#L121)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...hideVisually(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${hideVisually()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n *   'border': '0',\n *   'clip': 'rect(0 0 0 0)',\n *   'height': '1px',\n *   'margin': '-1px',\n *   'overflow': 'hidden',\n *   'padding': '0',\n *   'position': 'absolute',\n *   'whiteSpace': 'nowrap',\n *   'width': '1px',\n * }\n */\nfunction hideVisually() {\n  return {\n    border: '0',\n    clip: 'rect(0 0 0 0)',\n    height: '1px',\n    margin: '-1px',\n    overflow: 'hidden',\n    padding: '0',\n    position: 'absolute',\n    whiteSpace: 'nowrap',\n    width: '1px'\n  };\n}\n\n/**\n * Generates a media query to target HiDPI devices.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *  [hiDPI(1.5)]: {\n *    width: 200px;\n *  }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${hiDPI(1.5)} {\n *     width: 200px;\n *   }\n * `\n *\n * // CSS as JS Output\n *\n * '@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n *  only screen and (min--moz-device-pixel-ratio: 1.5),\n *  only screen and (-o-min-device-pixel-ratio: 1.5/1),\n *  only screen and (min-resolution: 144dpi),\n *  only screen and (min-resolution: 1.5dppx)': {\n *   'width': '200px',\n * }\n */\nfunction hiDPI(ratio) {\n  if (ratio === void 0) {\n    ratio = 1.3;\n  }\n  return \"\\n    @media only screen and (-webkit-min-device-pixel-ratio: \" + ratio + \"),\\n    only screen and (min--moz-device-pixel-ratio: \" + ratio + \"),\\n    only screen and (-o-min-device-pixel-ratio: \" + ratio + \"/1),\\n    only screen and (min-resolution: \" + Math.round(ratio * 96) + \"dpi),\\n    only screen and (min-resolution: \" + ratio + \"dppx)\\n  \";\n}\n\nfunction constructGradientValue(literals) {\n  var template = '';\n  for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    substitutions[_key - 1] = arguments[_key];\n  }\n  for (var i = 0; i < literals.length; i += 1) {\n    template += literals[i];\n    if (i === substitutions.length - 1 && substitutions[i]) {\n      var definedValues = substitutions.filter(function (substitute) {\n        return !!substitute;\n      });\n      // Adds leading coma if properties preceed color-stops\n      if (definedValues.length > 1) {\n        template = template.slice(0, -1);\n        template += \", \" + substitutions[i];\n        // No trailing space if color-stops is the only param provided\n      } else if (definedValues.length === 1) {\n        template += \"\" + substitutions[i];\n      }\n    } else if (substitutions[i]) {\n      template += substitutions[i] + \" \";\n    }\n  }\n  return template.trim();\n}\n\nvar _templateObject$1;\n/**\n * CSS for declaring a linear gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...linearGradient({\n        colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n        toDirection: 'to top right',\n        fallback: '#FFF',\n      })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${linearGradient({\n        colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n        toDirection: 'to top right',\n        fallback: '#FFF',\n      })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n *   'backgroundColor': '#FFF',\n *   'backgroundImage': 'linear-gradient(to top right, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction linearGradient(_ref) {\n  var colorStops = _ref.colorStops,\n    fallback = _ref.fallback,\n    _ref$toDirection = _ref.toDirection,\n    toDirection = _ref$toDirection === void 0 ? '' : _ref$toDirection;\n  if (!colorStops || colorStops.length < 2) {\n    throw new PolishedError(56);\n  }\n  return {\n    backgroundColor: fallback || colorStops[0].replace(/,\\s+/g, ',').split(' ')[0].replace(/,(?=\\S)/g, ', '),\n    backgroundImage: constructGradientValue(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose([\"linear-gradient(\", \"\", \")\"])), toDirection, colorStops.join(', ').replace(/,(?=\\S)/g, ', '))\n  };\n}\n\n/**\n * CSS to normalize abnormalities across browsers (normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *    ...normalize(),\n * }\n *\n * // styled-components usage\n * const GlobalStyle = createGlobalStyle`${normalize()}`\n *\n * // CSS as JS Output\n *\n * html {\n *   lineHeight: 1.15,\n *   textSizeAdjust: 100%,\n * } ...\n */\nfunction normalize() {\n  var _ref;\n  return [(_ref = {\n    html: {\n      lineHeight: '1.15',\n      textSizeAdjust: '100%'\n    },\n    body: {\n      margin: '0'\n    },\n    main: {\n      display: 'block'\n    },\n    h1: {\n      fontSize: '2em',\n      margin: '0.67em 0'\n    },\n    hr: {\n      boxSizing: 'content-box',\n      height: '0',\n      overflow: 'visible'\n    },\n    pre: {\n      fontFamily: 'monospace, monospace',\n      fontSize: '1em'\n    },\n    a: {\n      backgroundColor: 'transparent'\n    },\n    'abbr[title]': {\n      borderBottom: 'none',\n      textDecoration: 'underline'\n    }\n  }, _ref[\"b,\\n    strong\"] = {\n    fontWeight: 'bolder'\n  }, _ref[\"code,\\n    kbd,\\n    samp\"] = {\n    fontFamily: 'monospace, monospace',\n    fontSize: '1em'\n  }, _ref.small = {\n    fontSize: '80%'\n  }, _ref[\"sub,\\n    sup\"] = {\n    fontSize: '75%',\n    lineHeight: '0',\n    position: 'relative',\n    verticalAlign: 'baseline'\n  }, _ref.sub = {\n    bottom: '-0.25em'\n  }, _ref.sup = {\n    top: '-0.5em'\n  }, _ref.img = {\n    borderStyle: 'none'\n  }, _ref[\"button,\\n    input,\\n    optgroup,\\n    select,\\n    textarea\"] = {\n    fontFamily: 'inherit',\n    fontSize: '100%',\n    lineHeight: '1.15',\n    margin: '0'\n  }, _ref[\"button,\\n    input\"] = {\n    overflow: 'visible'\n  }, _ref[\"button,\\n    select\"] = {\n    textTransform: 'none'\n  }, _ref[\"button,\\n    html [type=\\\"button\\\"],\\n    [type=\\\"reset\\\"],\\n    [type=\\\"submit\\\"]\"] = {\n    WebkitAppearance: 'button'\n  }, _ref[\"button::-moz-focus-inner,\\n    [type=\\\"button\\\"]::-moz-focus-inner,\\n    [type=\\\"reset\\\"]::-moz-focus-inner,\\n    [type=\\\"submit\\\"]::-moz-focus-inner\"] = {\n    borderStyle: 'none',\n    padding: '0'\n  }, _ref[\"button:-moz-focusring,\\n    [type=\\\"button\\\"]:-moz-focusring,\\n    [type=\\\"reset\\\"]:-moz-focusring,\\n    [type=\\\"submit\\\"]:-moz-focusring\"] = {\n    outline: '1px dotted ButtonText'\n  }, _ref.fieldset = {\n    padding: '0.35em 0.625em 0.75em'\n  }, _ref.legend = {\n    boxSizing: 'border-box',\n    color: 'inherit',\n    display: 'table',\n    maxWidth: '100%',\n    padding: '0',\n    whiteSpace: 'normal'\n  }, _ref.progress = {\n    verticalAlign: 'baseline'\n  }, _ref.textarea = {\n    overflow: 'auto'\n  }, _ref[\"[type=\\\"checkbox\\\"],\\n    [type=\\\"radio\\\"]\"] = {\n    boxSizing: 'border-box',\n    padding: '0'\n  }, _ref[\"[type=\\\"number\\\"]::-webkit-inner-spin-button,\\n    [type=\\\"number\\\"]::-webkit-outer-spin-button\"] = {\n    height: 'auto'\n  }, _ref['[type=\"search\"]'] = {\n    WebkitAppearance: 'textfield',\n    outlineOffset: '-2px'\n  }, _ref['[type=\"search\"]::-webkit-search-decoration'] = {\n    WebkitAppearance: 'none'\n  }, _ref['::-webkit-file-upload-button'] = {\n    WebkitAppearance: 'button',\n    font: 'inherit'\n  }, _ref.details = {\n    display: 'block'\n  }, _ref.summary = {\n    display: 'list-item'\n  }, _ref.template = {\n    display: 'none'\n  }, _ref['[hidden]'] = {\n    display: 'none'\n  }, _ref), {\n    'abbr[title]': {\n      textDecoration: 'underline dotted'\n    }\n  }];\n}\n\nvar _templateObject;\n/**\n * CSS for declaring a radial gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...radialGradient({\n *     colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n *     extent: 'farthest-corner at 45px 45px',\n *     position: 'center',\n *     shape: 'ellipse',\n *   })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${radialGradient({\n *     colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n *     extent: 'farthest-corner at 45px 45px',\n *     position: 'center',\n *     shape: 'ellipse',\n *   })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n *   'backgroundColor': '#00FFFF',\n *   'backgroundImage': 'radial-gradient(center ellipse farthest-corner at 45px 45px, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction radialGradient(_ref) {\n  var colorStops = _ref.colorStops,\n    _ref$extent = _ref.extent,\n    extent = _ref$extent === void 0 ? '' : _ref$extent,\n    fallback = _ref.fallback,\n    _ref$position = _ref.position,\n    position = _ref$position === void 0 ? '' : _ref$position,\n    _ref$shape = _ref.shape,\n    shape = _ref$shape === void 0 ? '' : _ref$shape;\n  if (!colorStops || colorStops.length < 2) {\n    throw new PolishedError(57);\n  }\n  return {\n    backgroundColor: fallback || colorStops[0].split(' ')[0],\n    backgroundImage: constructGradientValue(_templateObject || (_templateObject = _taggedTemplateLiteralLoose([\"radial-gradient(\", \"\", \"\", \"\", \")\"])), position, shape, extent, colorStops.join(', '))\n  };\n}\n\n/**\n * A helper to generate a retina background image and non-retina\n * background image. The retina background image will output to a HiDPI media query. The mixin uses\n * a _2x.png filename suffix by default.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *  ...retinaImage('my-img')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${retinaImage('my-img')}\n * `\n *\n * // CSS as JS Output\n * div {\n *   backgroundImage: 'url(my-img.png)',\n *   '@media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n *    only screen and (min--moz-device-pixel-ratio: 1.3),\n *    only screen and (-o-min-device-pixel-ratio: 1.3/1),\n *    only screen and (min-resolution: 144dpi),\n *    only screen and (min-resolution: 1.5dppx)': {\n *     backgroundImage: 'url(my-img_2x.png)',\n *   }\n * }\n */\nfunction retinaImage(filename, backgroundSize, extension, retinaFilename, retinaSuffix) {\n  var _ref;\n  if (extension === void 0) {\n    extension = 'png';\n  }\n  if (retinaSuffix === void 0) {\n    retinaSuffix = '_2x';\n  }\n  if (!filename) {\n    throw new PolishedError(58);\n  }\n  // Replace the dot at the beginning of the passed extension if one exists\n  var ext = extension.replace(/^\\./, '');\n  var rFilename = retinaFilename ? retinaFilename + \".\" + ext : \"\" + filename + retinaSuffix + \".\" + ext;\n  return _ref = {\n    backgroundImage: \"url(\" + filename + \".\" + ext + \")\"\n  }, _ref[hiDPI()] = _extends({\n    backgroundImage: \"url(\" + rFilename + \")\"\n  }, backgroundSize ? {\n    backgroundSize: backgroundSize\n  } : {}), _ref;\n}\n\n/* eslint-disable key-spacing */\nvar functionsMap = {\n  easeInBack: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)',\n  easeInCirc: 'cubic-bezier(0.600,  0.040, 0.980, 0.335)',\n  easeInCubic: 'cubic-bezier(0.550,  0.055, 0.675, 0.190)',\n  easeInExpo: 'cubic-bezier(0.950,  0.050, 0.795, 0.035)',\n  easeInQuad: 'cubic-bezier(0.550,  0.085, 0.680, 0.530)',\n  easeInQuart: 'cubic-bezier(0.895,  0.030, 0.685, 0.220)',\n  easeInQuint: 'cubic-bezier(0.755,  0.050, 0.855, 0.060)',\n  easeInSine: 'cubic-bezier(0.470,  0.000, 0.745, 0.715)',\n  easeOutBack: 'cubic-bezier(0.175,  0.885, 0.320, 1.275)',\n  easeOutCubic: 'cubic-bezier(0.215,  0.610, 0.355, 1.000)',\n  easeOutCirc: 'cubic-bezier(0.075,  0.820, 0.165, 1.000)',\n  easeOutExpo: 'cubic-bezier(0.190,  1.000, 0.220, 1.000)',\n  easeOutQuad: 'cubic-bezier(0.250,  0.460, 0.450, 0.940)',\n  easeOutQuart: 'cubic-bezier(0.165,  0.840, 0.440, 1.000)',\n  easeOutQuint: 'cubic-bezier(0.230,  1.000, 0.320, 1.000)',\n  easeOutSine: 'cubic-bezier(0.390,  0.575, 0.565, 1.000)',\n  easeInOutBack: 'cubic-bezier(0.680, -0.550, 0.265, 1.550)',\n  easeInOutCirc: 'cubic-bezier(0.785,  0.135, 0.150, 0.860)',\n  easeInOutCubic: 'cubic-bezier(0.645,  0.045, 0.355, 1.000)',\n  easeInOutExpo: 'cubic-bezier(1.000,  0.000, 0.000, 1.000)',\n  easeInOutQuad: 'cubic-bezier(0.455,  0.030, 0.515, 0.955)',\n  easeInOutQuart: 'cubic-bezier(0.770,  0.000, 0.175, 1.000)',\n  easeInOutQuint: 'cubic-bezier(0.860,  0.000, 0.070, 1.000)',\n  easeInOutSine: 'cubic-bezier(0.445,  0.050, 0.550, 0.950)'\n};\n/* eslint-enable key-spacing */\n\nfunction getTimingFunction(functionName) {\n  return functionsMap[functionName];\n}\n\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @deprecated - This will be deprecated in v5 in favor of `easeIn`, `easeOut`, `easeInOut`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   'transitionTimingFunction': timingFunctions('easeInQuad')\n * }\n *\n * // styled-components usage\n *  const div = styled.div`\n *   transitionTimingFunction: ${timingFunctions('easeInQuad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n *   'transitionTimingFunction': 'cubic-bezier(0.550,  0.085, 0.680, 0.530)',\n * }\n */\n\nfunction timingFunctions(timingFunction) {\n  return getTimingFunction(timingFunction);\n}\n\nvar getBorderWidth = function getBorderWidth(pointingDirection, height, width) {\n  var fullWidth = \"\" + width[0] + (width[1] || '');\n  var halfWidth = \"\" + width[0] / 2 + (width[1] || '');\n  var fullHeight = \"\" + height[0] + (height[1] || '');\n  var halfHeight = \"\" + height[0] / 2 + (height[1] || '');\n  switch (pointingDirection) {\n    case 'top':\n      return \"0 \" + halfWidth + \" \" + fullHeight + \" \" + halfWidth;\n    case 'topLeft':\n      return fullWidth + \" \" + fullHeight + \" 0 0\";\n    case 'left':\n      return halfHeight + \" \" + fullWidth + \" \" + halfHeight + \" 0\";\n    case 'bottomLeft':\n      return fullWidth + \" 0 0 \" + fullHeight;\n    case 'bottom':\n      return fullHeight + \" \" + halfWidth + \" 0 \" + halfWidth;\n    case 'bottomRight':\n      return \"0 0 \" + fullWidth + \" \" + fullHeight;\n    case 'right':\n      return halfHeight + \" 0 \" + halfHeight + \" \" + fullWidth;\n    case 'topRight':\n    default:\n      return \"0 \" + fullWidth + \" \" + fullHeight + \" 0\";\n  }\n};\nvar getBorderColor = function getBorderColor(pointingDirection, foregroundColor) {\n  switch (pointingDirection) {\n    case 'top':\n    case 'bottomRight':\n      return {\n        borderBottomColor: foregroundColor\n      };\n    case 'right':\n    case 'bottomLeft':\n      return {\n        borderLeftColor: foregroundColor\n      };\n    case 'bottom':\n    case 'topLeft':\n      return {\n        borderTopColor: foregroundColor\n      };\n    case 'left':\n    case 'topRight':\n      return {\n        borderRightColor: foregroundColor\n      };\n    default:\n      throw new PolishedError(59);\n  }\n};\n\n/**\n * CSS to represent triangle with any pointing direction with an optional background color.\n *\n * @example\n * // Styles as object usage\n *\n * const styles = {\n *   ...triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })\n * }\n *\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })}\n *\n *\n * // CSS as JS Output\n *\n * div: {\n *  'borderColor': 'transparent transparent transparent red',\n *  'borderStyle': 'solid',\n *  'borderWidth': '50px 0 50px 100px',\n *  'height': '0',\n *  'width': '0',\n * }\n */\nfunction triangle(_ref) {\n  var pointingDirection = _ref.pointingDirection,\n    height = _ref.height,\n    width = _ref.width,\n    foregroundColor = _ref.foregroundColor,\n    _ref$backgroundColor = _ref.backgroundColor,\n    backgroundColor = _ref$backgroundColor === void 0 ? 'transparent' : _ref$backgroundColor;\n  var widthAndUnit = getValueAndUnit(width);\n  var heightAndUnit = getValueAndUnit(height);\n  if (isNaN(heightAndUnit[0]) || isNaN(widthAndUnit[0])) {\n    throw new PolishedError(60);\n  }\n  return _extends({\n    width: '0',\n    height: '0',\n    borderColor: backgroundColor\n  }, getBorderColor(pointingDirection, foregroundColor), {\n    borderStyle: 'solid',\n    borderWidth: getBorderWidth(pointingDirection, heightAndUnit, widthAndUnit)\n  });\n}\n\n/**\n * Provides an easy way to change the `wordWrap` property.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...wordWrap('break-word')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${wordWrap('break-word')}\n * `\n *\n * // CSS as JS Output\n *\n * const styles = {\n *   overflowWrap: 'break-word',\n *   wordWrap: 'break-word',\n *   wordBreak: 'break-all',\n * }\n */\nfunction wordWrap(wrap) {\n  if (wrap === void 0) {\n    wrap = 'break-word';\n  }\n  var wordBreak = wrap === 'break-word' ? 'break-all' : wrap;\n  return {\n    overflowWrap: wrap,\n    wordWrap: wrap,\n    wordBreak: wordBreak\n  };\n}\n\nfunction colorToInt(color) {\n  return Math.round(color * 255);\n}\nfunction convertToInt(red, green, blue) {\n  return colorToInt(red) + \",\" + colorToInt(green) + \",\" + colorToInt(blue);\n}\nfunction hslToRgb(hue, saturation, lightness, convert) {\n  if (convert === void 0) {\n    convert = convertToInt;\n  }\n  if (saturation === 0) {\n    // achromatic\n    return convert(lightness, lightness, lightness);\n  }\n\n  // formulae from https://en.wikipedia.org/wiki/HSL_and_HSV\n  var huePrime = (hue % 360 + 360) % 360 / 60;\n  var chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n  var secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n  var red = 0;\n  var green = 0;\n  var blue = 0;\n  if (huePrime >= 0 && huePrime < 1) {\n    red = chroma;\n    green = secondComponent;\n  } else if (huePrime >= 1 && huePrime < 2) {\n    red = secondComponent;\n    green = chroma;\n  } else if (huePrime >= 2 && huePrime < 3) {\n    green = chroma;\n    blue = secondComponent;\n  } else if (huePrime >= 3 && huePrime < 4) {\n    green = secondComponent;\n    blue = chroma;\n  } else if (huePrime >= 4 && huePrime < 5) {\n    red = secondComponent;\n    blue = chroma;\n  } else if (huePrime >= 5 && huePrime < 6) {\n    red = chroma;\n    blue = secondComponent;\n  }\n  var lightnessModification = lightness - chroma / 2;\n  var finalRed = red + lightnessModification;\n  var finalGreen = green + lightnessModification;\n  var finalBlue = blue + lightnessModification;\n  return convert(finalRed, finalGreen, finalBlue);\n}\n\nvar namedColorMap = {\n  aliceblue: 'f0f8ff',\n  antiquewhite: 'faebd7',\n  aqua: '00ffff',\n  aquamarine: '7fffd4',\n  azure: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '000',\n  blanchedalmond: 'ffebcd',\n  blue: '0000ff',\n  blueviolet: '8a2be2',\n  brown: 'a52a2a',\n  burlywood: 'deb887',\n  cadetblue: '5f9ea0',\n  chartreuse: '7fff00',\n  chocolate: 'd2691e',\n  coral: 'ff7f50',\n  cornflowerblue: '6495ed',\n  cornsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: '00ffff',\n  darkblue: '00008b',\n  darkcyan: '008b8b',\n  darkgoldenrod: 'b8860b',\n  darkgray: 'a9a9a9',\n  darkgreen: '006400',\n  darkgrey: 'a9a9a9',\n  darkkhaki: 'bdb76b',\n  darkmagenta: '8b008b',\n  darkolivegreen: '556b2f',\n  darkorange: 'ff8c00',\n  darkorchid: '9932cc',\n  darkred: '8b0000',\n  darksalmon: 'e9967a',\n  darkseagreen: '8fbc8f',\n  darkslateblue: '483d8b',\n  darkslategray: '2f4f4f',\n  darkslategrey: '2f4f4f',\n  darkturquoise: '00ced1',\n  darkviolet: '9400d3',\n  deeppink: 'ff1493',\n  deepskyblue: '00bfff',\n  dimgray: '696969',\n  dimgrey: '696969',\n  dodgerblue: '1e90ff',\n  firebrick: 'b22222',\n  floralwhite: 'fffaf0',\n  forestgreen: '228b22',\n  fuchsia: 'ff00ff',\n  gainsboro: 'dcdcdc',\n  ghostwhite: 'f8f8ff',\n  gold: 'ffd700',\n  goldenrod: 'daa520',\n  gray: '808080',\n  green: '008000',\n  greenyellow: 'adff2f',\n  grey: '808080',\n  honeydew: 'f0fff0',\n  hotpink: 'ff69b4',\n  indianred: 'cd5c5c',\n  indigo: '4b0082',\n  ivory: 'fffff0',\n  khaki: 'f0e68c',\n  lavender: 'e6e6fa',\n  lavenderblush: 'fff0f5',\n  lawngreen: '7cfc00',\n  lemonchiffon: 'fffacd',\n  lightblue: 'add8e6',\n  lightcoral: 'f08080',\n  lightcyan: 'e0ffff',\n  lightgoldenrodyellow: 'fafad2',\n  lightgray: 'd3d3d3',\n  lightgreen: '90ee90',\n  lightgrey: 'd3d3d3',\n  lightpink: 'ffb6c1',\n  lightsalmon: 'ffa07a',\n  lightseagreen: '20b2aa',\n  lightskyblue: '87cefa',\n  lightslategray: '789',\n  lightslategrey: '789',\n  lightsteelblue: 'b0c4de',\n  lightyellow: 'ffffe0',\n  lime: '0f0',\n  limegreen: '32cd32',\n  linen: 'faf0e6',\n  magenta: 'f0f',\n  maroon: '800000',\n  mediumaquamarine: '66cdaa',\n  mediumblue: '0000cd',\n  mediumorchid: 'ba55d3',\n  mediumpurple: '9370db',\n  mediumseagreen: '3cb371',\n  mediumslateblue: '7b68ee',\n  mediumspringgreen: '00fa9a',\n  mediumturquoise: '48d1cc',\n  mediumvioletred: 'c71585',\n  midnightblue: '191970',\n  mintcream: 'f5fffa',\n  mistyrose: 'ffe4e1',\n  moccasin: 'ffe4b5',\n  navajowhite: 'ffdead',\n  navy: '000080',\n  oldlace: 'fdf5e6',\n  olive: '808000',\n  olivedrab: '6b8e23',\n  orange: 'ffa500',\n  orangered: 'ff4500',\n  orchid: 'da70d6',\n  palegoldenrod: 'eee8aa',\n  palegreen: '98fb98',\n  paleturquoise: 'afeeee',\n  palevioletred: 'db7093',\n  papayawhip: 'ffefd5',\n  peachpuff: 'ffdab9',\n  peru: 'cd853f',\n  pink: 'ffc0cb',\n  plum: 'dda0dd',\n  powderblue: 'b0e0e6',\n  purple: '800080',\n  rebeccapurple: '639',\n  red: 'f00',\n  rosybrown: 'bc8f8f',\n  royalblue: '4169e1',\n  saddlebrown: '8b4513',\n  salmon: 'fa8072',\n  sandybrown: 'f4a460',\n  seagreen: '2e8b57',\n  seashell: 'fff5ee',\n  sienna: 'a0522d',\n  silver: 'c0c0c0',\n  skyblue: '87ceeb',\n  slateblue: '6a5acd',\n  slategray: '708090',\n  slategrey: '708090',\n  snow: 'fffafa',\n  springgreen: '00ff7f',\n  steelblue: '4682b4',\n  tan: 'd2b48c',\n  teal: '008080',\n  thistle: 'd8bfd8',\n  tomato: 'ff6347',\n  turquoise: '40e0d0',\n  violet: 'ee82ee',\n  wheat: 'f5deb3',\n  white: 'fff',\n  whitesmoke: 'f5f5f5',\n  yellow: 'ff0',\n  yellowgreen: '9acd32'\n};\n\n/**\n * Checks if a string is a CSS named color and returns its equivalent hex value, otherwise returns the original color.\n * @private\n */\nfunction nameToHex(color) {\n  if (typeof color !== 'string') return color;\n  var normalizedColorName = color.toLowerCase();\n  return namedColorMap[normalizedColorName] ? \"#\" + namedColorMap[normalizedColorName] : color;\n}\n\nvar hexRegex = /^#[a-fA-F0-9]{6}$/;\nvar hexRgbaRegex = /^#[a-fA-F0-9]{8}$/;\nvar reducedHexRegex = /^#[a-fA-F0-9]{3}$/;\nvar reducedRgbaHexRegex = /^#[a-fA-F0-9]{4}$/;\nvar rgbRegex = /^rgb\\(\\s*(\\d{1,3})\\s*(?:,)?\\s*(\\d{1,3})\\s*(?:,)?\\s*(\\d{1,3})\\s*\\)$/i;\nvar rgbaRegex = /^rgb(?:a)?\\(\\s*(\\d{1,3})\\s*(?:,)?\\s*(\\d{1,3})\\s*(?:,)?\\s*(\\d{1,3})\\s*(?:,|\\/)\\s*([-+]?\\d*[.]?\\d+[%]?)\\s*\\)$/i;\nvar hslRegex = /^hsl\\(\\s*(\\d{0,3}[.]?[0-9]+(?:deg)?)\\s*(?:,)?\\s*(\\d{1,3}[.]?[0-9]?)%\\s*(?:,)?\\s*(\\d{1,3}[.]?[0-9]?)%\\s*\\)$/i;\nvar hslaRegex = /^hsl(?:a)?\\(\\s*(\\d{0,3}[.]?[0-9]+(?:deg)?)\\s*(?:,)?\\s*(\\d{1,3}[.]?[0-9]?)%\\s*(?:,)?\\s*(\\d{1,3}[.]?[0-9]?)%\\s*(?:,|\\/)\\s*([-+]?\\d*[.]?\\d+[%]?)\\s*\\)$/i;\n\n/**\n * Returns an RgbColor or RgbaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a RgbColor or RgbaColor object back to a string.\n *\n * @example\n * // Assigns `{ red: 255, green: 0, blue: 0 }` to color1\n * const color1 = parseToRgb('rgb(255, 0, 0)');\n * // Assigns `{ red: 92, green: 102, blue: 112, alpha: 0.75 }` to color2\n * const color2 = parseToRgb('hsla(210, 10%, 40%, 0.75)');\n */\nfunction parseToRgb(color) {\n  if (typeof color !== 'string') {\n    throw new PolishedError(3);\n  }\n  var normalizedColor = nameToHex(color);\n  if (normalizedColor.match(hexRegex)) {\n    return {\n      red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n      green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n      blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16)\n    };\n  }\n  if (normalizedColor.match(hexRgbaRegex)) {\n    var alpha = parseFloat((parseInt(\"\" + normalizedColor[7] + normalizedColor[8], 16) / 255).toFixed(2));\n    return {\n      red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n      green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n      blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16),\n      alpha: alpha\n    };\n  }\n  if (normalizedColor.match(reducedHexRegex)) {\n    return {\n      red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n      green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n      blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16)\n    };\n  }\n  if (normalizedColor.match(reducedRgbaHexRegex)) {\n    var _alpha = parseFloat((parseInt(\"\" + normalizedColor[4] + normalizedColor[4], 16) / 255).toFixed(2));\n    return {\n      red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n      green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n      blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16),\n      alpha: _alpha\n    };\n  }\n  var rgbMatched = rgbRegex.exec(normalizedColor);\n  if (rgbMatched) {\n    return {\n      red: parseInt(\"\" + rgbMatched[1], 10),\n      green: parseInt(\"\" + rgbMatched[2], 10),\n      blue: parseInt(\"\" + rgbMatched[3], 10)\n    };\n  }\n  var rgbaMatched = rgbaRegex.exec(normalizedColor.substring(0, 50));\n  if (rgbaMatched) {\n    return {\n      red: parseInt(\"\" + rgbaMatched[1], 10),\n      green: parseInt(\"\" + rgbaMatched[2], 10),\n      blue: parseInt(\"\" + rgbaMatched[3], 10),\n      alpha: parseFloat(\"\" + rgbaMatched[4]) > 1 ? parseFloat(\"\" + rgbaMatched[4]) / 100 : parseFloat(\"\" + rgbaMatched[4])\n    };\n  }\n  var hslMatched = hslRegex.exec(normalizedColor);\n  if (hslMatched) {\n    var hue = parseInt(\"\" + hslMatched[1], 10);\n    var saturation = parseInt(\"\" + hslMatched[2], 10) / 100;\n    var lightness = parseInt(\"\" + hslMatched[3], 10) / 100;\n    var rgbColorString = \"rgb(\" + hslToRgb(hue, saturation, lightness) + \")\";\n    var hslRgbMatched = rgbRegex.exec(rgbColorString);\n    if (!hslRgbMatched) {\n      throw new PolishedError(4, normalizedColor, rgbColorString);\n    }\n    return {\n      red: parseInt(\"\" + hslRgbMatched[1], 10),\n      green: parseInt(\"\" + hslRgbMatched[2], 10),\n      blue: parseInt(\"\" + hslRgbMatched[3], 10)\n    };\n  }\n  var hslaMatched = hslaRegex.exec(normalizedColor.substring(0, 50));\n  if (hslaMatched) {\n    var _hue = parseInt(\"\" + hslaMatched[1], 10);\n    var _saturation = parseInt(\"\" + hslaMatched[2], 10) / 100;\n    var _lightness = parseInt(\"\" + hslaMatched[3], 10) / 100;\n    var _rgbColorString = \"rgb(\" + hslToRgb(_hue, _saturation, _lightness) + \")\";\n    var _hslRgbMatched = rgbRegex.exec(_rgbColorString);\n    if (!_hslRgbMatched) {\n      throw new PolishedError(4, normalizedColor, _rgbColorString);\n    }\n    return {\n      red: parseInt(\"\" + _hslRgbMatched[1], 10),\n      green: parseInt(\"\" + _hslRgbMatched[2], 10),\n      blue: parseInt(\"\" + _hslRgbMatched[3], 10),\n      alpha: parseFloat(\"\" + hslaMatched[4]) > 1 ? parseFloat(\"\" + hslaMatched[4]) / 100 : parseFloat(\"\" + hslaMatched[4])\n    };\n  }\n  throw new PolishedError(5);\n}\n\nfunction rgbToHsl(color) {\n  // make sure rgb are contained in a set of [0, 255]\n  var red = color.red / 255;\n  var green = color.green / 255;\n  var blue = color.blue / 255;\n  var max = Math.max(red, green, blue);\n  var min = Math.min(red, green, blue);\n  var lightness = (max + min) / 2;\n  if (max === min) {\n    // achromatic\n    if (color.alpha !== undefined) {\n      return {\n        hue: 0,\n        saturation: 0,\n        lightness: lightness,\n        alpha: color.alpha\n      };\n    } else {\n      return {\n        hue: 0,\n        saturation: 0,\n        lightness: lightness\n      };\n    }\n  }\n  var hue;\n  var delta = max - min;\n  var saturation = lightness > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n  switch (max) {\n    case red:\n      hue = (green - blue) / delta + (green < blue ? 6 : 0);\n      break;\n    case green:\n      hue = (blue - red) / delta + 2;\n      break;\n    default:\n      // blue case\n      hue = (red - green) / delta + 4;\n      break;\n  }\n  hue *= 60;\n  if (color.alpha !== undefined) {\n    return {\n      hue: hue,\n      saturation: saturation,\n      lightness: lightness,\n      alpha: color.alpha\n    };\n  }\n  return {\n    hue: hue,\n    saturation: saturation,\n    lightness: lightness\n  };\n}\n\n/**\n * Returns an HslColor or HslaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a HslColor or HslaColor object back to a string.\n *\n * @example\n * // Assigns `{ hue: 0, saturation: 1, lightness: 0.5 }` to color1\n * const color1 = parseToHsl('rgb(255, 0, 0)');\n * // Assigns `{ hue: 128, saturation: 1, lightness: 0.5, alpha: 0.75 }` to color2\n * const color2 = parseToHsl('hsla(128, 100%, 50%, 0.75)');\n */\nfunction parseToHsl(color) {\n  // Note: At a later stage we can optimize this function as right now a hsl\n  // color would be parsed converted to rgb values and converted back to hsl.\n  return rgbToHsl(parseToRgb(color));\n}\n\n/**\n * Reduces hex values if possible e.g. #ff8866 to #f86\n * @private\n */\nvar reduceHexValue = function reduceHexValue(value) {\n  if (value.length === 7 && value[1] === value[2] && value[3] === value[4] && value[5] === value[6]) {\n    return \"#\" + value[1] + value[3] + value[5];\n  }\n  return value;\n};\nvar reduceHexValue$1 = reduceHexValue;\n\nfunction numberToHex(value) {\n  var hex = value.toString(16);\n  return hex.length === 1 ? \"0\" + hex : hex;\n}\n\nfunction colorToHex(color) {\n  return numberToHex(Math.round(color * 255));\n}\nfunction convertToHex(red, green, blue) {\n  return reduceHexValue$1(\"#\" + colorToHex(red) + colorToHex(green) + colorToHex(blue));\n}\nfunction hslToHex(hue, saturation, lightness) {\n  return hslToRgb(hue, saturation, lightness, convertToHex);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: hsl(359, 0.75, 0.4),\n *   background: hsl({ hue: 360, saturation: 0.75, lightness: 0.4 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${hsl(359, 0.75, 0.4)};\n *   background: ${hsl({ hue: 360, saturation: 0.75, lightness: 0.4 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#b3191c\";\n *   background: \"#b3191c\";\n * }\n */\nfunction hsl(value, saturation, lightness) {\n  if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number') {\n    return hslToHex(value, saturation, lightness);\n  } else if (typeof value === 'object' && saturation === undefined && lightness === undefined) {\n    return hslToHex(value.hue, value.saturation, value.lightness);\n  }\n  throw new PolishedError(1);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: hsla(359, 0.75, 0.4, 0.7),\n *   background: hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 }),\n *   background: hsla(359, 0.75, 0.4, 1),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${hsla(359, 0.75, 0.4, 0.7)};\n *   background: ${hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 })};\n *   background: ${hsla(359, 0.75, 0.4, 1)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"rgba(179,25,28,0.7)\";\n *   background: \"rgba(179,25,28,0.7)\";\n *   background: \"#b3191c\";\n * }\n */\nfunction hsla(value, saturation, lightness, alpha) {\n  if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number' && typeof alpha === 'number') {\n    return alpha >= 1 ? hslToHex(value, saturation, lightness) : \"rgba(\" + hslToRgb(value, saturation, lightness) + \",\" + alpha + \")\";\n  } else if (typeof value === 'object' && saturation === undefined && lightness === undefined && alpha === undefined) {\n    return value.alpha >= 1 ? hslToHex(value.hue, value.saturation, value.lightness) : \"rgba(\" + hslToRgb(value.hue, value.saturation, value.lightness) + \",\" + value.alpha + \")\";\n  }\n  throw new PolishedError(2);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: rgb(255, 205, 100),\n *   background: rgb({ red: 255, green: 205, blue: 100 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${rgb(255, 205, 100)};\n *   background: ${rgb({ red: 255, green: 205, blue: 100 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#ffcd64\";\n *   background: \"#ffcd64\";\n * }\n */\nfunction rgb(value, green, blue) {\n  if (typeof value === 'number' && typeof green === 'number' && typeof blue === 'number') {\n    return reduceHexValue$1(\"#\" + numberToHex(value) + numberToHex(green) + numberToHex(blue));\n  } else if (typeof value === 'object' && green === undefined && blue === undefined) {\n    return reduceHexValue$1(\"#\" + numberToHex(value.red) + numberToHex(value.green) + numberToHex(value.blue));\n  }\n  throw new PolishedError(6);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * Can also be used to fade a color by passing a hex value or named CSS color along with an alpha value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: rgba(255, 205, 100, 0.7),\n *   background: rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 }),\n *   background: rgba(255, 205, 100, 1),\n *   background: rgba('#ffffff', 0.4),\n *   background: rgba('black', 0.7),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${rgba(255, 205, 100, 0.7)};\n *   background: ${rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 })};\n *   background: ${rgba(255, 205, 100, 1)};\n *   background: ${rgba('#ffffff', 0.4)};\n *   background: ${rgba('black', 0.7)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"rgba(255,205,100,0.7)\";\n *   background: \"rgba(255,205,100,0.7)\";\n *   background: \"#ffcd64\";\n *   background: \"rgba(255,255,255,0.4)\";\n *   background: \"rgba(0,0,0,0.7)\";\n * }\n */\nfunction rgba(firstValue, secondValue, thirdValue, fourthValue) {\n  if (typeof firstValue === 'string' && typeof secondValue === 'number') {\n    var rgbValue = parseToRgb(firstValue);\n    return \"rgba(\" + rgbValue.red + \",\" + rgbValue.green + \",\" + rgbValue.blue + \",\" + secondValue + \")\";\n  } else if (typeof firstValue === 'number' && typeof secondValue === 'number' && typeof thirdValue === 'number' && typeof fourthValue === 'number') {\n    return fourthValue >= 1 ? rgb(firstValue, secondValue, thirdValue) : \"rgba(\" + firstValue + \",\" + secondValue + \",\" + thirdValue + \",\" + fourthValue + \")\";\n  } else if (typeof firstValue === 'object' && secondValue === undefined && thirdValue === undefined && fourthValue === undefined) {\n    return firstValue.alpha >= 1 ? rgb(firstValue.red, firstValue.green, firstValue.blue) : \"rgba(\" + firstValue.red + \",\" + firstValue.green + \",\" + firstValue.blue + \",\" + firstValue.alpha + \")\";\n  }\n  throw new PolishedError(7);\n}\n\nvar isRgb = function isRgb(color) {\n  return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\nvar isRgba = function isRgba(color) {\n  return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && typeof color.alpha === 'number';\n};\nvar isHsl = function isHsl(color) {\n  return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\nvar isHsla = function isHsla(color) {\n  return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && typeof color.alpha === 'number';\n};\n\n/**\n * Converts a RgbColor, RgbaColor, HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb`, `rgba`, `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: toColorString({ red: 255, green: 205, blue: 100 }),\n *   background: toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n *   background: toColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n *   background: toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${toColorString({ red: 255, green: 205, blue: 100 })};\n *   background: ${toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n *   background: ${toColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n *   background: ${toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#ffcd64\";\n *   background: \"rgba(255,205,100,0.72)\";\n *   background: \"#00f\";\n *   background: \"rgba(179,25,25,0.72)\";\n * }\n */\n\nfunction toColorString(color) {\n  if (typeof color !== 'object') throw new PolishedError(8);\n  if (isRgba(color)) return rgba(color);\n  if (isRgb(color)) return rgb(color);\n  if (isHsla(color)) return hsla(color);\n  if (isHsl(color)) return hsl(color);\n  throw new PolishedError(8);\n}\n\n// Type definitions taken from https://github.com/gcanti/flow-static-land/blob/master/src/Fun.js\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-redeclare\nfunction curried(f, length, acc) {\n  return function fn() {\n    // eslint-disable-next-line prefer-rest-params\n    var combined = acc.concat(Array.prototype.slice.call(arguments));\n    return combined.length >= length ? f.apply(this, combined) : curried(f, length, combined);\n  };\n}\n\n// eslint-disable-next-line no-redeclare\nfunction curry(f) {\n  // eslint-disable-line no-redeclare\n  return curried(f, f.length, []);\n}\n\n/**\n * Changes the hue of the color. Hue is a number between 0 to 360. The first\n * argument for adjustHue is the amount of degrees the color is rotated around\n * the color wheel, always producing a positive hue value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: adjustHue(180, '#448'),\n *   background: adjustHue('180', 'rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${adjustHue(180, '#448')};\n *   background: ${adjustHue('180', 'rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#888844\";\n *   background: \"rgba(136,136,68,0.7)\";\n * }\n */\nfunction adjustHue(degree, color) {\n  if (color === 'transparent') return color;\n  var hslColor = parseToHsl(color);\n  return toColorString(_extends({}, hslColor, {\n    hue: hslColor.hue + parseFloat(degree)\n  }));\n}\n\n// prettier-ignore\nvar curriedAdjustHue = curry /* ::<number | string, string, string> */(adjustHue);\nvar curriedAdjustHue$1 = curriedAdjustHue;\n\n/**\n * Returns the complement of the provided color. This is identical to adjustHue(180, <color>).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: complement('#448'),\n *   background: complement('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${complement('#448')};\n *   background: ${complement('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#884\";\n *   background: \"rgba(153,153,153,0.7)\";\n * }\n */\nfunction complement(color) {\n  if (color === 'transparent') return color;\n  var hslColor = parseToHsl(color);\n  return toColorString(_extends({}, hslColor, {\n    hue: (hslColor.hue + 180) % 360\n  }));\n}\n\nfunction guard(lowerBoundary, upperBoundary, value) {\n  return Math.max(lowerBoundary, Math.min(upperBoundary, value));\n}\n\n/**\n * Returns a string value for the darkened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: darken(0.2, '#FFCD64'),\n *   background: darken('0.2', 'rgba(255,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${darken(0.2, '#FFCD64')};\n *   background: ${darken('0.2', 'rgba(255,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#ffbd31\";\n *   background: \"rgba(255,189,49,0.7)\";\n * }\n */\nfunction darken(amount, color) {\n  if (color === 'transparent') return color;\n  var hslColor = parseToHsl(color);\n  return toColorString(_extends({}, hslColor, {\n    lightness: guard(0, 1, hslColor.lightness - parseFloat(amount))\n  }));\n}\n\n// prettier-ignore\nvar curriedDarken = curry /* ::<number | string, string, string> */(darken);\nvar curriedDarken$1 = curriedDarken;\n\n/**\n * Decreases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the desaturate function is the amount by how much the color\n * intensity should be decreased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: desaturate(0.2, '#CCCD64'),\n *   background: desaturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${desaturate(0.2, '#CCCD64')};\n *   background: ${desaturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#b8b979\";\n *   background: \"rgba(184,185,121,0.7)\";\n * }\n */\nfunction desaturate(amount, color) {\n  if (color === 'transparent') return color;\n  var hslColor = parseToHsl(color);\n  return toColorString(_extends({}, hslColor, {\n    saturation: guard(0, 1, hslColor.saturation - parseFloat(amount))\n  }));\n}\n\n// prettier-ignore\nvar curriedDesaturate = curry /* ::<number | string, string, string> */(desaturate);\nvar curriedDesaturate$1 = curriedDesaturate;\n\n/**\n * Returns a number (float) representing the luminance of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff',\n *   background: getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n *                             'rgba(58, 133, 255, 1)' :\n *                             'rgba(255, 57, 149, 1)',\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff'};\n *   background: ${getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n *                             'rgba(58, 133, 255, 1)' :\n *                             'rgba(255, 57, 149, 1)'};\n *\n * // CSS in JS Output\n *\n * div {\n *   background: \"#CCCD64\";\n *   background: \"rgba(58, 133, 255, 1)\";\n * }\n */\nfunction getLuminance(color) {\n  if (color === 'transparent') return 0;\n  var rgbColor = parseToRgb(color);\n  var _Object$keys$map = Object.keys(rgbColor).map(function (key) {\n      var channel = rgbColor[key] / 255;\n      return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n    }),\n    r = _Object$keys$map[0],\n    g = _Object$keys$map[1],\n    b = _Object$keys$map[2];\n  return parseFloat((0.2126 * r + 0.7152 * g + 0.0722 * b).toFixed(3));\n}\n\n/**\n * Returns the contrast ratio between two colors based on\n * [W3's recommended equation for calculating contrast](http://www.w3.org/TR/WCAG20/#contrast-ratiodef).\n *\n * @example\n * const contrastRatio = getContrast('#444', '#fff');\n */\nfunction getContrast(color1, color2) {\n  var luminance1 = getLuminance(color1);\n  var luminance2 = getLuminance(color2);\n  return parseFloat((luminance1 > luminance2 ? (luminance1 + 0.05) / (luminance2 + 0.05) : (luminance2 + 0.05) / (luminance1 + 0.05)).toFixed(2));\n}\n\n/**\n * Converts the color to a grayscale, by reducing its saturation to 0.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: grayscale('#CCCD64'),\n *   background: grayscale('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${grayscale('#CCCD64')};\n *   background: ${grayscale('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#999\";\n *   background: \"rgba(153,153,153,0.7)\";\n * }\n */\nfunction grayscale(color) {\n  if (color === 'transparent') return color;\n  return toColorString(_extends({}, parseToHsl(color), {\n    saturation: 0\n  }));\n}\n\n/**\n * Converts a HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n *   background: hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n *   background: ${hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#00f\";\n *   background: \"rgba(179,25,25,0.72)\";\n * }\n */\nfunction hslToColorString(color) {\n  if (typeof color === 'object' && typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number') {\n    if (color.alpha && typeof color.alpha === 'number') {\n      return hsla({\n        hue: color.hue,\n        saturation: color.saturation,\n        lightness: color.lightness,\n        alpha: color.alpha\n      });\n    }\n    return hsl({\n      hue: color.hue,\n      saturation: color.saturation,\n      lightness: color.lightness\n    });\n  }\n  throw new PolishedError(45);\n}\n\n/**\n * Inverts the red, green and blue values of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: invert('#CCCD64'),\n *   background: invert('rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${invert('#CCCD64')};\n *   background: ${invert('rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#33329b\";\n *   background: \"rgba(154,155,50,0.7)\";\n * }\n */\nfunction invert(color) {\n  if (color === 'transparent') return color;\n  // parse color string to rgb\n  var value = parseToRgb(color);\n  return toColorString(_extends({}, value, {\n    red: 255 - value.red,\n    green: 255 - value.green,\n    blue: 255 - value.blue\n  }));\n}\n\n/**\n * Returns a string value for the lightened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: lighten(0.2, '#CCCD64'),\n *   background: lighten('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${lighten(0.2, '#FFCD64')};\n *   background: ${lighten('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#e5e6b1\";\n *   background: \"rgba(229,230,177,0.7)\";\n * }\n */\nfunction lighten(amount, color) {\n  if (color === 'transparent') return color;\n  var hslColor = parseToHsl(color);\n  return toColorString(_extends({}, hslColor, {\n    lightness: guard(0, 1, hslColor.lightness + parseFloat(amount))\n  }));\n}\n\n// prettier-ignore\nvar curriedLighten = curry /* ::<number | string, string, string> */(lighten);\nvar curriedLighten$1 = curriedLighten;\n\n/**\n * Determines which contrast guidelines have been met for two colors.\n * Based on the [contrast calculations recommended by W3](https://www.w3.org/WAI/WCAG21/Understanding/contrast-enhanced.html).\n *\n * @example\n * const scores = meetsContrastGuidelines('#444', '#fff');\n */\nfunction meetsContrastGuidelines(color1, color2) {\n  var contrastRatio = getContrast(color1, color2);\n  return {\n    AA: contrastRatio >= 4.5,\n    AALarge: contrastRatio >= 3,\n    AAA: contrastRatio >= 7,\n    AAALarge: contrastRatio >= 4.5\n  };\n}\n\n/**\n * Mixes the two provided colors together by calculating the average of each of the RGB components weighted to the first color by the provided weight.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: mix(0.5, '#f00', '#00f')\n *   background: mix(0.25, '#f00', '#00f')\n *   background: mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${mix(0.5, '#f00', '#00f')};\n *   background: ${mix(0.25, '#f00', '#00f')};\n *   background: ${mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#7f007f\";\n *   background: \"#3f00bf\";\n *   background: \"rgba(63, 0, 191, 0.75)\";\n * }\n */\nfunction mix(weight, color, otherColor) {\n  if (color === 'transparent') return otherColor;\n  if (otherColor === 'transparent') return color;\n  if (weight === 0) return otherColor;\n  var parsedColor1 = parseToRgb(color);\n  var color1 = _extends({}, parsedColor1, {\n    alpha: typeof parsedColor1.alpha === 'number' ? parsedColor1.alpha : 1\n  });\n  var parsedColor2 = parseToRgb(otherColor);\n  var color2 = _extends({}, parsedColor2, {\n    alpha: typeof parsedColor2.alpha === 'number' ? parsedColor2.alpha : 1\n  });\n\n  // The formula is copied from the original Sass implementation:\n  // http://sass-lang.com/documentation/Sass/Script/Functions.html#mix-instance_method\n  var alphaDelta = color1.alpha - color2.alpha;\n  var x = parseFloat(weight) * 2 - 1;\n  var y = x * alphaDelta === -1 ? x : x + alphaDelta;\n  var z = 1 + x * alphaDelta;\n  var weight1 = (y / z + 1) / 2.0;\n  var weight2 = 1 - weight1;\n  var mixedColor = {\n    red: Math.floor(color1.red * weight1 + color2.red * weight2),\n    green: Math.floor(color1.green * weight1 + color2.green * weight2),\n    blue: Math.floor(color1.blue * weight1 + color2.blue * weight2),\n    alpha: color1.alpha * parseFloat(weight) + color2.alpha * (1 - parseFloat(weight))\n  };\n  return rgba(mixedColor);\n}\n\n// prettier-ignore\nvar curriedMix = curry /* ::<number | string, string, string, string> */(mix);\nvar mix$1 = curriedMix;\n\n/**\n * Increases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: opacify(0.1, 'rgba(255, 255, 255, 0.9)');\n *   background: opacify(0.2, 'hsla(0, 0%, 100%, 0.5)'),\n *   background: opacify('0.5', 'rgba(255, 0, 0, 0.2)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${opacify(0.1, 'rgba(255, 255, 255, 0.9)')};\n *   background: ${opacify(0.2, 'hsla(0, 0%, 100%, 0.5)')},\n *   background: ${opacify('0.5', 'rgba(255, 0, 0, 0.2)')},\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#fff\";\n *   background: \"rgba(255,255,255,0.7)\";\n *   background: \"rgba(255,0,0,0.7)\";\n * }\n */\nfunction opacify(amount, color) {\n  if (color === 'transparent') return color;\n  var parsedColor = parseToRgb(color);\n  var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n  var colorWithAlpha = _extends({}, parsedColor, {\n    alpha: guard(0, 1, (alpha * 100 + parseFloat(amount) * 100) / 100)\n  });\n  return rgba(colorWithAlpha);\n}\n\n// prettier-ignore\nvar curriedOpacify = curry /* ::<number | string, string, string> */(opacify);\nvar curriedOpacify$1 = curriedOpacify;\n\nvar defaultReturnIfLightColor = '#000';\nvar defaultReturnIfDarkColor = '#fff';\n\n/**\n * Returns black or white (or optional passed colors) for best\n * contrast depending on the luminosity of the given color.\n * When passing custom return colors, strict mode ensures that the\n * return color always meets or exceeds WCAG level AA or greater. If this test\n * fails, the default return color (black or white) is returned in place of the\n * custom return color. You can optionally turn off strict mode.\n *\n * Follows [W3C specs for readability](https://www.w3.org/TR/WCAG20-TECHS/G18.html).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   color: readableColor('#000'),\n *   color: readableColor('black', '#001', '#ff8'),\n *   color: readableColor('white', '#001', '#ff8'),\n *   color: readableColor('red', '#333', '#ddd', true)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   color: ${readableColor('#000')};\n *   color: ${readableColor('black', '#001', '#ff8')};\n *   color: ${readableColor('white', '#001', '#ff8')};\n *   color: ${readableColor('red', '#333', '#ddd', true)};\n * `\n *\n * // CSS in JS Output\n * element {\n *   color: \"#fff\";\n *   color: \"#ff8\";\n *   color: \"#001\";\n *   color: \"#000\";\n * }\n */\nfunction readableColor(color, returnIfLightColor, returnIfDarkColor, strict) {\n  if (returnIfLightColor === void 0) {\n    returnIfLightColor = defaultReturnIfLightColor;\n  }\n  if (returnIfDarkColor === void 0) {\n    returnIfDarkColor = defaultReturnIfDarkColor;\n  }\n  if (strict === void 0) {\n    strict = true;\n  }\n  var isColorLight = getLuminance(color) > 0.179;\n  var preferredReturnColor = isColorLight ? returnIfLightColor : returnIfDarkColor;\n  if (!strict || getContrast(color, preferredReturnColor) >= 4.5) {\n    return preferredReturnColor;\n  }\n  return isColorLight ? defaultReturnIfLightColor : defaultReturnIfDarkColor;\n}\n\n/**\n * Converts a RgbColor or RgbaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb` or `rgba`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: rgbToColorString({ red: 255, green: 205, blue: 100 }),\n *   background: rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${rgbToColorString({ red: 255, green: 205, blue: 100 })};\n *   background: ${rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#ffcd64\";\n *   background: \"rgba(255,205,100,0.72)\";\n * }\n */\nfunction rgbToColorString(color) {\n  if (typeof color === 'object' && typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number') {\n    if (typeof color.alpha === 'number') {\n      return rgba({\n        red: color.red,\n        green: color.green,\n        blue: color.blue,\n        alpha: color.alpha\n      });\n    }\n    return rgb({\n      red: color.red,\n      green: color.green,\n      blue: color.blue\n    });\n  }\n  throw new PolishedError(46);\n}\n\n/**\n * Increases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the saturate function is the amount by how much the color\n * intensity should be increased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: saturate(0.2, '#CCCD64'),\n *   background: saturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${saturate(0.2, '#FFCD64')};\n *   background: ${saturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#e0e250\";\n *   background: \"rgba(224,226,80,0.7)\";\n * }\n */\nfunction saturate(amount, color) {\n  if (color === 'transparent') return color;\n  var hslColor = parseToHsl(color);\n  return toColorString(_extends({}, hslColor, {\n    saturation: guard(0, 1, hslColor.saturation + parseFloat(amount))\n  }));\n}\n\n// prettier-ignore\nvar curriedSaturate = curry /* ::<number | string, string, string> */(saturate);\nvar curriedSaturate$1 = curriedSaturate;\n\n/**\n * Sets the hue of a color to the provided value. The hue range can be\n * from 0 and 359.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: setHue(42, '#CCCD64'),\n *   background: setHue('244', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${setHue(42, '#CCCD64')};\n *   background: ${setHue('244', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#cdae64\";\n *   background: \"rgba(107,100,205,0.7)\";\n * }\n */\nfunction setHue(hue, color) {\n  if (color === 'transparent') return color;\n  return toColorString(_extends({}, parseToHsl(color), {\n    hue: parseFloat(hue)\n  }));\n}\n\n// prettier-ignore\nvar curriedSetHue = curry /* ::<number | string, string, string> */(setHue);\nvar curriedSetHue$1 = curriedSetHue;\n\n/**\n * Sets the lightness of a color to the provided value. The lightness range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: setLightness(0.2, '#CCCD64'),\n *   background: setLightness('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${setLightness(0.2, '#CCCD64')};\n *   background: ${setLightness('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#4d4d19\";\n *   background: \"rgba(223,224,159,0.7)\";\n * }\n */\nfunction setLightness(lightness, color) {\n  if (color === 'transparent') return color;\n  return toColorString(_extends({}, parseToHsl(color), {\n    lightness: parseFloat(lightness)\n  }));\n}\n\n// prettier-ignore\nvar curriedSetLightness = curry /* ::<number | string, string, string> */(setLightness);\nvar curriedSetLightness$1 = curriedSetLightness;\n\n/**\n * Sets the saturation of a color to the provided value. The saturation range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: setSaturation(0.2, '#CCCD64'),\n *   background: setSaturation('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${setSaturation(0.2, '#CCCD64')};\n *   background: ${setSaturation('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n *   background: \"#adad84\";\n *   background: \"rgba(228,229,76,0.7)\";\n * }\n */\nfunction setSaturation(saturation, color) {\n  if (color === 'transparent') return color;\n  return toColorString(_extends({}, parseToHsl(color), {\n    saturation: parseFloat(saturation)\n  }));\n}\n\n// prettier-ignore\nvar curriedSetSaturation = curry /* ::<number | string, string, string> */(setSaturation);\nvar curriedSetSaturation$1 = curriedSetSaturation;\n\n/**\n * Shades a color by mixing it with black. `shade` can produce\n * hue shifts, where as `darken` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: shade(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${shade(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#00003f\";\n * }\n */\n\nfunction shade(percentage, color) {\n  if (color === 'transparent') return color;\n  return mix$1(parseFloat(percentage), 'rgb(0, 0, 0)', color);\n}\n\n// prettier-ignore\nvar curriedShade = curry /* ::<number | string, string, string> */(shade);\nvar curriedShade$1 = curriedShade;\n\n/**\n * Tints a color by mixing it with white. `tint` can produce\n * hue shifts, where as `lighten` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: tint(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${tint(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"#bfbfff\";\n * }\n */\n\nfunction tint(percentage, color) {\n  if (color === 'transparent') return color;\n  return mix$1(parseFloat(percentage), 'rgb(255, 255, 255)', color);\n}\n\n// prettier-ignore\nvar curriedTint = curry /* ::<number | string, string, string> */(tint);\nvar curriedTint$1 = curriedTint;\n\n/**\n * Decreases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   background: transparentize(0.1, '#fff'),\n *   background: transparentize(0.2, 'hsl(0, 0%, 100%)'),\n *   background: transparentize('0.5', 'rgba(255, 0, 0, 0.8)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   background: ${transparentize(0.1, '#fff')};\n *   background: ${transparentize(0.2, 'hsl(0, 0%, 100%)')};\n *   background: ${transparentize('0.5', 'rgba(255, 0, 0, 0.8)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n *   background: \"rgba(255,255,255,0.9)\";\n *   background: \"rgba(255,255,255,0.8)\";\n *   background: \"rgba(255,0,0,0.3)\";\n * }\n */\nfunction transparentize(amount, color) {\n  if (color === 'transparent') return color;\n  var parsedColor = parseToRgb(color);\n  var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n  var colorWithAlpha = _extends({}, parsedColor, {\n    alpha: guard(0, 1, +(alpha * 100 - parseFloat(amount) * 100).toFixed(2) / 100)\n  });\n  return rgba(colorWithAlpha);\n}\n\n// prettier-ignore\nvar curriedTransparentize = curry /* ::<number | string, string, string> */(transparentize);\nvar curriedTransparentize$1 = curriedTransparentize;\n\n/**\n * Shorthand for easily setting the animation property. Allows either multiple arrays with animations\n * or a single animation spread over the arguments.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'animation': 'rotate 1s ease-in-out, colorchange 2s'\n * }\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...animation('rotate', '1s', 'ease-in-out')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${animation('rotate', '1s', 'ease-in-out')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'animation': 'rotate 1s ease-in-out'\n * }\n */\nfunction animation() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  // Allow single or multiple animations passed\n  var multiMode = Array.isArray(args[0]);\n  if (!multiMode && args.length > 8) {\n    throw new PolishedError(64);\n  }\n  var code = args.map(function (arg) {\n    if (multiMode && !Array.isArray(arg) || !multiMode && Array.isArray(arg)) {\n      throw new PolishedError(65);\n    }\n    if (Array.isArray(arg) && arg.length > 8) {\n      throw new PolishedError(66);\n    }\n    return Array.isArray(arg) ? arg.join(' ') : arg;\n  }).join(', ');\n  return {\n    animation: code\n  };\n}\n\n/**\n * Shorthand that accepts any number of backgroundImage values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'backgroundImage': 'url(\"/image/background.jpg\"), linear-gradient(red, green)'\n * }\n */\nfunction backgroundImages() {\n  for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n    properties[_key] = arguments[_key];\n  }\n  return {\n    backgroundImage: properties.join(', ')\n  };\n}\n\n/**\n * Shorthand that accepts any number of background values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'background': 'url(\"/image/background.jpg\"), linear-gradient(red, green), center no-repeat'\n * }\n */\nfunction backgrounds() {\n  for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n    properties[_key] = arguments[_key];\n  }\n  return {\n    background: properties.join(', ')\n  };\n}\n\nvar sideMap = ['top', 'right', 'bottom', 'left'];\n\n/**\n * Shorthand for the border property that splits out individual properties for use with tools like Fela and Styletron. A side keyword can optionally be passed to target only one side's border properties.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...border('1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${border('1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'borderColor': 'red',\n *   'borderStyle': 'solid',\n *   'borderWidth': `1px`,\n * }\n *\n * // Styles as object usage\n * const styles = {\n *   ...border('top', '1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${border('top', '1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'borderTopColor': 'red',\n *   'borderTopStyle': 'solid',\n *   'borderTopWidth': `1px`,\n * }\n */\n\nfunction border(sideKeyword) {\n  for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    values[_key - 1] = arguments[_key];\n  }\n  if (typeof sideKeyword === 'string' && sideMap.indexOf(sideKeyword) >= 0) {\n    var _ref;\n    return _ref = {}, _ref[\"border\" + capitalizeString(sideKeyword) + \"Width\"] = values[0], _ref[\"border\" + capitalizeString(sideKeyword) + \"Style\"] = values[1], _ref[\"border\" + capitalizeString(sideKeyword) + \"Color\"] = values[2], _ref;\n  } else {\n    values.unshift(sideKeyword);\n    return {\n      borderWidth: values[0],\n      borderStyle: values[1],\n      borderColor: values[2]\n    };\n  }\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...borderColor('red', 'green', 'blue', 'yellow')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${borderColor('red', 'green', 'blue', 'yellow')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'borderTopColor': 'red',\n *   'borderRightColor': 'green',\n *   'borderBottomColor': 'blue',\n *   'borderLeftColor': 'yellow'\n * }\n */\nfunction borderColor() {\n  for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n    values[_key] = arguments[_key];\n  }\n  return directionalProperty.apply(void 0, ['borderColor'].concat(values));\n}\n\n/**\n * Shorthand that accepts a value for side and a value for radius and applies the radius value to both corners of the side.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...borderRadius('top', '5px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${borderRadius('top', '5px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'borderTopRightRadius': '5px',\n *   'borderTopLeftRadius': '5px',\n * }\n */\nfunction borderRadius(side, radius) {\n  var uppercaseSide = capitalizeString(side);\n  if (!radius && radius !== 0) {\n    throw new PolishedError(62);\n  }\n  if (uppercaseSide === 'Top' || uppercaseSide === 'Bottom') {\n    var _ref;\n    return _ref = {}, _ref[\"border\" + uppercaseSide + \"RightRadius\"] = radius, _ref[\"border\" + uppercaseSide + \"LeftRadius\"] = radius, _ref;\n  }\n  if (uppercaseSide === 'Left' || uppercaseSide === 'Right') {\n    var _ref2;\n    return _ref2 = {}, _ref2[\"borderTop\" + uppercaseSide + \"Radius\"] = radius, _ref2[\"borderBottom\" + uppercaseSide + \"Radius\"] = radius, _ref2;\n  }\n  throw new PolishedError(63);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...borderStyle('solid', 'dashed', 'dotted', 'double')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${borderStyle('solid', 'dashed', 'dotted', 'double')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'borderTopStyle': 'solid',\n *   'borderRightStyle': 'dashed',\n *   'borderBottomStyle': 'dotted',\n *   'borderLeftStyle': 'double'\n * }\n */\nfunction borderStyle() {\n  for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n    values[_key] = arguments[_key];\n  }\n  return directionalProperty.apply(void 0, ['borderStyle'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...borderWidth('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${borderWidth('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'borderTopWidth': '12px',\n *   'borderRightWidth': '24px',\n *   'borderBottomWidth': '36px',\n *   'borderLeftWidth': '48px'\n * }\n */\nfunction borderWidth() {\n  for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n    values[_key] = arguments[_key];\n  }\n  return directionalProperty.apply(void 0, ['borderWidth'].concat(values));\n}\n\nfunction generateSelectors(template, state) {\n  var stateSuffix = state ? \":\" + state : '';\n  return template(stateSuffix);\n}\n\n/**\n * Function helper that adds an array of states to a template of selectors. Used in textInputs and buttons.\n * @private\n */\nfunction statefulSelectors(states, template, stateMap) {\n  if (!template) throw new PolishedError(67);\n  if (states.length === 0) return generateSelectors(template, null);\n  var selectors = [];\n  for (var i = 0; i < states.length; i += 1) {\n    if (stateMap && stateMap.indexOf(states[i]) < 0) {\n      throw new PolishedError(68);\n    }\n    selectors.push(generateSelectors(template, states[i]));\n  }\n  selectors = selectors.join(',');\n  return selectors;\n}\n\nvar stateMap$1 = [undefined, null, 'active', 'focus', 'hover'];\nfunction template$1(state) {\n  return \"button\" + state + \",\\n  input[type=\\\"button\\\"]\" + state + \",\\n  input[type=\\\"reset\\\"]\" + state + \",\\n  input[type=\\\"submit\\\"]\" + state;\n}\n\n/**\n * Populates selectors that target all buttons. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n *   [buttons('active')]: {\n *     'border': 'none'\n *   }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   > ${buttons('active')} {\n *     border: none;\n *   }\n * `\n *\n * // CSS in JS Output\n *\n *  'button:active,\n *  'input[type=\"button\"]:active,\n *  'input[type=\\\"reset\\\"]:active,\n *  'input[type=\\\"submit\\\"]:active: {\n *   'border': 'none'\n * }\n */\nfunction buttons() {\n  for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n    states[_key] = arguments[_key];\n  }\n  return statefulSelectors(states, template$1, stateMap$1);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...margin('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${margin('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'marginTop': '12px',\n *   'marginRight': '24px',\n *   'marginBottom': '36px',\n *   'marginLeft': '48px'\n * }\n */\nfunction margin() {\n  for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n    values[_key] = arguments[_key];\n  }\n  return directionalProperty.apply(void 0, ['margin'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...padding('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${padding('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'paddingTop': '12px',\n *   'paddingRight': '24px',\n *   'paddingBottom': '36px',\n *   'paddingLeft': '48px'\n * }\n */\nfunction padding() {\n  for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n    values[_key] = arguments[_key];\n  }\n  return directionalProperty.apply(void 0, ['padding'].concat(values));\n}\n\nvar positionMap = ['absolute', 'fixed', 'relative', 'static', 'sticky'];\n\n/**\n * Shorthand accepts up to five values, including null to skip a value, and maps them to their respective directions. The first value can optionally be a position keyword.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...position('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${position('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'top': '12px',\n *   'right': '24px',\n *   'bottom': '36px',\n *   'left': '48px'\n * }\n *\n * // Styles as object usage\n * const styles = {\n *   ...position('absolute', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${position('absolute', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'position': 'absolute',\n *   'top': '12px',\n *   'right': '24px',\n *   'bottom': '36px',\n *   'left': '48px'\n * }\n */\nfunction position(firstValue) {\n  for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    values[_key - 1] = arguments[_key];\n  }\n  if (positionMap.indexOf(firstValue) >= 0 && firstValue) {\n    return _extends({}, directionalProperty.apply(void 0, [''].concat(values)), {\n      position: firstValue\n    });\n  } else {\n    return directionalProperty.apply(void 0, ['', firstValue].concat(values));\n  }\n}\n\n/**\n * Shorthand to set the height and width properties in a single statement.\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...size('300px', '250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${size('300px', '250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'height': '300px',\n *   'width': '250px',\n * }\n */\nfunction size(height, width) {\n  if (width === void 0) {\n    width = height;\n  }\n  return {\n    height: height,\n    width: width\n  };\n}\n\nvar stateMap = [undefined, null, 'active', 'focus', 'hover'];\nfunction template(state) {\n  return \"input[type=\\\"color\\\"]\" + state + \",\\n    input[type=\\\"date\\\"]\" + state + \",\\n    input[type=\\\"datetime\\\"]\" + state + \",\\n    input[type=\\\"datetime-local\\\"]\" + state + \",\\n    input[type=\\\"email\\\"]\" + state + \",\\n    input[type=\\\"month\\\"]\" + state + \",\\n    input[type=\\\"number\\\"]\" + state + \",\\n    input[type=\\\"password\\\"]\" + state + \",\\n    input[type=\\\"search\\\"]\" + state + \",\\n    input[type=\\\"tel\\\"]\" + state + \",\\n    input[type=\\\"text\\\"]\" + state + \",\\n    input[type=\\\"time\\\"]\" + state + \",\\n    input[type=\\\"url\\\"]\" + state + \",\\n    input[type=\\\"week\\\"]\" + state + \",\\n    input:not([type])\" + state + \",\\n    textarea\" + state;\n}\n\n/**\n * Populates selectors that target all text inputs. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n *   [textInputs('active')]: {\n *     'border': 'none'\n *   }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   > ${textInputs('active')} {\n *     border: none;\n *   }\n * `\n *\n * // CSS in JS Output\n *\n *  'input[type=\"color\"]:active,\n *  input[type=\"date\"]:active,\n *  input[type=\"datetime\"]:active,\n *  input[type=\"datetime-local\"]:active,\n *  input[type=\"email\"]:active,\n *  input[type=\"month\"]:active,\n *  input[type=\"number\"]:active,\n *  input[type=\"password\"]:active,\n *  input[type=\"search\"]:active,\n *  input[type=\"tel\"]:active,\n *  input[type=\"text\"]:active,\n *  input[type=\"time\"]:active,\n *  input[type=\"url\"]:active,\n *  input[type=\"week\"]:active,\n *  input:not([type]):active,\n *  textarea:active': {\n *   'border': 'none'\n * }\n */\nfunction textInputs() {\n  for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n    states[_key] = arguments[_key];\n  }\n  return statefulSelectors(states, template, stateMap);\n}\n\n/**\n * Accepts any number of transition values as parameters for creating a single transition statement. You may also pass an array of properties as the first parameter that you would like to apply the same transition values to (second parameter).\n * @example\n * // Styles as object usage\n * const styles = {\n *   ...transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s'),\n *   ...transitions(['color', 'background-color'], '2.0s ease-in 2s')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n *   ${transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s')};\n *   ${transitions(['color', 'background-color'], '2.0s ease-in 2s'),};\n * `\n *\n * // CSS as JS Output\n *\n * div {\n *   'transition': 'opacity 1.0s ease-in 0s, width 2.0s ease-in 2s'\n *   'transition': 'color 2.0s ease-in 2s, background-color 2.0s ease-in 2s',\n * }\n */\nfunction transitions() {\n  for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n    properties[_key] = arguments[_key];\n  }\n  if (Array.isArray(properties[0]) && properties.length === 2) {\n    var value = properties[1];\n    if (typeof value !== 'string') {\n      throw new PolishedError(61);\n    }\n    var transitionsString = properties[0].map(function (property) {\n      return property + \" \" + value;\n    }).join(', ');\n    return {\n      transition: transitionsString\n    };\n  } else {\n    return {\n      transition: properties.join(', ')\n    };\n  }\n}\n\nexport { curriedAdjustHue$1 as adjustHue, animation, backgroundImages, backgrounds, between, border, borderColor, borderRadius, borderStyle, borderWidth, buttons, clearFix, complement, cover, cssVar, curriedDarken$1 as darken, curriedDesaturate$1 as desaturate, directionalProperty, easeIn, easeInOut, easeOut, ellipsis, em$1 as em, fluidRange, fontFace, getContrast, getLuminance, getValueAndUnit, grayscale, hiDPI, hideText, hideVisually, hsl, hslToColorString, hsla, important, invert, curriedLighten$1 as lighten, linearGradient, margin, math, meetsContrastGuidelines, mix$1 as mix, modularScale, normalize, curriedOpacify$1 as opacify, padding, parseToHsl, parseToRgb, position, radialGradient, readableColor, rem$1 as rem, remToPx, retinaImage, rgb, rgbToColorString, rgba, curriedSaturate$1 as saturate, curriedSetHue$1 as setHue, curriedSetLightness$1 as setLightness, curriedSetSaturation$1 as setSaturation, curriedShade$1 as shade, size, stripUnit, textInputs, timingFunctions, curriedTint$1 as tint, toColorString, transitions, curriedTransparentize$1 as transparentize, triangle, wordWrap };\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n","var n,l,u,t,i,r,o,e,f,c,s,a,h,p,v,y,d={},w=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function m(n,l){for(var u in l)n[u]=l[u];return n}function b(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function k(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return x(l,e,i,r,null)}function x(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function M(){return{current:null}}function S(n){return n.children}function C(n,l){this.props=n,this.context=l}function $(n,l){if(null==l)return n.__?$(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?$(n):null}function I(n){if(n.__P&&n.__d){var u=n.__v,t=u.__e,i=[],r=[],o=m({},u);o.__v=u.__v+1,l.vnode&&l.vnode(o),q(n.__P,o,u,n.__n,n.__P.namespaceURI,32&u.__u?[t]:null,i,null==t?$(u):t,!!(32&u.__u),r),o.__v=u.__v,o.__.__k[o.__i]=o,D(i,o,r),u.__e=u.__=null,o.__e!=t&&P(o)}}function P(n){if(null!=(n=n.__)&&null!=n.__c)return n.__e=n.__c.base=null,n.__k.some(function(l){if(null!=l&&null!=l.__e)return n.__e=n.__c.base=l.__e}),P(n)}function A(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!H.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)(H)}function H(){try{for(var n,l=1;i.length;)i.length>l&&i.sort(e),n=i.shift(),l=i.length,I(n)}finally{i.length=H.__r=0}}function L(n,l,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,_,g,m=t&&t.__k||w,b=l.length;for(f=T(u,l,m,f,b),a=0;a<b;a++)null!=(p=u.__k[a])&&(h=-1!=p.__i&&m[p.__i]||d,p.__i=a,_=q(n,p,h,i,r,o,e,f,c,s),v=p.__e,p.ref&&h.ref!=p.ref&&(h.ref&&J(h.ref,null,p),s.push(p.ref,p.__c||v,p)),null==y&&null!=v&&(y=v),(g=!!(4&p.__u))||h.__k===p.__k?(f=j(p,f,n,g),g&&h.__e&&(h.__e=null)):\"function\"==typeof p.type&&void 0!==_?f=_:v&&(f=v.nextSibling),p.__u&=-7);return u.__e=y,f}function T(n,l,u,t,i){var r,o,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?o=n.__k[r]=x(null,o,null,null,null):g(o)?o=n.__k[r]=x(S,{children:o},null,null,null):void 0===o.constructor&&o.__b>0?o=n.__k[r]=x(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[r]=o,f=r+h,o.__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=O(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r<s;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=$(e)),K(e,e));return t}function j(n,l,u,t){var i,r;if(\"function\"==typeof n.type){for(i=n.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=n,l=j(i[r],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=$(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function F(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(g(n)?n.some(function(n){F(n,l)}):l.push(n)),l}function O(n,l,u,t){var i,r,o,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==e||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;)if(null!=(c=l[o=i>=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function z(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||_.test(l)?u:u+\"px\"}function N(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||z(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||z(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(a,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u[s]=t[s]:(u[s]=h,n.addEventListener(l,r?v:p,r)):n.removeEventListener(l,r?v:p,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function V(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u[c])u[c]=h++;else if(u[c]<t[s])return;return t(l.event?l.event(u):u)}}}function q(n,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,d,_,k,x,M,$,I,P,A,H,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof T)try{if(k=u.props,x=T.prototype&&T.prototype.render,M=(a=T.contextType)&&i[a.__c],$=a?M?M.props.value:a.__:i,t.__c?_=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(k,$):(u.__c=h=new C(k,$),h.constructor=T,h.render=Q),M&&M.sub(h),h.state||(h.state={}),h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=m({},h.__s)),m(h.__s,T.getDerivedStateFromProps(k,h.__s))),v=h.props,y=h.state,h.__v=u,p)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(x&&null==T.getDerivedStateFromProps&&k!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(k,$),u.__v==t.__v||!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(k,h.__s,$)){u.__v!=t.__v&&(h.props=k,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),w.push.apply(h.__h,h._sb),h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(k,h.__s,$),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,y,d)})}if(h.context=$,h.props=k,h.__P=n,h.__e=!1,I=l.__r,P=0,x)h.state=h.__s,h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),w.push.apply(h.__h,h._sb),h._sb=[];else do{h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++P<25);h.state=h.__s,null!=h.getChildContext&&(i=m(m({},i),h.getChildContext())),x&&!p&&null!=h.getSnapshotBeforeUpdate&&(d=h.getSnapshotBeforeUpdate(v,y)),A=null!=a&&a.type===S&&null==a.key?E(a.props.children):a,f=L(n,g(A)?A:[A],u,t,i,r,o,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),_&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=o)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;o[o.indexOf(f)]=null,u.__e=f}else{for(H=o.length;H--;)b(o[H]);B(u)}else u.__e=t.__e,u.__k=t.__k,n.then||B(u);l.__e(n,u,t)}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=G(t.__e,u,t,i,r,o,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function B(n){n&&(n.__c&&(n.__c.__e=!0),n.__k&&n.__k.some(B))}function D(n,u,t){for(var i=0;i<t.length;i++)J(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function E(n){return\"object\"!=typeof n||null==n||n.__b>0?n:g(n)?n.map(E):m({},n)}function G(u,t,i,r,o,e,f,c,s){var a,h,p,v,y,w,_,m=i.props||d,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((y=e[a])&&\"setAttribute\"in y==!!x&&(x?y.localName==x:3==y.nodeType)){u=y,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)m===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),!c&&null!=e)for(m={},a=0;a<u.attributes.length;a++)m[(y=u.attributes[a]).name]=y.value;for(a in m)y=m[a],\"dangerouslySetInnerHTML\"==a?p=y:\"children\"==a||a in k||\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k||N(u,a,null,y,o);for(a in k)y=k[a],\"children\"==a?v=y:\"dangerouslySetInnerHTML\"==a?h=y:\"value\"==a?w=y:\"checked\"==a?_=y:c&&\"function\"!=typeof y||m[a]===y||N(u,a,y,m[a],o);if(h)c||p&&(h.__html==p.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(p&&(u.innerHTML=\"\"),L(\"template\"==t.type?u.content:u,g(v)?v:[v],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&$(i,0),c,s),null!=e)for(a=e.length;a--;)b(e[a]);c||(a=\"value\",\"progress\"==x&&null==w?u.removeAttribute(\"value\"):null!=w&&(w!==u[a]||\"progress\"==x&&!w||\"option\"==x&&w!=m[a])&&N(u,a,w,m[a],o),a=\"checked\",null!=_&&_!=u[a]&&N(u,a,_,m[a],o))}return u}function J(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function K(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||J(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&K(i[r],u,t||\"function\"!=typeof n.type);t||b(n.__e),n.__c=n.__=n.__e=void 0}function Q(n,l,u){return this.constructor(n,u)}function R(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],q(t,u=(!r&&i||t).__k=k(S,null,[u]),o||d,d,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),D(e,u,f)}function U(n,l){R(n,l,U)}function W(l,u,t){var i,r,o,e,f=m({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),x(l.type,f,i||l.key,r||l.ref,null)}function X(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,A(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+y++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=w.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},C.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=m({},this.state),\"function\"==typeof n&&(n=n(m({},u),this.props)),n&&m(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),A(this))},C.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),A(this))},C.prototype.render=S,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},H.__r=0,f=Math.random().toString(8),c=\"__d\"+f,s=\"__a\"+f,a=/(PointerCapture)$|Capture$/i,h=0,p=V(!1),v=V(!0),y=0;export{C as Component,S as Fragment,W as cloneElement,X as createContext,k as createElement,M as createRef,k as h,U as hydrate,t as isValidElement,l as options,R as render,F as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import { select, pointer } from 'd3-selection';\nimport Kapsule from 'kapsule';\nimport { isValidElement, cloneElement, render as render$1 } from 'preact';\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), true).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar _reactElement2VNode = function reactElement2VNode(el) {\n  // Among other things, react VNodes (and all its children) need to have constructor: undefined attributes in order to be recognised, cloneElement (applied recursively) does the necessary conversion\n  if (!(_typeof(el) === 'object')) return el;\n  var res = cloneElement(el);\n  if (res.props) {\n    var _res$props;\n    res.props = _objectSpread2({}, res.props);\n    if (res !== null && res !== void 0 && (_res$props = res.props) !== null && _res$props !== void 0 && _res$props.children) {\n      res.props.children = Array.isArray(res.props.children) ? res.props.children.map(_reactElement2VNode) : _reactElement2VNode(res.props.children);\n    }\n  }\n  return res;\n};\nvar isReactRenderable = function isReactRenderable(o) {\n  return isValidElement(cloneElement(o));\n};\nvar render = function render(jsx, domEl) {\n  delete domEl.__k; // Wipe traces of previous preact renders\n  render$1(_reactElement2VNode(jsx), domEl);\n};\n\nfunction styleInject(css, ref) {\n  if (ref === void 0) ref = {};\n  var insertAt = ref.insertAt;\n  if (typeof document === 'undefined') {\n    return;\n  }\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css_248z = \".float-tooltip-kap {\\n  position: absolute;\\n  width: max-content; /* prevent shrinking near right edge */\\n  max-width: max(50%, 150px);\\n  padding: 3px 5px;\\n  border-radius: 3px;\\n  font: 12px sans-serif;\\n  color: #eee;\\n  background: rgba(0,0,0,0.6);\\n  pointer-events: none;\\n}\\n\";\nstyleInject(css_248z);\n\nvar index = Kapsule({\n  props: {\n    content: {\n      \"default\": false\n    },\n    offsetX: {\n      triggerUpdate: false\n    },\n    // null or number\n    offsetY: {\n      triggerUpdate: false\n    } // null or number\n  },\n  init: function init(domNode, state) {\n    var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n      _ref$style = _ref.style,\n      style = _ref$style === void 0 ? {} : _ref$style;\n    var isD3Selection = !!domNode && _typeof(domNode) === 'object' && !!domNode.node && typeof domNode.node === 'function';\n    var el = select(isD3Selection ? domNode.node() : domNode);\n\n    // make sure container is positioned, to provide anchor for tooltip\n    el.style('position') === 'static' && el.style('position', 'relative');\n    state.tooltipEl = el.append('div').attr('class', 'float-tooltip-kap');\n    Object.entries(style).forEach(function (_ref2) {\n      var _ref3 = _slicedToArray(_ref2, 2),\n        k = _ref3[0],\n        v = _ref3[1];\n      return state.tooltipEl.style(k, v);\n    });\n    state.tooltipEl // start off-screen\n    .style('left', '-10000px').style('display', 'none');\n    var evSuffix = \"tooltip-\".concat(Math.round(Math.random() * 1e12));\n    state.mouseInside = false;\n    el.on(\"mousemove.\".concat(evSuffix), function (ev) {\n      state.mouseInside = true;\n      var mousePos = pointer(ev);\n      var domNode = el.node();\n      var canvasWidth = domNode.offsetWidth;\n      var canvasHeight = domNode.offsetHeight;\n      var translate = [state.offsetX === null || state.offsetX === undefined\n      // auto: adjust horizontal position to not exceed canvas boundaries\n      ? \"-\".concat(mousePos[0] / canvasWidth * 100, \"%\") : typeof state.offsetX === 'number' ? \"calc(-50% + \".concat(state.offsetX, \"px)\") : state.offsetX, state.offsetY === null || state.offsetY === undefined\n      // auto: flip to above if near bottom\n      ? canvasHeight > 130 && canvasHeight - mousePos[1] < 100 ? 'calc(-100% - 6px)' : '21px' : typeof state.offsetY === 'number' ? state.offsetY < 0 ? \"calc(-100% - \".concat(Math.abs(state.offsetY), \"px)\") : \"\".concat(state.offsetY, \"px\") : state.offsetY];\n      state.tooltipEl.style('left', mousePos[0] + 'px').style('top', mousePos[1] + 'px').style('transform', \"translate(\".concat(translate.join(','), \")\"));\n      state.content && state.tooltipEl.style('display', 'inline');\n    });\n    el.on(\"mouseover.\".concat(evSuffix), function () {\n      state.mouseInside = true;\n      state.content && state.tooltipEl.style('display', 'inline');\n    });\n    el.on(\"mouseout.\".concat(evSuffix), function () {\n      state.mouseInside = false;\n      state.tooltipEl.style('display', 'none');\n    });\n  },\n  update: function update(state) {\n    state.tooltipEl.style('display', !!state.content && state.mouseInside ? 'inline' : 'none');\n    if (!state.content) {\n      state.tooltipEl.text('');\n    } else if (state.content instanceof HTMLElement) {\n      state.tooltipEl.text(''); // empty it\n      state.tooltipEl.append(function () {\n        return state.content;\n      });\n    } else if (typeof state.content === 'string') {\n      state.tooltipEl.html(state.content);\n    } else if (isReactRenderable(state.content)) {\n      state.tooltipEl.text(''); // empty it\n      render(state.content, state.tooltipEl.node());\n    } else {\n      state.tooltipEl.style('display', 'none');\n      console.warn('Tooltip content is invalid, skipping.', state.content, state.content.toString());\n    }\n  }\n});\n\nexport { index as default };\n","import { SphereGeometry, Color, TextureLoader, SRGBColorSpace, MeshBasicMaterial, BackSide, Vector2, WebGLRenderer, Mesh, Timer, PerspectiveCamera, Scene, Raycaster, Vector3, Box3 } from 'three';\nimport { WebGPURenderer } from 'three/webgpu';\nimport { TrackballControls } from 'three/examples/jsm/controls/TrackballControls.js';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport { FlyControls } from 'three/examples/jsm/controls/FlyControls.js';\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport { parseToRgb, opacify } from 'polished';\nimport { Group, Tween, Easing } from '@tweenjs/tween.js';\nimport accessorFn from 'accessor-fn';\nimport Kapsule from 'kapsule';\nimport Tooltip from 'float-tooltip';\n\nfunction styleInject(css, ref) {\n  if (ref === void 0) ref = {};\n  var insertAt = ref.insertAt;\n  if (typeof document === 'undefined') {\n    return;\n  }\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css_248z = \".scene-nav-info {\\n  position: absolute;\\n  bottom: 5px;\\n  width: 100%;\\n  text-align: center;\\n  color: slategrey;\\n  opacity: 0.7;\\n  font-size: 10px;\\n  font-family: sans-serif;\\n  pointer-events: none;\\n  user-select: none;\\n}\\n\\n.scene-container canvas:focus {\\n  outline: none;\\n}\";\nstyleInject(css_248z);\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar _materialDispose = function materialDispose(material) {\n  if (material instanceof Array) {\n    material.forEach(_materialDispose);\n  } else {\n    if (material.map) {\n      material.map.dispose();\n    }\n    material.dispose();\n  }\n};\nvar _deallocate = function deallocate(obj) {\n  if (obj.geometry) {\n    obj.geometry.dispose();\n  }\n  if (obj.material) {\n    _materialDispose(obj.material);\n  }\n  if (obj.texture) {\n    obj.texture.dispose();\n  }\n  if (obj.children) {\n    obj.children.forEach(_deallocate);\n  }\n};\nvar emptyObject = function emptyObject(obj) {\n  while (obj.children.length) {\n    var childObj = obj.children[0];\n    obj.remove(childObj);\n    _deallocate(childObj);\n  }\n};\n\nvar three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  WebGLRenderer: WebGLRenderer,\n  Scene: Scene,\n  PerspectiveCamera: PerspectiveCamera,\n  Raycaster: Raycaster,\n  SRGBColorSpace: SRGBColorSpace,\n  TextureLoader: TextureLoader,\n  Vector2: Vector2,\n  Vector3: Vector3,\n  Box3: Box3,\n  Color: Color,\n  Mesh: Mesh,\n  SphereGeometry: SphereGeometry,\n  MeshBasicMaterial: MeshBasicMaterial,\n  BackSide: BackSide,\n  Timer: Timer\n};\nvar threeRenderObjects = Kapsule({\n  props: {\n    width: {\n      \"default\": window.innerWidth,\n      onChange: function onChange(width, state, prevWidth) {\n        isNaN(width) && (state.width = prevWidth);\n      }\n    },\n    height: {\n      \"default\": window.innerHeight,\n      onChange: function onChange(height, state, prevHeight) {\n        isNaN(height) && (state.height = prevHeight);\n      }\n    },\n    viewOffset: {\n      \"default\": [0, 0]\n    },\n    backgroundColor: {\n      \"default\": '#000011'\n    },\n    backgroundImageUrl: {},\n    onBackgroundImageLoaded: {},\n    showNavInfo: {\n      \"default\": true\n    },\n    skyRadius: {\n      \"default\": 50000\n    },\n    objects: {\n      \"default\": []\n    },\n    lights: {\n      \"default\": []\n    },\n    enablePointerInteraction: {\n      \"default\": true,\n      onChange: function onChange(_, state) {\n        // Reset hover state\n        state.hoverObj = null;\n        state.tooltip && state.tooltip.content(null);\n      },\n      triggerUpdate: false\n    },\n    pointerRaycasterThrottleMs: {\n      \"default\": 50,\n      triggerUpdate: false\n    },\n    lineHoverPrecision: {\n      \"default\": 1,\n      triggerUpdate: false\n    },\n    pointsHoverPrecision: {\n      \"default\": 1,\n      triggerUpdate: false\n    },\n    hoverOrderComparator: {\n      triggerUpdate: false\n    },\n    // keep existing order by default\n    hoverFilter: {\n      \"default\": function _default() {\n        return true;\n      },\n      triggerUpdate: false\n    },\n    // exclude objects from interaction\n    tooltipContent: {\n      triggerUpdate: false\n    },\n    hoverDuringDrag: {\n      \"default\": false,\n      triggerUpdate: false\n    },\n    clickAfterDrag: {\n      \"default\": false,\n      triggerUpdate: false\n    },\n    onHover: {\n      \"default\": function _default() {},\n      triggerUpdate: false\n    },\n    onClick: {\n      \"default\": function _default() {},\n      triggerUpdate: false\n    },\n    onRightClick: {\n      triggerUpdate: false\n    }\n  },\n  methods: {\n    tick: function tick(state) {\n      if (state.initialised) {\n        state.controls.enabled && state.controls.update && state.controls.update(Math.min(1, state.timer.update().getDelta())); // timedelta is required for fly controls\n\n        state.postProcessingComposer ? state.postProcessingComposer.render() // if using postprocessing, switch the output to it\n        : state.renderer.render(state.scene, state.camera);\n        state.extraRenderers.forEach(function (r) {\n          return r.render(state.scene, state.camera);\n        });\n        var now = +new Date();\n        if (state.enablePointerInteraction && now - state.lastRaycasterCheck >= state.pointerRaycasterThrottleMs) {\n          state.lastRaycasterCheck = now;\n          // Update tooltip and trigger onHover events\n          var topObject = null;\n          if (state.hoverDuringDrag || !state.isPointerDragging) {\n            var intersects = this.intersectingObjects(state.pointerPos.x, state.pointerPos.y);\n            state.hoverOrderComparator && intersects.sort(function (a, b) {\n              return state.hoverOrderComparator(a.object, b.object);\n            });\n            var topIntersect = intersects.find(function (d) {\n              return state.hoverFilter(d.object);\n            }) || null;\n            topObject = topIntersect ? topIntersect.object : null;\n            state.intersection = topIntersect || null;\n          }\n          if (topObject !== state.hoverObj) {\n            state.onHover(topObject, state.hoverObj, state.intersection);\n            state.tooltip.content(topObject ? accessorFn(state.tooltipContent)(topObject, state.intersection) || null : null);\n            state.hoverObj = topObject;\n          }\n        }\n        state.tweenGroup.update(); // update camera animation tweens\n      }\n      return this;\n    },\n    getPointerPos: function getPointerPos(state) {\n      var _state$pointerPos = state.pointerPos,\n        x = _state$pointerPos.x,\n        y = _state$pointerPos.y;\n      return {\n        x: x,\n        y: y\n      };\n    },\n    cameraPosition: function cameraPosition(state, position, lookAt, transitionDuration) {\n      var camera = state.camera;\n\n      // Setter\n      if (position && state.initialised) {\n        var _state$povPosTween, _state$povTgtTween;\n        var finalPos = position;\n        var finalLookAt = lookAt || {\n          x: 0,\n          y: 0,\n          z: 0\n        };\n\n        // cancel any ongoing pov animation\n        (_state$povPosTween = state.povPosTween) === null || _state$povPosTween === void 0 || _state$povPosTween.end();\n        (_state$povTgtTween = state.povTgtTween) === null || _state$povTgtTween === void 0 || _state$povTgtTween.end();\n        if (!transitionDuration) {\n          // no animation\n          setCameraPos(finalPos);\n          setLookAt(finalLookAt);\n        } else {\n          var camPos = Object.assign({}, camera.position);\n          var camLookAt = getLookAt();\n          state.tweenGroup.add(state.povPosTween = new Tween(camPos).to(finalPos, transitionDuration).easing(Easing.Quadratic.Out).onUpdate(setCameraPos).onComplete(function () {\n            state.povPosTween = undefined;\n            state.tweenGroup.remove(this);\n          }).start());\n\n          // Face direction in 1/3rd of time\n          state.tweenGroup.add(state.povTgtTween = new Tween(camLookAt).to(finalLookAt, transitionDuration / 3).easing(Easing.Quadratic.Out).onUpdate(setLookAt).onComplete(function () {\n            state.povTgtTween = undefined;\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n        return this;\n      }\n\n      // Getter\n      return Object.assign({}, camera.position, {\n        lookAt: getLookAt()\n      });\n\n      //\n\n      function setCameraPos(pos) {\n        var x = pos.x,\n          y = pos.y,\n          z = pos.z;\n        if (x !== undefined) camera.position.x = x;\n        if (y !== undefined) camera.position.y = y;\n        if (z !== undefined) camera.position.z = z;\n      }\n      function setLookAt(lookAt) {\n        var lookAtVect = new three.Vector3(lookAt.x, lookAt.y, lookAt.z);\n        if (state.controls.enabled && state.controls.target) {\n          state.controls.target = lookAtVect;\n        } else {\n          // Fly controls doesn't have target attribute\n          camera.lookAt(lookAtVect); // note: lookAt may be overridden by other controls in some cases\n        }\n      }\n      function getLookAt() {\n        return Object.assign(new three.Vector3(0, 0, -1e3).applyQuaternion(camera.quaternion).add(camera.position));\n      }\n    },\n    zoomToFit: function zoomToFit(state) {\n      var transitionDuration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n      for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n        bboxArgs[_key - 3] = arguments[_key];\n      }\n      return this.fitToBbox(this.getBbox.apply(this, bboxArgs), transitionDuration, padding);\n    },\n    fitToBbox: function fitToBbox(state, bbox) {\n      var transitionDuration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n      var padding = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;\n      // based on https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/24\n      var camera = state.camera;\n      if (bbox) {\n        var center = new three.Vector3(0, 0, 0); // reset camera aim to center\n        var maxBoxSide = Math.max.apply(Math, _toConsumableArray(Object.entries(bbox).map(function (_ref) {\n          var _ref2 = _slicedToArray(_ref, 2),\n            coordType = _ref2[0],\n            coords = _ref2[1];\n          return Math.max.apply(Math, _toConsumableArray(coords.map(function (c) {\n            return Math.abs(center[coordType] - c);\n          })));\n        }))) * 2;\n\n        // find distance that fits whole bbox within padded fov\n        var paddedFov = (1 - padding * 2 / state.height) * camera.fov;\n        var fitHeightDistance = maxBoxSide / Math.atan(paddedFov * Math.PI / 180);\n        var fitWidthDistance = fitHeightDistance / camera.aspect;\n        var distance = Math.max(fitHeightDistance, fitWidthDistance);\n        if (distance > 0) {\n          var newCameraPosition = center.clone().sub(camera.position).normalize().multiplyScalar(-distance);\n          this.cameraPosition(newCameraPosition, center, transitionDuration);\n        }\n      }\n      return this;\n    },\n    getBbox: function getBbox(state) {\n      var objFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n        return true;\n      };\n      var box = new three.Box3(new three.Vector3(0, 0, 0), new three.Vector3(0, 0, 0));\n      var objs = state.objects.filter(objFilter);\n      if (!objs.length) return null;\n      objs.forEach(function (obj) {\n        return box.expandByObject(obj);\n      });\n\n      // extract global x,y,z min/max\n      return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n        return _defineProperty({}, c, [box.min[c], box.max[c]]);\n      })));\n    },\n    getScreenCoords: function getScreenCoords(state, x, y, z) {\n      var vec = new three.Vector3(x, y, z);\n      vec.project(this.camera()); // project to the camera plane\n      return {\n        // align relative pos to canvas dimensions\n        x: (vec.x + 1) * state.width / 2,\n        y: -(vec.y - 1) * state.height / 2\n      };\n    },\n    getSceneCoords: function getSceneCoords(state, screenX, screenY) {\n      var distance = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      var relCoords = new three.Vector2(screenX / state.width * 2 - 1, -(screenY / state.height) * 2 + 1);\n      var raycaster = new three.Raycaster();\n      raycaster.setFromCamera(relCoords, state.camera);\n      return Object.assign({}, raycaster.ray.at(distance, new three.Vector3()));\n    },\n    intersectingObjects: function intersectingObjects(state, x, y) {\n      var relCoords = new three.Vector2(x / state.width * 2 - 1, -(y / state.height) * 2 + 1);\n      var raycaster = new three.Raycaster();\n      raycaster.params.Line.threshold = state.lineHoverPrecision; // set linePrecision\n      raycaster.params.Points.threshold = state.pointsHoverPrecision; // set pointsPrecision\n      raycaster.setFromCamera(relCoords, state.camera);\n      return raycaster.intersectObjects(state.objects, true);\n    },\n    renderer: function renderer(state) {\n      return state.renderer;\n    },\n    scene: function scene(state) {\n      return state.scene;\n    },\n    camera: function camera(state) {\n      return state.camera;\n    },\n    postProcessingComposer: function postProcessingComposer(state) {\n      return state.postProcessingComposer;\n    },\n    controls: function controls(state) {\n      return state.controls;\n    },\n    tbControls: function tbControls(state) {\n      return state.controls;\n    },\n    // to be deprecated\n    _destructor: function _destructor(state) {\n      var _state$controls, _state$renderer, _state$postProcessing;\n      emptyObject(state.scene);\n      (_state$controls = state.controls) === null || _state$controls === void 0 || _state$controls.dispose();\n      (_state$renderer = state.renderer) === null || _state$renderer === void 0 || _state$renderer.dispose();\n      (_state$postProcessing = state.postProcessingComposer) === null || _state$postProcessing === void 0 || _state$postProcessing.dispose();\n    }\n  },\n  stateInit: function stateInit() {\n    return {\n      scene: new three.Scene(),\n      camera: new three.PerspectiveCamera(),\n      timer: new three.Timer(),\n      tweenGroup: new Group(),\n      lastRaycasterCheck: 0\n    };\n  },\n  init: function init(domNode, state) {\n    var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n      _ref4$controlType = _ref4.controlType,\n      controlType = _ref4$controlType === void 0 ? 'trackball' : _ref4$controlType,\n      _ref4$useWebGPU = _ref4.useWebGPU,\n      useWebGPU = _ref4$useWebGPU === void 0 ? false : _ref4$useWebGPU,\n      _ref4$rendererConfig = _ref4.rendererConfig,\n      rendererConfig = _ref4$rendererConfig === void 0 ? {} : _ref4$rendererConfig,\n      _ref4$extraRenderers = _ref4.extraRenderers,\n      extraRenderers = _ref4$extraRenderers === void 0 ? [] : _ref4$extraRenderers,\n      _ref4$waitForLoadComp = _ref4.waitForLoadComplete,\n      waitForLoadComplete = _ref4$waitForLoadComp === void 0 ? true : _ref4$waitForLoadComp;\n    // Wipe DOM\n    domNode.innerHTML = '';\n\n    // Add relative container\n    domNode.appendChild(state.container = document.createElement('div'));\n    state.container.className = 'scene-container';\n    state.container.style.position = 'relative';\n\n    // Add nav info section\n    state.container.appendChild(state.navInfo = document.createElement('div'));\n    state.navInfo.className = 'scene-nav-info';\n    state.navInfo.textContent = {\n      orbit: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan',\n      trackball: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan',\n      fly: 'WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw'\n    }[controlType] || '';\n    state.navInfo.style.display = state.showNavInfo ? null : 'none';\n\n    // Setup tooltip\n    state.tooltip = new Tooltip(state.container);\n\n    // Capture pointer coords on move or touchstart\n    state.pointerPos = new three.Vector2();\n    state.pointerPos.x = -2; // Initialize off canvas\n    state.pointerPos.y = -2;\n    ['pointermove', 'pointerdown'].forEach(function (evType) {\n      return state.container.addEventListener(evType, function (ev) {\n        // track click state\n        evType === 'pointerdown' && (state.isPointerPressed = true);\n\n        // detect point drag\n        !state.isPointerDragging && ev.type === 'pointermove' && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we used the isPointerPressed tracker\n        && (ev.pointerType === 'mouse' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(function (m) {\n          return Math.abs(m) > 1;\n        })) // relax drag trigger sensitivity on non-mouse (touch/pen) events\n        && (state.isPointerDragging = true);\n        if (state.enablePointerInteraction) {\n          // update the pointer pos\n          var offset = getOffset(state.container);\n          state.pointerPos.x = ev.pageX - offset.left;\n          state.pointerPos.y = ev.pageY - offset.top;\n        }\n        function getOffset(el) {\n          var rect = el.getBoundingClientRect(),\n            scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,\n            scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n          return {\n            top: rect.top + scrollTop,\n            left: rect.left + scrollLeft\n          };\n        }\n      }, {\n        passive: true\n      });\n    });\n\n    // Handle click events on objs\n    state.container.addEventListener('pointerup', function (ev) {\n      if (!state.isPointerPressed) return; // don't trigger click events if pointer is not pressed on the canvas\n\n      state.isPointerPressed = false;\n      if (state.isPointerDragging) {\n        state.isPointerDragging = false;\n        if (!state.clickAfterDrag) return; // don't trigger onClick after pointer drag (camera motion via controls)\n      }\n      requestAnimationFrame(function () {\n        // trigger click events asynchronously, to allow hoverObj to be set (on frame)\n        if (ev.button === 0) {\n          // left-click\n          state.onClick(state.hoverObj || null, ev, state.intersection); // trigger background clicks with null\n        }\n        if (ev.button === 2 && state.onRightClick) {\n          // right-click\n          state.onRightClick(state.hoverObj || null, ev, state.intersection);\n        }\n      });\n    }, {\n      passive: true,\n      capture: true\n    }); // use capture phase to prevent propagation blocking from controls (specifically for fly)\n\n    state.container.addEventListener('contextmenu', function (ev) {\n      if (state.onRightClick) ev.preventDefault(); // prevent default contextmenu behavior and allow pointerup to fire instead\n    });\n\n    // Setup renderer, camera and controls\n    state.renderer = new (useWebGPU ? WebGPURenderer : three.WebGLRenderer)(Object.assign({\n      antialias: true,\n      alpha: true\n    }, rendererConfig));\n    state.renderer.setPixelRatio(Math.min(2, window.devicePixelRatio)); // clamp device pixel ratio\n    state.container.appendChild(state.renderer.domElement);\n\n    // Setup extra renderers\n    state.extraRenderers = extraRenderers;\n    state.extraRenderers.forEach(function (r) {\n      // overlay them on top of main renderer\n      r.domElement.style.position = 'absolute';\n      r.domElement.style.top = '0px';\n      r.domElement.style.pointerEvents = 'none';\n      state.container.appendChild(r.domElement);\n    });\n\n    // configure post-processing composer\n    state.postProcessingComposer = new EffectComposer(state.renderer);\n    state.postProcessingComposer.addPass(new RenderPass(state.scene, state.camera)); // render scene as first pass\n\n    // configure controls\n    state.controls = new {\n      trackball: TrackballControls,\n      orbit: OrbitControls,\n      fly: FlyControls\n    }[controlType](state.camera, state.renderer.domElement);\n    if (controlType === 'fly') {\n      state.controls.movementSpeed = 300;\n      state.controls.rollSpeed = Math.PI / 6;\n      state.controls.dragToLook = true;\n    }\n    if (controlType === 'trackball' || controlType === 'orbit') {\n      state.controls.minDistance = 0.1;\n      state.controls.maxDistance = state.skyRadius;\n      state.controls.addEventListener('start', function () {\n        state.controlsEngaged = true;\n      });\n      state.controls.addEventListener('change', function () {\n        if (state.controlsEngaged) {\n          state.controlsDragging = true;\n        }\n      });\n      state.controls.addEventListener('end', function () {\n        state.controlsEngaged = false;\n        state.controlsDragging = false;\n      });\n    }\n    [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {\n      return r.setSize(state.width, state.height);\n    });\n    state.camera.aspect = state.width / state.height;\n    state.camera.updateProjectionMatrix();\n    state.camera.position.z = 1000;\n\n    // add sky\n    state.scene.add(state.skysphere = new three.Mesh());\n    state.skysphere.visible = false;\n    state.loadComplete = state.scene.visible = !waitForLoadComplete;\n    window.scene = state.scene;\n  },\n  update: function update(state, changedProps) {\n    // resize canvas\n    if (state.width && state.height && (changedProps.hasOwnProperty('width') || changedProps.hasOwnProperty('height'))) {\n      var _state$camera;\n      var w = state.width;\n      var h = state.height;\n      state.container.style.width = \"\".concat(w, \"px\");\n      state.container.style.height = \"\".concat(h, \"px\");\n      [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {\n        return r.setSize(w, h);\n      });\n      state.camera.aspect = w / h;\n      var o = state.viewOffset.slice(0, 2);\n      o.some(function (n) {\n        return n;\n      }) && (_state$camera = state.camera).setViewOffset.apply(_state$camera, [w, h].concat(_toConsumableArray(o), [w, h]));\n      state.camera.updateProjectionMatrix();\n    }\n    if (changedProps.hasOwnProperty('viewOffset')) {\n      var _state$camera2;\n      var _w = state.width;\n      var _h = state.height;\n      var _o = state.viewOffset.slice(0, 2);\n      _o.some(function (n) {\n        return n;\n      }) ? (_state$camera2 = state.camera).setViewOffset.apply(_state$camera2, [_w, _h].concat(_toConsumableArray(_o), [_w, _h])) : state.camera.clearViewOffset();\n    }\n    if (changedProps.hasOwnProperty('skyRadius') && state.skyRadius) {\n      state.controls.hasOwnProperty('maxDistance') && changedProps.skyRadius && (state.controls.maxDistance = Math.min(state.controls.maxDistance, state.skyRadius));\n      state.camera.far = state.skyRadius * 2.5;\n      state.camera.updateProjectionMatrix();\n      state.skysphere.geometry = new three.SphereGeometry(state.skyRadius);\n    }\n    if (changedProps.hasOwnProperty('backgroundColor')) {\n      var alpha = parseToRgb(state.backgroundColor).alpha;\n      if (alpha === undefined) alpha = 1;\n      state.renderer.setClearColor(new three.Color(opacify(1, state.backgroundColor)), alpha);\n    }\n    if (changedProps.hasOwnProperty('backgroundImageUrl')) {\n      if (!state.backgroundImageUrl) {\n        state.skysphere.visible = false;\n        state.skysphere.material.map = null;\n        !state.loadComplete && finishLoad();\n      } else {\n        new three.TextureLoader().load(state.backgroundImageUrl, function (texture) {\n          texture.colorSpace = three.SRGBColorSpace;\n          state.skysphere.material = new three.MeshBasicMaterial({\n            map: texture,\n            side: three.BackSide\n          });\n          state.skysphere.visible = true;\n\n          // triggered when background image finishes loading (asynchronously to allow 1 frame to load texture)\n          state.onBackgroundImageLoaded && setTimeout(state.onBackgroundImageLoaded);\n          !state.loadComplete && finishLoad();\n        });\n      }\n    }\n    changedProps.hasOwnProperty('showNavInfo') && (state.navInfo.style.display = state.showNavInfo ? null : 'none');\n    if (changedProps.hasOwnProperty('lights')) {\n      (changedProps.lights || []).forEach(function (light) {\n        return state.scene.remove(light);\n      }); // Clear the place\n      state.lights.forEach(function (light) {\n        return state.scene.add(light);\n      }); // Add to scene\n    }\n    if (changedProps.hasOwnProperty('objects')) {\n      (changedProps.objects || []).forEach(function (obj) {\n        return state.scene.remove(obj);\n      }); // Clear the place\n      state.objects.forEach(function (obj) {\n        return state.scene.add(obj);\n      }); // Add to scene\n    }\n\n    //\n\n    function finishLoad() {\n      state.loadComplete = state.scene.visible = true;\n    }\n  }\n});\n\nexport { threeRenderObjects as default };\n","import { REVISION, Vector2, DirectionalLight, AmbientLight } from 'three';\nimport { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer.js';\nimport ThreeGlobe from 'three-globe';\nimport ThreeRenderObjects from 'three-render-objects';\nimport accessorFn from 'accessor-fn';\nimport Kapsule from 'kapsule';\nimport { Group, Tween, Easing } from '@tweenjs/tween.js';\n\nfunction styleInject(css, ref) {\n  if (ref === void 0) ref = {};\n  var insertAt = ref.insertAt;\n  if (typeof document === 'undefined') {\n    return;\n  }\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css_248z = \".scene-container .clickable {\\n  cursor: pointer;\\n}\";\nstyleInject(css_248z);\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), true).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = _objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nfunction linkKapsule (kapsulePropName, kapsuleType) {\n  var dummyK = new kapsuleType(); // To extract defaults\n  dummyK._destructor && dummyK._destructor();\n  return {\n    linkProp: function linkProp(prop) {\n      // link property config\n      return {\n        \"default\": dummyK[prop](),\n        onChange: function onChange(v, state) {\n          state[kapsulePropName][prop](v);\n        },\n        triggerUpdate: false\n      };\n    },\n    linkMethod: function linkMethod(method) {\n      // link method pass-through\n      return function (state) {\n        var kapsuleInstance = state[kapsulePropName];\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        var returnVal = kapsuleInstance[method].apply(kapsuleInstance, args);\n        return returnVal === kapsuleInstance ? this // chain based on the parent object, not the inner kapsule\n        : returnVal;\n      };\n    }\n  };\n}\n\nvar _excluded = [\"rendererConfig\", \"waitForGlobeReady\"];\nvar THREE = _objectSpread2(_objectSpread2({}, window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n  AmbientLight: AmbientLight,\n  DirectionalLight: DirectionalLight,\n  Vector2: Vector2,\n  REVISION: REVISION\n}), {}, {\n  CSS2DRenderer: CSS2DRenderer\n});\n\n//\n\n// Expose config from ThreeGlobe\nvar bindGlobe = linkKapsule('globe', ThreeGlobe);\nvar linkedGlobeProps = Object.assign.apply(Object, _toConsumableArray(['globeImageUrl', 'bumpImageUrl', 'globeTileEngineUrl', 'globeTileEngineMaxLevel', 'globeCurvatureResolution', 'showGlobe', 'showGraticules', 'showAtmosphere', 'atmosphereColor', 'atmosphereAltitude', 'onGlobeReady', 'pointsData', 'pointLat', 'pointLng', 'pointColor', 'pointAltitude', 'pointRadius', 'pointResolution', 'pointsMerge', 'pointsTransitionDuration', 'arcsData', 'arcStartLat', 'arcStartLng', 'arcStartAltitude', 'arcEndLat', 'arcEndLng', 'arcEndAltitude', 'arcColor', 'arcAltitude', 'arcAltitudeAutoScale', 'arcStroke', 'arcCurveResolution', 'arcCircularResolution', 'arcDashLength', 'arcDashGap', 'arcDashInitialGap', 'arcDashAnimateTime', 'arcsTransitionDuration', 'polygonsData', 'polygonGeoJsonGeometry', 'polygonCapColor', 'polygonCapMaterial', 'polygonSideColor', 'polygonSideMaterial', 'polygonStrokeColor', 'polygonAltitude', 'polygonCapCurvatureResolution', 'polygonsTransitionDuration', 'pathsData', 'pathPoints', 'pathPointLat', 'pathPointLng', 'pathPointAlt', 'pathResolution', 'pathColor', 'pathStroke', 'pathDashLength', 'pathDashGap', 'pathDashInitialGap', 'pathDashAnimateTime', 'pathTransitionDuration', 'heatmapsData', 'heatmapPoints', 'heatmapPointLat', 'heatmapPointLng', 'heatmapPointWeight', 'heatmapBandwidth', 'heatmapColorFn', 'heatmapColorSaturation', 'heatmapBaseAltitude', 'heatmapTopAltitude', 'heatmapsTransitionDuration', 'hexBinPointsData', 'hexBinPointLat', 'hexBinPointLng', 'hexBinPointWeight', 'hexBinResolution', 'hexMargin', 'hexTopCurvatureResolution', 'hexTopColor', 'hexSideColor', 'hexAltitude', 'hexBinMerge', 'hexTransitionDuration', 'hexPolygonsData', 'hexPolygonGeoJsonGeometry', 'hexPolygonColor', 'hexPolygonAltitude', 'hexPolygonResolution', 'hexPolygonMargin', 'hexPolygonUseDots', 'hexPolygonCurvatureResolution', 'hexPolygonDotResolution', 'hexPolygonsTransitionDuration', 'tilesData', 'tileLat', 'tileLng', 'tileAltitude', 'tileWidth', 'tileHeight', 'tileUseGlobeProjection', 'tileMaterial', 'tileCurvatureResolution', 'tilesTransitionDuration', 'particlesData', 'particlesList', 'particleLat', 'particleLng', 'particleAltitude', 'particlesSize', 'particlesSizeAttenuation', 'particlesColor', 'particlesTexture', 'ringsData', 'ringLat', 'ringLng', 'ringAltitude', 'ringColor', 'ringResolution', 'ringMaxRadius', 'ringPropagationSpeed', 'ringRepeatPeriod', 'labelsData', 'labelLat', 'labelLng', 'labelAltitude', 'labelRotation', 'labelText', 'labelSize', 'labelTypeFace', 'labelColor', 'labelResolution', 'labelIncludeDot', 'labelDotRadius', 'labelDotOrientation', 'labelsTransitionDuration', 'htmlElementsData', 'htmlLat', 'htmlLng', 'htmlAltitude', 'htmlElement', 'htmlElementVisibilityModifier', 'htmlTransitionDuration', 'objectsData', 'objectLat', 'objectLng', 'objectAltitude', 'objectRotation', 'objectFacesSurface', 'objectThreeObject', 'customLayerData', 'customThreeObject', 'customThreeObjectUpdate'].map(function (p) {\n  return _defineProperty({}, p, bindGlobe.linkProp(p));\n})));\nvar linkedGlobeMethods = Object.assign.apply(Object, _toConsumableArray(['globeMaterial', 'globeTileEngineClearCache', 'getGlobeRadius', 'getCoords', 'toGeoCoords'].map(function (p) {\n  return _defineProperty({}, p, bindGlobe.linkMethod(p));\n})));\n\n// Expose config from renderObjs\nvar bindRenderObjs = linkKapsule('renderObjs', ThreeRenderObjects);\nvar linkedRenderObjsProps = Object.assign.apply(Object, _toConsumableArray(['width', 'height', 'backgroundColor', 'backgroundImageUrl', 'enablePointerInteraction'].map(function (p) {\n  return _defineProperty({}, p, bindRenderObjs.linkProp(p));\n})));\nvar linkedRenderObjsMethods = Object.assign.apply(Object, _toConsumableArray(['lights', 'postProcessingComposer'].map(function (p) {\n  return _defineProperty({}, p, bindRenderObjs.linkMethod(p));\n})));\n\n//\n\nvar globe = Kapsule({\n  props: _objectSpread2(_objectSpread2({\n    onZoom: {\n      triggerUpdate: false\n    },\n    onGlobeClick: {\n      triggerUpdate: false\n    },\n    onGlobeRightClick: {\n      triggerUpdate: false\n    },\n    pointLabel: {\n      \"default\": 'name',\n      triggerUpdate: false\n    },\n    onPointClick: {\n      triggerUpdate: false\n    },\n    onPointRightClick: {\n      triggerUpdate: false\n    },\n    onPointHover: {\n      triggerUpdate: false\n    },\n    arcLabel: {\n      \"default\": 'name',\n      triggerUpdate: false\n    },\n    onArcClick: {\n      triggerUpdate: false\n    },\n    onArcRightClick: {\n      triggerUpdate: false\n    },\n    onArcHover: {\n      triggerUpdate: false\n    },\n    polygonLabel: {\n      \"default\": 'name',\n      triggerUpdate: false\n    },\n    onPolygonClick: {\n      triggerUpdate: false\n    },\n    onPolygonRightClick: {\n      triggerUpdate: false\n    },\n    onPolygonHover: {\n      triggerUpdate: false\n    },\n    pathLabel: {\n      \"default\": 'name',\n      triggerUpdate: false\n    },\n    onPathClick: {\n      triggerUpdate: false\n    },\n    onPathRightClick: {\n      triggerUpdate: false\n    },\n    onPathHover: {\n      triggerUpdate: false\n    },\n    onHeatmapClick: {\n      triggerUpdate: false\n    },\n    onHeatmapRightClick: {\n      triggerUpdate: false\n    },\n    onHeatmapHover: {\n      triggerUpdate: false\n    },\n    hexLabel: {\n      triggerUpdate: false\n    },\n    onHexClick: {\n      triggerUpdate: false\n    },\n    onHexRightClick: {\n      triggerUpdate: false\n    },\n    onHexHover: {\n      triggerUpdate: false\n    },\n    hexPolygonLabel: {\n      triggerUpdate: false\n    },\n    onHexPolygonClick: {\n      triggerUpdate: false\n    },\n    onHexPolygonRightClick: {\n      triggerUpdate: false\n    },\n    onHexPolygonHover: {\n      triggerUpdate: false\n    },\n    tileLabel: {\n      \"default\": 'name',\n      triggerUpdate: false\n    },\n    onTileClick: {\n      triggerUpdate: false\n    },\n    onTileRightClick: {\n      triggerUpdate: false\n    },\n    onTileHover: {\n      triggerUpdate: false\n    },\n    particleLabel: {\n      \"default\": 'name',\n      triggerUpdate: false\n    },\n    onParticleClick: {\n      triggerUpdate: false\n    },\n    onParticleRightClick: {\n      triggerUpdate: false\n    },\n    onParticleHover: {\n      triggerUpdate: false\n    },\n    labelLabel: {\n      triggerUpdate: false\n    },\n    onLabelClick: {\n      triggerUpdate: false\n    },\n    onLabelRightClick: {\n      triggerUpdate: false\n    },\n    onLabelHover: {\n      triggerUpdate: false\n    },\n    objectLabel: {\n      \"default\": 'name',\n      triggerUpdate: false\n    },\n    onObjectClick: {\n      triggerUpdate: false\n    },\n    onObjectRightClick: {\n      triggerUpdate: false\n    },\n    onObjectHover: {\n      triggerUpdate: false\n    },\n    customLayerLabel: {\n      \"default\": 'name',\n      triggerUpdate: false\n    },\n    onCustomLayerClick: {\n      triggerUpdate: false\n    },\n    onCustomLayerRightClick: {\n      triggerUpdate: false\n    },\n    onCustomLayerHover: {\n      triggerUpdate: false\n    },\n    pointerEventsFilter: {\n      \"default\": function _default() {\n        return true;\n      },\n      triggerUpdate: false\n    },\n    lineHoverPrecision: {\n      \"default\": 0.2,\n      triggerUpdate: false,\n      onChange: function onChange(val, state) {\n        state.renderObjs.lineHoverPrecision(val);\n        state.renderObjs.pointsHoverPrecision(val);\n      }\n    },\n    showPointerCursor: {\n      \"default\": true,\n      triggerUpdate: false\n    },\n    globeOffset: {\n      \"default\": [0, 0],\n      triggerUpdate: false,\n      onChange: function onChange(o, state) {\n        return Array.isArray(o) && o.length === 2 && state.renderObjs.viewOffset(o.map(function (v) {\n          return -v;\n        }));\n      }\n    }\n  }, linkedGlobeProps), linkedRenderObjsProps),\n  methods: _objectSpread2(_objectSpread2({\n    pauseAnimation: function pauseAnimation(state) {\n      var _state$globe;\n      if (state.animationFrameRequestId !== null) {\n        cancelAnimationFrame(state.animationFrameRequestId);\n        state.animationFrameRequestId = null;\n      }\n      (_state$globe = state.globe) === null || _state$globe === void 0 || _state$globe.pauseAnimation();\n      return this;\n    },\n    resumeAnimation: function resumeAnimation(state) {\n      var _state$globe2;\n      if (state.animationFrameRequestId === null) {\n        this._animationCycle();\n      }\n      (_state$globe2 = state.globe) === null || _state$globe2 === void 0 || _state$globe2.resumeAnimation();\n      return this;\n    },\n    _animationCycle: function _animationCycle(state) {\n      // Frame cycle\n      state.renderObjs.tick();\n      state.tweenGroup.update();\n      state.animationFrameRequestId = requestAnimationFrame(this._animationCycle);\n    },\n    pointOfView: function pointOfView(state) {\n      var geoCoords = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var transitionDuration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n      var curGeoCoords = getGeoCoords();\n\n      // Getter\n      if (geoCoords.lat === undefined && geoCoords.lng === undefined && geoCoords.altitude === undefined) {\n        return curGeoCoords;\n      } else {\n        var _state$povTween;\n        // Setter\n        var finalGeoCoords = Object.assign({}, curGeoCoords, geoCoords);\n        ['lat', 'lng', 'altitude'].forEach(function (p) {\n          return finalGeoCoords[p] = +finalGeoCoords[p];\n        }); // coerce coords to number\n\n        (_state$povTween = state.povTween) === null || _state$povTween === void 0 || _state$povTween.end(); // cancel any ongoing pov animation\n\n        if (!transitionDuration) {\n          // no animation\n          setCameraPos(finalGeoCoords);\n        } else {\n          // Avoid rotating more than 180deg longitude\n          while (curGeoCoords.lng - finalGeoCoords.lng > 180) curGeoCoords.lng -= 360;\n          while (curGeoCoords.lng - finalGeoCoords.lng < -180) curGeoCoords.lng += 360;\n          state.tweenGroup.add(state.povTween = new Tween(curGeoCoords).to(finalGeoCoords, transitionDuration).easing(Easing.Cubic.InOut).onUpdate(setCameraPos).onComplete(function () {\n            state.povTween = undefined;\n            state.tweenGroup.remove(this);\n          }).start());\n        }\n        return this;\n      }\n\n      //\n\n      function getGeoCoords() {\n        return state.globe.toGeoCoords(state.renderObjs.cameraPosition());\n      }\n      function setCameraPos(_ref5) {\n        var lat = _ref5.lat,\n          lng = _ref5.lng,\n          altitude = _ref5.altitude;\n        state.renderObjs.cameraPosition(state.globe.getCoords(lat, lng, altitude));\n        state.globe.setPointOfView(state.renderObjs.camera()); // report position to globe\n      }\n    },\n    getScreenCoords: function getScreenCoords(state) {\n      var _state$globe3;\n      for (var _len = arguments.length, geoCoords = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        geoCoords[_key - 1] = arguments[_key];\n      }\n      var cartesianCoords = (_state$globe3 = state.globe).getCoords.apply(_state$globe3, geoCoords);\n      return state.renderObjs.getScreenCoords(cartesianCoords.x, cartesianCoords.y, cartesianCoords.z);\n    },\n    toGlobeCoords: function toGlobeCoords(state, x, y) {\n      var globeIntersects = state.renderObjs.intersectingObjects(x, y).find(function (d) {\n        return (d.object.__globeObjType || d.object.parent.__globeObjType) === 'globe';\n      });\n      if (!globeIntersects) return null; // coords outside globe\n\n      var _state$globe$toGeoCoo = state.globe.toGeoCoords(globeIntersects.point),\n        lat = _state$globe$toGeoCoo.lat,\n        lng = _state$globe$toGeoCoo.lng;\n      return {\n        lat: lat,\n        lng: lng\n      };\n    },\n    scene: function scene(state) {\n      return state.renderObjs.scene();\n    },\n    // Expose scene\n    camera: function camera(state) {\n      return state.renderObjs.camera();\n    },\n    // Expose camera\n    renderer: function renderer(state) {\n      return state.renderObjs.renderer();\n    },\n    // Expose renderer\n    controls: function controls(state) {\n      return state.renderObjs.controls();\n    },\n    // Expose controls\n    _destructor: function _destructor(state) {\n      this.pauseAnimation();\n      this.pointsData([]);\n      this.arcsData([]);\n      this.polygonsData([]);\n      this.pathsData([]);\n      this.heatmapsData([]);\n      this.hexBinPointsData([]);\n      this.hexPolygonsData([]);\n      this.tilesData([]);\n      this.particlesData([]);\n      this.labelsData([]);\n      this.htmlElementsData([]);\n      this.objectsData([]);\n      this.customLayerData([]);\n      state.globe._destructor();\n      state.renderObjs._destructor();\n    }\n  }, linkedGlobeMethods), linkedRenderObjsMethods),\n  stateInit: function stateInit(_ref6) {\n    var rendererConfig = _ref6.rendererConfig,\n      _ref6$waitForGlobeRea = _ref6.waitForGlobeReady,\n      waitForGlobeReady = _ref6$waitForGlobeRea === void 0 ? true : _ref6$waitForGlobeRea,\n      globeInitConfig = _objectWithoutProperties(_ref6, _excluded);\n    var globe = new ThreeGlobe(_objectSpread2({\n      waitForGlobeReady: waitForGlobeReady\n    }, globeInitConfig));\n    return {\n      globe: globe,\n      renderObjs: ThreeRenderObjects({\n        controlType: 'orbit',\n        rendererConfig: rendererConfig,\n        waitForLoadComplete: waitForGlobeReady,\n        extraRenderers: [new THREE.CSS2DRenderer()] // Used in HTML elements layer\n      }).skyRadius(globe.getGlobeRadius() * 500).showNavInfo(false).objects([globe]) // Populate scene\n      .lights([new THREE.AmbientLight(0xcccccc, Math.PI), new THREE.DirectionalLight(0xffffff, 0.6 * Math.PI)]),\n      tweenGroup: new Group()\n    };\n  },\n  init: function init(domNode, state) {\n    var _this = this;\n    // Wipe DOM\n    domNode.innerHTML = '';\n\n    // Add relative container\n    domNode.appendChild(state.container = document.createElement('div'));\n    state.container.style.position = 'relative';\n\n    // Add renderObjs\n    var roDomNode = document.createElement('div');\n    state.container.appendChild(roDomNode);\n    state.renderObjs(roDomNode);\n\n    // inject renderer size on three-globe\n    state.globe.rendererSize(state.renderObjs.renderer().getSize(new THREE.Vector2()));\n\n    // set initial distance\n    this.pointOfView({\n      altitude: 2.5\n    });\n\n    // calibrate orbit controls\n    var globeR = state.globe.getGlobeRadius();\n    var controls = state.renderObjs.controls();\n    state.renderObjs.camera().near = 0.05; // less will start causing depth z-fighting issues\n    controls.minDistance = globeR + Math.max(0.001, state.renderObjs.camera().near * 1.1); // just above the surface, as much as camera near plane permits\n    controls.maxDistance = globeR * 100;\n    controls.enablePan = false;\n    controls.enableDamping = true;\n    controls.dampingFactor = 0.1;\n    controls.rotateSpeed = 0.3;\n    controls.zoomSpeed = 0.3;\n    controls.zoomToCursor = true;\n    controls.addEventListener('change', function () {\n      controls.target.setScalar(0); // Keep orbit target on center\n\n      // adjust controls speed based on altitude\n      var pov = _this.pointOfView();\n      controls.rotateSpeed = pov.altitude * 0.3;\n      controls.zoomSpeed = Math.sqrt(pov.altitude) * 0.5;\n\n      // Update three-globe pov when camera moves, for proper hiding of elements\n      state.globe.setPointOfView(state.renderObjs.camera());\n      state.onZoom && state.onZoom(pov);\n    });\n\n    // config renderObjs\n    var getGlobeObj = function getGlobeObj(object) {\n      var obj = object;\n      // recurse up object chain until finding the globe object\n      while (obj && !obj.hasOwnProperty('__globeObjType')) {\n        obj = obj.parent;\n      }\n      return obj;\n    };\n    var dataAccessors = {\n      point: function point(d) {\n        return d;\n      },\n      arc: function arc(d) {\n        return d;\n      },\n      polygon: function polygon(d) {\n        return d.data;\n      },\n      path: function path(d) {\n        return d;\n      },\n      heatmap: function heatmap(d) {\n        return d;\n      },\n      hexbin: function hexbin(d) {\n        return d;\n      },\n      hexPolygon: function hexPolygon(d) {\n        return d;\n      },\n      tile: function tile(d) {\n        return d;\n      },\n      particles: function particles(d, intersection) {\n        return !intersection || !intersection.hasOwnProperty('index') || d.length <= intersection.index ? d : d[intersection.index];\n      },\n      label: function label(d) {\n        return d;\n      },\n      object: function object(d) {\n        return d;\n      },\n      custom: function custom(d) {\n        return d;\n      }\n    };\n    THREE.REVISION < 155 && (state.renderObjs.renderer().useLegacyLights = false); // force behavior of three < 155\n    state.renderObjs.hoverFilter(function (obj) {\n      var o = getGlobeObj(obj);\n\n      // ignore non-globe objects\n      if (!o) return false;\n      var type = o.__globeObjType;\n      if (type !== 'globe' && !dataAccessors.hasOwnProperty(type)) return false; // Ignore obj types with no data\n      var d = dataAccessors.hasOwnProperty(type) && o.__data ? dataAccessors[type](o.__data) : null;\n\n      // Ignore merged geometry objects that don't have interaction per point\n      if (['points', 'hexBinPoints'].some(function (t) {\n        return t === type;\n      }) && Array.isArray(d)) return false;\n      return state.pointerEventsFilter(o, d);\n    }).tooltipContent(function (obj, intersection) {\n      var objAccessors = {\n        point: state.pointLabel,\n        arc: state.arcLabel,\n        polygon: state.polygonLabel,\n        path: state.pathLabel,\n        hexbin: state.hexLabel,\n        hexPolygon: state.hexPolygonLabel,\n        tile: state.tileLabel,\n        particles: state.particleLabel,\n        label: state.labelLabel,\n        object: state.objectLabel,\n        custom: state.customLayerLabel\n      };\n      var globeObj = getGlobeObj(obj);\n      var objType = globeObj && globeObj.__globeObjType;\n      return globeObj && objType && objAccessors.hasOwnProperty(objType) && dataAccessors.hasOwnProperty(objType) ? accessorFn(objAccessors[objType])(dataAccessors[objType](globeObj.__data, intersection)) || '' : '';\n    }).onHover(function (obj, _, intersection) {\n      // Update tooltip and trigger onHover events\n      var hoverObjFns = {\n        point: state.onPointHover,\n        arc: state.onArcHover,\n        polygon: state.onPolygonHover,\n        path: state.onPathHover,\n        heatmap: state.onHeatmapHover,\n        hexbin: state.onHexHover,\n        hexPolygon: state.onHexPolygonHover,\n        tile: state.onTileHover,\n        particles: state.onParticleHover,\n        label: state.onLabelHover,\n        object: state.onObjectHover,\n        custom: state.onCustomLayerHover\n      };\n      var clickObjFns = {\n        globe: state.onGlobeClick,\n        point: state.onPointClick,\n        arc: state.onArcClick,\n        polygon: state.onPolygonClick,\n        path: state.onPathClick,\n        heatmap: state.onHeatmapClick,\n        hexbin: state.onHexClick,\n        hexPolygon: state.onHexPolygonClick,\n        tile: state.onTileClick,\n        particles: state.onParticleClick,\n        label: state.onLabelClick,\n        object: state.onObjectClick,\n        custom: state.onCustomLayerClick\n      };\n      var hoverObj = getGlobeObj(obj);\n\n      // ignore non-recognised obj types\n      hoverObj && !hoverObjFns.hasOwnProperty(hoverObj.__globeObjType) && (hoverObj = null);\n      if (hoverObj !== state.hoverObj) {\n        var _hoverObj;\n        var prevObjType = state.hoverObj ? state.hoverObj.__globeObjType : null;\n        var prevObjData = state.hoverData;\n        var objType = hoverObj ? hoverObj.__globeObjType : null;\n        var objData = (_hoverObj = hoverObj) !== null && _hoverObj !== void 0 && _hoverObj.__data ? dataAccessors[objType](hoverObj.__data, intersection) : null;\n        if (prevObjType && prevObjType !== objType) {\n          // Hover out\n          hoverObjFns[prevObjType] && hoverObjFns[prevObjType](null, prevObjData || null);\n        }\n        if (objType) {\n          // Hover in\n          hoverObjFns[objType] && hoverObjFns[objType](objData, prevObjType === objType ? prevObjData : null);\n        }\n\n        // set pointer if hovered object is clickable\n        state.renderObjs.renderer().domElement.classList[objType && clickObjFns[objType] && accessorFn(state.showPointerCursor)(objType, objData) ? 'add' : 'remove']('clickable');\n        state.hoverObj = hoverObj;\n        state.hoverData = objData;\n      }\n    }).onClick(function (obj, ev, intersection) {\n      if (!obj) return; // ignore background clicks\n\n      // Handle click events on objects\n      var objFns = {\n        globe: state.onGlobeClick,\n        point: state.onPointClick,\n        arc: state.onArcClick,\n        polygon: state.onPolygonClick,\n        path: state.onPathClick,\n        heatmap: state.onHeatmapClick,\n        hexbin: state.onHexClick,\n        hexPolygon: state.onHexPolygonClick,\n        tile: state.onTileClick,\n        particles: state.onParticleClick,\n        label: state.onLabelClick,\n        object: state.onObjectClick,\n        custom: state.onCustomLayerClick\n      };\n      var globeObj = getGlobeObj(obj);\n      var objType = globeObj.__globeObjType;\n      if (globeObj && objFns.hasOwnProperty(objType) && objFns[objType]) {\n        var args = [ev];\n\n        // include click coords\n        var point = intersection !== null && intersection !== void 0 && intersection.isVector3 ? intersection : intersection === null || intersection === void 0 ? void 0 : intersection.point;\n        if (objType === 'globe') {\n          var _this$toGeoCoords = _this.toGeoCoords(point),\n            lat = _this$toGeoCoords.lat,\n            lng = _this$toGeoCoords.lng;\n          args.unshift({\n            lat: lat,\n            lng: lng\n          });\n        } else {\n          args.push(_this.toGeoCoords(point));\n        }\n        dataAccessors.hasOwnProperty(objType) && args.unshift(dataAccessors[objType](globeObj.__data, intersection));\n        objFns[objType].apply(objFns, args);\n      }\n    }).onRightClick(function (obj, ev, intersection) {\n      if (!obj) return; // ignore background clicks\n\n      // Handle right-click events\n      var objFns = {\n        globe: state.onGlobeRightClick,\n        point: state.onPointRightClick,\n        arc: state.onArcRightClick,\n        polygon: state.onPolygonRightClick,\n        path: state.onPathRightClick,\n        heatmap: state.onHeatmapRightClick,\n        hexbin: state.onHexRightClick,\n        hexPolygon: state.onHexPolygonRightClick,\n        tile: state.onTileRightClick,\n        particles: state.onParticleRightClick,\n        label: state.onLabelRightClick,\n        object: state.onObjectRightClick,\n        custom: state.onCustomLayerRightClick\n      };\n      var globeObj = getGlobeObj(obj);\n      var objType = globeObj.__globeObjType;\n      if (globeObj && objFns.hasOwnProperty(objType) && objFns[objType]) {\n        var args = [ev];\n\n        // include click coords\n        var point = intersection !== null && intersection !== void 0 && intersection.isVector3 ? intersection : intersection === null || intersection === void 0 ? void 0 : intersection.point;\n        if (objType === 'globe') {\n          var _this$toGeoCoords2 = _this.toGeoCoords(point),\n            lat = _this$toGeoCoords2.lat,\n            lng = _this$toGeoCoords2.lng;\n          args.unshift({\n            lat: lat,\n            lng: lng\n          });\n        } else {\n          args.push(_this.toGeoCoords(point));\n        }\n        dataAccessors.hasOwnProperty(objType) && args.unshift(dataAccessors[objType](globeObj.__data, intersection));\n        objFns[objType].apply(objFns, args);\n      }\n    });\n\n    //\n\n    // Kick-off renderer\n    this._animationCycle();\n  }\n});\n\nexport { globe as default };\n"],"version":3,"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326]}