c="";elseif(c+=f,"("===f)d++;elseif(")"===f&&(d--,d===-1))thrownewError("unbalanced parenthsis")}returnb.push(c),b}functionl(a,b,c){vard=B[b];if(d)returnd(a,c);vare=b.match(q);if(e){varf=parseInt(e[2]||256);return(0===f||f>256||f%8!==0)&&o.throwError("invalid "+e[1]+" bit length",o.INVALID_ARGUMENT,{arg:"type",value:b}),u(a,f/8,"int"===e[1],c)}vare=b.match(p);if(e){varf=parseInt(e[1]);return(0===f||f>32)&&o.throwError("invalid bytes length",o.INVALID_ARGUMENT,{arg:"type",value:b}),x(a,f,c)}vare=b.match(r);if(e){varf=parseInt(e[2]||-1);returni(a,l(a,e[1],c),f,c)}if("tuple("===b.substring(0,6)&&")"===b.substring(b.length-1)){varg=[],h=[];returnc&&"object"==typeofc&&(Array.isArray(c.names)&&(h=c.names),"string"==typeofc.name&&(c=c.name)),k(b.substring(6,b.length-1)).forEach(function(b,c){g.push(l(a,b,h[c]))}),j(a,g,c)}return""===b?t(a):voido.throwError("invalid type",o.INVALID_ARGUMENT,{arg:"type",value:b})}functionm(a){if(!(thisinstanceofm))thrownewError("missing new");a||(a=s),n.defineProperty(this,"coerceFunc",a)}varn=function(){varb=a("../utils/convert.js"),c=a("../utils/utf8.js");return{defineProperty:a("../utils/properties.js").defineProperty,arrayify:b.arrayify,padZeros:b.padZeros,bigNumberify:a("../utils/bignumber.js").bigNumberify,getAddress:a("../utils/address").getAddress,concat:b.concat,toUtf8Bytes:c.toUtf8Bytes,toUtf8String:c.toUtf8String,hexlify:b.hexlify}}(),o=a("./errors"),p=newRegExp(/^bytes([0-9]*)$/),q=newRegExp(/^(u?int)([0-9]*)$/),r=newRegExp(/^(.*)\[([0-9]*)\]$/),s=function(a,b){varc=a.match(q);returnc&&parseInt(c[2])<=48?b.toNumber():b},t=function(a){return{name:"null",type:"",encode:function(a){returnn.arrayify([])},decode:function(b,c){if(c>b.length)thrownewError("invalid null");return{consumed:0,value:a("null",void0)}},dynamic:!1}},u=function(a,b,c,d){vare=(c?"int":"uint")+8*b;return{localName:d,name:e,type:e,encode:function(a){try{a=n.bigNumberify(a)}catch(e){o.throwError("invalid number value",o.INVALID_ARGUMENT,{arg:d,type:typeofa,value:a})}returna=a.toTwos(8*b).maskn(8*b),c&&(a=a.fromTwos(8*b).toTwos(256)),n.padZeros(n.arrayify(a),32)},decode:function(f,g){f.length<g+32&&o.throwError("insufficient data for "+e+" type",o.INVALID_ARGUMENT,{arg:d,coderType:e,value:n.hexlify(f.slice(g,g+32))});varh=32-b,i=n.bigNumberify(f.slice(g+h,g+32));returni=c?i.fromTwos(8*b):i.maskn(8*b),{consumed:32,value:a(e,i)}}}},v=u(function(a,b){returnb},32,!1),w=function(a,b){return{localName:b,name:"boolean",type:"boolean",encode:function(a){returnv.encode(a?1:0)},decode:function(c,d){try{vare=v.decode(c,d)}catch(f){throw"insufficient data for uint256 type"===f.reason&&o.throwError("insufficient data for boolean type",o.INVALID_ARGUMENT,{arg:b,coderType:"boolean",value:f.value}),f}return{consumed:e.consumed,value:a("boolean",!e.value.isZero())}}}},x=function(a,b,c){vard="bytes"+b;return{localName:c,name:d,type:d,encode:function(a){try{a=n.arrayify(a)}catch(e){o.throwError("invalid "+d+" value",o.INVALID_ARGUMENT,{arg:c,type:typeofa,value:e.value})}if(32===b)returna;varf=newUint8Array(32);returnf.set(a),f},decode:function(e,f){returne.length<f+32&&o.throwError("insufficient data for "+d+" type",o.INVALID_ARGUMENT,{arg:c,coderType:d,value:n.hexlify(e.slice(f,f+32))}),{consumed:32,value:a(d,n.hexlify(e.slice(f,f+b)))}}}},y=function(a,b){return{localName:b,name:"address",type:"address",encode:function(a){try{a=n.arrayify(n.getAddress(a))}catch(c){o.throwError("invalid address",o.INVALID_ARGUMENT,{arg:b,type:typeofa,value:a})}vard=newUint8Array(32);returnd.set(a,12),d},decode:function(c,d){returnc.length<d+32&&o.throwError("insufficuent data for address type",o.INVALID_ARGUMENT,{arg:b,coderType:"address",value:n.hexlify(c.slice(d,d+32))}),{consumed:32,value:a("address",n.getAddress(n.hexlify(c.slice(d+12,d+32))))}}}},z=function(a,b){return{localName:b,name:"bytes",type:"bytes",encode:function(a){try{a=n.arrayify(a)}catch(c){o.throwError("invalid bytes value",o.INVALID_ARGUMENT,{arg:b,type:typeofa,value:c.value})}returnd(a)},decode:function(c,d){varf=e(c,d,b);retur